背景

藏在笔记里面很久的一篇总结了,记录了大佬们在吭呲吭呲产出高危漏洞时, 我对着代码不知所措时的心态。

强烈的驱动力

要全面理解一个系统,理解其攻击面和潜在的漏洞,往往是有迹可循的。

我不觉得这个行业是多依赖天赋,我觉得更是依赖勤奋。 跟谈恋爱差不多,你必须花这么多时间在那个系统上,它才会暴露它的脆弱性。

所以必须有强烈的驱动力驱动你去审计各种各样的系统,你必须花很长时间在上面。

我发现有些人的驱动力彷佛是天生的,他们看代码比打游戏还开心,他们可以花很长时间去看代码,即使没有产出。这才是代码审计的顶级天赋。

如果你有这种天赋,请好好珍惜。 但是如果你和我一样没有,也不意味着我们就发现不了漏洞了,只是你要花时间寻找其中的美妙之处。

可以从发现了CVE、拿到了赏金奖励、加强了工作能力、提升社区影响力这几个方面去找。

对我来说,发现一个系统是如何运行的,了解代码是怎么写的,也是比较感兴趣的点。

计划

对我而言,拿到产品立即进行测试会较快地进入心流状态,但往往不是效率最高的状态。能让你很快开始测试的点往往是片面的和浮于水面的, 像是盲人摸象。如果一开始就先关注总体的架构,审计往往会更加全面。

现实中的审计往往也是规定好时间的,我们没法无限制的了解审计组件的代码和功能,只能做出一些妥协。

假如你发花五天来审计一个大型系统,你在最开始就要想好,如何分配时间,往往有下面几点:

  • 了解功能和架构
  • 列出攻击面
  • 攻击面审计
  • 漏洞poc和调试

高手往往计划成竹在胸,他们会尽量对每一块攻击面都尽量进行测试,迅速舍弃不可用的点。(我问他们怎么这么判断这个数据流不行的,他们说之前调试过。 所以说还是更多源于经验)

喜新厌旧

相对于一个曾经见过的系统,对一个全新的没见过的系统,我往往更感兴趣(大概这就是渣男吧)。

但是旧系统往往能发现更多的漏洞。即使你觉得你已经花了时间来进行过代码审计,你觉得没法发现更多问题了。

如果这时其他人在其中发现了漏洞,你往往会觉得沮丧(原来我这么菜吗,怎么我花了这么多时间发现不了漏洞,别人还能发现)

这时候你可能不想去复现别人发现的漏洞了,因为这可能会加深你对自己无能的认知。

这种心态更像是傲慢,切忌存在这种心态。

代码常看常新,肯定会存在没看到的点,这时候复现漏洞查漏补缺是最好的学习方法。

心态

审计一个系统一段时间了, 还没发现漏洞怎么办。 这时候有可能会心态崩溃,主要表现有转向寻找低危漏洞,甚至破罐子破摔:鸟系统,老子不看了。

由于这个行业的长期kpi特性: 没人会在你没法发现一个系统的漏洞时苛责你,但是会在你半年没发现漏洞时责问你。

很可能你这次的放弃没人能发现,但是对自己的技能提升是不妙的。

面对这种情况,转换一段时间的视角往往有效,例如重新去试下功能,总体再梳理攻击面,试试新的扫描器等等。

最重要的是稳住心态。

总结

标题写的是如何成为一个代码审计机器人,其实只要稳住心态,循着有用的方法论去审计代码,就能成为一个无情的挖漏洞机器了。

稳住心态,多看代码,总能发现漏洞,诸君共勉。

参考文档里面放了我非常喜欢的文章,每次进入代码审计困境时都会看看,有强烈的提升信心的效果。

参考