模糊测试技术

2022-01-09-

文章目录

  • 模糊测试技术
    • 预处理
      • 1. 插桩:
      • 2. 符号执行
      • 3. 污点分析
    • 基于AFL的模糊测试方法
    • 输入构造
    • 评估
    • 结果分析
    • 具体应用场景下的模糊测试
      • 物联网中的模糊测试
      • 内核安全中的模糊测试

模糊测试基本流程: 预处理(preprocessing)、输入数据构造(input building)、输入选择(input selection)、评估(evalution)、结果分析(post-fuzzing)

2013年AFL诞生,基于覆盖率引导的模糊测试成为主流方向

AFL 是覆盖率为导向的模糊测试工具,通过插桩的方法,采集输入数据对应的边覆盖率,作为模糊测试种子选取的衡量指标.通过使用进化算法以及精心构造的突变策略

预处理

工作: 搜集目标相关信息并制定模糊测试的策略, 为监控目标在测试中的运行状态做必要的准备.通常依赖于插桩、符号执行以及污点分析这类程序分析技术

搜集目标相关信息,比如目标的输入数据格式、目标的内部结构,并为监控测试中目标的状态变化做必要的准备.该环节面临的挑战是:使用什么程序分析技术,以及模糊测试究竟需要对目标内部信息有多详细的了解

根据模糊测试对程序内部信息分析的程度,现代的模糊测试方法可以划分为3类:黑盒模糊测试 (blackGboxfuzzing)、灰盒模糊测试(greyGboxfuzzing) 和白盒模糊测试(whiteGboxfuzzing)

1. 插桩:

插桩技术通过向目标的代码中合适的位置添加预设好的代码,获得程序的静态或动态执行信息.比如程序的抽象语法树,覆盖率以及函数内变量取值等

动态插桩

动态插桩则是在运行的过程中对运行过的代码 进行插桩.比如利用 QEMU等模拟技术,进行动态插桩,可以获得程序运行时的信息,缺点是资源的开销大

静态插桩

通过 GCC编译器在汇编语言上插 桩,LLVM在生成的中间语言LLVMIR(low level virtual machine intermediate representation)上插桩.优点是节省时间、速度快,缺点是依赖于程序源码.

插桩技术的缺点是会带来资源的开销

2. 符号执行

将程序行为的推理归结为逻辑领域的推理,通过构建一个表示程序执行的逻辑公式,可以同时推断一个程序在不同输入上的行为.

该方法可以使模糊测试获得较好的覆盖率,并可以深入到程序深处,探寻可能存在漏洞的区域

静态符号执行

静态符号执行通常会因为程序中循环和递归的存在,陷入到路径爆炸中,还会因为路径约束中包含诸如取Hash值等操作,导致约束求解失败.由于存在这2种问题,使用较多的是动态符号执行

动态符号执行

动态符号执行通过对程序进行实际执行与符号化执行,维护程序的实际状态和符号化状态,通过将难以求解的约束替换为实际值,缓解了静态符号执行的问题,并按照深度优先的搜索策略对目标程序进行了探索.

存在的问题:

①由于程序分支的存在,路径爆炸的问题仍然存在,程序越复杂, 路径爆炸的问题就越严重.解决的一种办法是通过启发式的方法,选择比较重要的路径进行探索.

②虽然动态符号执行使用实际值替换的方法,解决了一 部分静态符号执行无法绕过的约束,但是也会丢失 一些路径,造成探索结果的不完整.

③所有的符号执行技术都受限于约束求解方法的能力,比如如何处理类似取余操作这样的非线性约束,仍然是符号执行面临的挑战

为了能够将符号执行更好地应用到模糊测试中,近年来诞生了一些工作,

比如Pangolin 通过 [22] 允许符号执行重用之前的计算结果,

Intriguer通 [23]过利用字段级的信息,都实现了对符号执行过程的加速.

ILF[24] 通过使用神经网络,对由符号执行专家生成的大量高质量输入数据进行学习,得到了合适 的模糊测试策略
[22] Huang Heqing,Yao Peisen,Wu Rongxin,et al.Pangolin incremental hybrid fuzzing with polyhedral path abstraction [C]∕∕ Procofthe2020IEEE Sympon Security and Privacy (SP).Piscataway,NJ:IEEE,2020:16131627
[23] Cho M,Kim S,Kwon T.Intriguer field-level constraint solving for hybrid fuzzing [C]∕∕ procofthe2019 ACM SIGSAC Conf on Computer and Communications Security. New York: ACM,2019:515530
[24] He Jingxuan,Balunovi M,AmbroladzeN,et al.Learning to fuzz from symbolic execution with application to smart contracts[C]∕∕Procofthe2019 ACM SIGSAC Conf on Computer and Communications Security.New York:A CM, 2019:531548

3. 污点分析

该技术会观测程序中,哪些程序数据受到了预先准备好的污染源(比如输入)的污染,目的是跟踪污染源和汇聚点(比如有敏感信息的程序数据)之间的信息流

静态污点分析

静态污点分析不需要程序实际运行,通过对程序静态分析,获得程序控制流图、抽象语法树等信息, 依据数据流以及依赖关系进行污点分析;

动态污点分析

动态污点分析则是在程序实际执行的过程中,利用程序的动态执行信息进行污点分析

动态污点分析检测的可信度更高,但是检测结果是否全面, 取决于动态污点分析对程序的覆盖情况,而且动态污点分析会消耗更多的资源; 静态污点分析又会和符号执行一样,可能会陷入到路径爆炸中,而简化后的静态污点分析又存在着严重的过度污染问题

将污点分析技术应用到模糊测试中,并降低其资源消耗是近年来的重要研究方向.比如GREYONE [25]尝试通过减少污点分析跟踪的对象、降低污点分析的开销、提升模糊测试的检测效率.

[25] GanShuitao,ZhangChao,ChenPeng,etal.GREYONE dataflowsensitivefuzzing[C]∕∕Procofthe29thUSENIX SecuritySymposium.Berkeley,CA:USENIXAssociation, 2020:25772594

基于AFL的模糊测试方法

输入构造

种子获取、种子筛选、种子突变

具体的挑战是如何在尽量满足语法语义检查的情况下,短时间内生成 大量的输入,用以对目标做全面而深入分析.

首先得到一个数据 SSS ,然后数据 SSS 按照一 定的策略进行一定次数的变异,获得大量新数据 III , 最后将III输入到被测试对象中进行测试.其中数据 SSS 被称为种子(seed), III 是测试实际使用的输入数据

评估

现阶段的研究都会聚焦于模糊测试器在2个指标上的表现:覆盖率和暴露漏洞平均时间

覆盖率是软件测试中的一个衡量指标,指的是在测试过程中,对象被覆盖到的数目占总数的比例. 通常而言,高覆盖率更可能发现更多的隐藏漏洞,众多研究因此集中在覆盖率提升上

AFL 使用上下文无关的边覆盖率作为评估指标. [13]

Angora 使用上下文敏感的分支覆盖率.[42]

VUzzer 使用了块覆盖率替代边覆盖率作为覆盖率评估的对象.[41]

暴露漏洞平均时间:

暴露 漏 洞 平 均 时 间 被 Böhme46] AFLGo 选 做 评 估 指 标.在 与 基 准 模 糊 工 具 [46] AFL 的对比实验中,AFLGo 复现单个漏洞的 [13] [46] 时间远比AFL少,这证明了该评估指标的有效性. 此后Hawakeye[47] 同样使用了这一指标来证明其性 能.Parmesan 在通过sanitizer来发现潜在漏洞的 [63] 研究工作中,也是用暴露漏洞平均时间作为评估指 标同Angora [42] 等定向灰盒模糊工具进行比较

结果分析

结果分析发生在模糊测试结束以后,主要目的是对于模糊测试的输出信息进行分析和处理

具体应用场景下的模糊测试

物联网中的模糊测试

主要面临两个问题:

  1. 将模糊测试应用到物联网领域问题就是特定物联网设备上运行的程序通常对于其实际硬件的配置有着高度的依赖性.

​ 简单的从固件中提取一个用户级别的程序,然后使用模糊测试进行检测,通常是行不通的

Iot-Fuzzer[30] 认为大多数物联网设备通过其官方移动应用程序进行控制,并且此类应用程序通常包含有与设备进行通信所使用协议的丰富信息,因此通过识别和重用特定于程序的逻辑(比如加密)来改变测试用例(尤其是消息字段),就能够有效地对物联网目标进行模糊测试,而无需依赖于有关其协议规范的任何知识.

  1. 物联网设备远远无法满足模糊测试需要的吞吐率

    多项研究成果表明物联网设备采用全仿真的系统,可以获得最高的吞吐量,这是因为真实的物联网设备相比于桌面工作站或者服务器要慢得多

内核安全中的模糊测试

内核模糊测试通常利用暴露出来的系统调用接口和外围接口,从用户空间进入到内核组件中进行模糊测试,以检测内核中可能存在的漏洞

主要面临的问题:

  1. Windows内核程序以及很多相关组件的源代码并 不开源,将导致传统的反馈机制不再适用.
  2. 内核中的代码由于存在中断、多线程操作等机制,使得模糊测试变的很复杂.
  3. 内核模糊测试一旦检测到程序的崩溃,将会导致整个操作系统重新启动,极大地影响了模糊测试的效率.

为了克服这些问题,产生了一些专门针对内核安全进行模糊测试的研究,

比如syzkaller [70] 是由Google开发的一种以获得高覆盖率为导向的内核 模糊测试工具,目前实际使用比较多,并经常被用于对比实验中.

Razzer[71] 是基于syzkaller [70] 通过使用LLVM和修改后的SVF技术针对内核中存在的数据争用问题进行的模糊测试

TriforceAFL[36] AFL [13]的QEMU模式,在系统模拟器的帮助下,通过跟踪分支信息,对Linux的内核进行模糊测试.

kAFL[37] 通过利用Intel提供的进程追踪技术,获取代码运行时的控制流信息,并通过使用Intel的硬件 虚拟特征(VTGx)提升效率并使得kAFL[37] 独立于特定的操作系统

传统的模糊测试应用到内核模糊测试上将面临着众多的问题,包 括内核态代码的复杂执行环境,以及内核崩溃的处 理问题.另外内核安全面临的威胁来源是不确定的, 可以是外部固件,也可以是第三方开发的驱动程序, 还可以是内核程序自身设计的问题.模糊测试在内 核安全领域的应用还有待进一步的研究.

静态分析或模糊检测技术通常对内存溢出等漏洞有效,而无法挖掘协议实现库的逻辑漏洞.

通过提取安全协议实现的状态机,能够实现对协议实现的形式化建模.

模糊测试技术简单整理(一)相关推荐

  1. intel硬件视频加速技术简单整理

    硬件视频加速技术 文章目录 硬件视频加速技术 intel 硬件加速技术 intel 的开源媒体栈 **`VA-API`** 安装 样例 **`Intel Quick Sync(QSV)`** API支 ...

  2. 笔记整理-信息系统开发基础-软件测试-模糊测试

    模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法. 在模糊测试中,用随机坏数据(也称做fuzz)攻击一个程序,然后等着观察哪里遭到了破坏.模糊测试的技 ...

  3. Fuzzing(模糊测试)技术,你真的了解吗?

    每当大家讨论模糊测试技术的时候,对它的第一印象往往定格在:漏洞挖掘常用技术.闭源软件漏洞挖掘.二进制文件检测分析.黑盒漏洞检测技术等等.或者,你的心里也是这么想的?但是,我想说:经历了不同时代范式的迭 ...

  4. 深入浅出解读 Java 虚拟机的差别测试技术

    为什么80%的码农都做不了架构师?>>>    本文分享基于字节码种子生成有效.可执行的字节码文件变种,并用于 JVM 实现的差别测试.本文特别提出用于修改字节码语法的classfu ...

  5. 2021年软件测试工具总结——模糊测试工具

    ~ 什么是模糊测试?~ 模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞.模糊测试的核心是自动或半自动的 ...

  6. AI模糊测试:下一个重大网络安全威胁

    https://www.aqniu.com/news-views/46002.html 人工智能(AI)或机器学习融入传统模糊测试技术造就出查找应用程序或系统漏洞的强大工具,但研究人员和网络罪犯都能利 ...

  7. idea2020shezhi代码检查级别_优秀的模糊测试代码是如何炼成的?

    所谓模糊测试,是指一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,它经过了近 20 年的发展,早已在程序员圈中成为一种主流漏洞挖掘技术.基于此,开发者们该如何编写良好的模糊测试代 ...

  8. 隐藏画质代码_优秀的模糊测试代码是如何炼成的?

    所谓模糊测试,是指一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,它经过了近 20 年的发展,早已在程序员圈中成为一种主流漏洞挖掘技术.基于此,开发者们该如何编写良好的模糊测试代 ...

  9. 测试页打印失败.是否参阅打印疑难解答以获得帮助_使用DeepState对API进行模糊测试(上)...

    前言 DeepState是一个框架,它为C和c++开发人员提供了一个公共接口,用于各种符号执行和模糊引擎.用户可以使用类似于Google Test的API编写一个测试工具,然后使用多个后端执行它,而不 ...

最新文章

  1. Spring3.0 AOP 具体解释
  2. 移动端布局三种视口_移动端开发知识[系列] - 视口viewport
  3. linux ntfs 用户权限,Linux在NTFS中创建的文件的权限
  4. java Servlet学习笔记(一)
  5. sp_updatestats和update statistics的区别
  6. base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别
  7. java商城_java开源商城系统的优势是什么?
  8. 查询去除空值_SQL数据处理(五):SQL多表查询
  9. 十四、数据库设计三范式
  10. 网页mp3提取器_用Python写一个酷狗音乐下载器!
  11. MySQL高可用--MGR入门(2)组复制监控常用相关表
  12. 戴尔科技集团公布 2019 财年第四季度及全年财报,巨大进步和强劲发展的一年...
  13. 网络基石 —— 双绞线、水晶头与 MIC
  14. pycharm 显示空格及tab
  15. ​知者见于未萌:百度CTO王海峰与中国 AI 三十年
  16. 计算机蓝屏代码0x0000007b,win7开机蓝屏提示STOP:0X0000007B的解决方法
  17. 用计算机求和公式,全国计算机一级等考excel之sum求和函数
  18. 计算机网络语音传输杂音回音,QQ语音时,怎么消除麦克风回音、噪音、杂音
  19. 人工智能和机器学习方面重要会议
  20. Java岗面试题--Java基础(日积月累,每日三题)

热门文章

  1. 使用twig来组装数据使数据结构可视化
  2. 解除封印 可以写博客啦
  3. 分页查询 com.github.pagehelper 5.1.10 分页插件配置
  4. 捷信达酒店管理系统使用说明-预定-散客预定
  5. oracle hwm调整语法,各个Oracle 版本下如何调整高水位(HWM)
  6. QT Creator快速入门读书笔记:新建HelloWorld工程
  7. CCSP2019T2_纸牌计数 | 2019苏州CCSP大学生计算机系统与程序设计竞赛
  8. 机器学习算法与传统优化算法与智能优化算法
  9. 数字电路中的逻辑代数基础
  10. P5397 天降之物