第4章
盲棋------------------------------------------。。他坐在工作站前,面前擺著三塊屏幕,每一塊屏幕上都在滾動著不同的數(shù)據(jù)流。他的手指在鍵盤上飛快地敲擊,速度比白天更快,指法更加凌厲,像是在進(jìn)行一場無聲的演奏。,看著屏幕上那些飛速閃過的命令和代碼,眼睛越瞪越大?!吧颉蚶蠋煟@是在做什么?重建攻擊模型?!鄙蜣阮^也不回,“我在模擬K入侵交通系統(tǒng)時的思維路徑。要同時控制全城一百七十個路口信號機(jī),攻擊者必須解決三個問題:第一,如何同時觸發(fā)所有設(shè)備中的隱藏代碼;第二,如何確保觸發(fā)的時間精確到毫秒級;第三,如何在觸發(fā)之后不被任何監(jiān)控系統(tǒng)發(fā)現(xiàn)。這些問題有答案了嗎?第一個問題,攻擊者使用了NTP協(xié)議的時間同步功能作為觸發(fā)機(jī)制。所有設(shè)備都會定期向中央時鐘同步時間,攻擊者只需要在NTP服務(wù)器返回的時間數(shù)據(jù)中嵌入一個特定的觸發(fā)信號,所有設(shè)備就會在同步時間的瞬間執(zhí)行預(yù)設(shè)的指令?!薄!澳憧催@里——正常的NTP響應(yīng)包中有一個‘reference timestamp’字段,用于記錄參考時間源的最后更新時間。攻擊者在這個字段的低四位字節(jié)中嵌入了觸發(fā)指令。由于這個字段在正常的NTP協(xié)議處理中不會被完整解析,大多數(shù)入侵檢測系統(tǒng)都會忽略它。”:“這是在協(xié)議層面進(jìn)行的隱蔽通信,幾乎不可能被檢測到。幾乎不可能,但不是完全不可能?!鄙蜣日f,“有一個辦法可以檢測到這種隱蔽信道——分析NTP流量的熵值分布。正常的NTP流量中,‘reference timestamp’字段的熵值應(yīng)該接近于隨機(jī)分布,因?yàn)闀r間戳本身就是隨機(jī)的。但如果有人在其中嵌入數(shù)據(jù),這個字段的熵值就會顯著降低?!?。屏幕上的代碼行如瀑布般傾瀉而下,邏輯清晰,結(jié)構(gòu)嚴(yán)謹(jǐn),每一行都像是經(jīng)過精密計(jì)算的棋步。,忽然有一種奇怪的感覺——他覺得自己不是在看著一個人編程,而是在看著一個人下棋。每一行代碼都是一步棋,每一個函數(shù)都是一個戰(zhàn)術(shù),整個程序就是一盤宏大的棋局?!吧蚶蠋?,”周銘?yīng)q豫了一下,還是問出了口,“我聽說您以前是學(xué)數(shù)學(xué)的,后來才轉(zhuǎn)的計(jì)算機(jī)?嗯?!?br>“為什么轉(zhuǎn)?”
沈奕的手指停了一瞬。
“因?yàn)閿?shù)學(xué)太干凈了?!彼f。
“什么意思?”
“數(shù)學(xué)的世界里,每一個問題都有一個確定的答案。對就是對,錯就是錯。定理一旦被證明,就永遠(yuǎn)不會被推翻?!彼穆曇艉鋈蛔兊糜行┻b遠(yuǎn),“但現(xiàn)實(shí)世界不是這樣的?,F(xiàn)實(shí)世界里,對和錯可以同時存在,真相和謊言可以完美地糾纏在一起。你無法用數(shù)學(xué)的方式證明一個人是無辜的——”
他停頓了一下,手指重新落在鍵盤上。
“所以我學(xué)了計(jì)算機(jī)。計(jì)算機(jī)是數(shù)學(xué)和現(xiàn)實(shí)之間的橋梁。代碼可以被篡改,但代碼的邏輯不會說謊?!?br>周銘沉默了。
他忽然覺得,眼前這個人不像一個被關(guān)了兩年精神病院的病人。他像一個——棋手。一個被蒙上眼睛下了兩年盲棋的棋手,現(xiàn)在終于被摘掉了眼罩,看到了真正的棋盤。
“找到了?!鄙蜣群鋈徽f。
“找到什么?”
“K在入侵交通系統(tǒng)時使用的一個特征——一個他無法消除的、屬于他個人的‘指紋’?!?br>沈奕放大了屏幕上的某一段數(shù)據(jù)。
“你看這個時間同步的精度。K在觸發(fā)所有設(shè)備的時候,時間同步的誤差控制在±0.5毫秒以內(nèi)。這是一個極其驚人的精度,普通的NTP同步只能達(dá)到±10毫秒的精度。K能做到這一點(diǎn),說明他對NTP協(xié)議的理解遠(yuǎn)超常人——但同時也暴露了一個信息?!?br>“什么信息?”
“K用于觸發(fā)攻擊的NTP服務(wù)器,不是普通的NTP服務(wù)器。它是一臺經(jīng)過特殊定制的服務(wù)器,運(yùn)行著一個修改版的NTP守護(hù)進(jìn)程。這個修改版的NTPD有一個特性——它在處理閏秒的時候,會使用一個非標(biāo)準(zhǔn)的算法?!?br>他在屏幕上調(diào)出一段數(shù)學(xué)公式。
“這個算法是K自己寫的。它比標(biāo)準(zhǔn)的閏秒處理算法更高效,但有一個副作用——每次處理閏秒的時候,會在系統(tǒng)日志中留下一個特定的錯誤代碼。這個錯誤代碼不是標(biāo)準(zhǔn)的NTP錯誤碼,而是K自己定義的。”
“你的意思是——”
“我的意思是,如果K曾經(jīng)用同樣的方法入侵過其他系統(tǒng),那么那些系統(tǒng)的日志中也會留下同樣的錯誤代碼。我們可以用這個特征,去搜索全國范圍內(nèi)所有使用NTP協(xié)議的系統(tǒng)日志——找出所有出現(xiàn)過這個錯誤代碼的設(shè)備?!?br>沈奕轉(zhuǎn)過身來,看著林薇——她不知什么時候已經(jīng)站在了門口。
“林隊(duì),我需要訪問**互聯(lián)網(wǎng)應(yīng)急中心的日志數(shù)據(jù)庫?!?br>林薇皺眉:“那個數(shù)據(jù)庫的權(quán)限——”
“我知道,最高級別。但如果你不去申請,我們就永遠(yuǎn)找不到K的蹤跡。這個人是一個大師級的棋手,他走的每一步都經(jīng)過了精心的計(jì)算。但他犯了一個錯誤——”
沈奕的嘴角微微翹起。
“什么錯誤?”
“他太優(yōu)秀了。”沈奕說,“他寫的這段閏秒處理代碼太優(yōu)雅、太高效了。一個正常的系統(tǒng)***不會寫出這樣的代碼,因?yàn)闆]有人會在意閏秒處理的性能優(yōu)化。只有一種人會在這上面花心思——一個把編程當(dāng)成藝術(shù)的人?!?br>他站起身,走到窗邊。窗外是技術(shù)中心的院子,院子里有一棵老槐樹,樹冠在暮色中像一團(tuán)濃重的墨綠。
“一個把編程當(dāng)成藝術(shù)的人,會在他的作品中留下簽名——即使他自己都沒有意識到?!鄙蜣鹊穆曇艉茌p,“就像棋手會在棋局中留下風(fēng)格一樣。K的代碼里有他的風(fēng)格,他的風(fēng)格就是他的指紋。”
“你能找到他?”林薇問。
“給我四十八小時?!鄙蜣日f,“和一副象棋?!?br>“你還在想你的象棋?”
“不是想?!鄙蜣绒D(zhuǎn)過身來,暮色從他的背后透進(jìn)來,給他的輪廓鍍上了一層暗金色的光,“我需要象棋來保持思維的銳利。編程和破案是戰(zhàn)術(shù)層面的工作,但象棋是戰(zhàn)略層面的訓(xùn)練。對付K這樣的對手,光有技術(shù)不夠——我需要下贏一盤盲棋。”
“盲棋?”
“盲棋就是不看棋盤,憑記憶和想象下棋?!鄙蜣日f,“K現(xiàn)在就在下一盤盲棋。他看不見我們,我們也看不見他。但棋局已經(jīng)擺開了,每一步都在改變整個局面。我需要在不看到棋盤的情況下,推演出他的全部意圖。”
他走回工作站前,從抽屜里翻出那副被撿回來的棋盤——周銘在離開精神病院的時候幫他把散落的棋子收拾了。
他把棋盤鋪在桌上,紅黑三十二子各就各位。
“這盤棋,”他說,“紅方是K,黑方是我。K已經(jīng)走了第一步——”
他將紅方的中兵向前推了一步。
“入侵交通系統(tǒng)。這是一步試探性的開局,不是殺招,而是為了測試我的反應(yīng)?!?br>他又將紅方的左馬跳起。
“綁架方仲年。這是第二步,開始布局,控制要害位置。”
他將紅方的右車橫移。
“要求釋放‘K’。這是第三步,亮出目標(biāo),施加壓力?!?br>沈奕的手指停在半空中,懸在棋盤上方。
“現(xiàn)在,輪到我了?!?br>他拿起黑方的卒,向前推了一步。
“第一步——找出方仲年保險柜里的殘棋?!?br>他又移動了一顆黑子。
“第二步——重建K的攻擊模型,找到他的指紋。”
他移動了第三顆黑子。
“第三步——”
他的手指停在一顆黑馬上,但沒有拿起來。
“第三步是什么?”林薇問。
沈奕沉默了很久。
窗外的天色完全暗了下來,院子里的老槐樹變成了一團(tuán)模糊的黑影。技術(shù)中心的燈光亮起,熒光燈管發(fā)出均勻的白光,照亮了棋盤上紅黑分明的棋子。
“第三步,”沈奕終于開口,聲音低得像是從井底傳來的回聲,“是走到K的下一步之前?!?br>他抬起頭,眼睛里的幽藍(lán)色火焰在熒光燈下顯得格外明亮。
“K是一個極其聰明的對手,他走的每一步都經(jīng)過了精心的計(jì)算。但聰明的棋手有一個共同的弱點(diǎn)——他們太相信自己的計(jì)算了。當(dāng)他們算到三步之后的局面對自己有利時,就會忽略**步上的陷阱?!?br>他拿起那顆黑馬,重重地落在棋盤上。
“我要做的,不是應(yīng)對K已經(jīng)走出的棋。我要做的是——讓他以為他算到了我的棋,然后在他以為他贏了的時候,告訴他——”
黑馬落在了一個出人意料的位置上。
“——你算錯了。”
沈奕的手指停了一瞬。
“因?yàn)閿?shù)學(xué)太干凈了?!彼f。
“什么意思?”
“數(shù)學(xué)的世界里,每一個問題都有一個確定的答案。對就是對,錯就是錯。定理一旦被證明,就永遠(yuǎn)不會被推翻?!彼穆曇艉鋈蛔兊糜行┻b遠(yuǎn),“但現(xiàn)實(shí)世界不是這樣的?,F(xiàn)實(shí)世界里,對和錯可以同時存在,真相和謊言可以完美地糾纏在一起。你無法用數(shù)學(xué)的方式證明一個人是無辜的——”
他停頓了一下,手指重新落在鍵盤上。
“所以我學(xué)了計(jì)算機(jī)。計(jì)算機(jī)是數(shù)學(xué)和現(xiàn)實(shí)之間的橋梁。代碼可以被篡改,但代碼的邏輯不會說謊?!?br>周銘沉默了。
他忽然覺得,眼前這個人不像一個被關(guān)了兩年精神病院的病人。他像一個——棋手。一個被蒙上眼睛下了兩年盲棋的棋手,現(xiàn)在終于被摘掉了眼罩,看到了真正的棋盤。
“找到了?!鄙蜣群鋈徽f。
“找到什么?”
“K在入侵交通系統(tǒng)時使用的一個特征——一個他無法消除的、屬于他個人的‘指紋’?!?br>沈奕放大了屏幕上的某一段數(shù)據(jù)。
“你看這個時間同步的精度。K在觸發(fā)所有設(shè)備的時候,時間同步的誤差控制在±0.5毫秒以內(nèi)。這是一個極其驚人的精度,普通的NTP同步只能達(dá)到±10毫秒的精度。K能做到這一點(diǎn),說明他對NTP協(xié)議的理解遠(yuǎn)超常人——但同時也暴露了一個信息?!?br>“什么信息?”
“K用于觸發(fā)攻擊的NTP服務(wù)器,不是普通的NTP服務(wù)器。它是一臺經(jīng)過特殊定制的服務(wù)器,運(yùn)行著一個修改版的NTP守護(hù)進(jìn)程。這個修改版的NTPD有一個特性——它在處理閏秒的時候,會使用一個非標(biāo)準(zhǔn)的算法?!?br>他在屏幕上調(diào)出一段數(shù)學(xué)公式。
“這個算法是K自己寫的。它比標(biāo)準(zhǔn)的閏秒處理算法更高效,但有一個副作用——每次處理閏秒的時候,會在系統(tǒng)日志中留下一個特定的錯誤代碼。這個錯誤代碼不是標(biāo)準(zhǔn)的NTP錯誤碼,而是K自己定義的。”
“你的意思是——”
“我的意思是,如果K曾經(jīng)用同樣的方法入侵過其他系統(tǒng),那么那些系統(tǒng)的日志中也會留下同樣的錯誤代碼。我們可以用這個特征,去搜索全國范圍內(nèi)所有使用NTP協(xié)議的系統(tǒng)日志——找出所有出現(xiàn)過這個錯誤代碼的設(shè)備?!?br>沈奕轉(zhuǎn)過身來,看著林薇——她不知什么時候已經(jīng)站在了門口。
“林隊(duì),我需要訪問**互聯(lián)網(wǎng)應(yīng)急中心的日志數(shù)據(jù)庫?!?br>林薇皺眉:“那個數(shù)據(jù)庫的權(quán)限——”
“我知道,最高級別。但如果你不去申請,我們就永遠(yuǎn)找不到K的蹤跡。這個人是一個大師級的棋手,他走的每一步都經(jīng)過了精心的計(jì)算。但他犯了一個錯誤——”
沈奕的嘴角微微翹起。
“什么錯誤?”
“他太優(yōu)秀了。”沈奕說,“他寫的這段閏秒處理代碼太優(yōu)雅、太高效了。一個正常的系統(tǒng)***不會寫出這樣的代碼,因?yàn)闆]有人會在意閏秒處理的性能優(yōu)化。只有一種人會在這上面花心思——一個把編程當(dāng)成藝術(shù)的人?!?br>他站起身,走到窗邊。窗外是技術(shù)中心的院子,院子里有一棵老槐樹,樹冠在暮色中像一團(tuán)濃重的墨綠。
“一個把編程當(dāng)成藝術(shù)的人,會在他的作品中留下簽名——即使他自己都沒有意識到?!鄙蜣鹊穆曇艉茌p,“就像棋手會在棋局中留下風(fēng)格一樣。K的代碼里有他的風(fēng)格,他的風(fēng)格就是他的指紋。”
“你能找到他?”林薇問。
“給我四十八小時?!鄙蜣日f,“和一副象棋?!?br>“你還在想你的象棋?”
“不是想?!鄙蜣绒D(zhuǎn)過身來,暮色從他的背后透進(jìn)來,給他的輪廓鍍上了一層暗金色的光,“我需要象棋來保持思維的銳利。編程和破案是戰(zhàn)術(shù)層面的工作,但象棋是戰(zhàn)略層面的訓(xùn)練。對付K這樣的對手,光有技術(shù)不夠——我需要下贏一盤盲棋。”
“盲棋?”
“盲棋就是不看棋盤,憑記憶和想象下棋?!鄙蜣日f,“K現(xiàn)在就在下一盤盲棋。他看不見我們,我們也看不見他。但棋局已經(jīng)擺開了,每一步都在改變整個局面。我需要在不看到棋盤的情況下,推演出他的全部意圖。”
他走回工作站前,從抽屜里翻出那副被撿回來的棋盤——周銘在離開精神病院的時候幫他把散落的棋子收拾了。
他把棋盤鋪在桌上,紅黑三十二子各就各位。
“這盤棋,”他說,“紅方是K,黑方是我。K已經(jīng)走了第一步——”
他將紅方的中兵向前推了一步。
“入侵交通系統(tǒng)。這是一步試探性的開局,不是殺招,而是為了測試我的反應(yīng)?!?br>他又將紅方的左馬跳起。
“綁架方仲年。這是第二步,開始布局,控制要害位置。”
他將紅方的右車橫移。
“要求釋放‘K’。這是第三步,亮出目標(biāo),施加壓力?!?br>沈奕的手指停在半空中,懸在棋盤上方。
“現(xiàn)在,輪到我了?!?br>他拿起黑方的卒,向前推了一步。
“第一步——找出方仲年保險柜里的殘棋?!?br>他又移動了一顆黑子。
“第二步——重建K的攻擊模型,找到他的指紋。”
他移動了第三顆黑子。
“第三步——”
他的手指停在一顆黑馬上,但沒有拿起來。
“第三步是什么?”林薇問。
沈奕沉默了很久。
窗外的天色完全暗了下來,院子里的老槐樹變成了一團(tuán)模糊的黑影。技術(shù)中心的燈光亮起,熒光燈管發(fā)出均勻的白光,照亮了棋盤上紅黑分明的棋子。
“第三步,”沈奕終于開口,聲音低得像是從井底傳來的回聲,“是走到K的下一步之前?!?br>他抬起頭,眼睛里的幽藍(lán)色火焰在熒光燈下顯得格外明亮。
“K是一個極其聰明的對手,他走的每一步都經(jīng)過了精心的計(jì)算。但聰明的棋手有一個共同的弱點(diǎn)——他們太相信自己的計(jì)算了。當(dāng)他們算到三步之后的局面對自己有利時,就會忽略**步上的陷阱?!?br>他拿起那顆黑馬,重重地落在棋盤上。
“我要做的,不是應(yīng)對K已經(jīng)走出的棋。我要做的是——讓他以為他算到了我的棋,然后在他以為他贏了的時候,告訴他——”
黑馬落在了一個出人意料的位置上。
“——你算錯了。”
閱讀下一章(解鎖全文)
點(diǎn)擊即可暢讀完整版全部內(nèi)容
相關(guān)書籍
友情鏈接