硬體安全的進階主題與趨勢
關於以硬體支援控制流程完整性的功能,保護函式返回者與保護經由函式指標等之間接呼叫或跳躍者的組合,正確的是下列何者?
- A返回以影子堆疊或指標驗證保護,間接呼叫或跳躍則以要求目的地開頭有指定標記指令的機制保護
- B返回以要求目的地開頭有指定標記指令的機制保護,間接呼叫或跳躍則以影子堆疊保護
- C返回以KPTI(核心分頁表隔離)保護,間接呼叫或跳躍則以IOMMU的位址轉換保護
查看答案與解析
正確答案:A. 返回以影子堆疊或指標驗證保護,間接呼叫或跳躍則以要求目的地開頭有指定標記指令的機制保護
影子堆疊比較返回位址與其副本,指標驗證確認附加在返回位址上的驗證碼,因此兩者都保護函式的返回。對於間接呼叫或跳躍,Intel的IBT與Arm的分支目標識別(Branch Target Identification)要求目的地開頭有標記指令(x86為ENDBR64),並把跳到函式中途等處的分支變成例外。不過,只要是有標記的地方,任何間接分支都能跳過去,因此有時會與編譯器所做、把目的地限制在型別相符之函式的細部檢查搭配使用。KPTI是針對Meltdown的對策,IOMMU是限制設備DMA的機制,兩者都不保護控制流程。
- A. 正確。返回與間接分支由不同的機制保護。
- B. 組合相反。標記指令保護間接分支的目的地,影子堆疊保護返回。
- C. KPTI與IOMMU都不是保護控制流程的機制。