哈佛體系結構計算機具有獨立的代碼和數據存儲器。這是否使他們免受代碼注入攻擊(因爲數據不能作爲代碼執行)?哈佛體系結構計算機是否可以免受任意代碼注入和執行攻擊?
回答
它們比馮諾依曼架構有一定的免疫能力,但不是完全。每個架構都有一個轉換點,數據開始被視爲代碼。在馮諾依曼,它立即發生在CPU內部,而在哈佛,它發生在內存被保留並被聲明爲模塊之前(或有時甚至在構建系統正在準備文件之前)。這意味着在哈佛體系結構中,成功的代碼注入攻擊需要稍微複雜一點,而且不一定是不可能的。
如果可以將包含惡意代碼的文件放置在機器的存儲器中(例如文件系統),並導致緩衝區溢出,該緩衝區溢出將返回到加載此惡意文件的現有(有效的,非惡意)代碼時重定向作爲代碼,如果架構允許該文件開始執行(例如,通過自初始化例程),那麼這將是成功的代碼注入的一個例子。
這部分取決於您所謂的「代碼注入攻擊」。
舉一個SQL注入攻擊爲例。 SQL查詢本身永遠不需要位於內存的可執行部分,因爲數據庫引擎將其轉換爲本地代碼(或者解釋,或者您希望使用的任何術語)。但是,該SQL仍然可以廣泛地被視爲「代碼」。
如果您只包含插入本機代碼的攻擊者直接由處理器執行(例如,通過緩衝區溢出),並且如果阻止該進程將數據複製到「代碼區」中,則它提供針對這種類型的保護攻擊,是的。 (即使我想不出任何攻擊媒介,我也不願意聲稱100%的保護;它聽起來萬無一失,但安全是一個把戲。)
大多數哈佛體系結構機器仍然使用公用共享內存空間來存儲內核之外的數據和指令。因此,仍然可以注入代碼並將其作爲指令執行。事實上,現在大多數處理器都是內部哈佛架構,即使他們在外部看起來是馮諾依曼。
顯然,有some researchers誰能夠在哈佛架構上完成permanent code injection attack。所以也許沒有人們想象的那麼安全。
x86具有這樣的分段體系結構,並且它已被一些項目用來試圖阻止數據作爲代碼執行(現在大多數情況下都是浪費NX代碼),並且它永遠不會接近阻止新漏洞的流入。考慮一下仍然可以在野外利用的大量遠程文件包含。
我的大學最近有一個微軟防禦,最近討論這件事情。不幸的是,我無法參加。我敢肯定,如果你聯繫過瓦特先生,他會願意討論它。
- 1. 此代碼是否安全,不受任何SQL注入攻擊?
- 2. SQL注入嘗試 - 我的代碼是否易受攻擊?
- 3. 此登錄代碼是否容易受到SQL注入攻擊?
- 4. 此代碼是否容易受到SQL注入攻擊?
- 5. FILTER_SANITIZE_STRING是否足以避免SQL注入和XSS攻擊?
- 6. 計算機I/O-計算機系統和體系結構
- 7. 哪些體系結構是哈佛,哪些是馮諾依曼?
- 8. 計算機組織和體系結構
- 9. 使程序堆棧不可執行以停止代碼注入攻擊
- 10. 哈佛體系結構中的代碼內存在哪裏引用?
- 11. 此C用戶輸入代碼是否易受攻擊?
- 12. 是否可以計算代碼執行步驟?
- 13. 如何對此代碼執行SQL注入攻擊?
- 14. 計算機體系結構:加速
- 15. 是否可以在該死的易受攻擊的Web應用上執行SQL注入(高級別)?
- 16. 這段代碼是否容易出現sql注入攻擊?
- 17. 機器結構或計算機體系結構
- 18. 瀏覽器URL編碼XSS攻擊是否易受攻擊?
- 19. 任何人都可以解釋這個PHP代碼注入攻擊給我?
- 20. 容易受到SQL注入攻擊的PHP代碼
- 21. 這是否可以防止注入攻擊?
- 22. hibernate命名查詢是否可以防止SQL注入攻擊?
- 23. SQLiteDatabase.insert()是否可以防止SQL注入攻擊?
- 24. 並行程序構造 - 計算機體系結構
- 25. 測試一個網站是否易受Sql注入攻擊
- 26. SQL Server 2008表值是否容易受到SQL注入攻擊?
- 27. Hibernate查詢是否容易受到SQL注入攻擊
- 28. 是否可以使用webHttpBinding對WCF服務執行CSRF攻擊?
- 29. Sql注入 - 下面是否有攻擊?
- 30. 計算機體系結構:如何編碼指令?
這是它支付要小心,第一句話就是「哈佛架構的CPU設計在嵌入式領域常見的。」 如果您研究哈佛馬克I的實際設計,您很快意識到並非CPU設計很重要,它是指令和數據之間嚴格的物理分離 - 從它們各自的存儲區到執行之間,在我意識到的任何當前架構中都不存在。該論文闡述了「改進的哈佛體系結構」。「 – avgvstvs 2013-11-30 02:21:49
@avgvstvs:一些DSP或微控制器真的是哈佛大學,它們具有獨立的總線用於指令存儲器和數據,它們是從ROM運行代碼,並有一些臨時RAM,即使[ARM9顯然有獨立的外部總線] //en.wikipedia.org/wiki/ARM9)(可以連接的方式創建一個修改後的哈佛,而不是哈佛)如果在數據和指令內存之間需要寫入磁盤並重新讀入另一個內存,我認爲大多數人會稱之爲哈佛,而不是修改過的哈佛(雖然修改後的哈佛不僅包括L1的分裂) – 2016-11-19 21:00:32