硬體安全的進階主題與趨勢
關於Arm的指標驗證(PAC)的機制,正確的是下列何者?
- A每次使用指標時,都以系統呼叫詢問OS,請OS確認該指標的值是否正確
- B由指標的值與情境值,以CPU內部的金鑰計算簡短的驗證碼,放入指標的高位元,並在使用前加以確認
- C先以CPU內部的金鑰加密指標的所有位元再存入記憶體,每次使用前在CPU內部解密
查看答案與解析
正確答案:B. 由指標的值與情境值,以CPU內部的金鑰計算簡短的驗證碼,放入指標的高位元,並在使用前加以確認
在64位元指標中不用於虛擬位址的高位元,放入以CPU內部金鑰、由指標的值與情境值(例如堆疊指標)計算出的驗證碼。在使用函式返回位址等之前,以專用指令重新計算並比較,不一致時就把它變成無法使用的位址,因此能提高覆寫堆疊上返回位址之攻擊(ROP等)的難度。軟體無法讀取金鑰,因此攻擊者無法產生與改寫後指標相符的驗證碼。不過,驗證碼的長度取決於虛擬位址寬度等設定,多半只有十幾位元以下,在可以多次猜測的情況下,必須考慮偶然一致的機率。
- A. 每次都詢問OS會非常慢。確認是以CPU的指令進行。
- B. 正確。不知道金鑰的攻擊者無法產生與改寫後指標相符的驗證碼。
- C. 指標的值本身不加密。位址部分保持原樣,只在高位元附加驗證碼。