如何将YubiKey武器化:从认证设备到键盘注入工具

本文详细介绍了如何将YubiKey重新编程为键盘注入工具,包括扫描码识别、payload构建及在受限环境中突破kiosk限制的实际应用。

如何将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记录原始按键数据。

操作流程:

  1. 通过xinput获取YubiKey设备ID(示例中为16)
  2. 开启三个终端窗口:
    • 顶部终端:运行循环读取键盘输入
    • 中部终端:实时显示原始键码文件
    • 底部终端:解码键码为可读文本
  3. 在已知键(如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
执行操作:

  1. 按上箭头+空格激活粘滞键对话框超链接
  2. 依次按下F1-F12
  3. 连按6次Shift调出对话框
  4. 按上箭头防止Enter键关闭窗口

Payload 2 - 浏览器热键组合
扫描码:3f2a06b3a83f4dca06b3283c443e3b3d40ab2c29e5115128454142435113113ae6e6e6e6e652
特色功能:

  • F6+退格键输入"c:"
  • Shift+Enter新窗口打开路径
  • 组合功能键操作浏览器菜单

Payload 3 - Shift+右键
扫描码:e5
简单直接模拟Shift+鼠标右键,快速调出PowerShell或命令提示符。

结论

YubiKey作为双因子认证设备虽缺少专业HID攻击工具的完整功能,但其合法外观在禁带U盘的高安全环境中具有独特优势。通过简单技术改造,可信设备也能转变为有效的攻击工具。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计