#TODO [[SemFuzz Semantics-based Automatic Generation of Proof-of-Concept Exploits]]
- 变异策略分为粗细粒度
- 粗粒度:将每次的输入称之为模糊实例,测量模糊实例和脆弱函数之间的距离(距离是两者之间最短路径的节点数),距离越小的输入作为新种子的优先级越高
- 粗粒度主要修改的是系统调用序列
- 细粒度:和粗粒度差不多,但是距离是两个基本块之间的距离
- 细粒度主要修改的是参数值
- 粗粒度:将每次的输入称之为模糊实例,测量模糊实例和脆弱函数之间的距离(距离是两者之间最短路径的节点数),距离越小的输入作为新种子的优先级越高
[[BEACON Directed Grey-Box Fuzzing with Provable Path Pruning]]
- 本文提供了一个符号执行求解条件在fuzz应用上的一个折中的方法。从脆弱函数向上一直到入口函数,把条件积累。不去算符号的值,而是去算符号值的范围。这样就可以将很大一批随机变异得到的输入给排除掉。
[[ProFuzzer On-the-fly Input Type Probing for Better Zero-day Vulnerability Discovery]]
- 和semfuzz一样来自游伟老师
- 本文的点在于可以自动的探测被fuzz对象的输入格式(可能还到不了输入格式这个程度),依据反馈将相同反馈的字节连接形成字段,并且识别字段的类型(作者自己定义了几个类型)。然后再进行fuzz。
- 好处在于字节连接成字段后,可以有效的进行变异,就减少那些根本输入都输入不了的输入实例。提高fuzz效率。
[[Android SmartTVs Vulnerability Discovery via Log-Guided Fuzzing]]
- 作者认为智能电视的安卓操作系统中有很多厂商自定义添加的API,这种API存在漏洞的风险比较高,作者专注于fuzz这种API
- 作者首先定位API
- 然后对API fuzz,收集日志信息
- 首先过滤和目标API无关的日志信息
- 然后通过一个训练好的分类器来识别过滤后的日志信息中哪些和输入验证相关 [[SeededFuzz Selecting and Generating Seeds for Directed Fuzzing]]
[[Semantic-Informed Driver Fuzzing Without Both the Hardware Devices and the Emulators]]
- 这篇文章的fuzz对象是驱动,作者认为不需要设备的驱动fuzz关键在于通过驱动的验证链
[[Hawkeye: Towards a Desired Directed Grey-box Fuzzer]]
- 经典论文
- 作者做到
- 有效的计算距离,因为计算方法的问题,可能计算出来的最短距离并不是实际上的最短距离(AFLGO的问题);不考虑所有的路径可能会漏掉隐藏在较长路径深处的错误
- 计算距离的时候考虑了被调用函数的被调用概率,概率越大越近
- 分为两种函数级距离和基本块级距离(两种计算方式用于能量调度)
- 减小静态分析的开销
- 对整个程序的函数指针应用基于包含的指针分析
- 如何高效能量分配
- 计算基本块跟踪距离和覆盖函数相似度,基于这两个值来确定种子优先级
- 如何动态调整变异策略
- 适应性突变
- 有效的计算距离,因为计算方法的问题,可能计算出来的最短距离并不是实际上的最短距离(AFLGO的问题);不考虑所有的路径可能会漏掉隐藏在较长路径深处的错误
[[FIRM-AFL_ High-Throughput Greybox Fuzzing of IoT Firmware via Augmented Process Emulation]]
- 本文的点在将固件的内存映射到系统内存,增加了fuzz的速度(文中称之为吞吐量)