ARP與MITM原理
什么是ARP
ARP全稱為Address Resolution Protocol,即地址解析協議。是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含 目標IP地址的ARP請求廣播到網絡上的所有主機,并接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址 存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任的基礎上的, 網絡上的主機可以自主 發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以 向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用于查詢 本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態對應關系等。
例如,在Linux命令行下:
#arp -a Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 0A-11-22-33-44-01 C wlan0 192.168.1.2 ether 0A-11-22-33-44-02 C wlan0
可以看到局域網中其他客戶端的內網地址和MAC地址。
工作過程
現假設主機A的IP地址為192.168.1.1,MAC地址為0A-11-22-33-44-01;
主機B的IP地址為192.168.1.2,MAC地址為0A-11-22-33-44-02; 當主機A要與主機B通信時,地址解析協議可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,以下為工作流程
第1步:根據主機A上的路由表內容,IP確定用于訪問主機B的轉發IP地址是192.168.1.2。然后A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址。 第2步:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣 播到本地網絡上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每臺主機都接收到ARP請求并且檢查是否與自己的IP地址 匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。 第3步:主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。 第4步:主機B將包含其MAC地址的ARP回復消息直接發送回主機A。 第5步:當主機A收到從主機B發來的ARP回復消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束后,將再次重復上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了。
工作要素:ARP緩存
ARP緩存是個用來儲存IP地址和MAC地址的緩沖區,其本質就是一個IP地址->MAC地址的對應表,表中每一個條目分別記錄了網絡上其他主機的IP地址和對應的MAC地址。每一個以太網或令牌環網絡適配器都有自己單獨的表。 當地址解析協議被詢問一個已知IP地址節點的MAC地址時,先在ARP緩存中查看,若存在,就直接返回與之對應的MAC地址,若不存在,才發送ARP請求向局域網查詢。為使廣播量最小,ARP維護IP地址到MAC地址映射的緩存 以便將來使用。ARP緩存可以包含動態和靜態項目。動態項目隨時間推移自動添加和刪除。每個動態ARP緩存項的潛在生命周期是10分鐘。新加到緩存中的項目帶有時間戳,如果某個項目添加后2分鐘內沒有再使用,則此 項目過期并從ARP緩存中刪除;如果某個項目已在使用,則又收到2分鐘的生命周期;如果某個項目始終在使用,則會另外收到2分鐘的生命周期,一直到10分鐘的最長生命周期。靜態項目一直保留在緩存中,直到重新啟動計算機為止。
ARP欺騙與MITM
MITM,全稱為Man In The Middle,即中間人。地址解析協議是建立在網絡中各個主機互相信任的基礎上的,它的誕生使得網絡能夠更加高效的運行,但其本身也存在缺陷。ARP地址轉換表是依賴于計算機中高速緩沖存儲器動態 更新的,而高速緩沖存儲器的更新是受到更新周期的限制的,只保存最近使用的地址的映射關 系表項,這使得攻擊者有了可乘之機,可以在高速緩沖存儲器更新表項之前修改地址轉換表,實現攻擊。ARP請求為廣播形式發送的, 網絡上的主機可以自主發送 ARP應答消息,并且當其他主機收到應答報文時不會檢測該報文的真實性就將其記錄在本地的MAC地址轉換表,這樣攻擊者就可以向目標主機發送偽ARP應答報文,從而篡改本地的MAC地址表。ARP欺騙 可以導致目標計算機與網關通信失敗,更會導致通信重定向,所有的數據都會通過攻擊者的機器。攻擊者再對目標和網關之間的數據進行轉發,則可作為一個“中間人”,實現監聽目標卻又不影響目標正常上網的目的。
攻擊實現
具體的中間人攻擊,大體上可以分為以下幾個步驟:
1. 對目標主機進行ARP欺騙,聲稱自己是網關。 2. 轉發目標的NAT數據到網關,維持目標的外出數據。 3. 對網關進行ARP欺騙,聲稱自己是目標主機。 4. 轉發網關的NAT數據到目標主機,維持目標的接收數據。 5. 監聽劫持或者修改目標的進入和外出數據,從而實現攻擊。
其中1,3都是ARP欺騙;2,4都是轉發,下面會分別說到。
ARP欺騙
ARP欺騙又叫ARP投毒(ARP poisoning),實現方式有很多,但其原理都是通過不斷向攻擊目標發送ARP replies,從而實現重定向從一個主機(或所有主機)到另一個主機的數據包的目的。 這里以dsniff工具集的arpspoof命令為例:
#arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host
其中
-i 指定使用的接口。 -c 指定當還原arp配置時t使用的MAC地址,默認為使用原來的MAC。(即當停止arpspoof命令后,默認取消毒化) -t 指定要毒化的主機,如果不指定的話默認為局域網下所有主機。 -r 雙向毒化(host和target),從而雙向撲捉數據。(僅當同時指定 -t的時候才有效) host 為你想要偽裝成的主機,通常是本地網關。所有從target到host的數據包都被重定向到本機。
數據流轉發
毒化了目標主機的ARP緩存表之后,其經過網關外出的數據流將會發送到攻擊者的主機。但此時由于目的地址出錯,目標主機對外的請求將無法到達,亦即無法訪問互聯網了。為了維持目標正常上網,需要我們在 收到目標來的數據時將其進行轉發到真正的網關。
首先開啟端口轉發,允許本機像路由器一樣轉發數據:
#echo 1 > /proc/sys/net/ipv4/ip_forward
有時不能這樣直接修改,還有另外一種方法
修改/etc/sysctl.conf文件,使得net.ipv4.ip_forward = 1;等于0為不轉發。然后更新: # sysctl -p 或者直接 # sysctl -w net.ipv4.ip_forward=1
此時本機收到的數據包含源地址和目的地址(外網地址),我們需要將其轉發到網關。這里進行了(NAT)網絡地址轉換的功能,關于NAT可參考我前一篇文章P2P通信原理與實現:
#iptables -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -j SNAT --to-source 192.168.1.110 這條命令的作用是修改本機的轉發規則,將所有從本機出去的源地址為192.168.1.XXX的數據包都修改為本機地址192.168.1.110 其中, -t 指定要操作的表,這里是nat -A 即--append,表示增加一條規則。nat有三個內建規則,分別是 PREROUTING,在數據包進入時改變其地址 POSTROUTING,在數據包將要出去時改變其地址 OUTPUT,在路由前改變本地產生的數據包地址 -p 表示數據包要檢查的協議 -s 指定源地址。地址格式可以是網絡名字,主機名字,IP地址或者是address/mask格式的網絡地址。可以指定多個,-s前加!表示取補集 -j 指定規則的目標,即如果數據包符合規則該如何做;SNAT表示修改數據包的源地址,且此次鏈接的余下數據包都不再檢查 --to-source 在SNAT選項下指定所轉發數據包的新的源地址,這里設為192.168.1.110,即攻擊者的地址
關于iptables的詳細用途可以man iptables查看。上述命令描述了外出數據的轉發規則,那么從外部來的數據要轉發到被攻擊主機上也是同理:
# iptables -t nat -A PREROUTING -p tcp -d 192.168.1.110 -j DNAT --to 192.168.1.114
在本機轉發之前將數據包目的地址為192.168.1.110的修改為192.168.1.114(被攻擊主機),然后轉發出去。
其他工具
上面為了說明原理,吧arp毒化和數據轉發分開做,其實利用現有的工具,可以很簡單地執行上面的工作,例如用ettercap:
#ettercap -i wlan0 -Tq -M arp:remote /target/ /host/
一條命令即可完成arp毒化和轉發的功能。其中-M表示指定MITM攻擊。
后記
一旦中間人建立攻擊成功,劫持了目標的上網流量,那么接下來也就為所欲為了。輕則監控目標的上網行為,就如同二十四小時站在你身后看你上網;或者劫持目標的cookie從而用目標的帳號登錄諸如微博,人人, 豆瓣等社交網站,瀏覽其隱私數據,進行發貼刪貼等操作;重責進行釣魚攻擊,使目標下載惡意程序或者執行惡意腳本,從而威脅其計算機安全。當然,應對這種攻擊的防范方法也有很多,最簡單的一種就是綁定MAC地址, 并且在網關MAC地址改變的時候發出提醒,從而防止ARP毒化攻擊。還有就是最好不要在公共WiFi下瀏覽有重要隱私的網站,萬一碰上不懷好意的人就在局域網中,那可就是真的“在陽光下行走”了。
相關:
博客原文:http://www.pppan.net/2015/11/01/arp-mitm/
作者: NONO
出處:http://www.cnblogs.com/diligenceday/
企業網站:http://www.idrwl.com/ 廈門點燃未來網絡科技
開源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830
文章列表