LEOPARD:通过程序度量识别脆弱代码以进行漏洞评估
软件工程
2020-01-22 v2
摘要
在代码库中识别潜在的脆弱位置对于有效的漏洞评估而言是至关重要的一步;即,它能极大地帮助安全专家将时间和精力投入到最需要的环节。已有基于度量和基于模式的方法用于识别脆弱代码。前者依赖机器学习,由于非脆弱代码与脆弱代码之间的严重不平衡或缺乏刻画漏洞的特征而表现不佳。后者需要已知漏洞的先验知识,且只能识别相似的而非新型漏洞。在本文中,我们提出并实现了一种通用、轻量且可扩展的框架 LEOPARD,通过程序度量来识别潜在的脆弱函数。LEOPARD 不需要关于已知漏洞的先验知识。它通过结合两组系统性导出的度量分为两步。首先,它使用复杂度度量将目标应用中的函数分组为一组箱(bin)。然后,它使用漏洞度量对每个箱中的函数进行排序,并将排名靠前的函数识别为潜在脆弱的。我们在 11 个真实项目上的实验结果表明,LEOPARD 通过将 20% 的函数识别为脆弱的,可覆盖 74.0% 的脆弱函数,并且优于基于机器学习和基于静态分析的技术。我们进一步提出了 LEOPARD 在人工代码审查和模糊测试(fuzzing)中的三种应用,借此我们在 PHP、radare2 和 FFmpeg 等真实应用中发现了 22 个新缺陷,其中 8 个为新漏洞。
引用
@article{arxiv.1901.11479,
title = {LEOPARD: Identifying Vulnerable Code for Vulnerability Assessment through Program Metrics},
author = {Xiaoning Du and Bihuan Chen and Yuekang Li and Jianmin Guo and Yaqin Zhou and Yang Liu and Yu Jiang},
journal= {arXiv preprint arXiv:1901.11479},
year = {2020}
}