哈佛架构计算机具有单独的代码和数据存储器。这是否使它们免受代码注入攻击(因为数据不能作为代码执行)?
答案 0 :(得分:13)
它们比Von Neumann架构更具免疫力,但并非完全如此。每个体系结构都有一个转换点,数据开始被视为代码。在Von Neumann中,它立即发生在CPU内部,而在Harvard中,它发生在内存保留并为模块声明之前(有时甚至在此之前,当构建系统正在准备文件时)。这意味着在哈佛架构中,成功的代码注入攻击需要更加复杂和牵强,但不一定是不可能的。
如果可以将包含恶意代码的文件放在机器的存储器(例如文件系统)中,并导致缓冲区溢出,该缓冲区溢出会在返回到现有(有效,非恶意)代码时重定向,该代码会将此恶意文件加载为代码,如果架构允许这个文件开始执行(例如通过自我初始化例程),这将成为代码注入成功的一个例子。
答案 1 :(得分:5)
这在一定程度上取决于你所谓的“代码注入攻击”。
例如,采取SQL注入攻击。 SQL查询本身永远不需要位于内存的可执行部分,因为它被数据库引擎转换为本机代码(或解释,或者您希望使用的任何术语)。但是,SQL仍然可以被广泛地视为“代码”。
如果您只包含一个插入本机代码的攻击者直接由处理器执行(例如通过缓冲区溢出),并且如果阻止进程将数据复制到“代码区域”,那么它可以防止这种攻击是的(即使我无法想到任何攻击媒介,我也不愿意要求100%的保护;它听起来很简单,但安全性是一件大事。)
答案 2 :(得分:4)
显然,有some researchers人能够在哈佛建筑上完成permanent code injection attack。所以也许不如人们想象的那么安全。
答案 3 :(得分:0)
大多数哈佛架构机器仍然使用共同的共享内存空间来处理核心之外的数据和指令。因此,仍然可以注入代码并将其作为指令执行。事实上,今天的大多数处理器都是内部的哈佛架构,即使它们看起来是外部的冯诺依曼。
答案 4 :(得分:0)
x86有一个分段架构可以做到这一点,并且一些项目已经使用它来试图阻止数据作为代码执行(现在这种努力主要是浪费了NX位),而且它从未接近过阻止新漏洞的流动。考虑一下野外可以利用的远程文件包含数量惊人的数量。
答案 5 :(得分:0)
我的大学最近有一个MS辩护,讨论了这件事。不幸的是,我无法参加。我敢肯定,如果你联系瓦茨先生,他愿意讨论它。