Control Flow Graph Recovery for Dynamically Loaded Code via Symbolic Library Resolution
本文提出了一种基于安全符号执行的分析技术,该技术将推测性库预加载与自定义钩子相结合,以从动态加载的代码中恢复控制流图,在保持库检测100%精确率和召回率的同时,相较于静态分析在节点和边的恢复方面实现了显著提升。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图通过查看蓝图来理解一台复杂机器的运作原理。在计算机软件世界中,这些蓝图被称为控制流图(CFGs)。它们描绘了程序可能采取的每一条路径,向你展示代码下一步将走向何处。
然而,现代软件(以及恶意软件等恶意程序)学会了一种隐藏其蓝图的技巧。它们使用一种称为动态加载的技术。它们并非从一开始就将所有部件构建在主机器中,而是将某些部件保存在一个上锁的盒子里,仅在机器运行过程中才打开盒子并组装这些部件。
问题:不可见的部件
传统的软件分析工具就像静态建筑师。它们查看桌上的蓝图并说:“这就是路径。”但如果机器在运行时从盒子中取出一个隐藏部件,静态建筑师将一无所见。它们会在本该有门的地方看到一片空白,因此无法画出穿过该处的路径。
这对安全而言是一个巨大的问题。如果你无法看到隐藏的路径,你就无法判断这台机器是安全的,还是一个陷阱。
解决方案:“推测性”侦探
本文作者 O. S. Mostovyi 构建了一种新型侦探工具。该工具不再仅仅查看蓝图,而是像一个时间旅行模拟器那样运作。
以下是其工作原理,使用一个简单的类比:
- 模拟(符号执行):想象你有一个机器人,它可以在不真正启动软件的情况下运行该软件。它在“假设”世界中运行代码。它不执行危险部分,只是推演它们。
- 双层架构:该工具拥有两个协同工作的特殊感知:
- 第一层(图书管理员):这一部分监视软件请求新部件的行为。当软件说“我需要来自网络的库”或“我需要来自隐藏内存位置的某个文件”时,图书管理员会拦截该请求。即使软件声称文件名已加密或混淆,该工具也会利用数学方法推断出该文件实际是什么。随后,它将该文件“推测性”地加载到模拟中,以便机器人能够看到它。
- 第二层(交通指挥员):这一部分监视机器人行驶的道路。当机器人到达一个路口,其方向取决于某个隐藏变量(例如一个秘密地址)时,交通指挥员会检查“假设”场景,以确定那条路实际上通向何处。
如何应对棘手诡计
论文指出,恶意行为者使用多种方式来隐藏其加载过程。该工具旨在捕捉所有这些手段:
- 无文件执行:某些程序创建不存在于硬盘上的文件,仅驻留在内存(RAM)中。该工具能够看到这些不可见的文件。
- 网络加载:某些程序在运行过程中从互联网下载其代码。该工具会模拟此下载过程,以查看实际到达的内容。
- 加密名称:如果程序说“加载文件 [加密代码]",该工具会使用数学求解器破解代码并找到真实的文件名。
结果:填补缺失的地图
为了测试这一点,作者创建了 16 个不同的“陷阱”(基准测试),使用了各种隐藏技术,从简单诡计到复杂的多阶段加密。
结果非常明确:
- 完整性:与传统静态工具相比,该工具发现了多出 29.8% 的路径(节点)和多出 26.5% 的连接(边)。它填补了地图上的空白区域。
- 准确性:其准确率达到100%。每当它声称发现了一个隐藏库时,都是正确的。它没有产生任何误报。
- 安全性:由于它使用模拟(符号执行)而非实际运行危险代码,因此可以在没有恶意软件逃逸或造成损害风险的情况下安全地分析这些棘手程序。
局限性
作者诚实地说明了该工具目前无法做到的事情:
- 它是侦探,而非魔术师:它能够发现隐藏的门并绘制路径,但不会自动“逆向”复杂的混淆(打乱)以使代码易于阅读。这仍然是一个难题。
- 平台限制:它目前仅在某些计算机芯片上对 Linux 系统(特别是 ELF 文件)表现良好,但尚未适用于 Windows 或其他操作系统。
- 隐藏流:它追踪显式移动的数据,但有时会错过通过复杂数学函数等微妙、间接方式移动的数据。
总结
简而言之,本文提出了一种新方法,用于绘制那些在运行前隐藏其部件的软件地图。通过将“假设”模拟器与一个能够拦截并解析隐藏文件请求的智能系统相结合,该工具能够绘制出程序行为的完整地图,揭示出此前对安全分析师不可见的路径。它在 16 种不同场景下成功测试了该方法,证明其能够以完美的准确性发现隐藏库。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。