第2章
【盲棋】
出山------------------------------------------,沈奕坐在一輛黑色商務車的后座上,膝蓋上擺著一副棋盤。——是一副圍棋。。他低著頭,左手黑子,右手白子,在空無一子的棋盤上飛快地落子又收起,像是在和自己下一場只有他自己能看懂的快棋。“你在做什么?”她問。“復盤。復盤什么?過去兩年。”。她踩下油門,車子駛出新安市區的擁堵路段,拐上了一條通往郊區的快速路。,二十七八歲,戴著一副金絲邊眼鏡,穿著一件皺巴巴的格子襯衫,懷里抱著一個筆記本電腦,手指在鍵盤上敲個不停。他叫周銘,是省廳技術科最年輕的網絡安全工程師。“沈……沈老師。”周銘轉過身,語氣里帶著一種小心翼翼的恭敬,“我看了您兩年前發表在《計算機學報》上的那篇論文,關于分布式系統共識算法的——那篇論文的第三部分有個錯誤。”沈奕頭也不抬。:“什么錯誤?Paxos算法在異步系統中的活鎖問題,我用了一個優先級排序的方案來解決,但那個方案在實際部署中會導致消息復雜度的指數級增長。我當時寫論文的時候忽略了這一點。那……正確的解決方案是什么?”:“沒有正確的解決方案。FLP不可能性定理已經證明了,在異步系統中,不存在一個確定性的共識算法能夠同時保證安全性和活性。我只能做到近似最優,做不到完美。”
周銘張了張嘴,不知道該說什么。
“你不需要叫我老師。”沈奕終于抬起頭,看了周銘一眼,“我也不是什么老師。我是一個被關了兩年、剛剛被特許在警方監控下參與案件調查的犯罪嫌疑人。”
周銘尷尬地咳了一聲:“林隊說,您是我們的技術顧問。”
“顧問。”沈奕重復了一遍這個詞,嘴角微微彎了彎,看不出是笑還是嘲諷,“好。那就顧問吧。”
“方仲年的資料。”林薇從后視鏡里遞了一個文件袋過來。
沈奕放下棋子,接過文件袋,拆開封口。
方仲年,男,五十四歲,新安大學計算機學院教授,博士生導師,主要研究方向為人工智能與模式識別。曾任**“863”計劃信息技術領域專家組專家,享受***特殊津貼。
“學術地位很高。”沈奕翻著資料,“這種人被綁架,不像是普通的刑事案件。”
“我們查過方仲年近三年的所有科研項目、論文發表、學術交流記錄,沒有發現任何異常。”林薇說,“他的研究方向雖然是人工智能,但主要是理論層面的研究,沒有涉及任何**或****相關的敏感領域。”
“那不一定。”沈奕翻到下一頁,“人工智能的理論研究,如果走對了方向,完全可以轉化為具有戰略價值的應用技術。一個學者自己可能都沒有意識到,他的某個理論突破在別人手里會成為什么樣的武器。”
他停在一頁資料上,目光凝住了。
那是一張方仲年實驗室的合影。照片里,方仲年站在中間,周圍是一群年輕的博士生和碩士生。所有人的臉上都帶著那種學術圈特有的、略顯疲憊但充滿熱情的笑容。
沈奕的目光落在照片最左邊的一個年輕人身上。
那個年輕人很瘦,********,表情嚴肅,和其他人的笑容格格不入。他的胸前掛著一塊工牌,上面依稀可以辨認出幾個字——
“這個人是誰?”沈奕把照片舉起來。
林薇瞥了一眼:“方仲年的學生,叫……等等,我看一下。”她翻了翻自己的筆記,“叫楚天明。方仲年帶的博士生,去年因為學術不端被開除學籍。”
“學術不端?”
“據說是論文數據造假。方仲年親自向學校學術委員會舉報的。”
沈奕盯著照片上那個年輕人的臉,沉默了幾秒。
“被自己的導師舉報學術不端,開除學籍——這個人現在在哪里?”
“不知道。被開除之后就消失了。我們沒有把他列為嫌疑人,因為綁架案發生的時候,他在監控里已經消失了將近一年。”
“把他找出來。”沈奕把照片放回文件袋,“一個被導師毀掉學術前途的人工智能博士生,消失一年之后,他的導師被一伙能夠入侵全城交通系統的綁匪綁架——這兩件事之間不太可能是巧合。”
林薇看了他一眼,沒有說話,但方向盤上的手指微微收緊了一下。
車子駛入了一個戒備森嚴的院落。這里是省廳刑偵總隊的技術中心,一棟灰色的六層樓房,外墻上沒有任何標志,但門口的崗哨和圍墻上的監控探頭密度暴露了它的特殊性。
沈奕下車的時候,瞇起眼睛看了看天上的太陽。
他已經兩年沒有見過沒有被鐵柵欄分割過的天空了。
陽光刺得他眼眶發酸,但他沒有低頭,反而微微仰起臉,像是在感受某種久違的東西。
“這邊走。”林薇在前面帶路。
技術中心的四樓是一個大型的網絡安全實驗室,擺滿了服務器、工作站和各種叫不出名字的設備。十幾個技術人員正在各自的工位上忙碌,鍵盤敲擊聲和服務器風扇的嗡鳴聲混在一起,像是某種電子生物的呼吸。
沈奕走進去的時候,所有人的目光都投了過來。
那些目光里有好奇,有審視,有警惕,也有不加掩飾的敵意。
“這就是那個……沈奕?”一個穿著黑色衛衣的年輕技術員低聲對同事說,“聽說他就是因為入侵銀行系統被抓的。”
“一個罪犯來給我們當技術顧問?開什么玩笑。”
“安靜。”林薇的聲音不大,但有一種不容置疑的力度,“所有人回到自己的崗位上。沈奕現在是這個案子的技術顧問,他的指令等同于我的指令。有意見的,現在可以提出來。”
沒有人說話。
沈奕對這一切視若無睹。他走到最大的那臺工作站前,拉開椅子坐下,手指搭上鍵盤,但沒有敲擊。他閉上眼睛,像是在傾聽什么。
“給我看綁架案發生當天,交通系統被入侵時的所有日志。”他說。
周銘立刻湊過來,在另一臺終端上操作了幾下,把數據投射到墻上的大屏幕上。
密密麻麻的數據流如瀑布般傾瀉而下。
沈奕睜開眼睛,盯著那些滾動的十六進制數據,一動不動。
“這是交管中心中央系統的入侵日志。”周銘解釋,“入侵發生在凌晨三點十七分,攻擊者利用了系統的一個零日漏洞,獲得了最高權限——”
“不是零日漏洞。”沈奕打斷了他。
“什么?”
“這不是利用漏洞入侵。這是一次合法的登錄。”
所有人都愣住了。
“你看這個時間戳,”沈奕指著屏幕上的某一行數據,“凌晨三點十七分二十一秒,一個擁有系統***權限的賬戶登錄了交管中心的核心服務器。這個賬戶的用戶名是‘jiaotong_admin’,密碼哈希值在這里。”他手指移動,“這個哈希值對應的明文密碼,是‘Jiaotong2023!’。”
周銘快速查詢了一下:“這個賬戶……是交管中心內部的一個備用***賬戶,權限極高,但平時很少使用。我們查過,這個賬戶沒有被盜用的痕跡——”
“因為它不是被盜用的。”沈奕說,“這個賬戶的登錄,使用的是正確的用戶名和正確的密碼。沒有任何****、沒有任何漏洞利用、沒有任何惡意代碼注入。它就是一個合法的登錄。”
“那……那怎么可能?”周銘瞪大了眼睛,“如果是一個合法的登錄,那就意味著——”
“意味著攻擊者擁有交管中心內部某個***的賬戶憑證。”沈奕說,“用戶名和密碼。或者——攻擊者本身就是交管中心的內部人員。”
會議室里的空氣驟然緊繃。
林薇快步走過來:“你確定?”
“百分之九十五。”沈奕說,“剩下的百分之五,留給某種我目前還無法想象的、能夠實時破解SHA-256哈希值的量子計算技術。如果綁匪有這個技術,他們就不需要綁架方仲年了。”
林薇沉默了幾秒,然后拿起手機撥了一個號碼:“老趙,我是林薇。我需要交管中心所有擁有核心系統***權限的人員名單——包括在職的、離職的、借調的,一個都不能少。”
掛斷電話后,她看向沈奕:“還有呢?”
沈奕的手指在鍵盤上飛快地敲擊起來。他的打字速度極快,指法精準得像是鋼琴家在演奏一首練習曲。屏幕上,一行行命令閃過,各種數據被調取、比對、分析。
“交管中心只是冰山一角。”他一邊操作一邊說,“入侵交通系統需要同時控制三個層級:中央控制系統、區域分控節點、路口終端信號機。如果攻擊者只控制了中央系統,最多只能改變全局性的信號配時方案,做不到——像你們描述的那樣——十七條主干道同時亮起綠燈。”
“你的意思是……”
“攻擊者同時入侵了至少二十三個區域分控節點和一百七十個路口終端信號機。這些設備分布在城市的各個角落,物理隔離,網絡架構各異,安全防護水平參差不齊。要同時控制它們,需要的不是一次精心策劃的入侵行動——”
他停下手指,轉過身來。
“需要的是一張已經預先布置好的、覆蓋全城的僵尸網絡。”
周銘的臉色變了:“你是說……那些交通信號設備早就被植入了后門?”
“不是后門。”沈奕搖頭,“后門是可檢測的。這是一次更精巧的攻擊——攻擊者利用了這些設備固件中本身就存在的、設計者自己都沒有意識到的邏輯缺陷。這些缺陷不是漏洞,而是……特性。”
他從鍵盤上抬起手,十根手指微微顫抖——不是因為緊張,而是因為興奮。
“交管中心的設備采購來自七家不同的供應商,每家供應商的固件都是閉源的、各自獨立的。但我在剛才四十分鐘的分析中發現了一個模式——這七家供應商的固件中,有一小段代碼是完全相同的。”
“什么代碼?”
“一個處理時間同步功能的模塊。所有交通信號設備都需要通過NTP協議與中央時鐘同步,以確保信號配時的精確性。這七家供應商的固件中,實現NTP同步的代碼竟然一模一樣——連注釋里的拼寫錯誤都一樣。”
他調出屏幕上的代碼對比。
“你們看這一行注釋——‘// Syncing time with **ster server, do not modify’。‘Syncing’這個詞拼錯了,少了一個‘h’。七家不同供應商的固件里,同一個單詞拼錯了同一個地方。”
周銘湊近屏幕,瞳孔微微收縮。
“這說明……”他喃喃道。
“說明這七家供應商的固件,很可能都來自同一個底層代碼庫。而這個代碼庫的源頭——很可能就是某個被廣泛使用的、開源的嵌入式操作系統。攻擊者發現了這個代碼庫中NTP模塊的一個設計缺陷,然后利用這個缺陷,在所有運行這個代碼庫的設備上植入了一個隱蔽的觸發機制。”
“什么樣的觸發機制?”
“一個時間鎖。”沈奕說,“攻擊者在代碼中預設了一個條件——當系統時間到達某個特定時刻時,NTP模塊會執行一段額外的指令。這段指令不在正常的代碼路徑中,而是隱藏在時間同步的邊界條件里——比如閏秒處理、時區轉換這些邊緣場景。”
他站起身,走到白板前,拿起一支馬克筆。
“想象一下,”他一邊畫圖一邊說,“你在寫一段處理閏秒的代碼。正常的邏輯是:當檢測到閏秒時,將系統時鐘回撥一秒。但攻擊者在代碼中添加了一個隱藏的分支——如果閏秒發生的日期是某個特定的值,那么不僅回撥時鐘,還要執行一個預設的命令。”
他在白板上寫下了一串偽代碼。
“這個預設的命令可以是任何東西——改變信號燈狀態、開放某個防火墻端口、向某個IP地址發送數據。而最可怕的是,這段代碼在正常的代碼**中幾乎不可能被發現,因為它隱藏在閏秒處理這種極其邊緣的邏輯里。”
林薇雖然不懂技術細節,但她聽懂了結論:“所以你的意思是,這些交通信號設備,早在出廠的時候,就已經被動了手腳?”
“不一定是在出廠的時候。”沈奕把馬克筆扔回白板槽里,“也可能是在系統升級的時候。攻擊者可能入侵了固件分發的渠道,在官方發布的升級包中植入了惡意代碼。無論是哪種方式,結果都是一樣的——一張覆蓋全城的、潛伏期長達數年的僵尸網絡。”
會議室內一片寂靜。
周銘的臉色變得很難看:“如果交通系統可以被這樣滲透,那……電力系統?供水系統?燃氣系統?”
沈奕看了他一眼,沒有說話。
但那一眼已經說明了一切。
林薇的手機響了。她接起來,聽了幾秒,表情驟然變得凝重。
“好,我知道了。馬上到。”
她掛斷電話,看向沈奕。
“方仲年的家里發現了新的線索。我們需要現在就過去。”
沈奕站起身,膝蓋上的棋盤滑落在地,黑白子灑了一地,發出清脆的碰撞聲。
他沒有彎腰去撿。
“走吧。”他說。
周銘張了張嘴,不知道該說什么。
“你不需要叫我老師。”沈奕終于抬起頭,看了周銘一眼,“我也不是什么老師。我是一個被關了兩年、剛剛被特許在警方監控下參與案件調查的犯罪嫌疑人。”
周銘尷尬地咳了一聲:“林隊說,您是我們的技術顧問。”
“顧問。”沈奕重復了一遍這個詞,嘴角微微彎了彎,看不出是笑還是嘲諷,“好。那就顧問吧。”
“方仲年的資料。”林薇從后視鏡里遞了一個文件袋過來。
沈奕放下棋子,接過文件袋,拆開封口。
方仲年,男,五十四歲,新安大學計算機學院教授,博士生導師,主要研究方向為人工智能與模式識別。曾任**“863”計劃信息技術領域專家組專家,享受***特殊津貼。
“學術地位很高。”沈奕翻著資料,“這種人被綁架,不像是普通的刑事案件。”
“我們查過方仲年近三年的所有科研項目、論文發表、學術交流記錄,沒有發現任何異常。”林薇說,“他的研究方向雖然是人工智能,但主要是理論層面的研究,沒有涉及任何**或****相關的敏感領域。”
“那不一定。”沈奕翻到下一頁,“人工智能的理論研究,如果走對了方向,完全可以轉化為具有戰略價值的應用技術。一個學者自己可能都沒有意識到,他的某個理論突破在別人手里會成為什么樣的武器。”
他停在一頁資料上,目光凝住了。
那是一張方仲年實驗室的合影。照片里,方仲年站在中間,周圍是一群年輕的博士生和碩士生。所有人的臉上都帶著那種學術圈特有的、略顯疲憊但充滿熱情的笑容。
沈奕的目光落在照片最左邊的一個年輕人身上。
那個年輕人很瘦,********,表情嚴肅,和其他人的笑容格格不入。他的胸前掛著一塊工牌,上面依稀可以辨認出幾個字——
“這個人是誰?”沈奕把照片舉起來。
林薇瞥了一眼:“方仲年的學生,叫……等等,我看一下。”她翻了翻自己的筆記,“叫楚天明。方仲年帶的博士生,去年因為學術不端被開除學籍。”
“學術不端?”
“據說是論文數據造假。方仲年親自向學校學術委員會舉報的。”
沈奕盯著照片上那個年輕人的臉,沉默了幾秒。
“被自己的導師舉報學術不端,開除學籍——這個人現在在哪里?”
“不知道。被開除之后就消失了。我們沒有把他列為嫌疑人,因為綁架案發生的時候,他在監控里已經消失了將近一年。”
“把他找出來。”沈奕把照片放回文件袋,“一個被導師毀掉學術前途的人工智能博士生,消失一年之后,他的導師被一伙能夠入侵全城交通系統的綁匪綁架——這兩件事之間不太可能是巧合。”
林薇看了他一眼,沒有說話,但方向盤上的手指微微收緊了一下。
車子駛入了一個戒備森嚴的院落。這里是省廳刑偵總隊的技術中心,一棟灰色的六層樓房,外墻上沒有任何標志,但門口的崗哨和圍墻上的監控探頭密度暴露了它的特殊性。
沈奕下車的時候,瞇起眼睛看了看天上的太陽。
他已經兩年沒有見過沒有被鐵柵欄分割過的天空了。
陽光刺得他眼眶發酸,但他沒有低頭,反而微微仰起臉,像是在感受某種久違的東西。
“這邊走。”林薇在前面帶路。
技術中心的四樓是一個大型的網絡安全實驗室,擺滿了服務器、工作站和各種叫不出名字的設備。十幾個技術人員正在各自的工位上忙碌,鍵盤敲擊聲和服務器風扇的嗡鳴聲混在一起,像是某種電子生物的呼吸。
沈奕走進去的時候,所有人的目光都投了過來。
那些目光里有好奇,有審視,有警惕,也有不加掩飾的敵意。
“這就是那個……沈奕?”一個穿著黑色衛衣的年輕技術員低聲對同事說,“聽說他就是因為入侵銀行系統被抓的。”
“一個罪犯來給我們當技術顧問?開什么玩笑。”
“安靜。”林薇的聲音不大,但有一種不容置疑的力度,“所有人回到自己的崗位上。沈奕現在是這個案子的技術顧問,他的指令等同于我的指令。有意見的,現在可以提出來。”
沒有人說話。
沈奕對這一切視若無睹。他走到最大的那臺工作站前,拉開椅子坐下,手指搭上鍵盤,但沒有敲擊。他閉上眼睛,像是在傾聽什么。
“給我看綁架案發生當天,交通系統被入侵時的所有日志。”他說。
周銘立刻湊過來,在另一臺終端上操作了幾下,把數據投射到墻上的大屏幕上。
密密麻麻的數據流如瀑布般傾瀉而下。
沈奕睜開眼睛,盯著那些滾動的十六進制數據,一動不動。
“這是交管中心中央系統的入侵日志。”周銘解釋,“入侵發生在凌晨三點十七分,攻擊者利用了系統的一個零日漏洞,獲得了最高權限——”
“不是零日漏洞。”沈奕打斷了他。
“什么?”
“這不是利用漏洞入侵。這是一次合法的登錄。”
所有人都愣住了。
“你看這個時間戳,”沈奕指著屏幕上的某一行數據,“凌晨三點十七分二十一秒,一個擁有系統***權限的賬戶登錄了交管中心的核心服務器。這個賬戶的用戶名是‘jiaotong_admin’,密碼哈希值在這里。”他手指移動,“這個哈希值對應的明文密碼,是‘Jiaotong2023!’。”
周銘快速查詢了一下:“這個賬戶……是交管中心內部的一個備用***賬戶,權限極高,但平時很少使用。我們查過,這個賬戶沒有被盜用的痕跡——”
“因為它不是被盜用的。”沈奕說,“這個賬戶的登錄,使用的是正確的用戶名和正確的密碼。沒有任何****、沒有任何漏洞利用、沒有任何惡意代碼注入。它就是一個合法的登錄。”
“那……那怎么可能?”周銘瞪大了眼睛,“如果是一個合法的登錄,那就意味著——”
“意味著攻擊者擁有交管中心內部某個***的賬戶憑證。”沈奕說,“用戶名和密碼。或者——攻擊者本身就是交管中心的內部人員。”
會議室里的空氣驟然緊繃。
林薇快步走過來:“你確定?”
“百分之九十五。”沈奕說,“剩下的百分之五,留給某種我目前還無法想象的、能夠實時破解SHA-256哈希值的量子計算技術。如果綁匪有這個技術,他們就不需要綁架方仲年了。”
林薇沉默了幾秒,然后拿起手機撥了一個號碼:“老趙,我是林薇。我需要交管中心所有擁有核心系統***權限的人員名單——包括在職的、離職的、借調的,一個都不能少。”
掛斷電話后,她看向沈奕:“還有呢?”
沈奕的手指在鍵盤上飛快地敲擊起來。他的打字速度極快,指法精準得像是鋼琴家在演奏一首練習曲。屏幕上,一行行命令閃過,各種數據被調取、比對、分析。
“交管中心只是冰山一角。”他一邊操作一邊說,“入侵交通系統需要同時控制三個層級:中央控制系統、區域分控節點、路口終端信號機。如果攻擊者只控制了中央系統,最多只能改變全局性的信號配時方案,做不到——像你們描述的那樣——十七條主干道同時亮起綠燈。”
“你的意思是……”
“攻擊者同時入侵了至少二十三個區域分控節點和一百七十個路口終端信號機。這些設備分布在城市的各個角落,物理隔離,網絡架構各異,安全防護水平參差不齊。要同時控制它們,需要的不是一次精心策劃的入侵行動——”
他停下手指,轉過身來。
“需要的是一張已經預先布置好的、覆蓋全城的僵尸網絡。”
周銘的臉色變了:“你是說……那些交通信號設備早就被植入了后門?”
“不是后門。”沈奕搖頭,“后門是可檢測的。這是一次更精巧的攻擊——攻擊者利用了這些設備固件中本身就存在的、設計者自己都沒有意識到的邏輯缺陷。這些缺陷不是漏洞,而是……特性。”
他從鍵盤上抬起手,十根手指微微顫抖——不是因為緊張,而是因為興奮。
“交管中心的設備采購來自七家不同的供應商,每家供應商的固件都是閉源的、各自獨立的。但我在剛才四十分鐘的分析中發現了一個模式——這七家供應商的固件中,有一小段代碼是完全相同的。”
“什么代碼?”
“一個處理時間同步功能的模塊。所有交通信號設備都需要通過NTP協議與中央時鐘同步,以確保信號配時的精確性。這七家供應商的固件中,實現NTP同步的代碼竟然一模一樣——連注釋里的拼寫錯誤都一樣。”
他調出屏幕上的代碼對比。
“你們看這一行注釋——‘// Syncing time with **ster server, do not modify’。‘Syncing’這個詞拼錯了,少了一個‘h’。七家不同供應商的固件里,同一個單詞拼錯了同一個地方。”
周銘湊近屏幕,瞳孔微微收縮。
“這說明……”他喃喃道。
“說明這七家供應商的固件,很可能都來自同一個底層代碼庫。而這個代碼庫的源頭——很可能就是某個被廣泛使用的、開源的嵌入式操作系統。攻擊者發現了這個代碼庫中NTP模塊的一個設計缺陷,然后利用這個缺陷,在所有運行這個代碼庫的設備上植入了一個隱蔽的觸發機制。”
“什么樣的觸發機制?”
“一個時間鎖。”沈奕說,“攻擊者在代碼中預設了一個條件——當系統時間到達某個特定時刻時,NTP模塊會執行一段額外的指令。這段指令不在正常的代碼路徑中,而是隱藏在時間同步的邊界條件里——比如閏秒處理、時區轉換這些邊緣場景。”
他站起身,走到白板前,拿起一支馬克筆。
“想象一下,”他一邊畫圖一邊說,“你在寫一段處理閏秒的代碼。正常的邏輯是:當檢測到閏秒時,將系統時鐘回撥一秒。但攻擊者在代碼中添加了一個隱藏的分支——如果閏秒發生的日期是某個特定的值,那么不僅回撥時鐘,還要執行一個預設的命令。”
他在白板上寫下了一串偽代碼。
“這個預設的命令可以是任何東西——改變信號燈狀態、開放某個防火墻端口、向某個IP地址發送數據。而最可怕的是,這段代碼在正常的代碼**中幾乎不可能被發現,因為它隱藏在閏秒處理這種極其邊緣的邏輯里。”
林薇雖然不懂技術細節,但她聽懂了結論:“所以你的意思是,這些交通信號設備,早在出廠的時候,就已經被動了手腳?”
“不一定是在出廠的時候。”沈奕把馬克筆扔回白板槽里,“也可能是在系統升級的時候。攻擊者可能入侵了固件分發的渠道,在官方發布的升級包中植入了惡意代碼。無論是哪種方式,結果都是一樣的——一張覆蓋全城的、潛伏期長達數年的僵尸網絡。”
會議室內一片寂靜。
周銘的臉色變得很難看:“如果交通系統可以被這樣滲透,那……電力系統?供水系統?燃氣系統?”
沈奕看了他一眼,沒有說話。
但那一眼已經說明了一切。
林薇的手機響了。她接起來,聽了幾秒,表情驟然變得凝重。
“好,我知道了。馬上到。”
她掛斷電話,看向沈奕。
“方仲年的家里發現了新的線索。我們需要現在就過去。”
沈奕站起身,膝蓋上的棋盤滑落在地,黑白子灑了一地,發出清脆的碰撞聲。
他沒有彎腰去撿。
“走吧。”他說。