本系統由三大核心組件構成,實現全域程式執行監控、記錄審計與禁用程式攔截:
採用 WH_CBT (Computer-Based Training) 鉤子攔截 `HCBT_CREATEWND` 事件,或使用 **Windows 內核回呼** `PsSetCreateProcessNotifyRoutine` (需驅動程式簽章)。用戶模式下常見方案:
// 伪代码:鉤子回呼中檢查進程名稱
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
if (nCode == HCBT_CREATEWND) {
CBT_CREATEWND* cbt = (CBT_CREATEWND*)lParam;
HWND hWnd = (HWND)wParam;
// 取得進程映像名稱
DWORD pid = 0; GetWindowThreadProcessId(hWnd, &pid);
HANDLE hProc = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, FALSE, pid);
if (hProc) {
char path[MAX_PATH];
if (GetProcessImageFileName(hProc, path, MAX_PATH)) {
// 比對禁用清單 (支援萬用字元、路徑、雜湊)
if (IsInBlockList(path)) {
// 終止進程
HANDLE hTerm = OpenProcess(PROCESS_TERMINATE, FALSE, pid);
if (hTerm) { TerminateProcess(hTerm, 0); CloseHandle(hTerm); }
// 記錄日誌
LogEvent("BLOCKED", path, pid);
return -1; // 阻止視窗建立
}
}
CloseHandle(hProc);
}
}
return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
// 系統啟動/關機
2003-02-03 17:31:25 - [System Startup - Windows XP 5.01.2600]
2003-02-03 17:32:50 - [System Shutdown - 0 days, 0 hrs, 1 mins, 25 secs]
// 一般程式啟動
2003-02-03 17:31:29 "CabinetWClass" -> "我的電腦"
// 禁用程式攔截
2003-02-03 17:31:59 "Red Alert" -> "Red Alert" (關閉禁用程式)
2003-02-03 17:32:19 "掃雷" -> "掃雷" (關閉禁用程式)
// 安裝時寫入登錄
HKEY hKey;
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL);
RegSetValueEx(hKey, "HWHPMonitor", 0, REG_SZ,
(BYTE*)"C:\\Program Files\\HWHP\\hwhpapp.exe", strlen(...));
RegCloseKey(hKey);
| 功能 | 實現技術 | 應用場景 |
|---|---|---|
| 命令列參數記錄 | WMI `CommandLine` 屬性 / ETW | 惡意腳本偵測、合規審計 |
| 父進程追蹤 | 工具幫助庫 `th32ParentProcessID` / ETW | 攻擊鏈重建、異常啟動鏈識別 |
| 檔案雜湊驗證 | SHA-256 計算 + 白名單資料庫 | 防範檔案替換攻擊、供應鏈安全 |
| 網路連線關聯 | WFP (Windows Filtering Platform) / ETW | 惡意軟體 C2 通訊偵測 |
| 使用者行為分析 | 時間序列聚類、異常檢測演算法 | 內部威脅識別、影子 IT 發現 |
基於鉤子的程式執行監視器展示了經典的用戶模式監控架構:全域鉤子注入、進程建立攔截、禁用清單比對、日誌審計。然而現代 Windows 安全架構 (VBS/HVCI、PPL、ETW、WDAC) 已提供更強健、相容、合規的原生替代方案。新專案開發**強烈建議**採用 Sysmon + WDAC/AppLocker + EDR 組合,僅在極特殊相容性需求下考慮用戶模式鉤子方案,並嚴格遵守法律合規與隱私保護原則。