李華峰,陳 虹
(1.唐山師范學(xué)院 計(jì)算機(jī)系,河北 唐山 063000;2.河北廣電網(wǎng)絡(luò)集團(tuán) 唐山子公司,河北 唐山 063000)
隨著我國(guó)經(jīng)濟(jì)的不斷發(fā)展,網(wǎng)絡(luò)的普及化程度也越來(lái)越快。但是由于網(wǎng)絡(luò)通信協(xié)議本身的不完善性,ARP攻擊頻繁的出現(xiàn)在各個(gè)單位的局域網(wǎng)中。ARP攻擊原理是通過(guò)偽造IP地址和MAC地址的對(duì)應(yīng)關(guān)系來(lái)實(shí)現(xiàn)的,本身利用了ARP協(xié)議的漏洞。由于導(dǎo)致了IP和MAC的錯(cuò)誤對(duì)應(yīng),會(huì)破壞計(jì)算機(jī)和交換路由器的ARP路由表。從而導(dǎo)致計(jì)算機(jī)不能正常聯(lián)網(wǎng),嚴(yán)重時(shí)可以竊取內(nèi)網(wǎng)用戶(hù)的信息,從而給用戶(hù)造成了巨大的損失。
網(wǎng)絡(luò)通信協(xié)議中,為了能夠在局域網(wǎng)中實(shí)現(xiàn)快速的通信,在網(wǎng)絡(luò)中的每一臺(tái)計(jì)算機(jī)和交換路由器中都會(huì)有一段緩存專(zhuān)門(mén)用來(lái)保存局域網(wǎng)內(nèi)的 ARP信息。以此來(lái)實(shí)現(xiàn) MAC地址和ARP地址的相互對(duì)應(yīng)。ARP協(xié)議規(guī)定一個(gè)ARP數(shù)據(jù)包的格式應(yīng)當(dāng)包含以下信息:目的地址,源地址,幀類(lèi)型,硬件類(lèi)型,協(xié)議類(lèi)型,硬件地址長(zhǎng)度,協(xié)議地址長(zhǎng)度,包類(lèi)型,發(fā)送端MAC,發(fā)送端IP,目的MAC,目的IP。[1]
當(dāng)局域網(wǎng)中任意一個(gè)節(jié)點(diǎn)(計(jì)算機(jī)或交換路由設(shè)備)需要進(jìn)行通信時(shí),往往需要向外發(fā)送一個(gè)ARP包,而其他的通信節(jié)點(diǎn)接受到了這個(gè)包時(shí),就會(huì)把MAC和IP地址的對(duì)應(yīng)關(guān)系存入到ARP的緩存表中。以后再需要使用時(shí),直接在緩存表中查詢(xún)即可。ARP緩存表由于容量的限制,采用了一種“老化機(jī)制”。這樣可以減少ARP緩存表的長(zhǎng)度,同時(shí)加快查詢(xún)的速度。
由于通信協(xié)議中,ARP地址協(xié)議本身存在著缺陷,ARP表中采用的是動(dòng)態(tài)的更新的方式,同時(shí)通信的節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)中的ARP數(shù)據(jù)包并沒(méi)有驗(yàn)證的機(jī)制。當(dāng)局域網(wǎng)中一個(gè)節(jié)點(diǎn)修改了本來(lái)應(yīng)該發(fā)送的ARP數(shù)據(jù)包,將其中的源地址,發(fā)送端MAC,發(fā)送端IP,目的MAC,目的IP數(shù)據(jù)加以修改,成為了一個(gè)欺騙性的數(shù)據(jù)包,而這個(gè)數(shù)據(jù)包到達(dá)其他節(jié)點(diǎn)時(shí),往往也更新了這些節(jié)點(diǎn)的ARP緩存表。
一個(gè)完整的ARP攻擊過(guò)程包括:
步驟1:首先攻擊發(fā)起節(jié)點(diǎn),需要偽造一個(gè)ARP REPLY數(shù)據(jù)包,將這個(gè)數(shù)據(jù)包中目的地址修改為目標(biāo)節(jié)點(diǎn),而源地址通常修改為攻擊發(fā)起節(jié)點(diǎn)的MAC地址,而源IP修改為網(wǎng)關(guān)的IP。
步驟2:修改完成以后,在局域網(wǎng)中發(fā)送這個(gè)數(shù)據(jù)包。
步驟3:當(dāng)目標(biāo)節(jié)點(diǎn)接受到這個(gè)修改以后的ARP REPLY包,由于采用動(dòng)態(tài)更新的機(jī)制,于是會(huì)刷新本機(jī)的ARP數(shù)據(jù)表,將(網(wǎng)關(guān)IP,網(wǎng)關(guān)MAC)刷新成(網(wǎng)關(guān)IP,攻擊發(fā)起節(jié)點(diǎn)的MAC)。
步驟4:當(dāng)目標(biāo)節(jié)點(diǎn)再次需要訪問(wèn)外部時(shí),由于所有的數(shù)據(jù)需要先通過(guò)網(wǎng)關(guān),而這時(shí)因?yàn)槟繕?biāo)節(jié)點(diǎn)的ARP緩存表中的數(shù)據(jù)已經(jīng)被修改,本來(lái)的數(shù)據(jù)就全部發(fā)送到了攻擊發(fā)起機(jī)。
步驟5:攻擊發(fā)起機(jī)偽造一個(gè)ARP REPLY包,在源MAC地址填入攻擊發(fā)起機(jī)的MAC地址,而源IP部分填入目標(biāo)節(jié)點(diǎn)的IP,目的地址填入網(wǎng)關(guān)MAC、IP,然后將這個(gè)包發(fā)給網(wǎng)關(guān),網(wǎng)關(guān)接收到這個(gè)偽造的ARP REPLY包后,由于源IP為目標(biāo)節(jié)點(diǎn)的IP,于是在它的ARP緩存表里刷新了一項(xiàng),將(目標(biāo)節(jié)點(diǎn)的IP,目標(biāo)節(jié)點(diǎn)的MAC)刷新成(目標(biāo)節(jié)點(diǎn)的IP,攻擊發(fā)起機(jī)的MAC)。
步驟6:這時(shí)候外部傳給目標(biāo)節(jié)點(diǎn)的數(shù)據(jù)包經(jīng)過(guò)網(wǎng)關(guān)時(shí),就通通轉(zhuǎn)發(fā)給攻擊發(fā)起機(jī)。這樣就實(shí)現(xiàn)了阻止目標(biāo)節(jié)點(diǎn)上網(wǎng)的目的。將接收到的包,將目的地址部分修改,其它數(shù)據(jù)不動(dòng)的再轉(zhuǎn)發(fā)出去,這樣就達(dá)到了監(jiān)聽(tīng)的目標(biāo)節(jié)點(diǎn)所有的對(duì)外數(shù)據(jù)包[2]。
由于ARP欺騙通常要在局域網(wǎng)內(nèi)實(shí)現(xiàn),而且必須知道被欺騙的主機(jī)的IP地址和MAC地址,所以為了更好的模擬ARP的欺騙,特地設(shè)計(jì)了掃描模塊,來(lái)取得局域網(wǎng)內(nèi)可以攻擊的目標(biāo)。掃描模塊效果如圖1。
圖1 IP-Mac掃描結(jié)果
采用了線程技術(shù)的掃描模塊的AddIPData模塊,主要的實(shí)現(xiàn)代碼如下
hostAddress=InetAddress.getByName(host);
hostIP=hostAddress.getHostAddress();
hostName=hostAddress.getHostName();
Process pr=rt.exec("nbtstat -a "+host);
bufReader=new BufferedReader_
(new InputStreamReader(pr.getInputStream()));
physicalAddress="未知";
for(int i=1;i<=30;i++){
line=bufReader.readLine();
if(line!=null && line.indexOf("MAC Address")!= -1 ){
physicalAddress = line.substring(18,35);
System.out.print(physicalAddress);
}
}
基于 ARP欺騙的原理,設(shè)計(jì)了 ARP欺騙模型并通過(guò)Java語(yǔ)言實(shí)現(xiàn),主要包含了下列的4個(gè)模塊。
第一個(gè)模塊是用來(lái)與物理設(shè)備的通信的模塊。這個(gè)模塊的主要功能是用來(lái)取得和網(wǎng)卡等網(wǎng)絡(luò)設(shè)備的連接。通過(guò)編程接口來(lái)實(shí)現(xiàn)對(duì)物理設(shè)備的操作。主要代碼如下
private NetworkInterface[] devices;
private NetworkInterface device;
devices=jpcap.getDeviceList();
device=devices[1];
第二個(gè)模塊是修改ARP數(shù)據(jù)包數(shù)據(jù)的模塊。在這個(gè)模塊可以對(duì)ARP數(shù)據(jù)包里的目的地址,源地址,幀類(lèi)型,硬件類(lèi)型,協(xié)議類(lèi)型,硬件地址長(zhǎng)度,協(xié)議地址長(zhǎng)度,包類(lèi)型,發(fā)送端MAC,發(fā)送端IP,目的MAC,目的IP信息進(jìn)行各種操作。
EthernetPacket ethPacket=new EthernetPacket();
ethPacket.frametype=EthernetPacket.ETHERTYPE_ARP;
ethPacket.dst_mac=targetMAC;
ethPacket.src_mac=netDevice.mac_address;
arpP.datalink=ethPacket;
第三個(gè)模塊是發(fā)送ARP包。這個(gè)模塊的主要功能修改好了以后的數(shù)據(jù)包需要發(fā)送到目標(biāo)地址。
第四個(gè)模塊用來(lái)轉(zhuǎn)發(fā)接收到的ARP包。這個(gè)模塊的主要功能將目標(biāo)計(jì)算機(jī)的數(shù)據(jù)包再轉(zhuǎn)發(fā)到網(wǎng)關(guān),以及將從網(wǎng)關(guān)得到的數(shù)據(jù)轉(zhuǎn)回到目標(biāo)計(jì)算機(jī)。執(zhí)行結(jié)果如圖2。
圖2 ARP攻擊實(shí)現(xiàn)
針對(duì)ARP攻擊的實(shí)現(xiàn)機(jī)制,本文提出了應(yīng)對(duì)ARP攻擊的可以使用的防范措施:
(1)采用靜態(tài)綁定的方式
鑒于ARP攻擊的動(dòng)態(tài)實(shí)時(shí)的規(guī)律,可以采用靜態(tài)綁定的方式對(duì)ARP攻擊進(jìn)行防范。將內(nèi)網(wǎng)IP和MAC靜態(tài)綁定,在網(wǎng)內(nèi)把主機(jī)和網(wǎng)關(guān)都做IP和MAC綁定,同時(shí)在網(wǎng)關(guān)也進(jìn)行靜態(tài)綁定。靜態(tài)綁定方式的缺點(diǎn)是需要對(duì)所有的主機(jī)都進(jìn)行綁定因而需要大量的工作量[3]。
(2)使用專(zhuān)門(mén)的防護(hù)軟件
最常見(jiàn)的防護(hù)軟件就是ARP防火墻,通常采用系統(tǒng)內(nèi)核層攔截技術(shù)和主動(dòng)防御技術(shù),可解決大部分欺騙、ARP攻擊帶來(lái)的問(wèn)題,從而保證通訊安全(保障通訊數(shù)據(jù)不被網(wǎng)管軟件/惡意軟件監(jiān)聽(tīng)和控制)、保證網(wǎng)絡(luò)暢通。
(3)使用具有ARP防護(hù)功能的硬件網(wǎng)絡(luò)設(shè)備。
分析了ARP的病毒攻擊機(jī)理以及這些攻擊會(huì)給局域網(wǎng)內(nèi)的用戶(hù)帶來(lái)的危害,詳細(xì)介紹了如何開(kāi)發(fā)一個(gè)具有局域網(wǎng)掃描功能的ARP欺騙模型,并針對(duì)性地提出防范ARP攻擊的措施。