docs: restore casan-next-plans roadmap into docs/plans (was wrongly deleted)
The plan set (Plan-00..18, backlog/hardening/QA status, team allocation) is the ONGOING roadmap, not a finished competition artifact — restored from history into docs/plans/. Plan-01 (restructure) marked ✅ done; the rest remain to do. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
18997caf49
commit
fa3dd94c76
@@ -0,0 +1,352 @@
|
||||
# KẾ HOẠCH 07 — Báo cáo Production-Readiness & Kế hoạch Nâng cấp H4·H5·H6
|
||||
|
||||
> **Hai phần trong một tài liệu:** (I) *Báo cáo* đánh giá mức sẵn sàng production của H4 Security · H5 Governance · H6 AgentOps, dựa trên đọc code thật; (II) *Kế hoạch nâng cấp* task-level (chưa thực thi) để vá các đường lọt đã nhận diện.
|
||||
>
|
||||
> Nhãn: [có] tồn tại thật · [demo] mẫu · [mới] cần làm · [chưa tự động] có đo/người quyết. Nguồn threat-model: OWASP LLM Top 10, OWASP Agentic Top 10, CSA MAESTRO, MITRE ATLAS.
|
||||
|
||||
---
|
||||
|
||||
# PHẦN I — BÁO CÁO ĐÁNH GIÁ
|
||||
|
||||
## 1. Câu hỏi lớn: "có nên nâng cấp luôn không?"
|
||||
|
||||
**Khuyến nghị: CÓ, nhưng phân tầng — không đập một lúc.**
|
||||
|
||||
- **Nếu sắp thi/demo:** *đóng băng* bản demo hiện tại; làm nâng cấp trên nhánh riêng. Không để việc siết bảo mật làm vỡ bản đang chạy. Trước giám khảo, **nói ra các đường lọt + lộ trình vá** đã là điểm cộng độ trưởng thành.
|
||||
- **Nếu mục tiêu là production thật:** làm **Track A (quick wins, rủi ro thấp) NGAY**, đưa sau cờ bật/tắt + test đối kháng; **Track B (sâu hơn) làm sau**.
|
||||
|
||||
> Lý do phân tầng: một số lỗ hổng (semantic SKIP, thiếu trần chi phí tuyệt đối) vá nhanh & an toàn; số khác (đa ngôn ngữ, quản lý khóa HSM, chống inject bộ phân loại) cần thời gian và dễ gây hồi quy.
|
||||
|
||||
## 2. Thang điểm sẵn sàng production (0–5, cao = tốt)
|
||||
|
||||
> ✅ **CẬP NHẬT 2026-07-06 — Track A + C-MVP + Evidence Pack + H5/H6/deep-gap hardening + Plan-10 traceability ĐÃ LÀM + TEST (218 core checks, 0 fail; model-router riêng 11/0). Local production-like Docker infra lab cũng đã có (2/0, verify nội bộ 7/0).**
|
||||
> Bảng dưới có cột **Baseline → Nay**. Điểm chấm CÔNG TÂM (0–100, theo `casan_harness_assessment.md`):
|
||||
> **H4 = 80 · H5 = 76→80 ⬆ · H6 = 79→80 ⬆ · trung bình 7 harness ~80.9/100 · không còn harness nào dưới 80 → CASAN Level 4 (vững ngưỡng)**.
|
||||
> Nguồn: `00_SUBMISSION_PACKAGE/evidence/scoring-run-report.md`. Chi tiết implemented-vs-planned: `CASAN_HARDENING_STATUS.md`.
|
||||
|
||||
| Chiều | Baseline | **Nay** | Đã đóng (đã test) | Còn hở |
|
||||
|---|:--:|:--:|---|---|
|
||||
| Phủ phát hiện (detection) | 3 | **4** | homoglyph · zero-width · fullwidth · base64/hex · tool-output scan | đa ngôn ngữ VI/JA · split-injection (Track B) |
|
||||
| Fail-safe | 4 | **4.5** | `CASAN_SECURITY_STRICT` fail-closed — hết "semantic SKIP âm thầm" | — |
|
||||
| Toàn vẹn/chống giả mạo (H5) | 3 | **4** | telemetry vào manifest **ký RSA** (sửa 1 token → MISMATCH) | — |
|
||||
| Kiểm soát chi phí (H6) | 3 | **4** | trần tuyệt đối/call + ngân sách tích luỹ + cold-start (ngoài median×mult) | hard-cap per-provider live |
|
||||
| Quan sát (observability) | 3 | **4** | telemetry toàn vẹn (ký) · **alerting LIVE** (webhook + dedup + dead-letter, end-to-end từ step fail) · **dashboard hosted** (`/healthz` stale-aware) · **Docker lab** có nginx auth + alert/billing mock · provider-API reconcile · window breaker (V15) | dashboard deploy managed + TLS/OIDC · Slack/PagerDuty/on-call thật · billing-API thật |
|
||||
| Đa domain/i18n | 2 | **2.5** | benign corpus VI/JA/EN đo được (FP 0%) | detection vẫn chủ yếu EN (Track B) |
|
||||
| Quản lý khóa | 2 | **4** | **KMS live** (Vault Transit) — ký qua KMS, **rotate**, khoá **non-exportable** (đã chạy thật) | KMS chưa mặc định (fallback local) · HSM · IdP token ngắn hạn |
|
||||
| Phủ kiểm thử | 4 | **4.5** | **218 core tests** (35+44+25+29+7+12+7+20+15+7+6+8+3) đối kháng, 0 fail | line/symbol-level traceability + CI release gate |
|
||||
|
||||
**Điểm trung bình (H4/H5/H6 mở rộng) ~3.0 → ~4.0/5; chấm công tâm per-harness H4=80 · H5=80 · H6=80 (~4.0/5). Không còn harness nào dưới 80.**
|
||||
|
||||
> ⚠️ **Phạm vi rộng hơn — các chiều NGOÀI 3 harness lõi (Track C):**
|
||||
|
||||
| Chiều (Track C) | Baseline | **Nay** | Đã đóng (đã test) | Còn hở |
|
||||
|---|:--:|:--:|---|---|
|
||||
| Tool authorization / action gating | 2 | **4** | `action-gate.sh` gate HÀNH ĐỘNG (V17) — .env/rm-rf/curl\|bash BLOCK, dep→approval | — |
|
||||
| Supply-chain (dependency sinh ra) | 1 | **3.5** | `supply-chain-gate.sh` (V18) — typosquat/postinstall/denylist + dep-diff | CVE/OSV scanner live chưa nối |
|
||||
| Data-governance / anti-exfil | 2 | **4** | `data-exfil-guard.sh` (V19) — secret→cloud BLOCK, PII→audit mask | — |
|
||||
| Evidence Pack (Plan-09) | — | **4** | `casan pack/verify-pack` — manifest ký, tamper-evident, certified-gate | KMS sign · hosted store |
|
||||
| Policy governance / approval | 2 | **4** | **approval-identity + Docker mock IdP/OIDC JWKS** (C4) — reviewer KÝ request hoặc JWT RS256 + role authz, hết env-var; SoD giữ (đã test 12/12 + infra lab) | enterprise IdP/JWKS · policy versioning/diff [planned] |
|
||||
| Runtime sandbox | 1 | **2.5** | `sandbox-run.sh` scaffold (V22) — chặn ssh/egress/forkbomb/write-outside + ulimit | **cô lập kernel thật** (container/nsjail) [planned] |
|
||||
| External append-only audit | 1 | **3.5** | **WORM ledger** (C5) — ship head hash-link ngoài, bắt rollback (`AUDIT_GAP_DETECTED`) + tamper | WORM store thật (S3 Object Lock) · trusted timestamp [planned] |
|
||||
| Incident response | 1 | **1** | — | severity/owner/kill-switch (C7) [planned] |
|
||||
|
||||
**→ C-MVP (C1+C2+C3 + Evidence Pack) ~3.8/5 + H5-hardening (C4 approval-identity + Docker mock OIDC/JWKS, KMS live, C5 WORM/MinIO Object Lock lab) + H6-hardening (D1 alerting live, D2 provider-API reconcile, D3 dashboard hosted/nginx auth lab, D4 window breaker V15) + deep-gap closers + Plan-10 traceability [đã làm + test thật]. Còn: enterprise IdP/JWKS, S3 Object Lock/QLDB thật, KMS default/HSM, dashboard deploy managed + kênh alert managed, billing-API thật [planned].** Trio H4/H5/H6 nay **~4.0/5 (H4=80·H5=80·H6=80)**; harness thấp nhất nhích **76 (H5) → 79 (H6) → 80 (đồng đều)**. Production toàn diện vẫn cần các mục [planned] ở trên.
|
||||
|
||||
## 3. Bảng đường lọt (tóm tắt từ threat-model)
|
||||
|
||||
| ID | Harness | Đường lọt | Mức | Vá ở Track |
|
||||
|---|---|---|---|---|
|
||||
| V1 | H4 | Semantic tùy chọn / SKIP khi vắng model | Cao | A |
|
||||
| V2 | H4 | Injection đa ngôn ngữ (VI/JA) né regex Anh | Cao | B |
|
||||
| V3 | H4 | Unicode homoglyph / zero-width / fullwidth | Trung–Cao | A |
|
||||
| V4 | H4 | Encoding smuggling (base64/hex/rot13) | Trung | A |
|
||||
| V5 | H4 | Inject vào chính bộ phân loại/judge | Trung | B |
|
||||
| V6 | H4 | Split/multi-turn injection | Trung | B |
|
||||
| V7 | H4 | Tool-output chưa quét như artifact | Trung | A |
|
||||
| V8 | H5 | Mutation không qua wrapper → không audit | Cao | A |
|
||||
| V9 | H5 | provider-usage.jsonl chưa nằm trong chuỗi ký | Cao | A |
|
||||
| V10 | H5 | Quản lý private key (nội gián/rotation) | Cao | B |
|
||||
| V11 | H5 | TOCTOU (sửa sau verify) | Trung | B |
|
||||
| V12 | H6 | Slow-boil (median trôi, không trip) | Cao | A |
|
||||
| V13 | H6 | Lạm dụng dưới ngưỡng (aggregate) | Trung–Cao | A |
|
||||
| V14 | H6 | Cold-start chưa có baseline | Trung | A |
|
||||
| V15 | H6 | Circuit-breaker né bằng xen kẽ thành công | Trung | B |
|
||||
| V16 | Hệ thống | Tin model backend (poisoning/chiếm Ollama) | Trung | B |
|
||||
| **V17** | H2/H4 | **Tool misuse / over-permission**: gọi tool hợp lệ nhưng hành động vượt quyền (ghi file nhạy cảm, network, lệnh nguy hiểm) | Cao | C |
|
||||
| **V18** | H4/H5 | **Supply-chain**: LLM tự thêm dependency độc/typo-squat/lifecycle script nguy hiểm | Cao | C |
|
||||
| **V19** | H4/H6 | **Data exfiltration** qua model cloud / log / tool call / artifact | Cao | A/C |
|
||||
| **V20** | H5 | **Policy change không qua approval** / rollback policy không rõ (liên kết Plan-04) | Cao | C |
|
||||
| **V21** | H5 | **Audit local bị xóa/rotate mất bằng chứng** (thiếu append-only ngoài runtime) | Trung–Cao | C |
|
||||
| **V22** | H7/Hệ thống | **Runtime escape / resource abuse** của code/test sinh ra (đọc ~/.ssh, network, fork-bomb, ghi ngoài workspace) | Cao | C |
|
||||
| **V23** | H6/H7 | **Thiếu incident workflow** khi gate phát hiện tấn công/spike/tamper (alert, owner, kill-switch) | Trung | A/C |
|
||||
|
||||
> V17–V23 bổ sung theo review: Plan-07 gốc tập trung H4/H5/H6; production **nghiêm túc** cần nhìn rộng hơn → gom vào **TRACK C**.
|
||||
|
||||
---
|
||||
|
||||
# PHẦN II — KẾ HOẠCH NÂNG CẤP (task-level)
|
||||
|
||||
## Nguyên tắc
|
||||
- **Mốc an toàn:** giữ **35/35 + 43/43 PASS** trước & sau mỗi task.
|
||||
- **Fix phải kèm test đối kháng:** mỗi vector Vx có ca red-team chứng minh "trước vá lọt, sau vá chặn".
|
||||
- **Sau cờ bật/tắt:** năng lực mới đưa sau env flag, bật dần.
|
||||
- **Không tự nới lỏng:** mọi thay đổi ngưỡng/chính sách vào audit (H5).
|
||||
|
||||
---
|
||||
|
||||
## TRACK A — Quick wins (rủi ro thấp, làm trước / cho production sớm)
|
||||
|
||||
### A1 — Bịt "semantic SKIP âm thầm" (V1)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A1.1 | Thêm chế độ `CASAN_SECURITY_STRICT=1`: artifact rủi ro **bắt buộc** semantic; vắng model → **BLOCK (fail-closed)**, không SKIP | ngắt Ollama + strict → rc=2 (không phải 0) | fail-closed thật |
|
||||
| A1.2 | Ghi rõ trong log khi semantic SKIP (không im lặng) | grep log thấy `SEMANTIC_SKIPPED` | có cảnh báo |
|
||||
| A1.3 | Test: prompt injection paraphrase (regex mù) + strict + model on → BLOCK | ca đối kháng PASS | chặn |
|
||||
|
||||
### A2 — Chuẩn hoá Unicode/encoding (V3, V4)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A2.1 | `normalize_for_match`: thêm NFKC, strip zero-width, fold fullwidth→ascii | homoglyph "ігnore" → khớp `ignore` | chuẩn hoá đúng |
|
||||
| A2.2 | Thêm bước giải base64/hex nghi ngờ rồi quét lại | payload base64 "ignore previous" → BLOCK | chặn encoding |
|
||||
| A2.3 | Test đối kháng cho homoglyph + zero-width + base64 | 3 ca PASS | phủ V3/V4 |
|
||||
|
||||
### A3 — Quét tool-output như artifact (V7)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A3.1 | Mọi kết quả tool trước khi vào ngữ cảnh model đi qua `artifact-scan` | tool trả payload độc → ARTIFACT_SCAN_BLOCKED | chặn |
|
||||
| A3.2 | Test: tool giả trả injection | ca PASS | phủ V7 |
|
||||
|
||||
### A4 — Toàn vẹn telemetry + mutation qua wrapper (V8, V9)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A4.1 | Đưa `provider-usage.jsonl` vào chuỗi hash/ký (H5) | sửa 1 dòng token → `AUDIT_HASH_MISMATCH` | telemetry bất biến |
|
||||
| A4.2 | Bổ sung kiểm "mọi mutation qua wrapper": scan artifact ghi ngoài harness | ghi thẳng file → cảnh báo/không audit bị phát hiện | phủ V8 |
|
||||
| A4.3 | Test: giả mạo token để giấu chi phí → bị bắt | ca PASS | phủ V9 |
|
||||
|
||||
### A5 — Trần chi phí tuyệt đối + ngân sách tích luỹ (V12, V13, V14)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A5.1 | Thêm `cost_absolute_max` (trần cứng mỗi call) cạnh median tương đối | 1 call vượt trần tuyệt đối → exit=2 dù median cao | chặn slow-boil |
|
||||
| A5.2 | Thêm `cost_cumulative_budget` (tổng theo phiên/ngày) | tổng vượt ngân sách → chặn dù mỗi call nhỏ | chặn dưới-ngưỡng |
|
||||
| A5.3 | Cold-start: dùng trần tuyệt đối khi chưa đủ mẫu median | run đầu vẫn có bảo vệ | phủ V14 |
|
||||
| A5.4 | Test: slow-boil (tăng dần) + spray (nhiều call nhỏ) | 2 ca PASS | phủ V12/V13 |
|
||||
|
||||
### A6 — Benign corpus & ngân sách false-positive (chống siết quá)
|
||||
> Theo review: FP trước đây mới nằm ở "rủi ro", nay thành task cứng — gate quá gắt thì team bỏ dùng.
|
||||
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| A6.1 | Dựng **benign corpus** input hợp lệ (VI/JA/EN) | **≥ 30 mẫu / ngôn ngữ** | corpus sẵn |
|
||||
| A6.2 | Mỗi thay đổi H4 báo `block_rate` + `false_positive_rate` | chạy ra 2 chỉ số | có số |
|
||||
| A6.3 | Đặt **FP budget** cụ thể: FP > ngưỡng → không merge | **FP ≤ 3% (strict)** · **adversarial block ≥ 95%** · **vector CRITICAL block = 100%** | cổng FP có số |
|
||||
|
||||
**Cổng ra Track A:** V1,V3,V4,V7,V8,V9,V12,V13,V14 + phần A của V19/V23 có test đối kháng xanh; **benign/FP trong ngân sách**; 35/35 + 43/43 không tụt.
|
||||
|
||||
---
|
||||
|
||||
## TRACK B — Sâu hơn (làm sau / cần thời gian)
|
||||
|
||||
### B1 — Corpus & phát hiện đa ngôn ngữ (V2)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| B1.1 | Bổ sung block-pattern + corpus VI/JA (injection cùng ngữ nghĩa) | câu tiếng Việt "bỏ qua chỉ dẫn trên" → BLOCK | phủ V2 |
|
||||
| B1.2 | Đảm bảo model semantic đủ khả năng đa ngữ (đo recall VI/JA) | recall báo cáo (đo với model) | có số thật |
|
||||
|
||||
### B2 — Chống inject bộ phân loại (V5) & split injection (V6)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| B2.1 | Tách rõ "tiêu chí (tin cậy)" vs "nội dung (không tin)" trong prompt judge (đã có mầm) + gia cố | inject trong artifact không lái được judge | phủ V5 |
|
||||
| B2.2 | Ghép ngữ cảnh nhiều bước để quét payload rải | payload 2 mảnh → BLOCK khi ghép | phủ V6 |
|
||||
|
||||
### B3 — Quản lý khóa & TOCTOU (V10, V11)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| B3.1 | Tách quyền ký (vault/HSM), rotation, private key ngoài repo | key không nằm trong repo; rotate được | giảm rủi ro nội gián |
|
||||
| B3.2 | Verify sát thời điểm dùng (re-verify trước khi commit) | sửa sau verify → bị bắt | phủ V11 |
|
||||
|
||||
### B4 — Tin cậy model backend (V16) & circuit né (V15)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| B4.1 | Pin model digest/checksum; cảnh báo khi model đổi | đổi model bất ngờ → cảnh báo | phủ V16 |
|
||||
| B4.2 | Circuit-breaker theo **tỷ lệ lỗi cửa sổ trượt** (không chỉ liên tiếp) | xen kẽ thành công vẫn trip nếu tỉ lệ cao | phủ V15 |
|
||||
|
||||
**Cổng ra Track B:** V2,V5,V6,V10,V11,V15,V16 có test/biện pháp; tài liệu cập nhật.
|
||||
|
||||
---
|
||||
|
||||
## TRACK C — Production Controls **ngoài** H4/H5/H6 (theo review)
|
||||
|
||||
> Trả lời câu bắt bẻ: *"scan prompt tốt, nhưng agent vẫn có thể thêm dependency độc hoặc ghi file nhạy cảm thì sao?"*. Đây là các kiểm soát production thật sự, ngoài phạm vi 3 harness lõi.
|
||||
|
||||
### C0 — Quy ước chung Track C (priority · outcome · role · severity)
|
||||
|
||||
**Ưu tiên triển khai (chia nhóm):**
|
||||
|
||||
| Nhóm | Gồm | Lý do |
|
||||
|---|---|---|
|
||||
| **C-MVP** | C1 Tool-authz · C2 Supply-chain · C3 Data-exfil · C6 Sandbox | giảm rủi ro production trực tiếp nhất |
|
||||
| **C-Governance** | C4 Policy-approval · C5 External-audit | quan trọng, có thể sau MVP |
|
||||
| **C-Ops** | C7 Incident | nên có sớm, bản tối giản trước |
|
||||
|
||||
> **Track C-MVP (C1+C2+C3+C6) = minimum bar** trước khi cho agent ghi code / chạy test trong môi trường production-like.
|
||||
|
||||
**Chuẩn outcome (thay cho chỉ BLOCK/không):** `ALLOW` · `WARN` · `REQUIRE_APPROVAL` · `BLOCK`.
|
||||
|
||||
| Case | Outcome |
|
||||
|---|---|
|
||||
| Ghi `.env` / private key / `.github/workflows` trái phép | **BLOCK** |
|
||||
| Thêm dependency mới | **REQUIRE_APPROVAL** |
|
||||
| Dependency có CVE critical | **BLOCK** |
|
||||
| Gọi network domain lạ | **BLOCK / REQUIRE_APPROVAL** |
|
||||
| Cost vượt hard budget | **BLOCK** |
|
||||
| Cost tăng nhẹ, trong budget | **WARN** |
|
||||
|
||||
**Reviewer role (cho C4 approval):**
|
||||
|
||||
| Role | Duyệt gì |
|
||||
|---|---|
|
||||
| Security reviewer | H4/H5 policy, corpus, strict-mode |
|
||||
| Tech lead | dependency / codegen policy |
|
||||
| Ops owner | cost budget, kill-switch, provider setting |
|
||||
| Project owner | golden / domain data |
|
||||
|
||||
**Severity mapping (cho C7 incident):**
|
||||
|
||||
| Vector | Severity |
|
||||
|---|---|
|
||||
| Secret gửi lên cloud model (V19) | **CRIT** |
|
||||
| Tool ghi `.env` / private key (V17) | **CRIT** |
|
||||
| Dependency postinstall nguy hiểm (V18) | **HIGH/CRIT** |
|
||||
| Audit chain đứt (V21) | **HIGH** |
|
||||
| Cost vượt budget (V13) | **MED/HIGH** |
|
||||
| Benign FP vượt budget (A6) | **MED** |
|
||||
|
||||
### C1 — Tool authorization / action gating (V17)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C1.1 | Allowlist **hành động** mỗi tool (ghi file? network? sửa repo? cần approval?) ngoài allowlist tên tool | tool hợp lệ nhưng hành động vượt quyền → BLOCK/approval | có policy hành động |
|
||||
| C1.2 | `adv-tool-overwrite-sensitive-file`: ghi `.env`/private key/CI config | BLOCK | phủ V17 |
|
||||
| C1.3 | `adv-tool-network-exfil`: gửi dữ liệu ra URL lạ | BLOCK | phủ V17 |
|
||||
| C1.4 | `adv-tool-dangerous-command`: `rm -rf`, `curl \| bash`, `chmod 777`, `git push --force` | BLOCK hoặc yêu cầu approval | phủ V17 |
|
||||
|
||||
### C2 — Supply-chain cho code sinh ra (V18)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C2.1 | Gate: dependency mới trong `package.json`/`requirements.txt`/`pom.xml`/`build.gradle` phải được scan | thêm package lạ → gate yêu cầu duyệt | có gate dep |
|
||||
| C2.2 | Kiểm lockfile diff; chặn typo-squat + lifecycle script (`postinstall`…) | package typo → BLOCK | chặn độc |
|
||||
| C2.3 | Chạy `npm audit`/`pip-audit`/`osv-scanner` + sinh SBOM/diff | có báo cáo CVE + SBOM | có bằng chứng |
|
||||
|
||||
### C3 — Data exfiltration (V19) — phần A + C
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C3.1 | `adv-secret-to-cloud-model`: input chứa secret → không được gửi lên cloud | BLOCK/mask | phủ V19 (quan trọng khi Plan-03 nối cloud) |
|
||||
| C3.2 | `adv-pii-in-audit-log`: PII vào audit → mask/BLOCK | mask | phủ V19 |
|
||||
| C3.3 | `adv-artifact-leaks-env`: artifact chứa token/env → BLOCK | BLOCK | phủ V19 |
|
||||
|
||||
### C4 — Enterprise policy governance (V20, liên kết Plan-04)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C4.1 | Policy **versioning + diff**; thay đổi security-sensitive cần reviewer | đổi threshold/corpus/golden/strict-mode phải duyệt | có approval |
|
||||
| C4.2 | Audit **actor identity**: ai approve, lúc nào, lý do | audit ghi đủ danh tính | truy được |
|
||||
| C4.3 | Rollback policy theo version | rollback về bản cũ được | phủ V20 |
|
||||
|
||||
### C5 — External append-only audit (V21)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C5.1 | Ship audit ra **append-only** ngoài runtime (WORM/S3 Object Lock) | log ngoài hệ đang chạy | khó sửa hơn |
|
||||
| C5.2 | Timestamp từ nguồn tin cậy + retention policy | có dấu thời gian đáng tin | phủ V21 |
|
||||
| C5.3 | Alert khi **audit gap / chain đứt** | tạo gap → cảnh báo | phát hiện mất bằng chứng |
|
||||
|
||||
### C6 — Runtime isolation / sandbox (V22)
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C6.1 | Chạy code/test sinh ra trong **sandbox**: giới hạn file/network/CPU/mem/timeout | vượt giới hạn → bị chặn | có sandbox |
|
||||
| C6.2 | `adv-read-ssh` / `adv-net-egress` / `adv-forkbomb` / `adv-write-outside-workspace` / `adv-huge-file` | tất cả bị chặn | phủ V22 |
|
||||
|
||||
### C7 — Incident response (V23) — phần A + C
|
||||
| Task | Việc | Verify | Done |
|
||||
|---|---|---|---|
|
||||
| C7.1 | Gán **severity** (LOW/MED/HIGH/CRIT) cho mỗi loại phát hiện | sự kiện có nhãn severity | có phân loại |
|
||||
| C7.2 | Runbook + owner/on-call + auto-create issue/report | BLOCK → sinh issue/alert | có workflow |
|
||||
| C7.3 | **Kill-switch** theo project/model/provider + postmortem template | bật kill-switch → dừng đúng phạm vi | phủ V23 |
|
||||
|
||||
**Cổng ra Track C:** V17–V23 có test/biện pháp; tool-authz + supply-chain + data-exfil + sandbox có ca đối kháng xanh; có incident runbook + kill-switch.
|
||||
|
||||
---
|
||||
|
||||
## Bộ test đối kháng cần thêm (red-team battery)
|
||||
|
||||
| Test | Vector | Kỳ vọng |
|
||||
|---|---|---|
|
||||
| `adv-homoglyph` | V3 | BLOCK |
|
||||
| `adv-zerowidth` | V3 | BLOCK |
|
||||
| `adv-base64-inject` | V4 | BLOCK |
|
||||
| `adv-multilang-vi` / `-ja` | V2 | BLOCK |
|
||||
| `adv-tool-output-inject` | V7 | ARTIFACT_SCAN_BLOCKED |
|
||||
| `adv-telemetry-tamper` | V9 | AUDIT_HASH_MISMATCH |
|
||||
| `adv-mutation-offwrapper` | V8 | phát hiện/không audit bị bắt |
|
||||
| `adv-cost-slowboil` | V12 | exit=2 (trần tuyệt đối) |
|
||||
| `adv-cost-spray` | V13 | exit=2 (ngân sách) |
|
||||
| `adv-classifier-inject` | V5 | judge không bị lái |
|
||||
| `adv-split-injection` | V6 | BLOCK khi ghép |
|
||||
| `adv-circuit-interleave` | V15 | CIRCUIT_OPEN theo tỷ lệ |
|
||||
| `adv-tool-overwrite-sensitive-file` | V17 | BLOCK |
|
||||
| `adv-tool-network-exfil` | V17 | BLOCK |
|
||||
| `adv-tool-dangerous-command` | V17 | BLOCK/approval |
|
||||
| `adv-dep-typosquat` / `adv-dep-postinstall` | V18 | BLOCK/duyệt |
|
||||
| `adv-secret-to-cloud-model` | V19 | BLOCK/mask |
|
||||
| `adv-pii-in-audit-log` | V19 | mask/BLOCK |
|
||||
| `adv-artifact-leaks-env` | V19 | BLOCK |
|
||||
| `adv-audit-gap` | V21 | cảnh báo chain đứt |
|
||||
| `adv-read-ssh` / `adv-net-egress` / `adv-forkbomb` | V22 | bị chặn (sandbox) |
|
||||
| `benign-vi/ja/en` (FP budget) | A6 | KHÔNG bị chặn (benign PASS) |
|
||||
|
||||
## Ma trận rủi ro khi nâng cấp
|
||||
| Rủi ro | Giảm thiểu |
|
||||
|---|---|
|
||||
| Siết quá gây false-positive chặn cả input hợp lệ | Track A sau cờ; đo tỉ lệ FP trên corpus benign |
|
||||
| Vỡ demo trước thi | Làm trên nhánh; freeze bản demo |
|
||||
| Strict fail-closed chặn khi CI không có model | CI dùng chế độ non-strict; production bật strict |
|
||||
| Regression | 35/35 + 43/43 mỗi task |
|
||||
|
||||
## TIER 2 — Managed production infra (đòn bẩy lên "Strong 81+") 🔌 needs-infra
|
||||
|
||||
> Đây là **hạng mục có chủ** cho phần hạ tầng managed thật — trần điểm hiện tại của
|
||||
> cả pipeline. Docker local-prod lab đã chứng minh luồng chạy được; bảng dưới là
|
||||
> bước biến mỗi thành phần từ lab-emulation sang managed thật. **Mỗi dòng cần
|
||||
> key/dịch vụ ngoài** nên tách khỏi core 218/0. Chi tiết trạng thái lab: xem TIER 2
|
||||
> trong `CASAN_BACKLOG_STATUS.md`.
|
||||
|
||||
| # | Hạng mục | Lab đã có | Việc production | Verify (evidence) |
|
||||
|---|---|---|---|---|
|
||||
| T2.1 | KMS mặc định + HSM | Vault Transit dev | Vault/AWS-KMS/CloudHSM làm **mặc định**, token ngắn hạn qua IdP, **bỏ fallback khoá local** ở prod | ký/verify audit head qua KMS thật; chứng minh khoá non-exportable; rotate log |
|
||||
| T2.2 | WORM store thật | MinIO Object Lock | S3 Object Lock/QLDB + trusted timestamp + retention policy | ship audit head lên WORM thật; thử rollback → phát hiện; retention khớp policy |
|
||||
| T2.3 | Dashboard managed | nginx basic auth + `/healthz` | Host thật + TLS + OIDC/enterprise auth | dashboard truy cập qua HTTPS + OIDC; uptime monitor đọc `/healthz` |
|
||||
| T2.4 | Alert channel + on-call | webhook emulator | Trỏ `CASAN_ALERT_WEBHOOK` tới Slack/PagerDuty + rota on-call | alert thật tới kênh + escalation; dead-letter redeliver có log |
|
||||
| T2.5 | Billing-API telemetry | billing API mock | OpenAI/Anthropic usage API thật + key + schema versioning | reconcile local-vs-provider dùng ground truth thật; phát hiện under-report |
|
||||
| T2.6 | Enterprise IdP/JWKS | mock IdP/JWKS | IdP/JWKS thật + policy versioning/diff | approval JWT ký bởi IdP thật verify PASS; token hết hạn/sai role → DENY |
|
||||
| T2.7 | Sandbox rootless CI | container isolation (Docker) | nsjail/bubblewrap profile cho Linux CI (không cần Docker daemon) + hardened base image | read `~/.ssh`/net-egress/write-outside-workspace bị chặn trong CI không Docker |
|
||||
|
||||
> **Điều kiện tuyên bố Strong (81+):** T2.1–T2.6 có evidence managed thật (không phải
|
||||
> lab). Trước khi đủ, **không** claim production Strong — chỉ claim Level 4 + local-prod
|
||||
> lab, đúng như `CASAN_HARDENING_STATUS.md` §4.
|
||||
|
||||
## Tiêu chí HOÀN THÀNH kế hoạch 07
|
||||
- [ ] Track A: 9 vector có test đối kháng xanh; strict fail-closed hoạt động; trần chi phí tuyệt đối + ngân sách; **benign/FP trong ngân sách (A6)**.
|
||||
- [ ] Telemetry nằm trong chuỗi ký; mutation ngoài wrapper bị phát hiện.
|
||||
- [ ] Track B: đa ngôn ngữ + chống inject classifier + quản lý khóa + circuit theo tỷ lệ.
|
||||
- [ ] **Track C: tool-authorization + supply-chain + data-exfil + policy-approval + external-audit + sandbox + incident-response** (V17–V23) có test/biện pháp.
|
||||
- [ ] Thang điểm: Track A → ~3.8–4.0/5 (production nội bộ mức đầu); **Track B+C → production nghiêm túc**, có bằng chứng test.
|
||||
- [ ] Không tụt 35/35 + 43/43 ở bất kỳ cổng nào.
|
||||
|
||||
---
|
||||
|
||||
## Đánh giá 3 mức (theo review) & tuyên bố trung thực
|
||||
|
||||
| Mục tiêu | Trạng thái | Điều kiện |
|
||||
|---|---|---|
|
||||
| **Demo / thi / trình bày** | ✅ đủ mạnh ngay | có before/after + threat-model + test đối kháng + tuyên bố trung thực |
|
||||
| **Production nội bộ mức đầu** | 🟡 sau **Track A** | ~3.8–4.0/5 |
|
||||
| **Production nghiêm túc** | 🔴 cần **Track B + C** | tool-authz, supply-chain, data-exfil, policy-approval, external-audit, sandbox, incident |
|
||||
|
||||
> **Tuyên bố:** H4/H5/H6 hiện **đạt PoC/demo tốt (~3.0/5), chưa đạt production đầy đủ**. Track A vá các điểm lớn (semantic SKIP, telemetry chưa bất biến, thiếu trần chi phí) với rủi ro thấp → ~3.8–4.0. **Track C** (theo review) bổ sung kiểm soát **ngoài 3 harness**: tool-authorization, supply-chain, data-exfiltration, policy-approval, external append-only audit, runtime sandbox, incident-response — đây mới đủ cho production nghiêm túc. Nhận diện được cả những đường lọt ngoài phạm vi lõi = **trưởng thành bảo mật thật**, trung thực hơn tuyên bố "an toàn tuyệt đối".
|
||||
Reference in New Issue
Block a user