开发者生态
morning
仅数据攻击比您想象的更容易
摘要
Inspired by the quote attributed to Albert Einstein, we present a simple (but not too simple) data-only attack exploitation pipeline, named Einstein, that builds attacks with surprising ease. It gener...
the
Einstein
that
data
and
only
program
attacker
exploits
simple
2026-09-23
1 阅读
约4分钟阅读
segfaultbuserr
字号:
受阿尔伯特·爱因斯坦的引言启发,我们提出了一个简单(但不是太简单)的纯数据攻击利用管道,名为 Einstein,它可以轻松地构建攻击。它使用与应用程序无关的技术生成纯数据攻击,证明此类攻击完全可以轻松攻击。与应用程序无关。 Einstein 并不是试图理解特定于应用程序的语义(例如 HTTP 协议的极端情况),而是针对任何程序用于与操作系统内核进行通信的通用接口:其系统调用。特别是,我们跟踪最终出现在系统调用参数中的数据,确定攻击者是否可以破坏它们,例如通过 execve 执行任意代码或通过 write 修改文件系统中的文件。简单的 。此外,爱因斯坦抽象出了不必要的复杂性,而是针对不仅最容易识别而且对攻击者来说最有希望的漏洞利用。特别是,Einstein 会沿着程序(已经有效)的运行时路径自动生成安全敏感系统调用的漏洞,其参数(简单地)从攻击者可控的数据中逐字复制。正如稍后详细介绍的,这种简单的方法可以在流行的现实世界程序中自动生成数量惊人的仅数据实用漏洞。 Einstein 如何构建示例攻击 为了解释 Einstein 的工作原理,我们将详细介绍它如何构建示例攻击以及如何制作安全敏感系统调用的参数的每个步骤。我们假设攻击者可以访问与潜在受害者部署的程序等效的程序,因此他们可以在本地运行服务器进行分析。 Einstein以受害者程序作为输入,分两个阶段进行操作:首先,生成候选漏洞利用程序;其次,它确认每个候选漏洞是否确实是有效的漏洞。有关本示例范围之外的设计细节的解释(例如,Einstein 如何跟踪无界数据、将多个系统调用链接在一起等),请参阅我们的论文 [5]。候选漏洞利用生成。为了生成候选漏洞,Einstein 在运行时跟踪所有攻击者可破坏的数据,确定哪些数据可以影响安全敏感系统调用的参数。为了实现这一点,我们首先使用 Einstein 的二进制级仪器启动服务器(图 3a,➊)。该检测增加了对动态污点分析的支持,这使我们能够在运行时跟踪任何“受污染”的程序数据[8]。服务器启动,初始化其 cgi_bin_path ,并开始等待请求。 Einstein 模拟了一个利用内存安全漏洞的攻击者,通过独特地污染可能损坏的任何数据,例如字符串“ /usr/local/server/cgi-bin ”,以及其范围内的所有其他数据。此外,我们将受污染的数据记录在内存快照中(➋)。接下来,Einstein 继续执行程序,并跟踪当服务器处理由良性请求组成的工作负载时,受污染的数据如何在整个程序执行过程中传播 (➌)。例如,它发送图 2b 中的“POST /sort-script”请求。然后,在处理请求时,服务器将受污染的字符串作为参数传递给 execve 系统调用。 Einstein 识别出攻击者可控制的数据流进入安全敏感的系统调用,并记录有关它的信息,例如参数及其污染程度 (➍)。然后,Einstein 确定 execve 的路径名和 argv 参数不仅受到与 cgi_bin_path 对应的标识符的污染,而且实际上与 cgi_bin_path 相同。我们将这种(非常)简单的数据流称为身份数据流。 Einstein 通过生成(地址,值)对来构建身份数据流的候选利用,这些对指定内存写入错误可以通过将 cgi_bin_path 从“ /usr/local/server/cgi-bin ”覆盖到“ /bin ”来利用 execve (➎)。
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱