# Kali 資訊安全網開工準備

> 日期：2026-05-06（台北時間）
> 狀態：原始規劃；2026-05-13 已完成 Kali 112 live 盤點、低風險主機更新、`security_finding_v1` sample 與 scan scope approval package；2026-06-04 已完成 Kali 112 只讀重驗證，尚未開始 AWOOOI runtime ingestion 實作
> 上游藍圖：`docs/security/KALI-SECURITY-MESH-BLUEPRINT.md`
> AwoooP 同步：`docs/security/AWOOOP-SECURITY-SUPPLYCHAIN-INTEGRATION-HANDOFF.md`

## 0. 目前裁示

統帥已批准繼續推進 Kali 資訊安全網，但明確指示：**先不要開始實作**。

因此本文件只是一份開工準備地圖，用來定義工作包、責任歸屬、閘門、證據與批准邊界。本文件不授權 runtime 變更、部署、更嚴格封鎖、破壞性掃描、credentialed scanning 或自動修復。

2026-05-06 追加長期方向：GitHub 應評估回到雲端主控面，Gitea 降級為本地 mirror / fallback。此項納入本次資安工作包，原因是 source control、CI/CD、Code Review、Codex 接力與部署權限本身就是供應鏈安全邊界。

2026-05-06 追加同步：統帥批准本支線開始推進，並要求立即同步給 AwoooP 工作 Session。本支線已建立 `docs/security/AWOOOP-SECURITY-SUPPLYCHAIN-INTEGRATION-HANDOFF.md`，作為雙 Session 共享契約與邊界文件。

2026-05-13 追加 live 狀態：統帥授權登入 `192.168.0.112` 後，已完成 Kali Scanner API health、service、crontab、Docker service 與更新狀態盤點，並完成 targeted scanner package update 與 `Asia/Taipei` 時區調校。完整紀錄見 `docs/security/KALI-INTEGRATION-STATUS.md`。本追加不代表已批准 active scan、credentialed scan、AWOOOI runtime ingestion、`/execute` 接入、full-upgrade 或 reboot。

2026-05-13 追加契約狀態：已建立 `docs/security/SECURITY-FINDING-CONTRACT.md`、`docs/security/security-finding-kali-sample.snapshot.json`、`docs/security/KALI-SCAN-SCOPE-APPROVAL-PACKAGE.md` 與 `docs/security/kali-scan-scope-approval.snapshot.json`。這代表 scope 與 finding envelope 可被 review / mirror，不代表已批准或執行任何 scan。

2026-06-04 追加只讀重驗證：已用既有 SSH key 讀取 `192.168.0.112` 狀態，確認 scanner `127.0.0.1:8080/health` 回 `200 healthy`、`kali-scanner.service` active / enabled、node-exporter 與 wg-easy 運作中、失敗服務單元為 `networking.service`、待更新套件仍為 1994、服務 hardening 仍為 `0 / 4`。本追加不代表已批准 active scan、credentialed scan、AWOOOI runtime ingestion、`/execute` 接入、full-upgrade、autoremove、reboot 或服務 hardening 套用。

## 1. 非實作邊界

目前允許：

| 允許事項 | 用途 |
|---|---|
| 細化架構與 ownership | 降低後續 coding 前的模糊地帶 |
| 先在文件中定義 schema 與 event contract | 避免 scanner payload 各自為政 |
| 定義 observe-only scan scope | 讓初期 rollout 保持低摩擦 |
| 標出需要批准的事項 | 避免誤觸高風險掃描或封鎖 |
| 準備驗證清單 | 讓後續實作可量測 |
| 盤點 Gitea 到 GitHub 的版本轉移範圍 | 把 source control 與 CI/CD 納入供應鏈安全治理 |

目前不允許：

| 不允許事項 | 原因 |
|---|---|
| 新增或修改 API endpoints | 這已經是實作 |
| 修改 DB migrations 或 models | 需要 schema 決策與 review |
| 修改 NetworkPolicy、firewall、RBAC、CORS 或 secrets | 可能影響 production 連通性或安全邊界 |
| 部署 Kali tools、jobs、cron、exporters 或 alerts | 屬於 runtime 行為變更 |
| 開始 active、exploit 或 credentialed scans | 需要明確批准與 scope |
| 加入 CI/CD blocking gates | 初期資安網必須先觀測 |
| 自動 rotate secrets 或自動關閉 ports | 屬於破壞性或 access-changing 行為 |
| 直接把 GitHub 切成唯一主控 | 必須先完成 Gitea 全量版本盤點、同步、runner 驗證與 rollback plan |

2026-05-13 例外說明：本輪只對既有 Kali 主機做授權登入、狀態盤點、targeted scanner package update、`jq` 安裝與時區調校；沒有新增 scanner job、沒有啟動 scan、沒有修改 AWOOOI runtime endpoint。

## 2. 開工準備閘門

| 閘門 | 問題 | 實作前必備 |
|---|---|---|
| G0 asset scope | 初期 observe-only scope 包含哪些資產？ | 已批准 target list 與 owner map |
| G1 data contract | 正規化 finding envelope 長什麼樣？ | 欄位清單、severity/confidence mapping、dedupe fingerprint |
| G2 storage | 每種 finding 要落到哪裡？ | 對 ADR-090 tables 的 mapping 與是否需新表的決策 |
| G3 safety | 哪些 scan 是 passive、active 或 credentialed？ | 每個 scope 的模式與批准規則 |
| G4 alerting | 哪些 findings 變成 warnings 或 incidents？ | secops taxonomy 與 escalation threshold |
| G5 privacy | 哪些 evidence 可以儲存或顯示？ | secrets、payloads、internal IPs、cookies 的 redaction rules |
| G6 ownership | 每一類 finding 由誰處理？ | 12 Agent ownership 與 human owner mapping |
| G7 rollback | 如何快速停用 scanning/alerts？ | kill switch 或 feature flags 已定義 |
| G8 source control | Gitea 現有專案版本如何完整轉移到 GitHub？ | repo/branch/tag/workflow/webhook/secret inventory 與 SHA 比對計畫 |

## 3. 初期 observe-only scope

先從已知且不需要干擾式探測的資產開始。

| 範圍 | 目標 | 模式 | 備註 |
|---|---|---|---|
| Scanner health | `192.168.0.112:8080` | health-only | 保持現有 `KaliScannerDown` 語意 |
| Host inventory | 110、112、120、121、188、111、168 | passive / read-only | 168 與 111 必須先加入 observe-only dev assets |
| Website perimeter | 公開產品 domains 與 AWOOOI public routes | passive DAST-safe | 只做 TLS/header/basic crawl |
| K8s posture | manifests 與 live read-only K8s metadata | read-only | RBAC、Pod Security、NetworkPolicy coverage |
| Container inventory | Harbor/runtime image list | read-only | 先盤 image metadata；CVE scan 等 schema mapping 完成 |
| Codebase | repo files、manifests、dependencies | local static scan | secrets/SAST/SBOM，不 blocking |
| Source control plane | Gitea repos、GitHub repos、branches、tags、workflows、webhooks | inventory-only | 先做版本與權限盤點，不切主控 |
| Observability tools | Prometheus、Alertmanager、SignOz、Sentry、Grafana、Langfuse | passive exposure review | 不做 admin action |

## 4. Finding contract 草案

第一波 coding 應以這份作為標準契約草案。

| 欄位 | 必填 | 說明 |
|---|---:|---|
| `finding_id` | 是 | 穩定且可重算的 fingerprint |
| `scan_run_id` | 是 | Scanner run 或 ADR-090 discovery run |
| `scanner` | 是 | `kali`、`trivy`、`zap`、`semgrep`、`detect-secrets` 等 |
| `scanner_version` | 否 | 進入 enforcement 後必填 |
| `asset_key` | 是 | 相容 ADR-090 的 asset key |
| `target_type` | 是 | `host`、`website`、`api_endpoint`、`container`、`package`、`repo`、`k8s_resource`、`tool` |
| `target` | 是 | 已脫敏 target identifier |
| `category` | 是 | `exposure`、`cve`、`secret`、`misconfig`、`auth`、`tls`、`web`、`code`、`supply_chain`、`network` |
| `severity` | 是 | scanner 原始 severity 映射到 platform severity |
| `confidence` | 是 | scanner confidence 或 verifier confidence |
| `status` | 是 | `new`、`confirmed`、`false_positive`、`accepted_risk`、`fixed`、`expired` |
| `recommended_mode` | 是 | `observe`、`warn`、`approve_required`、`block_candidate` |
| `evidence_ref` | 是 | 指向脫敏 evidence，不存 raw exploit 或 secret |
| `summary` | 是 | 人可讀摘要，不能含敏感 payload |
| `recommended_action` | 是 | 初期只作為建議 |
| `owner_team` | 否 | 升級 incident 前必填 |
| `expires_at` | 否 | 暫時 accepted risk 時可用 |

## 5. ADR-090 落點地圖

| Finding 類型 | 主要落點 | 次要落點 | 升級方式 |
|---|---|---|---|
| Port/service exposure | `asset_inventory.metadata`、`asset_compliance_snapshot` | `asset_change_event` | 非預期且重複時才 alert |
| CVE/package/image | `asset_compliance_snapshot(cve_scan)` | `asset_coverage_snapshot(auto_alerting/playbook)` | 超過 threshold 才產生 `CVECritical` |
| Repo/config secret | `asset_compliance_snapshot(secret_rotated or secret_scan)` | `automation_operation_log` | confirmed 後立即 P0 human review |
| TLS/header/web issue | `asset_compliance_snapshot(ssl_cert_valid/web)` | website asset metadata | 先 warning ticket |
| K8s misconfig | `asset_compliance_snapshot(access_reviewed/encryption_at_rest)` | `asset_coverage_snapshot` | SRE/Security review |
| Monitoring blind spot | `asset_coverage_snapshot(auto_monitoring/auto_alerting)` | `alert_rule_catalog` | 僅 coverage gap alert |
| Tool permission risk | `asset_compliance_snapshot(access_reviewed)` | AwoooP policy/gateway audit | approval-required work item |
| Source control drift | `asset_inventory.metadata`、`asset_compliance_snapshot(access_reviewed)` | `automation_operation_log` | Gitea/GitHub SHA 或權限漂移時先 warning |

## 6. 12 Agent 工作包

| Agent | 工作包 | 實作前第一份交付 |
|---|---|---|
| Security Commander | Phase gates 與 escalation policy | 已簽核 observe-only scope |
| Asset Cartographer | Asset taxonomy 與 seed list | 112/111/168 + core assets mapping |
| Kali Orchestrator | Scanner jobs 與 output contract | Scanner-to-finding normalization spec |
| Network Mapper | Port 與 route inventory | Expected vs unexpected exposure table |
| Web Perimeter Agent | Website/API scan policy | Safe crawl 與 TLS/header checklist |
| Code Guardian | SAST/secrets/dependency scope | Repo scan tools 與 false-positive rules |
| Container Supply Agent | Image/SBOM/CVE flow | Harbor/runtime image map |
| K8s Guard | RBAC/PodSecurity/NetworkPolicy review | K8s posture checklist |
| Dev Host Steward | 168/111 observe-only policy | Dev host safe probe boundaries |
| Observability Sentinel | Metrics 與 alert wiring design | warning-only metric names 與 labels |
| Policy Gatekeeper | AwoooP approval/exception model | approve/block promotion criteria |
| Evidence Archivist | Evidence storage 與 redaction | sanitized evidence rules |
| Source Control Migration Steward | Gitea 全量版本盤點與 GitHub primary 遷移設計 | repo/branch/tag/workflow/webhook 對照表 |

## 7. 批准邊界

以下事項必須在未來實作前另外取得明確批准：

| 邊界 | 需要批准的原因 |
|---|---|
| 對 110/111/112/120/121/168/188 做 credentialed host scans | 會使用具權限存取 |
| 對 production websites 做 active DAST | 可能產生流量、噪音或狀態變更 |
| 對 live production 做 exploit verification | 高營運風險 |
| 修改 firewall/NetworkPolicy/RBAC/CORS | 會改變連通性與安全邊界 |
| Secret rotation | 可能中斷整合 |
| CI/CD blocking gates | 可能阻擋 release |
| 超過 ticket/PR draft 的 auto-remediation | 有 side effects |
| 新增付費 scanner/SaaS/provider | 觸發費用批准規則 |
| GitHub primary 切換 | 會改變 source control 主控面、runner、secrets 與部署審批鏈 |

## 8. 第一波程式實作開工清單

只有這份清單被接受後，才能開始實作。

| 檢查項 | 狀態 |
|---|---|
| Observe-only asset scope 已接受 | 草案已建立，待統帥核准實作 |
| `security_finding_v1` envelope 已接受 | 草案與 sample snapshot 已建立，待統帥核准實作 |
| Storage landing map 已接受 | 待確認 |
| 112/111/168 asset classification 已接受 | 草案已納入 `kali_scan_scope_approval_v1`，待統帥核准實作 |
| Redaction policy 已接受 | 草案已建立，禁止 raw secret / token / cookie / private key / exploit payload |
| No-blocking phase boundary 已接受 | 草案已建立，LOW / MEDIUM observation 不升 blocking gate |
| Human approval boundaries 已接受 | 草案已建立，safe crawl / credentialed / `/execute` / runtime ingestion / full-upgrade 分 gate |
| Rollback/disable flag 已命名 | 待確認 |
| Gitea 全量轉 GitHub inventory 已接受 | 待確認 |
| GitHub primary / Gitea mirror rollback plan 已接受 | 待確認 |
| AwoooP mirror-only handoff 已同步 | 已完成 |
| 共享事件 JSON Schema 已建立 | 已完成 |
| Kali 112 live health / update status 已記錄 | 已完成 |

## 9. 未來批准後的第一波實作順序

等未來明確批准開始實作後，建議順序如下：

1. 新增只定義契約的 data model 或 `security_finding_v1` Pydantic schema。
2. 產出 Gitea 全量版本盤點：repositories、branches、tags、workflows、webhooks、secret 名稱、GitHub 對應目標。
3. 在 scanner path 加入 112/111/168 的 host asset seed。
4. 在 feature flag 後新增 Kali result ingestion endpoint 或 adapter。
5. 將已脫敏 findings 存入 ADR-090-compatible snapshots。
6. 在 AIOps KPI 加入 `security_posture` read model。
7. 依 severity/category/asset 輸出 warning-only metrics。
8. 前端只增加 visibility，不增加 action buttons，最多 view/filter。

在自動封鎖、自動修復、active exploit verification、credentialed scans 之前必須停止。
