欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Yubikey的武器化之路,以攻击kiosk自助设备为例

来源:本站整理 作者:佚名 时间:2019-06-10 TAG: 我要投稿

Yubikey是一个小型的USB设备,在电脑看来,它是一个USB键盘设备。
几年前,我有一个受安全漏洞影响的YubiKey,为了解决这个问题,Yubico公司免费送给我一个全新的YubiKey。由于我在收到新的YubiKey之后没有使用旧的YubiKey进行身份验证,我决定看看是否可以将它变成类似于USB Rubber Ducky的东西,USB Rubber Ducky是一款模仿人工键盘输入的设备,外形和U盘一样,模拟键盘输入速度可达到1000个字符每分钟,并且适合任何操作系统,包括安卓等移动OS,它使用的是它特定的脚本语言,用记事本就可以编写,通过他配套的jar程序编译成inject.bin放到sd卡里运行。事实证明我能够做到这一点,具体步骤(总共4步),我会在下面讲到。
第1步:下载YubiKey个性化工具
YubiKey在其网站上提供了一个名为YubiKey Personalization Tool(YPT)的程序,可用于在Linux,Windows或Mac上自定义YubiKey的不同功能。我在这篇文章中使用的是Linux版本,但Windows和Mac版本应该非常相似。
如果你像我一样使用Linux版本,则可能需要使用YubiKey提供的源代码构建程序。有关如何操作的说明,你可以在源代码附带的README文件中找到,很容易理解,所以我不在这里介绍它们。
第2步:使用静态密码对YubiKey进行编程
在默认配置中,YubiKey将在使用时输入唯一的身份验证令牌,并且该令牌会在每次使用时改变。不过,YubiKey也可以通过编程输入静态的用户定义密码。由于YubiKey可以像普通键盘一样将数据输入计算机,我想知道除了标准字母,数字和符号之外,它是否可以用来按CTRL、ALT或Windows键等更有趣的键。为了测试这一点,我启动了YPT并从顶部的栏中选择了静态密码选项。然后在“静态密码”页面上,单击标有“扫描代码”的按钮。

为了理解一切是如何工作的,我首先用非常简单的静态密码“abcdef”编写YubiKey。为此,我在“静态密码”窗口中选择了以下选项:
1.配置插槽:配置插槽1
2.键盘:US Keyboard
3.密码:abcdef
当我在密码字段中输入密码时,十六进制值开始显示在其右侧的扫描代码字段中。我注意到了这一点,并决定在用静态密码编写YubiKey之后,为我想输入的每个键标识十六进制值。这样,我就可以用无法输入密码字段的键(如CTRL和ALT)来编程了。
以下屏幕截图显示了我上面列出的所有设置,以及通过输入密码生成的扫描代码:

接下来,单击“Write Configuration”将静态密码写入我的YubiKey。第一次执行此操作时,会弹出一个对话框,要求我确认是否要覆盖YubiKey上插槽1的当前配置。我选中了标有“不再显示此消息”的框,然后单击“是”将更改写入设备。

注意:如果你正在使用你自己的YubiKey,请确保它不是你当前用于身份验证的。将新配置写入YubiKey将删除存储在你选择的配置槽中的设置,你必须重新编写YubiKey程序,并将其重新注册到你使用的服务中,以便再次将其用于多因素身份验证。如果你只使用YubiKey上的一个配置插槽进行身份验证,则可以安全地覆盖另一个配置插槽。但是,如果你不确定,最好将你的YubiKey从你首先使用的任何服务中注销,或者直接使用另一个YubiKey。
写完更改后,我打开了一个文本编辑器,并按下YubiKey上的硬件按钮,YubiKey果然在屏幕上输入了密码“abcdef”。

第3步:识别YubiKey的十六进制密钥代码
现在我已经确认我可以让YubiKey输入一系列预定义的键,接下来我要做的就是弄清楚是否可以通过在YPT中指定十六进制“扫描码”来使其按下更有趣的键。为了将扫描码映射到相应的按键,我使用了一种技术含量很低的方法,在YPT的密码字段中键入字母“a”到“z”,并在扫描码字段中观察结果。这导致十六进制值04通过1D出现在扫描码字段中。

对键盘上所有其他可打印的键以及每个键的大写版本都重复了这个过程,最后我将收集到的所有十六进制值以及尚未与键盘上的键匹配的值范围都记录下来。我把我能破译的所有字符组织成一个表格,然后,我注意到一个模式。扫描代码似乎被分成了两部分,小写字母都位于00-7F和大写字母之间,或者“key + Shift”版本存在于80-FF之间的相同位置,在下表中可以更清楚地看到这一点。

现在要做的就是确定每个未知范围内十六进制值生成的按键,因为在YPT的“扫描代码”字段中输入十六进制值没有显示任何输出,并且因为我预期在未知范围内按下的许多键是不生成任何可打印输出的键(例如CTRL键),所以我需要一种方法来捕获YubiKey生成的原始按键。为此,我决定使用Linux工具xinput和我编写的xinput-keylog-decoder脚本来解码输出。
如果你不熟悉xinput,它我可以告诉你,它就是一个命令行工具,通常包含在许多Linux发行版中以及图形桌面环境中。当这些系统受到攻击时,它也常被滥用为键盘记录器,为此我创建了xinput-keylog-decoder工具。

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载