第十章:蛇爺的陰影
台北的深夜,雨點敲打在窗戶上,像是某種密碼,節奏紊亂卻又帶著某種規律。林昊坐在黑暗的房間裡,只有螢幕的光線映照著他疲憊的臉龐。桌上散落著法律文件——檢察官辦公室的傳喚通知、律師事務所的委託書、以及一份關於他在柬埔寨行動的初步調查報告。
他已經三天沒好好睡過了。
自從從金邊回到台北,林昊以為自己能短暫喘息,但現實遠比他想像的殘酷。法務部調查局的約談接踵而至,每一場都是長達數小時的疲勞轟炸。他們對他入侵柬埔寨政府系統的行為表現出異常的興趣——但那明明是為了揭露陳金龍的犯罪網絡。
「林先生,我們理解你的動機,但法律就是法律。你入侵的是外國政府系統,這牽涉到國際外交層面的問題。」調查官的聲音還在他耳邊迴盪。
林昊揉了揉太陽穴,強迫自己集中精神。他面前的終端機上,五個虛擬機同時運行,每一個都連接到不同的跳板伺服器——新加坡、荷蘭、加拿大、日本、巴西。這是他多年來的習慣,即使只是瀏覽網頁,他也習慣用洋蔥路由層層包裹自己的數位足跡。
螢幕的右下角,一個紅色的指示燈在閃爍。那是他設計的監控系統——專門用來監聽柬埔寨地下網路的情報。
他點開了訊息。
一串加密的文字出現在眼前,解碼後只有短短幾句話:
「金色未來遭蛇爺全面攻擊。阿蓮亟需你的協助。情況危急。——阿強」
林昊的心臟猛地收緊。
阿強。那個在金邊的年輕駭客,曾經是陳金龍的技術顧問,後來在林昊的影響下轉向正途。他現在是金色未來基金會的技術總監,負責維護NGO的數位安全系統。
林昊幾乎是本能地拿起手機,但又遲疑了。台北時間凌晨三點,金邊時間凌晨兩點。但他知道阿蓮一定還醒著——在這種危機時刻,沒有人能夠入睡。
他撥出了號碼。
鈴聲只響了半聲就被接起。
「林昊?」阿蓮的聲音沙啞而疲憊,但帶著明顯的驚喜和釋然。
「阿蓮,發生了什麼事?」林昊盡量讓自己的聲音聽起來平靜,但手指已經在鍵盤上飛舞,開啟了VPN鏈路和端到端加密的通訊通道。
電話那頭傳來一陣嘈雜的聲音,像是有人在奔跑,接著是金屬撞擊的鈍響。阿蓮深吸了一口氣,壓低了聲音:「他來了,林昊。蛇爺。我們以為陳金龍倒臺後,金邊會有一段平靜的日子,但蛇爺比陳金龍更可怕。」
「慢慢說,我聽著。」
阿蓮開始敘述過去三週發生的事情。她的聲音時而顫抖,時而堅定,像是走在懸崖邊緣的人努力保持平衡。
蛇爺——這個名字在柬埔寨的地下世界如同幽靈般存在。沒有人見過他的真面目,甚至沒有人確切知道他是柬埔寨人、中國人還是來自其他地方。只知道他控制著整個湄公河區域的網路賭博和電信詐騙產業,規模之大,遠超陳金龍的勢力範圍。
陳金龍在位時,蛇爺一直蟄伏在陰影中,等待時機。陳金龍被捕後,他就像是從深淵中爬出的蛇群,迅速吞食了金邊地下世界的權力真空。
「他派人來過基金會,」阿蓮說,聲音中帶著壓抑的憤怒,「表面上是來『談合作』,要我們把部分貸款業務轉移到他們的網絡平台上。我當然拒絕了。但從那天起,我們的系統就開始被攻擊。」
最初的攻擊只是小規模的騷擾——PHP注入、SQL爆破、DDoS流量攻擊,像是有人在試探他們的防禦強度。阿強拼盡全力防守,但對方的人力和資源顯然遠超他們。
然後,三天前,真正的攻擊開始了。
蛇爺的人馬利用一個零日漏洞——一個阿強從未見過的WordPress外掛漏洞——直接滲透了金色未來的官網伺服器。他們修改了捐款頁面的收款帳戶,將最近一週來自國際捐款者的資金全部轉移到一個無法追蹤的加密錢包。
同時,他們加密了基金會的客戶資料庫,留下一封勒索信:支付五十個比特幣,否則將所有借款人的個人資料公佈在暗網上。
「五十個比特幣……」林昊默默地計算了一下,大概相當於三百多萬台幣。對金色未來這種規模的NGO來說,這是一筆天文數字。
「我們報警了,」阿蓮苦澀地說,「但你知道金邊的警察——他們連基本的數位鑑識能力都沒有。案件編號倒是給了一個,然後就沒有下文了。」
林昊的拳頭握緊了。他回想起金邊那些昏暗的網咖,那些在詐騙園區中被囚禁的人們,那些在泰柬邊境被販賣的靈魂。他以為扳倒陳金龍後,至少能給那座城市帶來一絲光明。但黑暗從未真正消退——它只是換了一個形式,換了一個名字。
「阿強呢?他現在在哪裡?」
「他在機房裡,已經連續工作四十個小時了。我擔心他的身體撐不住,但他不肯離開。」阿蓮的聲音帶著心疼,「他一直在說,如果是你的話,一定知道怎麼反擊。」
林昊沉默了幾秒鐘。
他看了一眼桌上的法律文件。檢察官已經明確警告他:在調查期間,不得從事任何可能被解讀為「外國干預」的行為,包括但不限於入侵外國電腦系統、未經授權存取境外網路資源、以及參與任何可能引發國際糾紛的網路行動。違反這些條件,他將面臨《刑法》第三十六章以及《資通安全管理法》的起訴,最高可判處七年有期徒刑。
但阿蓮的聲音——那種絕望中帶著希望的語氣——像是一根針,刺穿了他所有理性的防備。
「我需要一個安全的環境,」林昊最終說,聲音平靜得連他自己都感到意外,「幫我準備一台獨立的筆記型電腦,不能聯網,純粹用來分析和規劃。然後,我需要阿強給我一份詳細的攻擊日誌——從最初期的掃描探測到最近的勒索信,所有的時間戳、IP來源、payload內容。」
阿蓮的呼吸急促起來:「你要來金邊嗎?」
「不,」林昊說,「我不能出境。檢察官那邊……總之,我現在被困在台北。但我可以用遠端的方式協助你們。」
他說這話的時候,內心知道這是一個危險的承諾。遠端協助意味著他必須連接到金色未來的內部網路,而對方的攻擊者很可能已經在網絡中埋下了監聽點。只要他連線,他的數位指紋就會暴露。如果蛇爺的人追蹤到他的位置,後果不堪設想——不只是他個人的法律風險,更可能將阿蓮和阿強置於更危險的境地。
但現在不是考慮風險的時候。
「給我十二個小時,」林昊說,語速變快,手指已經開始在鍵盤上建構新的專案目錄,「在這段時間內,你和阿強做三件事。第一,拔掉官網伺服器的網路線——完全離線。第二,把所有捐款者資料備份到離線冷錢包,三次備份,分別放在不同的物理位置。第三,不要跟勒索者有任何交流,不要回覆他們的郵件,不要打開任何附件。」
「我知道了。」阿蓮的聲音聽起來稍微鎮定了一些。
「阿蓮。」林昊猶豫了一下,還是說了出來,「你要有心理準備。蛇爺這次的目標不只是錢。如果他真的想拿比特幣,他不會選一個NGO下手——收益太低,風險太高。他攻擊金色未來,是因為你們代表了某種他無法控制的東西。這是一場象徵性的戰爭。」
電話那頭沉默了很長時間。
「我知道,」阿蓮最終說,聲音很輕,但很堅定,「但金色未來不會倒下。我們的貸款幫助了三千多個家庭脫離高利貸的循環,我們的教育計劃讓兩百多個孩子有機會上學。我不會讓這一切被一個躲在網路背後的膽小鬼毀掉。」
林昊的嘴角浮現一絲幾不可見的微笑。這就是他認識的阿蓮——那個在戰火中創立NGO的女人,那個在槍口下仍然堅持發放貸款的理想主義者。
「那就這樣。保持通訊管道暢通,我會用Signal跟你和阿強聯繫。」
掛斷電話後,林昊起身走到窗邊。雨仍在持續,台北的夜晚被霓虹燈染成一片模糊的色彩。他看著玻璃上自己的倒影——眼圈發黑,鬍渣叢生,和不久前在金邊那個意氣風發的網路安全專家判若兩人。
他轉身回到電腦前,打開了一個名為「Project Draco」的加密容器。
這是他從金邊回來後一直在秘密進行的一個項目——一個針對柬埔寨網路詐騙產業的情報資料庫。他利用在調查陳金龍過程中獲取的線索,結合公開來源情報和深網論壇的資訊,逐漸拼湊出一個龐大的犯罪網路地圖。
蛇爺,或者說「實習生」——這是情報界對這個神秘人物的代號——在這個地圖上佔據著中心位置。根據林昊收集的資料,蛇爺的組織結構比陳金龍更加扁平化,也更加技術驅動。他們不使用傳統的暴力手段,而是依靠精密的社交工程、釣魚攻擊和系統入侵來達到目的。
有情報顯示,蛇爺的技術團隊可能來自東歐——某些攻擊模式中使用的程式碼片段帶有俄羅斯網路犯罪集團的特徵。但也有跡象表明,核心策劃者對柬埔寨本地環境極為熟悉,懂得如何利用當地法律漏洞和執法腐敗。
林昊打開了阿強傳來的攻擊日誌。
他快速掃視著大量的技術資料——403錯誤、SQL注入嘗試、XMLRPC濫用、大量的404掃描。攻擊者的手法相當老練,他們使用分散式的掃描節點,避免觸發自動化防禦系統的閾值。
「聰明,」林昊低聲自語,「但還不夠聰明。」
他注意到攻擊日誌中有一個不尋常的模式:所有的攻擊流量都避開了某個特定的IP範圍。不是金色未來的伺服器IP,而是柬埔寨境內一個大型電信公司的IP池。
這意味著兩種可能:要麼攻擊者與這家電信公司有某種協議,要麼——更有可能——攻擊者本身就位於該電信公司的網絡內。
林昊開始深挖這個方向。他打開了Shodan(網路設備搜尋引擎),對該電信公司的IP區段進行地毯式掃描。結果很快顯示出一些異常:在一個看似普通的商業地址註冊的IP下,存在大量非標準端口開放的伺服器——3389(遠端桌面)、1433(MSSQL)、3306(MySQL)——這些通常不會在合法的商業環境中對外開放。
「詐騙園區,」林昊喃喃道。
這符合他對柬埔寨電信詐騙產業的了解。蛇爺的營運基地很可能偽裝成合法的商業園區或賭場,內部設有數百台電腦和電話設備,由被囚禁的「員工」操作。這些園區通常有專屬的網路基礎設施,由當地電信公司提供專線服務,形成一個封閉的生態系統。
但要找到具體位置,還需要更多資訊。
林昊決定採取一個大膽的行動。他打開了終端機,建立了一個新的SSH會話,連接到一台位於德國的跳板伺服器——這是他多年前在歐洲工作時建立的節點,從未被任何調查機構發現過。
他需要進入蛇爺的網路。不是正面攻擊——那太愚蠢了——而是從邊緣滲透,像一滴水穿過裂縫,在不被發現的情況下收集情報。
他的策略是:利用攻擊日誌中那個被避開的IP範圍作為切入點。既然攻擊者刻意避開這個範圍,說明這個範圍內可能存在對他們重要的資產——也許是備份伺服器,也許是指揮控制中心,也許是個人設備。
他花了三個小時進行偵查。
首先,他掃描了那個IP範圍內所有開放的端口,記錄下每一台設備的指紋資訊——操作系統、服務版本、SSL憑證指紋。然後,他交叉比對了這些資訊與已知的漏洞資料庫。
目標出現了。
一台運行著過期版本的Apache Tomcat的伺服器——CVE-2023-42793,這個漏洞允許攻擊者在未經身份驗證的情況下執行遠端程式碼。漏洞細節已經在幾個月前公開,但顯然這台伺服器沒有被修補。
「太大意了,蛇爺,」林昊低聲說,「或者你根本不關心你的外圍設備。」
他編寫了一個精簡的利用腳本,沒有使用現成的漏洞利用框架——那些工具往往會留下明顯的痕跡。他寧可從零開始撰寫,確保每一個系統呼叫都經過模糊處理,日誌記錄被最小化。
在執行之前,他再次檢查了自己的防護措施:
第一層:家用路由器——NAT轉換,隱藏內網設備。
第二層:VPN——出口在荷蘭阿姆斯特丹,與他的真實身分沒有任何關聯。
第三層:Tor——透過洋蔥路由,讓追蹤更加困難。
第四層:虛擬機快照——如果遭到入侵,他可以瞬間恢復到乾淨狀態。
還是不夠。
他再加了一層:一個基於樹莓派建立的硬體跳板,放置在市區某個咖啡館的免費Wi-Fi範圍內——他事先在那裡部署的設備,透過4G網路連接,完全獨立於他的家庭網絡。
五層跳板。這應該夠了。
他按下了Enter鍵。
利用腳本以極快的速度執行。幾秒鐘後,遠端伺服器的shell出現在他的終端機上。
「進去了,」他低聲說。
一旦進入內部網絡,他就像一個隱形人,在伺服器之間無聲地移動。他沒有觸碰任何明顯的目標——沒有試圖讀取資料庫,沒有複製檔案——那些行為太容易被發現。相反,他做了三件事:
第一,安裝了一個隱蔽的監聽器——一個最小的核心級模組,能夠捕獲所有進出該伺服器的網路流量,並將元數據定時壓縮加密後,透過DNS隧道傳送到他控制的外部伺服器。DNS請求看起來完全正常,混在數以萬計的合法查詢中。
第二,他複製了系統的認證日誌,但只複製了時間戳和登入來源IP,沒有觸碰任何使用者資料。這樣他就能夠分析蛇爺團隊的工作模式——他們什麼時候活躍,從哪裡連線,使用什麼工具。
第三,他在伺服器上留下了一個數位記號——一個極其微小、幾乎無法察覺的修改,改變了系統時鐘的微秒級誤差。這是一個老派的技巧,但對追蹤資訊流非常有效。
然後,他乾淨地退出了。
整個操作耗時四十七分鐘。
林昊靠在椅背上,大口喘氣。他的心跳快得像剛跑完一千公尺——每一次滲透行動都是如此,即使經驗再豐富,也無法完全擺脫那種腎上腺素飆升的感覺。
他需要等待。監聽器需要時間來收集足夠的資料才能產生意義。
在等待的同時,他開始分析蛇爺勒索信中使用的比特幣地址。他打開了區塊鏈瀏覽器,追蹤這個地址的交易歷史。
地址是全新的——在第一筆交易之前沒有任何活動記錄。第一筆交易是一個測試交易,金額極小,來自一個已知的柬埔寨加密貨幣交易所的熱錢包。這說明蛇爺或他的人在該交易所有帳戶。
林昊記下了這個交易所的名稱:金邊數位資產交易有限公司。一家在柬埔寨註冊的加密貨幣平台,監管狀況成謎。
隨後,勒索地址收到了幾筆小額的「測試」轉帳——很可能來自蛇爺自己的帳戶,用來確認地址可用。然後是大量的零碎交易——來自世界各地的捐款者,那些不知道自己的善款已經流入詐騙集團手中的人們。
其中一筆交易引起了林昊的注意。
一筆來自台灣的轉帳,金額三千元新台幣,留言寫著:「支持金色未來!」時間戳是勒索信發布後的第六個小時。
這些人是無辜的。他們相信自己的捐款能夠幫助柬埔寨的貧困家庭,卻不知道他們的愛心正在被蛇爺吞噬。
林昊的憤怒在胸口燃燒。但憤怒不能解決問題——他需要保持冷靜,像一台精密的機器,精準地執行每一個步驟。
他的Signal訊息提示燈亮了起來。是阿強。
「林哥,我們按照你的指示斷網了。但就在斷網前半小時,我們發現了另一個東西——一個後門。有人在前端程式碼中嵌入了一個WebShell,隱藏在一個合法的JavaScript庫中。如果不是我手動掃描了每個檔案的雜湊值,根本不會發現它。」
林昊的心一沉。WebShell——攻擊者最陰險的工具之一。它偽裝成正常檔案,藏在伺服器的角角落落,讓攻擊者可以隨時進出,即使主要漏洞被修補也無所謂。
「有執行記錄嗎?」他打字詢問。
「有。WebShell記錄了所有執行的指令。我看了日誌——他們用這個後門查看了我們的捐款者名單,還有……我的個人資料。」
林昊的腦海中警鈴大作。
「阿強,聽我說,你這段時間不要去任何你不熟悉的地方,不要打開任何來路不明的郵件或訊息。他們有你的個人資料——你的地址、身分證號碼、可能還有你的家庭資訊。你的安全現在是最高優先級。」
「我知道,林哥。我會小心的。」
林昊關閉了Signal,思緒快速運轉。蛇爺比他想像的更加有組織,更加有耐心。WebShell的嵌入手法非常高明,隱藏在正常的程式碼中,如果不是手動檢查每一個位元組,常規的掃描工具根本不可能發現。
這意味著蛇爺的技術團隊至少有一個人對WordPress的內部結構非常熟悉——可能是核心開發者等級的了解。
他開始重新審視自己的假設。蛇爺真的是主要來自東歐嗎?或者,技術團隊中有一個人——也許是核心人物——是華人或東南亞人?WordPress的內部知識加上對柬埔宅當地環境的熟悉,這種組合暗示著團隊中可能有本地技術人才。
他的監聽器已經運行了幾個小時,第一批壓縮的數據通過DNS隧道傳回來了。
林昊啟動了解析程式,將二進制數據轉換為可讀的格式。
結果令人吃驚。
在過去的三小時內,被入侵的伺服器收到了來自三十七個不同IP的連接請求。大部分來自柬埔寨境內的ISP,但也有來自香港、新加坡、甚至俄羅斯的節點。
但有一個IP特別引他注目:一個來自柬埔寨西哈努克市的地址,在三個小時內連接了五次,每次連接時間都很短——不到兩分鐘。這種模式不像自動化腳本,更像是人類操作員在定期檢查伺服器狀態。
西哈努克市。
林昊打開了地圖。西哈努克是柬埔寨的沿海城市,近年來因賭博業和房地產投資而快速發展,同時也是網路詐騙園區的集中地。多家媒體報導過,該城市有數十棟大樓被用於運營非法的線上賭博和詐騙活動。
他將這個IP地址標記在地圖上,然後開始查詢該地址的WHOIS資訊和歷史記錄。
這個IP屬於一家名為「太子集團」的企業——表面上是房地產開發商,但林昊的資料庫中有關於這家公司的情報:它與多起跨境詐騙案件有關聯,柬埔寨當地媒體曾報導過該公司名下的一棟大樓被警方破獲為詐騙園區。
不過,那棟大樓在報導後就被「關閉」了——至少表面上是如此。
林昊懷疑蛇爺的指揮中心就在那裡。或者至少,那裡是他們的一個重要節點。
他決定深入調查。
但他也知道,自己現在處於一個極其危險的境地。他不僅在違反檢察官的禁令,而且正在主動入侵一個高度組織化的犯罪集團的網路。如果被發現——不只是被蛇爺發現,而是被任何一方發現——他的處境都會變得極為糟糕。
然而,他沒有退路。
他想起阿蓮在電話中的聲音,想起金色未來幫助過的那些家庭,想起那些被詐騙園區囚禁的人們。他也想起自己為什麼走上這條路——不是為了成為英雄,而是因為在一個沒有正義的地方,總要有人站出來。
他打開了一個新的終端機視窗,開始編寫第二階段的攻擊工具。
這次,他要更深入。
他建構了一個偽裝成正常HTTP流量的偵測工具——利用WebSocket協定保持長連接,模擬正常使用者的瀏覽行為,但實際上在後台執行數據收集任務。他將這個工具封裝在一個名為「phnompenh_utils.js」的檔案中,看起來就像是某個常見的JavaScript工具庫。
然後,他需要找到一個方式將這個工具部署到蛇爺的內部網路中。
直接上傳太危險。他需要一個中間人——一個可以無害地將檔案帶入內部網路的載體。
他的目光落在了一個熟悉的工具上:Google Tag Manager。很多網站使用GTM來管理第三方腳本,詐騙園區的網站也不例外——他們也需要追蹤訪客數據,優化他們的詐騙話術。
如果他能找到蛇爺陣營中使用了GTM的網站,並且注入一個看似正常的分析腳本……
但這需要更多的時間和資源。
林昊看了看時鐘——凌晨六點,天色將亮。他已經連續工作了將近十二個小時,身體在抗議,但精神卻異常亢奮。
他給自己泡了一杯濃咖啡,然後回到電腦前。
就在這時,他的手機震動了。
不是Signal,不是阿蓮——而是另外一個號碼,一個他極其熟悉但不希望在這個時間點看到的電話。
來電顯示:台北地檢署。
林昊的心臟漏跳了一拍。
他猶豫了三秒鐘,然後接起了電話。
「林先生,早安,希望你沒有打擾你休息,」話筒那端傳來一個低沉而專業的聲音——是他見過多次的檢察官,黃正義。「我這裡有一個緊急情況需要跟你討論。今天凌晨,我們的系統偵測到有人從你的IP範圍進行了一連串異常的網路活動。你能解釋一下嗎?」
林昊的血液瞬間凝固。
他看向自己的路由器——指示燈正常,沒有任何入侵警報。但他忘記了一件事:檢察官辦公室的監控系統不僅監控他的行為,還監控他所有的已知網路連線。他以為自己用了VPN和Tor就安全了,但檢察官很可能在他的家用路由器上安裝了監控軟體。
「黃檢察官,我不太明白你在說什麼,」林昊盡量讓自己的聲音聽起來平靜,「我一整晚都在家裡,沒有做任何……」
「林先生,」黃檢察官打斷了他,聲音變得嚴厲,「我必須提醒你,你現在處於緩起訴期間。任何違反規定的行為,都會導致我們直接聲請羈押。我建議你誠實回答。」
林昊沉默了。他的大腦在飛速運轉,計算著每一種可能的應對策略。否認?辯解?還是……
就在他準備開口的時候,他的電腦螢幕上彈出了一個視窗。
不是普通的視窗——而是一個黑底白字的終端機,自動打開的。
上面顯示著一行字:
「我知道你在做什麼,林昊。停手,否則阿蓮會死。——蛇爺」
林昊的呼吸停止了。
蛇爺不只在他的目標網絡中——他也在林昊的網絡中。
——第10章完——