Mystra: Declarative Dynamic Taint Analysis via Shadow Virtual Machine
本文介绍了 Mystra,一种用于动态污点分析的声明式语言和 Shadow 虚拟机架构,它将污点语义与运行时插桩解耦,使 Shar 工具在多种 JavaScript 和 Python 运行时中,与现有解决方案相比,能够实现高准确度并显著降低开销。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正试图捕捉一个调皮的幽灵(一个安全漏洞),它正溜进一座繁忙的大城市(一个计算机程序)。这个幽灵最初只是信件中一滴无害的墨水(不可信数据),但如果它到达了一扇特定的门(如读取文件的敏感操作),它就能摧毁整座大楼。
长期以来,安全专家一直尝试用两种主要方法来捕捉这个幽灵,而这两种方法都有很大的问题。一种方法是像在任何人入住前就重写城市的蓝图一样(源码重写)。这种方法很安全,但它会让城市运行得极其缓慢——速度慢了 20 到 50 倍!另一种方法是雇佣一名只熟悉特定街区的特殊侦探(引擎原生)。这种方法很快,但如果城市的布局发生了变化,或者你搬到了另一个街区,这位侦探就必须被解雇并重新培训。
于是,出现了 Mystra 和 Shar,这是一对来自约翰斯·霍普金斯大学的新型调查员,他们决定在真实的城市旁边建造一座“影子城市”。
影子城市 (Shadow Virtual Machine)
研究人员并没有修改真实的城市或重写其蓝图,而是构建了一个并行的、隐形的“影子虚拟机”,它与真实程序并排运行。把它想象成一座镜像真实城市每一步动作的幽灵孪生城市。
当真实的业务发生时——比如一个函数调用另一个函数,或者一个文件被打开——影子城市会立即察觉。但神奇之处在于:影子城市并不关心真实的城市是如何建造的。无论真实的城市是在运行一个快速的现代引擎(如 Node.js 中的 V8)还是一个较旧的引擎(如 CPython),影子城市看到的都是完全相同的“事件”。这就像拥有一个通用翻译器,让调查员可以在不被特定引擎的复杂机械所纠缠的情况下观察行动。
规则手册 (Mystra)
仅仅观察城市是不够的;你需要知道该寻找什么。这就是 Mystra 发挥作用的地方。Mystra 是一种特殊的、易于阅读的语言(一种“声明式”语言),安全专家可以用它编写简单的规则,例如:“如果一个文件路径来自用户,并且该路径被用于打开文件,请拉响警报!”
论文指出,以前的工具过于僵化,迫使专家编写与特定引擎绑定的复杂且混乱的代码。Mystra 则不同。它就像一套可以卡在任何引擎上的乐高说明书。
- “注入”与“提取”技巧: 处理“高阶函数”(如 JavaScript 中的
Array.map)是它最酷的功能之一。想象一个工厂,一台机器接收一个盒子,将盒子交给一名工人进行涂漆,然后将盒子放回原处。Mystra 可以说:“将盒子的‘脏污’注入到工人的手中,并在工人完成工作后,将那份‘脏污’提取回盒子上。”这使得系统即使在数据跳入回调函数时也能追踪“幽灵”,而之前的工具在处理这种情况时往往会陷入混乱。
结果:快速且准确
研究人员构建了一个名为 Shar 的工具来测试这个想法。他们不仅仅是猜测;他们通过现实世界的基准测试进行了衡量。
- 速度: 当他们在 Node.js 上运行 Shar 时,程序的运行速度仅减慢了 1.85 倍。相比之下,旧的源码重写工具比 Shar 慢了 22.7 倍!在相同的负载下,Shar 也比之前的最佳工具 NodeMedic-FINE 快了 22.7 倍。
- 准确性: 在一个包含 493 个已知漏洞的测试集(称为 SecBench.js)上,Shar 抓住了 95.5% 的漏洞。更棒的是,当他们测试已修复版本的软件(即漏洞已被修补的版本)时,Shar 没有产生任何误报。它一次也没有虚报过警。
- 可移植性: 团队证明了他们的想法在不同的世界中同样奏效。他们将相同的核心引擎和规则成功移植到了三个不同的运行时环境:V8(用于 Node.js 和 Chrome)、SpiderMonkey(用于 Firefox)和 CPython(用于 Python)。他们只需要为每个环境编写一个小的“适配器”;核心大脑保持不变。
他们 没有 解决的问题
了解这个工具 不 做什么非常重要。论文明确指出,Shar 不会追踪“隐式流”(implicit flows)。想象一下,如果幽灵没有留下墨迹的痕迹,而是通过改变天空的颜色来发出信号,那么 Shar 就看不到了。Shar 不观察天空,它只观察墨迹。作者指出,追踪这些隐形信号会极大地降低系统速度(在其他研究中减速了 36.7 倍),因此他们目前选择专注于可见的痕迹。
他们还发现,如果一个程序将一段文本拆分成微小的碎片(例如将一句话拆分为单词),那么与原始“脏”文本的联系有时会丢失。这是此类追踪技术的已知局限性,他们建议未来的工作可能需要研究逐字符追踪来解决这个问题。
底线
论文将 Shar 和 Mystra 呈现为不仅仅是一个能解决所有安全问题的魔杖,而是数据追踪领域的一个重大进步。通过将我们追踪的内容(规则)与我们观察程序的方式(影子虚拟机)分离,他们创建了一个快速、准确且灵活的系统。
在测试中,他们证明了你可以拥有一种既是速度达人又是敏锐侦探的安全工具,能够在不显著降低受保护程序速度的情况下,识别出 95.5% 的漏洞。这证明了你不再需要在速度与安全之间做二选一。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。