萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

Windows 軟體防火牆核心技術演進:從封包過濾到 HIPS 的實現架構

四大技術支柱構建現代主機防火牆

Windows 軟體防火牆經歷四代演進:

  1. 封包過濾:分析來源 IP、連接埠、原始封包。
  2. 應用程式存取控制:針對個別進程授權網路權限。
  3. 智能行為監控 (HIPS):攔截未知攻擊、監控註冊表/檔案/進程異常行為。
  4. 流氓軟體/插件攔截:應對廣告軟體、瀏覽器劫持者。

封包過濾:NDIS 層掛鉤成主流

掛鉤層級由高到低:SPI → AFD → TDI → NDIS。NDIS 層功能最強、最難繞過。主流兩種技術:

  • 掛接 ndis.sys 匯出函數:攔截協定註冊,替換 SendPacketsHandler/ReceivePacketHandler。缺點:需重啟生效/卸載。
  • 動態註冊偽 NDIS 協定 (2004 年駭客技術公開):取得 NDIS 協定鏈表頭,無需重啟即時替換處理常式,支援動態卸載。ZoneAlarm 等採用此技術。

關鍵結構體 _NDIS_OPEN_BLOCK 中的 SendPacketsHandler、ReceivePacketHandler 為核心處理點(現代驅動多用此雙 Handler,非舊文獻常提的 SendHandler/ReceiveHandler)。

應用程式存取控制:TDI 層掛鉤

NDIS 層屬核心模式且無進程上下文,無法識別發起連線的 PID。解法:在 TDI 層掛鉤 TDI_CONNECT、TDI_LISTEN、TDI_SET_EVENT_HANDLER 等,呼叫 PsGetCurrentProcessId() 取得進程 ID,彈出提示或依規則放行/阻擋。優點:微軟提供濾波器驅動介面 IoAttachDeviceToDeviceStack,開發較 NDIS 簡單。

程式碼片段示意

// 動態註冊偽 NDIS 協定取得鏈表頭
NDIS_HANDLE RegisterBogusNDISProtocol() {
    NDIS_PROTOCOL_CHARACTERISTICS BogusProtocol = {0};
    BogusProtocol.MajorNdisVersion = 4;
    NdisInitUnicodeString(&ProtocolName, L"BogusProtocol");
    BogusProtocol.Name = ProtocolName;
    BogusProtocol.ReceiveHandler = DummyReceive;
    BogusProtocol.SendPacketsHandler = DummySendPackets; // 關鍵
    NdisRegisterProtocol(&Status, &hBogusProtocol, &BogusProtocol, sizeof(BogusProtocol));
    return (Status == STATUS_SUCCESS) ? hBogusProtocol : NULL;
}

// TDI Dispatch Routine 掛鉤範例
NTSTATUS hook_disp(PDEVICE_OBJECT dev, PIRP irp) {
    if (irpSp->MinorFunction == TDI_CONNECT) {
        HANDLE pid = PsGetCurrentProcessId();
        // 依 pid 查規則、彈視窗、決定放行/阻擋
    }
    // ... 其他 TDI_* 處理
}

架構總結

現代 Windows 防火牆 = NDIS 封包過濾 (高效能、低延遲) + TDI 應用程式識別 (精準進程控制) + 用戶模式服務 (UI、規則管理、日誌) + HIPS 行為引擎 (註冊表/檔案/進程監控)。黑客與反駭技術同源共演,推動防火牆持續進化。

copyright © 萬盛學電腦網 all rights reserved