前言
对于“近源渗透”这一术语,相信大家已经不再感到陌生。它涉及通过伪装、社会工程学等手段,实地侵入企业办公区域,利用内部潜在的攻击面——例如Wi-Fi网络、RFID门禁、暴露的有线网口、USB接口等——获取关键信息,并以隐蔽的方式将评估结果带出并上报,以此揭示企业安全防护的漏洞。
在此,我们仅作为学习交流,提醒大家,近源渗透涉及相关法律规定,请务必谨慎行事!
我自己对HID ATTACK的启蒙非常早,在16年左右,就有使用过类似橡皮鸭的HID(Human interface device,缩写HID,直译为人类接口设备)设备,最初的时候应该是在freebuf上看到的,以及国内的badusb网站。使用便宜的Digispark USB开发板基于ATTiny85,其速度较慢,且对于win7不免驱。使用Arduino IDE开发相关的payload,如今在github还是可以找到很多案例,对于入门HID非常简单。然后又找到一个速度较快的,基于ATmega32U4的开发板,免驱,但开发的代码比较复杂,但github也有案例。
我本人最终选择了2个方案,树莓派pico(RP2040)与DIY基于CH552/554的开发板,因为他们俩都能实现自带flash,本篇文章将主要循序渐进的讲这两个方案的实现过程
当然还有一个高阶方案就是给支持Nethunter Kali内核的手机刷上Nethunter系统,内自带两种HID ATTACK方式,本人使用的是Google Pixel 6p
PicoDucky
此方案主要围绕https://github.com/dbisu/pico-ducky来实现
需要准备
- RP2040开发板 or 树莓派pico开发板 (成本20以内)!
- 一根带数据传输功能的 Type-C线
开始部署
设备到手后先长按BOOT按钮,如图,然后使用数据线连接上电脑,直到出现一个名为RPI-RP2的存储设备
将adafruit-circuitpython-raspberry_pi_pico-en_US-8.x.x.uf2复制进去,版本不限只需是8.x.x即可,可以到上方GitHub链接中获取,也可以到文末的附件中获取,此操作为安装micro-python到设备
复制完成后刚刚的存储设备名字会变为U盘,若没变的话请重新接入设备,发现其中文件消失,此时再复制pico-ducky的文件进去,此操作为安装pico-ducky进去,过程消耗1分钟左右
复制完成后,单点RST按钮,等待几秒会自动打开notepad输入Hello World!字样,即完成
具体攻击代码可在payload.dd中修改,其语法规范为橡皮鸭duck的规范,但某些功能不支持,最后面会阐述
此方案还可以使用W版本,就是带WIFI的版本,可以手机连接热点切换payload,具体看作者GitHub中内容
此方案成本控制在20以内甚至更低
CH552G
此方案主要围绕https://github.com/Push3AX/USBAirborne来实现
需要准备
- 首先注册嘉立创,下载嘉立创下单助手到其中左侧下拉栏中免费领取打板券(需进行考试,内容为电子相关)
- 下载工程Gerber文件导入到嘉立创内进行生产PCBhttps://raw.githubusercontent.com/Push3AX/USBAirborne/main/Hardware/Gerber_PCB1_2022-06-19.zip也可以在嘉立创开源平台中自己编辑项目后导出Gerber文件(主要是添加点自己的丝印等)https://oshwhub.com/PushEAX/3079905e2c434c54902d77ab60f6c747
- 打板的时候,板子2层 1.6厚即可,沉金,其他参数默认
- 物料 10uf电容 100NF电容 22k电阻 W25QFLASH CH552G/554G单片机 拨码开关2PIN USB公头
- 电阻电容焊接点位
开始焊接
热风枪焊接(推荐)
电烙铁焊接
焊接前将双手去静电,焊接时准备防静电镊子
根据点位焊接,注意器件的方向
- 最终成品如下
- 也可以购买一个G2版型通用的U盘外壳搭配使用
开始部署
下载烧录软件WCHISPTool
将拨码开关2打开开启烧录模式
插入设备后打开烧录软件
配置型号 用户程序文件 且USB设备列表成功显示了CH552设备
关闭烧录模式,插入设备,会HID打开百度网站,说明此设备已经部署成功
关闭攻击模式使得设备flash可读写,Autorun.inf文件中为具体payload,其可利用Windows的自动播放功能进行攻击也可以使用HID攻击,我们只使用HID功能,因为前者在部分系统中是默认关闭的,没有效果
[BadUSB]
[Win+R]
[Delay][Delay]
notepad[Enter]
[Delay]
Hi![Enter]
ThisisatestofUSBAirborne[Enter]
[Win+R]
[Delay]
[Delay]
https://www.bilibili.com/video/BV1uT4y1P7CX/
[Enter]
[BadUSB]
;后续是AutoRun攻击的配置文件。USBAirborne支持同时进行两种攻击。
[AutoRun]
autoplay=true
;将驱动器图标伪装为U盘图标
icon=c:\windows\system32\shell32.dll,79
;驱动器名称
label=Nothinginside
;攻击Payload,此处为调用cmd打开网页
open=cmd.exe/c"start https://www.bilibili.com/video/BV1uT4y1P7CX"
run=cmd.exe/c"start https://www.bilibili.com/video/BV1uT4y1P7CX"
;劫持右键菜单
shell\open=打开(&O)
shell\open\Command=cmd.exe/c"start https://www.bilibili.com/video/BV1uT4y1P7CX"
shell\opennewwindow=在新窗口中打开(&E)
shell\opennewwindow\Command=cmd.exe/c"start https://www.bilibili.com/video/BV1uT4y1P7CX"
设备根据[BadUSB]中框起的代码作为HID攻击代码,其语法类似橡皮鸭duck,我们可以在作者固件源码中得到具体内容,后续[AutoRun]则为一些配置和Windows自动播放攻击的代码
BadUSB的配置文件支持一些组合键和高级命令:
[Enter]:按下回车键
[Shift]:按下Shift键
[Capslock]:切换大小写
[Win]:按下Win键
[Win+R]:打开“运行”窗口
[Alt+F4]:关闭当前窗口
[Win+D]:显示桌面
[Win+L]:锁定计算机
[Win+E]:打开Windows资源管理器
[Ctrl+Alt+Del]:打开安全选项
[Delay]:等待500毫秒
[Format]:格式化储存
此方案成本控制在10以内甚至更低(单个)
思考问题
- 这两个方案的操作是否过于复杂了?对于其他现成方案来说有什么优点呢?
其实我们可以使用市面上的其他开发板来实现HID攻击,但是本文章所述的两个方案他们都自带4-16mb的flash(取决于购买的设备)可以存储,可以作为U盘使用,更重要的是,可以存储恶意进程到U盘之内,使用cmd或者powershell指令,低风险的执行,不用远程下载。
有些人说,是不是可以直接把恶意进程转base64后使用HID设备全部打出来然后解码转二进制文件运行?是可以,但太慢了
- 方案目前是最优解吗?
其实并不是最优解,这两个方案的伪装效果不如数据线类型的HID设备
方案一其中的pico-ducky只不过是将pico废物利用了,其不兼容很多外壳,且其USB-A版本价格偏高,虽小但也没有外壳可用,如图,且其会发出光亮,伪装效果不佳,但速度较快,部署简单
方案二作为自diy的设备,可以实现外壳兼容,flash存储,且可以自写固件添加功能,例如格式化设备清除痕迹等,但其不是最优解主要体现在他的速度稍慢,连接上电脑需要5秒左右的初始化时间,且其固件功能不够多
- 能过输入法吗?
过输入法常常出现在中文系统下,输入法开启导致HID输入的内容变更,导致无法执行
常用的方法是开大小写,但是遇到一些区分大小写的内容,就无法使用了
解决问题
- 如何取flash中的恶意进程出来
((wmiclogicaldiskwheredrivetype=2getdeviceid|findstr/v"DeviceID")-join""-replace"[\s]","")+"\\1.exe"|Out-File-FilePath"c:\\users\\public\\x";Invoke-Expression(Get-Content"c:\\users\\public\\x")
使用这个powershell代码可从最新插入的U盘设备(type2)中获取1.exe的路径,保存在public文件夹内,然后取这个路径文件运行,算是比较好用的一个取文件方案,欢迎补充优化!
- 伪装性
解决这个问题最优解是使用hackusb数据线,在几年前其作者因当兵鸽子了很久,现在复出了(很多人以为是进去了),听说现在迭代到很强的版本了
对于本文方案一的解决思路就是,重绘RP2040的PCB制作一个类似G2板样的,去除或保留RGB灯,这个思路成本太高了
对于其他建议我认为可以使用无flash版本的最小ch552g板子的HID设备,开源地址https://oshwhub.com/Inkusa/ch552g-zui-xiaobadusb_copy 基本上就是贴着usb母口来执行了,缺点是难扣下来,成本非常低,还可以使用usb接收器外壳的HID设备,https://oshwhub.com/hexesdesu/USBjie-shou-qi-wai-qiao-Badusb,自认为挺不错的,当然还有数据线版本,https://oshwhub.com/monkeylord/badusb-cable
- 输入法
解决这个问题目前我个人知道的方案就是使用 橡皮鸭v3版本其固件可以读取大小写锁定状态 使用if语句判断来看是否要大小写来绕过,而输入法是系统软件层面的,我们可以使用阶段payload,比如一阶段执行一个程序将输入法切换为英文后使用阶段二来进一步利用,提供一个思路:Windows在不同进程窗口中会自动切换输入法状态为英文或中文
- 速度
速度取决于单片机,越高端的理论上速度越快,当然也需要搭配一个较好的固件,不如方案二中作者给了解决方法,将payload直接在编译前写死在代码中,不用等待5秒初始化就可以执行payload了,毕竟还需要读取autorun.inf中的内容再执行
- 什么是最优解
没有最优解,适合自己的才是最优解
免责声明
(1)本文提到的两个方案均取自于网络
(2) 本项目仅用于网络安全技术的学习研究。旨在提高安全开发能力,研发新的攻防技术。
(3) 若执意要将本项目用于渗透测试等安全业务,需先确保已获得足够的法律授权,在符合网络安全法的条件下进行。