流氓軟體 (Rogue Software) 與反流氓工具的對抗,宛如軍備競賽,從使用者模式的註冊表啟動、BHO 掛鉤、進程快照,演進至核心模式的驅動程式過濾、SSDT Hook、Rootkit 隱藏技術。本文系統梳理雙方十輪攻防演進,揭示技術本質與防禦啟示。
第一階段:使用者模式攻防 (Ring 3)
流氓軟體持久化與監控手法
- 註冊表自啟:
Run、RunOnce、Winlogon\Userinit、BootExecute。
- 瀏覽器劫持:BHO (Browser Helper Object) 掛載 IE 事件;IURLSearchHook 攔截未知 URL。
- 進程監控:Toolhelp32 快照輪詢
CreateToolhelp32Snapshot;或 API Hook CreateProcess 攔截瀏覽器啟動。
- LSP (Layered Service Provider):插入 Winsock 協議鏈,攔截應用層封包。
- 各式 Hook:IAT Hook、Inline Hook、Message Hook (鍵盤/滑鼠/訊息)。
反流氓對策 (Ring 3)
- 掃描啟動項、BHO、LSP、計畫任務、服務;刪除註冊表鍵值與檔案。
- 工具:超級兔子、完美卸載、木馬克星、早期 360 安全衛士 (用戶模式掃描)。
- 弱點:流氓程式若以執行緒監控註冊表、Hook
OpenProcess 拒絕終止、注入系統進程 (explorer.exe、services.exe),用戶模式工具束手無策。
第二階段:核心模式對抗 (Ring 0)
流氓軟體升級核心驅動防護
- 檔案系統過濾驅動:攔截 IRP_MJ_CREATE/SET_INFORMATION,阻止刪除/重命名自身檔案。
- SSDT/Shadow SSDT Hook:替換
ZwCreateFile、ZwSetInformationFile、ZwDeleteKey、ZwSetValueKey 等系統服務,保護檔案/登錄表/進程。
- DKOM (Direct Kernel Object Manipulation):從 EPROCESS 鏈表移除自身進程、隱藏埠口、竄改系統時間。
- 遠端執行緒注入:
CreateRemoteThread 將代碼注入系統進程,達成隱藏與持久化。
反流氓核心層對策
- 優先載入順序搶佔 (PNP_TDI 群組) 建立同名裝置物件,阻礙流氓驅動載入 (360 早期策略)。
- 直接發送 IRP 至檔案系統驅動 (繞過過濾層) 強制刪除檔案;直接操作登錄表配置單元 (Hive) 刪除鍵值。
- 核心回調 (
PsSetCreateProcessNotifyRoutine, CmRegisterCallback) 監控惡意行為。
第三階段:Rootkit 與硬體層面
- 流氓嘗試修補檔案系統驅動 (ntfs.sys/fastfat.sys) 或磁碟類別驅動,實現「硬體級」隱藏與保護——即 Rootkit 定義:修改作業系統核心元件。
- Windows 核心簽章強制 (Driver Signature Enforcement)、VBS (虛擬化基礎安全)、HVCI (超視碼器保護程式碼完整性) 大幅提升 Rootkit 開發門檻。
- 反作弊/反惡意碼產品轉向超視碼器層 (Hypervisor/EL3) 監控,實現更高權限的完整性量測。
啟示與防禦策略
- 預防優於清除:應用程式白名單、驅動程式簽章強制、安全啟動 (Secure Boot) 從源頭阻絕未授權代碼執行。
- 分層防護:EDR (端點偵測回應) + HIPS (主機入侵防禦) + 網流量分析 (NDR) 多層次能見度。
- 屬性驗證:啟用 Windows Defender Application Control (WDAC) 或 AppLocker,僅允許受信任簽章的核心模組載入。
- 威脅情報共享:訂閱商業/開源 IOC Feed,縮短從發現到封鎖的時間窗。
流氓軟體演變史,本質上是「權限提升與隱藏技術」的疊代。防禦者無法永遠贏在技術細節上,唯有建立「預設拒絕、持續驗證、最小權限」的系統架構,才能在軍備競賽中立於不敗之地。