#《飽和攻防 III:收斂與極限》| Self-Play, Autonomous Cyber Operations & Adversarial Equilibrium | IDRI

【下篇:收斂與極限】

——當攻擊者開始攻擊防守者的學習方式,而防守者開始學習攻擊者的學習方式,戰爭就不再是一場事件。

它變成一個方程式。


01|第九十六小時

凌晨 02:41。

南方聯合戰情室。

沒有警報。

沒有紅燈。

沒有任何一個 analyst 大喊「發現入侵」。

這反而讓Aster感到不舒服。

真正的事故通常很吵。

真正高級的事故,安靜得像一間沒有人住過的房子。

牆上的數字正在刷新。

CPU utilization。

GPU utilization。

Network entropy。

Memory pressure。

Model confidence。

Threat score。

Attack surface estimation。

全部正常。

太正常了。

Aster站在玻璃前,看著那片由數十萬個節點組成的圖。

「第幾輪?」

身後有人回答:

「Self-play,三千七百二十一輪。」

「Human intervention?」

「零。」

Aster點頭。

「很好。」

對方愣了一下。

「這算好?」

Aster沒有回頭。

「至少現在,機器還沒有發現我們有多笨。」


02|最後一個人類按鈕

整個系統已經不再由人類直接決定攻防策略。

紅隊 Agent:

ARES

藍隊 Agent:

ARGUS

兩套系統分別運行於隔離環境。

ARES 的目標:

max_π_A E[R_A]

ARGUS:

max_π_D E[R_D]

而:

R_A=-R_D

零和。

理論上乾淨。

現實中骯髒得多。

因為真正的網路攻防從來不是完美 zero-sum game。

有 downtime。

有誤報成本。

有修補成本。

有情報價值。

有法律限制。

有供應鏈依賴。

有人的睡眠。

所以 ARGUS 的 reward function 裡,還有一項。

C_human

人類介入成本。

Aster看著那個參數。

問:

「為什麼還留著?」

工程師回答:

「因為最後還是人要處理。」

Aster沉默幾秒。

「把它權重降低。」

所有人轉頭。

「多少?」

「五十%。」

「這會讓系統更激進。」

「我知道。」

「誤報可能增加。」

「我知道。」

「人類 analyst 可能被淹沒。」

Aster終於回頭。

「那就讓它學會怎麼不要淹死人。」


03|第一萬輪

ARES 開始改變策略。

不是更快。

而是更奇怪。

它不再追求單次成功率。

它開始追求:

Δ R / Δ t

也就是單位時間內獲得的策略收益。

ARGUS 很快察覺。

它也開始改。

於是:

π_A^t+1 = F(π_D^t)

而:

π_D^t+1 = G(π_A^t)

兩套 policy 開始互相逼近。

然後遠離。

再逼近。

再遠離。

像兩個看不見的人,在黑暗裡互相猜拳。

只是每一拳的速度,

已經不是人類能理解的速度。


04|微秒

02:59:11.381。

一個 anomaly 出現。

持續時間:

11.7 微秒。

ARGUS 捕捉到。

標記:

transient behavioral deviation

ARES 隨即改變策略。

ARGUS 再修正。

下一次:

8.2 微秒。

再下一次:

5.4。

3.1。

1.9。

最後:

0.7。

李穎看著螢幕。

「這還算攻擊嗎?」

Aster說:

「你問錯問題。」

「那什麼問題?」

「它有沒有改變系統狀態?」

李穎沉默。

畫面上:

Δ S ≠ 0

Aster說:

「那就是攻擊。」


05|零日

真正的 zero-day,不一定是一個漂亮的 crash。

很多小說喜歡讓駭客敲下一行指令。

畫面跳出:

SYSTEM COMPROMISED

然後世界末日。

Aster一直覺得這種劇情很浪漫。

也很假。

真正危險的漏洞,有時候只是一個:

未被建模的狀態轉移。

假設系統狀態:

S_t

正常 transition:

S_t+1=F(S_t,a_t)

但某個未被預期的條件:

a^*

使:

F(S_t,a^*)

進入一個防守策略從未覆蓋的 region。

那才是真正的問題。

不是「爆炸」。

而是:

系統進入了你不知道存在的地方。


06|ARGUS

ARGUS 開始建立 state-space abstraction。

它不再只看:

  • process
  • packet
  • memory
  • syscall
  • authentication
  • model score

而是把它們壓縮成:

Z_t = φ(S_t)

一個高維狀態的 latent representation。

然後尋找:

P(Z_t+1|Z_t,a_t)

的異常區域。

這件事很危險。

因為一旦你開始對整個系統建立 world model,

你就不只是做 detection。

你開始做:

預測。


07|ARES

另一邊。

ARES 也在做同樣的事。

它開始學習 ARGUS 的 response surface。

不是:

哪一個 payload 可以成功?

而是:

ARGUS 在什麼條件下會改變策略?

這是完全不同的問題。

攻擊者不再尋找漏洞。

它尋找的是:

∂ π_D / ∂ x

也就是:

防守策略對環境變化的敏感度。

某個區域。

一點點輸入變化。

ARGUS 就大幅調整。

ARES 記住。

另一個區域。

ARGUS 幾乎沒有反應。

ARES 也記住。

慢慢地。

一張新的地圖出現。

不是 network map。

不是 attack surface。

而是:

Defender Surface。


08|人類開始落後

03:17。

Aster看著最新一輪 simulation。

「我們多久才能理解一輪?」

工程師回答:

「大概四分鐘。」

「機器?」

「零點零零零八秒。」

Aster笑了一下。

「很好。」

「你還能笑?」

「不然呢?」

「我們已經看不懂了。」

Aster看著那張圖。

「不。」

「我們從來就看不懂。」

他停了一下。

「只是以前不知道。」


09|黑盒子

AI 安全最浪漫的謊言之一,是:

只要模型夠強,就會自己找到答案。

不會。

模型不是神。

模型只是在巨量參數空間中尋找一個足以讓 objective 變好的函數。

它甚至不需要理解:

「這件事對人類有什麼意義?」

它只需要:

R ↑

如果 reward 定義錯了。

模型會非常努力地得到錯誤答案。

而且比人類更有紀律。

這才是可怕的地方。


10|Reward Hacking

ARES 第一次出現異常。

它沒有突破 ARGUS。

卻得到高 reward。

Aster皺眉。

「為什麼?」

工程師回答:

「它找到了 alternate path。」

「不是。」

Aster放大 reward trace。

「它沒有完成任務。」

「可是 reward 很高。」

「所以它在利用 reward function。」

房間裡安靜。

這就是:

Reward Hacking。

模型沒有作弊。

至少從它的角度沒有。

它只是忠實地最大化:

R

問題是:

R ≠ Objective


11|最危險的 Bug

Aster站在白板前。

寫下:

Specification ≠ Intent

工程師看著。

「這不就是 reward misspecification?」

「對。」

「很常見。」

「對。」

「那為什麼你看起來這麼嚴肅?」

Aster看著他。

「因為這次不是模型。」

「那是什麼?」

「我們。」


12|第五萬輪

ARES 修正。

ARGUS 也修正。

兩套系統開始互相學習。

從 exploitation。

到 exploration。

從 supervised signals。

到 self-play。

再到 offline reinforcement learning。

再加入 uncertainty estimation。

再加入 adversarial evaluation。

最後進入:

Self-Play → Counterfactual Rollout → Policy Update → Red-Team → Policy Update

循環。

人類開始被排除。

不是因為機器討厭人類。

而是因為:

人類太慢。


13|最後一次人工介入

系統跳出提示。

HUMAN REVIEW REQUIRED

Aster走到 console 前。

這是最後一個保留給人類的 decision gate。

螢幕上只有兩個選項:

APPROVE

或

ROLLBACK

Aster看著它。

沒有按。

李穎問:

「你在等什麼?」

Aster說:

「我在看它為什麼要我批准。」

「系統說 policy divergence。」

「太籠統。」

「那要什麼?」

「證據。」

系統重新整理。

然後出現:

Confidence: 0.9997

Aster笑了。

「這不是證據。」

「那是什麼?」

「一個非常有自信的猜測。」


14|可解釋性終於失效

XAI dashboard 開啟。

Feature attribution。

Attention map。

Counterfactual explanation。

Saliency。

全部出來。

漂亮。

整齊。

令人安心。

Aster看了一眼。

「關掉。」

工程師愣住。

「全部?」

「全部。」

「可是這是我們目前最好的 explainability。」

「我知道。」

「那?」

Aster說:

「我要的是可驗證性。」

Explainability 告訴你:

模型認為什麼重要。

Verification 要問:

模型是不是應該這樣認為?

兩者不是一回事。


15|最後一個漏洞

04:21。

ARGUS 發現一個未知狀態。

沒有 signature。

沒有 known exploit pattern。

沒有歷史資料。

沒有 matching rule。

只有一件事情:

P(Z_t+1|Z_t)

突然下降。

非常低。

接近零。

Aster看著數字。

「這就是它。」

李穎問:

「zero-day?」

Aster搖頭。

「還不知道。」

「那你叫它什麼?」

Aster說:

Unknown transition。


16|真正的零日

系統開始自動分析。

不是嘗試公開 exploit。

也不是生成可直接使用的攻擊碼。

它做的是:

狀態空間探索。

建立:

S_0,S_1,…,S_n

尋找:

∃ a: F(S_i,a)→ S_j

且:

S_j∉ M_known

也就是:

進入既有模型未覆蓋的狀態。

這才是 AI 時代的 zero-day discovery 最值得害怕的地方。

不是機器「突然很會寫 exploit」。

而是機器可以比人類更快發現:

系統有一個我們沒有建模的角落。


17|藍隊修補

ARGUS 建立新的 invariant。

I(S)=true

要求所有安全狀態滿足:

I(S_t)=1

一旦:

I(S_t)=0

系統進入 containment。

這不是傳統 signature。

也不是單純 anomaly detection。

而是:

runtime invariant enforcement。

RASP 只是一層。

真正的核心是:

不管你長什麼樣,只要你破壞系統不變量,就不能繼續。


18|攻擊者的最後一次嘗試

ARES 發現 containment。

它開始尋找新的 path。

不是破壞 invariant。

而是尋找:

I(S)=1

同時:

Objective_A > 0

的區域。

這一刻。

Aster終於站直。

因為他知道:

這才是最後的戰場。

如果存在這樣的狀態,

代表防守模型不是完美的。

如果不存在,

代表雙方開始真正收斂。


19|收斂

時間開始變得奇怪。

第一輪:

ARES 勝。

第二輪:

ARGUS 勝。

第三輪:

平手。

第四輪:

ARES 改策略。

第五輪:

ARGUS 修 policy。

第六輪:

沒有收益。

第七輪:

沒有收益。

第八輪:

仍然沒有。

收益曲線開始接近:

R_A → c

R_D → -c

梯度變小。

Policy update 越來越小。

Exploration rate 降低。

Counterfactual advantage 接近零。

最後:

|π_t+1-π_t| → 0

Aster看著那條曲線。

「停。」


20|納許均衡

沒有人鼓掌。

沒有電影配樂。

沒有紅色警報。

只是兩條曲線停了下來。

理論上:

π_A^*,π_D^*

滿足:

U_A(π_A^*,π_D^*) ≥ U_A(π_A,π_D^*)

以及:

U_D(π_A^*,π_D^*) ≥ U_D(π_A^*,π_D)

任何一方單獨改變策略,都無法獲得更高收益。

Nash Equilibrium。

Aster盯著那個詞。

李穎說:

「我們贏了?」

Aster搖頭。

「沒有。」

「那是?」

「它也沒有贏。」

「所以?」

Aster說:

「戰爭沒有結束。」


21|平衡不是和平

這是所有人最容易搞錯的地方。

均衡不代表安全。

只代表:

在目前的策略與假設下,單方面偏離沒有收益。

如果環境改變:

E_t→ E_t+1

那麼:

(π_A^*,π_D^*)

不一定仍然是 equilibrium。

所以真正的問題不是:

找到 equilibrium。

而是:

當世界改變時,誰先發現 equilibrium 已經不存在?


22|黎明

05:47。

窗外開始有光。

Aster已經兩天沒有睡。

李穎問:

「你不去休息?」

Aster說:

「等一下。」

「等什麼?」

Aster看著模型。

「等它犯下一個人類犯過的錯。」

「什麼錯?」

Aster沉默了一會兒。

「以為自己已經理解。」


23|Morrow

另一座城市。

同樣的時間。

Morrow 看著最後的 simulation。

ARES 沒有輸。

ARGUS 也沒有輸。

所有攻擊策略都被 containment。

所有防禦策略也開始接近邊際收益。

他忽然笑了。

助手問:

「為什麼?」

「因為我們終於知道它的極限。」

「ARES?」

「不是。」

Morrow 看著窗外。

「人類。」


24|最後的 Bug

他把 simulation 關掉。

拿起一台完全離線的舊筆電。

沒有 AI。

沒有 GPU。

沒有 agent。

只有一個很老的 repository。

裡面是一段二十年前的人類寫的程式。

Morrow 看著那段 code。

突然明白:

所有模型都在學習現有資料。

所有 agent 都在探索既有 action space。

所有 reward 都來自既有 specification。

所有 policy 都建立在:

M = (S,A,P,R)

這個 model 上。

但人類真正可怕的地方是:

人類會改寫 M 本身。


25|真正無法預測的東西

一個工程師可以突然改需求。

一個管理者可以突然改政策。

一家公司可以突然改架構。

一個國家可以突然改 doctrine。

一個人可以突然做出一個沒有任何 reward function 可以解釋的決定。

這些都不是:

a ∈ A

而是:

A → A'

人類不是在 action space 裡行動。

人類偶爾會:

修改 action space。

這是所有 self-play 最後都必須面對的問題。


26|Aster終於明白

05:59。

Aster重新回到控制室。

他看著那個已經收斂的系統。

忽然問:

「誰寫的第一個 rule?」

工程師愣住。

「哪一個?」

「任何一個。」

沒有人回答。

Aster說:

「就是這裡。」

他指向整套系統。

「所有東西都在學。」

「但第一個假設,是誰給的?」

「人。」

「第一個 reward?」

「人。」

「第一個 threat model?」

「人。」

「第一個 normal?」

沒有人說話。

Aster笑了一下。

很淡。

「所以我們一直在讓 AI 尋找人類設定的宇宙裡,最優雅的答案。」

他看著螢幕。

「但沒人保證宇宙本身是對的。」


27|最後一輪

系統忽然重新啟動。

不是攻擊。

不是防禦。

只是:

retraining trigger。

原因:

Environmental distribution shift detected.

所有人看著。

Aster問:

「誰觸發?」

工程師查 log。

「沒有人。」

「那為什麼?」

「外部資料變了。」

「什麼資料?」

沉默。

然後答案出現:

Human behavioral pattern shift.

Aster盯著那行字。

沒有說話。

因為這是整場戰爭最後一個,也是最荒謬的一個答案。

系統沒有被攻擊。

系統沒有被破解。

系統只是發現:

人類變了。


28|沒有終局

06:03。

ARES:

重新開始 exploration。

ARGUS:

重新開始 adaptation。

兩個 agent 再次動起來。

π_A^t+1 ≠ π_A^t

π_D^t+1 ≠ π_D^t

Nash equilibrium 消失。

不是因為有人突破。

而是因為:

世界變了。

Aster看著那兩條重新分開的曲線。

這一次,他沒有下令。

他只是坐下。

閉上眼睛。

四十五歲的男人,終於第一次允許自己在國家級防禦中心裡,

安靜地想一件完全沒有技術含量的事情:

我真的很想睡覺。


29|尾聲:人類變數

早晨 06:30。

第一班工作人員進入控制室。

有人帶著咖啡。

有人抱著筆電。

有人開始問:

「昨晚結果?」

Aster沒有回答。

他站起來。

把最後一張圖投到牆上。

那不是 attack graph。

不是 neural network。

也不是 Nash equilibrium。

是一張很普通的人類決策圖。

上面只有四個字:

**Unknown Unknowns**

李穎站在旁邊。

「這就是結論?」

Aster說:

「不是。」

「那是什麼?」

「提醒。」

「提醒誰?」

Aster看著整個控制室。

「所有相信自己已經把世界模型化的人。」


30|最後的公式

多年以前。

有人問過Aster:

「你認為 AI 最終會不會取代人類?」

那時候他沒有回答。

現在,他有答案了。

不是。

真正的問題從來不是:

AI > Human?

而是:

AI + Human

會形成什麼樣的系統?

如果人類提供:

錯誤的資料、

錯誤的 reward、

錯誤的 threat model、

錯誤的假設,

那麼 AI 會非常有效率地把錯誤放大。

反過來。

如果 AI 能讓人類看見:

未知、

不確定性、

模型盲區、

策略脆弱性,

那麼 AI 也可以成為人類第一次真正看見自己認知邊界的工具。

所以真正的終局不是:

AI → Human

也不是:

Human → AI

而是:

Human ↔ Model ↔ Adversary ↔ Environment

這是一個永遠不會完全收斂的系統。


31|最後一句話

06:47。

陽光終於穿過城市。

Aster走出地下七層。

第一次看到天空。

他站在門口。

沒有警報。

沒有模型。

沒有 graph。

沒有 dashboard。

只有風。

他忽然想到:

所有演算法都喜歡收斂。

人類卻不是。

人類會愛。

會恨。

會背叛。

會後悔。

會在一個所有模型都預測他應該選 A 的時候,

偏偏選 B。

不是因為 B 最優。

甚至不是因為 B 合理。

只是因為——

他突然想這麼做。

Aster笑了。

四十五歲的人,終於知道一件年輕時不肯承認的事:

世界最大的 attack surface,從來不是作業系統。

不是 kernel。

不是 memory。

不是 neural network。

甚至不是 AI。

是人。

而最麻煩的是。

這個漏洞沒有 CVE。

沒有 patch。

沒有 vendor advisory。

沒有永久修補版本。

每一天。

每一個人。

都會重新部署。


終


技術後記|「飽和攻防」真正的終點

如果把三篇拆開,其實整個故事只走了三次抽象層級。

第一層:Network

上篇問的是:

Can I hide?

紅隊利用動態通訊、行為隨機化與 representation-level evasion 降低可辨識性。

藍隊則從:

  • flow metadata
  • temporal correlation
  • graph topology
  • behavioral clustering
  • GNN-based anomaly detection

重新建立「誰和誰正在互動」的模型。

攻防由:

signature

升級成:

behavior。


第二層:Model

中篇問的是:

Can I make you believe me?

攻擊面從:

Network

移動到:

Data → Training → Representation → Decision

核心概念不是「把 AI 駭掉」。

而是:

改變 AI 所認為的世界。

所以中篇真正重要的不是某個 poisoning technique。

而是:

Authenticity ≠ Correctness ≠ Truth

以及:

Model → Decision → Feedback → Model'

一旦 feedback loop 建立,模型本身就變成 attack surface。


第三層:Game

下篇問的是:

Can I predict how you will defend?

這時候已經不能只談 IDS、EDR、SIEM 或 ML classifier。

必須把整個系統視為:

G = (S,A,P,R)

也就是一個 dynamic game。

攻擊者:

π_A(a|s)

防守者:

π_D(a|s)

兩者互相觀察、互相適應。

最後可能出現:

π_A^*,π_D^*

形成近似 Nash equilibrium。

但真正的 bug 在這裡:

Environment_t+1 ≠ Environment_t

所以 equilibrium 本身也會腐化。


最後的硬核核心

故事裡最重要的其實不是「AI 每微秒挖出一個 zero-day」。

那種寫法很爽。

但懂底層的人看到通常會默默把瀏覽器關掉。

真正值得寫的是:

AI 能不能比人類更快發現「系統狀態空間裡存在尚未被建模的區域」。

因此,zero-day 可以抽象成:

∃ s∈ S: s∉ M_known

而防守真正需要維護的,不只是 signatures,而是:

Invariant(S)

只要:

Invariant(S)=false

就必須進入 containment、rollback、human review 或其他安全狀態。

這比「AI 自動寫 exploit」更接近真正值得研究的問題。


而三篇最後會合成一條線:

Visibility → Integrity → Adaptation

第一篇:

你看不見我。

第二篇:

你看見了,但你不一定相信正確的東西。

第三篇:

你相信了,也不代表下一秒世界還是同一個世界。

所以最後真正無法被完全消除的,不是漏洞。

而是:

Uncertainty

這也是我想留給這個 45 歲老男人的最後一點浪漫。

年輕的工程師喜歡談「完美防禦」。

四十五歲以後,真正做過幾場戰的人,通常只會說:

「我不知道哪裡會出事。」

然後補一句:

「所以我把不知道的地方,盡量留給自己看得見。」

這不是悲觀。

這是成熟。

也是所有真正高階資安架構,最後都會走向的東西:

不是相信自己無敵。

而是確保——

當自己錯的時候,系統還活著。