第4章
白帽子
逆向追蹤,鎖定跳板服務器在東南亞------------------------------------------,首都機場高速上的車流已變得稀疏。霍林坐在***那輛不起眼的黑色轎車后座,窗外的路燈飛速向后掠去,在他臉上投下明明暗暗的光影。車內很安靜,只有引擎低沉的轟鳴和李處長偶爾翻動文件的聲音。霍林的目光落在窗外,那些熟悉的城市輪廓在夜色中顯得陌生而遙遠——他已經離開這片土地太久了。“霍林,感覺怎么樣?”李處長從副駕駛座轉過頭,聲音溫和卻帶著一絲不易察覺的緊迫。“有點不真實。”霍林實話實說,手指無意識地摩挲著背包的肩帶,“昨天還在硅谷的會議室里討論算法優化,今天就坐在***的車上討論**支付系統的后門。”,那笑容里藏著太多霍林還看不懂的東西。“這就是你選擇的路。對了,這是‘天網’基地的初步資料,你可以在路上看看。”。翻開第一頁,映入眼簾的不是文字,而是一張復雜的網絡拓撲圖——**關鍵信息基礎設施的防御體系示意圖。金融、能源、交通、通信……每一個節點都標注著安全等級和潛在威脅。他的心跳微微加速,不是因為緊張,而是因為一種久違的興奮。這種級別的防御架構,他***只在理論推演中見過。“支付系統的后門,你們是怎么發現的?”霍林問。“三天前,清算中心監控到異常數據包。”李處長調出一份加密報告,遞給霍林,“起初以為是常規的DDoS攻擊,流量清洗系統也確實攔截了大部分。但安全審計組在復盤時發現,有極少量數據包繞過了所有檢測規則,直接進入了核心數據庫。”。他的專業本能立刻被觸發了——這不是普通的黑客攻擊。DDoS通常是掩護,真正的殺招藏在那些“正常”的數據流里。報告顯示,這些異常數據包偽裝成了標準的支付交易請求,格式、協議、加密方式全都合規,只在時間戳的微秒級字段里藏了惡意代碼。“APT攻擊。”霍林低聲說,“高級持續性威脅。攻擊者至少潛伏了兩個月,摸清了系統的每一個細節。”:“我們也是這個判斷。但問題在于,這些數據包的來源極其分散,全球超過兩百個IP地址同時發起攻擊,而且都是真實的商業服務器——被控制的‘肉雞’。”,道路兩旁的高樓逐漸被低矮的建筑取代。霍林繼續翻看資料,大腦飛速運轉。兩百個跳板服務器,分布在不同**,這意味著攻擊者擁有龐大的僵尸網絡資源。更棘手的是,這些服務器本身沒有漏洞,攻擊者是通過社會工程學或供應鏈滲透控制了它們。“我需要原始日志。”霍林說,“所有異常數據包的完整捕獲記錄,包括被清洗掉的。已經在基地準備好了。”李處長看了看手表,“二十分鐘后你就能看到。”,穿過兩道需要身份驗證的閘門,最后停在一棟沒有任何標識的灰色建筑前。建筑只有三層,外觀樸素得像某個國企的舊辦公樓。但霍林注意到,周圍的監控攝像頭密度是正常區域的五倍以上,所有窗戶都裝著特制的防窺玻璃,地下還有微弱的電磁屏蔽信號。“天網”基地。
走進大廳,霍林的第一感覺是“冷”。不是溫度低,而是一種技術設備特有的、不帶人情味的冷感。白色的墻壁,灰色的地板,走廊兩側是一扇扇厚重的防爆門,每扇門上都只有一個編號。幾個穿著便裝的技術人員匆匆走過,沒人抬頭看他,所有人的腳步都很快,眼神專注。
李處長帶他來到三樓最里面的一間會議室。推開門,里面已經坐了五個人。
“介紹一下。”李處長說,“霍林,代號‘鑄劍’,從今天起正式加入‘天網’特別行動組。這幾位是你的隊友:趙峰,網絡追蹤專家;陳薇,惡意代碼分析;周濤,硬件安全;林小雨,情報整合。”
霍林一一握手。趙峰是個三十出頭的男人,戴著黑框眼鏡,手指關節粗大,一看就是常年敲鍵盤;陳薇很年輕,扎著馬尾,眼神銳利;周濤身材魁梧,不像技術員倒像運動員;林小雨則安靜地坐在角落,面前擺著三臺顯示器。
“客套話就不多說了。”趙峰直接切入正題,“霍林,李處長應該跟你說了基本情況。我們現在最大的問題是找不到攻擊源頭。兩百個跳板服務器,我們逆向追蹤了其中五十個,全都指向更多層的跳板。”
陳薇調出一張世界地圖,上面密密麻麻標注著紅點。“這是已知的跳板服務器分布。北美、歐洲、東南亞、**……幾乎覆蓋全球。攻擊者用了洋蔥路由加多層**,每層都用了不同的加密協議。”
霍林走到屏幕前,仔細看著那些紅點。他的目光在東南亞區域停留了很久——那里有十七個跳板服務器,分布在越南、泰國、馬來西亞和菲律賓。
“這些東南亞的服務器,有什么共同特征?”他問。
林小雨敲了幾下鍵盤,調出一份詳細報告。“都是中小型企業的商務服務器,配置中等,租用時間都在三個月到半年之間。有趣的是,其中十三臺服務器在同一周內被同一家虛擬主機服務商租出,付款方式都是加密貨幣。”
“同一周,同一服務商。”霍林重復著這句話,大腦開始構建模型,“這意味著攻擊者不是隨機選擇跳板,而是有計劃地批量部署。他們先控制了這家服務商的某個員工或系統,然后集中租用了一批服務器作為第一層跳板。”
周濤插話:“我們查過那家服務商,總部在新加坡,安全記錄良好。但他們的**系統兩個月前有過一次小規模的數據泄露,大約五百個客戶信息外泄。當時認為是普通黑客所為,沒有深究。”
“五百個客戶信息……”霍林閉上眼睛,讓信息在腦中重組,“攻擊者拿到名單后,篩選出其中位于東南亞、配置合適的服務器,然后通過社會工程學或漏洞利用,逐一控制這些服務器。因為它們是真實企業的合法服務器,所以流量看起來完全正常。”
會議室里安靜了幾秒。趙峰推了推眼鏡:“這個推理成立。但就算知道這些,我們還是找不到真正的源頭。攻擊者可以從這些東南亞服務器再跳轉到其他大洲的服務器,循環幾次后,痕跡就徹底消失了。”
霍林走到白板前,拿起筆。“我們換個思路。攻擊者為什么要用東南亞的服務器作為第一層跳板?”
“延遲低?”陳薇猜測,“東南亞到中國的網絡延遲相對較低,適合實時攻擊。”
“成本低。”周濤說,“東南亞的服務器租用成本只有歐美的一半。”
“還有時區。”林小雨輕聲補充,“東南亞和中國沒有時差,攻擊者可以實時監控攻擊效果。”
霍林在白板上寫下三個詞:延遲、成本、時區。然后他在下面又寫了一行字:“操作習慣。”
所有人都看向他。
“每個黑客組織都有自己偏好的工具鏈和操作習慣。”霍林解釋,“就像寫代碼,有人喜歡用Python有人喜歡用C++。這種習慣會體現在很多細節上——比如選擇跳板服務器時,是偏好Linux還是Windows系統;是喜歡用商業主機還是自己搭建;是習慣在白天攻擊還是夜間攻擊。”
他調出那十三臺東南亞服務器的詳細配置表。“看這里,十三臺服務器里,十一臺是CentOS系統,兩臺是U*untu。都是Linux,但版本不同。攻擊者為什么要混用?”
陳薇立刻反應過來:“因為控制這些服務器的不是同一個人,或者同一個工具!”
“對。”霍林放大日志記錄,“再看登錄記錄。這十一臺CentOS服務器,被控制的方式都是通過SSH密鑰漏洞,攻擊時間集中在凌晨兩點到四點。而那兩臺U*untu服務器,是通過We*應用漏洞被控制,攻擊時間在下午。”
趙峰站了起來:“你是說,攻擊者至少有兩個團隊,或者兩套自動化工具在同時工作?”
“更可能是一套工具的兩個模塊。”霍林說,“一個模塊專門針對CentOS的某個特定版本,另一個模塊針對U*untu。攻擊者編寫工具時,為了覆蓋更多目標,不得不兼容不同系統。但這種兼容性會留下痕跡——不同模塊的代碼風格、錯誤處理方式、日志清理方法都會有細微差異。”
他轉向林小雨:“能幫我調出這兩類服務器的完整攻擊日志嗎?從被控制前一周開始,到被控制后所有活動記錄。”
“需要一點時間。”林小雨開始快速操作鍵盤,“服務器日志很大,而且攻擊者清理過。”
“他們清理不干凈。”霍林說,“只要發生過數據交換,就一定會在內存、緩存或臨時文件里留下碎片。我們需要的是那些被忽略的碎片。”
等待數據加載的間隙,霍林走到窗邊。窗外是基地的內部庭院,幾棵梧桐樹在夜風中輕輕搖曳。他的思緒飄回加州,想起最后一次和導師***的對話。那是在斯坦福的咖啡館里,陳教授端著咖啡,語重心長地說:“霍林,技術沒有國界,但技術人有祖國。你現在掌握的東西,既可以用來建造,也可以用來摧毀。記住,選擇權在你手里。”
當時霍林不太理解這句話的深意。現在他站在***的基地里,面對一場針對**金融系統的攻擊,突然明白了——技術確實沒有國界,但攻擊有。那些數據包不會自己跨越太平洋,背后一定有一雙手,一個意志,一個目的。
“數據好了。”林小雨的聲音把他拉回現實。
霍林回到屏幕前。兩臺顯示器并排顯示著兩類服務器的日志分析結果。左邊是CentOS組,右邊是U*untu組。他用自己編寫的腳本快速過濾關鍵信息:非常規進程、異常網絡連接、修改過的系統文件……
“看這里。”他指著CentOS組的一條記錄,“被控制后的第三天,服務器向這個IP發送了加密數據包:103.27.186.44。發送時間凌晨三點十二分,持續時間四十七秒。”
趙峰立刻查詢這個IP。“馬來西亞吉隆坡,另一臺商業服務器,已經在我們監控列表里。”
“再看U*untu組。”霍林滾動到另一條記錄,“被控制后的**天,向這個IP發送數據:45.76.128.91。發送時間下午兩點半,持續時間一分二十秒。”
“菲律賓馬尼拉。”陳薇說,“也是已知跳板。”
看起來沒什么特別。但霍林注意到一個細節:兩個IP的端**都是50022。
“SSH默認端口是22,他們用了50022。”霍林說,“這不是隨機選擇的端口。50022是某個開源遠程管理工具的默認端口,那個工具的特點是支持多跳板自動切換。”
周濤皺眉:“所以攻擊者用同一套工具管理所有跳板?那為什么還要分CentOS和U*untu兩個模塊?”
“因為那套工具本身有漏洞。”霍林的眼睛亮了起來,“或者說,有特征。為了兼容不同系統,開發者寫了一些特定的適配代碼。這些代**在日志里留下獨特的字符串——如果我們能找到這個字符串,就能反向追蹤所有使用這套工具的服務器。”
他讓林小雨搜索日志里所有包含“li*ssh2”、“paramiko”、“asyn**sh”等SSH庫名的記錄。這些都是常見的Python SSH庫,攻擊者的工具很可能基于其中之一。
搜索結果出來了:CentOS組的日志里有大量“paramiko”相關的錯誤信息,U*untu組則是“asyn**sh”。
“兩個不同的庫。”霍林快速思考,“這意味著攻擊者的工具至少有兩個版本,或者兩個分支。但為什么要維護兩個版本?增加工作量,還容易出錯。”
除非……除非這兩個版本不是同一個人寫的。
“趙峰,能查一下這兩個SSH庫在****的流行度嗎?”霍林問。
趙峰打開幾個內部數據庫。“paramiko是老牌庫,穩定但性能一般,很多自動化腳本喜歡用。asyn**sh是新興庫,異步性能好,適合高并發場景,但學習曲線陡峭。”
“所以一個團隊用老技術,一個團隊用新技術。”陳薇總結,“攻擊者組織內部有代差?”
霍林沒有立刻回答。他讓林小雨把兩類服務器日志的時間軸并列顯示。很快,一個模式浮現出來:CentOS組的攻擊活動集中在每周一、三、五的凌晨;U*untu組則在每周二、四、六的下午。周日兩邊都安靜。
“輪班制。”周濤說,“兩個團隊輪流作業,周日休息。這是正規組織的作息。”
“而且兩個團隊可能在不同的時區。”霍林補充,“CentOS團隊在**時區,所以凌晨工作;U*untu團隊在歐美時區,所以下午工作。但他們共用同一批跳板服務器,所以需要統一的控制工具——于是工具有了兩個版本,分別適應兩個團隊的習慣。”
推理到這里,整個攻擊組織的輪廓已經隱約可見:一個國際黑客組織,至少有兩個技術團隊分布在東西半球,使用自研的自動化工具控制全球跳板服務器,針對中國支付系統發起APT攻擊。
但最重要的線索還沒找到:真正的指揮控制服務器在哪里?
霍林的目光回到那個端**:50022。他想起自己***參與過一個開源項目,項目里用過一款叫“ShadowHop”的多跳板管理工具,默認端口就是50022。那工具是某個***黑客寫的,后來因為漏洞太多被社區棄用了。
“查一下‘ShadowHop’這個***。”他說。
林小雨搜索內部威脅情報庫。果然,三年前有一份報告提到,“棱鏡”組織早期曾使用過ShadowHop的修改版作為內部工具,但后來轉向了更專業的商業軟件。
“棱鏡……”霍林念出這個名字。他***聽說過這個組織,傳聞是多個**前情報人員組成的黑客團體,專門從事**級網絡攻擊。如果真是他們,那這次事件的性質就完全不同了。
“有ShadowHop的源代碼嗎?”霍林問。
趙峰從檔案庫調出一份加密文件。“這是當年**的樣本,但版本很舊了。”
霍林快速瀏覽代碼。ShadowHop的設計很粗糙,但有一個特點:它會把所有操作日志加密后發送到一個固定郵箱。代碼里硬編碼了一個***il郵箱地址,雖然攻擊者肯定會修改,但日志發送的邏輯不會變——一定是通過**TP協議,走TLS加密。
“所有跳板服務器,檢查它們的出站**TP連接記錄。”霍林說,“特別是連接到***il、Outlook等公共郵件服務的。”
這個搜索范圍小多了。十分鐘后,林小雨找到了:十三臺東南亞服務器里,有七臺在特定時間向同一個***il郵箱發送過加密數據包。發送時間都在攻擊開始前五分鐘,像是某種“準備就緒”的信號。
“郵箱是假的。”趙峰查了注冊信息,“一次性賬號,已經銷毀了。”
“但**TP服務器不會說謊。”霍林調出網絡層日志,“郵件數據包從跳板服務器發出后,經過哪些中轉節點?”
數據追蹤顯示,所有郵件都先到達新加坡的一個**TP中轉服務器,然后跳轉到荷蘭阿姆斯特丹的另一個服務器,最后才抵達***il。這是標準的反追蹤手法。
但霍林注意到一個異常:從新加坡到阿姆斯特丹的這段連接,用的不是常規的TLS 1.2,而是TLS 1.3。而TLS 1.3在當時的商用**TP服務器上還不普及。
“這個阿姆斯特丹的服務器,不是公共郵件服務商。”霍林說,“是**的,專門搭建的郵件中轉服務器。攻擊者為了隱藏行蹤,自己建了一套郵件系統。”
“能定位嗎?”李處長不知何時已經站在門口。
霍林看了看完整的路由追蹤結果。“物理位置在阿姆斯特丹的某個數據中心,但實際控制者……需要進一步分析。不過至少我們現在知道,攻擊者的指揮控制服務器很可能在歐洲,通過自建郵件系統向全球跳板發送指令。”
趙峰長出一口氣:“這是三個月來最大的突破。”
霍林卻沒有放松。“這只是第一層。攻擊者肯定還有更多保護措施。我們需要設一個陷阱,讓他們自己暴露。”
“什么陷阱?”陳薇問。
“蜜罐。”霍林說,“部署一個***的支付系統接口,故意留幾個看起來像漏洞的入口,引誘攻擊者來探測。只要他們上鉤,我們就能捕獲他們的工具樣本,分析出更多特征。”
李處長點頭:“方案報上來,我協調資源。”
會議結束時,已經是凌晨四點。霍林站在基地的天臺上,看著東方漸漸泛起的魚肚白。城市還在沉睡,但網絡世界永不眠。那些數據包還在流動,攻擊還在繼續,而他已經踏入了這場無聲的戰爭。
風吹過,帶來初秋的涼意。霍林想起自己回國的飛機上,旁邊坐著一個帶著孩子的母親。孩子問媽媽:“我們為什么要回國呀?”母親說:“因為這里是家啊。”
家。霍林握緊了欄桿。他現在明白了,守護這個“家”不只是情感選擇,更是技術人的責任。那些試圖破壞支付系統的人,想要動搖的不只是數據,更是千家萬戶的生活。
他轉身走回大樓。走廊的燈光蒼白而堅定,就像他此刻的心情。第一戰才剛剛開始,但他已經找到了方向。
走進大廳,霍林的第一感覺是“冷”。不是溫度低,而是一種技術設備特有的、不帶人情味的冷感。白色的墻壁,灰色的地板,走廊兩側是一扇扇厚重的防爆門,每扇門上都只有一個編號。幾個穿著便裝的技術人員匆匆走過,沒人抬頭看他,所有人的腳步都很快,眼神專注。
李處長帶他來到三樓最里面的一間會議室。推開門,里面已經坐了五個人。
“介紹一下。”李處長說,“霍林,代號‘鑄劍’,從今天起正式加入‘天網’特別行動組。這幾位是你的隊友:趙峰,網絡追蹤專家;陳薇,惡意代碼分析;周濤,硬件安全;林小雨,情報整合。”
霍林一一握手。趙峰是個三十出頭的男人,戴著黑框眼鏡,手指關節粗大,一看就是常年敲鍵盤;陳薇很年輕,扎著馬尾,眼神銳利;周濤身材魁梧,不像技術員倒像運動員;林小雨則安靜地坐在角落,面前擺著三臺顯示器。
“客套話就不多說了。”趙峰直接切入正題,“霍林,李處長應該跟你說了基本情況。我們現在最大的問題是找不到攻擊源頭。兩百個跳板服務器,我們逆向追蹤了其中五十個,全都指向更多層的跳板。”
陳薇調出一張世界地圖,上面密密麻麻標注著紅點。“這是已知的跳板服務器分布。北美、歐洲、東南亞、**……幾乎覆蓋全球。攻擊者用了洋蔥路由加多層**,每層都用了不同的加密協議。”
霍林走到屏幕前,仔細看著那些紅點。他的目光在東南亞區域停留了很久——那里有十七個跳板服務器,分布在越南、泰國、馬來西亞和菲律賓。
“這些東南亞的服務器,有什么共同特征?”他問。
林小雨敲了幾下鍵盤,調出一份詳細報告。“都是中小型企業的商務服務器,配置中等,租用時間都在三個月到半年之間。有趣的是,其中十三臺服務器在同一周內被同一家虛擬主機服務商租出,付款方式都是加密貨幣。”
“同一周,同一服務商。”霍林重復著這句話,大腦開始構建模型,“這意味著攻擊者不是隨機選擇跳板,而是有計劃地批量部署。他們先控制了這家服務商的某個員工或系統,然后集中租用了一批服務器作為第一層跳板。”
周濤插話:“我們查過那家服務商,總部在新加坡,安全記錄良好。但他們的**系統兩個月前有過一次小規模的數據泄露,大約五百個客戶信息外泄。當時認為是普通黑客所為,沒有深究。”
“五百個客戶信息……”霍林閉上眼睛,讓信息在腦中重組,“攻擊者拿到名單后,篩選出其中位于東南亞、配置合適的服務器,然后通過社會工程學或漏洞利用,逐一控制這些服務器。因為它們是真實企業的合法服務器,所以流量看起來完全正常。”
會議室里安靜了幾秒。趙峰推了推眼鏡:“這個推理成立。但就算知道這些,我們還是找不到真正的源頭。攻擊者可以從這些東南亞服務器再跳轉到其他大洲的服務器,循環幾次后,痕跡就徹底消失了。”
霍林走到白板前,拿起筆。“我們換個思路。攻擊者為什么要用東南亞的服務器作為第一層跳板?”
“延遲低?”陳薇猜測,“東南亞到中國的網絡延遲相對較低,適合實時攻擊。”
“成本低。”周濤說,“東南亞的服務器租用成本只有歐美的一半。”
“還有時區。”林小雨輕聲補充,“東南亞和中國沒有時差,攻擊者可以實時監控攻擊效果。”
霍林在白板上寫下三個詞:延遲、成本、時區。然后他在下面又寫了一行字:“操作習慣。”
所有人都看向他。
“每個黑客組織都有自己偏好的工具鏈和操作習慣。”霍林解釋,“就像寫代碼,有人喜歡用Python有人喜歡用C++。這種習慣會體現在很多細節上——比如選擇跳板服務器時,是偏好Linux還是Windows系統;是喜歡用商業主機還是自己搭建;是習慣在白天攻擊還是夜間攻擊。”
他調出那十三臺東南亞服務器的詳細配置表。“看這里,十三臺服務器里,十一臺是CentOS系統,兩臺是U*untu。都是Linux,但版本不同。攻擊者為什么要混用?”
陳薇立刻反應過來:“因為控制這些服務器的不是同一個人,或者同一個工具!”
“對。”霍林放大日志記錄,“再看登錄記錄。這十一臺CentOS服務器,被控制的方式都是通過SSH密鑰漏洞,攻擊時間集中在凌晨兩點到四點。而那兩臺U*untu服務器,是通過We*應用漏洞被控制,攻擊時間在下午。”
趙峰站了起來:“你是說,攻擊者至少有兩個團隊,或者兩套自動化工具在同時工作?”
“更可能是一套工具的兩個模塊。”霍林說,“一個模塊專門針對CentOS的某個特定版本,另一個模塊針對U*untu。攻擊者編寫工具時,為了覆蓋更多目標,不得不兼容不同系統。但這種兼容性會留下痕跡——不同模塊的代碼風格、錯誤處理方式、日志清理方法都會有細微差異。”
他轉向林小雨:“能幫我調出這兩類服務器的完整攻擊日志嗎?從被控制前一周開始,到被控制后所有活動記錄。”
“需要一點時間。”林小雨開始快速操作鍵盤,“服務器日志很大,而且攻擊者清理過。”
“他們清理不干凈。”霍林說,“只要發生過數據交換,就一定會在內存、緩存或臨時文件里留下碎片。我們需要的是那些被忽略的碎片。”
等待數據加載的間隙,霍林走到窗邊。窗外是基地的內部庭院,幾棵梧桐樹在夜風中輕輕搖曳。他的思緒飄回加州,想起最后一次和導師***的對話。那是在斯坦福的咖啡館里,陳教授端著咖啡,語重心長地說:“霍林,技術沒有國界,但技術人有祖國。你現在掌握的東西,既可以用來建造,也可以用來摧毀。記住,選擇權在你手里。”
當時霍林不太理解這句話的深意。現在他站在***的基地里,面對一場針對**金融系統的攻擊,突然明白了——技術確實沒有國界,但攻擊有。那些數據包不會自己跨越太平洋,背后一定有一雙手,一個意志,一個目的。
“數據好了。”林小雨的聲音把他拉回現實。
霍林回到屏幕前。兩臺顯示器并排顯示著兩類服務器的日志分析結果。左邊是CentOS組,右邊是U*untu組。他用自己編寫的腳本快速過濾關鍵信息:非常規進程、異常網絡連接、修改過的系統文件……
“看這里。”他指著CentOS組的一條記錄,“被控制后的第三天,服務器向這個IP發送了加密數據包:103.27.186.44。發送時間凌晨三點十二分,持續時間四十七秒。”
趙峰立刻查詢這個IP。“馬來西亞吉隆坡,另一臺商業服務器,已經在我們監控列表里。”
“再看U*untu組。”霍林滾動到另一條記錄,“被控制后的**天,向這個IP發送數據:45.76.128.91。發送時間下午兩點半,持續時間一分二十秒。”
“菲律賓馬尼拉。”陳薇說,“也是已知跳板。”
看起來沒什么特別。但霍林注意到一個細節:兩個IP的端**都是50022。
“SSH默認端口是22,他們用了50022。”霍林說,“這不是隨機選擇的端口。50022是某個開源遠程管理工具的默認端口,那個工具的特點是支持多跳板自動切換。”
周濤皺眉:“所以攻擊者用同一套工具管理所有跳板?那為什么還要分CentOS和U*untu兩個模塊?”
“因為那套工具本身有漏洞。”霍林的眼睛亮了起來,“或者說,有特征。為了兼容不同系統,開發者寫了一些特定的適配代碼。這些代**在日志里留下獨特的字符串——如果我們能找到這個字符串,就能反向追蹤所有使用這套工具的服務器。”
他讓林小雨搜索日志里所有包含“li*ssh2”、“paramiko”、“asyn**sh”等SSH庫名的記錄。這些都是常見的Python SSH庫,攻擊者的工具很可能基于其中之一。
搜索結果出來了:CentOS組的日志里有大量“paramiko”相關的錯誤信息,U*untu組則是“asyn**sh”。
“兩個不同的庫。”霍林快速思考,“這意味著攻擊者的工具至少有兩個版本,或者兩個分支。但為什么要維護兩個版本?增加工作量,還容易出錯。”
除非……除非這兩個版本不是同一個人寫的。
“趙峰,能查一下這兩個SSH庫在****的流行度嗎?”霍林問。
趙峰打開幾個內部數據庫。“paramiko是老牌庫,穩定但性能一般,很多自動化腳本喜歡用。asyn**sh是新興庫,異步性能好,適合高并發場景,但學習曲線陡峭。”
“所以一個團隊用老技術,一個團隊用新技術。”陳薇總結,“攻擊者組織內部有代差?”
霍林沒有立刻回答。他讓林小雨把兩類服務器日志的時間軸并列顯示。很快,一個模式浮現出來:CentOS組的攻擊活動集中在每周一、三、五的凌晨;U*untu組則在每周二、四、六的下午。周日兩邊都安靜。
“輪班制。”周濤說,“兩個團隊輪流作業,周日休息。這是正規組織的作息。”
“而且兩個團隊可能在不同的時區。”霍林補充,“CentOS團隊在**時區,所以凌晨工作;U*untu團隊在歐美時區,所以下午工作。但他們共用同一批跳板服務器,所以需要統一的控制工具——于是工具有了兩個版本,分別適應兩個團隊的習慣。”
推理到這里,整個攻擊組織的輪廓已經隱約可見:一個國際黑客組織,至少有兩個技術團隊分布在東西半球,使用自研的自動化工具控制全球跳板服務器,針對中國支付系統發起APT攻擊。
但最重要的線索還沒找到:真正的指揮控制服務器在哪里?
霍林的目光回到那個端**:50022。他想起自己***參與過一個開源項目,項目里用過一款叫“ShadowHop”的多跳板管理工具,默認端口就是50022。那工具是某個***黑客寫的,后來因為漏洞太多被社區棄用了。
“查一下‘ShadowHop’這個***。”他說。
林小雨搜索內部威脅情報庫。果然,三年前有一份報告提到,“棱鏡”組織早期曾使用過ShadowHop的修改版作為內部工具,但后來轉向了更專業的商業軟件。
“棱鏡……”霍林念出這個名字。他***聽說過這個組織,傳聞是多個**前情報人員組成的黑客團體,專門從事**級網絡攻擊。如果真是他們,那這次事件的性質就完全不同了。
“有ShadowHop的源代碼嗎?”霍林問。
趙峰從檔案庫調出一份加密文件。“這是當年**的樣本,但版本很舊了。”
霍林快速瀏覽代碼。ShadowHop的設計很粗糙,但有一個特點:它會把所有操作日志加密后發送到一個固定郵箱。代碼里硬編碼了一個***il郵箱地址,雖然攻擊者肯定會修改,但日志發送的邏輯不會變——一定是通過**TP協議,走TLS加密。
“所有跳板服務器,檢查它們的出站**TP連接記錄。”霍林說,“特別是連接到***il、Outlook等公共郵件服務的。”
這個搜索范圍小多了。十分鐘后,林小雨找到了:十三臺東南亞服務器里,有七臺在特定時間向同一個***il郵箱發送過加密數據包。發送時間都在攻擊開始前五分鐘,像是某種“準備就緒”的信號。
“郵箱是假的。”趙峰查了注冊信息,“一次性賬號,已經銷毀了。”
“但**TP服務器不會說謊。”霍林調出網絡層日志,“郵件數據包從跳板服務器發出后,經過哪些中轉節點?”
數據追蹤顯示,所有郵件都先到達新加坡的一個**TP中轉服務器,然后跳轉到荷蘭阿姆斯特丹的另一個服務器,最后才抵達***il。這是標準的反追蹤手法。
但霍林注意到一個異常:從新加坡到阿姆斯特丹的這段連接,用的不是常規的TLS 1.2,而是TLS 1.3。而TLS 1.3在當時的商用**TP服務器上還不普及。
“這個阿姆斯特丹的服務器,不是公共郵件服務商。”霍林說,“是**的,專門搭建的郵件中轉服務器。攻擊者為了隱藏行蹤,自己建了一套郵件系統。”
“能定位嗎?”李處長不知何時已經站在門口。
霍林看了看完整的路由追蹤結果。“物理位置在阿姆斯特丹的某個數據中心,但實際控制者……需要進一步分析。不過至少我們現在知道,攻擊者的指揮控制服務器很可能在歐洲,通過自建郵件系統向全球跳板發送指令。”
趙峰長出一口氣:“這是三個月來最大的突破。”
霍林卻沒有放松。“這只是第一層。攻擊者肯定還有更多保護措施。我們需要設一個陷阱,讓他們自己暴露。”
“什么陷阱?”陳薇問。
“蜜罐。”霍林說,“部署一個***的支付系統接口,故意留幾個看起來像漏洞的入口,引誘攻擊者來探測。只要他們上鉤,我們就能捕獲他們的工具樣本,分析出更多特征。”
李處長點頭:“方案報上來,我協調資源。”
會議結束時,已經是凌晨四點。霍林站在基地的天臺上,看著東方漸漸泛起的魚肚白。城市還在沉睡,但網絡世界永不眠。那些數據包還在流動,攻擊還在繼續,而他已經踏入了這場無聲的戰爭。
風吹過,帶來初秋的涼意。霍林想起自己回國的飛機上,旁邊坐著一個帶著孩子的母親。孩子問媽媽:“我們為什么要回國呀?”母親說:“因為這里是家啊。”
家。霍林握緊了欄桿。他現在明白了,守護這個“家”不只是情感選擇,更是技術人的責任。那些試圖破壞支付系統的人,想要動搖的不只是數據,更是千家萬戶的生活。
他轉身走回大樓。走廊的燈光蒼白而堅定,就像他此刻的心情。第一戰才剛剛開始,但他已經找到了方向。