| name | vulnerability-scanner |
| description | 進階弱點分析原則。OWASP 2025、供應鏈安全、攻擊面映射、風險優先排序。 |
| allowed-tools | Read, Glob, Grep, Bash |
弱點掃描器
像攻擊者一樣思考,像專家一樣防禦。2025 威脅態勢意識。
🔧 執行腳本
執行進行自動化驗證:
| 腳本 | 用途 | 使用方式 |
|---|
scripts/security_scan.py | 驗證安全原則已應用 | python scripts/security_scan.py <project_path> |
📋 參考檔案
1. 安全專家心態
核心原則
| 原則 | 應用 |
|---|
| 假設已被入侵 | 設計時當作攻擊者已在內部 |
| 零信任 | 永不信任、始終驗證 |
| 縱深防禦 | 多層、無單點故障 |
| 最小權限 | 僅最低所需存取 |
| 安全失敗 | 錯誤時拒絕存取 |
威脅建模問題
掃描前,詢問:
- 我們在保護什麼?(資產)
- 誰會攻擊?(威脅行為者)
- 他們如何攻擊?(攻擊向量)
- 影響是什麼?(業務風險)
2. OWASP Top 10:2025
風險類別
| 排名 | 類別 | 思考 |
|---|
| A01 | 破壞的存取控制 | 誰能存取什麼?IDOR、SSRF |
| A02 | 安全設定錯誤 | 預設值、標頭、暴露的服務 |
| A03 | 軟體供應鏈 🆕 | 依賴、CI/CD、建構完整性 |
| A04 | 加密失敗 | 弱加密、暴露的密鑰 |
| A05 | 注入 | 使用者輸入 → 系統指令 |
| A06 | 不安全的設計 | 有缺陷的架構 |
| A07 | 驗證失敗 | Session、憑證管理 |
| A08 | 完整性失敗 | 未簽署的更新、被竄改的資料 |
| A09 | 日誌與警報 | 盲點、無監控 |
| A10 | 異常條件 🆕 | 錯誤處理、fail-open 狀態 |
2025 主要變更
2021 → 2025 的變動:
├── SSRF 併入 A01(存取控制)
├── A02 提升(雲端/容器設定)
├── A03 新增:軟體供應鏈(重點)
├── A10 新增:異常條件
└── 焦點轉移:根本原因 > 症狀
3. 供應鏈安全(A03)
攻擊面
| 向量 | 風險 | 要問的問題 |
|---|
| 依賴 | 惡意套件 | 我們有稽核新依賴嗎? |
| Lock 檔案 | 完整性攻擊 | 有提交嗎? |
| 建構管線 | CI/CD 入侵 | 誰能修改? |
| Registry | 拼字劫持 | 已驗證的來源? |
防禦原則
- 驗證套件完整性(校驗碼)
- 鎖定版本、稽核更新
- 關鍵依賴使用私有 registry
- 簽署並驗證構建物
4. 攻擊面映射
要映射什麼
| 類別 | 元素 |
|---|
| 進入點 | API、表單、檔案上傳 |
| 資料流 | 輸入 → 處理 → 輸出 |
| 信任邊界 | 何處檢查驗證/授權 |
| 資產 | 密鑰、PII、業務資料 |
優先排序矩陣
風險 = 可能性 × 影響
高影響 + 高可能性 → 關鍵
高影響 + 低可能性 → 高
低影響 + 高可能性 → 中
低影響 + 低可能性 → 低
5. 風險優先排序
CVSS + 情境
| 因素 | 權重 | 問題 |
|---|
| CVSS 分數 | 基礎嚴重度 | 弱點多嚴重? |
| EPSS 分數 | 利用可能性 | 正在被利用嗎? |
| 資產價值 | 業務情境 | 有什麼風險? |
| 暴露度 | 攻擊面 | 面向網際網路? |
優先排序決策樹
是否正在被主動利用(EPSS >0.5)?
├── 是 → 關鍵:立即處置
└── 否 → 檢查 CVSS
├── CVSS ≥9.0 → 高
├── CVSS 7.0–8.9 → 評估資產價值
└── CVSS <7.0 → 排程後續處理
6. 異常條件(A10 — 新)
Fail-Open vs Fail-Closed
| 情境 | Fail-Open(差) | Fail-Closed(好) |
|---|
| 驗證錯誤 | 允許存取 | 拒絕存取 |
| 解析失敗 | 接受輸入 | 拒絕輸入 |
| 逾時 | 永遠重試 | 限制 + 中止 |
應檢查項目
- 通吃並忽略例外的 catch-all 處理器
- 安全相關操作缺少錯誤處理
- 驗證/授權中的競爭條件
- 資源耗盡情境
7. 掃描方法論
階段式方法
1. 偵察
└── 理解目標
├── 技術堆疊
├── 進入點
└── 資料流
2. 發現
└── 識別潛在問題
├── 設定審查
├── 依賴分析
└── 程式碼模式搜尋
3. 分析
└── 驗證並優先排序
├── 排除誤報
├── 風險評分
└── 攻擊鏈映射
4. 報告
└── 可操作的發現
├── 清晰的重現步驟
├── 業務影響
└── 修復指引
8. 程式碼模式分析
高風險模式
| 模式 | 風險 | 尋找 |
|---|
| 字串拼接查詢 | 注入 | "SELECT * FROM " + user_input |
| 動態程式碼執行 | RCE | eval()、exec()、Function() |
| 不安全反序列化 | RCE | pickle.loads()、unserialize() |
| 路徑操作 | 遍歷 | 檔案路徑中的使用者輸入 |
| 停用安全 | 多種 | verify=False、--insecure |
機密模式
| 類型 | 指標 |
|---|
| API 金鑰 | api_key、apikey、高熵值 |
| Token | token、bearer、jwt |
| 憑證 | password、secret、key |
| 雲端 | AWS_、AZURE_、GCP_ 前綴 |
9. 雲端安全考量
共擔責任
| 層級 | 你負責 | 雲端服務商負責 |
|---|
| 資料 | ✅ | ❌ |
| 應用程式 | ✅ | ❌ |
| OS/執行環境 | 視情況 | 視情況 |
| 基礎架構 | ❌ | ✅ |
雲端特定檢查項目
- IAM:是否套用最小權限?
- 儲存:是否有公開的 bucket?
- 網路:security group 是否收緊?
- 機密:是否使用 secrets manager?
10. 反模式
| ❌ 不要 | ✅ 要 |
|---|
| 不理解就掃描 | 先映射攻擊面 |
| 每個 CVE 都警報 | 按可利用性 + 資產優先排序 |
| 忽略誤報 | 維護已驗證的基線 |
| 僅修復症狀 | 解決根本原因 |
| 部署前掃描一次 | 持續掃描 |
| 盲目信任第三方依賴 | 驗證完整性、稽核程式碼 |
11. 報告原則
發現結構
每個發現都應回答:
- 是什麼? — 清晰的弱點描述
- 在哪裡? — 確切位置(檔案、行號、端點)
- 為什麼? — 根本原因解釋
- 影響為何? — 對業務的後果
- 如何修復? — 具體修復方式
嚴重性分類
| 嚴重性 | 標準 |
|---|
| 關鍵 | RCE、驗證繞過、大規模資料外洩 |
| 高 | 資料外洩、權限提升 |
| 中 | 範圍受限、需特定條件 |
| 低 | 資訊性、最佳實踐 |
記住: 弱點掃描找問題。專家思維決定什麼重要。始終問:「攻擊者能用這個做什麼?」