萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 網路安全 >  >> 資訊安全防護

基於 SPI 的資料封包過濾原理與實現 - 個人防火牆技術深度解析

個人防火牆技術概述

隨著網路安全問題嚴峻,個人防火牆成為廣大網民核心防護工具。Windows 平台個人防火牆均基於資料封包攔截技術,實現方式分為:

  • 核心層攔截:TDI 過濾驅動、NDIS 中介層驅動、NDIS 掛鉤驅動,利用網路驅動實現。
  • 使用者層攔截:SPI (Service Provider Interface) 介面、Windows 2000 封包過濾介面等。

本文深入探討基於 SPI 的封包過濾實現,屬 Winsock 2 新特性。

Winsock 2 SPI 架構

  • Winsock 2 為介面而非協定,支援任意數量底層傳輸協定。
  • 包含 Windows Socket API (應用層) 與 Service Provider Interface - SPI (服務提供者介面)。
  • 傳輸服務提供者 (TSP) 以 DLL 形式存在,經 WSPStartup 提供介面,其他函數透過分派表存取 WS2_32.DLL。
  • TSP DLL 按需載入 (應用程式呼叫時由 Ws2_32.dll 載入),不用時自動卸載。

WOSA 架構圖解

--------------------------
| Windows Socket 2 App   |
--------------------------  Windows Socket 2 API
|       WS2_32.DLL       |
--------------------------  Windows Socket 2 Transport SPI
| Transport Provider DLL |
--------------------------

命名慣例與核心結構

  • 函數前綴:WSP (Windows Socket Service Provider)、WPU (Provider Upcall)、WSC (Socket Configuration)。
  • 每個 TSP 有自己支援的傳輸協定,使用 WSAPROTOCOL_INFOW 結構儲存所有相關資訊,應用程式透過此結構內容關聯相應 TSP。

基於 SPI 的封包過濾實現思路

  1. 開發一個分層服務提供者 (Layered Service Provider, LSP),插入 Winsock 2 協定鏈中。
  2. 在 LSP 的 WSPSend/WSPRecv/WSPRecvFrom 等函數中攔截封包資料。
  3. 依規則引擎判斷:允許/阻擋/修改/記錄。
  4. 呼叫下層 TSP 原始函數繼續處理或直接返回錯誤碼實現阻斷。
  5. 註冊 LSP 至 Winsock 目錄 (需管理員權限),確保載入順序正確。

優缺點評析

優點缺點
使用者層開發,無需簽名驅動,相容性好效能較核心層方案略低 (用戶/核心態切換開銷)
可攔截所有 Winsock 應用 (含系統服務)LSP 鏈順序錯誤易導致網路斷裂 (知名 LSP 衝突問題)
易於實現應用層邏輯 (HTTP 解析、內容過濾)無法攔截繞過 Winsock 的核心層流量 (如原始套接字、內核模組)
調試除錯相對容易Windows 8+ 推薦使用 WFP (Windows Filtering Platform) 取代 LSP

現代替代方案

Windows Vista/Server 2008 引入 WFP (Windows Filtering Platform),提供核心層可擴展的封包過濾框架,支援 Callout 驅動註冊多層次過濾點 (ALE、Stream、Datagram 等),已成為 Windows 平台防火牆/安全產品的標準開發基礎。LSP 技術逐漸被淘汰,新專案建議直接基於 WFP 開發。

理解 SPI/LSP 機制有助於掌握早期個人防火牆 (如 Sygate、Outpost、ZoneAlarm 早期版) 的內部運作,亦為學習 WFP 奠定基礎。

copyright © 萬盛學電腦網 all rights reserved