網(wǎng)卡混雜模式的檢測
1.簡介在局域網(wǎng)中,嗅探行為已經(jīng)成為網(wǎng)絡(luò)安全的一個巨大威脅。通過網(wǎng)絡(luò)嗅探,一些惡意用戶能夠很容易地竊取到絕密的文檔和任何人的隱私。要實現(xiàn)上述目的非常容易,惡意用戶只要從網(wǎng)絡(luò)上下載嗅探器并安全到自己的計算機就可以了。然而,卻沒有一個很好的方法來檢測網(wǎng)絡(luò)上的嗅探器程序。本文將討論使用地址解析協(xié)議(Address Resolution Protocol)報文來有效地檢測辦公網(wǎng)絡(luò)和校園網(wǎng)上的嗅探器程序。
2.網(wǎng)絡(luò)嗅探的原理局域網(wǎng)通常使用以太網(wǎng)進行連接。在以太網(wǎng)線纜上使用IP(IPV4)協(xié)議傳輸?shù)膫鬟f的信息是明文傳輸?shù)?,除非使用了加密程序進行了加密。當一個人把信息發(fā)送到網(wǎng)絡(luò)上,他會希望只有特定的用戶才能收到這些信息。但是,非常不幸,以太網(wǎng)的工作機制為非驗證用戶提供了竊取這些數(shù)據(jù)的機會。以太網(wǎng)在進行信息傳輸時,會把分組送到各個網(wǎng)絡(luò)節(jié)點,目的地址匹配的節(jié)點會接收這些分組,其它的網(wǎng)絡(luò)節(jié)點只做簡單的丟棄操作。而接收還是丟棄這些分組由以太網(wǎng)卡控制。在接收分組時,網(wǎng)卡會過濾出目的地址是自己的分組接收,而不是照單全收。在本文以后的部分我們將把網(wǎng)卡的這種過濾稱為硬件過濾(Hardware Filter)。但是這只是在正常情況下,嗅探器使用另一種工作方式,它把自己的網(wǎng)卡設(shè)置為接收所有的網(wǎng)絡(luò)分組,而不管分組的目的地址是否是自己。這種網(wǎng)卡模式叫作混雜模式(Promiscuous Mode)。
3.檢測混雜模式的基本概念在網(wǎng)絡(luò)中,嗅探器接收所有的分組,而不發(fā)送任何非法分組。它不會妨礙網(wǎng)絡(luò)數(shù)據(jù)的流動,因此很難對其進行檢測。不過,處于混雜模式(promiscuous mode)網(wǎng)卡的狀態(tài)很顯然和處于普通模式下不同。在混雜模式下,應(yīng)該被硬件過濾掉的分組文會進入到系統(tǒng)的內(nèi)核。是否回應(yīng)這種分組完全依賴與內(nèi)核。
下面我們舉一個現(xiàn)實世界中的例子,說明我們檢測處于混雜模式網(wǎng)絡(luò)節(jié)點的方法。設(shè)想一下,在一個會議室中正在舉行一個會議。某個人把耳朵放在會議室就可以進行竊聽(嗅探^_^)。當她(還是個女的,原文如此:P)進行竊聽(嗅探)時,會屏住呼吸,安靜地聆聽會議室內(nèi)所有的發(fā)言。然而,如果此時會議室內(nèi)有人忽然叫竊聽者的名字:“XX太太”,她就可能答應(yīng)“唉”。這聽起來有點好笑,但是完全可以用于網(wǎng)絡(luò)嗅探行為的檢測。網(wǎng)絡(luò)進行網(wǎng)絡(luò)嗅探的節(jié)點會接收網(wǎng)絡(luò)的所有報文,因此其內(nèi)核可能對某些本該被硬件過濾的分組作出錯誤回應(yīng)。根據(jù)這個原理,我們可以通過檢查節(jié)點對ARP報文的響應(yīng)來檢測網(wǎng)絡(luò)的嗅探行為。
4.基礎(chǔ)1).硬件過濾器 首先,我們從處于混雜模式(promiscuous mode)下和普通模式下有何不同開始。以太網(wǎng)的地址是6個字節(jié),制造商為每塊網(wǎng)卡分配的地址在全世界是唯一的,因此理論上沒有相同地址的網(wǎng)卡。在以太網(wǎng)上的所有通訊都是基于這種硬件地址。不過,網(wǎng)卡可以被設(shè)置為不同的過濾模式以接收不同種類的分組。下面就是以太網(wǎng)卡的過濾模式: unicast 網(wǎng)卡接收所有目的地址是自己的分組 broadcast 接收所有廣播分組,以太網(wǎng)廣播分組的目的地址是FFFFFFFFFFFF。這種廣播分組能夠到達網(wǎng)絡(luò)上的所有節(jié)點。 multicast 接收目的地址為指定多投點遞交(multicast)組地址的分組。網(wǎng)卡只接收其地址已經(jīng)預(yù)先在多投點列表中注冊的分組。 all multicast 接收所有多投點遞交廣播分組。 promiscuous 根本不檢查目的地址,接收網(wǎng)絡(luò)上所有的分組。
圖-1描述了硬件過濾器處于在正常情況下和在混雜模式下的區(qū)別。通常,網(wǎng)卡的硬件過濾器被設(shè)置為接收目為單投點遞交(unicast)、廣播(broadcast)和多投點遞交(multicast)地址1的分組。過濾器只接收目的地址為自己的地址、廣播地址(FF FF FF FF FF FF)和多投點地址1(01 00 5E 00 00 01)的分組。2).ARP機制 使用以太網(wǎng)連接的IP網(wǎng)絡(luò)需要依靠以太網(wǎng)進行傳輸。只使用IP地址,報文是無法發(fā)送的。因此,在以太網(wǎng)上需要一種機制來提供IP地址和硬件地址之間的轉(zhuǎn)換。這種機制就是地址解析協(xié)議(Address Resolution Protocol)。ARP屬于網(wǎng)絡(luò)層,和IP處于OSI模型的同一層。在IP網(wǎng)絡(luò)上地址解析是不斷進行的,所以ARP報文比較適合用來檢測處于混雜模式(promiscuous mode)的網(wǎng)絡(luò)節(jié)點。 在下面的例子中,我們將講述使用ARP報文是怎樣解析IP地址的: 例如:網(wǎng)絡(luò)上一臺IP地址為192.168.1.1的PC(X)以太網(wǎng)地址是00-00-00-00-00-01,這臺PC(X)需要向網(wǎng)絡(luò)上另外一臺IP地址為192.168.1.10的PC(Y)發(fā)送消息。在發(fā)送之前,X首先發(fā)出一個ARP請求包查詢192.168.1.10對應(yīng)的以太網(wǎng)地址。查詢包的目的地址被設(shè)置為FF-FF-FF-FF-FF-FF(廣播),從而本地網(wǎng)絡(luò)上的所有節(jié)點都可以收到這個包。收到之后,每個節(jié)點會檢查這個ARP包查詢的IP地址和本機的IP地址是否匹配。如果不同,就忽略這個ARP包;如果匹配(Y)就向X發(fā)出應(yīng)答。X收到應(yīng)答之后就緩存Y的IP/硬件地址。然后,X就可以向Y發(fā)送實際的數(shù)據(jù)。
5.檢測處于混雜模式的節(jié)點 上面講到,報文的過濾狀態(tài)是處于混雜模式狀態(tài)和正常的網(wǎng)絡(luò)節(jié)點的區(qū)別。當網(wǎng)卡被設(shè)置為混雜模式,本該被過濾掉的報文就會進入系統(tǒng)的內(nèi)核。通過這種機制,我們可以檢測到網(wǎng)絡(luò)上處于混雜模式的節(jié)點:我們構(gòu)造一個ARP查詢包,其目的地址不是廣播地址,然后向網(wǎng)絡(luò)上的各個節(jié)點發(fā)送這個ARP查詢包,最后通過各個節(jié)點的回應(yīng)來判斷是否處于混雜模式。 下面我們討論一下整個ARP請求/響應(yīng)的操作過程。首先,產(chǎn)生一個ARP查詢包來解析192.168.1.10的硬件地址。為了使網(wǎng)絡(luò)上的所有節(jié)點都能夠收到這個查詢包,把這個包的目的地址設(shè)置為廣播地址。理論上,只有IP地址為192.168.1.10的網(wǎng)卡才能對這個查詢包進行響應(yīng)。 進一步設(shè)想,如果我們把這個查詢包的目的地址(以太網(wǎng)地址)設(shè)置為另外的地址,而不是原來的廣播地址又將如何?例如:我們把查詢包的目的地址設(shè)置為00-00-00-00-00-01會發(fā)生什么?處于正常模式下網(wǎng)絡(luò)節(jié)點的以太網(wǎng)卡會認為這個查詢包是發(fā)往其它主機的,其硬件過濾器會拒絕接收這個包;然而,如果這個網(wǎng)絡(luò)節(jié)點(192.168.1.10)的以太網(wǎng)卡處于混雜模式(promiscuous mode)下,那么即使以太網(wǎng)地址不匹配,其硬件過濾器也不進行任何過濾,從而使這個查詢包能夠進入到系統(tǒng)的內(nèi)核。因為這個節(jié)點的IP地址和查詢包的要查詢IP地址相同,其內(nèi)核就會認為ARP查詢包到達,應(yīng)該作出應(yīng)答。但是,另我們吃驚的是,這個處于混雜模式節(jié)點的內(nèi)核不會應(yīng)答ARPR查詢包。這種出人意料的結(jié)果說明這個包被系統(tǒng)內(nèi)核過濾掉了。在這里我們把這叫作軟件過濾器。
再進一步,我們可以通過區(qū)別硬件過濾器和軟件過濾器的不同特征來檢測處于混雜模式的網(wǎng)絡(luò)節(jié)點。硬件過濾器一般會阻塞所有無效的分組(這些分組顯然不會進入系統(tǒng)內(nèi)核),因此能夠通過硬件過濾器一般也能夠通過軟件過濾器,這種情況我們不多做討論。現(xiàn)在我們需要構(gòu)造應(yīng)該被被硬件過濾器阻塞,但是卻能夠通過軟件過濾器的報文。如果把這種報文送到各個網(wǎng)絡(luò)節(jié)點,那么處于普通模式下的網(wǎng)絡(luò)節(jié)點將不做應(yīng)答;而處于混雜模式的節(jié)點會進行應(yīng)答。
6.軟件過濾器軟件過濾器依賴于操作系統(tǒng)的內(nèi)核,因此有必要理解系統(tǒng)內(nèi)核軟件過濾器是如何工作的。Linux是開放源瑪系統(tǒng),因此我們能夠獲得其軟件過濾機制。但是對于Micro$oft Windows我們只有憑經(jīng)驗猜測了:(。
1).Linux 在Linux的以太網(wǎng)驅(qū)動模塊中,分組是以硬件地址分類的。
廣播包
FF FF FF FF FF FF
多投點分組
所有的分組都有一個組標志位集合,不包括廣播分組。
TO_US分組
目的地址和本機網(wǎng)卡相同的分組。
OTHERHOST分組
所有目的地址和本機網(wǎng)卡不同的分組。
現(xiàn)在,我們假設(shè)具有組標志位的所有分組都是廣播分組。IP網(wǎng)絡(luò)對應(yīng)的以太網(wǎng)多投點分組的目的地址是01-00-5e-xx-xx-xx,而且,通過校驗組標志位本來就不能對多投點分組進行分類。這個假設(shè)并不錯誤,因為01-00-5e-xx-xx-xx是一個基于IP的多投點地址,但是網(wǎng)卡硬件地址還用于其它高層協(xié)議。
下面,我們看一下ARP模塊的代碼。
if (in_dev == NULL arp->ar_hln != dev->addr_len dev->flags & IFF_NOARP skb->pkt_type == PACKET_OTHERHOST skb->pkt_type == PACKET_LOOPBACK arp->ar_pln != 4) goto out;
Linux內(nèi)核的ARP模塊拒絕所有OTHERHOST類型的分組。接著,ARP模塊將處理廣播、多投點和TO_US類型的分組。表1綜合了硬件過濾器和軟件過濾器對各種ARP分組的過濾處理,1說明:hw(hardware)、sw(software)、res.(response)、gr(group)。
下面,后我們將對這六硬件地址的分組進行詳細描述:
TO_US 網(wǎng)卡在正常模式下,所有地址為TO_US的分組都能夠通過精簡過濾器和軟件過濾器。因此,不管網(wǎng)卡是否處于混雜模式(promiscuous mode)下,ARP模塊都會對其進行響應(yīng)。
OTHERHOST 當網(wǎng)卡處于正常模式下,會拒絕所有地址為OTHERHOST的分組。即使網(wǎng)卡處于混雜模式(promiscuous mode),這種分組也無法通過軟件過濾器,因此這種ARP請求不會收到響應(yīng)。
BROARDCAST 在正常模式下,BROARDCAST分組能夠也能夠通過硬件和軟件過濾器,因此不能用于網(wǎng)絡(luò)節(jié)點混雜模式的檢測。
MULTICAST 在正常模式下,如果分組的硬件地址沒有在多投點地址列表中注冊,網(wǎng)卡將拒絕接收;但是,如果網(wǎng)卡處于混雜模式,這種分組將暢通無阻地穿過硬件過濾器和軟件過濾器。因此,可以使用這種類型的分組來檢測處于混雜模式的網(wǎng)絡(luò)節(jié)點。
group bit 這種類型的分組既不屬于BRODCAST類型也不屬于MULTICAST類型,但是其硬件地址的組位(以太網(wǎng)地址的首字節(jié)低序第一位)置位即:01-00-00-00-00-00。在正常模式下,網(wǎng)卡會拒絕接收此類分組;但是在混雜模式下,這種類型的分組能夠通過硬件過濾器。而在Linux內(nèi)核中,這種類型的分組被歸類為多投點分組進行處理,能夠穿過軟件過濾器。因此,這種類型的分組也能夠用于混雜模式檢測。
2).Micro$oft Windows Windows系統(tǒng)不是開放源碼系統(tǒng),因此不能從源代碼分析其軟件過濾行為。只好由實驗來測試。在實驗中,我們使用了以下的硬件地址:
FF-FF-FF-FF-FF-FF 廣播地址 所有的網(wǎng)絡(luò)節(jié)點都會接收這種分組。通常的ARP查詢包使用這個地址。
FF-FF-FF-FF-FF-FE 偽廣播地址 FF-FF-FF-FF-FF-FE是一種偽廣播地址,它的最后一位丟失。這個地址被用來檢查軟件過濾器是否檢查所有的地址位,是否應(yīng)答。
FF-FF-00-00-00-00-00 16位偽廣播地址 FF-FF-00-00-00-00-00只有前16位和真正的廣播地址相同。如果過濾器函數(shù)只測試廣播地址的第一個字,這個地址就可以歸入廣播地址。
FF-00-00-00-00-00 8位偽廣播地址 這個地址只有前8位和廣播地址相同,如果過濾器函數(shù)只檢查廣播地址的首字節(jié),它也可以歸入廣播地址類。
01-00-00-00-00-00 多投點標記置位地址 這個地址只有多投點標記位(以太網(wǎng)地址的首字節(jié)低序位)被置位,用來檢查過濾器函數(shù)是否也象Linux一樣把它作為多投點地址處理。
01-00-5E-00-00-00 多投點地址0 多投點地址0并不常用,因此我們使用這個地址作為沒有在網(wǎng)卡多投點地址列表中注冊的多投點地址。正常情況下,硬件過濾器應(yīng)該拒絕接收這種分組。但是,如果軟件過濾器不能檢查所有的地址位,這類分組就可能被歸類到多投點地址。因此,如果網(wǎng)卡處于混雜模式(promiscuous mode),內(nèi)核就會進行應(yīng)答。
01-00-5E-00-00-01 多投點地址1 局域網(wǎng)上的所有網(wǎng)絡(luò)節(jié)點都應(yīng)該接收多投點地址1類型的分組。換句話說,默認情況下硬件過濾器允許這類分組通過。但是可以由于網(wǎng)卡不支持多投點模式而不應(yīng)答。因此,這類分組可以用于檢查主機是否支持多投點地址。
即使結(jié)果: 對于這7種類型地址的測試結(jié)果如表2所示。測試是針對Windows85/98/ME/2000和Linux。不出所料,網(wǎng)卡處于正常模式下,內(nèi)核會對所有地址為廣播地址和多投點地址1的分組進行回應(yīng)。 然而,當網(wǎng)卡處于混雜模式下時,每種操作系統(tǒng)的測試結(jié)果不盡相同。Windows95/98/ME會響應(yīng)31、16、8位偽廣播地址的分組。因此,我們可以認為Window9x系列操作系統(tǒng)的軟件過濾器只通過檢測一位來判斷分組地址是否是廣播地址。 Windows2000對地址為31、16位偽廣播地址的分組進行響應(yīng)。因此,我們可以認為WindowsY2K檢查地址的8位來判斷分組地址是否為廣播地址。 Linux內(nèi)核對所有七種地址的分組都會進行響應(yīng)。
7.混雜模式檢測我們可以把這個測試結(jié)果用于局域網(wǎng)處于混雜模式節(jié)點的檢測。下面是具體檢測過程: 1).我們需要檢測IP地址A的主機是否處于混雜模式。我們首先需要構(gòu)造如下格式的ARP分組和以太網(wǎng)幀:
ARP分組: 目的以太網(wǎng)地址 00 00 00 00 00 00(說明1) 發(fā)送方以太網(wǎng)地址 00 11 22 33 44 55(說明2) 高層協(xié)議類型 08 00(IP) 硬件類型 00 01(以太網(wǎng)) 硬件地址長度 06(以太網(wǎng)地址長度) IP地址長度 04 發(fā)送方的IP地址 本機IP地址 目標的IP地址 被檢測主機的IP地址 ARP操作碼 00 01(ARP請求01、ARP應(yīng)答02)
以太網(wǎng)幀: 協(xié)議類型 08 06(ARP) 發(fā)送方的硬件地址 本機以太網(wǎng)卡地址 目標硬件地址 FF FF FF FF FF FE
說明1:這時ARP要查詢的以太網(wǎng)地址,全部填0或者1都可以。 說明2:用自己的以太網(wǎng)地址代替。
2).分組構(gòu)造完成后,我們可以把它發(fā)送到網(wǎng)絡(luò)上。
3).現(xiàn)在我們需要等待目標主機的反應(yīng)。如果目標主機處于正常狀態(tài),這個分組就會被阻塞;但是如果處于混雜模式(promiscuous mode)下,我們就會收到應(yīng)答。
8.檢查所有網(wǎng)絡(luò)節(jié)點只要順序使用第七節(jié)敘述的檢測方法,我們就可能檢測出所有處于混雜模式下的網(wǎng)絡(luò)節(jié)點。但是,某些情況下,會使這種檢測方法失效。
9.異常情況上面講到有一些情況不能使用這種方式進行混雜模式檢測。這些異常情況包括:
1).舊網(wǎng)卡 有些舊網(wǎng)卡不支持多投點列表,例如:3COM EtherlinkIII。分組不經(jīng)過硬件過濾器的檢查就進入軟件過濾器,
2).3COM網(wǎng)卡 安裝在LInux主機的3COM 3c905網(wǎng)卡,默認情況下被設(shè)置為接收所有的多投點分組。因此,我們無法區(qū)別混雜模式和多投點模式。造成這種異常的原因是這種網(wǎng)卡的Linux驅(qū)動模塊不支持多投點列表,網(wǎng)卡就會接收所有多投點分組。注意:Linux安裝程序使用3c59x.o作為這種網(wǎng)卡的驅(qū)動模塊。如果把驅(qū)動模塊改為3c905x.o可以解決這個問題。
3).Windows Y2K分組捕獲驅(qū)動模塊 當WindowsY2K分組捕獲驅(qū)動模塊是動態(tài)加載的,也會產(chǎn)生異常情況。WinPcap2.1(2.01不同)和SMS是用于WindowsY2K的兩種動態(tài)加載分組捕獲驅(qū)動模塊。當它們安裝到WindowsY2K系統(tǒng)中,會有一些特別的反應(yīng)。即使網(wǎng)卡不處于混雜模式下,也會對地址為16為偽廣播地址的分組進行響應(yīng)(使用這兩種驅(qū)動模塊的嗅探器也將無法準確操作)。也就是說,即使嗅探器沒有運行也照樣可以檢測到。可能是Micro$oft為了方便混雜模式的檢測有意為之。