BADUSB的制作以及关于解决BADUSB输入法和大小写问题
渗透测试
现在有很多badusb制作的相关文章,以及解决输入法问题的文章,但是我没能找到能够使badusb在所有情况都能成功运行的方法,经过我的研究,我发现了以下的方法能够让badusb在所有情况下都能使用。
前言 -- 现在有很多badusb制作的相关文章,以及解决输入法问题的文章,但是我没能找到能够使badusb在所有情况都能成功运行的方法,经过我的研究,我发现了以下的方法能够让badusb在所有情况下都能使用。本文的研究基于:digispark开发板,arduino-ide编辑器 Badusb历史 -------- 在 2014 年之前,USB 设备大多被视作相对安全的外设,人们普遍认为 U 盘仅具备存储功能,安全威胁也多集中于 autorun 病毒与文件恶意程序。直到**Karsten Nohl 与 Jakob Lell**在**Black Hat USA 2014**大会上公开 BadUSB 漏洞,USB 设备的安全认知被彻底颠覆。 两位安全研究者发现,USB 设备主控芯片的固件可被恶意重写,普通 U 盘能伪装成键盘、网卡、鼠标等 HID 设备,绕过系统与杀毒软件检测,直接向主机下发指令、窃取数据甚至劫持网络。这种攻击发生在**固件底层**,系统无条件信任 USB 设备的身份声明,传统防护手段几乎失效。 该研究的公开,标志着**BadUSB 正式诞生**。它不再依赖文件传播,而是通过硬件身份模拟实现无文件攻击,直接揭开了 USB 协议设计中信任机制的核心缺陷,也由此开启了近源硬件攻击的新时代,成为后续各类 USB 攻击设备与安全防御技术的重要起点。 Badusb原理介绍 ---------- Badusb本质是一块带有USB接口的开发板,Badusb在连接设备后会主动发送一个“描述符”来声明自身类型,而设备缺乏对设备身份的有效验证机制,因此USB可以伪装成HID设备(人机交互设备),使其插入设备后能够伪装成鼠标,键盘等等设备,而一个自动输入的"键盘"就可以完成一个攻击过程了。 只需要一个键盘,我们就可以启动一个终端,执行任意代码,这就可以拓展出很多攻击方法了,例如:拉取并执行一个木马,拉取一个收集浏览器数据的脚本,甚至是植入挖矿病毒。 和大部分人想象的不同,Badusb的运行并不易触发EDR和AV的告警,这是因为Badusb本质上是模拟成了一个键盘,在计算机眼里这只是一个键盘在高速的输入,所以杀软一般只能从Badusb所执行的内容里下手查杀,而我们精心构造的恶意命令很轻易能绕过杀软。 选购Badusb主板 ---------- BadUSB的程序通常是直接烧入硬件主板的,常见的BadUSA主板有:Digispark(性价比,入门款)、Raspberry、Arduino 系列(Leonardo/Micro/Pro Micro)、Teensy (中高阶选择)等等,可以根据自己的需求选购。(本议题使用的是Digispark)。 ### Arduino Pro Micro  这是由arduino官方推出的微型开发板,不同于arduino的其他开发板,该开发板体积小,常用于DIY电子项目、键盘改装、传感器控制等控制场景,我们可以像使用其他arduino版一样,通过arduino IDE直接编程、开发和烧录,上手非常容易。 ### Teensy  Teensy是由SparkFun Eletronics销售、基于 PJRC Teensy 平台的高性能微控制器开发板。它采用 NXP i.MX RT1062 微控制器,内核为 ARM Cortex-M7,主频最高可达 600MHz,是目前主流微控制器中性能极高的型号之一。 Teensy,广泛应用于高速控制、音频处理、机器人、实时信号处理等对性能和实时性要求极高的嵌入式场景。 该主板也是我们制作Badusb的中高阶之选,使用其作为Badusb可以获得更快的相应速度,更多拓展玩法等。 ### Raspberry Pico(树莓派系列)  树莓派Pico系列微控制器开发板,是树莓派基金会推出的首款微控制器级产品,基于自研的 RP2040 芯片构建。该系列开发板以低成本、高性能、易上手著称,广泛用于学习编程、控制电子设备和制作物联网项目,而树莓派系列的主板无疑是开发圈里鼎鼎大名的系列了,懂得使用树莓派的开发人员上手很容易。 我们给树莓派Pico加上Usb拓展即可成为一个Badusb,甚至可以制作出更多的玩法,指的大家研究探索。 ### Digispark  Digispark是一款基于 ATtiny85 微控制器的微型 USB 开发板,因其体积小巧、价格低廉且支持 Arduino IDE 编程而广受欢迎。该板子原生支持 USB 通信,可直接模拟键盘、鼠标等 HID 设备,常用于自动化脚本、安全测试或小型嵌入式项目。 Digispark 的核心优势在于其 USB 功能无需额外芯片即可实现,这使得它在制作“USB 橡皮鸭”类攻击工具或自动化输入设备时非常流行。它通常预装了简化版的 Bootloader,可通过 Arduino IDE 直接上传代码,开发门槛较低。 此外,Digispark 的引脚布局紧凑,虽然资源有限(8KB Flash、512B SRAM),但对于简单的控制任务或学习嵌入式编程来说,性价比极高。 该主板可以作为Badusb入门款,有着很高的性价比,本次文章也是基于Digispark展开。 问题和痛点 ----- 目前BADUSB在中文环境下不太友好,因为中文输入法的存在,badusb在输入命令的过程中就会被输入法影响成为一串看不懂的中文,那么我们为了能够让badusb成功执行命令就要做出一些操作。  badusb制作 -------- 我们研究基于的是digispark开发板,下面先演示简单的badusb制作作为本的基础。 ### 环境配置 在此之前我们需要先配置环境,因为Digispark的官网已经挂了,只参考现在市面上的旧文章很可能导致环境配置失败,所以请按照下面的方法配置: 1.首先我们需要安装驱动用于烧录,我们可以在github上找到对应的digispark启动,驱动github地址: <https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip>  2.为arduino-ide配置Digispark烧录环境 Digispark的官网已经挂了,所以只能用github上的json配置文件: [https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package\_digistump\_index.json](https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json) 在文件->首选项的设置里面添加  之后就可以在库管理器中看到了,点击安装即可  在这些步骤做完了我们就可以开始编写Badusb。 ### 基础开发 我们需要学会以下几个最基本的函数: ```php DigiKeyboard.print("我是yayaliou"); //print直接打印整段话 DigiKeyboard.sendKeyStroke(KEY\_R, MOD\_GUI\_LEFT); //win+r DigiKeyboard.delay(500); //延迟(很有必要,如果没有延迟就会出现很多问题!) DigiKeyboard.sendKeyStroke(KEY\_CAPS\_LOCK) //切换大小写 ``` DigiKeyboard.print()函数使用于模拟键盘输入,这里我们要注意,badusb在输入字符的时候不是像复制粘贴一样,一口气吧所有的字符贴进去,**而是像键盘输入一样一个字一个字输入进去**。只不过输入的速度很快,但是在执行其他模拟键盘的函数时,如果没有做延迟,很可能输入还没完成就执行了下一步操作,导致输入不完整。 DigiKeyboard.sendKeyStrike()函数可以用于模拟键盘执行某些操作,例如win+r打开运行窗口,切换大小写等。这里还有一个和他相识的函数,但是很多文章没有提到的按键:DigiKeyboard.sendKeyPress() DigiKeyboard.**sendKeyPress**()函数,这个函数和DigiKeyboard.senKeyStrike的区别是,DigiKeyboard.**sendKeyPress**是按住是按住,DigiKeyboard.senKeyStrike是按一下松开,这个逻辑我们可以在DigiKeyboard.h中看到  DigiKeyboard.senKeyStrike就是由两个DigiKeyboard.**sendKeyPress**组成,一个按下,一个释放。 DigiKeyboard.delay()函数用于延迟操作,因为模拟键盘输入是有延迟的,有可能badusb已经执行完输入的操作,输入信号已经传入了计算机,但是**系统处理键盘输入有速度上限,BadUSB 按键速度远快于人手**,就会导致字符漏输、错序,快捷键被截断等问题,因此每个操作都需要一个延迟。 学会了这几个函数,就足够做一个最基本的badusb了,这里我用cs的web传递做演示 先登陆上cobaltstrike,选择WEB传递攻击  选择好监听器以后,我们会得到一个poewrshell命令  这个时候我们只要在受害主机用powershell执行这个命令,受害主机就会被植入cobaltstrike木马,当然这位为了制作一个测试用的badusb才选择这个方法,因为web传递攻击很容易被查杀。 下面我们为Badusb烧入这个代码:  改代码的意思是:win+r启动运行窗口——延迟500毫秒——输入恶意powershell命令——延迟500毫秒——回车执行这个代码 烧录进入主板以后,当插入主机,主机就会自己运行win+r,输入powershell的命令,然后回车执行。 badusb一些机制 ---------- 我们不能发现,如果我们print函数内传入的是中文,那么在badusb运行的时候会直接输出中文,连输入法都不需要,那么如果我在小写的环境下在print内传入大写字母会怎么样呢?   可以看到,直接输出了大写字母 那么在大写的情况下,print内也是大写字符串会怎么样?  变成小写了,这就有有负负得正的效果了。 解决输入法问题 ------- ### 问题难点 我们研究完一些机制,就可以开始研究解决输入法问题 想要解决输入法问题,网上文章最常见的方法就是切换以下大小写,  这样可以解决80%的情况,那么为什么是80%呢,如果用户在插入badusb前就是大写,那么我们的badusb在这个时候切换一下大小写,转台就会恢复成小写了,输入法这个时候就重新激活了,接下来我们就要解决这个问题。 ### 巧用大小写字母 首先,我们发现把print内的字符串换成大写以后,在被攻击主机初始状态下是小写情况下,插入badusb后,会先根据程序切换成大写模式,然后print出来的会是小写字母。 相反如果在初始情况是大写情况下,插入badusb,print输出出来的就是大写。 这个时候我们切换成中文输入法试试 小写状态插入:  大写状态插入:  我们发现再也没有那些看不懂的中文了,但是出现了另外一个问题,在大写时空格被吞了,这是因为空格被输入法识别成输出第一个字符串的操作。  那么我们只需要双写空格,就可以解决这个问题(虽然小写模式下,一个空格位会有两个空格,但是这是不影响命令执行的!)   这个时候我们只需要把要执行的命令都替换成大写,双写空格就可以成功执行了  关于Badusb防御的思考 ------------- 作为网络安全工作人员,我们了解了Badusb后,就需要思考相应的防御措施。我认为防御Badusb主要有两个大的方面: 1.防范于未然,Badusb的所有攻击前提都是Badusb能够直接连接设备,我们需要对企业加强安全意识教育和规范,陌生U盘不随意连接设备,离开工位有锁屏或关机的习惯,重要网络设备做好物理保护措施。针对外部暴露的usb接口我们需要做好封堵(封口塞),我们还可在组策略禁止安装 HID 设备,只放行已经注册的设备 2.做好应急措施,当设备遭到攻击后,能够通过安全设备即使捕捉发现,有一套对应的应急方案,能够快速响应,排查,清除。
发表于 2026-05-08 09:00:01
阅读 ( 2551 )
分类:
安全工具
1 推荐
收藏
0 条评论
yayaliou
2 篇文章
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!