Microsoft SDL-威脅建模工具Threat Modeling Tool

0x00 背景

威脅建模工具是 Microsoft 安全開發生命週期 (SDL) 的核心要素。潛在安全問題處於無需花費過多成本即可相對容易解決的階段,軟件架構師可以使用威脅建模工具提前識別這些問題。因此,它能大幅減少開發總成本。此外,我們設計該工具時考慮到了非安全專家的體驗,爲他們提供有關創建和分析威脅模型的清晰指導,讓所有開發人員都可以更輕鬆地使用威脅建模。

通過使用Microsoft threat-modeling工具進行進行威脅建模

0x01 下載安裝

前期準備:

  1. 需要安裝netframework 4.7.1 及其以上
  2. 下載代理程序後,需要聯網進行安裝

軟件下載安裝:

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool

 

 

0x02 入門指南

指導你開始使用 Microsoft SDL 威脅建模方法的過程,並演示如何使用該工具來開發優秀的威脅模型,以作爲安全進程的主幹。詳細文檔在微軟官網有連接,此外可以百度:威脅建模工具Microsoft Threat Modeling Tool

入門

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-getting-started

威脅建模工具功能概述

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-feature-overview

威脅

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-threats

發行版

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-releases

 

0x03 緩解措施

威脅建模工具緩解措施根據 Web 應用程序安全框架分類,具體如下:

類別

描述

審覈和日誌記錄

誰在何時做了什麼? 審覈與日誌記錄是指應用程序如何記錄安全相關的事件

身份驗證

你是誰? 身份驗證是某個實體證明另一實體的身份的過程,這通常是通過用戶名和密碼等憑據完成的。

授權

該怎麼辦? 授權是指應用程序如何提供對資源和操作的訪問控制

通信安全

在與誰對話? 通信安全可確保以儘量安全的方式進行所有通信

配置管理

應用程序的運行身份是什麼? 它連接到哪些數據庫? 如何管理應用程序? 如何保護這些設置? 配置管理是指應用程序如何處理這些操作問題

加密

如何保守機密(保密性)? 如何防止對數據或庫(完整性)進行篡改? 如何針對必須強加密的隨機值提供種子? 加密是指應用程序強制實施保密性和完整性

異常管理

當應用程序中的方法調用失敗時,應用程序會採取什麼措施? 透露的信息量有多大? 是否向最終用戶返回友好的錯誤信息? 是否向調用方傳回有用的異常信息? 應用程序是否正常失敗?

輸入驗證

如何知道應用程序接收的輸入有效且安全? 輸入驗證是指應用程序在進一步處理之前篩選、清理或拒絕輸入。 請考慮通過入口點限制輸入,通過出口點爲輸出編碼。 是否信任數據庫和文件共享等源中的數據?

敏感數據

應用程序如何處理敏感數據? 敏感數據是指應用程序如何處理必須在內存中、通過網絡或在持久性存儲中保護的任何數據

會話管理

應用程序如何處理和保護用戶會話? 會話是指用戶與 Web 應用程序之間的一系列相關交互

它可以幫助識別:

  • 最常見的錯誤發生在哪個位置
  • 可在哪個位置實施可行性最大的改進

因此,可以使用這些類別來重點完成並優化安全工作,以便在輸入驗證、身份驗證和授權類別中出現最流行的安全問題時,可以從這些位置着手。 

安全框架:審覈和日誌記錄 | 緩解措施

產品/服務

文章

Dynamics CRM

  1. 識別解決方案中的敏感實體並實現更改審覈

Web 應用程序

  1. 確保在應用程序中強制實施審覈與日誌記錄
  2. 確保實施日誌輪轉和分離
  3. 確保應用程序不會記錄敏感的用戶數據
  4. 確保對審覈與日誌文件限制訪問
  5. 確保記錄用戶管理事件
  6. 確保在系統中針對濫用提供內置防禦機制
  7. 在 Azure 應用服務中啓用 Web 應用的診斷日誌記錄

數據庫

  1. 確保在 SQL Server 中啓用登錄審覈
  2. 在 Azure SQL 中啓用威脅檢測

Azure 存儲

  1. 使用 Azure 存儲分析來審覈對 Azure 存儲的訪問

WCF

  1. 實現充分的日誌記錄
  2. 實現充分的審覈失敗處理

Web API

  1. 確保在 Web API 中強制實施審覈與日誌記錄

IoT 現場網關

  1. 確保在現場網關中強制實施適當的審覈與日誌記錄

IoT 雲網關

  1. 確保在雲網關中強制實施適當的審覈與日誌記錄

 

安全框架:身份驗證 | 緩解措施

產品/服務

文章

Web 應用程序

  1. 考慮使用標準身份驗證機制向 Web 應用程序進行身份驗證
  2. 應用程序必須安全處理失敗的身份驗證方案
  3. 啓用升級或自適應的身份驗證
  4. 確保適當鎖定管理界面
  5. 安全實施忘記密碼功能
  6. 確保實施密碼和帳戶策略
  7. 實施控制來防止用戶名枚舉

數據庫

  1. 儘可能使用 Windows 身份驗證連接到 SQL Server
  2. 儘可能使用 Azure Active Directory 身份驗證連接到 SQL 數據庫
  3. 使用 SQL 身份驗證模式時,確保對 SQL Server 實施帳戶和密碼策略
  4. 不要在包含的數據庫中使用 SQL 身份驗證

Azure 事件中心

  1. 結合 SaS 令牌使用每個設備的身份驗證憑據

Azure 信任邊界

  1. 啓用面向 Azure 管理員的多重身份驗證

Service Fabric 信任邊界

  1. 限制對 Service Fabric 羣集的匿名訪問
  2. 確保 Service Fabric 的客戶端到節點證書不同於節點到節點證書
  3. 使用 AAD 在 Service Fabric 羣集中對客戶端進行身份驗證
  4. 確保從批准的證書頒發機構 (CA) 獲取 Service Fabric 證書

標識服務器

  1. 使用標識服務器支持的標準身份驗證方案
  2. 使用可縮放的替代方案覆蓋默認的標識服務器令牌緩存

計算機信任邊界

  1. 確保部署的應用程序的二進制文件經過數字簽名

WCF

  1. 連接到 WCF 中的 MSMQ 隊列時啓用身份驗證
  2. WCF - 不要將消息 clientCredentialType 設置爲 none
  3. WCF - 不要將傳輸 clientCredentialType 設置爲 none

Web API

  1. 確保使用標準身份驗證技術保護 Web API

Azure AD

  1. 使用 Azure Active Directory 支持的標準身份驗證方案
  2. 使用可縮放的替代方案覆蓋默認的 ADAL 令牌緩存
  3. 確保使用 TokenReplayCache 防止 ADAL 身份驗證令牌重放
  4. 使用 ADAL 庫來管理從 OAuth2 客戶端發往 AAD(或本地 AD)的令牌請求

IoT 現場網關

  1. 對連接到現場網關的設備進行身份驗證

IoT 雲網關

  1. 確保對連接到雲網關的設備進行身份驗證
  2. 使用每個設備的身份驗證憑據

Azure 存儲

  1. 確保只對所需的容器和 Blob 授予匿名讀取訪問權限
  2. 使用 SAS 或 SAP 對 Azure 存儲中的對象授予受限的訪問權限

安全框架:授權 | 緩解措施

產品/服務

文章

計算機信任邊界

  1. 確保配置適當的 ACL 來限制對設備中的數據進行未經授權的訪問
  2. 確保將特定於用戶的敏感應用程序內容存儲在用戶配置文件目錄中
  3. 確保以最低特權運行部署的應用程序

Web 應用程序

  1. 處理業務邏輯流時有序執行步驟順序
  2. 實施頻率限制機制來防止枚舉
  3. 確保實施適當的授權並遵循最低特權原則
  4. 業務邏輯和資源訪問授權決策不應該基於傳入的請求參數
  5. 確保不可通過強行瀏覽來枚舉或訪問內容和資源

數據庫

  1. 確保使用最低特權帳戶連接到數據庫服務器
  2. 實施行級別安全性 RLS 來防止租戶訪問彼此的數據
  3. Sysadmin 角色應該只包括必要的有效用戶

IoT 雲網關

  1. 使用最低特權令牌連接到雲網關

Azure 事件中心

  1. 使用擁有僅限發送權限的 SAS 密鑰來生成設備令牌
  2. 不要使用可提供事件中心直接訪問權限的訪問令牌
  3. 使用擁有所需最低權限的 SAS 密鑰連接到事件中心

Azure Document DB

  1. 儘可能使用資源令牌連接到 Azure Cosmos DB

Azure 信任邊界

  1. 使用 RBAC 啓用對 Azure 訂閱的精細訪問管理

Service Fabric 信任邊界

  1. 使用 RBAC 限制客戶端對羣集操作的訪問

Dynamics CRM

  1. 根據需要執行安全建模並使用字段級別安全性

Dynamics CRM 門戶

  1. 執行門戶帳戶的安全建模並注意門戶的安全模型不同於 CRM 的其他組件

Azure 存儲

  1. 針對 Azure 表存儲中的一系列實體授予精細權限
  2. 使用 Azure 資源管理器對 Azure 存儲帳戶啓用基於角色的訪問控制 (RBAC)

移動客戶端

  1. 實施隱式越獄或 root 檢測

WCF

  1. WCF 中的弱類引用
  2. WCF - 實施授權控制

Web API

  1. 在 ASP.NET Web API 中實施適當的授權機制

IoT 設備

  1. 如果設備支持需要不同權限級別的各種操作,應在設備中執行授權檢查

IoT 現場網關

  1. 如果現場網關支持需要不同權限級別的各種操作,應在現場網關中執行授權檢查

 

 

安全框架:通信安全 | 緩解措施

產品/服務

文章

Azure 事件中心

  1. 使用 SSL/TLS 保護與事件中心之間的通信

Dynamics CRM

  1. 檢查服務帳戶特權,並檢查自定義服務或 ASP.NET 頁面是否遵循 CRM 的安全性

Azure 數據工廠

  1. 本地 SQL Server 連接到 Azure 數據工廠時使用數據管理網關

標識服務器

  1. 確保發往標識服務器的所有流量都通過 HTTPS 連接傳輸

Web 應用程序

  1. 驗證用於對 SSL、TLS 和 DTLS 連接進行身份驗證的 X.509 證書在 Azure 應用服務中爲自定義域配置 SSL 證書
  2. 強制要求發往 Azure 應用服務的所有流量都通過 HTTPS 連接傳輸啓用 HTTP 嚴格傳輸安全性 (HSTS)

數據庫

  1. 確保加密 SQL Server 連接並驗證證書
  2. 強制以加密形式來與 SQL Server 通信

Azure 存儲

  1. 確保與 Azure 存儲之間的通信通過 HTTPS 進行
  2. 如果無法啓用 HTTPS,請在下載 Blob 後驗證 MD5 哈希
  3. 使用 SMB 3.0 兼容的客戶端來確保傳輸到 Azure 文件共享的數據經過加密

移動客戶端

  1. 實施證書綁定

WCF

  1. 啓用 HTTPS - 安全傳輸通道
  2. WCF:將消息安全保護級別設置爲 EncryptAndSign
  3. WCF:使用最低特權帳戶運行 WCF 服務

Web API

  1. 強制要求發往 Web API 的所有流量都通過 HTTPS 連接傳輸

用於 Redis 的 Azure 緩存

  1. 確保與 Azure Redis 緩存之間的通信通過 SSL 進行

IoT 現場網關

  1. 保護設備與現場網關之間的通信

IoT 雲網關

  1. 使用 SSL/TLS 保護設備與雲網關之間的通信

安全框架:配置管理 | 緩解措施

產品/服務

文章

Web 應用程序

  1. 實施內容安全策略 (CSP) 並禁用內聯 JavaScript
  2. 啓用瀏覽器的 XSS 篩選器
  3. ASP.NET 應用程序在部署之前必須禁用跟蹤和調試
  4. 僅從受信任源訪問第三方 JavaScript
  5. 確保在經過身份驗證的 ASP.NET 頁面中整合 UI 僞裝或點擊劫持防禦機制
  6. 確保已在 ASP.NET Web 應用程序中啓用 CORS 的情況下只允許受信任的來源
  7. 在 ASP.NET 頁面中啓用 ValidateRequest 特性
  8. 使用本地託管的最新版本的 JavaScript 庫
  9. 禁用自動 MIME 探查
  10. 在 Windows Azure 網站中刪除標準服務器標頭避免留下指紋

數據庫

  1. 爲數據庫引擎訪問配置 Windows 防火牆

Web API

  1. 確保已在 ASP.NET Web API 中啓用 CORS 的情況下只允許受信任的來源
  2. 加密 Web API 配置文件中包含敏感數據的部分

IoT 設備

  1. 確保使用強憑據保護所有管理界面
  2. 確保未知的代碼無法在設備上執行
  3. 使用 bit-locker 加密 IoT 設備的 OS 和其他分區
  4. 確保只在設備上啓用少量的服務/功能

IoT 現場網關

  1. 使用 bit-locker 加密 IoT 現場網關的 OS 和其他分區
  2. 確保在安裝期間更改現場網關的默認登錄憑據

IoT 雲網關

  1. 確保雲網關實施相應的過程來保持已連接設備固件的最新狀態

計算機信任邊界

  1. 確保根據組織的策略在設備上配置終結點安全控制

Azure 存儲

  1. 確保對 Azure 存儲訪問密鑰進行安全管理
  2. 確保已在 Azure 存儲中啓用 CORS 的情況下只允許受信任的來源

WCF

  1. 啓用 WCF 的服務限制功能
  2. WCF - 通過元數據透露信息

 

安全框架:加密 | 緩解措施

產品/服務

文章

Web 應用程序

  1. 只使用批准的對稱塊加密法和密鑰長度
  2. 爲對稱加密法使用批准的塊加密法模式和初始化向量
  3. 使用批准的非對稱算法、密鑰長度和填充
  4. 使用批准的隨機數生成器
  5. 不要使用對稱流加密法
  6. 使用批准的 MAC/HMAC/鍵控哈希算法
  7. 只使用批准的加密哈希函數

數據庫

  1. 使用強加密算法來加密數據庫中的數據
  2. 應該對 SSIS 包加密和數字簽名
  3. 將數字簽名添加到關鍵的數據庫安全對象
  4. 使用 SQL Server EKM 保護加密密鑰
  5. 如果不應向數據庫引擎透露加密密鑰,請使用 AlwaysEncrypted 功能

IoT 設備

  1. 在 IoT 設備上安全存儲加密密鑰

IoT 雲網關

  1. 生成足夠長度的隨機對稱密鑰用於向 IoT 中心進行身份驗證

Dynamics CRM 移動客戶端

  1. 確保實施要求使用 PIN 並允許遠程擦除的設備管理策略

Dynamics CRM Outlook 客戶端

  1. 確保實施要求 PIN/密碼/自動鎖定並加密所有數據的設備管理策略(例如 BitLocker)

標識服務器

  1. 使用標識服務器時確保滾動更新簽名密鑰
  2. 確保在標識服務器中使用強加密型客戶端 ID 和客戶端密碼

 

安全框架:異常管理 |緩解措施

產品/服務

文章

WCF

  1. WCF - 不要在配置文件中包含 serviceDebug 節點
  2. WCF - 不要在配置文件中包含 serviceMetadata 節點

Web API

  1. 確保 ASP.NET Web API 中進行正確的異常處理

Web 應用程序

  1. 不公開錯誤消息中的安全詳細信息
  2. 實現默認錯誤處理頁
  3. 在 IIS 中將部署方法設置爲 Retail
  4. 異常應安全失敗

 

安全框架:輸入驗證 | 緩解措施

產品/服務

文章

Web 應用程序

  1. 使用不受信任樣式錶針對所有轉換禁用 XSLT 腳本
  2. 確保可能包含用戶可控內容的每個頁面能夠選擇不使用自動 MIME 探查
  3. 強化或禁用 XML 實體解析
  4. 使用 http.sys 的應用程序執行 URL 規範化驗證
  5. 確保接受用戶的文件時實施適當的控制
  6. 確保在 Web 應用程序中使用類型安全的參數進行數據訪問
  7. 使用單獨的模型綁定類或綁定篩選列表來防止 MVC 大規模分配漏洞
  8. 在呈現之前爲不受信任的 Web 輸出編碼
  9. 針對所有字符串類型的 Model 屬性執行輸入驗證和篩選
  10. 應該針對接受所有字符的表單域(例如 RTF 編輯器)應用淨化
  11. 不要將 DOM 元素分配到沒有內置編碼的接收器
  12. 驗證應用程序中的所有重定向是否閉合且安全
  13. 針對 Controller 方法接受的所有字符串類型參數實施輸入驗證
  14. 針對正則表達式處理設置超時上限,防止由於正則表達式錯誤而出現 DoS
  15. 避免在 Razor 視圖中使用 Html.Raw

數據庫

  1. 不要在存儲過程中使用動態查詢

Web API

  1. 確保針對 Web API 方法執行模型驗證
  2. 針對 Web API 方法接受的所有字符串類型參數實施輸入驗證
  3. 確保在 Web API 中使用類型安全的參數進行數據訪問

Azure Document DB

  1. 對 Azure Cosmos DB 使用參數化 SQL 查詢

WCF

  1. 通過架構綁定執行 WCF 輸入驗證
  2. WCF - 通過參數檢查器執行輸入驗證

 

安全框架:敏感數據 | 緩解措施

產品/服務

文章

計算機信任邊界

  1. 如果二進制文件包含敏感信息,請確保將其模糊處理
  2. 考慮使用加密文件系統 (EFS) 來保護用戶特定的機密數據
  3. 確保應用程序在文件系統中存儲的敏感數據經過加密

Web 應用程序

  1. 確保不要在瀏覽器中緩存敏感內容
  2. 加密 Web 應用配置文件中包含敏感數據的部分
  3. 在敏感窗體和輸入中顯式禁用自動填充 HTML 特性
  4. 確保用戶屏幕上顯示的敏感數據經過屏蔽

數據庫

  1. 實施動態數據屏蔽,限制透露給非特權用戶的敏感數據
  2. 確保以加鹽哈希格式存儲密碼
  3. 確保在數據庫列中的敏感數據經過加密
  4. 確保啓用數據庫級加密 (TDE)
  5. 確保數據庫備份經過加密

Web API

  1. 確保不要在瀏覽器的存儲中存儲與 Web API 相關的敏感數據

Azure Document DB

  1. 加密 Azure Cosmos DB 中存儲的敏感數據

Azure IaaS VM 信任邊界

  1. 使用 Azure 磁盤加密來加密虛擬機所用的磁盤

Service Fabric 信任邊界

  1. 加密 Service Fabric 應用程序中的機密

Dynamics CRM

  1. 根據需要執行安全建模並使用業務單位/團隊
  2. 儘量避免訪問關鍵實體的共享功能
  3. 爲用戶提供有關 Dynamics CRM 共享功能的風險與良好安全做法的培訓
  4. 制定開發標準規則,禁止顯示異常管理中的配置詳細信息

Azure 存儲

  1. 使用靜態數據的 Azure 存儲服務加密 (SSE)(預覽版)
  2. 使用客戶端加密在 Azure 存儲中存儲敏感數據

移動客戶端

  1. 加密寫入到手機本地存儲的敏感或 PII 數據
  2. 向最終用戶分發生成的二進制文件之前將它模糊處理

WCF

  1. 將 clientCredentialType 設置爲 Certificate 或 Windows
  2. WCF - 安全模式未啓用

安全框架:會話管理

產品/服務

文章

Azure AD

使用 Azure AD 時藉助 ADAL 方法實現適當的註銷

IoT 設備

對生成的 SaS 令牌使用有限生存期

Azure Document DB

對生成的資源令牌使用最短的令牌生存期

ADFS

使用 ADFS 時藉助 WsFederation 方法實現適當的註銷

標識服務器

使用標識服務器時實現適當的註銷

Web 應用程序

可通過 HTTPS 使用的應用程序必須使用安全 Cookie

所有基於 HTTP 的應用程序只應爲 Cookie 定義指定 HTTP

緩解針對 ASP.NET 網頁的跨站點請求僞造 (CSRF) 攻擊

設置會話的非活動生存期

通過應用程序實現適當的註銷

Web API

緩解針對 ASP.NET Web API 的跨站點請求僞造 (CSRF) 攻擊

風險緩解具體文檔

https://docs.microsoft.com/zh-cn/azure/security/azure-security-threat-modeling-tool-mitigations

 

歡迎大家分享更好的思路,熱切期待^^_^^ !

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章