寫在開篇:最近在測試DAI相關的內容,公司文檔一如既往的簡陋,新人看完保準一臉懵逼,搜了很多文章,個人覺得下面的這篇是寫的最詳細,最完整,也最容易理解,很值得學習,點贊。原文鏈接在文末,防止丟失,特轉載一份留存待日後翻閱
一、ARP協議原理
1.協議概述
- Address Resolution Protocol
- 在以太網環境中,節點之間互相通信,需知曉對方的MAC地址
- 在現實環境中,一般採用IP地址標示通信的對象,而ARP的功能就是將IP「解析」到對應的MAC地址。
2.協議漏洞
- 基於廣播,不可靠
- ARP響應報文無需請求即可直接發送,這給攻擊者留下巨大漏洞
- 沒有確認機制,任何人都可以發起arp請求或response
- IPv6中通過特定的機制規避掉ARP以及其漏洞
二、ARP欺騙原理
1.正常情況下各設備的ARP表項
2.欺騙過程ARP Request
PC1要欺騙PC2,通過造包工具,如anysend等,發出一個ARP request廣播,這個ARP數據幀的以太網頭部中,源MAC爲PC1的MAC,目的MAC爲全F,關鍵內容在於ARP協議報文(ARP body),也就是這個數據幀的以太網幀頭後的內容,這纔是ARP的真正內容,裏頭包含的主要元素有:發送者mac、發送者IP、接收者MAC及接收者IP。PC1發出的這個ARP數據幀中,sender MAC爲自己的MAC地址,但是SenderIP爲網關IP即192.168.0.254,此刻,PC2收到這個arp消息後,將更新自己的arp表項,如下:
如此一來,PC2發送數據到自己的網關0.254時,由於網關的MAC已經被欺騙成了PC1的MAC,因此數據都被轉發給了PC1,那麼PC2就斷網了。如果PC1再機靈點,將PC2發過來的數據再轉給真實的網關,同時在本地運行一個報文分析工具窺探PC2發過來的數據,那麼就可以在PC2不斷網的情況下,神不知鬼不覺的窺探PC2的上網流量,這就是the man in the middle,中間人攻擊。
3.欺騙過程ARP Response
由於ARP的response並不需要arp request爲先決條件即可直接發送,因此攻擊者可以構造arp reply消息,併發送給被攻擊對象,從而刷新被攻擊者的arp表,同樣能達到arp欺騙的目的。
4.理解invalid arp表項
什麼是invalid arp表項:
ARP表中的MAC地址爲全零(Windows主機)或「No completed」(網絡設備)
產生的原因:發送ARP Request後,爲接收ARP Reply做準備
大量存在的原因:同網段掃描(主機)、跨網段掃描(網絡設備)
5.Gratuitous ARP
Gratuitous ARP,免費ARP是一種特殊的ARP Request/response報文,即Sender IP與Target IP一致(一般用於IP衝突檢測)
我們看下面的例子:
PC2是新接入的主機,配置了192.168.0.1的地址,完成地址配置後,PC2向網絡中發送一個Gratuitous ARP,以防內網中有人使用相同的IP地址,這個Gratuitous ARP的senderIP和target IP都是自身,senderMAC是自己的MAC。
那麼當PC1收到這個Gratuitous ARP後,由於senderIP和自己衝突了,於是在本地彈出一個氣泡(如果是windows系統),同時回覆一個Gratuitous ARP response以告知對端出現了IP地址重複。
對端收到這個Gratuitous ARP消息後,知道內網中已經存在這個IP地址的使用者了,於是告警。
Gratuitous ARP的另外一個作用是,某些廠家用於防止ARP欺騙。例如在某些路由器上,配置了基於Gratuitous ARP的防arp欺騙解決方案,則該路由器(的接口)將以一定的時間間隔發送Gratuitous ARP,目的就是刷新底下PC的arp表,以保持網關IP對應的MAC始終是正確的,當然,這種防arp的解決方案挺土鱉的。
6.如何判斷內網中是否存在arp欺騙
現在市面上其實已經有許多arp防火牆可以識別到,當然有一些簡單的方法,例如arp –a看MAC是否正確。或者抓包等。
7.Arp欺騙的解決方案
解決方案1:手工綁定IP+MAC
例如在PC上,用arp –s 靜態綁定網關IP及網關的MAC,以防止arp欺騙,或者在關鍵節點的網絡設備上,使用命令arp進行綁定。
顯然這種方式擴展性太差。
解決方案2:免費arp
這個前面已經說過了
解決方案3:DAI
其他,其實防ARP欺騙的解決方案業內還是有許多的,每個廠家都有自己的方法。
三、DAI工作機制
1.機制概述
部署DAI前,內網如果出現ARP欺騙行爲,例如PC發送非法的ARP報文,對於交換機而言,是無法檢測並作出防禦動作的。
部署DAI後,我們可以定義交換機接口的信任狀態:trusted,或untrusted,對於信任端口,將不對收到的ARP報文做檢測,直接放行。而對於untrusted接口,ARP報文在收到後回進行檢查,只有合法的ARP報文才會被放行,如果出現非法的ARP報文,則會被log,同時丟棄。
DAI依賴DHCP snooping技術,在一個用戶動態獲取IP地址的網絡環境中,我們通過部署DHCP snooping一來可以起到防禦DHCP欺騙的效果,另一方面,會在交換機上得到DHCP snooping binding database,這個數據庫是DHCP Snooping偵聽DHCP交互過程後的信息記錄,裏頭包含客戶端的IP、MAC、所屬VLAN等等相關信息,而這些信息,恰恰可以作爲ARP合法性校驗的依據。
DAI部署於交換機上,用於確保合法的ARP request或response被放行而非法的ARP消息被丟棄。交換機部署DAI後的主要動作如下:
- 在DAI untrust接口上(注意與DHCP snooping的untrust接口區分開)阻攔一切ARP requests或response消息並作校驗
- 在更新自己ARP表或將收到的ARP消息轉發出去之前先進行合法性校驗,主要看ARP報文中的IP及MAC對應關係是否合法
- 丟棄非法的ARP報文,交換機會在丟棄非法的ARP後進行log
前面說了DAI藉助於DHCP snooping的綁定數據庫進行ARP合法性校驗。另一個合法性校驗的依據是手工配置的ARP ACL。
你也可以配置DAI來丟棄那些以太網幀頭源MAC與ARP body裏的MAC不一致的非法ARP。這個後面有做進一步的介紹。
2.接口信任狀態及網絡的安全問題
一般來說,我們認爲攻擊行爲多來自於終端的PC,可能是中毒或者黑客行爲等。所以我們常會將連接終端PC的接口配置爲DAI untrust接口,而交換機之間的接口配置爲trust接口。
看上圖,我們假設交換機A和B都運行DAI,而PC1及PC2都通過DHCP服務器獲取地址,那麼這時候對於PC1而言,只有在交換機A上的DHCP snooping database中才有其IP+MAC的綁定,交換機B則沒有。因此如果A和B之間的接口爲DAI 的untust,則來自PC1的ARP報文,將被交換機B丟棄,因爲它認爲這些報文是非法的,如此一來,PC1和2的通信就出問題了。所以建議A和B之間的接口設置爲DAI的trust。
但是,並非所有的交換機互聯接口設置爲DAI的trust都會沒有問題,在特定的環境下,這會留下一個安全隱患。例如,仍然是上面的圖,假設A交換機不支持DAI,如果B的3/3口配置爲trust,那麼PC1就可以大搖大擺的去對B和PC2進行ARP欺騙了,即使B運行了DAI。所以DAI僅僅是保證運行DAI的交換機本身所連接的終端PC不能進行非法的ARP動作。像剛纔所述的情況,可以考慮將交換機B的3/3口配置爲untrust接口,再通過在B上手工配置ARP ACLs的方式來創建安全表項。當然,你可以將這兩臺交換機進行三層隔離,例如,加個路由器神馬的。
3.ARP報文的rate limit
對於DAI而言,是需要損耗交換機CPU資源的,如果開啓了DAI,就有可能會成爲拒絕服務攻擊的對象。所以我們對於運行了DAI的交換機接口,有ARP報文的限制。默認DAI untrust接口的rate limit是15個P/S也就是15pps,trust接口則完全沒有限制。可以通過ip arp inspection limit這條接口級的命令來修改。
當接口收到的ARP報文超出這個閥值,接口將進入err-disable。可以使用shutdown no shutdown的方式手工重新恢復這個接口。或者,使用全局命令the errdisable recovery來讓接口在一定的時間間隔後自動恢復。
4.ARP ACL及DHCP snooping database條目的相對優先級
ARP ACL的優先級高於DHCP snooping database條目。在你使用全局命令ip arp inspection filter指定了ARP ACL後,如果ARP報文被ARP ACL deny掉了,那麼這些報文就被直接丟棄,即使在DHCP snooping database中有合法的表項匹配這些ARP報文。
四、DAI的配置方針
- DAI是ingress安全特性,不會做egress的安全校驗
- DAI的工作需依賴DHCP snooping
- 如果DHCP snooping被關閉或者,這是一個無DHCP 的網絡環境,例如純靜態IP地址的環境,使用ARP ACLs來放行或丟棄ARP報文
- DAI在access接口, trunk 接口, EtherChannel 接口, 及 private VLAN 接口上都支持
五、DAI配置命令
1.基本配置
ip arp inspection vlan {vlan_ID | vlan_range}
**特定VLAN的DAI
ip arp inspection trust
接口模式,將接口配置爲DAI trusted,默認爲untrusted
2.應用ARP ACLs到DAI
ip arp inspection filter arp_acl_name vlan {vlan_ID | vlan_range} [static]
將配置好的ARP ACL應用到DAI
如果不使用static關鍵字,則ARP報文會先被ARP ACL匹配,如果沒有任何匹配項,則再被DHCP Snooping database的安全表項再做一次校驗,如果有合法表項,則放行,如果沒有,則丟棄。
如果使用static關鍵字,則意味着ARP ACLs啓用隱含deny any機制。也就是說如果ARP報文與ARP ACLs匹配,而結果是沒有任何匹配項,則直接丟棄,不管DHCP Snooping database裏是否有合法的條目。
3.配置ARP報文rate limit
ip arp inspection limit {rate pps [burst interval seconds] | none}
接口級命令。通過限制接口上收到的ARP報文的數量,可以有效的防止開啓DAI的交換機被DoS攻擊。
注意事項:
默認在DAI untrusted接口上rate是15pps,而trusted接口則無限制
Ip arp inspection limit rate none,是無限制
Burst interval ,默認是1s,可選配置。這是一個連續的檢測時間段,用來檢測在這個時間段內的ARP報文數量,默認是1S,所以就是說1S內,如果超出了15個(默認)ARP,則違例 。這個時間可選區間爲1-15S
當出現違例,接口進入err-disable狀態
errdisable recovery cause arp-inspection
**由於arp-inspection違例導致的err-disable接口的自我恢復。
4.配置附加的校驗動作
ip arp inspection validate { [dst-mac] [ip] [src-mac] }
我們可以通過配置一些額外的選項,讓DAI做進一步的校驗。
有三個可選關鍵字,dst-mac、ip、src-mac
dst-mac檢測收到的ARP報文中,以太網幀頭的目的MAC與ARP body裏的target MAC是否一致,這個check針對ARP response。當開啓這個選項後,如果兩個MAC不一致,則ARP報文被丟棄
ip檢測ARP body裏的IP地址是否是無效或非預期的,如0.0.0.0、255.255.255.255,以及組播IP地址,這些都被認爲是無效的IP。SenderIP是無論報文爲ARP request或response都會進行校驗。而targetIP只有在報文是ARP response時纔會進行校驗
src-mac檢測收到的ARP報文中,以太網枕頭的源MAC與ARP body裏的sender MAC是否一致。這個校驗動作在ARP request及response報文中都會進行。
5.配置DAI logging
當DAI丟棄一個ARP報文,交換機會在log buffer裏存儲一條信息,隨後產生一條system message系統信息,在這條系統信息產生後,交換機從log buffer裏清除之前存儲的條目。每一個條目都包含例如VLAN、端口號、源目的IP地址、源目的MAC等信息。
一個存儲在log buffer中的條目可以代表多個報文,例如交換機從同一個接口同一個VLAN收到具有相同ARP元素的ARP包,那麼這些報文對應一個條目,以節省buffer的佔用。同時只會產生一條系統信息。
ip arp inspection log-buffer entries number
配置DAI佔用log buffer的大小(最大條目數量),區間是0-1024
默認是32條
ip arp inspection log-buffer logs number_of_messages interval length_in_seconds
配置DAI loggin system message,系統消息將以每length_in_seconds 發送number_of_messages 的速率來約束系統消息的發送。number_of_messages 默認爲5,範圍是0-1024,如果配置爲0則表示條目只出現在log buffer中而不產生系統消息;length_in_seconds 默認是1S,範圍是0-86400(1天),如果配置爲0則表示系統消息將會立即產生,而log buffer中不再存儲條目,如果將length_in_seconds 配置爲0,則number_of_messages也會變爲0。
ip arp inspection vlan vlan_range logging {acl-match {matchlog | none} | dhcp-bindings {all | none | permit}}
默認情況下,只要DAI丟棄報文,則會被logged
- acl-match matchlog—Logs packets based on the DAI ACL configuration. If you specify the
- matchlog keyword in this command and the log keyword in the permit or deny ARP access-list
- configuration command, ARP packets permitted or denied by the ACL are logged.
- acl-match none —Does not log packets that match ACLs.
- dhcp-bindings all —Logs all packets that match DHCP bindings.
- dhcp-bindings none —Does not log packets that match DHCP bindings.
- dhcp-bindings permit —Logs DHCP-binding permitted packets.
ip arp inspection vlan 100 logging acl-match none
意思是針對VLAN100中的流量,不去log被ARP ACL 匹配丟棄的報文
六、DAI配置範例
基本配置如下:
接下去在SW1上開啓DAI:
爲了使得PC2發出的ARP消息能夠被放行,我們首先使用手工配置DHCP snooping bingding表項的方法:
另一個方法,是用ARP ACL:
再來做一個測試,就是PC1私自修改IP地址:
由於DAI開啓後,下聯的PC如果段時間發送大量的無效ARP,可能會導致交換機性能大量損耗,也就是DoS攻擊。那麼建議在接口上限定ARP消息門限。
紅茶三杯
網絡工程 | 項目管理 | IT服務管理 | CCIE培訓
學習 沉澱 成長 分享