過去我以為不隨意執行網友傳來的檔案就能避免中毒,但衝擊波、震盪波等利用漏洞傳播的蠕蟲打破了這一認知;我也曾以為不瀏覽小網站就能避開網頁木馬,然而連知名遊戲網站首頁都被掛馬的事實告訴我們:絕對的安全從不存在。
雖然無法達到百戰百勝,但若能知己知彼,掌握木馬的隱藏手法,便能及時發現蹤跡,將損失降至最低。木馬究竟是如何潛伏在系統中的?本文將層層剖析。
木馬程式再神秘,本質上仍是 Win32 平台下的應用程式。Windows 常見程式分兩類:
木馬屬於 Win32 應用程式,但通常不包含視窗或將視窗隱藏(除非用於與受害者聊天),並將檔案屬性設為「隱藏」。稍有經驗的用戶打開「任務管理器」,並在「資料夾選項」勾選「顯示所有檔案」即可輕易發現。因此,更進階的「進程隱藏」技術應運而生。
Windows 98 提供 RegisterServiceProcess 方法,可將進程註冊為服務進程。服務進程在 98 的任務管理器中不顯示,被木馬利用。對付方法:使用第三方進程管理工具即可檢出;此技術在 Windows 2000/XP 中失效,木馬便會現形,結束進程並刪除檔案即可。
Windows 中每個進程擁有獨立私有記憶體空間,進程間無法直接訪問彼此記憶體,這保證了穩定性。但「進程注入」可打破界限,讓木馬的 DLL 插入另一進程空間,成為該進程的一部分,從而為所欲為——例如竊取 QQ 密碼。
正常情況下,鍵盤/滑鼠輸入僅屬於目標應用程式。盜號木馬將 DLL 注入 QQ 進程並成為一線程,當用戶輸入密碼時,木馬即能攔截按鍵訊號,做到「家賊難防」。
SetWindowsHookEx API,隱蔽性強,但開發門檻高,需精通 Win32 程式設計。木馬注入後,任務管理器僅顯示正常進程。需使用支援「進程模組檢視」的工具(如 Windows 優化大師)才能看到木馬 DLL 模組。
木馬利用 Hook 技術監控系統列舉進程的 API(如 EnumProcesses)。當任務管理器或殺毒軟體呼叫該 API 時,木馬在結果返回前將自身進程資訊從列表中抹除。此時任何基於 API 的掃描皆失效,唯有在木馬啟動前由殺毒軟體攔截檔案才能有效防禦。
將 Hook 技術應用於檔案相關 API,連「資源管理器」與殺毒軟體都找不到木馬檔案。灰鴿子等木馬已實現此技術,最佳對策仍是啟動前的主動攔截。
木馬加殼(如 NSPack、ASPack)改變特徵碼以躲避掃描。部分殺毒軟體可脫殼查殺,但新型主動對抗殼出現:外殼先取得控制權,破壞系統中安裝的殺毒軟體防護,確認安全後再釋放木馬主體。