USB 协议漏洞攻击及防范

2021-07-16 06:13黄海军
网络安全技术与应用 2021年7期
关键词:描述符固件U盘

◆黄海军

(云南工商学院 云南 651700)

USB是一个外部总线标准,是一种外部存储介质,具有很好的便利性,可以用来传输数据相关的多种用途,广泛用于规范电脑与外部设备的连接和通讯。是应用在PC领域的接口技术。

USB与其他设备交互基本上都是使用了USB-HID协议(Human Interface Device),它是一种USB设备的一个标准设备类,包含的设备非常多,一般为计算机提供接口,专门用于控制计算机操作方面。并且广泛用于USB鼠标,USB键盘,USB游戏杆等等,USB HID协议的方便之处在于操作系统自带了HID协议的驱动程序,不需要用户手动安装驱动程序就能使用,这也是USB设备即插即用的特性。HID设备最开始就是为了便于设备之间的交互,但便捷的背后隐藏着很大的安全隐患问题。

通常用户在日常使用USB设备与其他设备交互的同时,主机通过枚举设备描述符、配置描述符、接口描述符、端点描述符、HID描述符、字符串描述符以及语言ID描述符等来识别不同USB设备,在这个请求响应的过程中由于缺少了校验环节,即没有安全策略匹配审核直接就放行了USB设备,前面所提到的设备描述符是一个完整的数据结构,它可以由C语言或是其他编程语言编写,并且被存储在USB固件之中,设备描述符专门被用于说明一个USB设备的所有属性,标准设备描述符的长度是18字节,主机就是通过读取这些属性来识别插入的硬件设备是什么类型的USB设备。不同种类USB设备的描述都各不相同,如U盘,游戏手柄,键鼠的设备描述符都是不一样的,而不同USB设备描述符都是存储在设备自身,攻击者完全可以通过修改一些设备的描述符来进行伪装,通过USB-HID通信协议实现伪装的USB设备与主机进行交互。由于主机上的USB接口没有设备身份确认审核功能,当你插进一个U盘时电脑并没有鉴别你的U盘到底是不是真的U盘时,那么攻击者就有机可乘了。

1 USB 攻击的起源及攻击原理

随着物联网的发展,现在的许许多多设备都支持联网并能提供很多硬件接口,USB接口作为一个功能强大的接口同时也是计算机不可缺少的硬件设备,因此越来越多的病毒制造者已经不再局限于软件层面,更多地转向了对恶意硬件的研究,所谓恶意硬件就是攻击者通过修改硬件原有的固件程序达到代码执行或注入病毒的效果。由于主机系统对USB设备接入没有验证策略,恶意USB设备可以通过获取主机HID接口,伪装成计算机管理员进入系统,绕过主机安全策略或防火墙监控,最终取得操作系统最高控制权限。这种恶意USB设备直接代表用户,所以当脚本成功注入后即具有最高的执行权限。

在Black Hat黑帽大会上,柏林SRLabs的安全研究人员贾科布·莱尔(Jakob Lell)和独立安全研究人员卡斯滕·诺尔(Karsten Nohl)展示了被他们称作“BadUSB”(按照BadBIOS命名)的攻击方法,使用了这种USB安全漏洞的攻击方法非常难以防御,只要具备USB接口的设备都有可能通过这个漏洞被攻击。在HID协议下,U盘的固件,设备识别码可以被修改,植入恶意代码,将U盘伪装成键盘,鼠标,网卡等等设备,当然除了U盘,其他usb设备也可以伪装,例如:通过共享充电宝盗取手机信息等行为屡见不鲜。

使目标电脑被控制只需要让用户插入USB设备,恶意USB设备就会自动执行预置在固件中的恶意代码,下载服务器上恶意病毒文件,执行恶意操作。这里的U盘自动运行不同于以往的autorun.inf自动运行程序。它是烧录在USB固件里面的恶意代码。攻击者通过将恶意代码植入一个攻击芯片,这个攻击芯片实际是一个单片机,并且功能非常强大,可以用其将USB设备模拟为鼠标或是键盘,如果带有这个芯片的USB设备被插入到主机上面,电脑可能会把它识别成为一个键盘,利用烧录在固件里面的恶意代码对主机进行攻击,实现对主机的完全控制。

BadUSB是一种理论上操控任意USB设备被病毒或其他恶意代码感染的方法。简单地说,这就意味着攻击者可以使用包含处理器的常规USB设备,修改固件,并感染上恶意软件。这让USB设备成为进一步操纵计算机的工具。BadUSB当然也可以充当不同的输入/输出设备,例如物理键盘,鼠标,集线器,扩展坞,共享打印机,平板电脑,网络摄像头或身份验证令牌。比如它假装是键盘或鼠标,则恶意软件可以注入击键和鼠标单击,在计算机上执行多项操作,例如启动邮箱后将电子邮件发送到特定地址,并且附带来自目标电脑的相关文件。在用户的计算机,如果假装它是身份验证令牌,则BadUSB会强制计算机提示令牌密码,然后将其存储在闪存驱动器中,并在计算机解锁后把窃取到的令牌发送给攻击者。又或者说它通过启动Powershell与攻击者建立正向连接,让攻击者获取计算机的所有权限,可怕的是这个连接是用目标用户主动发起的,也就是正向连接,杀毒软件一般认为是用户主动的操作,所以杀毒软件一般都没有警示。

2 模拟攻击实验

实验通过U盘模拟键盘实现攻击,通过重写USB固件的信息,使用键盘的协议,模拟成键盘,执行普通的键盘功能,以高权限启动Powershell,并在Powershell中执行命令与攻击者建立连接,使得攻击者可以控制受害者的计算机。攻击过程如图1所示,

图1 攻击过程

2.1 实验准备及相关测试

此次实验采用的USB硬件是Arduino Leonardo,采用的开发软件是Arduino IDE 1.6.4版本,在IDE中添加了 #Keyboard.h支持库。被攻击端的系统为Windows7 64版本。

首先直接把BadUSB设备与电脑USB端口连接,启动Arduino IDE,对设备的型号,端口等进行选择,Aruduino程序由setup()与 loop()两个函数组成,setup()函数是程序的初始化,loop()函数主要用于存放程序代码.如图2,此次实验是模拟键盘向主机设备自动输入恶意代码达到攻击的目的,因此用到了#Keyboard.h支持库,关键API如下:

Keyboard.begin()//开始监听键盘通信

Keyboard.end()//结束监听键盘通信

Keyboard.press()//按下某个按键

Keyboard.print()//模拟键盘敲出字符串

Keyboard.release()//模拟松开某个按键

在实验之前先进行测试,如图2所示,BadUSB模拟键盘输入“Win”键+“R”键 打开“运行”同时输入“Cmd”调出终端控制台,在实验之前首先在BadUSB上烧录了“echo hello world ”从而保证测试能成功执行。

图2 实验前期测试

2.2 实验步骤设计

为了恶意代码能成功执行,在本次实验中使用了功能相对多一点的终端(Powershell)。实现攻击过程的实现分为以下几步:

第一步,启动窗口最小的cmd 以便更加隐藏的运行代码,具体代码:CMD/q/d/f:off/v:on/k MODE con:cols=15 lines=1,然后再Cmd里面调用功能更多的Powershell终端。

第二步,绕过杀毒软件,因为执行带有恶意代码的Powershell脚本在执行的时候会产生异常的流量,可以通过在Powershell执行命令前面加上“-W Normal-W Normal-w Normal ”绕过杀毒软件的检测。

第三步,执行恶意脚本。Powershell可以通过创建对象的方式从服务器上下载并执行指定文件,在此之前在服务器部署CobaltStrike服务端,攻击机安装好CobaltStrike客户端。并开启服务器HTTP服务。

3.3 实验操作

在服务器上启动CobaltStrike的服务端程序 在攻击者设备上启动CobaltStrike的客户端程序并且连接上服务端,建立新的监听器监听5555端口,并且生成Powershell脚本的恶意Payload。这里攻击的核心是BadUSB设备接入电脑后通过Powershell远程执行服务器端的恶意代码。把恶意代码Payload.ps1上传至服务器,将相关Arduino程序烧录至BadUSB设备中。

烧录完Arduino程序后,将BadUSB设备插入测试机的USB接口上,如图3所示在测试机上查看多了一个USB输入设备。

图3 成功检测到新的输入设备接入

如图4所示当测试机插入BadUSB设备,攻击机上就已经接收到了测试主机的Shell。BadUSB攻击成功。

图4 攻击机上查看测试机上线

3.4 实验结果分析

整个实验利用BadUSB插入电脑自动运行事先写入的程序从服务器下载恶意Powershell脚本并且以高权限运行然后与攻击端的CobaltStrike建立连接,成功获取到电脑的权限。本地控制端可以浏览被控端电脑的文件如图5所示,并且能下载被控端文件到本地。

图5 浏览被控端文件

同时也可以操作目标电脑完成一些特定的任务,比如可以通过目标电脑进行横向渗透或者纵向渗透,拿下域控权限,从而拿下整个局域网的权限,这对于很多公司来说是非常可怕的。在经过多次实验后发现,其在Windows10,Windows7操作系统中都可以轻松上线且都能实现相关功能,而且这种恶意脚本在运行的时候也不会触发到默认管理规则,杀毒软件也没有任何相关的提示。对于一些安全性较高的计算机设备利用BadUSB这种技术,很容易就能得到计算的权限。

3 防护措施

由于BadUSB是循环模范用户主动敲击键盘输入的一个过程,所以这种恶意BadUSB设备难以防范,恶意代码也在USB设备的固件中,操作系统的安全策略监测不到。对于用户来说也不可能完全禁用USB设备,而恶意USB设备又是以伪造键盘进行攻击,那一般我们的设备平时也就安装一个,因此可以通过设置策略即仅同意安装一个键盘,其余都禁用的方法防止被攻击,这样相对来说就是很好的防范了,当然也可以只允许信任的USB设备连接到您的PC。不要让陌生人使用计算机为手机充电。不要借用别人的USB设备将文件从一台PC移动到另一台PC。最好购买新设备仅供自己使用。注意自己的PC,尤其是在公共场所。显然,不应该将计算机放在开放的地方,任何人都可以走过去并插入包含恶意软件的USB驱动器。BadUSB可以伪装成任何基于usb协议的不一定是U盘的数据线转接器,因此要格外注意来自其他的USB设备。

4 总结

基于USB HID协议的攻击非常的危险,难以防御,可以说有无数种攻击方法。比如通过树莓派zero改造的BadUSB设备可以通过wifi或者蓝牙远程配置实时加载适应被攻击端的恶意脚本,并且还能够返回执行结果,可以检测大小写切换和Num小键盘的切换来获取更好的脚本执行时机,从而得到更好的利用。更可怕的是恶意代码存储在USB固件里,杀毒软件根本不能静态查杀。总之,远离USB技术,这可能不是一个好的选择,但这是真正确保自己免受USB错误影响的唯一方法。甚至无线鼠标和键盘之类的设备也可能包含恶意软件。使用有线鼠标和键盘,并根据需要使用云服务传输文件。具有涉密信息的计算机应该对可疑设备进行排查,定期检查第三方设备,对于不信任的USB设备一定要有防护心理,必要时可用虚拟机测试等等。同时,加强物理渗透等相关信息安全的知识也是必不可少的。

猜你喜欢
描述符固件U盘
基于结构信息的异源遥感图像局部特征描述符研究
基于AKAZE的BOLD掩码描述符的匹配算法的研究
采用U盘文件冗余方案实现TSP系统的可靠装载
自动辨认插口方向的U盘
基于深度学习的局部描述符
基于SHA1的SCADA系统PLC固件完整性验证方法
特征联合和旋转不变空间分割联合的局部图像描述符
基于UEFI固件的攻击验证技术研究*
基于固件的远程身份认证
提取ROM固件中的APP