威脅模型範本(Threat Model Document)#
參照標準:Microsoft STRIDE / OWASP Threat Modeling / ISO/IEC 27005:2022
文件用途:系統性識別、分析、評估與處置系統面臨的安全威脅
適用階段:系統設計階段(Design Phase)— Security by Design
📋 章節目錄#
- 文件資訊
- 系統概述
- 資料流程圖(DFD)
- 信任邊界識別
- STRIDE 威脅分析
- 威脅風險評估
- 緩解措施
- 殘餘風險
- 威脅追溯矩陣
- 附錄
1. 文件資訊#
📝 範本#
| 項目 | 內容 |
|---|
| 文件編號 | TM-{專案代碼}-{序號} |
| 文件名稱 | {系統名稱} 威脅模型 |
| 版本 | v{主版本}.{次版本} |
| 狀態 | 草稿 / 審核中 / 核定 |
| 建立日期 | {YYYY-MM-DD} |
| 撰寫者 | {姓名/角色} |
| 資安審核者 | {資安人員姓名} |
| 威脅建模方法 | STRIDE / PASTA / LINDDUN |
| 分析範圍 | {描述分析涵蓋的系統邊界} |
📖 使用說明#
- 威脅模型在架構設計完成後、開發實作前進行
- 建議組成跨功能團隊:架構師 + 資安人員 + 開發者 + QA
- STRIDE 是微軟提出的分類法,覆蓋六大威脅類型
- 本文件需與安全需求清單(SecurityRequirements)互相參照
💡 範例#
| 項目 | 內容 |
|---|
| 文件編號 | TM-HRM-001 |
| 系統名稱 | 人力資源管理系統(HRMS) |
| 威脅建模方法 | STRIDE |
| 分析範圍 | Web 前端、API Gateway、微服務層、資料庫層、外部整合(AD/Email) |
2. 系統概述#
📝 範本#
2.1 系統架構摘要#
| 元件 | 技術 | 角色描述 |
|---|
| {元件名稱} | {技術/框架} | {職責說明} |
2.2 資產識別#
| 資產 ID | 資產名稱 | 資產類型 | 敏感等級 | 擁有者 |
|---|
| ASSET-{xxx} | {名稱} | 資料/服務/基礎設施 | 高/中/低 | {團隊} |
📖 使用說明#
- 系統架構摘要提供技術棧全貌,協助識別攻擊面
- 資產識別需列出需保護的有價值目標(攻擊者感興趣的)
- 資產敏感等級決定威脅分析的優先順序
💡 範例#
2.1 系統架構摘要#
| 元件 | 技術 | 角色描述 |
|---|
| Web SPA | React 18 + TypeScript | 使用者介面 |
| API Gateway | Kong 3.x | 請求路由、速率限制、認證 |
| Auth Service | .NET 8 + IdentityServer | 身分認證與 Token 核發 |
| HR Core Service | .NET 8 Web API | 員工/薪資/假勤核心邏輯 |
| PostgreSQL | v16 | 關聯式資料儲存 |
| Redis | v7 | Session/Cache 快取 |
| Active Directory | Windows Server 2022 | 企業帳號整合 |
2.2 資產識別#
| 資產 ID | 資產名稱 | 資產類型 | 敏感等級 | 擁有者 |
|---|
| ASSET-001 | 員工個資(身分證/地址/緊急聯絡人) | 資料 | 高 | HR 部門 |
| ASSET-002 | 薪資明細(薪資/獎金/扣款) | 資料 | 高 | 財務部 |
| ASSET-003 | 認證 Token / Session | 資料 | 高 | 系統 |
| ASSET-004 | API Gateway | 服務 | 中 | IT 維運 |
| ASSET-005 | 資料庫加密金鑰 | 基礎設施 | 高 | 資安團隊 |
3. 資料流程圖(DFD)#
📝 範本#
Level 0 - 系統環境圖#
Level 1 - 子系統分解#
| DFD 元素 | 符號 | 說明 |
|---|
| 外部實體 | 矩形 | 系統範圍外的使用者/系統 |
| 處理程序 | 圓形 | 系統內部邏輯處理 |
| 資料儲存 | 平行線 | 資料庫/檔案 |
| 資料流 | 箭頭 | 資料移動方向 |
| 信任邊界 | 虛線框 | 安全等級分界 |
📖 使用說明#
- DFD 是威脅建模的核心輸入,透過視覺化理解資料流向
- Level 0 呈現系統與外部互動全貌
- Level 1 展開各子系統,識別每個資料流的信任邊界
- 建議使用工具:Microsoft Threat Modeling Tool、OWASP Threat Dragon
💡 範例#
Level 1 - HRMS 子系統分解#
┌─────────────────── 信任邊界:Internet ───────────────────┐
│ │
│ [員工/主管] ────→ Web SPA (React) │
│ │
└─────────────────────────────────────────────────────────┘
│ HTTPS (JWT)
┌────────────────── 信任邊界:DMZ ────────────────────────┐
│ ▼ │
│ (API Gateway - Kong) │
│ │ │
└───────────────────────────┼──────────────────────────────┘
│ mTLS
┌────────────────── 信任邊界:Internal ───────────────────┐
│ ▼ │
│ (Auth Service) ←── (HR Core Service) │
│ │ │ │
│ ▼ ▼ │
│ [Redis Cache] [PostgreSQL DB] │
│ │
└─────────────────────────────────────────────────────────┘
│ LDAPS
┌────────────────── 信任邊界:Enterprise ─────────────────┐
│ ▼ │
│ [Active Directory] │
│ │
└─────────────────────────────────────────────────────────┘
4. 信任邊界識別#
📝 範本#
| 邊界 ID | 邊界名稱 | 起點 | 終點 | 跨越邊界的資料 | 保護機制 |
|---|
| TB-{xxx} | {邊界名稱} | {元件} | {元件} | {資料描述} | {保護} |
📖 使用說明#
- 信任邊界是安全等級不同的兩個區域之間的分界線
- 跨越信任邊界的資料流是威脅分析的重點(攻擊最可能發生處)
- 每條跨邊界的資料流都需要相應的保護機制
💡 範例#
| 邊界 ID | 邊界名稱 | 起點 | 終點 | 跨越邊界的資料 | 保護機制 |
|---|
| TB-001 | Internet → DMZ | Web SPA | API Gateway | HTTP 請求 + JWT | TLS 1.3、WAF、Rate Limit |
| TB-002 | DMZ → Internal | API Gateway | HR Core Service | API 呼叫 + 使用者上下文 | mTLS、服務網格 |
| TB-003 | Internal → DB | HR Core Service | PostgreSQL | SQL 查詢 + 個資 | 連線加密、最小權限 |
| TB-004 | Internal → Enterprise | Auth Service | Active Directory | LDAP 認證請求 | LDAPS (636 port) |
5. STRIDE 威脅分析#
📝 範本#
STRIDE 分類說明#
| 類型 | 英文 | 說明 | 違反的安全屬性 |
|---|
| S | Spoofing | 身份冒充 | 認證(Authentication) |
| T | Tampering | 資料竄改 | 完整性(Integrity) |
| R | Repudiation | 否認行為 | 不可否認性(Non-Repudiation) |
| I | Information Disclosure | 資訊洩露 | 機密性(Confidentiality) |
| D | Denial of Service | 阻斷服務 | 可用性(Availability) |
| E | Elevation of Privilege | 權限提升 | 授權(Authorization) |
威脅列表#
| 威脅 ID | STRIDE | 目標元件 | 威脅描述 | 攻擊場景 |
|---|
| THR-{xxx} | S/T/R/I/D/E | {元件} | {威脅描述} | {攻擊者如何利用} |
📖 使用說明#
- 逐一對每個 DFD 元素(處理程序、資料儲存、資料流)套用 STRIDE
- 外部實體通常只分析 S(Spoofing)和 R(Repudiation)
- 資料儲存通常分析 T、I、D
- 處理程序所有 STRIDE 類型都適用
- 每個威脅需具體描述攻擊場景(非泛泛而談)
💡 範例#
| 威脅 ID | STRIDE | 目標元件 | 威脅描述 | 攻擊場景 |
|---|
| THR-001 | S | API Gateway | 偽造 JWT Token 冒充合法使用者 | 攻擊者取得 JWT Secret 或使用弱演算法偽造 Token |
| THR-002 | T | HR Core Service | 竄改薪資計算邏輯 | 內部人員修改薪資計算 API 參數,增加自己薪資 |
| THR-003 | R | HR Core Service | 管理員否認執行薪資調整操作 | 管理員調整薪資後聲稱未進行此操作 |
| THR-004 | I | PostgreSQL | 員工個資大量外洩 | SQL Injection 或未加密備份遭竊 |
| THR-005 | D | API Gateway | DDoS 癱瘓打卡/請假功能 | 攻擊者以大量請求衝擊 API Gateway |
| THR-006 | E | Auth Service | 一般員工提升至 Admin 權限 | 利用 IDOR 漏洞修改角色欄位 |
| THR-007 | I | Redis Cache | Session 資料從快取洩露 | 未加密的 Redis 連線被中間人竊聽 |
| THR-008 | S | Active Directory | 暴力破解 AD 帳號密碼 | 對 LDAP 認證端點進行字典攻擊 |
6. 威脅風險評估#
📝 範本#
風險評分標準(DREAD 或自訂)#
| 評分維度 | 1(低) | 2(中) | 3(高) |
|---|
| 影響程度(Impact) | 非敏感資料 | 部分敏感資料 | 核心/大量敏感資料 |
| 發生可能性(Likelihood) | 需高階技術+內部存取 | 中等技術+外部存取 | 低門檻+自動化工具 |
| 可利用性(Exploitability) | 無公開漏洞 | 有概念驗證 | 有公開利用工具 |
風險評估結果#
| 威脅 ID | 影響 | 可能性 | 可利用性 | 總分 | 風險等級 |
|---|
| THR-{xxx} | {1-3} | {1-3} | {1-3} | {N} | 高/中/低 |
📖 使用說明#
- 風險等級 = 影響 × 可能性 × 可利用性(或加總取平均)
- 高風險(7-9分):必須在上線前處置
- 中風險(4-6分):計畫性處理,可接受短期風險
- 低風險(1-3分):記錄並持續監控
- 風險評估結果決定緩解措施的優先順序
💡 範例#
| 威脅 ID | 影響 | 可能性 | 可利用性 | 總分 | 風險等級 |
|---|
| THR-001 | 3 | 2 | 2 | 7 | 高 |
| THR-002 | 3 | 1 | 1 | 5 | 中 |
| THR-003 | 2 | 2 | 3 | 7 | 高 |
| THR-004 | 3 | 2 | 3 | 8 | 高 |
| THR-005 | 2 | 3 | 3 | 8 | 高 |
| THR-006 | 3 | 2 | 2 | 7 | 高 |
| THR-007 | 2 | 1 | 2 | 5 | 中 |
| THR-008 | 3 | 2 | 3 | 8 | 高 |
7. 緩解措施#
📝 範本#
| 威脅 ID | 緩解措施 | 對應安全需求 | 實作方式 | 負責人 | 狀態 |
|---|
| THR-{xxx} | {緩解描述} | SEC-{xxx} | {技術/流程手段} | {人員} | 未開始/進行中/完成 |
📖 使用說明#
- 每個高/中風險威脅都需要對應的緩解措施
- 緩解策略分為四種:
- 消除:重新設計,完全移除威脅(最佳)
- 緩解:降低影響或可能性(最常見)
- 轉移:轉移風險給第三方(保險/外包)
- 接受:記錄風險,不處理(需管理層核准)
- 緩解措施需連結到安全需求清單(SecurityRequirements)中的具體需求
💡 範例#
| 威脅 ID | 緩解措施 | 對應安全需求 | 實作方式 | 負責人 | 狀態 |
|---|
| THR-001 | 使用 RS256 非對稱簽章 + 短效 Token | SEC-AUTH-006 | JWT RS256 + 15min Expiry | 後端組 | 完成 |
| THR-003 | 所有薪資操作記錄不可竄改稽核日誌 | SEC-LOG-001, SEC-LOG-004 | Append-only audit log + 時間戳簽章 | 後端組 | 進行中 |
| THR-004 | 個資欄位加密 + 參數化查詢 + WAF | SEC-DATA-001, SEC-INPUT-002 | AES-256 + EF Core parameterized + ModSecurity | 全端 | 完成 |
| THR-005 | API Rate Limiting + CDN + Auto-scaling | SEC-INPUT-005 | Kong rate-limit plugin (100 req/min) + Azure CDN | DevOps | 完成 |
| THR-006 | 伺服器端角色驗證 + 單元測試覆蓋 | SEC-AUTHZ-001, SEC-AUTHZ-003 | [Authorize(Roles=“Admin”)] + IDOR 防護 | 後端組 | 完成 |
| THR-008 | 帳號鎖定 + MFA + IP 白名單 | SEC-AUTH-002, SEC-AUTH-003 | AD 帳號鎖定策略 + Azure MFA | IT 維運 | 進行中 |
8. 殘餘風險#
📝 範本#
| 威脅 ID | 殘餘風險描述 | 緩解後風險等級 | 接受理由 | 核准者 | 核准日期 |
|---|
| THR-{xxx} | {緩解後仍存在的風險} | 高/中/低 | {為何可接受} | {管理層} | {日期} |
📖 使用說明#
- 殘餘風險 = 實施緩解措施後仍無法完全消除的風險
- 所有殘餘風險需經管理層正式核准(Risk Acceptance)
- 殘餘風險需定期重新評估(至少每季度)
- 高殘餘風險應有補償性控制措施
💡 範例#
| 威脅 ID | 殘餘風險描述 | 緩解後風險等級 | 接受理由 | 核准者 | 核准日期 |
|---|
| THR-005 | DDoS 超過 CDN 容量時仍可能影響可用性 | 低 | CDN 已可承受 99% 場景,剩餘機率極低 | CTO | 2026-05-15 |
| THR-007 | Redis 若被直接存取仍可讀取 Session | 低 | Redis 位於 VPC 內網,無外部可達性 | 資安主管 | 2026-05-15 |
9. 威脅追溯矩陣#
📝 範本#
| 威脅 ID | DFD 元素 | 信任邊界 | 安全需求 | 緩解措施 | 測試案例 |
|---|
| THR-{xxx} | {元件} | TB-{xxx} | SEC-{xxx} | {緩解} | TC-{xxx} |
📖 使用說明#
- 追溯矩陣確保每個威脅都能向前追溯到架構元素、向後追溯到測試案例
- 完整鏈路:DFD 元素 → 信任邊界 → 威脅 → 安全需求 → 緩解措施 → 測試驗證
- 若某威脅沒有對應的測試案例,代表測試覆蓋不足
💡 範例#
| 威脅 ID | DFD 元素 | 信任邊界 | 安全需求 | 緩解措施 | 測試案例 |
|---|
| THR-001 | API Gateway | TB-001 | SEC-AUTH-006 | RS256 + 短效 Token | TC-SEC-001: Token 偽造測試 |
| THR-004 | PostgreSQL | TB-003 | SEC-DATA-001, SEC-INPUT-002 | 加密 + 參數化查詢 | TC-SEC-004: SQL Injection Pen Test |
| THR-005 | API Gateway | TB-001 | SEC-INPUT-005 | Rate Limiting | TC-SEC-005: 壓力測試 + DDoS 模擬 |
| THR-006 | Auth Service | TB-002 | SEC-AUTHZ-001 | 伺服器端授權 | TC-SEC-006: IDOR 測試 |
10. 附錄#
📝 範本#
10.1 威脅建模會議記錄#
| 日期 | 參與者 | 討論主題 | 決議 |
|---|
| {日期} | {姓名,角色} | {主題} | {決議} |
10.2 參考資料#
| 資源 | 用途 |
|---|
| OWASP Threat Modeling Cheat Sheet | 威脅建模方法論參考 |
| Microsoft STRIDE per Element | 每元素類型適用的 STRIDE 分析 |
| OWASP ASVS 4.0.3 | 安全需求對照標準 |
| ISO/IEC 27005:2022 | 風險評估方法論 |
📖 使用說明#
- 會議記錄保留威脅建模決策的可追溯性
- 建議威脅模型每個 Sprint 或重大架構變更時更新
- 工具推薦:Microsoft Threat Modeling Tool (免費)、OWASP Threat Dragon (開源)
💡 範例#
10.1 威脅建模會議記錄#
| 日期 | 參與者 | 討論主題 | 決議 |
|---|
| 2026-04-10 | 張架構師, 李資安, 王開發 | Level 1 DFD 繪製與邊界確認 | TB-001~TB-004 確認 |
| 2026-04-12 | 張架構師, 李資安, 陳 QA | STRIDE 分析(THR-001~008) | 8 個威脅確認,6 個為高風險 |
| 2026-04-15 | CTO, 資安主管, 張架構師 | 殘餘風險接受 | THR-005, THR-007 殘餘風險核准接受 |
📌 範本使用注意事項
- 本範本依據 Microsoft STRIDE 與 ISO/IEC 27005:2022 風險管理框架編製
- 威脅模型需在架構設計確定後、開發實作前完成(Shift-Left Security)
- 搭配「安全需求清單」使用 — 威脅分析結果需轉化為安全需求
- 搭配「測試計畫」使用 — 高風險威脅需有對應的安全測試案例
- 每次重大架構變更或新功能增加時,需重新進行威脅建模