[论文解读] Neutaint: Efficient Dynamic Taint Analysis with Neural Networks
Neutaint 提出了一种基于端到端神经网络的动态污点分析方法,通过从程序执行轨迹中学习信息流,利用神经程序嵌入和显著性图实现高准确率与低运行时开销。它通过用可微分的、基于梯度的影响分析替代基于规则的传播机制,减少了误报率和开销,其平均准确率达68%,运行时开销比最先进工具低40倍。
Dynamic taint analysis (DTA) is widely used by various applications to track information flow during runtime execution. Existing DTA techniques use rule-based taint-propagation, which is neither accurate (i.e., high false positive) nor efficient (i.e., large runtime overhead). It is hard to specify taint rules for each operation while covering all corner cases correctly. Moreover, the overtaint and undertaint errors can accumulate during the propagation of taint information across multiple operations. Finally, rule-based propagation requires each operation to be inspected before applying the appropriate rules resulting in prohibitive performance overhead on large real-world applications. In this work, we propose NEUTAINT, a novel end-to-end approach to track information flow using neural program embeddings. The neural program embeddings model the target's programs computations taking place between taint sources and sinks, which automatically learns the information flow by observing a diverse set of execution traces. To perform lightweight and precise information flow analysis, we utilize saliency maps to reason about most influential sources for different sinks. NEUTAINT constructs two saliency maps, a popular machine learning approach to influence analysis, to summarize both coarse-grained and fine-grained information flow in the neural program embeddings. We compare NEUTAINT with 3 state-of-the-art dynamic taint analysis tools. The evaluation results show that NEUTAINT can achieve 68% accuracy, on average, which is 10% improvement while reducing 40 times runtime overhead over the second-best taint tool Libdft on 6 real world programs. NEUTAINT also achieves 61% more edge coverage when used for taint-guided fuzzing indicating the effectiveness of the identified influential bytes.
研究动机与目标
- 解决真实应用场景中基于规则的动态污点分析(DTA)存在的高误报/漏报率和难以接受的运行时开销问题。
- 克服手动指定污点规则的局限性,因为该方法容易出错,且难以适用于复杂操作和边缘情况。
- 消除在多个操作中组合单个污点规则所导致的错误累积。
- 检测传统 DTA 工具所遗漏的隐式控制依赖关系和非数据依赖型接收端(例如外部函数的返回值)。
- 通过机器学习实现高效、可扩展且准确的端到端信息流追踪。
提出的方法
- Neutaint 在通过轻量级插桩收集的程序执行轨迹上训练神经程序嵌入模型,学习从污点源到接收端的映射关系。
- 它利用反向传播和梯度分析计算显著性图,以量化每个源对每个接收端的影响程度。
- 构建了两种显著性图:一种用于粗粒度,一种用于细粒度的影响分析,用于总结源-接收端关系。
- 该模型可泛化于不同的执行轨迹,实现在运行时无需重新分析每个操作即可实现高精度推理。
- 显著性图用于识别污点引导模糊测试和漏洞检测中最具影响力的输入字节。
- 该方法通过直接从数据中端到端学习信息流,避免了基于规则的传播机制,从而最小化了组合错误。
实验结果
研究问题
- RQ1基于神经网络的方法能否从程序执行轨迹中学习到准确且可泛化的信息流模式?
- RQ2基于梯度的显著性图能否有效识别在数据依赖和控制依赖关系中具有影响力的污点源?
- RQ3Neutaint 是否在保持或提升准确率的同时,相比基于规则的 DTA 工具显著降低运行时开销?
- RQ4Neutaint 能否检测到传统工具所遗漏的涉及隐式控制依赖关系的漏洞?
- RQ5与最先进 DTA 工具相比,Neutaint 在污点引导模糊测试中的有效性如何?
主要发现
- Neutaint 的平均准确率达到68%,比第二好的工具 Libdft 提高了10个百分点。
- 与第二好的工具 Libdft 相比,Neutaint 将运行时开销降低了40倍,同时保持了高准确率。
- Neutaint 检测到98.7%的信息流,是所有评估的污点分析工具中最高的。
- 在污点引导模糊测试中,Neutaint 的边覆盖率比最先进工具高出61%,表明其能更有效地识别关键输入。
- Neutaint 能够成功检测多种漏洞,包括缓冲区溢出、堆溢出、整数溢出和除零错误。
- 该方法能有效捕捉隐式控制依赖关系——例如 TinyXML 解析逻辑中的依赖关系——而传统 DTA 工具因缺乏数据依赖关系而失效。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。