作者:Tim Nosco,Jared Ziegler,Zechariah Clark,Davy Marrero,Todd Finkler,Andrew Barbarello,W. Michael Petullo(上述大佬的阵容太耀眼了,特此放上论文截图)
出处:USENIX 2020
引言
引言第一句发人深省:我们能否建立一个更好的漏洞挖掘过程?
作者们认为虽然现在提出了很多自动化漏洞挖掘技术,但是再自动化的工具总还是需要人去set up啊。精辟!说的太对了!
于是,这篇论文主要关注于漏洞挖掘中的人力过程,具体而言是提出了一个软件选择步骤,他被赋予了一个响亮名字:targeting。首先,正如中二的论文标题(怎么翻译比较好呢:黑客的工业化时代???)所说,鼓励初级黑客用广度优先搜索方法找到潜在的软件目标去用自动化分析工具分析。然后让有经验的黑客把菜鸟黑客自动化分析失败的软件进行深入分析。这样做的好处是让有经验的关注于困难的问题,别的让经验少的来做。这样,所有的黑客都有机会选择适合自己技术水平的目标,团队成员也有明确的成长路线。妙啊!
这篇论文还提供了可重复的实验,实验的重大发现就是广度优先搜索对自动化测试软件的准备阶段有巨大贡献。并且使用这个方法的受试者的信心有了很大的提升!太棒了,这个工作做的!
方法
本来看完引言我就应该撤了,但实在是太好奇了,五一放假前看这篇论文算是提前放假了吧。
这篇论文主要的目的就是提高团队的效率,这个团队特指找软件bug的团队。作者把团队成员分为三组:青铜、铂金、王者。目的是最大限度地提高每个级别的生产力,同时让青铜逐渐变成王者。
- 青铜有基础计算机背景,知道怎么用一些自动化工具。目前还不会改软件,不懂软件的内部构造。
- 铂金可以修改源码或者用二进制补丁去让fuzzing测起来这个程序。
- 王者它可以修改或者自己创造一个工具来更好地测试目标程序。
此外还有领导、分析员、系统支持员等角色。这个方法的流程如下图:
流程
- Targeting
targeting负责挑选要研究的软件。对于大型的软件可以细分成多个组件,构建分阶段的目标。漏洞发现的收益P和成功V的可能性L成正相关和付出的时间T和需要的技术等级S呈负相关。 P = ( L × V ) − ( T × S ) P=(L \times V)-(T \times S) P=(L×V)−(T×S)
在上述公式的指导下,我们就可以最大化收益了! - 信息收集
收集目标的关键信息,如:开发、流行度和已知的当前或以前的缺陷,以及任何已经完成的安全性研究。这样的活就让青铜干就行。 - 程序分析
然后收集和目标的功能和设计相关的信息,从文档、源码、论坛、用户、开发人员那里收集这些信息。这时候青铜可能就是把源代码下下来,然后铂金阅读青铜的笔记,写一个浏览器标出这个程序用到的库、ASLR、不可执行的栈等等信息。 - 攻击面分析
这一步可以理解成构建fuzzing的driver application,这一步先让青铜试试,青铜卡住了就让铂金做,当然青铜写了一些文档,也不是一无是处。等铂金卡住了,就找王者,王者扫了一眼铂金写的文档就可以很快接手。 - 自动化漏洞挖掘
用自动化漏洞工具扫漏洞,按照黑客的经验选合适的自动化漏洞工具,搞成dockerfile的形式。 - 漏洞分析
找到漏洞之后需要验证。 - 漏洞报告
给这个漏洞写一个报告。
深度vs.广度
- 深度优先就是说按照不同的研究方法分给不同的黑客,比如一个人负责静态分析,一个人负责fuzzing。广度优先是说按照黑客的能力分配工作。
- 广度优先,也就是本文中提出方法的优点在于能够在锻炼黑客能力的同时让他们做能做的事情。
总结
看了这篇论文的收获就是看了一篇论文。实验部分的工作表上人家早上8点工作下午4点下班,中午休息一个小时。4点下班可真好。