【交換安全】DAI - Dynamic ARP Inspection 詳解/arp欺騙/gratuitous arp

寫在開篇:最近在測試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的配置方針
 
  1. DAI是ingress安全特性,不會做egress的安全校驗
  2. DAI的工作需依賴DHCP snooping
  3. 如果DHCP snooping被關閉或者,這是一個無DHCP 的網絡環境,例如純靜態IP地址的環境,使用ARP ACLs來放行或丟棄ARP報文
  4. 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培訓
學習 沉澱 成長 分享