About Graphs of Attacking Surfaces
攻击面可视化
背景与目的
谈下我对攻击面可视化的一点理解,在之前的文章中提到过审计的两种方法:
- 以攻击面为主要维度。
- 以功能为主要维度。 其中以攻击面为主的审计相对来说要轻松一些。
攻击面可视化主要是为了辅助以功能为主的审计,主要目的与好处是:
- 降低信息噪声,将功能为主的审计转化成攻击面为主的审计:功能代码很多,但很多跟安全没有直接关系,通过攻击面可视化可以让我们只关注需要关注的部分,避免淹没在无关的代码中。
- 避免遗漏:当我们对一个复杂的驱动进行审计时,是可能忽视某些基础的攻击面的。通过可视化可以尽量避免这种情况。
- “一图胜千言”:审计的过程是相对枯燥的,通过可视化可以为审计过程增加一些趣味性。
- 把精力用在“刀刃”上:在基础攻击面不遗漏的情况下,可以让我们有更多的精力去发现一些复杂的漏洞,去发现那些需要发散性思维与创造性思维才能发现的漏洞。
- 将经验固化到代码:将我们的个人经验固化到代码中,进而可视化出来。
总之,攻击面可视化并不能直接帮助我们提高审计的上限,主要是为了保证审计的下限。
示例
如上图,我们可以非常直观的看到类的继承层次,对功能有一个大概的了解。在审计时我们只需要关注:
initWithTask
与start
中初始化了哪些成员变量。clientClose
与clientDied
中进行了哪些操作。clientMemoryForType
之前都出过什么类型的漏洞,这里是否存在。getTargetAndMethodForIndex
向用户空间暴露了哪些接口,然后审计这些接口。registerNotificationPort
之前都出过什么类型的漏洞。 当这些基本的问题审计完成后,之后就是发挥你的能力与创造性的时候了。