BadUSB制作与使用

勇者愤怒,抽刃向更强者;怯者愤怒,却抽刃向更弱者。
—— 《华盖集·杂感》

BadUSB原理及前景

HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。

从传统意义讲,当你在电脑中插入一张CD/DVD光盘,或者插入一个USB设备时,可以通过自动播放来运行一个包含恶意的文件,不过自动播放功能被关闭时,autorun.inf文件就无法自动执行你的文件了。然而通过TEENSY,你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器,与存储空间,和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。

BadUSB早在2014年底的PacSec会议上便已经提出,这是USB协议中的一个漏洞————USB设备可以伪装成为其他任何设备,例如输入设备、网卡等等。

常见硬件介绍

Psychson

此项目包含了一系列制作BadUSB的方法以及列出了所支持的设备
2303 Chip

Kingston DataTraveler 3.0 T111 8GB
Silicon power marvel M60 64GB
Toshiba TransMemory-MX™ Black 16 GB
Patriot Stellar 64 Gb Phison
Silicon Power32G

2307 Chip: (i.e. not supported)

Kingston DataTraveler 100 G3 8GB
Kingston DataTraveler 100G3 16GB
Kingstone DataTraveler DTM30 16GB
Silicon Power M01 32GB
Silicon Power M01 8GB Y
Silicon Power M01 8GB X

2309 Chip (i.e. not supported) Silicon Power BLAZE B30 32GB USB 3.1
项目地址

USB RUBBER DUCKY

_      _      _      USB       _      _      _

(.)< (.)> (.)= Rubber >(.) <(.) =(.)
_) _) _) Ducky! (_/ (/ (/

The USB Rubber Ducky is a Human Interface Device programmable with a simple scripting language allowing penetration testers to quickly and easily craft and deploy security auditing payloads that mimic human keyboard input. The source is written in C and requires the AVR Studio 5 IDE from atmel.com/avrstudio. Hardware is commercially available at hakshop.com. Tools and payloads can be found at usbrubberducky.com. Quack!

大黄鸭,售价45刀。

创建Payload非常简单,选择合适的平台

然后根据所想要实现的目标勾选相对应的功能即可

出售链接
payload库
payload创建及加密

Teensy

Teensy是一个完整的基于USB的微控制器开发系统,占地面积非常小,能够实现多种类型的项目。

测试也是使用Teensy++2.0来实现的,特点:Windows免驱动
价格40RMB左右。

环境搭建:

1、Teensy++2.0板子
2、Arduino IDE 1.8.4
链接:https://www.arduino.cc/download_handler.php?f=/arduino-1.8.4-windows.zip)
3、Teensyduino
链接:https://www.pjrc.com/teensy/td_140/

安装Teensyduino时,选择Arduino IDE所在的目录一路NEXT即可。

安装好环境之后,插入开发板,配置IDE选项如下图所示

将样例代码写入IDE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "Keyboard.h"

/* Init function */
void setup()
{
// Begining the Keyboard stream
Keyboard.begin();

// Wait 500ms
delay(500);
delay(3000);

Keyboard.press(KEY_LEFT_GUI);
Keyboard.press('r');
Keyboard.releaseAll();

delay(500);
18.
Keyboard.print("cmd");
delay(1000);
Keyboard.press(KEY_RETURN);
delay(50);
Keyboard.release(KEY_RETURN);

delay(1000);
Keyboard.print("echo Hello,Teensy++2.0!");
Keyboard.press(KEY_RETURN);
delay(50);
Keyboard.release(KEY_RETURN);
delay(700);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(KEY_F4);
Keyboard.releaseAll();
// Ending stream
Keyboard.end();
}
/* Unused endless loop */
void loop() {}

点击上传

这时可能会提示摁一下Teensy上边的按钮进入可编程模式

也就是板子这个地方

摁一下之后窗口会有反应,reboot之后就写入完成了。

测试过程中并没有出现需要摁按钮的情况,上传代码后会自动重启并执行其中的代码。

测试

插入设备后,自动弹出cmd框,并运行Hello,Teensy++2.0!,仅作测试,也可使用cmd /c来隐藏命令框的弹出,或使用powershell,vbscript来编写其他功能更为强大的代码。

Arduino Leonardo

Arduino Leonardo的处理器核心是ATmega32u4,同时具有20路数字输入/输出口(其中7路可作为PWM输出,12路模拟输入),一个16MHz晶体振荡器,一个USB接口,一个电源插座,一个ICSP header和一个复位按钮。[4]

Digispark

特点:Windows不免驱,Linux免驱动(忘记是在哪看到的了,这个要自己测)
驱动安装与开发板环境配置见5

BadUSB防御措施

注册表中限制

通过创建一系列黑名单来限制弱点的暴露7

start -> run (gpedit.msc) -> Computer Configuration > Administrative Templates > System > Device Installation > Device Installation Restrictions

其中提供了诸多策略针对设备安装限制,可以通过编辑相关属性从而做到对BadUSB的防御。

中文版:6
英文版:7

硬件防御

一些转接头只保留了充电功能取消了数据传输功能,从而在硬件层面上防止了BadUSB

参考文章

1、利用Arduino快速制作Teensy BadUSB
2、低成本玩转硬件安全
3、BadUSB的前世今生:USB RUBBER DUCKY和Teensy USB
4、Arduino Leonardo
5、Digispark(ATTINY85) 微型开发板驱动安装与开发环境配置教程
6、BadUSB防御初探
7、How to Fix the Critical BadUSB Security Flaw in Less than 10 Minutes