执行键盘注入攻击
前言
受Bastille研究小组的工作启发(参见:https://github.com/BastilleResearch/mousejack),我好奇这些(键盘注入)漏洞是否仍然有效。令人惊讶的是,我成功复现了对一款廉价Logitech键盘(K400r)的攻击,这款键盘至今仍在我当地的Walmart以低于20美元的价格出售。特别地,使用Unifying接收器(带橙色星标)的无线设备尤其脆弱。
初步研究表明,无线键盘的通信(击键)似乎经过加密以防止窃听,而鼠标移动通常以未加密形式发送。MouseJack漏洞利用通过允许未加密的击键作为合法数据包传递给目标计算机的操作系统,从而利用易受攻击的dongle。
这种无线(非蓝牙)攻击场景可以通过相当便宜的无线电dongle、一个小脚本,以及最远100米的距离实现!以下概述了我的过程。
硬件:Crazy Radio PA dongle
键盘:Logitech K400r
FCC ID: JNZYR0019
幸运的是,对于这个项目,与该设备相关的FCC信息并不是必需的,但了解它旨在在2.405 – 2.474GHz WiFi范围内无线操作是有益的。
键盘注入载荷
为准备攻击,我们需要基于Rubber Ducky脚本语言创建一个短文本文件(更多信息:https://github.com/hak5darren/USB-Rubber-Ducky/wiki)。使用任何文本编辑器(nano、vi、notepad等),输入以下内容并保存文件:
|
|
示例使用nano文本编辑器
GUI r
模拟按住Windows键并点击‘r’以打开运行窗口。STRING notepad.exe
显然在运行窗口中键入notepad.exe,打开记事本。STRING Hello World!
在新打开的记事本页面中键入。
注意: 虽然在使用Rubber Ducky USB dongle时可能需要一些延迟以确保可靠操作,但在使用CrazyRadio dongle实施攻击时并非如此。这是因为我们不需要加载任何USB驱动程序或检测插入USB端口的任何USB dongle。此处的延迟仅用于演示目的。理想情况下,我们希望尽可能快地执行脚本并注入载荷以避免人为检测,但也不以牺牲可靠操作为代价。
下载JackIt
|
|
使用载荷脚本‘hello.txt’运行JackIt
一旦识别目标,按CTRL-C并选择目标键以注入载荷。
注意: 执行此攻击不需要知道MAC地址。所需的是目标键,且类型有有效条目,如Logitech HID、Microsoft HID等(空字段或‘unknown’将无效)。
成功!!!
基于云的PowerShell注入
意识到键盘载荷注入现在可行后,我的下一步是尝试使用这种已验证的攻击方法注入PowerShell载荷。
首先,我创建了一个github仓库来托管我的PowerShell注入脚本。
接下来,我修改了我的‘hello.txt’脚本以运行PowerShell而不是记事本,并将注入字符串从Hello World!更改为PowerShell Invoke Expression (IEX) cmdlet,该cmdlet下载一个.ps1脚本并在目标计算机上执行它。
使用修改后的‘hello.txt’脚本运行JackIt现在产生了期望的结果!我能够清楚地利用Logitech HID中的已知漏洞注入基于云的PowerShell执行。
总结
我很高兴从易受攻击的键盘开始,因为尽管我拥有的鼠标明显是Logitech Unify接收器并带有橙色星标,但都无法注入。我怀疑这可能是因为Logitech实现了可更新的dongle固件,而许多现场使用的鼠标使用一次性可编程闪存设备。
Microsoft已发布安全更新(https://support.microsoft.com/en-us/help/3152550/microsoft-security-advisory-update-to-improve-wireless-mouse-input-fil),该更新检查来自dongle的通信载荷是否为QWERTY,以及设备类型是否为鼠标,如果是,则数据包将被忽略。然而,据我确定,此安全更新基本上是可选性的。基于此信息,我决定订购一些Microsoft鼠标并测试这些设备以继续我的研究。
无论如何,我怀疑野外存在数十万个易受攻击的键盘和鼠标,而这个常被忽视的攻击向量需要认真对待。大多数用户可能认为,“哦,它只是一个键盘……它只是一个鼠标……它们能造成什么危害?”事实是,一个仅仅显示“Hello World!”的击键注入可能同样容易地是执行Metasploit、下载恶意软件或病毒、外泄敏感数据、提升权限、获得持久性等的PowerShell注入。
可能的缓解措施包括使用蓝牙或有线设备而不是无线设备,或不使用时移除dongle,或在可用时及时获取固件和安全更新。显然,这些选项可能会影响整体“用户体验”,因此大多数或全部可能根本不会实施。