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)網(wǎng)目的地址。在這兩種地址之間存在著某種靜態(tài)的或算法的映射,,常常需要查看一張表,。地址解析協(xié)議(Address Resolution Protocol,ARP)就是用來確定這些映象的協(xié)議,。 ARP工作時,,送出一個含有所希望的IP地址的以太網(wǎng)廣播數(shù)據(jù)包。目的地主機,,或另一個代表該主機的系統(tǒng),,以一個含有IP和以太網(wǎng)地址對的數(shù)據(jù)包作為應(yīng)答,。發(fā)送者將這個地址對高速緩存起來,以節(jié)約不必要的ARP通信,。 如果有一個不被信任的節(jié)點對本地網(wǎng)絡(luò)具有寫訪問許可權(quán),,那么也會有某種風險。這樣一臺機器可以發(fā)布虛假的ARP報文并將所有通信都轉(zhuǎn)向它自己,,然后它就可以扮演某些機器,,或者順便對數(shù)據(jù)流進行簡單的修改。ARP機制常常是自動起作用的,。在特別安全的網(wǎng)絡(luò)上,, ARP映射可以用固件,并且具有自動抑制協(xié)議達到防止干擾的目的,。
圖1是一個用作IP到以太網(wǎng)地址轉(zhuǎn)換的ARP報文的例子,。在圖中每一行為32位,也就是4個八位組表示,,在以后的圖中,,我們也將遵循這一方式。 硬件類型字段指明了發(fā)送方想知道的硬件接口類型,,以太網(wǎng)的值為1,。協(xié)議類型字段指明了發(fā)送方提供的高層協(xié)議類型,IP為0806(16進制),。硬件地址長度和協(xié)議長度指明了硬件地址和高層協(xié)議地址的長度,,這樣ARP報文就可以在任意硬件和任意協(xié)議的網(wǎng)絡(luò)中使用。操作字段用來表示這個報文的目的,,ARP請求為1,,ARP響應(yīng)為2,RARP請求為3,,RARP響應(yīng)為4,。 當發(fā)出ARP請求時,發(fā)送方填好發(fā)送方首部和發(fā)送方IP地址,,還要填寫目標IP地址,。當目標機器收到這個ARP廣播包時,就會在響應(yīng)報文中填上自己的48位主機地址,。
2,、ARP使用舉例
我們先看一下linux下的arp命令(如果開始arp表中的內(nèi)容為空的話,需要先對某臺主機進行一個連接,例如ping一下目標主機來產(chǎn)生一個arp項):
Address:主機的IP地址
可以看到在緩存中有一條211.161.17.254相對應(yīng)的arp緩存條目,。
在執(zhí)行上面一條telnet命令的同時,,用tcpdump進行監(jiān)聽:
在第1行中,,源端主機(d2server)的硬件地址是00:D0:F8:0A:FB:83,。目的端主機的硬件地址是FF:FF:FF:FF:FF:FF,這是一個以太網(wǎng)廣播地址,。電纜上的每個以太網(wǎng)接口都要接收這個數(shù)據(jù)幀并對它進行處理,。
arp高速緩存中已經(jīng)增加了一條有關(guān)211.161.17.21的映射,。
可以看到211.161.17.21的arp條目已經(jīng)是不完整的了,。
還有一些其他的命令,可以參考linux下的man文檔:d2server:/home/kerberos# man arp 3,、ARP欺騙
我們先復習一下上面所講的ARP協(xié)議的原理,。在實現(xiàn)TCP/IP協(xié)議的網(wǎng)絡(luò)環(huán)境下,一個ip包走到哪里,,要怎么走是靠路由表定義,,但是,當ip包到達該網(wǎng)絡(luò)后,,哪臺機器響應(yīng)這個ip包卻是靠該ip包中所包含的硬件mac地址來識別,。也就是說,只有機器的硬件mac地址和該ip包中的硬件mac地址相同的機器才會應(yīng)答這個ip包,,因為在網(wǎng)絡(luò)中,,每一臺主機都會有發(fā)送ip包的時候,所以,,在每臺主機的內(nèi)存中,,都有一個 arp--> 硬件mac 的轉(zhuǎn)換表。通常是動態(tài)的轉(zhuǎn)換表(該arp表可以手工添加靜態(tài)條目),。也就是說,,該對應(yīng)表會被主機在一定的時間間隔后刷新。這個時間間隔就是ARP高速緩存的超時時間,。 通常主機在發(fā)送一個ip包之前,,它要到該轉(zhuǎn)換表中尋找和ip包對應(yīng)的硬件mac地址,如果沒有找到,,該主機就發(fā)送一個ARP廣播包,,于是,主機刷新自己的ARP緩存。然后發(fā)出該ip包,。 了解這些常識后,,現(xiàn)在就可以談在以太網(wǎng)絡(luò)中如何實現(xiàn)ARP欺騙了,可以看看這樣一個例子,。 3.1 同一網(wǎng)段的ARP欺騙
一個位于主機B的入侵者想非法進入主機A,可是這臺主機上安裝有防火墻,。通過收集資料他知道這臺主機A的防火墻只對主機C有信任關(guān)系(開放23端口(telnet)),。而他必須要使用telnet來進入主機A,這個時候他應(yīng)該如何處理呢,? 我們這樣考慮,,入侵者必須讓主機A相信主機B就是主機C,如果主機A和主機C之間的信任關(guān)系是建立在ip地址之上的,。如果單單把主機B的ip地址改的和主機C的一樣,,那是不能工作的,至少不能可靠地工作,。如果你告訴以太網(wǎng)卡設(shè)備驅(qū)動程序,, 自己IP是192.168.0.3,那么這只是一種純粹的競爭關(guān)系,,并不能達到目標,。我們可以先研究C這臺機器如果我們能讓這臺機器暫時當?shù)簦偁庩P(guān)系就可以解除,這個還是有可能實現(xiàn)的,。在機器C當?shù)舻耐瑫r,將機器B的ip地址改為192.168.0.3,這樣就可以成功的通過23端口telnet到機器A上面,,而成功的繞過防火墻的限制,。 上面的這種想法在下面的情況下是沒有作用的,如果主機A和主機C之間的信任關(guān)系是建立在硬件地址的基礎(chǔ)上,。這個時候還需要用ARP欺騙的手段讓主機A把自己的ARP緩存中的關(guān)于192.168.0.3映射的硬件地址改為主機B的硬件地址,。 我們可以人為的制造一個arp_reply的響應(yīng)包,發(fā)送給想要欺騙的主機,這是可以實現(xiàn)的,因為協(xié)議并沒有規(guī)定必須在接收到arp_echo后才可以發(fā)送響應(yīng)包.這樣的工具很多,我們也可以直接用snifferpro抓一個arp響應(yīng)包,然后進行修改。 你可以人為地制造這個包,??梢灾付ˋRP包中的源IP、目標IP,、源MAC地址,、目標MAC地址。這樣你就可以通過虛假的ARP響應(yīng)包來修改主機A上的動態(tài)ARP緩存達到欺騙的目的,。 3.2 不同網(wǎng)段的ARP欺騙
如圖3所示A、C位于同一網(wǎng)段而主機B位于另一網(wǎng)段,,三臺機器的ip地址和硬件地址如下:
在現(xiàn)在的情況下,位于192.168.1網(wǎng)段的主機B如何冒充主機C欺騙主機A呢,?顯然用上面的辦法的話,即使欺騙成功,,那么由主機B和主機A之間也無法建立telnet會話,,因為路由器不會把主機A發(fā)給主機B的包向外轉(zhuǎn)發(fā),,路由器會發(fā)現(xiàn)地址在192.168.0.這個網(wǎng)段之內(nèi),。 現(xiàn)在就涉及到另外一種欺騙方式―ICMP重定向。把ARP欺騙和ICMP重定向結(jié)合在一起就可以基本實現(xiàn)跨網(wǎng)段欺騙的目的,。 什么是ICMP重定向呢,? 我們可以利用ICMP重定向報文達到欺騙的目的,。下面是結(jié)合ARP欺騙和ICMP重定向進行攻擊的步驟: TCP/IP協(xié)議實現(xiàn)中關(guān)于主機接收ICMP重定向報文主要有下面幾條限制:
1.新路由必須是直達的 2.重定向包必須來自去往目標的當前路由 3.重定向包不能通知主機用自己做路由 4.被改變的路由必須是一條間接路由 由于有這些限制,,所以ICMP欺騙實際上很難實現(xiàn),。但是我們也可以主動的根據(jù)上面的思維尋找一些其他的方法。更為重要的是我們知道了這些欺騙方法的危害性,,我們就可以采取相應(yīng)的防御辦法,。 3.3 ARP欺騙的防御
知道了ARP欺騙的方法和危害,我們給出一些初步的防御方法: 1.不要把你的網(wǎng)絡(luò)安全信任關(guān)系建立在ip地址的基礎(chǔ)上或硬件mac地址基礎(chǔ)上,,(rarp同樣存在欺騙的問題),,理想的關(guān)系應(yīng)該建立在ip+mac基礎(chǔ)上。 2.設(shè)置靜態(tài)的mac-->ip對應(yīng)表,,不要讓主機刷新你設(shè)定好的轉(zhuǎn)換表,。 3.除非很有必要,否則停止使用ARP,,將ARP做為永久條目保存在對應(yīng)表中,。在linux下可以用ifconfig -arp可以使網(wǎng)卡驅(qū)動程序停止使用ARP。 4.使用代理網(wǎng)關(guān)發(fā)送外出的通訊,。 5.修改系統(tǒng)拒收ICMP重定向報文 在linux下可以通過在防火墻上拒絕ICMP重定向報文或者是修改內(nèi)核選項重新編譯內(nèi)核來拒絕接收ICMP重定向報文,。 在win2000下可以通過防火墻和IP策略拒絕接收ICMP報文。 4 代理ARP的應(yīng)用 代理ARP有兩大應(yīng)用,一個是有利的就是我們在防火墻實現(xiàn)中常說的透明模式的實現(xiàn),另一個是有害的就是通過它可以達到在交換環(huán)境中進行嗅探的目的.由此可見同樣一種技術(shù)被應(yīng)用于不同的目的,效果是不一樣的. 我們先來看交換環(huán)境中局域網(wǎng)的嗅探. 通常在局域網(wǎng)環(huán)境中,,我們都是通過交換環(huán)境的網(wǎng)關(guān)上網(wǎng)的,。在交換環(huán)境中使用NetXray或者NAI Sniffer一類的嗅探工具除了抓到自己的包以外,是不能看到其他主機的網(wǎng)絡(luò)通信的,。 但是我們可以通過利用ARP欺騙可以實現(xiàn)Sniffer的目的,。 ARP協(xié)議是將IP地址解析為MAC地址的協(xié)議,局域網(wǎng)中的通信都是基于MAC地址的,。
如圖4所示,,三臺主機位于一個交換網(wǎng)絡(luò)的環(huán)境中,其中A是網(wǎng)關(guān):
在局域網(wǎng)中192.168.0.2和192.168.0.3都是通過網(wǎng)關(guān)192.168.0.1上網(wǎng)的,,假定攻擊者的系統(tǒng)為192.168.0.2,,他希望聽到192.168.0.3的通信,那么我們就可以利用ARP欺騙實現(xiàn),。 這種欺騙的中心原則就是arp代理的應(yīng)用.主機A是局域網(wǎng)中的代理服務(wù)器,局域網(wǎng)中每個節(jié)點的向外的通信都要通過它.主機B想要聽主機C的通信,它需要先使用ARP欺騙,讓主機C認為它就是主機A,這個時候它發(fā)一個IP地址為192.168.0.1,物理地址為BB:BB:BB:BB:BB:BB的ARP響應(yīng)包給主機C,這樣主機C會把發(fā)往主機A的包發(fā)往主機B.同理,還要讓網(wǎng)關(guān)A相信它就是主機C,向網(wǎng)關(guān)A發(fā)送一個IP地址為192.168.0.3,物理地址為BB:BB:BB:BB:BB:BB的包,。 上面這一步的操作和前面的ARP欺騙的原理是一樣的,但是還是有問題,過一段時間主機B會發(fā)現(xiàn)自己無法上網(wǎng).所以下面還有一個步驟就是需要在主機B上轉(zhuǎn)發(fā)從主機A到主機C的包,并且轉(zhuǎn)發(fā)從主機C到主機A的包.現(xiàn)在我們可以看到其實主機B在主機A和主機C的通訊中起到了一個代理的作用,這就是為什么叫做ARP代理的原因. 具體實現(xiàn)要用到兩個工具dsniff和fragrouter,dsniff用來實現(xiàn)ARP欺騙,fragroute用來進行包的轉(zhuǎn)發(fā). 欺騙192.168.0.3,,告訴這臺機器網(wǎng)關(guān)192.168.0.1的MAC地址是192.168.0.2的MAC地址. 現(xiàn)在我們已經(jīng)完成了第一步的欺騙,這個欺騙是通過arpspoof來完成的,當然您也可以使用別的工具甚至自己發(fā)包來完成.現(xiàn)在我們可以看到在主機A和主機C的arp列表里面都完成了我們需要的工作.在后面的透明代理中我們將使用另外一種不同的理念. 下面我們先打開linux系統(tǒng)中的轉(zhuǎn)發(fā)包的選項: 下面我們可以下載大名鼎鼎的dugsong的另外一個工具fragroute,這個工具以前叫做fragrouter(僅有1字的差別)主要用于實現(xiàn)入侵檢測系統(tǒng)處理分片的ip和tcp包功能的檢測,本身自代包轉(zhuǎn)發(fā)的功能.可以到下面的網(wǎng)站下載: 當然我們也可以使用fragrouter來完成: 現(xiàn)在就可以實現(xiàn)在交換局域網(wǎng)中嗅探的目標.當然上面這些只是一些原理性的介紹,在真正的使用中會遇到很多的問題,比如如何實現(xiàn)對網(wǎng)關(guān)A和主機C的欺騙,以及如何處理可能出現(xiàn)的廣播風暴問題,這些可以在實踐中學習.還有一個叫arpsniff的工具能夠很方便的完成這一功能,很多網(wǎng)站都提供下載,界面比較友好,由于和上面的原理一樣,只是工具使用上的不同并且添加了一些附加的功能,所以這里不在進行介紹. 代理ARP的另外一個應(yīng)用就是防火墻的透明代理的實現(xiàn).我們都知道早期的防火墻大都是基于路由模式,也就是防火墻要完成一個路由的作用.這種接入方式需要在局域網(wǎng)內(nèi)的主機上設(shè)置防火墻的IP為代理,而且需要在外部路由器的路由表中加入一條指向防火墻的路由.這種方式的缺點在于不透明,需要進行過多的設(shè)置,并且破壞了原有的網(wǎng)絡(luò)拓撲.所以現(xiàn)在幾乎全部的防火墻都實現(xiàn)了一種透明接入的功能,用戶的路由器和客戶端不用做任何修改,用戶甚至感覺不到透明接入方式防火墻的存在.這種透明接入的原理就是ARP代理. 我們現(xiàn)在看如何配置一臺主機作為透明接入模式的防火墻(透明接入的防火墻不需要IP),
如圖5所示,一臺防火墻連接內(nèi)部網(wǎng)段和DMZ網(wǎng)段到外部路由.我們在這臺用作防火墻的主機上使用linux操作系統(tǒng),這樣我們可以方便的使用iptables防火墻.假設(shè)三塊網(wǎng)卡為eth0,eth1和eth2,eth0和路由器相連,eth1和內(nèi)網(wǎng)相連.eth2和外網(wǎng)相連.假設(shè)DMZ區(qū)有2臺服務(wù)器.
和前面差不多,第一步需要實現(xiàn)ARP欺騙,這次我們有個簡單的實現(xiàn).我們把路由器的IP地址和防火墻的eth1和eth2的網(wǎng)卡物理地址綁定,將內(nèi)網(wǎng)和DMZ網(wǎng)段的IP地址和eth0的網(wǎng)卡綁定,在linux系統(tǒng)上我們用arp命令實現(xiàn):
第二部我們需要在基于linux的防火墻上設(shè)置路由,把目標地址是外部路由的包轉(zhuǎn)發(fā)到eth0,把目標地址為內(nèi)網(wǎng)的包轉(zhuǎn)發(fā)到eth1,把目標地址是DMZ網(wǎng)段服務(wù)器的包轉(zhuǎn)發(fā)到eth2.在linux下面用route命令實現(xiàn)
小結(jié) |
|