Directed Symbolic Execution for Path Feasibility Analysis]{Directed Symbolic Execution for Path Feasibility Analysis in Software Security Testing
本文提出了一种定向符号执行方法,该方法通过自动化符号化和循环迭代限制,高效地验证过程间路径的可行性,从而在增强静态安全分析的同时,在显著提高精确度的同时保持了召回率,并在现实世界的基准测试中得到了验证。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
软件安全是一场针对隐藏缺陷的持久战,就像城市规划者试图确保大都市中每一座桥梁和隧道都能抵御地震一样。为了实现这一目标,工程师们使用自动化工具在不实际运行程序的情况下扫描代码,绘制出程序可能采取的每一条路径图。这些被称为控制流图(control flow graphs)的地图极其详尽,展示了程序如何在一条指令跳转到另一条指令之间进行。然而,这些地图往往过于彻底;它们标出了在理论上看起来危险、但在现实世界中物理上无法通行的路径。这造成了大量的虚假警报,迫使人类专家在浪费时间调查这些“机器中的幽灵”。因此,挑战在于构建一个能够快速区分“理论上可行”与“实际上可执行”路径的系统,而不至于迷失在海量的可能性之中。
俄罗斯-亚美尼亚大学的一个研究小组开发出一种新方法来解决这个问题,使用的是一种被称为定向符号执行(directed symbolic execution)的技术。想象一位旅行者试图验证通过复杂城市的某条特定路线是否存在。标准的方法是派出探险家走遍城市的每一条街道以观察它们的去向,这项任务将耗时极长且会让团队不堪重负。相反,研究人员的方法就像是一场导览之旅。它获取安全扫描器报告的一条特定路径,并指挥一名虚拟探险家仅沿着该路径行进,忽略所有不通往目的地的街道。这种“定向”方法使得系统能够在不浪费精力于无关绕路的情况下,检查报告的危险是否真实存在。
这项工作的核心在于系统如何处理“未知”。在真实的软件中,程序经常处理尚未设置的数据,或者调用来自外部库的函数,而这些库的内部代码是隐藏的。传统的探险家在面对这些空白时可能会陷入停滞或放弃。然而,研究人员的系统旨在将这些未知情况视为灵活的变量。如果程序读取了一个尚未填充的内存位置,系统会为其分配一个符号值,从而允许它探索该值可能产生的所有结果。对于外部函数的结果和复杂的指针参数(这些参数作为动态地址,会根据情况指向不同的地方),系统也会进行同样的处理。通过自动用可能性而非具体的猜测来填补这些空白,即使在全貌不可见的情况下,系统也能追踪代码中的路径。
在导航软件时面临的另一个主要障碍是循环(loop),即重复执行的代码段。在实际程序中,一个循环可能会运行几次或数百万次,而在符号分析中,它可能会让探险家陷入无限循环。研究人员引入了一种策略来处理这个问题:设定一个限制,规定系统在强制退出前可以跟随循环多少次。这并非随机的截断;系统会仔细记录这些迭代期间发生的情况,然后跳转到循环自然结束的点。这使得分析能够越过重复部分继续进行,确保工具能够到达其正在调查的路径终点。
为了测试他们的方法,该团队将其应用于真实世界的软件以及一套名为 Juliet suite 的标准测试用例集。他们首先针对从 GNU Coreutils(Linux 操作系统的基础工具集)中提取的路径对系统进行了检查。系统成功验证了其中 95.3% 的真实路径是确实可行的,证明了它能够处理复杂的交织代码。随后,他们将该方法与现有的安全工具 MLH 集成。在此之前,该工具在数千个报告中标记了 666 个虚假警报。应用了这种新的路径可行性分析后,这些虚假警报完全消失了,同时该工具依然能捕捉到之前发现的所有真实漏洞。这意味着在测试的子集中,安全检查的精确度从 56.6% 跃升至 100%,且没有损失发现真实漏洞的能力。
研究人员还将他们的方法与专门设计用于类似任务的工具 KLEEF 进行了对比。在针对另外两个主要安全扫描器(Infer 和 Clang Static Analyzer)生成的报告进行测试时,结果非常悬殊。KLEEF 在验证大多数真实阳性报告方面表现挣扎,导致其性能得分大幅下降。相比之下,新方法保持或略微提升了原始扫描器的性能。它成功验证了 Infer 工具报告的所有真实漏洞,并处理了绝大部分 Clang 报告,证明了其处理工业级代码的鲁棒性。
研究结果表明,这种定向方法为清理软件安全测试中的噪声提供了一种切实可行的方式。通过专注于重要的路径并自动处理内存和外部函数的复杂性,该方法过滤掉了浪费人类时间的无效场景。虽然该系统通过限制循环迭代做出了权衡,但结果显示,这并未以丢失真实危险为代价。这项工作为提高自动化安全工具的可靠性提供了清晰的路径,确保当发出警告时,那是一个值得调查的真实威胁。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。