什麼是MTE(記憶體標記擴充)

Arm的Memory Tagging Extension的縮寫,於Armv8.5-A加入。對記憶體每16位元組附加4位元的標記,並在指標的高位元也放入4位元的標記,每次存取時由CPU確認兩者是否一致。能以低負擔、以機率方式發現使用已釋放的記憶體與越界存取等錯誤。

日文名稱: MTE(メモリタギング拡張)

「MTE(記憶體標記擴充)」出現在1領域的1道練習題中(硬體安全的進階主題與趨勢等)。

這個名詞所屬的領域: 硬體安全的進階主題與趨勢

比較標記的機制

配置記憶體時,配置程式庫會為區域的每16位元組設定記憶體端的標記,並把相同的值放入指標的高位元(不用於位址轉換的部分)後傳回。CPU在每次載入或儲存時,比較指標的標記與存取目標記憶體的標記,不同時視為錯誤。若在釋放區域時更換標記,就能發現以舊指標存取已釋放區域的錯誤。記憶體端的標記與資料分開儲存。

機率性的偵測

標記為4位元,只有16種值,隨機選出的標記偶然一致的機率為 1/16。也就是說,一次錯誤存取被漏掉的機率約為6%,約94%能被發現。若在配置時下工夫,例如相鄰區域一定給予不同的標記,就能確實發現溢出到相鄰區域的錯誤。為了儲存標記,需要額外約 4/128 = 3.125% 的記憶體容量。

檢查的模式

發現錯誤時立即引發例外的同步模式,能知道是哪一道指令出錯,適合開發與重要的處理,但負擔稍大。先記錄錯誤、之後再一併通知的非同步模式負擔較小,適合在大量設備上運作的同時收集錯誤。依用途不同,可用於開發中的檢查,也可用於防範出貨後設備遭受攻擊。

練習MTE(記憶體標記擴充)的題目

在Arm的MTE(記憶體標記擴充)中,記憶體每16位元組附加4位元的標記,指標的高位元也放入4位元的標記,每次存取時由CPU確認兩者是否一致。考慮以指向已釋放區域的舊指標存取該區域的錯誤。假設重新配置區域時的新標記,是從16種值中均勻隨機選出,則標記偶然一致而漏掉錯誤的機率是下列何者?

  1. A1/16(約6.3%)
  2. B1/4(25%)
  3. C15/16(約93.8%)
查看答案與解析

正確答案:A. 1/16(約6.3%)

標記為4位元,可取的值有 2⁴ = 16 種。若新標記從16種值中均勻選出,與舊指標的標記偶然一致的機率為 1/16 = 6.25%(約6.3%),其餘 15/16 的情況會被偵測為不一致。即使只有1次存取,也有約94%的機率被發現,因此能在大量設備上運作的同時發現錯誤,並提高攻擊的難度。若在配置時讓相鄰區域一定帶有不同的標記,溢出到相鄰區域的錯誤就能確實被偵測。

常見問題

MTE用在哪裡?

截至2020年代中期,部分智慧型手機的SoC等已支援,OS與記憶體配置程式庫正逐步將它用於開發時的檢查,以及提高攻擊難度的啟用。需要硬體與軟體雙方都支援。

有了MTE,就能防止利用記憶體錯誤的攻擊嗎?

它能發現許多錯誤、提高攻擊難度,但標記可能偶然一致,而標記的值若被猜中或洩漏,效果就會降低。由於偵測是機率性的,需要確定性保證時,要與CHERI這類機制或記憶體安全的程式語言搭配使用。

出現「MTE(記憶體標記擴充)」的題目(1題)

  1. 在Arm的MTE(記憶體標記擴充)中,記憶體每16位元組附加4位元的標記,指標的高位元也放入4位元的標記,每次存取時由CPU確認兩者是否一致。考慮以指向已釋放區域的舊指標存取該區域的錯誤。假設重新配置區域時的新標記,是從16種值中均勻隨機選出,則標記偶然一致而漏掉錯誤的機率是下列何者?

相關名詞

目標列刷新(TRR) 指標驗證(PAC) 控制流程完整性 硬體物料清單(HBOM) 雷射故障注入 影子堆疊 數論轉換 暫態執行攻擊 機密運算 邏輯鎖定

前往名詞解釋列表