如何将YubiKey武器化
几年前,我的一款YubiKey因安全漏洞被召回,Yubico免费寄送了新款。旧设备闲置后,我尝试将其改造成类似USB Rubber Ducky的键盘注入工具——插入电脑时自动执行预编程按键序列。尽管标准YubiKey并非完美的USB攻击设备,但其便携性和隐蔽性使其在突破kiosk受限shell时颇具价值。本文将逐步解析如何利用美式键盘布局识别所有可生成的按键,并基于此构建有效payload。
步骤1:下载YubiKey个性化工具
Yubico官网提供跨平台的YubiKey Personalization Tool(YPT),用于配置设备功能。本文以Linux版本为例,Windows/Mac版本操作类似。
下载链接:YubiKey Personalization Tool
步骤2:编程静态密码
默认情况下YubiKey每次生成动态认证令牌,但也可设置为输入静态密码。为测试是否支持Ctrl、Alt等特殊键,我启动了YPT并选择顶部菜单的"Static Password"选项。
在配置界面中:
- Configuration Slot: Slot 1
- Keyboard: US Keyboard
- Password: abcdef
输入密码时,右侧"Scan Codes"字段会显示对应十六进制值。此发现为后续直接编程十六进制扫描码(包括不可输入键)奠定了基础。配置完成后点击"Write Configuration"写入设备。
⚠️ 警告:操作前请确认YubiKey未用于认证服务,否则会清除原有配置需重新注册。
步骤3:识别十六进制键值码
通过逐字输入a-z观察扫描码范围(04-1D),我发现编码规律:小写字符位于00-7F,大写字符(Shift+键)位于80-FF区间。为捕获非打印键(如Ctrl),使用Linux工具xinput及自定义脚本xinput-keylog-decoder记录原始按键数据。
操作流程:
- 通过
xinput获取YubiKey设备ID(示例中为16) - 开启三个终端窗口:
- 顶部终端:运行循环读取键盘输入
- 中部终端:实时显示原始键码文件
- 底部终端:解码键码为可读文本
- 在已知键(如04=a, 05=b)间插入待测扫描码,观察实际效果
例如扫描码2A实际对应退格键,通过解码工具捕获到按键序列为a→退格→b。
步骤4:构建实用Payload
尽管YubiKey无法直接模拟Ctrl/Alt/Win键,但支持以下关键操作:
- Shift键(通过"Shift+无效果"扫描码实现)
- 功能键F1-F12
- 菜单键(等效鼠标右键)
- Escape键
- Shift组合键
这些功能在突破kiosk限制时极为有效。常见逃脱手法包括:
- Escape:关闭当前窗口
- 连按5次Shift:调出Windows粘滞键对话框
- F1:打开帮助对话框
- F6:选中浏览器地址栏
- Shift+F10:模拟鼠标右键
实战Payload示例
Payload 1 - 功能键与粘滞键测试
扫描码:522c3a3b3c3d3e3f404142434445e6e6e6e6e6e652
执行操作:
- 按上箭头+空格激活粘滞键对话框超链接
- 依次按下F1-F12
- 连按6次Shift调出对话框
- 按上箭头防止Enter键关闭窗口
Payload 2 - 浏览器热键组合
扫描码:3f2a06b3a83f4dca06b3283c443e3b3d40ab2c29e5115128454142435113113ae6e6e6e6e652
特色功能:
- F6+退格键输入"c:"
- Shift+Enter新窗口打开路径
- 组合功能键操作浏览器菜单
Payload 3 - Shift+右键
扫描码:e5
简单直接模拟Shift+鼠标右键,快速调出PowerShell或命令提示符。
结论
YubiKey作为双因子认证设备虽缺少专业HID攻击工具的完整功能,但其合法外观在禁带U盘的高安全环境中具有独特优势。通过简单技术改造,可信设备也能转变为有效的攻击工具。