ARP欺騙利用了ARP協議本身的哪些機制
筆者在之前的文章中已經寫過了,ARP協議是主機A在瞭解了主機B的IP地址的前提下,對B發起詢問的協議(雖然它叫地址解析協議),但是這裡有一個問題,由於IP是動態分配(之後寫DHCP協議的時候會提到),那麼對於一個動態分配的IP,為它永遠繫結一個MAC地址自然是不妥當的,也就是說,ARP快取肯定是會重新整理的,在《TCP/IP詳解卷一:協議》中這樣寫到,從伯克利系統演變而來的系統一般對完整的表項設定超時值為20分鐘,而對不完整的表項設定超時值為3分鐘。這裡我們先不糾結什麼叫完整,什麼叫不完整,現在還是否適用這些問題,我們需要注意的是,一個表項不管完不完整,它的有效期最多就是20分鐘,也就是說,把wireshark開啟抓包,最多20分鐘,你肯定能夠抓到ARP包(本機發給其他人,或者其他人發給本機,因為都要更新),這就是ARP快取的更新機制。注:經筆者實驗,實際有效期應該更短,平均每兩三分鐘就會有一次詢問。
既然有更新,那麼就有之前快取的捨棄,就是說,如果一臺主機A向主機B傳送一個ARP請求包,在這個資料包中源IP為192.168.40.1,源MAC為ee-ee-ee-ee-ee-ee,目的IP為192.168.40.2,也就是A的IP,那麼主機B首先會在自己的ARP快取中查詢關於這條資訊,如果有A的IP-MAC,那麼就只會回發一個ARP應答包;如果不存在這樣的IP-MAC,之前的表項是192.168.40.1 -bb-bb-bb-bb-bb-bb,這時,B會更新該項為192.168.40.1 - ee-ee-ee-ee-ee-ee,由於區域網的網路傳輸不是通過IP進行的,而是通過MAC進行的,那麼此時,如果一個主機C(在和A,B同一個區域網中)偽造一個ARP請求包發給B,源IP,MAC為192.168.40.1 - ee-ee-ee-ee-ee-e1,那麼,B的快取會更新,而在同時,C向A傳送一個ARP請求包,源IP,MAC為192.168.40.2 - ee-ee-ee-ee-ee-e1,A的快取也會更新,此時在區域網中,A與B之間的通訊全都會傳輸給C,C會可以通過轉發A,B的資料包達到在監聽的同時,並且不被發現的效果。這裡利用了ARP快取的後者優先的機制,也就是後來的項在滿足一些條件後,會擠掉先來的項。
關於ARP快取的更新條件,請參考https://blog.csdn.net/wenshifang/article/details/29265721,個人認為寫得十分好,總結的十分到位,筆者看後收益良多。