攻击面可视化

背景与目的

谈下我对攻击面可视化的一点理解,在之前的文章中提到过审计的两种方法:

  1. 以攻击面为主要维度。
  2. 以功能为主要维度。 其中以攻击面为主的审计相对来说要轻松一些。

攻击面可视化主要是为了辅助以功能为主的审计,主要目的与好处是:

  1. 降低信息噪声,将功能为主的审计转化成攻击面为主的审计:功能代码很多,但很多跟安全没有直接关系,通过攻击面可视化可以让我们只关注需要关注的部分,避免淹没在无关的代码中。
  2. 避免遗漏:当我们对一个复杂的驱动进行审计时,是可能忽视某些基础的攻击面的。通过可视化可以尽量避免这种情况。
  3. “一图胜千言”:审计的过程是相对枯燥的,通过可视化可以为审计过程增加一些趣味性。
  4. 把精力用在“刀刃”上:在基础攻击面不遗漏的情况下,可以让我们有更多的精力去发现一些复杂的漏洞,去发现那些需要发散性思维与创造性思维才能发现的漏洞。
  5. 将经验固化到代码:将我们的个人经验固化到代码中,进而可视化出来。

总之,攻击面可视化并不能直接帮助我们提高审计的上限,主要是为了保证审计的下限。

示例

AppleActuatorDriver 如上图,我们可以非常直观的看到类的继承层次,对功能有一个大概的了解。在审计时我们只需要关注:

  • initWithTaskstart 中初始化了哪些成员变量。
  • clientCloseclientDied 中进行了哪些操作。
  • clientMemoryForType 之前都出过什么类型的漏洞,这里是否存在。
  • getTargetAndMethodForIndex 向用户空间暴露了哪些接口,然后审计这些接口。
  • registerNotificationPort 之前都出过什么类型的漏洞。 当这些基本的问题审计完成后,之后就是发挥你的能力与创造性的时候了。