與傳統 Return‑Oriented Programming(ROP) 不同,SFOP 並不是依靠操控 return address,而是利用 連續 fault 事件與 signal handler 來推進控制流程。
CET 主要包含兩類保護:
理論上,這些機制可以阻止攻擊者將程式跳轉到不應該執行的位置。
但 CET 的設計主要針對 程式內部的不合法控制流程。
SFOP 則完全繞開這個假設。
SFOP 的關鍵洞察是:
訊號傳遞本身就是作業系統合法的控制流程轉移。
大致攻擊步驟如下:
在這個模型下,每一個 signal handler 都變成攻擊鏈的一個節點。
在 Linux 中,程式可以為多種訊號註冊 handler,包括 SIGSEGV。這些 handler 原本用途是:
SFOP 將這個設計反過來利用:
於是,signal handler 本身就變成一個 可重用的控制流程 building block。
研究人員提出了幾種可能減低 SFOP 風險的方向。
其中一個方向是 修改 Linux kernel 的 signal handling 行為,限制攻擊者反覆利用 segmentation fault 和 signal handler 來建立攻擊鏈。
另一個研究提出的防護機制叫 PLaTypus。
PLaTypus 的做法是:
SFOP 再次提醒安全研究界一件事:
單靠硬體安全機制並不足夠。
即使 CPU 已經加入像 CET 這樣的保護,只要作業系統層仍然提供可被濫用的合法控制流程,攻擊者仍然可能找到繞過方法。
對系統安全工程師來說,真正有效的防護需要同時考慮整個技術棧:
因為攻擊者往往只需要找到 其中一層的可利用入口。
Comments
0 comments