什麼是影子堆疊

在呼叫函式時,把返回位址的副本也放在一般寫入無法修改的另一個堆疊上,從函式返回時與一般堆疊上的值比較,以發現返回位址遭竄改的機制。若不一致就引發例外並停止執行。由Intel的CET(控制流程強制技術)等以硬體支援,能提高利用堆疊緩衝區溢位的ROP等攻擊的難度。

日文名稱: シャドウスタック

「影子堆疊」出現在1領域的2道練習題中(硬體安全的進階主題與趨勢等)。

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

練習影子堆疊的題目

關於Intel的CET(控制流程強制技術)等所採用的硬體影子堆疊,正確的說明是下列何者?

  1. A每隔一定時間把堆疊的內容儲存到非揮發性記憶體,在程式異常終止時,從這些內容恢復執行
  2. B把函式的區域變數放在與一般堆疊分開的高速記憶體中,減少快取未命中,加快函式呼叫
  3. C呼叫函式時,把返回位址的副本也放在一般寫入無法改變的另一個堆疊上,返回時比較兩者
查看答案與解析

正確答案:C. 呼叫函式時,把返回位址的副本也放在一般寫入無法改變的另一個堆疊上,返回時比較兩者

若返回位址因堆疊緩衝區溢位等而被改寫,函式返回時,執行就會轉移到攻擊者選定的位置。使用影子堆疊時,call指令把返回位址同時推入一般堆疊與影子堆疊,ret指令則比較兩者。影子堆疊的分頁是一般儲存指令無法寫入的特殊分頁,因此改寫了一般堆疊的攻擊者也無法改變副本,不一致時會引發例外並停止執行。

解析中的「影子堆疊」

出現「影子堆疊」的題目(2題)

  1. 關於Intel的CET(控制流程強制技術)等所採用的硬體影子堆疊,正確的說明是下列何者?
  2. 關於以硬體支援控制流程完整性的功能,保護函式返回者與保護經由函式指標等之間接呼叫或跳躍者的組合,正確的是下列何者?

相關名詞

返回位址 緩衝區溢位 控制流程完整性 函式指標 指標驗證(PAC) KPTI(核心分頁表隔離) Meltdown IOMMU(輸入輸出記憶體管理單元) DMA(直接記憶體存取) 目標列刷新(TRR)

前往名詞解釋列表