10

哈佛架构计算机具有独立的代码和数据存储器。这是否使它们免受代码注入攻击(因为数据不能作为代码执行)?

4

6 回答 6

16

它们比冯诺依曼架构更具免疫力,但并非完全如此。每个架构都有一个转换点,数据开始被视为代码。在冯诺依曼,它立即发生在 CPU 内部,而在哈佛,它发生在为模块保留和声明内存之前(有时甚至在此之前,当构建系统准备文件时)。这意味着在哈佛架构中,成功的代码注入攻击需要更加复杂和牵强,但不一定是不可能的。

如果可以将包含恶意代码的文件放置在机器的存储(例如文件系统)中并导致缓冲区溢出,该缓冲区溢出将重定向到现有的(有效的、非恶意的)代码,该代码将该恶意文件作为代码加载,如果该架构允许该文件开始执行(例如通过自初始化例程),这将是成功代码注入的一个示例。

于 2009-06-05T07:06:23.070 回答
7

这部分取决于您将什么视为“代码注入攻击”。

以 SQL 注入攻击为例。SQL 查询本身永远不需要位于内存的可执行部分,因为它已被数据库引擎转换为本机代码(或解释,或您希望使用的任何术语)。但是,该 SQL 仍然可以被广泛地视为“代码”。

如果你只包括一个攻击者插入要由处理器直接执行的本机代码(例如,通过缓冲区溢出),并且如果进程被阻止将数据复制到“代码区域”,那么它提供了针对这种攻击的保护,是的。(即使我想不出任何攻击媒介,我也不愿意要求 100% 的保护;这听起来很简单,但安全是一件棘手的事情。)

于 2009-06-05T06:53:34.783 回答
5

显然,有些研究人员能够对哈佛架构进行永久性代码注入攻击。所以可能不像人们想象的那么安全。

于 2009-06-05T07:40:05.140 回答
0

大多数哈佛架构机器仍然使用公共共享内存空间来存储内核之外的数据和指令。因此,仍然可以注入代码并将其作为指令执行。事实上,今天的大多数处理器内部都是哈佛架构,即使它们在外部看起来是冯诺依曼。

于 2009-06-05T07:10:55.060 回答
0

我的大学最近有一个 MS 辩护,讨论了这件事。不幸的是,我无法参加。我敢肯定,如果你联系了瓦茨先生,他会愿意讨论的。

http://www.cs.uidaho.edu/Defenses/KrisWatts.html

于 2009-06-05T15:08:19.853 回答
-1

x86 有一个分段架构,它已被一些项目用来试图阻止数据作为代码执行(考虑到 NX 位,这项工作现在大部分都被浪费了),而且它从未接近于阻止流程的新攻击。考虑一下仍然可以在野外利用的惊人数量的远程文件包含。

于 2009-06-05T15:04:00.407 回答