各类漏洞挖掘方法辨析
林孟尼朗曦科技1周前
朗曦科技
很多人都知道黑盒测试,白盒测试;还有动态分析,静态分析;还有所谓调试.但是,这些技术有什么关系?它们在漏洞挖掘中处于什么地位和作用?还有那些方法?优缺点如何?实际应用如何?
1黑盒/白盒
黑盒测试,是指不了解软件的内部结构,通过外部输入的不同,分析软件的输出反馈,从而判定软件的漏洞.黑盒测试的应用场景是没有源代码,这大大提高了测试的应用范围.
白盒测试通常是指通过分析软件的源代码,取得软件的内部逻辑结构特征,从而分析软件的漏洞.白盒测试的应用场景是有源代码,这大大限制了测试的应用范围.近年出现了二进制代码的白盒分析.
从功效来看,黑盒测试准确,但发现问题不全面,不系统,不能发现深层次的漏洞.同时,黑盒测试的测试用例编写对人员要求也很高.相反,白盒测试分析更全面,更具体.但由于受制于白盒分析工具开发人员的技术水平限制,还有软件分析技术本身的限制,白盒分析的误报率较高.
2动态/静态
动态分析一般是指通过运行程序,发现程序中的漏洞.静态分析则不需要运行程序.显然,黑盒测试属动态分析,白盒测试属静态分析.调试也属动态分析.一般情况下,动态分析受限于运行路径单一,每次只能执行一个路径,显然发现的漏洞的概率就大大减少.而静态分析靠程序算法遍历路径,覆盖率高,发现漏洞的概率大大加大.但与黑盒/白盒一样,动态分析费时,对人工要求高,不能发现深层次\复杂漏洞.静态分析对人工要求相对低,但误报率高.
静态分析有静态的源代码分析和二进制代码分析.当前国内源代码静态分析工具有几家,国外商业化工具也不少,开源工具也有很多,但性能参差不齐.
3典型的分析技术定位分析
3.1调试
首先说调试技术,这在国内漏洞挖掘,恶意代码分析中占主要地位.该技术发现问题准确.但费时,费力,且不能发现深层次复杂问题.毕竟通过调试遍历所有程序路径不可能.
3.2插桩
插桩有静态插桩,也有动态插桩.静态插桩是指在源代码或二进制代码中插入代码,而后在代码运行时看程序的不同反馈.动态插桩是指在程序运行时,暂停程序运行,插入/修改代码,查看程序的反馈.
3.3模糊测试
模糊测试是通过输入不同来分析,其实质仍然是黑盒测试.随着技术的发展,模糊测试也加入了静态分析的元素,具体如借助静态分析找出给定路径的约束,从而实现精准的路径分析.当前模糊测试一般考虑在插桩工具的基础上作分析.
3.4样本分析
顾名思义,样本分析通过匹配代码样本,从而分析漏洞.当然,样本特征可以是源代码,也可以是二进制代码,样本的载体可以是01代码,也可以是系统调用函数,内存/外设操作,也可以是函数序列,二进制代码的指令序列等,还有前两年流行的基于着色图的样本,基因样本分析等等.显而易见,样本分析的先天不足是很难分析全面的内部逻辑结构;此外,对未知漏洞无能为力.要知道,在国家间对抗中,很多未知漏洞可能除了一招制敌时使用外,其它时间是永远不会出现的.
3.5人工智能分析/大数据分析
近两年,人工智能分析/大数据分析很流行.老实说我对此并不了解.但所有分析都要求有数据来源,软件漏洞信息来源无怪乎源代码,二进制代码,需求分析设计文档,通过社会工程等这些方面的信息.但能深入到软件内部发现内部逻辑的信息是最最关键的,特别是二进制代码所展示的内部逻辑.毕竟,软件的最终形式是二进制代码.但是从国内众多人工智能分析/大数据分析的研究机构来看,核心数据来源的采集技术水平还有待提高,否则,人工智能分析/大数据分析只能是无源之水,无本之木.
3.6二进制代码的静态分析
二进制代码的静态分析在国内很少有人提及.究其原因在于其技术含量高,难度复杂.与源代码静态分析相比,二进制代码没有类型信息,没有变量信息,指令操作的逻辑元素单元更小,也就是所谓的粒度更细,这些都为分析增加了难度.此外,二进制分析一般涉及系统软件或后台服务程序,软件本身的逻辑结构复杂,从业人数大大减少.由于二进制分析难度大,现在国内大多以黑盒动态分析为主,效率低,对人工要求高,且不能发现深层次复杂漏洞。但是,二进制代码分析是发现软件漏洞的最重要信息来源,特别是系统底层的软件二进制代码漏洞,显得尤为重要。在网络安全领域,二进制代码分析必将是国内安全漏洞分析从业人员绕不开的坎。
当前国外有少数二进制代码分析工具,一般是静态分析与动态分析结合.在国内,朗曦科技开发了二进制代码静态分析工具crystal,当前仅能分析PE结构的文件,仅能发现除0,堆溢,栈溢,未初始化,各类指针误用等.
朗曦科技 林孟尼
2019/9/29
前面写了关于复杂漏洞的讨论,很多人有疑惑,在此统一回复。更多技术讨论可将 “朗曦科技”微信公众号
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法
最后于 2019-10-10 08:44
被internetH编辑
,原因: