Chuyển đến nội dung chính

工程師的實用威脅模型:60 分鐘內用 STRIDE 跑過 DFD

Duy Tran9 分鐘
工程師的實用威脅模型:60 分鐘內用 STRIDE 跑過 DFD
大多數嚴重漏洞都源自設計階段,而非寫程式階段。一個及早做、有 owner 的輕量威脅模型,價值遠勝過上線後一份 100 頁的 pentest 報告。

什麼是威脅模型?

威脅模型是回答 Adam Shostack 四個問題的過程:

  1. What are we working on? — 畫出資料流程圖 (DFD)。
  2. What can go wrong? — 套用 STRIDE 列出威脅。
  3. What are we going to do about it? — 緩解措施,或由人負責的「accept risk」。
  4. Did we do a good job? — 部署後再檢視。

一分鐘看懂 STRIDE

威脅違反屬性範例
Spoofing (假冒)Authentication偽造使用者、token 被重用
Tampering (竄改)Integrity修改請求、修改 DB 中資料
Repudiation (否認)Non-repudiation稽核日誌不足以證明操作
Information disclosure (資訊洩漏)Confidentiality洩漏 PII、透過日誌洩漏金鑰
Denial of service (阻斷服務)Availability暴力破解、slowloris、昂貴查詢
Elevation of privilege (權限提升)AuthorizationIDOR、跳出 sandbox、容器逃逸

畫出正確層級的 DFD

DFD 上需要四種元素:

  • External entity:使用者、第三方 API。
  • Process:服務、函式。
  • Data store:資料庫、S3、queue。
  • Data flow:元素之間的箭頭。

最重要的是信任邊界 (trust boundary):不同信任等級區域之間的界線 (Internet ↔ web tier、app ↔ DB、租戶 A ↔ 租戶 B)。每條穿越信任邊界的箭頭,都是需要驗證、檢核、加密的點。

從 DFD level 1 開始 (1 個服務 + 直接相依)。不要畫過於籠統的 level 0,也不要鑽到 level 3——既花時間,又不會產生新的決策資訊。

在每個元素上套用 STRIDE

實用小技巧:對 DFD 上每個元素,問 6 個 STRIDE 問題。不必每個格子都硬擠出威脅——不合理就略過。記入下表:

| Element        | Threat | 描述                                     | Mitigation             | Owner | Severity |
| -------------- | ------ | ---------------------------------------- | ---------------------- | ----- | -------- |
| Login endpoint | S      | 對帳號暴力破解                           | Rate limit + MFA       | @team | High     |
| Login endpoint | I      | 透過錯誤訊息洩漏使用者列舉               | Generic error message  | @team | Medium   |
| Upload service | T      | 儲存體上的檔案 replace race              | Versioning + checksum  | @team | Medium   |
| Order DB       | E      | 查詢 /orders/{id} 時的 IDOR              | 依 owner 做 authz 檢查 | @team | High     |

風險評分

兩個常見方案:

  • CVSS v3.1/v4:業界標準,適合具體漏洞,有可分享的標準 vector。
  • OWASP Risk Rating:簡單 (Likelihood × Impact),容易向非技術 stakeholder 解釋。

在組織內統一選 1 種,並寫入手冊。不要讓每個團隊各自發明評分標準——之後無法相互比較。

風險登錄表是活的資產

威脅模型不是一次性文件。風險登錄表需要:

  • 每個風險都有 owner。
  • 有緩解 deadline 或接受風險的理由。
  • 每季或在重大架構變動時重新檢視。
  • 連結到 issue tracker,讓 mitigation 真的有 ticket 可追。

什麼時候該用 LINDDUN、PASTA?

預設使用 STRIDE。可考慮加入:

  • LINDDUN:當服務處理大量 PII/PHI、需要針對隱私做威脅建模時 (Linkability、Identifiability、Non-repudiation、Detectability、Disclosure、Unawareness、Non-compliance)。
  • PASTA:需要把威脅模型與商業風險細節綁在一起時,有 7 個正式階段——適合銀行、醫療等關鍵系統。

結論

威脅模型不是魔法。一場 60 分鐘的會議搭配 DFD level 1、STRIDE 檢查表與風險登錄表,就足以幫一個服務避開大部分設計缺陷。定期重複、有 owner、寫入 ADR——這就是把威脅模型變成技術習慣,而不是年度活動的方式。