# 威脅建模 Threat Modeling 威脅建模的理念[Threat modeling: the sooner the better, but never too late.](https://owasp.org/www-project-threat-model/) 將整體安全盡可能地做到Shift left,在開發的早期階段利用結構化的方式去找出潛在的威脅。 參考[OWASP提到的建模理念](https://owasp.org/www-community/Threat_Modeling_Process#data-flow-diagrams) 微軟的模型使用的是STRIDE | 類別 | 描述 | | -------- | --------- | | 詐騙 | 涉及不合法的存取然後使用另一個使用者的驗證資訊,例如使用者名稱和密碼| | 竄改 | 涉及惡意資料修改。 範例包括未經授權變更持續性資料 (例如保存在資料庫中的資料),以及修改在兩部電腦之間透過開放式網路 (例如網際網路) 流動的資料| | 否認性 | 與拒絕執行動作但沒有其他任何一方有辦法另外證明的使用者有關,比方說,使用者在無法追蹤禁止作業的系統中執行非法作業。 不可否認性是指系統反擊否認性威脅的能力。 例如,購買項目的使用者在收到項目時可能必須簽名。 接著,廠商可以使用已簽署的收據做為使用者確實收到包裹的證明 | | 洩露資訊 | 涉及將資訊暴露給不應該具有其存取權的個人,例如,使用者可以讀取它們未被授權存取的檔案,或入侵者能夠讀取在兩部電腦之間傳輸的資料 | | 拒絕服務 | 阻斷服務 (DoS) 攻擊可阻斷對有效使用者提供的服務,例如,藉由讓網頁伺服器暫時無法存取或無法使用。 您必須保護特定類型的 DoS 威脅,即可改善系統可用性和可靠性| | 提高權限 | 無特殊權限的使用者會取得具有特殊權限的存取,故有足夠的存取權可入侵或摧毀整個系統。 提高權限威脅包含攻擊者已有效地滲透所有系統防禦,而攻擊者本身成為受信任系統一部分的情況,的確是很危險的情況| 將所有資訊實現四個步驟,並繪製出Data Flow Diagrams(DFD) > [用以顯示資料如何在應用程式中的邏輯圖] ![image](https://hackmd.io/_uploads/rkJfovB2kg.png) | 步驟 | 名稱 | 內容 | | ---- | ------ | -------------------------------------------------------- | | 1 | Design | 掌握系統的所有需求,並建立資料流程圖。 | | 2 | Break | 將威脅模型化架構套用至資料流程圖,並找出潛在安全性問題。 | | 3 | Fix | 決定如何使用正確的安全性控制措施組合來處理每個問題。 | | 4 | Verify | 驗證是否已符合需求、找到問題,以及實作安全性控制措施。 | 流程圖繪製-圖形定義 ![image](https://hackmd.io/_uploads/rJqv3wrhkg.png) 互動流程 ![image](https://hackmd.io/_uploads/HJ8unDHnJg.png) ![image](https://hackmd.io/_uploads/BypdhDB2kg.png) 資料流程圖 深度層 | Layer | 描述 | | ----- | ---------------------------------------------------------- | | 0 | 所有系統都需要此層,且此層中包含主要系統組件。 | | 1 | 大部分系統需要此層,且此層中包含每個系統組件的圖表。 | | 2 | 高敏感性的系統需要此層,且此層中包含系統子組件的圖表。 | | 3 | 關鍵或核心層級的系統需要此層,且此層中包含每個流程的圖表。 | ![image](https://hackmd.io/_uploads/HyoT3vBhJx.png) 繪製圖形的思考邏輯 1. 以攻擊者為焦點 2. 以資產為焦點 ## Microsoft Threat Modeling Tools 此工具為微軟開發之免費工具,可以在windows裡面使用,並且依照Microsoft Threat Modeling 微軟威脅模型的標準進行設計,可以協助資安人員定義威脅 [微軟官方工具介紹說明](https://learn.microsoft.com/zh-tw/azure/security/develop/threat-modeling-tool-getting-started) [微軟官方文件參考](https://learn.microsoft.com/zh-tw/training/modules/tm-use-recommended-tools-to-create-a-data-flow-diagram/2-threat-modeling-tool) [下載連結](https://aka.ms/threatmodelingtool) 操作簡介如下 點選SDL TM Knowledge Base然後按下Create A Model![image](https://hackmd.io/_uploads/r1WRfuS2ke.png) 操作介面大致如下,可以從右側元件區尋找物件,並依照認知上的網路架構去畫出目前環境中的流向,可以利用Generic Data Flow繪製網路流量特別注意目錄也是可以拉取的 ![image](https://hackmd.io/_uploads/ByykQdrnJl.png) 對於圖形的內容都可以重新命名,不過要注意裡面的內容,例如下圖改成Command![image](https://hackmd.io/_uploads/ryw17_r2kx.png) 繪製出基本圖形後,點選View → Analysis View ![image](https://hackmd.io/_uploads/SkdxQdBnJx.png) 此時於版面下方會出現自動判斷威脅存在的地方![image](https://hackmd.io/_uploads/H19ZmdSnkx.png) 在View處可以點選 Threat Properties近一步看到威脅的說明與描述![image](https://hackmd.io/_uploads/ByKBEuH3yx.png) 點選Reports 可以產生威脅評估報告![image](https://hackmd.io/_uploads/BybL4drh1e.png) 進行Generate Report ![image](https://hackmd.io/_uploads/BJpUVurh1e.png) 可以產出一個htm的報告檔案![image](https://hackmd.io/_uploads/B1HPV_rn1l.png) ## Templete Check 打開Microsoft Threat Modeling tools,點選Open templete 打開範本 ![image](https://hackmd.io/_uploads/SyvNabYhyl.png) 內建已包含下列幾項 ![image](https://hackmd.io/_uploads/SJg5T-Fhyx.png) 點選Threat Types ![image](https://hackmd.io/_uploads/H1B6a-thyl.png) 裡面就會列出,為何會產出這些威脅的判斷式 ![image](https://hackmd.io/_uploads/HyNb0WFnJg.png) 本文參考資料-[亂馬客](https://rainmakerho.github.io/2019/07/03/2019016/ )