第26章:數位深淵
Sophal的書房比林昊上次來時看起來更加壓抑。窗簾被拉上了,室內只有桌上一盞檯燈提供照明。那台iMac的螢幕散發著幽藍的光芒。
「請坐。」Sophal示意他們坐到沙發上,「要喝點什麼嗎?我這裡有上好的法國紅酒。」
「不必了。」林昊平靜地說,「我想我們還是直接進入正題吧。」
Sophal笑了笑,在他對面的單人沙發上坐下。他翹起二郎腿,姿態輕鬆,彷彿只是一個招待朋友的主人。
「你有膽量,林先生。」Sophal說,「我欣賞這一點。但你也有年輕人的魯莽。」
「魯莽?」
「你以為你能在金邊神不知鬼不覺地行動。」Sophal搖搖頭,「林先生,你太小看我們了。這個國家雖然小,但我們的情報網絡比你想象的全面。」
「所以你從一開始就知道我是誰?」
「不完全是。」Sophal說,「陳金龍出事後,我開始調查。一個叫林昊的台灣網路安全專家,在台北小有名氣。然後我的人在你的住處找到了一些有趣的東西。」
林昊的心跳漏了一拍。他的住處被搜查過了?
「你有一台筆記型電腦。」Sophal說,「裡面有很多關於我的資料。還有一些很有趣的程式碼。」他微笑著,「你的加密做得不錯,但我有一個很好的團隊。」
「如果他們能破解我的加密,你就不會在這裡跟我聊天了。」
Sophal的笑容消失了。他直視著林昊的眼睛。「你說得對。你的加密確實很優秀。我的團隊只能破解大約百分之六十的內容。但剩下的百分之四十,已經足夠讓我了解你的企圖了。」
「那你打算怎麼處置我?」
「處置?」Sophal笑了,「林先生,我不是野蠻人。我不會傷害你。相反,我想給你一個機會。」
「什麼機會?」
「為我工作。」Sophal說,「我有一個網路安全實驗室,需要你這樣的人才。待遇是你現在的一百倍。而且我保證,你在這裡會得到充分的尊重和自由。」
林昊忍不住笑了一聲。「你要我加入你的犯罪集團?」
「犯罪?」Sophal的表情變得嚴肅,「林先生,你對這個世界的理解太簡單了。在柬埔寨,什麼是犯罪?什麼是合法?這些界線比你想像的模糊得多。」
「騙取無辜者的錢財,囚禁違反意願的人,這在任何國家都是犯罪。」
「那些人?」Sophal揮了揮手,「他們來這裡都是自願的。沒有人用槍指著他們。他們聽說能在柬埔寨賺大錢,就自己買了機票飛過來。這能怪誰?」
「他們不知道真相。」
「真相?」Sophal站起來,走到窗邊,「真相是這個世界就是弱肉強食。那些被騙的人貪婪、愚蠢,他們只想不勞而獲。我只是利用了他們的弱點。」
林昊緊緊握著拳頭。他見過那些受害者——一個六十歲的台灣老人,被騙走了所有的退休金;一個越南母親,為了籌集醫藥費而被騙;一個馬來西亞大學生,暑假想打工賺學費,結果被困在園區裡半年。
「我們無法說服彼此。」林昊說。
「看來是這樣。」Sophal歎了口氣,「那麼我只能採取別的措施了。」
他按了一下桌上的對講機。門打開了,兩個壯碩的保鏢走了進來。
「把林先生帶到客房去。」Sophal說,「好好招待他。至於阿蓮——」
他轉向阿蓮,「我對你很失望。我以為你真的關心那些窮人。」
「我確實關心。」阿蓮冷冷地說,「所以我選擇站在正義這一邊。」
Sophal冷笑了一聲。「正義?正義是強者的工具。阿蓮,妳還太年輕。」
兩個保鏢走向林昊。林昊知道硬拼沒有勝算,他站起身,平靜地說:「我自己走。」
他被帶到二樓一間沒有窗戶的客房。房間裡只有一張床和一個洗手間。門從外面鎖上了。他檢查了一下房間——通風口太小無法爬進去,牆壁是加固的。他掏出手機,果然沒有信號。
他被困住了。
但林昊從未想過放棄。他坐在床上,閉上眼睛,開始回想進入別墅時觀察到的一切。他在心中描繪出別墅的網路拓撲圖。
Sophal說過,他的團隊只能破解百分之六十的內容。這意味著他的筆記型電腦裡還有百分之四十的資料是安全的。而那份資料裡,有他準備好的攻擊工具。
但現在他的電腦不在身邊。他需要別的方法。
他摸了摸自己的腰帶。腰帶扣裡藏著一個微型USB驅動器,裡面裝著一個精簡版的滲透測試工具包。這是他的最後手段。
天色逐漸變暗。林昊聽到外面傳來說話聲——Sophal似乎要出門了。這是一個機會。
他等到完全安靜下來,然後走到門邊。門是普通的木門,鎖是電子密碼鎖。他需要繞過它。
林昊從腰帶扣中取出USB,又從襯衫的衣領中抽出一根細小的金屬線——那是他一直藏在衣服裡的應急工具。他用金屬線撬開了門邊的網路面板,露出了裡面的網路線。
別墅的內部網路使用的是標準的Cat6電纜。他小心地剝開外皮,露出了內部的八條線芯。他用金屬線中的導體製成了一個簡單的網路轉接頭,將USB驅動器連接到網路上。
USB驅動器中的程式開始掃描內部網路。幾秒鐘後,他找到了一個漏洞——Sophal別墅的路由器使用的是Cisco RV320,這個型號有一個已知的遠端程式碼執行漏洞,CVE-2019-1653。
這個漏洞可以讓他繞過驗證,直接存取路由器的管理介面。
林昊的手指在USB驅動器上操作——他需要編寫一個簡單的Python腳本來利用這個漏洞。但沒有電腦,他只能用最原始的方式:在腦中編寫程式碼,然後用記憶中的命令操作。
他透過一個預先載入在USB中的腳本,向路由器發送了一個特製的HTTP請求。幾秒鐘後,路由器回傳了一個管理員會話令牌。
他進入了內部網路。
現在他需要找到那台iMac。他掃描了所有連接在網路上的裝置,找到了十幾個IP位址。其中一個主機名為「Senator-Mac」的裝置引起了注意。
他嘗試連結到這台iMac的SSH服務。預設情況下SSH是關閉的,但Sophal的技術人員可能出於遠端管理的需要打開了它。果然,連接埠22是開放的。
接下來是認證問題。他需要密碼。林昊嘗試了幾個常見的預設密碼,但都失敗了。他決定嘗試另一種方法——利用iMac上可能存在的藍牙漏洞。
他用手機掃描附近的藍牙裝置。果然,那台iMac的藍牙是打開的。藍牙的MAC地址最後四位是「A3:F2」。他用手機上的一個工具模擬了一個藍牙鍵盤,嘗試配對。
出乎意料的是,iMac的藍牙配對沒有要求密碼——可能Sophal為了方便使用,關閉了藍牙的安全驗證。
配對成功。
林昊現在可以透過藍牙鍵盤向iMac發送指令了。他小心翼翼地發送了一個shell命令,建立了一個反向shell連結到他手機上運行的一個臨時伺服器。
他成功了。他現在擁有了那台iMac的控制權。
但就在他準備開始複製資料的時候,iMac的螢幕突然亮了起來,一個紅色的警告視窗出現在螢幕中央:
「未經授權的存取嘗試。系統將在三十秒後鎖定。所有操作已記錄。」
該死的。Sophal的電腦上有入侵偵測系統。
林昊迅速做出了決定——他只有三十秒。他快速瀏覽了iMac上的檔案目錄,找到了一個名為「Project_Dragon」的加密容器。檔案大小約為500GB。
他啟動了檔案複製程式,將加密容器的內容傳送到他預先設定好的一個雲端伺服器。複製進度條開始前進:百分之五、百分之十、百分之二十……
警告視窗倒數計時:二十秒、十五秒、十秒……
林昊的心臟在胸腔裡狂跳。他需要至少複製百分之六十的資料才能獲得足夠的證據。但進度條只到了百分之四十三。
倒數計時:五、四、三、二、一——電腦完全鎖定。
複製進度在百分之四十七停止了。
但林昊沒有時間沮喪。他聽到走廊裡傳來急促的腳步聲。Sophal的團隊已經被警報觸動了。他迅速拔掉網路線,將USB驅動器塞回腰帶扣中,然後躺回床上,假裝在睡覺。
門被猛地推開,燈光亮起。兩個保鏢衝了進來,看到林昊躺在床上,面面相覷。其中一個走到床邊,檢查了他的束帶——都還完好。他們沒有找到入侵的證據。
「怎麼了?」林昊裝出剛睡醒的樣子,揉著眼睛問。
保鏢沒有回答。他們在房間裡搜查了一圈,什麼也沒找到。最後只能退出房間,重新鎖上了門。
林昊在黑暗中露出了笑容。Sophal的警報系統雖然觸發了,但他們找不到入侵者。因為真正的入侵者不在這個房間裡,而是在他們的網路中。
但這次警報讓Sophal提高了警惕。他不會再給林昊第二次機會了。
林昊坐在沒有窗戶的客房中,閉著眼睛,讓自己的感官延伸到這個房間之外。他能聽到走廊裡傳來的腳步聲——那是穿著皮鞋的人在硬木地板上走動的聲音,節奏沉穩而有規律,應該是Sophal的私人保鏢在巡邏。每隔大約五分鐘,腳步聲會從門前經過一次,來回都是同樣的節奏。他默默地數著——七步從左到右,然後七步從右到左——這是一個標準的巡邏路線,長度大約十公尺。
他還聽到了空調系統的低沉運轉聲,以及從通風口傳來的微弱音樂聲——是Sophal在書房裡放的古典音樂,似乎是貝多芬的月光奏鳴曲。在這種情境下聽到如此優美的音樂,形成了一種荒誕的對比——一個雙手沾滿鮮血的罪犯,竟然也會欣賞人類文明最精華的藝術作品。這種反差讓林昊感到一陣難以言說的厭惡。
他解開了腰帶,從腰帶扣的暗格中取出了那個微型USB驅動器。這個驅動器只有指甲蓋大小,但裡面裝著他花費了數年時間打磨的滲透工具包——從網路掃描器到漏洞利用框架,從密碼破解工具到隱蔽通訊軟體,應有盡有。這是他最珍貴的資產,也是他的最後防線。
他將驅動器藏在了床墊和彈簧之間的縫隙中。如果Sophal的人突然進來搜查,他不會被當場抓住。但他也知道,他需要找到一個機會,將這個驅動器連接到Sophal的內部網路。
時間在一分一秒地流逝。透過牆壁的細微震動,他感覺到Sophal離開了書房,似乎是從樓梯下到了一樓。大門打開又關上的聲音傳來——森波出門了。這是一個意料之外的機會。林昊走到門邊,將耳朵貼在門板上,仔細聆聽外面的動靜。走廊裡巡邏的腳步聲停了下來——保鏢可能跟著Sophal一起離開了。他又等了幾分鐘,確認外面確實安靜下來後,他從床墊下取出了USB驅動器,走到房間的通風口前。通風口的格柵用螺絲固定著,但他身上沒有螺絲起子——不過他注意到其中的一顆螺絲有些鬆動,可能是長時間震動造成的。
他用指甲和褲袋中的一枚硬幣,花了將近十分鐘,終於將那顆螺絲擰了下來。他輕輕取下通風口的格柵,露出了黑暗的通風管道。管道內部空間狹窄,但足夠他爬進去。他將USB驅動器含在嘴裡,雙手攀住通風口的邊緣,奮力爬進了通風管道。金屬管道在他的體重下發出輕微的嘎吱聲,灰塵和蜘蛛網沾滿了他的衣服和頭髮。他在黑暗中匍匐前進,憑藉著記憶中別墅的佈局,向書房的方向移動。
林昊在通風管道中緩慢地爬行了約莫五分鐘。每一次移動都小心翼翼,生怕發出太大的聲音驚動樓下的人。灰塵和黴味充斥著他的呼吸,他不得不壓低呼吸聲,以避免被巡邏的保鏢發現。通風管道內壁的金屬表面粗糙而冰冷,在黑暗中他可以感覺到那些焊接點的突起和管道彎曲處的狹窄。他的膝蓋和手肘因為在金屬表面上爬行而感到疼痛,但他咬著牙繼續前進。
他聽到通風管道的下方傳來了說話聲。他停了下來,將耳朵貼在金屬板上,試圖聽清楚下面的對話。聲音來自書房——是Sophal和多個人之間的對話。他聽到了「香港」、「服務器」、「轉移資產」、「應急計畫」等關鍵詞。Sophal似乎在安排什麼緊急的資產轉移——可能是因為Sophal感覺到了危險,正在準備掩蓋他的犯罪痕跡。
「那個台灣人呢?」一個粗啞的聲音問道。
「關在客房裡。」Sophal的聲音冷靜而平穩,就像在討論天氣一樣,「給他一點教訓,然後把他送去園區。他在那裡可以發揮一點「價值」——他的技術能力對我們的業務很有幫助。」他的語氣中透露著一種不容置疑的威嚴,彷彿囚禁和販賣一個人是世界上再正常不過的事情。
林昊聽到這裡,感到一陣寒意從脊背升起。他沒有太多時間了。他必須在Sophal決定轉移他之前採取行動。他在通風管道中找到了書房的通風口的位置——從格柵間隙往下看,他看到了那台iMac的螢幕,以及桌上散落的一些文件和一個黑色的筆記本。Sophal不在房間裡——從聲音判斷,他在走廊上與保鏢交談。
林昊小心翼翼地將通風口格柵的螺絲擰開,動作緩慢而謹慎,確保每一次旋轉都不發出聲音。他花了大約兩分鐘才拆下了格柵。他將身體從通風口探出來,雙手抓住通風口的邊緣,懸掛在半空中。他環顧了一下書房的佈局——距離地面大約三公尺,下面是柔軟的地毯。他鬆開手,利用雙腳和背部的肌肉緩衝,無聲地落在書房的地板上。他立刻快速移動到牆邊的陰影中,屏住呼吸,聆聽走廊上的動靜。確認沒有被發現後,他迅速移動到iMac前——螢幕是鎖定的,但他從口袋中取出USB驅動器,插入電腦的USB接口。驅動器上的LED指示燈開始閃爍——他的滲透工具正在自動運行,試圖繞過系統的登入密碼。