精彩回顾|模糊测试技术(Fuzzing)研究精彩浅析

不可否认,智能模糊测试技术将重新定义开发安全新范式,覆盖更多应用场景、为业务安全赋能。模糊测试技术将是众多企业践行DevSecOps敏捷开发过程中的重要一环,让安全左移更智能。

中国信通院、云上软件工程社区和混沌工程实验室联合举办的以“模糊测试确定性质量”为主题的软件质效MeetUp沙龙活动中,云起无垠COO、首席布道师郑明基于数年在模糊测试领域的技术研究为大家带来了精彩分享,帮我们更全面的了解模糊测试技术。一起共同推动以模糊测试为代表的系统稳定性技术理念落地、填补技术理论与实践的鸿沟,搭建跨区域开发者、技术决策者的交流学习平台。

精彩回顾|模糊测试技术(Fuzzing)研究精彩浅析_第1张图片
图1 云起无垠技术专家郑明

新时代下的模糊测试

模糊测试技术是近几年国际网络安全顶级会议的热门话题,也是公认的下一代漏洞自动化挖掘手段。随着众多领域专家的深入研究,模糊测试技术不仅在学术层面有着重大突破,在工业界也得到了广泛的认可。作为一种成功的缺陷检测技术,模糊测试备受头部互联网厂商的关注,如Google、微软,包括国内的华为都在模糊测试上有较大的投入。相较于其他缺陷检测技术,Fuzzing不仅可以找到逻辑类漏洞,还能找到内存破坏的漏洞,比如缓冲区溢出、内存泄漏、条件竞争等等。本质原因在于Fuzzing在做软件安全测试的时候,整体的粒度会更细,测试点会更多,判断位置也会更精准,这也是越来越多的企业在逐步引入模糊测试的重要原因。

精彩回顾|模糊测试技术(Fuzzing)研究精彩浅析_第2张图片
图2 模糊测试系统

模糊测试系统由输入生成器、执行器、缺陷监视器等关键组件组成,在检测过程中,由输入生成器生成测试用例,由执行器控制被测对象,由缺陷监视器捕捉触发的异常并且记录下来。这些异常就是潜在的安全缺陷。通常模糊测试有一个种子集,种子就是确定会引发异常的测试用例,新的测试用例是通过种子变异无限循环,发送给执行器控制的被测对象,如果触发异常,这些测试用例就被记录下来,加入到种子集中,再次利用。通过不断的循环尝试,便可以越来越有效的发现漏洞。

模糊测试的三个分类

根据执行过程中观察到的信息量,模糊测试技术可以分为黑盒、灰盒和白盒三类。
精彩回顾|模糊测试技术(Fuzzing)研究精彩浅析_第3张图片
图3 模糊测试的分类

  • 黑盒模糊测试对每个执行的内部状态没有任何了解。其通常通过利用输入格式或不同的输出状态对模糊测试过程进行优化。
  • 白盒模糊测试通常利用动态符号执行来分析目标程序。能够获取每个测试用例执行关联的所有内部知识,使其能够系统地探索目标程序的状态空间。
  • 灰盒模糊测试可获取介于黑盒模糊测试和白盒模糊测试之间的执行状态知识,最常见的执行状态是代码覆盖的信息。很多灰盒模糊测试技术使用边覆盖率作为内部执行状态。使用覆盖率的基本假设是,发现更多的执行状态(例如,新覆盖率)会增加发现缺陷的可能性。有研究结论显示,若代码覆盖率增加1%,错误发现率也将增加0.92%。

除此之外,云起无垠技术专家郑明表示:模糊测试是一种动态检测技术,常常会在软件开发生命周期中发现非常严重的安全漏洞或缺陷,比如崩溃、内存泄露等。云起无垠基于模糊测试的积累研发设计了黑盒协议模糊测试系统和灰盒代码模糊测试系统两款产品。其中黑盒协议模糊测试产品的效果已在多家智能车企得到验证,并已发现数个WiFi与蓝牙协议相关的安全缺陷。另外,白盒代码模糊测试产品可在研发过程中对代码进行安全检测,其零误报、漏洞可自动化复现等特性,帮助多个企事业单位解决了既有开发安全体系“左移”不到位、检测误报率高、漏洞难以验证等核心痛点。

测试用例生成技术的分类

从测试用例生成的角度来看,模糊测试技术可分为基于生成的模糊测试技术和基于变异的模糊测试技术

其中,基于生成的模糊测试技术根据语法或有效语料库从头开始生成输入,就好像从基因到人体的一个成长过程。该技术不进行比特位调度或变异算法调度,而是侧重于从初始规则构造。

基于变异的模糊测试技术对现有的有效果的异常测试用例(称为种子)进行变异,以获得新的测试用例。例如,玉米的基因变异会产生不同形态一样。该技术需要给定一个种子集,执行种子调度、比特位调度和变异算法调度以获得新的测试用例。

归根结底,模糊测试就是构造大量的测试用例并发送给被测系统,进而完成异常检测。

模糊测试技术的先进性

缺陷检测率高、精准度高

目前,人工测试和静态测试是目前最为常见的缺陷检测方式,然而这两种测试方式均存在着明显短板。一方面,用人类有限的时间和经验去覆盖无限的可能宛如愚公移山难以从根本解决问题。而对静态测试而言,按图索骥地通过已知漏洞规则去做模式匹配未知代码,在缺陷检测准确率方面往往差强人意。相比之下,Fuzzing可通过自动化的手段构造海量的测试输入,对应用程序进行无规则测试,该种方法弥补了静态分析、动态分析、污点分析、符号分析等方法的局限性,不仅可以检测已知漏洞,对未知缺陷也有出色的效果。并且无垠代码模糊测试产品采用了静态分析与动态分析相结合的方式,因此所有检出漏洞均可精准定位,误报率近乎为零。

代码覆盖率高、测试粒度细

2013年12月,AFL工具诞生,对于模糊测试技术而言,提升了更多代码的覆盖率。此工具引用了遗传变异算法,通过对应用程序进行插桩,做代码覆盖率收集,插装完成之后在测试的过程中,程序会自动收集信息以检测是否触发安全问题。云起无垠自主研发的无垠代码模糊测试系统可通过观测程序控制流图(CFG)来判定内存破坏的漏洞。这种基于底层逻辑的漏洞检测,也使得任何微小的错误都能被发现,并反馈到代码层,意味着任何位置特征的漏洞都可以被及时发现,进而帮助开发、测试、安全人员快速定位、验证目标工程的代码缺陷,帮助企业提升目标工程代码的安全性及健壮性,助力企业实现“安全左移”。

测试效率高

如前文所述,通常模糊测试有一个种子集(确定会引发异常的测试用例集),通过变异算法,可以将种子变异成海量的测试用例,进而发送给被测程序发现潜在缺陷。因此,种子的质量以及如何高效地指导种子进行变异将直接影响模糊测试的效率。经过数年的科研积累与工程实践,云起无垠不仅积累了一批高质量的种子集,也在变异算法及对测试流程的剪枝算法等方面进行持续优化,大大提升测试效率。

关于模糊测试技术仍有很多需要探索及研究的领域,不难看出,模糊测试技术仍有很多技术点需要突破。作为新一代模糊测试技术领跑者,云起无垠将深耕技术研究,持续完善、打磨产品,为客户提供符合需要的行业、场景解决方案,帮助客户检测应用系统中的安全威胁问题,防患于未然。

你可能感兴趣的:(安全漏洞)