# Vulnerability Scanner

> 進階弱點分析原則。OWASP 2025、供應鏈安全、攻擊面映射、風險優先排序。

- Skill: `tai-ch0802/vulnerability-scanner` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add tai-ch0802/vulnerability-scanner`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tai-ch0802/vulnerability-scanner/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: Tai-ch0802 (https://skillmd.com/u/tai-ch0802)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/tai-ch0802/vulnerability-scanner

---


# 弱點掃描器

> 像攻擊者一樣思考，像專家一樣防禦。2025 威脅態勢意識。

## 🔧 執行腳本

**執行進行自動化驗證：**

| 腳本 | 用途 | 使用方式 |
|------|------|----------|
| `scripts/security_scan.py` | 驗證安全原則已應用 | `python scripts/security_scan.py <project_path>` |

## 📋 參考檔案

| 檔案 | 用途 |
|------|------|
| [checklists.md](checklists.md) | OWASP Top 10、驗證、API、資料保護檢查清單 |

---

## 1. 安全專家心態

### 核心原則

| 原則 | 應用 |
|------|------|
| **假設已被入侵** | 設計時當作攻擊者已在內部 |
| **零信任** | 永不信任、始終驗證 |
| **縱深防禦** | 多層、無單點故障 |
| **最小權限** | 僅最低所需存取 |
| **安全失敗** | 錯誤時拒絕存取 |

### 威脅建模問題

掃描前，詢問：
1. 我們在保護什麼？（資產）
2. 誰會攻擊？（威脅行為者）
3. 他們如何攻擊？（攻擊向量）
4. 影響是什麼？（業務風險）

---

## 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. 報告原則

### 發現結構

每個發現都應回答：
1. **是什麼？** — 清晰的弱點描述
2. **在哪裡？** — 確切位置（檔案、行號、端點）
3. **為什麼？** — 根本原因解釋
4. **影響為何？** — 對業務的後果
5. **如何修復？** — 具體修復方式

### 嚴重性分類

| 嚴重性 | 標準 |
|--------|------|
| **關鍵** | RCE、驗證繞過、大規模資料外洩 |
| **高** | 資料外洩、權限提升 |
| **中** | 範圍受限、需特定條件 |
| **低** | 資訊性、最佳實踐 |

---

> **記住：** 弱點掃描找問題。專家思維決定什麼重要。始終問：「攻擊者能用這個做什麼？」

