一、什么是威脅建模
簡單的來說,威脅建模就是通過結構化的方法,系統的識別、評估產品的安全風險和威脅,並針對這些風險、威脅制定消減措施的一個過程。
威脅建模是一個非常有用的工具,它的核心是“像攻擊者一樣思考”。威脅建模可以在產品設計階段、架構評審階段或者產品運行時開展,強迫我們站在攻擊者的角度去評估產品的安全性,分析產品中每個組件是否可能被篡改、仿冒,是否可能會造成信息泄露、拒絕攻擊。威脅建模的作用更偏向於確保產品架構、功能設計的安全,無法保證編碼的安全,但是輸出的威脅建模報告中包含了全面的安全需求,這些安全需求不僅包括大的方案設計,如要認證、鑒權、審計,也可以包括安全細節的實現,比如具體的認證方式、密碼使用哪種安全算法存儲,使用什么方法生成安全隨機數等。所以,威脅建模雖不能保證編碼的安全,但可以指導研發人員編寫出安全的代碼,同時也可以輔助滲透測試人員開展安全測試。
二、為什么要做威脅建模
1. 站在攻擊者的角度通過識別威脅,盡可能多的發現產品架構和功能設計中的安全風險
2. 制定措施消減威脅,規避風險,確保產品的安全性
三、應該在什么時候做威脅建模
威脅建模應融入企業的軟件開發安全生命周期(SDL)中。
1. 新產品或新功能的設計階段應開展威脅建模,發現風險、制定消減措施,消減措施是安全需求的一部分,需落入產品需求跟蹤,確保產品安全。
2. 系統運行過程中也可以開展威脅建模,發現的風險可以為企業滲透測試提供支持,盡可能發現更多的漏洞。
四、常用的威脅建模方法—STRIDE
STRIDE是微軟開發的用於威脅建模的方法和工具。
STRIDE威脅建模的總體流程:
五、STRIDE的六類威脅與四類元素
在正式開始威脅建模前,我們先來了解STRIDE的六類威脅和數據流圖中的四類元素。
5.1 六類威脅
STRIDE是從攻擊者的角度,把威脅划分成6個類別,分別是Spooling(仿冒)、Tampering(篡改)、Repudiation(抵賴)、InformationDisclosure(信息泄露)、Dos(拒絕服務)和Elevation of privilege (權限提升)。
為什么划分這6類,這與信息安全三要素和信息安全基本的三個屬性相關。
信息安全三要素 |
信息安全三屬性 |
保密性 |
認證 |
完整性 |
鑒權 |
可用性 |
審計 |
表:六類威脅與信息安全三要素、三屬性的對應關系
威脅 |
安全屬性 |
定義 |
舉例 |
仿冒(S) |
認證 |
冒充人或物 |
冒充其他用戶賬號 |
篡改(T) |
完整性 |
修改數據或代碼 |
修改訂單信息 |
抵賴(R) |
審計 |
不承認做過某行為 |
不承認修改行為 |
信息泄露(I) |
保密性 |
信息被泄露或竊取 |
用戶信息被泄露 |
拒絕服務(D) |
可用性 |
消耗資源、服務可不用 |
DDOS導致網站不可用 |
權限提升(E) |
授權 |
未經授權獲取、提升權限 |
普通用戶提升到管理員 |
隨着全球對隱私保護重視程度的加大,隱私安全也成了產品的一個重要威脅,因此STRIDE的6個威脅也添加了一項隱私(Privacy),也就變成了ASTRIDE,A代表Advanced。
5.2 四類元素
我們在來了解下四類元素,STRIDE威脅建模的第一步就是繪制數據流圖,數據流圖是由【外部實體】、【處理過程】、【數據存儲】、【數據流】這四類元素組成。STRIDE威脅建模的核心就是使用這四類元素繪制數據流圖,然后分析每個元素可能面臨的上述六類威脅,針對這些威脅制定消減方法。
四類元素的介紹如下:
1. 外部實體
系統控制范圍之外的用戶、軟件系統或者設備。作為一個系統或產品的輸入或輸出。在數據流圖中用矩形表示外部實體。
2. 處理過程
表示一個任務、一個執行過程,一定有數據流入和流出。在數據流圖中用圓形表示。
3. 數據存儲
存儲數據的內部實體,如數據庫、消息隊列、文件等。用中間帶標簽的兩條平行線表示。
4. 數據流
外部實體與進程、進程與進程或者進程與數據存儲之間的交互,表示數據的流轉。在數據流圖中用箭頭表示。
使用以上四個元素繪制完數據流圖后,還需要引入信任邊界,安全的本質就是信任問題,信任邊界往往就是攻擊發起的地方。在數據流圖中可以用紅色的虛線隔離出信任邊界。
如下是一個比較簡單的數據流圖演示:
六、STRIDE四類元素與六類威脅的對應關系
具體的對應關系如下圖所示,並不是每個元素都會面臨6個威脅,比如外部實體只有仿冒和抵賴兩類威脅,我們不用關心外部實體會不會被篡改、會不會發生信息泄露、以及拒絕服務等,因為外部實體本來就是我們控制范圍之外的。
其中進程(處理過程)會面臨全部的6個威脅,數據存儲中Repudiation(抵賴)是紅色,表示只有存儲的數據是審計類日志才會有抵賴的風險,存儲其他數據的時候無抵賴。
七、威脅建模的整體流程
通過上面的介紹,我們已經了解了四個元素和六個威脅,STRIDE威脅建模的總體流程:
7.1 微軟威脅建模工具
微軟發布了STRIDE威脅建模工具,提供免費下載,因為使用便利性、威脅攻擊庫等原因,微軟建模工具不見得可以直接拿來在企業內推廣使用。
下載地址:https://docs.microsoft.com/en-us/azure/security/azure-security-threat-modeling-tool
7.1.1 安裝過程:
7.1.2 工具首頁:
7.1.3 Create A Model(繪制數據流圖)
7.1.4 威脅分析模式
進入分析模式后,數據流圖下方會自動彈出很多的威脅以及建議,如下圖所示:
可以在Justification里面填寫相關的消減舉措。
7.1.5 導出報告
7.2 繪制數據流圖
介紹微軟威脅建模工具的時候也可以看到,繪制數據流圖就是用上面所介紹的【外部實體】、【處理過程(進程)】、【數據存儲】、【數據流】把系統(產品)的數據流轉圖畫出來。這個工作需要開展威脅建模工作的人對產品有比較深入的了解,如果有遺漏可能就會導致威脅分析不全,具體在做的過程中可以把產品架構圖拿來參考,如果是新上線的重要且復雜度較高的產品,也可以由產品經理、研發、安全坐在一起完成。
7.3 分析威脅
根據繪制的數據流圖,按照元素與威脅對應表,分析所有元素可能遇到的威脅。這部分工作對威脅分析人員的安全能力要求很高,如果威脅分析不全,則風險就會被帶到線上。而且威脅建模工作不僅僅是安全人員在架構評審時去做,更應該是產品經理在產品設計階段需要完成,這就要求非安全人員要具備較高的安全能力。所以,企業一般需要借助威脅建模工具去輔助進行威脅分析。
威脅建模工具需要具備兩個庫,一個是威脅分析階段使用的《威脅庫》,一個是制定消減措施階段使用的《消減措施庫》。這里的《威脅庫》可以分為兩類,一類就是各種威脅,比如繞過認證、獲取口令、破解口令等等,還有一類是合規,各類法律法規的要求,比如隱私聲明、企業內部要求等。
當我們在數據流圖上面選中某個元素進行威脅分析時,威脅建模工具可以自動的把這個元素可能涉及的威脅列出來,讓分析人員去選擇,並針對選擇的威脅給出一定的消減措施提醒,這樣便可以降低對分析人員的能力要求。
威脅分析舉例,用戶通過瀏覽器登錄web網站,用戶就是一個外部實體,面臨的威脅包括仿冒和抵賴。
仿冒威脅分析:
1. 【威脅】攻擊者仿冒用戶登錄網站
【消減措施】增加認證功能,通過用戶名+密碼的方式認證,暫不使用雙因素、短信、指紋等其他認證方式
2. 【威脅】攻擊者繞過當前的認證方式,仿冒用戶登錄
【消減措施】:
2.1 增加圖形驗證碼防暴力破解
2.2 密碼增加復雜度要求,防暴力破解
2.3 認證錯誤返回統一提示,防止checkUser
2.4 確保密碼重置、密碼找回邏輯的安全,謹防繞過
3. 【威脅】攻擊者通過中間人竊取用戶密碼
【消減措施】:
3.1 登錄請求走HTTPS
3.2 開啟HSTS
3.3 確保SSL證書安全,算法套中使用的是安全的算法
3.4 密碼傳輸前先做一次加密或哈希
4. 【威脅】攻擊者竊取正常用戶的會話,仿冒用戶登錄web網站
【消減措施】:
4.1 長度大於24位,通過安全隨機數生成
4.2 登錄前后強制改變會話
4.3 限制會話過期時間
不在一一列舉,總之把可能遇到的威脅列到《威脅庫》,讓威脅建模人員選擇涉及的威脅並確認消減措施。同時,需要認識到威脅庫是需要動態更新的一個過程,消減措施也要遵循安全設計的基本原則,如縱深防御、授權最小化、默認安全,滿足安全基本原則的消減措施,才可能讓產品更安全、抵御更多的攻擊。
上述所列舉的所有消減措施都是安全需求,最終輸出一份威脅建模報告,研發人員在開發階段需要參考威脅建模報告,把這些全部需求實現。SDL代碼評審階段也可以參考威脅建模報告對研發人員的實現情況進行正向和逆向測試。
7.4 風險評估
風險=影響*可能性
利用風險評估方法,為識別的威脅進行風險定級,根據企業實際情況,確認哪些級別的風險必須規避、哪些級別的風險可以消減后遺留。
7.5 制定、落實消減措施
制定威脅消減措施,並落入軟件安全開發生命周期,確保措施有效落地執行。
常見的消減措施如下:
威脅 |
消減措施 |
仿冒 |
身份管理、認證(密碼認證、單點登錄、雙因素、證書認證)、會話管理 |
篡改 |
完整性校驗、訪問控制 |
抵賴 |
安全管理、安全審計、監控 |
信息泄露 |
敏感信息保護、數據加密、訪問控制 |
拒絕服務 |
負載均衡 防DDOS |
權限提升 |
授權,最小化 |
八、 一點關於威脅建模面臨的困境與對策的思考
威脅建模在企業經常面臨落地、推廣困難的問題,主要原因有以下幾方面:
1. 流程復雜,耗費時間
2. 人員能力要求高
3. 需要開發威脅建模工具、維護威脅庫、消減庫
威脅建模是一個結構化的分析方法,目的是盡可能多的識別產品風險,正因為要把風險盡可能識別全,所以面臨流程復雜,花費時間多、推廣困難的困境。
企業可以根據自己的實際情況做調整和優化,找到平衡點,比如:
1. 以產品維護控制范圍
1.1 新產品一般周期研發、上線比較長,可以預留威脅建模時間
1.2 重要系統的重要功能要求開展威脅建模
1.3 其他產品和功能不做要求
2. 以風險角度控制范圍
2.1 對暴露在信任邊界的元素開展威脅建模
2.2 對暴露到公網的元素開展威脅建模
2.3 優化威脅庫,僅保留風險級別比較高的威脅
3. 優化威脅建模工具
通過工具降低對威脅建模人員的能力要求,提高威脅建模效率,減少時間。