網絡嗅探器工作原理及驅動流程
嗅探器是一種監視網絡數據運行的軟件設備,協議分析器既能用于合法網絡管理也能用于竊取網絡信息。網絡運作和維護都可以采用協議分析器:如監視網絡流量、分析數據包、監視網絡資源利用、執行網絡安全操作規則、鑒定分析網絡數據以及診斷并修復網絡問題等等。非法嗅探器嚴重威脅網絡安全性,這是因為它實質上不能進行探測行為且容易隨處插入,所以網絡黑客常將它作為攻擊武器。
網絡嗅探器(Sniffer)是利用計算機網絡接口截獲所需網絡內部數據報文的一種工具,他廣泛地應用于流量分析、安全監控、網管分析、防火墻等的實現中。Sniffer主要被用來在網絡上截獲位于OSI協議模型中各個協議層次上的數據包,通過對截獲數據包的分析,嗅探器可以掌握目標主機的信息。由于與具體平臺的網絡協議棧密切相關,并涉及網絡安全的敏感問題,網絡嗅探一般沒有通用的實現方法。
隨著計算機網絡應用的普及,和Windows網絡操作系統的廣泛應用,使得在Window下保障網絡通信安全成為一個迫切需要解決的問題。本文基于NDIS中間層驅動程序實現網絡嗅探器,為滿足上述需求提供了充分的可能。
網絡嗅探器的基本工作原理
網絡嗅探器利用的是共享式的網絡傳輸介質。共享即意味著網絡中的一臺機器可以嗅探到傳遞給本網段(沖突域)中的所有機器的報文。例如最常見的以太網就是一種共享式的網絡技術,以太網卡收到報文后,通過對目的地址進行檢查,來判斷是否是傳遞給自己的,如果是,則把報文傳遞給操作系統;否則,將報文丟棄,不進行處理;網卡存在一種特殊的工作模式,在這種工作模式下,網卡不對目的地址進行判斷,而直接將他收到的所有報文都傳遞給操作系統進行處理,這種特殊的工作模式,就稱之為混雜模式。網絡嗅探器通過將網卡設置為混雜模式來實現對網絡的嗅探。
一個實際的主機系統中,數據的收發是由網卡來完成的,當網卡接收到傳輸來的數據包時,網卡內的單片程序首先解析數據包的目的網卡物理地址,然后根據網卡驅動程序設置的接收模式判斷該不該接收,認為該接收就產生中斷信號通知CPU,認為不該接收就丟掉數據包,所以不該接收的數據包就被網卡截斷了,上層應用根本就不知道這個過程。CPU如果得到網卡的中斷信號,則根據網卡的驅動程序設置的網卡中斷程序地址調用驅動程序接收數據,并將接收的數據交給上層協議軟件處理。
NDIS中間層驅動程序
訪問位于網絡底層的傳輸協議是網絡嗅探器的基本功能。網絡嗅探器必須能夠接收并分析來自數據鏈路層、網絡層、傳輸層等底層的數據包,本文介紹的網絡嗅探器采用了網絡驅動程序接口規范(NDIS)中間層驅動程序技術設計。
NDIS是Windows網絡協議棧構件間的接口規范,基于NDIS的核心態包過濾技術具有較高的結構性和可擴展性。從NDIS4.0開始,NDIS開始支持中間層驅動程序(Intermediate Driver),為NDIS體系帶來了很多的靈活性,他是位于一個或者多個NIC驅動之上和傳輸層驅動之下的驅動程序,即位于鏈路層和協議層之間,對上面的協議層提供一個虛擬的微端口網卡驅動接口(MiniportDriver),而對下面的鏈路層則提供一個協議驅動接口(Protocol Driver)。所有經過網卡發送到網絡和從網絡接收的數據包都要由此通過,因此中間層驅動程序可以對所有網絡數據包進行過濾和處理。從NDIS中間層在Windows中的位置來看,其處于核心層,處于與操作系統同等級別的核心態。
使用微軟提供的驅動程序開發包DDK進行NDIS中間層驅動程序編程。具體流程為:
(1)NDIS驅動程序在主入口函數DirverEntry中調用NdisMinitializeWrapper函數注冊輸出函數集入口,得到設備句柄;
(2)輸入(1)得到的句柄調用NdisIMRegisterLayeredMiniport,為NDIS中間層驅動程序注冊一套Miniport回調函數,這樣上層Protocol協議就認為中間層驅動程序是網卡,并通過NDIS庫調用這些回調函數;
(3)調用NdisRegisterProtocol,為NDIS中間層驅動程序注冊一套Protocol回調函數,這樣下層網卡就認為中間層驅動程序是一個協議,并通過NDIS庫調用這些函數;
(4)當操作系統發現NIC時,NDIS調用中間層驅動程序注冊的ProtocolAdapterBind函數,該函數內部需要調用NdisOpenAdapt打開適配器,保證了網卡和中間層的綁定關系;
(5)調用PtReceivePacket接收網卡收到的數據包;
(6)數據包與所設置過濾規則進行比較,不滿足規則時調用函數返回NDIS_STATUS_NOT_ACCEPTED,該宏在ndis.h中定義,這樣就結束了本接收函數的調用。
基于NDIS中間層驅動程序的網絡嗅探器實現
1、網絡嗅探器的結構模型
本文實現的網絡嗅探器主要由運行于Ring0層的NDIS中間層驅動程序模塊和運行于Ring3層的應用層包處理模塊構成。在Windows 2000平臺下實現了對流經指定網絡適配器的各種網絡協議、任意/指定IP地址和端口的數據包的嗅探:
(1)應用層包處理模塊:處于應用層,負責過濾準則的設置和數據包的處理分析。
(2)數據包捕獲及過濾實現模塊:基于NDIS中間層驅動程序完成底層數據的截獲功能,并依據數據包過濾準則實現對數據包的接收過濾,向上層應用程序遞交數據包。
2、應用層包過濾準則設置
網絡嗅探器中采用包過濾技術的目的主要是為了有選擇地接收網絡數據包,屏蔽偵聽者不關心的網絡數據包,從而提高系統的監聽效率,減輕高層應用對數據包的分析處理負擔。數據包的過濾是對捕獲的數據包的報頭進行分析,依據過濾準則來決定數據包是否需要提交高層應用進行處理。
過濾準則的設置主要分為IP地址過濾、協議過濾、端口過濾三個方面,可分別進行設置,并通過CFile::Open(″。。/data/filter″,CFile::modeCreate|CFile::modeRead-Write)和CFiIe::Write(&m_Filter,sizeof(m_Filter))分別寫入配置文件。過濾準則依照以下方式進行工作:
(1)當數據包到達NIC時,對數據包的各級包頭進行協議分析。
(2)過濾準則無設置時,默認接收該準則權限內的所有數據包。
(3)若3個過濾準則中的任一個有設置,數據包將依次與IP地址過濾準則、協議過濾準則、端口過濾準則匹配,若存在一條準則拒絕接收該數據包,并丟棄。
(4)如果一個數據包滿足所有數據包過濾準則,則該數據包被提交給高層應用。
3、數據包捕獲及過濾實現
當過濾規則設置完成后,核心態的驅動程序就可以根據上層的要求來截獲數據包。具體步驟為:
(1)用戶態程序啟動驅動服務程序;
(2)用戶態程序調用CFile::Read(&m_Filter,sizeof(m_Filter))讀取過濾準則;
(3)調用DeviceloControl(hFile,IOCTL_ENUM_ADAPTERS,NULL,0,buffer,MAX_ADAPTERS*256,&BytesTxd,NULL)從注冊表中獲取網絡適配器的信息,并顯示到用戶界面;
(4)用戶選擇適配器綁定并設置適配器為混雜模式;
(5)創建事件對象,接收數據包線程ReadProcessProc()和發送讀請求線程ReadRequestProc()使用事件機制來同步、協調工作,使得讀隊列不太長,也不為空;
(6)ReadRequestProc()調用WaitForSingleObject函數等待事件發生,當讀請求隊列長度小于設定的最小長度時,調用SetEvent沒置事件為有信號狀態,線程不斷地發出讀請求,保持驅動程序的讀隊列不為空,防止丟包發生;當讀請求隊列長度超出設定的最大長度時,調用ResetEvent設置事件為無信號狀態,線程停止發送讀請求;
(7)ReadProcessProc()檢查完成端口狀態,有讀請求時,在PtReceive/PtReceivePacket函數中處理收到的數據包,當有數據包符合所有的過濾條件時,將其復制到共享內存,收取數據并按照過濾準則考慮是否通知用戶界面程序讀取數據;
(8)應用層接到NDIS中間層驅動程序的事件通知后,獲取共享內存隊列中的數據,做進一步的處理,繼續循環等待。
總結
實現基于NDIS中間層驅動程序的網絡嗅探器,具有良好的結構性、擴展性、并行性、效率性和可編程性,能夠對網絡中的各層進行訪問,并且能收發基于這些層的各種協議數據包。該嗅探器運行于系統的核心層,最大限度地提高了系統的數據處理效率,在單位內部網絡安全監控以及網絡入侵檢測等方面發揮了重要的作用。
非常好我支持^.^
(13) 86.7%
不好我反對
(2) 13.3%
相關閱讀:
- [電子說] 基于IC741和抄表的射頻嗅探器電路 2023-06-29
- [電子說] 基于LM3914的射頻嗅探器電路 2023-06-29
- [測量儀表] GF77熱像儀與GF304熱像儀的使用區別 2020-07-27
- [測量儀表] OGI紅外熱像儀與嗅探器探頭結合使用的特征介紹 2020-07-20
- [電子說] 如何使用MAX79356 G3-PLC嗅探器轉換器檢查信號相位和質量 2018-10-11
- [安防及入侵檢測] 嗅探器是什么_嗅探器怎么用 2017-11-09
( 發表人:羅勇杰 )