柴王愛(ài),黃文康
摘要:ARP(Address Resolution Protocol)基本功能是通過(guò)目標(biāo)設(shè)備的IP地址,查詢(xún)目標(biāo)設(shè)備的MAC地址,以保證通信的順利進(jìn)行。然而,一些非法的入侵者和網(wǎng)絡(luò)監(jiān)聽(tīng)者,利用各種技術(shù)和手段,篡改IP地址與MAC地址之間的對(duì)應(yīng)關(guān)系,從而“冒名頂替”他人的MAC地址,以達(dá)到非法監(jiān)聽(tīng)和獲取他人在網(wǎng)絡(luò)上傳輸?shù)男畔⒌哪康?,這種網(wǎng)絡(luò)入侵方式為ARP欺騙入侵。它是近年來(lái)網(wǎng)絡(luò)入侵攻擊的主要形式之一,嚴(yán)重威脅著網(wǎng)絡(luò)信息的安全。針對(duì)以上問(wèn)題,該文開(kāi)發(fā)了一套ARP防火墻系統(tǒng),通過(guò)對(duì)局域網(wǎng)內(nèi)ARP數(shù)據(jù)包的分析,實(shí)現(xiàn)對(duì)局域網(wǎng)內(nèi)所有的主機(jī)進(jìn)行檢測(cè)和監(jiān)控,及時(shí)發(fā)現(xiàn)局域網(wǎng)內(nèi)的ARP攻擊行為,將其廣播給網(wǎng)關(guān)和局域網(wǎng)內(nèi)所有主機(jī),并對(duì)該攻擊進(jìn)行防御和處理,從而解決局域網(wǎng)內(nèi)由于ARP攻擊所造成的網(wǎng)絡(luò)癱瘓問(wèn)題。
關(guān)鍵詞:MAC;ARP攻擊;數(shù)據(jù)包捕獲;ARP攻擊的檢測(cè)與防范
中圖分類(lèi)號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)02-0269-03
隨著現(xiàn)在社會(huì)信息技術(shù)的飛速發(fā)展,如今企業(yè)網(wǎng)絡(luò)辦公化也正式步入了無(wú)線(xiàn)網(wǎng)的領(lǐng)域中。構(gòu)建無(wú)線(xiàn)網(wǎng)最大的好處就是組網(wǎng)無(wú)需布線(xiàn),使用便捷,經(jīng)濟(jì)。所以對(duì)多數(shù)企業(yè)來(lái)說(shuō),無(wú)疑是組網(wǎng)方案的最佳選擇。大量的無(wú)線(xiàn)路由器被用于企業(yè)中,使得針對(duì)無(wú)線(xiàn)網(wǎng)絡(luò)的故障診斷和安全保障變得與有線(xiàn)網(wǎng)絡(luò)一樣重要。
ARP攻擊以及非法入侵未設(shè)防的無(wú)線(xiàn)局域網(wǎng)已經(jīng)是現(xiàn)在導(dǎo)致聯(lián)網(wǎng)異常的典型案例了。由于安全設(shè)置的疏忽以及后期安全防護(hù)的不足,導(dǎo)致少數(shù)具有惡意的黑客對(duì)企業(yè)的重要信息及保密數(shù)據(jù)造成了極大的危害。
另一方面,在我們?nèi)粘5纳暇W(wǎng)過(guò)程中,我們經(jīng)常會(huì)碰到諸如網(wǎng)絡(luò)經(jīng)常無(wú)緣無(wú)故的掉線(xiàn),或者突然提示你IP有沖突,甚至網(wǎng)速慢得連網(wǎng)頁(yè)都打不開(kāi)等網(wǎng)絡(luò)問(wèn)題。這些問(wèn)題的根源就是ARP攻擊。ARP攻擊已經(jīng)成為困擾人們?nèi)粘I暇W(wǎng)行為的主要黑客攻擊。
本文研究的ARP防火墻系統(tǒng)可有效解決以上問(wèn)題。
1基于ARP協(xié)議的網(wǎng)絡(luò)攻擊的原理
在TCP/IP網(wǎng)絡(luò)環(huán)境下,一個(gè)IP包走到哪里、怎么走是靠路由表定義的。但是,當(dāng)IP包到達(dá)該網(wǎng)絡(luò)后,哪臺(tái)機(jī)器響應(yīng)這個(gè)IP包?則是靠該IP包中所包含的物理地址來(lái)識(shí)別的。也就是說(shuō),只有機(jī)器的物理地址和該IP包中的物理地址相同的機(jī)器才會(huì)應(yīng)答這個(gè)IP包。因?yàn)樵诰W(wǎng)絡(luò)中,每一臺(tái)主機(jī)都會(huì)有發(fā)送IP包的時(shí)候,所以,在每臺(tái)主機(jī)的內(nèi)存中都有一個(gè)IP地址到物理地址的轉(zhuǎn)換表,它通常是動(dòng)態(tài)的轉(zhuǎn)換表(但在路由中,該ARP表可以被設(shè)置成靜態(tài))。
1.1 ARP協(xié)議的工作原理
從下面兩種情況來(lái)探討ARP的工作原理:
情況一:將本地網(wǎng)絡(luò)的主機(jī)IP地址解析為MAC地址。ARP解析過(guò)程分4步進(jìn)行:1)當(dāng)一臺(tái)主機(jī)要與別的主機(jī)通信時(shí),初始化ARP請(qǐng)求。當(dāng)該IP確定為本地IP時(shí),源主機(jī)在ARP緩存中查找目標(biāo)主機(jī)的硬件地址。2)若找不到映射,ARP就建立一個(gè)請(qǐng)求,源主機(jī)IP地址和硬件地址會(huì)被包括在請(qǐng)求中,該請(qǐng)求通過(guò)廣播,使所有本地主機(jī)均能接收并處理。3)本地網(wǎng)上的每個(gè)主機(jī)都收到廣播并尋找相符的IP地址。4)當(dāng)目標(biāo)主機(jī)斷定請(qǐng)求中的IP地址與自己的IP地址相符時(shí),直接發(fā)送一個(gè)ARP答復(fù),將自己的硬件地址MAC地址傳給源主機(jī)。以源主機(jī)的IP和MAC地址更新它的ARP緩存。源主機(jī)收到回答后便建立起了通信關(guān)系。
情況二:將遠(yuǎn)程網(wǎng)絡(luò)的主機(jī)IP地址解析為MAC地址。當(dāng)不同網(wǎng)絡(luò)中的主機(jī)互相通信時(shí),因目標(biāo)IP地址是一個(gè)遠(yuǎn)程網(wǎng)絡(luò)主機(jī)的地址,ARP將廣播一個(gè)路由器(源主機(jī)的缺省網(wǎng)關(guān))的地址。ARP解析過(guò)程分3步進(jìn)行:1)初始化通信請(qǐng)求,得知目標(biāo)IP為遠(yuǎn)程地址。源主機(jī)在本地路由表中查找,若無(wú),源主機(jī)就認(rèn)為是缺省網(wǎng)關(guān)。在ARP緩存中查找符合該網(wǎng)關(guān)記錄的IP的MAC地址。2)若沒(méi)找到該網(wǎng)關(guān)的記錄,ARP將廣播一個(gè)包含網(wǎng)關(guān)地址而不是目標(biāo)主機(jī)的地址的請(qǐng)求。路由器用自己的硬件地址響應(yīng)源主機(jī)的獲取它的硬件地址MAC地址。3)如果此網(wǎng)關(guān)的硬件地址不在ARP緩存中,通過(guò)ARP廣播獲得。一旦它獲得硬件地址,ICMP響應(yīng)就送到路由器上,然后傳回源主機(jī)。
1.2基于ARP協(xié)議的網(wǎng)絡(luò)攻擊過(guò)程
從ARP的工作原理可以看出,當(dāng)計(jì)算機(jī)發(fā)送ARP請(qǐng)求,監(jiān)聽(tīng)ARP回答,并定期更新ARP高速緩存時(shí),一個(gè)黑客或惡意攻擊者完全可能發(fā)送一個(gè)帶有欺騙性的ARP請(qǐng)求和回答,以至于改變另一個(gè)主機(jī)的ARP高速緩存中的地址映射(即IP與MAC的對(duì)應(yīng)關(guān)系),使得該被攻擊的主機(jī)在地址解析時(shí)發(fā)生錯(cuò)誤結(jié)果,導(dǎo)致所封裝的數(shù)據(jù)被發(fā)往黑客所希望的目的主機(jī),從而使數(shù)據(jù)信息被劫取。
可見(jiàn),利用ARP欺騙,一個(gè)入侵者可以利用基于IP的安全性不足,冒用一個(gè)合法IP來(lái)進(jìn)入主機(jī),捕獲專(zhuān)用的或者機(jī)密的信息;可以用來(lái)危害網(wǎng)絡(luò)鄰居的安全,或者用來(lái)獲取更高級(jí)別的訪問(wèn)權(quán)限;分析網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)行網(wǎng)絡(luò)滲透。
2系統(tǒng)結(jié)構(gòu)設(shè)計(jì)及實(shí)現(xiàn)
2.1系統(tǒng)結(jié)構(gòu)
圖1系統(tǒng)結(jié)構(gòu)
2.2實(shí)現(xiàn)
2.2.1原始數(shù)據(jù)包捕獲
原始數(shù)據(jù)包捕獲技術(shù)是調(diào)用了一個(gè)開(kāi)源包WinPcap包。WinPcap是一個(gè)Win32平臺(tái)的,用于捕獲數(shù)據(jù)包和進(jìn)行網(wǎng)絡(luò)分析的體系結(jié)構(gòu)。它包括了一個(gè)內(nèi)核級(jí)的數(shù)據(jù)包過(guò)濾器,一個(gè)低層動(dòng)態(tài)鏈接庫(kù)(packet.dll),一個(gè)高層的,依賴(lài)于系統(tǒng)的庫(kù)(wpcap.dll)。Win? Pcap數(shù)據(jù)包捕獲的主要過(guò)程:
首先,抓包系統(tǒng)必須繞過(guò)操作系統(tǒng)的協(xié)議棧來(lái)訪問(wèn)在網(wǎng)絡(luò)上傳輸?shù)脑紨?shù)據(jù)包(raw packet),這就要求一部分運(yùn)行在操作系統(tǒng)核心內(nèi)部,直接與網(wǎng)絡(luò)接口驅(qū)動(dòng)交互。這個(gè)部分是系統(tǒng)依賴(lài)(system dependent)的,在Winpcap的解決方案里它被認(rèn)為是一個(gè)設(shè)備驅(qū)動(dòng),稱(chēng)作NPF(Netgroup Packet Filter)。Winpcap開(kāi)發(fā)小組針對(duì)Windows95,Windows98,WindowsME,Windows NT 4,Windows2000和WindowsXP提供了不同版本的驅(qū)動(dòng)。這些驅(qū)動(dòng)不僅提供了基本的特性(例如抓包和injection),還有更高級(jí)的特性(例如可編程的過(guò)濾器系統(tǒng)和監(jiān)視引擎)。前者可以被用來(lái)約束一個(gè)抓包會(huì)話(huà)只針對(duì)網(wǎng)絡(luò)通信中的一個(gè)子集(例如,僅僅捕獲特殊主機(jī)產(chǎn)生的ftp通信的數(shù)據(jù)包),后者提供了一個(gè)強(qiáng)大而簡(jiǎn)單的統(tǒng)計(jì)網(wǎng)絡(luò)通信量的機(jī)制(例如,獲得網(wǎng)絡(luò)負(fù)載或兩個(gè)主機(jī)間的數(shù)據(jù)交換量)。
其次,抓包系統(tǒng)必須有用戶(hù)級(jí)的程序接口,通過(guò)這些接口,用戶(hù)程序可以利用內(nèi)核驅(qū)動(dòng)提供的高級(jí)特性。Winpcap提供了兩個(gè)不同的庫(kù):packet.dll和wpcap.dll。前者提供了一個(gè)底層API,伴隨著一個(gè)獨(dú)立于Microsoft操作系統(tǒng)的編程接口,這些API可以直接用來(lái)訪問(wèn)驅(qū)動(dòng)的函數(shù);后者導(dǎo)出了一組更強(qiáng)大的與Libpcap一致的高層抓包函數(shù)庫(kù)(capture primitives)。這些函數(shù)使得數(shù)據(jù)包的捕獲以一種與網(wǎng)絡(luò)硬件和操作系統(tǒng)無(wú)關(guān)的方式進(jìn)行。
2.2.2數(shù)據(jù)包分析
以ARP數(shù)據(jù)包為例,介紹數(shù)據(jù)包分析的過(guò)程。
/*ARP協(xié)議分析函數(shù)*/
CString m_protocol_temp="ARP";
CString m_info_temp;//臨時(shí)變量
CString m_data_temp;//臨時(shí)變量
struct arp_header *arp_protocol;// ARP包頭
u_short protocol_type;//協(xié)議類(lèi)型
u_short hardware_type;//硬件類(lèi)型
u_short operation_code;//操作:請(qǐng)求1,回答2
u_char *smac_string;//源主機(jī)MAC串
u_char *dmac_string;//目的主機(jī)MAC串
u_char *ip_str;// IP串
struct in_addr source_ip_address;//源主機(jī)IP地址
struct in_addr destination_ip_address; //目的主機(jī)IP地址
u_char hardware_length;//硬件長(zhǎng)度
u_char protocol_length;//協(xié)議長(zhǎng)度
arp_protocol = (struct arp_header *) (temp_data_arp+14);
//去掉以太網(wǎng)頭
hardware_type = ntohs(arp_protocol->arp_hardware_type);
protocol_type = ntohs(arp_protocol->arp_protocol_type);
operation_code = ntohs(arp_protocol->arp_operation_code);
hardware_length = arp_protocol->arp_hardware_length;
protocol_length = arp_protocol->arp_protocol_length;
//打印源MAC地址和IP地址
smac_string=arp_protocol->arp_source_ethernet_address;memcpy((void *) & source_ip_address, (void *) &arp_protocol->arp_source_ ip_address, sizeof(struct in_addr));
//打印目的MAC地址和IP地址
dmac_string = arp_protocol->arp_destination_ethernet_address;
memcpy((void *) &destination_ip_address, (void *) &arp_protocol->arp_destination_ip_address, sizeof(struct in_addr)); switch(operation_code)
{
case 1: m_info_single = " ARP Request";
break;
case 2: m_info_single = " ARP Response";
break;
case 3: m_info_single = " ARP Request";
break;
case 4: m_info_single = " ARP Response";
break;
default:
break;
}
2.2.3問(wèn)題ARP數(shù)據(jù)包過(guò)濾
在原始數(shù)據(jù)包捕獲過(guò)程中,有一個(gè)循環(huán)緩沖區(qū),用來(lái)保存數(shù)據(jù)包并且避免丟失。一個(gè)保存在緩沖區(qū)中的數(shù)據(jù)包有一個(gè)頭,它包含了一些主要的信息,例如時(shí)間戳和數(shù)據(jù)包的大小,但它不是協(xié)議頭。系統(tǒng)針對(duì)ARP數(shù)據(jù)包,對(duì)時(shí)間戳進(jìn)行計(jì)算,判斷來(lái)自同一計(jì)算機(jī)的ARP數(shù)據(jù)包發(fā)送是否過(guò)于頻繁,進(jìn)而通過(guò)WinPcap的過(guò)濾器對(duì)ARP數(shù)據(jù)報(bào)進(jìn)行過(guò)濾。實(shí)現(xiàn)有效的防止ARP攻擊(ARP欺騙)。
過(guò)濾規(guī)則設(shè)置:
struct bpf_program bpf_filter;// BPF過(guò)濾規(guī)則
char *bpf_filter_string= "";//過(guò)濾規(guī)則字符串
//設(shè)置過(guò)濾規(guī)則
if(pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,1,net_mask)<0)
{
AfxMessageBox("過(guò)濾規(guī)則出錯(cuò)!");
return 1;
}
//編譯過(guò)濾規(guī)則
if(pcap_setfilter(pcap_handle, &bpf_filter)<0)
{
AfxMessageBox("過(guò)濾規(guī)則出錯(cuò)!將使用默認(rèn)方式捕獲數(shù)據(jù)包");
return 1;
}
//設(shè)置過(guò)濾規(guī)則
if (pcap_datalink(pcap_handle) != DLT_EN10MB)
{
AfxMessageBox("不在局域網(wǎng)內(nèi)");
return 1;
}
3軟件簡(jiǎn)介
以VC++ 6.0進(jìn)行編譯、運(yùn)行,系統(tǒng)軟件界面及數(shù)據(jù)包捕獲過(guò)程,具體參數(shù)有本地連接、信息中的IP地址和子網(wǎng)掩碼、數(shù)據(jù)包捕獲、數(shù)據(jù)包信息以及數(shù)據(jù)包數(shù)據(jù)。
4總結(jié)
本系統(tǒng)主要實(shí)現(xiàn)兩方面大的功能:
1)捕獲數(shù)據(jù)包,分析數(shù)據(jù)包。這部分功能類(lèi)似與網(wǎng)絡(luò)上的協(xié)議分析軟件,如Linux系統(tǒng)下TCPDump,Windows下的WinDump,主要是捕獲本地計(jì)算機(jī)網(wǎng)絡(luò)接口上的數(shù)據(jù)包,對(duì)數(shù)據(jù)報(bào)進(jìn)行協(xié)議分析,判斷數(shù)據(jù)包是何種網(wǎng)絡(luò)數(shù)據(jù)。由于本系統(tǒng)是ARP防火墻的設(shè)計(jì)與開(kāi)發(fā),所以ARP數(shù)據(jù)包是重點(diǎn)分析的對(duì)象。
2)過(guò)濾問(wèn)題ARP數(shù)據(jù)包。對(duì)于網(wǎng)絡(luò)上廣播的ARP數(shù)據(jù)包,系統(tǒng)需要即使對(duì)數(shù)據(jù)進(jìn)行分析,判斷數(shù)據(jù)包是否為ARP攻擊數(shù)據(jù)包。進(jìn)而采取相應(yīng)的過(guò)濾規(guī)則將數(shù)據(jù)包過(guò)濾。
另外,本系統(tǒng)功能雖然單一,但是較有針對(duì)性,因此為較有效使用的軟件。
參考文獻(xiàn):
[1]朱雁輝.Windows防火墻與網(wǎng)絡(luò)封包截獲技術(shù)[M].北京:電子工業(yè)出版社,2002.
[2]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)[M].2版.北京:電子工業(yè)出版社,1999.
[3]張?jiān)?計(jì)算機(jī)網(wǎng)絡(luò)[M].北京:清華大學(xué)出版社,2003.
[4]孟曉明.基于ARP的網(wǎng)絡(luò)欺騙的檢測(cè)與防范[J].信息技術(shù),2005,29(5).
[5]劉文濤.網(wǎng)絡(luò)安全開(kāi)發(fā)包詳解[M].北京:電子工業(yè)出版社,2005.