安全漏洞在系統裡的分佈不是均勻的。大多數漏洞集中在幾個特定的設計決策——「這個 API 的呼叫者需要是誰」「這份資料應該只有哪些角色能看到」「這個操作失敗了怎麼辦」。

威脅建模就是在設計階段系統性地問這些問題,而不是等到上線後被攻擊才發現。


STRIDE:最常用的威脅分類框架

Microsoft 的 STRIDE 把威脅分成六類,每類對應一個被破壞的安全性質:

威脅英文破壞的性質例子
Spoofing偽裝Authentication假冒合法用戶的 token
Tampering竄改Integrity修改傳輸中的訊息
Repudiation否認Non-repudiation操作後否認「我沒有做過」
Information Disclosure資訊洩漏Confidentialitylog 裡洩漏密碼
Denial of Service服務拒絕Availability讓系統無法回應
Elevation of Privilege權限提升Authorization普通用戶執行 admin 操作

用 STRIDE 做威脅建模的流程:畫出系統的資料流圖(DFD),對每個元件和每條資料流,逐一問「這裡有沒有 Spoofing / Tampering / … 的威脅」,然後決定接受、緩解還是移轉這個威脅。


實際操作:一個簡短的範例

假設設計一個 webhook endpoint,讓第三方服務呼叫。用 STRIDE 快速掃一遍:

  • Spoofing:任何人都能 POST 這個 endpoint 嗎?→ 需要驗證來源(HMAC signature 或 shared secret)
  • Tampering:payload 可以被中間人修改嗎?→ 需要 HTTPS + signature 驗證
  • Information Disclosure:webhook 的 response body 會洩漏系統內部資訊嗎?→ 錯誤回應只給最少資訊
  • Denial of Service:攻擊者能用大量 webhook 耗盡 server 資源嗎?→ rate limiting
  • Elevation of Privilege:webhook payload 裡的 userId 能被假造嗎?→ 不信任 payload 裡的 identity,從 token 裡取

這十分鐘的對話,在設計評審裡就能防掉幾個常見的錯誤設計。


PASTA 和 Attack Tree

PASTA(Process for Attack Simulation and Threat Analysis):更完整的七步驟框架,從商業目標開始,到攻擊模擬和風險評估。適合正式的安全評估,企業級系統或有合規需求時使用。

Attack Tree:以目標為根節點,向下展開「攻擊者可以怎麼達成這個目標」的樹狀結構。適合分析特定高風險功能(付款流程、帳戶接管)的攻擊路徑。


什麼時候做,誰來做

威脅建模最有效的時機是設計評審階段——在開始寫 code 之前。這時候改設計是免費的,上線後發現問題改起來是昂貴的。

不需要每個功能都做完整的 STRIDE 分析。判斷標準:這個功能涉及認證、授權、外部輸入、或敏感資料,就值得花 15–30 分鐘做快速的 STRIDE 掃描。

威脅建模不需要安全專家在場——開發工程師和 tech lead 一起做就夠了。安全專家的角色是提供框架和最終審核,不是替代開發團隊思考安全問題。