系統安全與漏洞利用

威脅模型(threat model)

在你能判斷一把鎖夠不夠好之前,你得先問:對「誰」夠好?一條腳踏車纜線鎖能擋住順手牽羊的賊,卻擋不住帶斷線鉗的人;若你面對的是後者,卻為前者打算,那很傻。威脅模型就是把那個問題明說出來的安全版本:清楚陳述你在保護什麼、攻擊者是誰、他們能做什麼,從而哪些攻擊在範圍內、哪些刻意排除在外。

具體而言,建立威脅模型意味著寫下四件事。第一,「資產」——什麼值得保護(使用者密碼、私鑰、更新的完整性)。第二,「攻擊者」的能力與目標——他們能送網路封包、在機器上執行無特權程式碼、觀察時間、控制一個共置的虛擬機、還是握有實體存取?第三,「信任邊界」——資料從受信任跨到不受信任的那些界線,例如你的行程與網路輸入之間、使用者空間與核心之間、或沙箱與主機之間的邊界;每一個跨越這種邊界的輸入都必須被驗證。第四,由此得出的範圍內威脅與各自的防禦。一個實作範例:對網頁伺服器而言,網路不受信任,所以信任邊界在通訊端;所有進來的位元組在被剖析與驗證之前都是敵意的;能送請求但不能執行本地程式碼的攻擊者在範圍內,而能實體進入機房的攻擊者可能被明確排除在外。

它之所以重要,是因為沒有它,安全聲稱就毫無意義——「這安全嗎?」在「對抗什麼?」被確定之前無從回答。誠實的說法:威脅模型是一組假設,而它最大的危險是一個未明說或錯誤的假設(在本地使用者其實不可信時假設他可信,或在邊界其實未施行時假設它已施行)。它與「縱深防禦」搭配——層層堆疊獨立的防禦(最小權限、沙箱、金絲雀、ASLR),使攻破其一不等於攻破全部——正是因為模型中的任一單一假設都可能失效。威脅模型是一份活的文件,隨系統與其攻擊者變化而重新檢視。

// 一個網頁服務的小型威脅模型: 資產: 工作階段權杖、使用者資料 攻擊者: 能送任意 HTTP、不能執行本地程式碼(範圍內) 握有實體伺服器存取(範圍「外」) 信任邊界: 通訊端 -> 驗證每一個跨越它的位元組 防禦: 輸入驗證、最小權限、ASLR + DEP(縱深防禦)

點名資產、攻擊者與信任邊界,把「它安全嗎?」變成一個真正能回答的問題。

威脅模型只與它的假設一樣好;那個沉默或錯誤的假設(信任一個其實不可信的輸入或邊界)正是多數失敗藏身之處——用縱深防禦搭配它,使沒有任何單一假設是承重的。

又称
threat modelingattacker modeltrust boundarydefense in depth威脅建模信任邊界