第13章 · 蜜罐

法尔汉把自己關在屏蔽室裡三週。不是誇張——是真的三週沒有離開那個地下空間超過兩小時。沈姐每天把三餐放在門口的鐵架上,敲兩下門就走。偶爾有人從門縫裡看到他蜷在顯示器前的背影,屏幕上的代碼像瀑布一樣滾動,他的頭髮比三週前長了一截,眼窩深陷得像一個長期藏在隧道里的人。

陆远負責給女兒送飯、喂藥、哄睡,然後剩下的時間全部站在屏蔽室的門口。他沒有敲門。他只是在等。

第三週的最後一個晚上,門開了。

法尔汉站在門框裡,臉上那種陆远從未見過的表情——不是疲憊,不是成功後的興奮,是一種介於恐懼和困惑之間的、極其陌生的神色。他手裡捏著一塊移動硬盤的線纜,線在他手指間繞了好幾圈,攥得很緊,指節發白。

“你過來看。”他的聲音沙啞得像砂紙摩擦木板。

陆远走進屏蔽室。空氣裡瀰漫著一股電子元件長時間高溫運行後的焦糊味和法尔汉三週沒洗澡的體味。三塊顯示器並排排列,每塊上面都開著密密麻麻的數據窗口——頻譜分析、協議棧對比、固件反彙編、形式化驗證工具的輸出。他逐行掃過去。

然後他看到了那個結論。

法尔汉沒有讓他猜。他在中間那塊屏幕上點開了一個文件,標題欄寫著:「漏洞 ML-Core-7 · 形式化驗證報告 · 第 47 輪」。報告摘要只有一段話,字體默認大小,沒有加粗,沒有高亮,像一個最普通的實驗結果記錄。但陆远讀完之後,感到自己的後背正在緩慢地滲出一層冷汗。

摘要:目標代碼段(ML-Core-7,固件偏移量 0x7A3F_1C44-0x7A3F_1D8F)在 1,247 項已知攻擊模型下全部呈現漏洞特徵。進一步分析顯示:該代碼段與固件中其餘部分的編碼風格存在系統性差異——變量命名慣例不一致、註釋密度與周圍代碼不匹配、異常處理路徑異常完整。綜合評估:該代碼段不滿足自然發生的軟件缺陷的統計分佈。它是被有意插入的。

法尔汉沒有說話。他點開了另一個窗口——一個他在過去三週裡搭建的自動化對比工具的輸出。工具將"漏洞"代碼段與星链固件中其餘六千多個模塊的編碼風格進行了逐項對比,生成了一個可視化的雷達圖。在變量命名、註釋頻率、錯誤處理完整性、邊界條件覆蓋等七個維度上,那個漏洞的評分都遠遠偏離了固件的基線分佈——它不是偏離了一點點,是偏離到了另一個物種的程度。

陆远盯著那個雷達圖看了很久。他發現自己的大腦在拒絕接受這個結論的含意,但工程直覺已經先於理智完成了判斷。

“真正的系統漏洞,”法尔汉的聲音從身後傳來,像在自言自語,“通常伴隨著簽名不一致——開發團隊換人了,草稿被推翻了,邊緣情況被忽略了。它們有指紋。它們不完美。你在固件裡找到一個漏洞的時候,你應該能在它周圍看到人的痕跡——粗糙的邊界處理、被註釋掉的調試代碼、有兩三個未處理的分支。”

他沉默了。

“但這個漏洞——它太乾淨了。乾淨得像教科書上的例題。沒有未處理的分支。沒有遺漏的邊界。沒有任何一根暴露在外的線頭。就像一個老師把一道完美解的題目放在桌上,等著學生來抄。”

陆远終於開口了。他的聲音比他預想中要平靜:“這不是漏洞。這是一個精心設計的後門。它在等我們走進去。”

法尔汉點了點頭。那個點頭的動作很輕,但陆远看到他垂在身側的左手在輕微地顫抖——不是恐懼的顫抖,是一種被驗證了最壞的猜測之後,腎上腺素退潮帶來的生理性震顫。

“我在最後一輪驗證裡反查了這個後門的父模塊,”法尔汉說,聲音在壓制某種東西,“它的上層是星链核心網的一個模塊——入口-7號協議。它的簽名鏈一直追溯到米兰·沃伊诺维奇的私人開發環境。”

陆远沒有接話。屏蔽室裡的散熱風扇在低聲旋轉,發出一種均勻的、接近白噪音的嗡鳴。他覺得自己站在一個很深的地方,頭頂的重量正在一點一點地增加。

“你——”陆远的話卡了一下,“你確定?”

“米蘭的每一個代碼提交都有一個獨特的編譯簽名。編譯器版本、優化參數、系統時間戳的編碼方式——每個人的開發環境都會在二進制文件裡留下不可偽造的指紋。”法尔汉在鍵盤上敲了幾個命令,調出一個窗口,“對比了三組樣本:一組來自米蘭公開的代碼提交,一組來自星链固件中其他模塊的匿名提交,一組就是這個漏洞的二進制指紋。匹配度 99.8%。”

陆远不再確認了。他坐在法尔汉旁邊的椅子上,椅子的一條腿有點短,坐下去的時候輕微地晃了一下。他沒有扶穩,任由那個晃動持續了兩三秒。

“我們的SkyWalker——從第一天開始就是可追蹤的。”他慢慢地說。這不是問句。

“每一次通信,每一次數據包注入,每一條通過QKD側信道傳輸的信息——都被標記了。不是內容,內容我們有加密。是連接本身——什麼時候連的、從哪顆衛星接人的、數據量多大、路由路徑是怎樣的——所有這些元數據都被鏡像到了米蘭的審計系統裡。”

法尔汉的聲音沒有任何感情波動了——那是精神資源被燃燒殆盡之後的一種機械般的平穩。“三週。我們以為自己在黑暗中建了一條秘密通道。實際上我們是在一盞探照燈下面施工。”

屏蔽室安靜了很久。頭頂的通風管道傳來遠處服務器機櫃的低頻轟鳴,像某種被困在地下深處的巨大動物在緩慢地呼吸。

陆远站起來,走到屏蔽室的牆邊。銅網覆蓋的牆壁摸上去有一種涼絲絲的金屬質感,指尖的觸感從皮膚一直傳到顱骨深處。他把額頭貼在銅網上,閉著眼睛站了大概十秒鐘。

“有煙嗎?”他問。

“我不抽菸。”

“我也不抽。”陆远把額頭從銅網上移開,轉過身,“但我們可能需要抽一根。”

他們沒有煙。陆远從桌上一杯三天前的冷水裡撈出一塊冰,含在嘴裡。冰冷的觸感讓他的思路清晰了一些。

“繼續看日誌,”他說,“米蘭的設計日誌。你才看了開頭。”

法尔汉看了他一眼——不是確認的表情,是一種帶著某種近似驚訝的重新審視。

“你不想放棄?”

“我女兒的藥還能吃二十三天。”陆远說,“二十三天之後,如果SkyWalker不能上線——不管是不是陷阱——她都會斷藥。陷阱和不是陷阱,對我來說結果是一樣的。區別只是我被抓之前她還有沒有藥。”

法尔汉沒有再說話。他轉回屏幕,打開了那個被他掛在後臺三天的解密任務。

解密程序已經完成了百分之百。窗口底部顯示著一行綠色文字:「解密完成 · 輸出目錄:/home/farhan/analysis/milan_logs/」

他打開了輸出目錄。裡面大約有三百多個文件——不是完整的日記,是米蘭的技術設計日誌片段,被法尔汉的匿名聯繫人從星链內部的版本控制系統的冷存儲中洩露出來的。日誌時間跨度從2049年到2055年,不是連續的,每隔幾週或幾個月才有一條。但在那些碎片中,有一個主題在反覆出現。

法尔汉按時間排序,從最早的一條開始看起。

2049年3月11日 項目:入口-7號協議。初步架構審查已完成。需求文檔中存在一個預期之外的條款:"審計模塊應支持對偽造終端連接的自動標記與歸因。" 這份需求來自高層,不是技術團隊提出的。我沒有反對。但我在架構中預留了一個額外的條件分支——它在需求文檔中沒有對應的條目。記錄於此,以備日後核查。

2050年7月28日 入口-7的第一階段審計實現已提交。核心邏輯:允許未經授權的終端建立連接(這違反了入口-3的認證策略),但所有流量會被標記並鏡像到中央審計系統的隔離存儲區。預期用途:追蹤高級別威脅的源頭。設計上——這是一個完美的蜜罐。我不知道將來誰會走進來,但我知道如果他走進來,我就能知道他是誰、從哪裡來、想做什麼。

2051年12月4日 今天我坐在終端前問了自己一個問題:如果蜜罐裡捕獲的不是獵物——是獵人呢?

法尔汉的手指在觸摸板上停住了。他回頭看了一眼陆远。陆远也看到了那個句子,但他沒有說話,只是用下巴點了一下屏幕,示意法尔汉繼續往下翻。

2052年1月19日 我正在重讀自己2049年寫的一條註釋。那條註釋被埋在一個任何人都不會去檢查的固件區域——引導加載程序的異常處理分支,系統崩潰時才會執行的代碼路徑。我寫的是:"每一個陷阱都是雙向的。" 我不確定自己五年前寫這句話的時候在想什麼。但今天我重讀它的時候,我忽然笑了一下——不是開心的笑——是一種被五年前的自己提醒了的感覺。

2052年3月8日 如果我在審計入口的設計中隱藏一個嵌套入口——一個不被任何審計系統記錄的入口——那會怎樣?我在問自己這個問題。這不是需求文檔裡的內容。不是高層授意的。甚至不是我能向任何人解釋的。但它在技術上是可行的。入口-7的審計模塊需要從核心網的路由表中讀取連接日誌,寫入隔離存儲。如果我在"讀"的過程中插入一個條件——當某些特定的連接特徵出現時——不是寫入隔離存儲,而是寫入另一個地址空間。一個沒有被記錄在任何路由表中的地址空間。

日誌在這裡斷開了。下一段已經是2052年9月。

2052年9月22日 我做了那個嵌套入口。花了我六十三天。大部分工作是在深夜完成的,在酒店的房間裡——我拒絕透露出差時住的是哪家酒店,不想留下任何可以被關聯的地點記錄。嵌套入口的激活條件是一組特定的QKD信道噪聲特徵——不是信號內容,是物理層的噪聲模式。就像一把鎖,鑰匙不是數據,是數據誕生之前就已經存在的物理層特徵。我不知道我什麼時候會用這把鑰匙。也許永遠不會。 但我把它放在那裡了。

法尔汉的呼吸變輕了。

他繼續往下翻——後面的日誌內容逐漸偏離了技術主題,更多是關於米蘭的個人思考。2053年有一條提到了"米娅第一次不接我電話"。2054年有一條只有一句話:"入口-7已經被觸發了。不是被我的人。是被一個我沒預料到的人。我沒有標記它。我不知道自己為什麼沒有標記它。"

最後一條日誌的時間戳是2055年12月。

2055年12月31日 新年夜。貝爾格萊德下雨。我坐在辦公室裡聽雨聲。入口-7在過去一年裡被觸發了四十七次。四十七個不同的人走過了我七年前設計的那扇門。他們沒有一個知道那扇門是我留的。他們以為自己很聰明,找到了星链的漏洞——但他們找到的是我放在那裡等他們找到的東西。 但是—— 這四十七次觸發中,有一次不一樣。有一個終端在觸發入口-7之後沒有按照預期的路徑走。它的連接模式不是偷流量,不是破解賬號——它在讀取QKD信道的元數據。它在學習星链的噪聲特徵。 它在我設計的陷阱旁邊挖了一條小隧道。 我不知道是誰。但我想知道。

日誌到此結束。沒有後續。

法尔汉靠在椅背上,三塊顯示器的藍光映在他的臉上。他的眼白布滿了血絲,嘴唇乾裂,整個人看起來像是剛從一場漫長的溺水中被撈出來。但他的瞳孔裡有一種光——不是興奮,是一種極其複雜的、混合了恐懼和希望的東西。

“這個瘋子——”法尔汉的聲音嘶啞得幾乎聽不清,“他在自己的蜜罐下面藏了另一個入口。一個連星链審計系統都不知道的入口。他可能沒有告訴任何人。他甚至可能不確定自己要不要用它——但他把它放在那裡了。”

陆远站在屏幕前,把那幾段日誌在腦子裡又重新過了一遍。他的思維正在以他能感覺到的方式升溫——那些碎片正在被拼成一個圖像,一個他不敢相信但又無法否認的圖像。

“米蘭故意留下了信號指紋克隆的漏洞,讓法尔汉找到。然後他在法尔汉必然會發現的入口-7協議裡設計了一個蜜罐——一個完美的陷阱。但他又在蜜罐的底層藏了另一個門——一個他不記錄在任何文檔中、不告訴任何人的門。”

陆远說著,聲音越來越慢,像在走一條自己都不太相信的路。

“他在日誌裡寫的那個嵌套入口——激活條件是QKD信道噪聲特徵。那不是普通的噪聲特徵。那是未來的SkyWalker协议的特徵。”

法尔汉轉過頭來看著他。兩個人的目光在屏蔽室黯淡的光線下相遇。

“米蘭在等他自己的陷阱被人發現,”陆远說,“然後他在等發現陷阱的人聰明到能繼續往下挖。”

“他是一個把自己的陷阱設計成路標的人。”

他們都沉默了。

屏蔽室裡的沉默持續了大概二十秒。然後法尔汉發出一聲很輕的笑——不是開心,是一種在極度疲憊中終於看到了一點東西的、近乎神經質的笑。

“你知道嗎,”他說,“我花了三年時間逆向星链的固件,兩年時間發現入口-7,三週時間確認它是個陷阱。我以為我已經輸了。”

他轉向屏幕,光標在終端窗口裡閃爍。

“但如果米蘭在陷阱下面還藏了另一層——如果那些日誌是真的——那我們還沒有全輸。”

“也許米蘭——他想要有人贏。”


貝爾格萊德,同一時刻。

米蘭坐在辦公室的終端前,沒有開主燈。房間的照明只來自三塊屏幕的背景光,在牆壁上投射出模糊的藍白色輪廓。窗外多瑙河的對岸亮著稀疏的燈火,雨正在下——不是暴雨,是那種不急不慢的、能連續下好幾天的歐洲秋雨,打在窗戶玻璃上發出細密而均勻的聲音。

他已經坐在這裡三個小時了。

屏幕上的數據顯示著数据党最近的活動模式。法尔汉的SkyWalker測試信號——那些隱藏在QKD信道元數據中的空洞——出現在他的審計系統中,被標記、被分類、被歸檔。一切都在按照陷阱的設計運作。蜜罐在被觸發。審計系統在記錄。分析算法在繪製目標網絡的組織拓撲。

三年前他埋下的那顆種子,正在按照他預期的方式生長。

但他沒有關閉那個嵌套入口。

他打開了那個只有他知道的私人目錄——一個被隱藏在固件引導程序異常處理分支中的、沒有記錄在任何設計文檔中的地址空間。目錄的訪問日誌顯示:上一次被訪問是三十四個月前,他自己在深夜調試時打開的。之後沒有任何人碰過它。

它還在那裡。安靜。完整。像一把從未被使用過的鑰匙,被人藏在一塊鬆動的磚頭後面。

米蘭把手指放在鍵盤上,沒有敲下去。

他在想什麼?他自己也不太確定。

他在想陆远——那個中國人。他已經在審計系統中看過他的完整軌跡:從一開始的救女兒信號克隆,到被塞拉斯追捕,到被法尔汉接入数据党,到SkyWalker协议的開發,到拉各斯之行。每一步都在米蘭的預料之內——除了一個變量。

那個變量很小,小到幾乎可以忽略不計。

但米蘭注意到了。

在所有的入侵者中,陆远是唯一一個在看到星链的漏洞之後——沒有立刻用來牟利,沒有用來傳播數據,沒有用來證明自己有多聰明——的那個人。他看到了漏洞,然後他修好了自己的手機,說了聲謝謝,就走了。

這個細節讓米蘭無法解釋地在意。

他的目光落在屏幕上那個嵌套入口的圖標上——一個他從未命名過的、用十六進制代碼標記的文件夾。裡面有一段他六十三天寫出來的代碼,一段從未被編譯進任何正式固件版本中的代碼。他在2052年9月22日凌晨四點寫完最後一行,然後鎖上了那個目錄。

他在等一個能走到這一步的人。

但那個人真的出現的時候,米蘭發現自己坐在終端前,手指懸在鍵盤上方,沒有按下任何鍵。

他的女兒在数据党那邊。

他的陷阱正在被觸發。

他的嵌套入口在等待被使用。

而他——這個設計了一切的人——忽然不知道自己希望哪一個門被打開。

他站起來,走到窗邊。雨還在下,貝爾格萊德老城區的屋頂在雨夜中泛著暗淡的溼光。他想起父親在1991年冬天走出家門時說的那句話——"確保線是通的。"

他花了三十年建了一條全人類最龐大的線路。

但線路通了嗎?他真的連接了任何人嗎?

米蘭把手掌按在冰冷的玻璃上。雨水在玻璃的另一面流淌,把他的指紋和掌紋模糊成一片。

他走回桌前,沒有碰那個嵌套入口。

他打開日記本,拿起鋼筆,寫了一行字:

2057年9月12日。蜜罐被觸發了。三級。他們發現了第一層。現在他們在找第二層。我還沒有決定要不要讓他們找到。

他合上筆記本。

窗外的雨聲越來越大。十二萬顆衛星正在他頭頂以每秒七公里的速度飛行,在它們內部循環著的代碼中,有一小段——一段從未被簽入任何版本管理系統的代碼——正在以電磁的形式靜靜地存在於千兆字節的固件中。

像一封從未被寄出的信,被夾在一本沒人讀的書裡。

米蘭關掉了屏幕。

黑暗裡,他坐在辦公椅上,沒有動。

他在等。

等明天。

微信公眾號二維碼

掃碼關注微信公眾號
閱讀更多獨家內容