文摘,原文地址:https://msdn.microsoft.com/zh-cn/magazine/cc163519.aspx
威脅建模的本質:盡管通常我們無法證明給定的設計是安全的,但我們可以從自己的錯誤中汲取教訓並避免犯同樣的錯誤。
首先需要知道什么樣的設計是“安全的”,安全設計原則:
開放設計——假設攻擊者具有源代碼和規格。
故障安全預設值——出故障時自動關閉,無單點故障。
最低權限——只分配所需的權限。
機制經濟性——保持簡單、易懂的特性。
分離權限——不允許根據單一條件執行操作。
總體調節——每次檢查所有內容。
最低公用機制——注意保護共享資源。
心理可接受性——他們將使用它嗎?
更進一步,設計完的系統應具有哪些安全相關的屬性?
機密性——數據只應限具有權限的人員訪問。
完整性——數據和系統資源只限適當的人員以適當的方式進行更改。
可用性——系統在需要時一切就緒,可以正常操作。
身份驗證——建立用戶身份(或者接受匿名用戶)。
授權——明確允許或拒絕用戶訪問資源。
認可——用戶無法在執行某操作后否認執行了此操作。
使用STRIDE方法來進行威脅建模,確保應用具有這些安全屬性。STRIDE是指:
Spoofing(假冒) 對應 身份驗證。
Tampering(篡改) 對應 完整性。
Repudiation(否認) 對應 認可。
Information Disclosure(信息泄露) 對應 機密性。
Denial of Service(拒絕服務) 對應 可用性。
Elevation of Privilege(提升權限) 對應 授權。
使用數據流關系圖(DFD)來輔助STRIDE分析,將系統分解成部件,並證明每個部件都不易受相關威脅攻擊。DFD正確是確保威脅模型正確的關鍵所在。FDF包含如下元素:
數據流:通過網絡連接,命名管道,RPC通道等移動的數據。
數據存儲:表示文件,數據庫,注冊表項以及類似項。
進程:計算機運行的計算或程序。
交互方:系統的端點,例如人,web服務器和服務器。
信任邊界:表示可信元素與不可信元素之間的邊界。
在應用STRIDE進行威脅建模分析時,需要注意的問題點:
1、客戶可能從來不會明確提出某些安全性的要求,因此,設計人員必須找到問題描述中內在的安全性要求。
2、不僅必須從一個攻擊者的角度來看待風險問題,還必須“同時”從所有的攻擊者的角度來全盤考慮安全問題。
3、DFD是否切合實際的常規判斷依據:
第一,數據不是憑空臆造的,確保對於每個數據存儲,都有讀取者或寫入者。
第二,注意數據傳輸過程的靈魂作用,確保始終有一個進程讀取和寫入數據。
第三,將單個信任邊界內的相似元素收縮為單個元素,以便於建模。
第四,注意信任邊界任一側的建模細節,嘗試顯示更詳細的信息。
4、信任邊界的真正定義——不相信另一端的任何事物。
5、你根本想象不到其他人為何需要你的數據,你只需認為有人需要你的數據。
6、你與客戶相距越遠,就越難以知道客戶對於不同風險的承受程度。不要對客戶的情形或風險承受程度做過多的假設。
7、攻擊者可能是內部人員,而不是外部人員。他們可能具有合法的訪問權限,可以訪問數據庫以完成自己的工作。
8、針對每個威脅和DFD中的每個元素進行分析:針對所有數據流和數據存儲解決了篡改、信息泄露和拒絕服務威脅;針對所有進程解決了所有STRIDE威脅;針對所有交互方解決了假冒和否認威脅;並解決了影響信任邊界的獨特威脅。
9、STRIDE模型很好的一點在於,它能讓你洞察你所需的抑制措施的本質。
10、使用預構建的威脅樹可以確保不會忽略已知的攻擊。
總結:對於任何挑戰,一個好的策略是將問題分解成若干更易於解決的小問題。關鍵一點是找到適合你的方法,較早將其應用於設計中,記住任何組件都可能失敗,並進行必要的研究,以確保你已考慮了已知的攻擊模式