基于ARP欺騙的網(wǎng)絡(luò)監(jiān)聽技術(shù)研究
引言
當(dāng)前局域網(wǎng)大部分屬于以太網(wǎng),其主要連接方式主要是通過交換機(jī)進(jìn)行連接。交換機(jī)在外型上類似于集線器,但在內(nèi)部采用了電路交換的原理,將一個端口的輸入交換到另一指定的端口。交換式以太網(wǎng)彌補(bǔ)了共享式以太網(wǎng)(用集線器連接的網(wǎng)絡(luò))的缺陷,但也從一定程度上增加了網(wǎng)絡(luò)監(jiān)聽的難度。交換機(jī)在工作時維護(hù)著一張ARP的數(shù)據(jù)庫表,在這個庫中記錄著交換機(jī)每個端口綁定的MAC地址,當(dāng)有數(shù)據(jù)包發(fā)送到交換機(jī)上時,交換機(jī)會將數(shù)據(jù)包的目的MAC地址與自己維護(hù)的數(shù)據(jù)庫內(nèi)的端口對照,然后將數(shù)據(jù)包發(fā)送到相應(yīng)的端口上。交換機(jī)與集線器最大的不同是通信數(shù)據(jù)包不再復(fù)制到其他所有端口,而是精確地發(fā)往目標(biāo)機(jī)器所在的那個端口,所以,其它機(jī)器就無法監(jiān)聽這種目的性較強(qiáng)的通信,當(dāng)然也就無法實現(xiàn)數(shù)據(jù)包的抓取了。因此我們需要在交換式以太網(wǎng)中尋求一種簡單方便的監(jiān)控部署軟件,以實現(xiàn)對現(xiàn)在廣泛存在的交換式以太網(wǎng)進(jìn)行有效的監(jiān)聽。
1 ARP協(xié)議及欺騙技術(shù)
1.1 ARP協(xié)議
IP數(shù)據(jù)包常通過以太網(wǎng)發(fā)送,以太網(wǎng)設(shè)備并不識別32位IP地址,它們是以48位以太網(wǎng)地址傳輸以太網(wǎng)數(shù)據(jù)包的。因此,IP 驅(qū)動器必須把IP目的地址轉(zhuǎn)換成以太網(wǎng)目的地址。在這兩種地址之間存在著某種靜態(tài)的或算法的映射,常常需要查看一張表。ARP地址解析協(xié)議 (Address Resolution Protocol)就是負(fù)責(zé)把網(wǎng)絡(luò)層的IP地址轉(zhuǎn)變成數(shù)據(jù)鏈路層的MAC地址, 建立IP地址和MAC地址之間的一一映射。ARP協(xié)議的基本功能就是通過目標(biāo)設(shè)備的IP地址,查詢目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。
1.2 ARP欺騙技術(shù)
ARP 協(xié)議雖然是一個高效的數(shù)據(jù)鏈路層協(xié)議,但是作為一個局域網(wǎng)協(xié)議,它是建立在各主機(jī)之間相互信任的基礎(chǔ)上的,因此也存在一些安全問題。根據(jù)ARP 協(xié)議存在的這些安全問題,可以使用以下幾種手段來進(jìn)行ARP欺騙:
(1) 攻擊者也就可以在接收到該ARP請求包之后進(jìn)行應(yīng)答,進(jìn)行假冒。
(2) 由于被假冒的機(jī)器所發(fā)送的ARP應(yīng)答包有可能比攻擊者的應(yīng)答包晚到達(dá),為了確保被攻擊者機(jī)器上的緩存中絕大部分時間存放的是攻擊者的MAC地址,可以在收到ARP請求廣播后稍微延遲一段時間再發(fā)送一遍ARP應(yīng)答。
(3) 由于各種操作系統(tǒng)對于ARP緩存處理實現(xiàn)的不同,一些操作系統(tǒng)(例如Linux)會用向緩存地址發(fā)非廣播的ARP請求來要求更新緩存。在交換網(wǎng)絡(luò)環(huán)境下,別的機(jī)器是不能捕獲到這種緩存更新的,這就需要盡量阻止主機(jī)發(fā)送更新緩存消息。
ARP欺騙技術(shù)可以實現(xiàn)全交換環(huán)境下的數(shù)據(jù)監(jiān)聽。因此,我們可以利用該技術(shù)對交換式以太網(wǎng)進(jìn)行監(jiān)控。
2 采用ARP欺騙技術(shù)捕獲交換式以太網(wǎng)數(shù)據(jù)
通過前面的敘述,我們知道,交換式以太網(wǎng)可以利用ARP欺騙技術(shù)進(jìn)行監(jiān)控。下面說明如何采用ARP欺騙技術(shù)捕獲交換式以太網(wǎng)數(shù)據(jù)。
2.1 ARP協(xié)議實現(xiàn)
在以太網(wǎng)上解析IP地址時,ARP請求和應(yīng)答分組的格式如圖2所示
以太網(wǎng)目的地址 | 以太網(wǎng)源地址 | 幀類型 | 數(shù)據(jù)類型 | 協(xié)議類型 | 硬件地址長度 | 協(xié)議地址長度 | 操作類型 | 發(fā)送端以太網(wǎng)地址 | 發(fā)送端IP地址 | 接收端以太網(wǎng)地址 | 接收端IP地址 |
6 6 2 2 2 1 1 2 6 4 6 4
以太網(wǎng)報頭中的前兩個字段是以太網(wǎng)的目的地址和源地址。目的地址為全1的特殊地址是廣播地址。同一局域網(wǎng)上的所有以太網(wǎng)接口都要接收廣播數(shù)據(jù)幀。接著是以太網(wǎng)幀類型,2字節(jié)長,表示后面數(shù)據(jù)的類型。對于ARP請求或應(yīng)答來說,該字段的值為0x0806。硬件類型字段表示硬件地址的類型。值為1即表示以太網(wǎng)地址。協(xié)議類型字段表示要映射的協(xié)議地址類型。值為0x0800即表示IP地址。硬件地址長度和協(xié)議地址長度分別指出硬件地址和協(xié)議地址的長度,以字節(jié)為單位。對于以太網(wǎng)上IP地址的ARP請求或應(yīng)答來說,它們的值分別為6和4。操作字段指出操作類型,可以為ARP請求(值為1)、ARP應(yīng)答(值為2)。其余的四個字段是發(fā)送端的硬件地址(以太網(wǎng)地址)、發(fā)送端的協(xié)議地址(IP地址)、目的端的硬件地址和目的端的協(xié)議地址。
對于ARP請求來說,除目的端硬件地址外的所有其它的字段都有填充值。當(dāng)系統(tǒng)收到一份目的端為本機(jī)的ARP請求報文后,它就把硬件地址填進(jìn)去,然后用兩個目的端地址分別替換兩個發(fā)送端地址,并把操作字段置為2,最后把它發(fā)送回去。
由以上的分析可知,ARP數(shù)據(jù)包用C語言表示如下:
typedef struct _ARP_RHDR
{
UCHAR HardwareType[2];//數(shù)據(jù)類型,以太網(wǎng)為OX0001
UCHAR ProtocolType[2];//協(xié)議類型
UCHAR LengthOfHardware;//硬件地址長度
UCHAR LengthOfProtocol;//協(xié)議地址長度
UCHAR OpCode[2];//操作類型
UCHAR SrcMAC[6];// 發(fā)送端以太網(wǎng)地址
UCHAR SrcIP[4];// 發(fā)送端IP地址
UCHAR DesMAC[6];// 接收端以太網(wǎng)地址
UCHAR DesIP[4];// 接收端IP地址
}
ARP_RHDR,*PARP_RHDR;
2.2利用ARP欺騙在交換網(wǎng)絡(luò)下捕包
由以上對 ARP 協(xié)議的分析和對其原理的介紹可知,利用 ARP 欺騙已經(jīng)可以使子網(wǎng)內(nèi)的別的機(jī)器的網(wǎng)絡(luò)流量都會流到攻擊者機(jī)器來,為了使他們還能夠“正常”地使用網(wǎng)絡(luò),攻擊者就必須將他們的數(shù)據(jù)包轉(zhuǎn)發(fā)到他們真正應(yīng)該到達(dá)的主機(jī)去,這就需要進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā),因此,要實現(xiàn)交換式以太網(wǎng)正常的網(wǎng)絡(luò)監(jiān)控,就要使用ARP欺騙結(jié)合IP轉(zhuǎn)發(fā)的發(fā)式來進(jìn)行捕包,可以使用兩個線程:一個進(jìn)行數(shù)據(jù)包的獲取、分析和轉(zhuǎn)發(fā),一個定時發(fā)送ARP應(yīng)答包。
在網(wǎng)絡(luò)監(jiān)控系統(tǒng)中,實現(xiàn)對 HTTP 訪問則是基于目標(biāo)地址的過濾,通過對 IP 首部的各個數(shù)據(jù)域的分析判斷 Destination IP Address 是否屬于規(guī)則庫中設(shè)定限制訪問集合,如果是,系統(tǒng)可以采用一定的手段阻止用戶的繼續(xù)訪問,采用的方法是切斷或關(guān)閉TCP連接。我們可以人為的構(gòu)造一個FIN報文發(fā)送給用戶,從而關(guān)閉用戶與Web服務(wù)器間的TCP連接,禁止用戶對該URL地址的訪問。Winpcap庫的核心函數(shù)pcap_sendpacket提供了繞過操作系統(tǒng)正常網(wǎng)絡(luò) Socket編程而直接讀寫網(wǎng)卡的能力,在完成該TCP連接的重要信息分析后,即可完成對其的強(qiáng)制中斷。在構(gòu)造中斷TCP報文時,需要將源、目的IP進(jìn)行交換,源、目的端口交換,然后將標(biāo)志位置為RST,然后使用 pcap_sendpacket 直接將報文發(fā)送即可實現(xiàn)目的。核心實現(xiàn)函數(shù):
Void SendData(PIP_RHDR IpData)
{
PTCP_RHDR ptcpheader=(PTCP_RHDR)IpData->Data;
int iRstFlag = ptcpheader->Flags & 0x04;
if(iRstFlag = 0x04)
return;
……
SetMACToEther(MACADDR_SRC,&EtherFrame,0);//源為發(fā)到本機(jī)的 mac
SetMACToEther(MACCADDR_GATEWAY,&EtherFrame,1);//目標(biāo)為默認(rèn)網(wǎng)關(guān)的 mac
……
}
3 軟件的實現(xiàn)和結(jié)論
基于ARP欺騙的網(wǎng)絡(luò)監(jiān)聽軟件采用了虛擬路由技術(shù),以實現(xiàn)報文的收發(fā)。軟件經(jīng)過測試,基本上達(dá)到了預(yù)期的目的。這樣的系統(tǒng),可以用來對現(xiàn)在正在使用的,用于各種功能的交換式以太網(wǎng)(如校園網(wǎng)、企業(yè)網(wǎng)等)進(jìn)行監(jiān)聽,從而解決在網(wǎng)絡(luò)管理上的諸多不便,進(jìn)而實現(xiàn)網(wǎng)絡(luò)管理的最終目標(biāo)——資源的合理、充分利用和提供可靠的通信服務(wù)。