ARP欺騙處理

 

ARP欺騙

  在以太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。而MAC地址可以通過地址解析協議(ARP)獲得。ARP的基本功能就是通過目標主機的IP地址,查詢其物理MAC地址,以保證通信的順利進行。

  ARP協議是建立在信任局域網內所有結點的基礎上的,是一種無狀態協議,只要收到目標MAC是自己的ARP reply包或arp廣播包,都會接受並緩存到本地主機內的ARP cache表,ARP欺騙就是利用此點,通過發送大量ARP欺騙報文“淹沒”正常ARP報文,使得網絡內主機ARP cache表內記錄錯誤的MAC信息,達到了欺騙目的。

  欺騙形式

  (1)單一主機欺騙

  這一類欺騙主要是“網關欺騙”。主機X(攻擊者)申稱自己爲主機A,僞造出數據包不間斷假冒網關,欺騙網內其它主機,達到阻止被騙主機訪問外部網絡,甚至截獲數據包竊取信息的目的。

  (2)全子網輪詢欺騙(固定MAC)

  T時刻,主機X(攻擊者)申稱自己爲主機A(子網內IP最小的一臺主機);

  T+N時刻,主機X(攻擊者)申稱自己爲主機B;

  ……

  T+M時刻,主機X(攻擊者)申稱自己爲主機Z(子網內IP最大的一臺主機);

  這一類欺騙攻擊者會從自身所在子網內IP地址最小的一臺主機開始欺騙,隔一段時間N,欺騙下一臺IP+1的主機,一直到本子網內IP地址最大的一臺主機。在實際檢測中,攻擊者絕大多數都使用自己的MAC。時刻N與攻擊主機的包發送頻率有關。

  (3)全子網輪詢欺騙(隨機僞造MAC)

  這類形式欺騙與第二種形式類似,輪詢欺騙子網內所有主機,不同的是,攻擊者對每一個IP進行欺騙都會使用隨機產生的僞造MAC地址,以達到躲避檢測的目的。

  檢測方法

  常見的ARP防禦方法是通過IP、MAC用戶端和網關處雙向靜態綁定來實現。此方案在小規模網絡內頗有成效,而在大規模網絡中就存在不易部署、難管理,治標不治本等問題。因此,我們總結出對付ARP攻擊的最佳方法是找到攻擊源頭,見如下4種方法:

  

  端口鏡像

  通過對各子網網關接口的鏡像,可以獲得子網內第一手的網絡情況。例如:

  Cisco6006(config)#monitor session 1 source vlan 2 - 9 both // 對vlan2至vlan9做端口鏡像

  Cisco6006(config)#monitor session 1 destination interface GigabitEthernet 1/2 // 將vlan2至vlan9鏡像的數據發送到G1/2接口。通過在端口G1/2上接入sniffer嗅探機,獲取子網2至子網9內的數據包,並對所獲報文進 行分析,找出ARP欺騙數據包,即可確定“攻擊元兇”。

  優點:可以獲取被鏡像網絡內真實的網絡情況;對上述三類ARP欺騙都可以有效檢測。不足:將多個子網數據鏡像到一個端口,所得數據量過大;路由器放置分散時,嗅探機必須做相應的分散部署,不便集中操作。

  

  第1步 分析路由器日誌

  當發生ARP欺騙時,網絡中會出現攻擊者和被攻擊者“爭搶”更新路由器ARP cache表的情況,而路由器則會在日誌中記錄大量的“衝突”信息,這些信息中會包含攻擊者的MAC,最後通過分析log就可以查找到發起攻擊的“元兇”。

  優點:需要處理的數據量小;便於集中部署;針對ARP欺騙的第一種類型,“網關欺騙”定位準確;不足:由於攻擊者發送大量的攻擊數據 包,淹沒了被攻擊者的正常數據包,造成網關不能收到正確的ARP reply,因而造成不能記錄主機MAC衝突信息。此方法對兩種“全子網輪詢欺騙”效果不佳。

  

  分析路由器ARP表

  ARP攻擊結果會使主機和網關的ARP表保留錯誤MAC記錄,因此直接分析ARP表也十分有效。經我校網絡檢測發現,當某一子網發生 ARP欺騙,該子網網關路由器ARP表中將有多個IP對應同一MAC的情況。這種情況可能還有一種解釋,就是該MAC地址對應主機綁定了多個IP。但通過 調查,該主機並未擁有多個IP地址,而且每過幾個N時刻(據檢測,N≈2秒),該MAC所對應的IP會自動變化,根據這一情況,我們也可找出攻擊“元兇 ”。

  優點:需要處理的數據量小;便於集中部署;針對第二種類型的ARP欺騙定位準確;不足:只能針對第二種類型的ARP欺騙進行定位。

  

  動態MAC地址庫分析

  針對第三種攻擊模式,我們採用“動態MAC地址庫分析”的方法來解決隨機僞造MAC的ARP欺騙。原理是將路由器ARP表中MAC地址 摘取出來,與“全網MAC地址庫”進行比對,如果摘取的MAC不在MAC地址庫中,該MAC就被疑似爲攻擊者MAC,而所對應交換機端口將被關閉等待具體 的調查落實。同時,該MAC將被加入到“全網MAC地址庫”記錄。

  應用實例

  從前文可知,針對不同類型的ARP欺騙,應採取相應的方法,在具體的部署實施過程中,應多種方法配合使用。我校的網絡層匯聚交換機部署分散,分佈在多個校區、多個網絡機房內,根據實際情況,我們沒有采用第一種方法,而是將方法二、方法三、方法四結合使用。

  我校的“ARP欺騙動態檢測防禦系統”是建立在Linux AS4系統平臺上,通過使用多個Shell腳本分析路由器日誌、ARP表來確定ARP欺騙源的MAC地址,然後使用snmpwalk命令到接入交換機中去 查找接入端口,並通過snmpset命令關閉查找到的端口,最終生成網頁通知用戶。

  分析並確定ARP欺騙源MAC

  分析路由器日誌確定ARP欺騙源MAC

  在Cisco路由器中我們通過如下命令將系統日誌記錄到日誌服務器中:

  Cisco(config)#logging facility local3 // 定義將一些錯誤信息記錄到日誌服務器,MAC地址衝突就屬於這一類

  Cisco(config)#logging source-interface GigabitEthernet1/1 // 定義發送日誌的接口

  Cisco(config)#logging 202.201.X.X // 定義日誌服務器的IP地址

  在日誌服務器中將看到記錄着這樣一些信息的文件:

  3w4d: %IP-4-DUPADDR: Duplicate address 210.26.50.1 on Vlan305, sourced by 0010.dc44.fed8

  3w4d: %IP-4-DUPADDR: Duplicate address 210.26.50.1 on Vlan305, sourced by 0010.dc44.fed8

  黑體字部分就是“網關欺騙”類型攻擊者的主機MAC地址。通過Shell腳本,我們可以提取出欺騙源的MAC信息,並提交給第二步去處理。

  分析路由器ARP表確定ARP欺騙源MAC

  Linux系統中使用net-snmp的snmpwalk命令可以提取路由器的ARP CACHE表,如:

  snmpwalk -v1 -Cc -c public 10.239.4.1 1.3.6.1.2.1.3.1.1.2 >/etc/cron.5min/arptable-v1代表使用SNMP協議v1版本;-Cc是忽略OID值漸增的情況,後面的 “1.3.6.1.2.1.3.1.1.2”就是Cisco路由器的ARP表的OID值;-c後面要有所要查看設備的snmp可讀的community 值,我們這裏以public爲例;我們將snmpwalk命令執行的結果定向到/etc/cron.5min/arptable這個文件中,得到如下格式 的arptable文件:

  RFC1213-MIB::atPhysAddress.39.1.219.246.62.161 = Hex-STRING: 00 E0 FC 00 31 BD

  RFC1213-MIB::atPhysAddress.39.1.219.246.62.163 = Hex-STRING: 00 E0 FC 00 31 BD

  RFC1213-MIB::atPhysAddress.39.1.219.246.62.166 = Hex-STRING: 00 E0 FC 00 31 BD

  斜體部分是IP地址,黑體部分是MAC地址。由於我校不允許用戶在一塊網卡上綁定多個IP地址,因此上面的例子可以看作ARP欺騙。我 們用Shell腳本對前面所生成的arptable文件中的MAC地址部分執行一個For循環的比較,當某一個MAC出現2次以上時,此MAC記錄爲 ARP欺騙的主機的MAC,提交給第二步去處理。

  動態MAC地址庫分析

  由於我校入網時不登記用戶MAC,因此,我們的“MAC地址庫”是動態生成的。具體做法是:通過對基於Linux平臺DHCP服務器上 的dhcpd.leases文件進行操作,提取出網絡內主機獲得IP時的MAC作爲我們的“MAC地址庫”中的源地址。因爲主機在申請IP時所使用的 MAC地址對於我們來說是真實的、可信的MAC。通過1個月的採集,我校的MAC地址數維持在29000個左右,這構成了我們的“MAC地址庫”。以後每 個星期執行一次上述採集過程動態更新“MAC地址庫”。

  然後我們還是通過使用snmpwalk命令提取到接入交換機的MAC-PORT對應表:

  snmpwalk -v1 -Cc -c public $managerip 1.3.6.1.2.1.17.4.3.1.2 >/etc/cron.5min/mactable

  這裏的變量$managerip是我們定義的接入交換機管理IP地址,定義一個FOR循環對所有的交換機循環執行,得到如下格式的mactable文件:

  SNMPv2-SMI::mib-2.17.4.3.1.2.0.4.97.78.226.229 = INTEGER: 22

  其中斜體部分就是MAC地址,不過是點分十進制表示形式。使用Shell腳本將此MAC換算成點分十六進制形式,並與“MAC地址庫”中的MAC地址逐一進行比較,如果不在“MAC地址庫”中,此MAC記錄爲ARP欺騙的主機的MAC,提交給第二步去處理。

  由於我校“MAC地址庫”地址數較多,進行動態MAC地址庫分析較費時間,此過程在單獨一臺服務器上運行。上述過程我們都是通過定義Linux定時任務系統Cron來定時執行。

  第 2 步 確定ARP欺騙源的接入交換機端口

  還是通過使用snmpwalk命令可以提取到接入交換機的MAC-PORT對應表:

  snmpwalk -v1 -Cc -c public $managerip 1.3.6.1.2.1.17.4.3.1.2 >/etc/cron.5min/macport

  得到macport文件由如下格式:

  SNMPv2-SMI::mib-2.17.4.3.1.2.0.4.97.78.226.229 = INTEGER: 22

  斜體部分MAC所對應的交換機端口號。爲同樣如前所述,將點分十進制的MAC形式轉換爲十六進制形式並與前面提交的ARP欺騙源MAC進行比較,如果查找到所對應的$managerip和端口號(附值給$port)提交到第三步。

  第3步 關閉ARP欺騙源的接入交換機端口

  使用snmpset命令關閉交換機端口:

  snmpset -v1 -c public $managerip ifAdminStatus.$port

  這裏的$managerip與$port變量是由第二步中所提交的交換機IP和該MAC所對應的交換機端口號。

  第4步 網頁通知用戶

  我校已經有用戶房間和交換機端口所對應的數據庫,所以在第三步確定到的交換機端口號很容易定位到具體的用戶房間。我們將此對應信息使用 echo命令重定向到一個html文件,用戶可以方便的查看自己的端口是否被“ARP防禦系統”關閉。根據需要我們還爲管理員提供關閉端口的日誌信息,包 括:端口關閉的時間、端口所對在的交換機IP、用戶的MAC地址等信息。出於安全考慮,這些信息只公佈關閉端口所對應的房間號以及該端口所對應的後四位 MAC地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章