论文阅读-IDFUZZ: Intelligent Directed Grey-box Fuzzing
一.局限:
现有方法将到目标的距离衡量输入与目标代码的远近,存在大量无效变异,不一定能到目标分支。
二.创新点:
建立了一个新导航,它不再只是告诉距离目标的距离多少,而是一个智能导航
1.准备阶段:分支编码提供“地图”,明确当前位置和下一步方向:
dom_bbs[i] :由静态分析获取 target_dominance_analysis()
output_vector = [0, 0, 0, 0, 0]
output_vector = [1, 1, 0.625, 0, 0] A类
用二进制记录你走了哪条岔路:比如走了第1条和第3条 → 二进制101 → 转成0~1之间的小数(5/8=0.625)
2.准备数据集:收集历史模糊测试输入,识别哪些操作能靠近目标,自适应数据集让探测更灵敏,只关注有效信号:
·模糊测试会生成海量输入,但大部分是"无效经验"(比如总是卡在在第一个)。
·精选数据:只保留接近目标的输入(覆盖较多dom-BBs的输入),剔除重复路径的输入(100条都卡在同一个块的记录,选1条代表性的)。
·最终得到一个小而精的数据集(约1000条记录),避免模型学坏。
3.梯度过滤与聚类精准定位关键字段,避免无效挖掘:
通过将输入输入训练好的模型得到输出,我们可以得到下面的雅各比矩阵,每个梯度代表第 n个输入字节对第 m 个分支编码dom-BB覆盖状态的影响程度,越大影响越大。

1)计算输入字节对某个覆盖状态的“敏感度”-梯度
2)梯度过滤:避免误判敏感字节
对比不同梯度向量,只保留那些在当前分支敏感度高,但在其他分支敏感度低”的字节
3)单个字节不够,多个字节共同作用
把位置相邻、敏感度都很高的字节聚成“关键区域”
三.建模:
静态分析 | 看懂程序结构 | 编译 Pass、生成 .bc 、画调用图 |
路径建模 | 找出通往目标的必经之路 | 提取支配函数、生成支配图 |
动态 fuzz | 不断尝试输入 | 启动 AFL,收集覆盖率 |
智能引导 | 让 fuzz 更聪明 | 神经网络实时反馈,指导变异 |