BadUSB原理介绍、利用和防护

BadUSB 介绍

BadUSB攻击是一种利用USB固件中的固有漏洞的攻击,将一个写入了恶意代码的定制USB设备,例如U盘,插入受害者电脑,它会伪装成HID设备(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行操作。它由Karsten Nohl 和 Jakob Lell 在2014年BlackHat大会上提出,特点是恶意代码存在于U盘的固件中,杀毒软件无法访问固件区域,也就没有办法查杀这些恶意代码。应对这一攻击最有效的方法就是不要随意插入未知、不受信任的USB设备。

BadUSB 原理

在讲解BadUSB的原理之前要先介绍一下Rubber Ducky 和Teensy,这两种攻击也是利用HID进行攻击,将设备模拟成键盘进行按键操作,但这两个设备的缺点在于需要定制硬件设备,而BadUSB的优点就是它可以使用通用的USB设备来达成攻击。

但值得注意的是,不是所有USB设备都能制作BadUSB。由于需要将恶意代码写入到固件中,我们需要编写固件并烧录到设备中。想要编写固件也就需要掌握USB设备中的芯片的指令规范,然而开发文档只有部分芯片的是开放的,所以实际上能够制作BadUSB的设备有一定的条件。

Karsten的文章中提到,首先需要在网上寻找到泄露的固件和闪存工具,通过逆向工程在固件中添加和修改新的功能,他们所逆向的是 Phison 2303芯片,具体的实验代码可以在他们的github中看到。逆向这一步具有较大的难度,而Teensy和Arduino的开发板由于有详细的说明文档和开发环境,制作难度降低了许多,其他的USB设备就需要自己查找有没有官方的文档。在后文的实践环节中我们采用的就是teensy。

BadUSB 使用

本文使用的是Teensy++ 2.0开发板 首先在官网下载arduino并安装 https://www.arduino.cc/en/Main/Software

接下来需要安装Teensyduino 这个arduino的插件 https://www.pjrc.com/teensy/td_download.html

点击工具-编程器,选择USBasp,点击工具-开发板,选择Teensy++ 2.0,将程序写入代码框内,先选择验证代码,再选择上传代码。(上传前先连接好开发板)

接下来就是代码部分了 下面是一个启动cmd并输入helloworld的demo


星期五实验室 | BadUSB原理介绍、利用和防护

代码的主体是setup,和loop,分别代表的是执行一次和循环执行,当然loop里也可以通过while(1)这种方式阻止它的循环执行。这个demo首先会闪烁4次然后开始通过运行调用cmd,输出helloworld。这里我们调用了Teensy的Keyboard库(和Arduino自带的Keyboard库略有不同),通过这个库的函数我们可以模拟键盘的各种操作,比如按下按键,释放按键,输入字符串。我们也可以自己写一些函数将其组合起来便于我们的使用,例如demo中的AltF4(),CommandAtRunBar()

基础操作


星期五实验室 | BadUSB原理介绍、利用和防护

组合键

使用修饰键,共有4个修饰键,shift,alt,ctrl,GUI(windows key) 最多可以同时发送6个普通键和4个修饰键,先用setmodifier和setkey1选择想按的键,再用send_now()发送组合。使用后记得重置为0

星期五实验室 | BadUSB原理介绍、利用和防护

具体各个按键对应的代码可以查看库中的表格 teensy Keyboard库介绍https://www.pjrc.com/teensy/td_keyboard.html

需要注意的是开启中文输入法的时候,badusb的一些模拟输入可能会失败,可以通过关闭输入法或先用badusb按下大写键(capslock)解决

模拟鼠标

badusb也可以模拟鼠标进行操作

下面的demo可以操控鼠标画三角形

星期五实验室 | BadUSB原理介绍、利用和防护

也可以操控鼠标点击

星期五实验室 | BadUSB原理介绍、利用和防护

Teensy LC 和3.x 支持鼠标定位到屏幕的某一位置

星期五实验室 | BadUSB原理介绍、利用和防护

防范措施

打开本地组策略编辑器,选择计算机配置->管理模版->系统->设备安装->设备安装限制

可以看到这里一共有十二条设置,可以根据我们的实际需要来进行设置。

星期五实验室 | BadUSB原理介绍、利用和防护

首先我们启用允许管理员忽略设备安装限制策略,这一条可以让我们有确定需要使用的新设备一直被阻止安装时用管理员权限安装。

接着我们可以根据需要设置白名单或者黑名单,比如阻止使用与下列设备安装程序类相匹配的驱动程序安装设备,然后添加键盘的GUID,这一条可以用来禁止安装新的键盘类设备。

keyboard GUID<4d36e96b-E325-11CE-BFC1-08402BE10318>

我们也可以选择禁止安装可移动设备,这样任何新设备插入时都会被阻止安装。当然这样的限制可能会对日常使用造成很多麻烦。

还有一种防范措施就是不要随便使用未知来源的USB设备,良好的安全意识可以减少很多风险和麻烦。


引用

teensy网址 https://www.pjrc.com/teensy/

BadUSB github https://github.com/brandonlw/Psychson

防范措施 https://heimdalsecurity.com/blog/badusb-exploit-vulnerability-fix/


星期五实验室 出品


分享到:


相關文章: