2010-03-02 60 views
5

我讀過'正常'ARM指令是固定長度 - 32位。並且沒有ARM指令可以跳到另一條指令的中間 - 這對於x86指令很容易實現。ARM是更安全的指令集嗎?

(對於x86,谷歌的氯化鈉試圖「修復」這對準32字節邊界的說明。)

這是否ARM程序更加安全,或者某些攻擊更有抵抗力?

如果是這樣,這是擴展到Thumb和Java指令嗎?

+5

如果攻擊者處於可能導致程序計數器與指令錯位的位置,那麼他可能已經在其他地方利用了安全漏洞,所以系統的安全性已經受到影響。 – 2010-03-02 14:40:24

+0

ARM代碼有可能嗎? – philcolbourn 2010-03-02 20:07:56

回答

3

將操作碼掃描到沙箱過程時,可以更安全的地方。如果你想禁止或截取某些指令,那麼在一個固定長度的指令集上這樣做更容易。在x86體系結構中,指令集取決於上下文,而指令的長度是可變的,所以如果從正確的偏移量解析它,實際上嵌入了另一條指令似乎無害。你可以有效地「跳到一個指令的中間」,仍然有一個有效的指令。

ARM更容易解析,而拇指模式不會改變這一點。所以ARM指令集本身並不是特別安全,但是更容易解析,並且正確解析對於像沙盒這樣的NaCl是必要的

這是一個短而可能不準確的答案。要獲得更明確的答案,請在優秀的matasano博客上查看blog post

1

你在考慮打破棧返回地址或類似的攻擊,所以它分支到一個有效載荷的權利?字對齊不是一個很大的幫助或我想象中的後臺 - 你只需要對齊有效載荷4字節。哦,並且x64需要16字節指令對齊。

這是你的意思嗎?謝謝!

+0

8字節? (8位×8 = 64位) – helios 2010-03-02 14:30:07

+0

我認爲Google的NaCl在32位模式下使用32字節對齊方式。他們沒有(當前?)支持64位模式。 http://nativeclient.googlecode.com/svn/data/docs_tarball/nacl/googleclient/native_client/documentation/nacl_paper.pdf http://code.google.com/p/nativeclient/ – philcolbourn 2010-03-02 19:51:09

+2

x64(與x86一樣)根本不需要指令對齊。一些指令(SSE)需要它們的**數據**爲16字節對齊。但絕對的指示本身並不需要一致。他們中的許多人都是一個字節長:) – 2010-12-06 10:10:19