您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>網(wǎng)絡(luò)>安防及入侵檢測>

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

2017年11月09日 16:16 互聯(lián)網(wǎng) 作者: 用戶評論(0
關(guān)鍵字:嗅探器(8070)

  嗅探器是一種監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)運行的軟件設(shè)備,協(xié)議分析器既能用于合法網(wǎng)絡(luò)管理也能用于竊取網(wǎng)絡(luò)信息。網(wǎng)絡(luò)運作和維護都可以采用協(xié)議分析器:如監(jiān)視網(wǎng)絡(luò)流量、分析數(shù)據(jù)包、監(jiān)視網(wǎng)絡(luò)資源利用、執(zhí)行網(wǎng)絡(luò)安全操作規(guī)則、鑒定分析網(wǎng)絡(luò)數(shù)據(jù)以及診斷并修復(fù)網(wǎng)絡(luò)問題等等。非法嗅探器嚴重威脅網(wǎng)絡(luò)安全性,這是因為它實質(zhì)上不能進行探測行為且容易隨處插入,所以網(wǎng)絡(luò)黑客常將它作為攻擊武器。

  網(wǎng)絡(luò)嗅探器(Sniffer)是利用計算機網(wǎng)絡(luò)接口截獲所需網(wǎng)絡(luò)內(nèi)部數(shù)據(jù)報文的一種工具,他廣泛地應(yīng)用于流量分析、安全監(jiān)控、網(wǎng)管分析、防火墻等的實現(xiàn)中。Sniffer主要被用來在網(wǎng)絡(luò)上截獲位于OSI協(xié)議模型中各個協(xié)議層次上的數(shù)據(jù)包,通過對截獲數(shù)據(jù)包的分析,嗅探器可以掌握目標主機的信息。由于與具體平臺的網(wǎng)絡(luò)協(xié)議棧密切相關(guān),并涉及網(wǎng)絡(luò)安全的敏感問題,網(wǎng)絡(luò)嗅探一般沒有通用的實現(xiàn)方法。

  隨著計算機網(wǎng)絡(luò)應(yīng)用的普及,和Windows網(wǎng)絡(luò)操作系統(tǒng)的廣泛應(yīng)用,使得在Window下保障網(wǎng)絡(luò)通信安全成為一個迫切需要解決的問題。本文基于NDIS中間層驅(qū)動程序?qū)崿F(xiàn)網(wǎng)絡(luò)嗅探器,為滿足上述需求提供了充分的可能。

  網(wǎng)絡(luò)嗅探器的基本工作原理

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

  網(wǎng)絡(luò)嗅探器利用的是共享式的網(wǎng)絡(luò)傳輸介質(zhì)。共享即意味著網(wǎng)絡(luò)中的一臺機器可以嗅探到傳遞給本網(wǎng)段(沖突域)中的所有機器的報文。例如最常見的以太網(wǎng)就是一種共享式的網(wǎng)絡(luò)技術(shù),以太網(wǎng)卡收到報文后,通過對目的地址進行檢查,來判斷是否是傳遞給自己的,如果是,則把報文傳遞給操作系統(tǒng);否則,將報文丟棄,不進行處理;網(wǎng)卡存在一種特殊的工作模式,在這種工作模式下,網(wǎng)卡不對目的地址進行判斷,而直接將他收到的所有報文都傳遞給操作系統(tǒng)進行處理,這種特殊的工作模式,就稱之為混雜模式。網(wǎng)絡(luò)嗅探器通過將網(wǎng)卡設(shè)置為混雜模式來實現(xiàn)對網(wǎng)絡(luò)的嗅探。

  一個實際的主機系統(tǒng)中,數(shù)據(jù)的收發(fā)是由網(wǎng)卡來完成的,當(dāng)網(wǎng)卡接收到傳輸來的數(shù)據(jù)包時,網(wǎng)卡內(nèi)的單片程序首先解析數(shù)據(jù)包的目的網(wǎng)卡物理地址,然后根據(jù)網(wǎng)卡驅(qū)動程序設(shè)置的接收模式判斷該不該接收,認為該接收就產(chǎn)生中斷信號通知CPU,認為不該接收就丟掉數(shù)據(jù)包,所以不該接收的數(shù)據(jù)包就被網(wǎng)卡截斷了,上層應(yīng)用根本就不知道這個過程。CPU如果得到網(wǎng)卡的中斷信號,則根據(jù)網(wǎng)卡的驅(qū)動程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接收數(shù)據(jù),并將接收的數(shù)據(jù)交給上層協(xié)議軟件處理。

  NDIS中間層驅(qū)動程序

  訪問位于網(wǎng)絡(luò)底層的傳輸協(xié)議是網(wǎng)絡(luò)嗅探器的基本功能。網(wǎng)絡(luò)嗅探器必須能夠接收并分析來自數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層等底層的數(shù)據(jù)包,本文介紹的網(wǎng)絡(luò)嗅探器采用了網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范(NDIS)中間層驅(qū)動程序技術(shù)設(shè)計。

  NDIS是Windows網(wǎng)絡(luò)協(xié)議棧構(gòu)件間的接口規(guī)范,基于NDIS的核心態(tài)包過濾技術(shù)具有較高的結(jié)構(gòu)性和可擴展性。從NDIS4.0開始,NDIS開始支持中間層驅(qū)動程序(Intermediate Driver),為NDIS體系帶來了很多的靈活性,他是位于一個或者多個NIC驅(qū)動之上和傳輸層驅(qū)動之下的驅(qū)動程序,即位于鏈路層和協(xié)議層之間,對上面的協(xié)議層提供一個虛擬的微端口網(wǎng)卡驅(qū)動接口(MiniportDriver),而對下面的鏈路層則提供一個協(xié)議驅(qū)動接口(Protocol Driver)。所有經(jīng)過網(wǎng)卡發(fā)送到網(wǎng)絡(luò)和從網(wǎng)絡(luò)接收的數(shù)據(jù)包都要由此通過,因此中間層驅(qū)動程序可以對所有網(wǎng)絡(luò)數(shù)據(jù)包進行過濾和處理。從NDIS中間層在Windows中的位置來看,其處于核心層,處于與操作系統(tǒng)同等級別的核心態(tài)。

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

  使用微軟提供的驅(qū)動程序開發(fā)包DDK進行NDIS中間層驅(qū)動程序編程。具體流程為:

  (1)NDIS驅(qū)動程序在主入口函數(shù)DirverEntry中調(diào)用NdisMinitializeWrapper函數(shù)注冊輸出函數(shù)集入口,得到設(shè)備句柄;

  (2)輸入(1)得到的句柄調(diào)用NdisIMRegisterLayeredMiniport,為NDIS中間層驅(qū)動程序注冊一套Miniport回調(diào)函數(shù),這樣上層Protocol協(xié)議就認為中間層驅(qū)動程序是網(wǎng)卡,并通過NDIS庫調(diào)用這些回調(diào)函數(shù);

 ?。?)調(diào)用NdisRegisterProtocol,為NDIS中間層驅(qū)動程序注冊一套Protocol回調(diào)函數(shù),這樣下層網(wǎng)卡就認為中間層驅(qū)動程序是一個協(xié)議,并通過NDIS庫調(diào)用這些函數(shù);

 ?。?)當(dāng)操作系統(tǒng)發(fā)現(xiàn)NIC時,NDIS調(diào)用中間層驅(qū)動程序注冊的ProtocolAdapterBind函數(shù),該函數(shù)內(nèi)部需要調(diào)用NdisOpenAdapt打開適配器,保證了網(wǎng)卡和中間層的綁定關(guān)系;

 ?。?)調(diào)用PtReceivePacket接收網(wǎng)卡收到的數(shù)據(jù)包;

 ?。?)數(shù)據(jù)包與所設(shè)置過濾規(guī)則進行比較,不滿足規(guī)則時調(diào)用函數(shù)返回NDIS_STATUS_NOT_ACCEPTED,該宏在ndis.h中定義,這樣就結(jié)束了本接收函數(shù)的調(diào)用。

  基于NDIS中間層驅(qū)動程序的網(wǎng)絡(luò)嗅探器實現(xiàn)

  1、網(wǎng)絡(luò)嗅探器的結(jié)構(gòu)模型

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

  本文實現(xiàn)的網(wǎng)絡(luò)嗅探器主要由運行于Ring0層的NDIS中間層驅(qū)動程序模塊和運行于Ring3層的應(yīng)用層包處理模塊構(gòu)成。在Windows 2000平臺下實現(xiàn)了對流經(jīng)指定網(wǎng)絡(luò)適配器的各種網(wǎng)絡(luò)協(xié)議、任意/指定IP地址和端口的數(shù)據(jù)包的嗅探:

 ?。?)應(yīng)用層包處理模塊:處于應(yīng)用層,負責(zé)過濾準則的設(shè)置和數(shù)據(jù)包的處理分析。

  (2)數(shù)據(jù)包捕獲及過濾實現(xiàn)模塊:基于NDIS中間層驅(qū)動程序完成底層數(shù)據(jù)的截獲功能,并依據(jù)數(shù)據(jù)包過濾準則實現(xiàn)對數(shù)據(jù)包的接收過濾,向上層應(yīng)用程序遞交數(shù)據(jù)包。

  2、應(yīng)用層包過濾準則設(shè)置

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

  網(wǎng)絡(luò)嗅探器中采用包過濾技術(shù)的目的主要是為了有選擇地接收網(wǎng)絡(luò)數(shù)據(jù)包,屏蔽偵聽者不關(guān)心的網(wǎng)絡(luò)數(shù)據(jù)包,從而提高系統(tǒng)的監(jiān)聽效率,減輕高層應(yīng)用對數(shù)據(jù)包的分析處理負擔(dān)。數(shù)據(jù)包的過濾是對捕獲的數(shù)據(jù)包的報頭進行分析,依據(jù)過濾準則來決定數(shù)據(jù)包是否需要提交高層應(yīng)用進行處理。

  過濾準則的設(shè)置主要分為IP地址過濾、協(xié)議過濾、端口過濾三個方面,可分別進行設(shè)置,并通過CFile::Open(″。。/data/filter″,CFile::modeCreate|CFile::modeRead-Write)和CFiIe::Write(&m_Filter,sizeof(m_Filter))分別寫入配置文件。過濾準則依照以下方式進行工作:

 ?。?)當(dāng)數(shù)據(jù)包到達NIC時,對數(shù)據(jù)包的各級包頭進行協(xié)議分析。

 ?。?)過濾準則無設(shè)置時,默認接收該準則權(quán)限內(nèi)的所有數(shù)據(jù)包。

 ?。?)若3個過濾準則中的任一個有設(shè)置,數(shù)據(jù)包將依次與IP地址過濾準則、協(xié)議過濾準則、端口過濾準則匹配,若存在一條準則拒絕接收該數(shù)據(jù)包,并丟棄。

 ?。?)如果一個數(shù)據(jù)包滿足所有數(shù)據(jù)包過濾準則,則該數(shù)據(jù)包被提交給高層應(yīng)用。

  3、數(shù)據(jù)包捕獲及過濾實現(xiàn)

網(wǎng)絡(luò)嗅探器工作原理及驅(qū)動流程

  當(dāng)過濾規(guī)則設(shè)置完成后,核心態(tài)的驅(qū)動程序就可以根據(jù)上層的要求來截獲數(shù)據(jù)包。具體步驟為:

 ?。?)用戶態(tài)程序啟動驅(qū)動服務(wù)程序;

  (2)用戶態(tài)程序調(diào)用CFile::Read(&m_Filter,sizeof(m_Filter))讀取過濾準則;

  (3)調(diào)用DeviceloControl(hFile,IOCTL_ENUM_ADAPTERS,NULL,0,buffer,MAX_ADAPTERS*256,&BytesTxd,NULL)從注冊表中獲取網(wǎng)絡(luò)適配器的信息,并顯示到用戶界面;

 ?。?)用戶選擇適配器綁定并設(shè)置適配器為混雜模式;

  (5)創(chuàng)建事件對象,接收數(shù)據(jù)包線程ReadProcessProc()和發(fā)送讀請求線程ReadRequestProc()使用事件機制來同步、協(xié)調(diào)工作,使得讀隊列不太長,也不為空;

  (6)ReadRequestProc()調(diào)用WaitForSingleObject函數(shù)等待事件發(fā)生,當(dāng)讀請求隊列長度小于設(shè)定的最小長度時,調(diào)用SetEvent沒置事件為有信號狀態(tài),線程不斷地發(fā)出讀請求,保持驅(qū)動程序的讀隊列不為空,防止丟包發(fā)生;當(dāng)讀請求隊列長度超出設(shè)定的最大長度時,調(diào)用ResetEvent設(shè)置事件為無信號狀態(tài),線程停止發(fā)送讀請求;

 ?。?)ReadProcessProc()檢查完成端口狀態(tài),有讀請求時,在PtReceive/PtReceivePacket函數(shù)中處理收到的數(shù)據(jù)包,當(dāng)有數(shù)據(jù)包符合所有的過濾條件時,將其復(fù)制到共享內(nèi)存,收取數(shù)據(jù)并按照過濾準則考慮是否通知用戶界面程序讀取數(shù)據(jù);

  (8)應(yīng)用層接到NDIS中間層驅(qū)動程序的事件通知后,獲取共享內(nèi)存隊列中的數(shù)據(jù),做進一步的處理,繼續(xù)循環(huán)等待。

  總結(jié)

  實現(xiàn)基于NDIS中間層驅(qū)動程序的網(wǎng)絡(luò)嗅探器,具有良好的結(jié)構(gòu)性、擴展性、并行性、效率性和可編程性,能夠?qū)W(wǎng)絡(luò)中的各層進行訪問,并且能收發(fā)基于這些層的各種協(xié)議數(shù)據(jù)包。該嗅探器運行于系統(tǒng)的核心層,最大限度地提高了系統(tǒng)的數(shù)據(jù)處理效率,在單位內(nèi)部網(wǎng)絡(luò)安全監(jiān)控以及網(wǎng)絡(luò)入侵檢測等方面發(fā)揮了重要的作用。

非常好我支持^.^

(13) 86.7%

不好我反對

(2) 13.3%

( 發(fā)表人:羅勇杰 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?