◆殷松瑜
(江蘇商貿(mào)職業(yè)學院電子信息學院 江蘇 226011)
在研究網(wǎng)絡協(xié)議時發(fā)現(xiàn)TCP/ⅠP 協(xié)議棧中,很多網(wǎng)絡協(xié)議標準都有安全缺陷,網(wǎng)絡攻擊比如網(wǎng)絡掃描,內(nèi)網(wǎng)滲透,流量欺騙等都和ARP 協(xié)議有關。本文為了進一步學習理解網(wǎng)絡協(xié)議的原理過程,首先搭建網(wǎng)絡實驗模擬環(huán)境,利用Python 的scapy 模塊構(gòu)造ARP 數(shù)據(jù)包發(fā)送給攻擊目標機實施ARP 欺騙,模擬中間人攻擊,然后嗅探局域網(wǎng)內(nèi)部網(wǎng)絡流量截取HTTP 協(xié)議數(shù)據(jù)包進行解析,在被攻擊者瀏覽網(wǎng)頁點擊圖片時,實現(xiàn)了實時抓取這些點擊圖片的系統(tǒng)功能目標。
本文實驗環(huán)境包括一個路由器,一臺聯(lián)網(wǎng)的64 位Windows 7 版本的計算機作為攻擊機,要對該計算機啟用ⅠP 轉(zhuǎn)發(fā),在注冊表定位以下注冊表項:HKEY_LOCAL_MACHⅠNESYSTEM CurrentContro lSet ServicesTcpip Parameters 選擇下面的項目ⅠPEnableRouter。
請指定值為1。Python 出于兼容性考慮安裝是32 位Python 3.7版本,另外還有一臺VMWARE 虛擬機作為被攻擊目標機,操作系統(tǒng)是64 位的Windows 7 版本,網(wǎng)絡連接方式是Host Only。Python 第三方庫一定要選擇開發(fā)環(huán)境操作系統(tǒng)Python 版本相對應的庫文件安裝,使用pip 安裝時,如果外國網(wǎng)站網(wǎng)速太慢,可以訪問國內(nèi)的pip y 源時,命令為:pip install 庫名==XXX.XX -i https://pypi.tuna.t singhua.edu.cn/simple。下面是本文要用到的各種模塊比如Scapy,H TTP 等所依賴的Python 第三方庫文件:
ARP 協(xié)議稱為地址解析協(xié)議,是工作在網(wǎng)絡層的協(xié)議,基本任務就是將ⅠP 地址轉(zhuǎn)換為MAC 地址(物理地址)。由于網(wǎng)絡層ⅠP 數(shù)據(jù)報是根據(jù)ⅠP 地址確定傳送目標,而以局域網(wǎng)交換設備傳送的是數(shù)據(jù)幀,它們是依靠48 位以太網(wǎng)地址(MAC 地址)確定傳送目標,以太網(wǎng)數(shù)據(jù)幀的并不能識別32 位的ⅠP 地址,所以在局域網(wǎng)內(nèi)部的機器要和其他機器進行通信,首先就要獲取對方的物理地址,這就需要ARP 協(xié)議來實現(xiàn)ⅠP 地址轉(zhuǎn)換為物理地址這種對應關系。
ARP 數(shù)據(jù)包的詳細信息列表如下(圖1)[1]。
圖1 ARP 數(shù)據(jù)報文格式
ARP 協(xié)議是一個不安全的協(xié)議,只要你發(fā)送ARP 數(shù)據(jù)包就能修改目標的MAC 緩存表,基于這種不安全性,便能實現(xiàn)ARP 欺騙。ARP 的攻擊原理:攻擊者冒充網(wǎng)關的身份MAC 地址,被攻擊者發(fā)給網(wǎng)關的流量會全部經(jīng)過攻擊者機:攻擊者冒充被攻擊者的身份MAC地址,賣家發(fā)給被攻擊者的流量也會經(jīng)過攻擊者機的手上。被攻擊者無法與網(wǎng)關聯(lián)系,導致流量無法到達被攻擊者機上,而攻擊者卻能拿到網(wǎng)段所有流量(圖2)。
圖2 ARP 欺騙的攻擊示意圖
使用Python 編寫ARP 欺騙工具思路:不斷發(fā)送修改對方MAC緩存表的ARP 數(shù)據(jù)包[2]。
(1)欺騙目標機:以太網(wǎng)報頭:本機MAC·目標機MAC 數(shù)據(jù)(ARP 數(shù)據(jù)包):目標機MAC·目標機ⅠP·操作類型請求或回復都行·本機MAC·網(wǎng)關ⅠP。
(2)欺騙路由器:以太網(wǎng)報頭:網(wǎng)關MAC·本機MAC 數(shù)據(jù)(ARP數(shù)據(jù)包):網(wǎng)關MAC·網(wǎng)關ⅠP·操作類型請求或回復都行·本機MAC·目標機ⅠP。
在scapy 模塊中,ARP 是構(gòu)建ARP 數(shù)據(jù)包的類,Ether 用來構(gòu)建以太網(wǎng)數(shù)據(jù)包,構(gòu)造ARP 數(shù)據(jù)包并加上以太網(wǎng)報頭實現(xiàn)ARP 欺騙目的[3]。
瀏覽網(wǎng)頁中的圖片一般都是向服務器發(fā)送一次請求圖片的HTTP 請求,所以我們只需從經(jīng)過網(wǎng)卡的流量中過濾出TCP 協(xié)議80端口的HTTP 協(xié)議數(shù)據(jù)包,將數(shù)據(jù)包的頭部層層去掉,最后能得到應用層的HTTP 數(shù)據(jù)包,再利用正則表達式將http://*.jpg 篩選出來即可知道用戶到底點擊請求了哪些圖[4]。
下面是截取到的HTTP 協(xié)議數(shù)據(jù)包片段:
本文的模擬網(wǎng)絡攻擊環(huán)境:路由器網(wǎng)關gateway:192.168.1.1;受害者機器target:192.168.1.15;本地機器local:192.168.1.9。
下面是系統(tǒng)功能的主程序代碼:
ARP 欺騙攻擊之后,從圖3 可以看出路由器網(wǎng)關gateway:192.168.1.1 MAC 地址變成和本地攻擊機local:192.168.1.9 的MAC地址一模一樣,本地攻擊機欺騙被攻擊機冒充自己是網(wǎng)關成功。
圖3 實施ARP 欺騙攻擊的效果圖
本地機192.168.1.9 實施ARP 欺騙攻擊之后,在被攻擊機192.168.1.15 上打開網(wǎng)頁點擊圖片,在本地機上運行的抓圖效果如圖4,可以看到被攻擊機發(fā)往網(wǎng)關的HTTP 協(xié)議報被本地攻擊機截取,相關圖片的HTTP 請求被解析而后在本地機打開相對應的圖片,基本實現(xiàn)了抓取第三方屏幕網(wǎng)頁圖片的功能。
圖4 ARP 攻擊后實施抓圖的效果圖
本文使用Python 初步實現(xiàn)了ARP 攻擊和抓取第三方機器屏幕的效果,由于實驗環(huán)境和程序代碼編寫的限制,系統(tǒng)性能還需要進一步優(yōu)化,以解決能夠快速高效抓取和解析網(wǎng)絡流量數(shù)據(jù)包這個系統(tǒng)運行效率問題,還有很多功能有待完成。通過這次實驗作者對ARP 欺騙攻擊有了更深的理解,后面繼續(xù)改進完善系統(tǒng),增添更多的網(wǎng)絡滲透安全防護功能。