|
1 | | -# Athena 2.0 — Session Handoff (2026-06-11) |
| 1 | +# Athena 2.0 — Session Handoff (2026-06-11, refreshed) |
2 | 2 |
|
3 | 3 | > 貼到下個 session 作起手 context。本檔**不是** live 權威 —— **ROADMAP.yaml 才是**(ADR-144)。memory 亦已更新(見文末)。 |
| 4 | +> 本次 refresh 修正了前一版 3 處 stale(HEAD 位置、fallthrough 入 chart、ADR-145/146 已 Accepted)。 |
4 | 5 |
|
5 | 6 | ## 現狀快照 |
6 | | -- **branch**: `athena-2.0`(orphan,與 main 隔離)。HEAD ≈ `d246f8c2`(本機已 commit;push 由人類)。 |
| 7 | +- **branch**: `athena-2.0`(orphan,與 main 隔離)。HEAD = `4f9782b1`(本機已 commit;push 由人類)。本 session 新增 2 commit:`bbcae7ce`(C1 fix)、`4f9782b1`(redirector)。 |
| 8 | + - ⚠️ `docs/adr/ADR-153-*.md` 有**未 commit** 變更 = 人類 flip 的 Status→Accepted(由人類 commit;Claude 不碰 ADR 狀態)。其 Deciders 行與「狀態說明」段仍寫 Draft 字樣 → stale,待人類順手清。 |
| 9 | +- **測試**:`cargo test --workspace` = **397 passed / 0 failed**(基準 395 + C1 fix 的 2 條新 regression);`clippy --workspace --all-targets -D warnings` exit 0;`helm lint` 0 failed。 |
7 | 10 | - **部署中**(k3s `athena-system`,kubeconfig `~/.kube/k3s-athena.yaml`): |
8 | | - - `athena:v4.4.2`,env: `ATHENA_COMPLIANCE__FALLTHROUGH_EXPLOITS=true`(fall-through **ON**)、`ATHENA_ORIENT_TIMEOUT_SECS=300`、`RUST_LOG=info,athena_act=debug`(診斷用,可 reset)。**注意**:fallthrough/RUST_LOG 是 `kubectl set env` override,**未進 chart**→helm redeploy 會掉(ORIENT timeout 已入 chart;fallthrough 刻意沒入,因預設應 OFF=dark ship)。 |
9 | | - - `athena-msf-mcp:v2.0.7`(v2.0.8 含 vsftpd payload-gate **從未部署**——非必要,見 v4.2-15)。 |
10 | | -- **LLM**: gemma-3-12B-it-Q8_0 @ `192.168.0.18:8080`(llama.cpp,OpenAI-compat),athena 經 `OLLAMA_BASE_URL`。ORIENT schema 生成 ~172s→需 timeout 300s 才走 LLM(預設 60s 會 fallback)。 |
11 | | -- **靶**: Metasploitable-2 `192.168.0.28`;reverse callback host `192.168.0.11`。op 2dec6685 的 **session 1 可能仍活**(reverse shell,會自然死)。 |
12 | | -- **測試**:`cargo test --workspace` = **395 passed / 0 failed**;`clippy --workspace --all-targets -D warnings` exit 0。 |
| 11 | + - `athena:v4.4.2`(pod `athena-7fc778d6bc-*`,本 session reset RUST_LOG 後 rolled)。env: `ATHENA_COMPLIANCE__FALLTHROUGH_EXPLOITS=true`、`ATHENA_ORIENT_TIMEOUT_SECS=300`。**RUST_LOG override 已移除**(reset 回 default → binary `info` fallback,減噪音)。 |
| 12 | + - **fallthrough 現已入 chart**([values.yaml](deploy/helm/athena/values.yaml) `mcp`… 不,在 `config.compliance.fallthroughExploits: false`,預設 OFF=dark-ship)→ helm redeploy **不再「掉光」**,而是 revert 成 default OFF;要保持 ON 設 helm value `config.compliance.fallthroughExploits=true`(非再靠 kubectl set env)。ORIENT timeout 亦入 chart。 |
| 13 | + - `athena-msf-mcp:v2.0.7`(已入 chart values.yaml;live-validated op 2dec6685)。v2.0.8(vsftpd payload-gate)**從未部署**——非必要(見 v4.2-15)。 |
| 14 | + - ⚠️ **本 session 的 C1 fix 與 redirector 都尚未 live**:兩者都只落 code/manifest,要生效需人類 build image + deploy(見未完成)。 |
| 15 | +- **LLM**: gemma-3-12B-it-Q8_0 @ `192.168.0.18:8080`(llama.cpp,OpenAI-compat),athena 經 `OLLAMA_BASE_URL`。ORIENT schema 生成 ~172s→需 timeout 300s 才走 LLM。 |
| 16 | +- **靶**: Metasploitable-2 `192.168.0.28`;reverse callback host `192.168.0.11`。 |
13 | 17 |
|
14 | | -## 🎯 本 session 達成(勿重做)— headline: fall-through 端到端 live |
15 | | -- **v4.2-16 ACT multi-exploit fall-through**(ADR-151)+ **v4.2-17 C3 AthenaError**(ADR-152)— **live 驗到**(op `2dec6685`):gemma pin vsftpd→fall-through 接管→samba reverse shell(session 1)。**拿 shell 從賭運氣變設計保證。** flag 預設 OFF、live ON。 |
16 | | - - **2 個設計缺口只在 live op 現形**(單元測試+code review 都沒抓到):D5 carve-out(gemma 必 pin valid module→原「pinned 就跳過」使 fall-through 變 no-op)、aux 候選污染(RiskScorer 壓 reverse exploit 到 aux 登入模組之下、占滿 cap)。皆已修(commits `432adc4d`/`f586933f`)。 |
17 | | -- **v4.2-11 provenance facts** — **live 驗到**(同 op):`/facts` 自證 reverse(module/payload/tunnel)。ADR-146 provenance gap 收。 |
18 | | -- **v4.2-05 C2 fence 跨輪** — **live 驗到**(chain-proof,op `2dec6685` iter `6a0e8e5e`):真 session_exec→`exec.output` provenance=ShellOutput→fence 觸發條件成立;中和邏輯單元已證。 |
19 | | -- **v4.2-15** — **標 superseded**:headline(vsftpd 失敗→無 shell)已被 fall-through 取代;防禦修復(`_normalize_options` payload-gated)已 commit `e5dcdcdf`。 |
20 | | -- **ORIENT timeout 入 chart**(`dd1aaf2a`)、**redirector ADR-153 + SPEC-v4.2-09 草稿**(Draft,gated)。 |
| 18 | +## 🎯 本 session(refresh)達成 — 4 項全完成(headline 全在前幾 session 已達成,本次為收尾+硬化) |
| 19 | +1. **C1 pre-reject live-inert bug 修復**(commit `bbcae7ce`):發現「completed」的 JSON-Schema pre-reject(ADR-148/v4.2-03)在 live **其實 OFF** —— [http.rs](crates/athena-mcp-client/src/http.rs) `list_tools()` 對單一未部署工具(9104=privesc-check,athena 經 `default_tool_urls` seed 全部 DEFAULT_TOOL_PORTS 但 lab 只部署 nmap+msf)`?`-propagate → 全域 fail-open + 永不快取 → 每輪重試。修法=per-container skip-and-merge;2 條新測試;397 pass。詳見 memory [[project_c1_prereject_inert_prod]]。 |
| 20 | +2. **RUST_LOG reset**:移除 `kubectl set env` 的 `info,athena_act=debug` override → binary `info` fallback。pod 已 rolled,Running。 |
| 21 | +3. **redirector v4.2-09 / ADR-153 manifest + image**(commit `4f9782b1`):ADR-153 **Accepted**(人類拍板 P1 NET_ADMIN+D5 / P2 LPORT 4444-4544 / P3 node IP)。寫了 values `mcp.redirector` 區塊 + tools.yaml hostNetwork 耦合 `not redirector.enabled` + `redirector.yaml`(Deployment NET_ADMIN+D5 / egress NetworkPolicy / headless Service) + `mcp-containers/athena-redirector/`(alpine+iptables image + entrypoint + README)。`helm template`(on/off 皆正確)+`lint` 過。詳見 memory [[project_v4_2_09_redirector]]。 |
| 22 | +4. **handoff/memory 3 處 stale 修正**(本檔 + memory)。 |
21 | 23 |
|
22 | | -## 🔴 未完成 — 帶去新 session(都卡人類決策/外部,非 Claude 能單推) |
23 | | -1. **v4.2-09 redirector**(ADR-153 Draft):真安全強化(msf-mcp hostNetwork 繞 CNI、deny NetworkPolicy 無效)。lab v1 封堵(automountSAToken:false+allowed_cidrs)已在→**低急迫**。**要你決策**:(a) 接受 NET_ADMIN privileged redirector? (b) LPORT 範圍(建議 4444-4544)? → 你 Accept ADR-153 後 Claude 寫 manifest(純 Helm,~120-180 LOC)。**唯一有實質價值的 gated 項。** |
24 | | -2. **v4.2-15 vsftpd-direct**(superseded 殘留,optional/低價值):若**真要**驗 vsftpd 本身落地→build/deploy msf-mcp v2.0.8 + 跑 op(runbook `docs/v4.2-15-live-decision-runbook.md`)。fall-through 已覆蓋拿-shell→**建議不做**。 |
25 | | -3. **v4.2-04 winrm/cred + B5**(pending):卡 **Windows/AD 靶**(lab 沒有)→零進度。B5 容器 logging 你已 deferral。 |
26 | | -4. **Tier-4 endpoint prune**(非正式 id):低價值(ADR-150 政策=無 in-repo caller≠死、預設保留)。**建議不做**,除非你要刻意瘦 API 且能逐 endpoint 確認外部 client。 |
27 | | -5. **觀測 follow-up**(非阻斷):fenced `ctx.obs_summary` 不被 log、`GET /observe/summary` 是 raw 路徑不 fence(僅供 human、非 LLM 輸入故非安全問題)→日後可加 engine OBSERVE debug log 使 C2 fence 可審計。 |
| 24 | +## 🔴 未完成 — 帶去新 session(都卡人類 build/deploy/決策,非 Claude 能單推) |
| 25 | +1. **redirector v4.2-09 上線(4c,人類)**:manifest 已就緒,剩 (a) build `athena-redirector:v0.1.0` import 到 node `.11`(pullPolicy:Never);(b) `helm upgrade --set mcp.redirector.enabled=true` + msf-mcp `scale 0→1`(避 hostNetwork port deadlock);(c) 跑授權 reverse op 驗 session 經 redirector DNAT 落地 + overlay msf-mcp→postgres/k8s-API **被 block**(收 ADR-140 line 127)。**部署時必查**:alpine iptables-nft vs node legacy backend → 不一致則 DNAT 靜默 no-op(改 Dockerfile 用 iptables-legacy)。**決策**:要不要做 D3 server.py LPORT clamp(目前靠 msf 預設 4444∈range;clamp 是 server.py 邏輯改動,本 session 刻意未做)? |
| 26 | +2. **C1 pre-reject live 復活(人類)**:fix 是 code-only(`bbcae7ce`),跑中的 image 還沒這修 → 需人類 rebuild athena image(`./scripts/build-push.sh <tag>`)+ deploy 才在 live 復活。低急迫(pre-reject 是硬化,非阻斷)。 |
| 27 | +3. **v4.2-04 winrm/cred + B5**(pending):卡 **Windows/AD 靶**(lab 沒有)→零進度。 |
| 28 | +4. **(次要)port 表不一致**:[http.rs:115](crates/athena-mcp-client/src/http.rs#L115) `osint=9103` vs [registry.rs:65](crates/athena-mcp-client/src/registry.rs#L65) `9104` 對不上 → 需以 docker-compose.mcp.yml 為準 reconcile,本 session 未動(不盲改)。 |
| 29 | +5. **Tier-4 endpoint prune / 觀測 follow-up**:低價值,同前版,建議不做或等外部觸發。 |
28 | 30 |
|
29 | 31 | ## 關鍵 context & 鐵則 |
30 | 32 | - **Claude scope**:程式碼 + 文件 + **cluster app-ops**(kubectl set-image/set-env/scale/rollout/logs,經 `~/.kube/k3s-athena.yaml`)+ 判讀 + 補 Evidence。**不 build/import image、不跑 live op(開火 token 是人類)、不 push、不改 ADR 狀態(Draft→Accepted 只人類)、不 node ssh。** |
31 | | -- **Live 分工**:人類 build/import image(`./scripts/build-push.sh <tag>`→node `.11`,pullPolicy:Never)+ 開火 op(curl POST `http://192.168.0.11:30580/api/operations`,Bearer = `athena-secrets` 的 `ATHENA_API_TOKEN`)。換 msf-mcp(hostNetwork)用 **`scale 0→1`** 避 port deadlock。 |
32 | | -- **Live debug 旋鈕(本 session 學到,重要)**:`RUST_LOG=info,athena_act=debug` 才看得到 fall-through log(athena_act INFO 預設被濾)。**直查 postgres facts 表免 token**:`kubectl exec deploy/postgres -- psql -U athena -d athena`(欄位 `operation_id`/`trait_name`/`fact_value`/`provenance`)。 |
33 | | -- **`/iterate` 是 SYNC**(curl block 整輪 ~3min);支援 `mode=operator_override`+`operator_techniques`(T-code)強制 technique、bypass LLM ORIENT。 |
| 33 | +- **Live 分工**:人類 build/import image + 開火 op(curl POST `http://192.168.0.11:30580/api/operations`,Bearer = `athena-secrets` 的 `ATHENA_API_TOKEN`)。換 msf-mcp(hostNetwork)用 **`scale 0→1`** 避 port deadlock。 |
| 34 | +- **Live debug 旋鈕**:`RUST_LOG=info,athena_act=debug` 才看得到 fall-through log(現已 reset 回 default;要 debug 再 set 回)。**直查 postgres facts 表免 token**:`kubectl exec deploy/postgres -- psql -U athena -d athena`(欄位 `operation_id`/`trait_name`/`fact_value`/`provenance`)。 |
| 35 | +- **`/iterate` 是 SYNC**(curl block 整輪 ~3min);支援 `mode=operator_override`+`operator_techniques`(T-code)。 |
34 | 36 | - **Governance(鐵則)**:ADR 狀態只人類可改;Draft ADR 禁寫對應生產碼;push/helm/docker push/node ssh 是人類動作。 |
35 | | -- **memory** 新增:`project_v4_2_16_fallthrough_live`(fall-through live + 2 個 live-found 缺口的教訓:自主迴圈功能只有對真模型 live op 才測得出 + debug 旋鈕)。其餘既有 memory 仍有效。 |
| 37 | +- **memory** 新增:[[project_c1_prereject_inert_prod]]、[[project_v4_2_09_redirector]];更新:[[project_v4_2_07_continuation]](ADR-145/146 已 Accepted)。其餘既有 memory 仍有效。 |
36 | 38 |
|
37 | 39 | ## 下次 session 建議起手 |
38 | | -**headline 全達成,無急事。** 若要推進:唯一有實質價值的是 **redirector(v4.2-09)**——你給 NET_ADMIN + LPORT 決策,Claude Accept-後寫 manifest。其餘(v4.2-04 等 Windows 靶 / Tier-4 低價值 / v4.2-15-direct optional)建議不做或等外部觸發。也可考慮把 `RUST_LOG` reset 回 default 減 log 噪音(瑣事)。 |
| 40 | +**4 項收尾全完成,Claude 端無待辦。** 球在人類:(1) redirector 上線 E2E(唯一有實質價值的下一步,需 build+deploy+跑 op);(2) 順手 commit ADR-153 Status 變更 + 清其 Draft 殘留字樣;(3) 想的話 rebuild athena image 讓 C1 fix live 復活。其餘(v4.2-04 Windows 靶 / port 表 reconcile / Tier-4)建議不做或等外部觸發。 |
0 commit comments