【技术分享】现代无线鼠标及键盘的安全性分析报告

http://p7.qhimg.com/t01f59a8086be44cb0c.jpg

翻译:興趣使然的小胃

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


一、前言

桌面无线设备通常由无线鼠标、无线键盘以及USB收发器所组成,在过去的几年中,桌面无线设备已经越来越受广大人民群众的喜爱。与有线设备相比,这类无线设备更容易引起不怀好意的人们的兴趣,原因在于攻击者可以通过无线信号,从安全的距离远程攻击这类设备。

攻击者可以通过攻击桌面无线设备,夺取计算机系统的控制权,也能收集诸如密码之类的敏感信息,因此过去人们经常分析这类设备的安全漏洞,也有成功突破这类设备的真实案例。利用无线键盘漏洞的一个非常著名的案例,就是Dreamlab Technologies研发的开源无线键盘嗅探工具:KeyKeriki。KeyKeriki的首个版本于2009年推出,针对的是使用27MHz ISM频段的微软无线键盘。第二个版本于2010年推出,支持使用2.4GHz ISM频段的无线键盘[1]。在2015年,Samy Kamkar发布了一款基于Arduino的无线键盘嗅探器,针对的是存在已知安全漏洞的微软键盘,这个嗅探器拓展了KeyKeriki v2.0项目[2]以及Travis Goodspeed关于Nordic Semiconductor生产的nRF24系列产品的研究成果[3]。在2016年春季,MouseJack代表Bastille Networks Internet Security公布了多个桌面无线设备厂商生产的USB收发器中存在的一系列安全漏洞,这些漏洞导致设备容易受到按键注入攻击影响[4]。

SySS GmbH自2015年起启动了一个项目,开始研究使用AES加密算法的现代桌面无线设备的安全性,当时关于无线鼠标和键盘中的安全问题还没有公开可用的研究数据。到2016年5月为止,在我们的安全公告项目中已经发现并报告了许多厂商生产的现代桌面无线设备中存在的多个安全漏洞,这些厂商包括Microsoft、Cherry、Logitech、Fujitsu以及Perixx。

攻击者可以根据各自的目的,在不同攻击场景中利用已有的安全漏洞实施攻击。从一方面来讲,有些安全漏洞需要攻击者物理接触键盘或USB设备,比如,攻击者需要接触这些设备来提取后续攻击或者修改设备固件所需的加密密钥。从另一方面来讲,有些安全漏洞可以通过无线通信技术来远程利用,比如,设备使用了不完善的AES数据加密通信方案导致其容易受到重放攻击或者按键注入攻击影响。

我们的研究结果表明,不同厂商生产的现代桌面无线设备的安全等级并不相同,有些设备的安全程度比其他设备更高。此外,现实中并不存在没有任何安全问题的桌面无线设备。

我们会在本文中介绍这一方面的研究成果,也会介绍如何利用不同的安全漏洞,来攻击不同厂商生产的桌面无线设备。


二、测试对象及使用的测试技术

在整个研究项目中,我们分析了不同厂商的5个桌面无线设备,包括键盘、鼠标以及USB收发器。这3类设备都包含无线收发单元以进行无线通信。图1展示了我们的测试设备之一:Microsoft Wireless Desktop 2000。

被测试的5个桌面无线设备分别为:

1、Microsoft Wireless Desktop 2000

2、Cherry AES B.UNLIMITED

3、Fujitsu Wireless Keyboard Set LX901

4、Logitech MK520

5、Perixx PERIDUO-710W

其中有4个设备使用了Nordic Semiconductor生产的低功耗2.4GHz nRF24收发器,1个设备使用了Cypress 生产的低功耗2.4GHz收发器以及低电压版的微控制器(CY7C60123-PVXC)。被测试的无线键盘以及USB设备所用的收发器或SoC(system on chip,片上系统)信息如表2所示。由于被测试的设备大多都使用了nRF24收发器,因此我们的研究重点也集中在这一点上。

http://p6.qhimg.com/t01e55f67ebadda2151.png

为了分析设备所使用的无线通信,也为了向无线设备组件发送无线信号,我们使用了软件定义的无线电(如HackRF One[5]和USRP B200[6])以及基于nRF24的USB无线电设备(Crazyradio PA[7])。

http://p9.qhimg.com/t01c256266585b4154e.png

我们最开始使用的是Crazyradio PA以及Bastille发布的nRF研究固件[8],在2016年2月MouseJack发布之后,我们开发了对应的Python工具,因为这个工具集的优先级高于当时我们所使用的工具,感谢Marc Newlin的研究成果。

桌面无线设备的常用功能如图2所示,其中键盘及鼠标都会向插入计算机的USB收发器发送无线信号(带有按键信息或者鼠标动作的数据包)。如图所示,这种无线通信是双向的,因为USB收发器会对它所收到的数据包进行确认及反馈。

http://p7.qhimg.com/t013f2346aa580ee8d7.png


三、测试方法

对于被测试的桌面无线设备,我们使用以下三个步骤对其进行分析:

1、硬件分析

2、固件分析

3、无线信号分析

在硬件分析方面,我们打开了键盘、鼠标以及USB收发器的外壳,对设备的PCB板(printed circuit board,打印电路板)进行观察,标记出对设备功能起到关键作用的芯片,如无线传输器、接收器或者收发器。之后,我们详细阅读了相关芯片的文档,查找可以测试的触点,比如串行外设接口(serial peripheral interface,SPI)。

如图3和图4所示,nRF24LE1收发器存在一个SPI接口。

http://p9.qhimg.com/t011d26bea0f9820d2a.png

http://p4.qhimg.com/t0123e5b7ef96f466ff.png

对于基于nRF24的设备,如果所使用的芯片配置允许的话,设备可以使用SPI接口来读取和写入内部闪存。

微软的某个无线键盘的PCB板背面如图5所示,其中4个SPI焊点都打上了准确的标记(FMISO、FMOSI、FCSN以及FSCK),这可以给我们节省许多时间(已禁用回读保护机制)。

http://p4.qhimg.com/t0176d77a08ab391224.png

在识别出被测试键盘及USB设备的SPI接口后,我们将某些线路焊接到已识别的触点或SoC引脚上,尝试导出设备固件以便进一步分析。为了完成这一任务,我们使用了Bus Pirate[9]以及nrfprog软件[10]。对Cherry无线键盘SPI接口的读写方式如图6所示。

http://p7.qhimg.com/t01ed6e3eab696c8967.png

对被测试的某些USB设备而言(如Cherry的某个USB设备),SPI接口在使用上有些难度,因为这类设备的PCB板上缺少SPI测试触点,并且所使用的nRF24LU1+的尺寸也比较小,如图7所示。感谢我们的同事Alexander Straßheim伸出援手,我们终于可以通过USB设备的SPI接口测试对设备闪存的读写访问。

http://p5.qhimg.com/t01d53ed01be0069b64.png

在成功读取被测试的某些设备的固件后,我们可以使用逆向工程方法对导出的设备固件进行分析,这类逆向方法包括使用IDA Pro进行静态代码分析[11]。nRF24 SoC拥有一个8051兼容的微控制器,可以在Nordic Semiconductor生产的nRF24LE产品说明书[12]中找到详细的说明。我们也仔细研读了Nordic Semiconductor在nRF24 SDK[13]中提供的示例代码,这些示例代码非常有用,可以理解基于nRF24的设备是如何被编程的,以及开发者可以使用哪些库。

在IDA Pro中,对Cherry的加密函数hal_aes_crypt的反汇编代码如图8所示。

http://p7.qhimg.com/t013f6c60f8742627f6.png

为了进一步了解nRF24 SoC,我们不仅阅读了SDK中公开的代码,同样也编写并分析了自己的示例代码,如实现memcpy功能的固件代码(如清单3.1所示)。

1 /* Really simple memory copy firmware */
2
3 #include <Nordicreg24le1.h>
4 #include <hal_flash.h>
5
6 #define LENGTH 512
7
8 // data buffer
9 static uint8_t xdata buffer[LENGTH];
10
11 // Main routine
12 void main()
13 {
14 uint16_t src_addr = 0xFA00; // start of extended endurance data in NV memory
15 uint16_t dest_addr = 0xFC00; // start of normal endurance data in NV memory
16 uint16_t len = LENGTH;
17
18 // erase normal endurance memory pages (34 and 35)
19 hal_flash_page_erase (34);
20 hal_flash_page_erase (35);
21
22 // read extended endurance data memory from 0xFA00 to buffer
23 hal_flash_bytes_read(src_addr , buffer , len);
24
25 // write buffer to to SPI -addressable NVM (normal endurance memory)
26 hal_flash_bytes_write(dest_addr , buffer , len);
27
28 // wait forever
29 while(1) {}
30 }

最后,我们也对无线设备的不同组件所使用的2.4GHz无线通信做了分析。首先,我们使用软件定义的无线电,结合开源的软件无线电(GNU Radio)[14]以及修改版的NRF24-BTLE-Decoder软件[15]来完成这一任务。之后,我们又使用了基于nRF24的Crazyradio PA USB设备,配合Bastille的nRF研究固件以及我们自研的Python脚本和工具来测试特定的目标设备。

为了分析基于nRF的键盘和USB设备所发送的增强型ShockBurst数据报文,我们使用了修改版的NRF24-BTLE-Decoder,对应的GRC(GNU Radio Companion,又称GR小伙伴)流程图如图9所示。

http://p9.qhimg.com/t01ccc683184cfadf18.png

带有AES加密载荷的Cherry无线键盘所产生的增强型ShockBurst数据报文如下所示:

1 $ cat /tmp/fifo | ./nrf24-decoder -d 1
2 nrf24-decoder, decode NRF24L01+ v0.1
3
4 (...)
5 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
6 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
7 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
8 (...)
9 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
10 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
11 Address: 0x6BB7E29E31 length:16, pid:0, no_ack:0, CRC:0x2D58 data:0294EF5368E70FB11AB685B818819388
12 (...)

使用Crazyradio PA对nRF24无线通信进行分析应该是一种最简单同时也是最可靠的方法。


四、攻击面以及攻击场景

针对被测试的桌面无线设备,我们设计了两种攻击场景,一种场景是攻击者对无线设备拥有不受限制的物理访问权限,另一种场景是攻击者只能通过无线信号对无线设备进行攻击。

在第一种场景中,可用的攻击面主要为SoC上引脚的排列组合。在第二种场景中,攻击面仅包含无线通信。

在这两种攻击场景中,特定的安全威胁可能存在不同的攻击形式。在研究项目中,我们感兴趣的几个攻击点如下所示:

1、可以物理接触桌面无线设备时:

(1)提取固件

(2)篡改固件

(3)提取加密密钥

(4)篡改加密密钥

2、通过无线信号攻击桌面无线设备时:

(1)攻击未经加密和授权的无线通信

(2)重放攻击

(3)按键注入攻击

(4)解密经过加密的通信数据


五、安全漏洞

在整个研究项目中,我们可以在使用AES加密机制的无线设备中找到以下5类安全漏洞:

1、缺乏对代码(固件)以及数据(加密密钥)的保护。

2、没有对通信数据进行加密和认证。

3、没有对重放攻击的进行防护。

4、对重放攻击防护不到位。

5、其他加密问题。

我们会在下文详细阐述我们发现的所有漏洞,同时也会在安全公告中提及受影响的相关设备 [16-29]。

5.1 缺乏对代码和数据的保护

在我们的研究中,被测试的5个设备中有3个设备的固件和AES加密密钥可以被我们读取,这3个设备分别为AES B.UNLIMITED、Microsoft Wireless Desktop 2000以及Perixx PERIDUA-710W。

对于这3个基于nRF24的设备而言,我们有可能能够使用nrfprog软件,通过SPI接口访问设备的闪存(如图6和图7所示)。

Cherry的USB设备所导出的内存镜像中包含AES密钥,如下所示:

1 (...)
2 00007430: 0000 0000 0000 0000 0000 3cdd 9cc7 db74
3 00007440: 675a c0b2 9796 a55b 913c 0000 0000 0000
4 00007450: 0000 0000 0000 0000 0000 0000 0000 0000
5 (...)

与之匹配的Cherry键盘所导出的内存镜像中也包含相同的AES密钥,如下所示:

1 00000000: aa32 1d98 5ef9 3cdd 9cc7 db74 675a c0b2
2 00000010: 9796 a55b 913c ffff ffff ffff ffff ffff
3 00000020: ffff ffff ffff ffff ffff ffff ffff ffff
4 (...)

与被测试的Microsoft以及Perixx键盘相比,Cherry键盘并没有将加密密钥保存在普通的耐久性内存中,而是将其保存在扩展的耐久性内存中。对nRF24LE1而言,1.5Kb大小的非易失性内存(non-volatile memory,NVM)被分为2个256字节大小的扩展耐久性页面以及两个512字节大小的普通耐久性页面,如参考资料[12]所述。而EENVM(extended endurance non-volatile memory,扩展耐久性非易失性内存)无法通过SPI接口进行访问,如图10所示。

http://p0.qhimg.com/t019d7bafad66feb107.png

因此,为了访问Cherry键盘中包含加密密钥的EEM(extended endurance memory,扩展耐久内存),我们需要研发具备memcpy功能的固件,将EEM中特定的内存区域拷贝到SPI可以访问的普通数据内存中。示例固件代码如清单3.1所示。

由于无线设备对自身的代码(固件)及数据(加密密钥)保护不到位,可以物理接触设备的攻击者能够在几分钟之内,对存在漏洞的桌面无线设备进行攻击,提取设备所使用的AES密钥,并在后续攻击中,利用这个密钥以无线攻击模式远程攻击设备,或者篡改设备固件,比如,攻击者可以弱化设备所使用的加密程度。

对被测试的Cherry和Perixx键盘而言,攻击者有可能随意读取或访问设备内存。但这种攻击对Microsoft键盘来说并不适用,因为它使用了nRF24LE1的一次性可编程版本。攻击者只能将该设备闪存中的比特位从1改为0,但并不能从0改为1。但不论如何,我们还是可以在某种程度上修改设备的代码以及数据信息。

对基于nRF24的设备而言,只需简单的方法就能实现对设备代码及数据的更好的保护,那就是使用已有的回读保护功能(Read DISable Main Block,RDISMB,禁止读取主存储区),如图11所示。

http://p1.qhimg.com/t013acdcbd153a45832.png

被测试的基于nRF24的4个设备中,只有Logitech键盘使用了这种功能,避免攻击者通过SPI接口对设备闪存进行读写。

5.2 鼠标欺骗攻击

在我们研究项目进行期间,我们发现被测试的所有无线鼠标的无线通信都没有经过加密及认证。因此,如果知道设备所使用的鼠标数据协议,攻击者就能模拟并欺骗鼠标的动作(比如鼠标移动或者鼠标点击动作)。这种攻击并不新颖,许多研究人员已经在最近几年中,在不同的场合下报告并分析了这类问题,但这种攻击能够奏效还是让我们非常兴奋。你没有看错,带有加密功能的现代桌面无线设备依然仅对键盘进行加密和认证处理,并没有对鼠标通信进行加密及认证处理,这的确存在安全风险。

攻击者可以通过伪造数据包,以未授权方式远程控制目标系统的鼠标指针。如果(采用启发式方法)对目标系统进行针对性的尝试,这种鼠标欺骗攻击有可能会导致目标系统的远程代码执行漏洞。

启发式攻击需要解决如下几个问题:

1、操作系统(屏幕布局及内容)

2、语言设定(屏幕布局及内容)

3、鼠标设定(鼠标指针加速)

4、操作系统中的虚拟键盘设定(窗口位置)

根据我们的经验,使用启发式方法时最好还是遵循系统的默认设置,Windows 7中默认的鼠标设置、虚拟键盘(on-screen keyboard,OSK)的默认窗口位置及尺寸设置如图12所示。

http://p1.qhimg.com/t010ad993e8ed232f47.png

在这个研究项目中,我们研发了一款名为Radioactive Mouse的概念验证软件,来演示鼠标欺骗攻击场景。这款软件属于我们nRF24工具集的一部分[31]。

对鼠标指针实现像素级别的控制听起来比较简单,但目前在实际中还不能完美实现。在鼠标加速方面,我们还需要做更多的研究工作(如对系统实际使用的算法进行逆向分析),例如,我们需要理清不同的Windows系统所使用的鼠标加速策略(实现代码位于win32k.sys中),来完成预定的操作行为。

因此,我们的概念验证软件目前仍需要配合手动干预及减缓鼠标的运动轨迹,以完成较为稳定的攻击过程。

我们使用被测试的无线鼠标,配合Crazyradio PA无线USB设备以及Bastille的nrf固件,通过鼠标欺骗攻击成功实现了目标系统的代码执行攻击场景,如图13及图14所示。

http://p2.qhimg.com/t01d82446d3be931649.png

http://p9.qhimg.com/t019d59aa4addf6267a.png

攻击视频已上传到YouTube上,标题为“Radioactive Mouse States the Obvious”[30]。

5.3 重放攻击

在我们研究项目中,我们发现所有被测试的无线键盘及鼠标都会受到重放攻击影响,原因在于它们没有或者缺乏足够的保护机制来防御这类攻击。

Microsoft Wireless Desktop 2000使用了重放攻击保护机制,但根据我们的研究结果,设备所用的有效报文计数器的窗口非常大,如果重放攻击时录制动作和重放动作之间只有少数几次按键点击,那么这种情况下攻击者就可以利用足够大的窗口期来实施重放攻击。

对于桌面无线设备来说,攻击者可以通过重放攻击完成以下两种攻击:

1、在无人看守时,获取处于屏幕锁定状态下的计算机的未授权访问权限。

2、物理接触目标桌面无线设备的USB收发器时,能以明文形式恢复用户的按键信息,例如,可以获取用户输入的密码信息。

攻击者在不知道实际的通信协议的情况下(即黑盒模式下),可以使用软件定义的无线电进行重放攻击。使用软件定义的无线电进行重放攻击时所需的实验设备如图15所示。

http://p4.qhimg.com/t014697baad60d8beb3.png

以Fujitsu桌面无线设备为目标,我们实施重放攻击时所使用的GRC流程图如图16所示。

http://p2.qhimg.com/t010fa73bf87389e84b.png

复杂状态下的重放攻击需要使用特定的数据报文,我们可以将Crazyradio PA以及Bastille的nrf研究固件结合使用,实现复杂情况下的重放攻击。

在这个研究项目中,我们开发了一款Python工具,名为Simple Replay Tool,我们使用这款工具来演示5个被测设备没有或缺乏重放攻击防护机制。针对Microsoft Wireless 2000键盘的重发攻击输出结果如下所示:

1 # python simple_replay.py -c 25
2 _____ ______ ___ _ _ _____ _ _
3 | __ | ____|__ | || | | __ | | | |
4 _ __ | |__) | |__ ) | || |_ | |__) | | __ _ _ _ ___ ___| |_
5 | '_ | _ /| __| / /|__ _| | ___/| |/ _` | | | / __|/ _  __|
6 | | | | |  | | / /_ | | | | | | (_| | |_| __  __/ |_
7 |_| |_|_| __| |____| |_| |_| |_|__,_|__, |___/___|__|
8 __/ |
9 |___/
10 Simple Replay Tool v0.2 by Matthias Deeg - SySS GmbH (c) 2016
11 [*] Configure nRF24 radio
12 [*] Scanning for wireless keyboard ...
13 [+] Received data: 083816010100f32a
14 [+] Found nRF24 device with address A9:A9:8F:EB:CD on channel 25
15 [?] Attack this device (y/n)? y
16 [*] Start recording (<CTRL+C> to stop recording)
17 [+] Received data: 09981601dea2f3157ec032fcfa34ce70dee330c9
18 [+] Received data: 09981601dea2f3157ec032fcfa34ce70dee330c9…
19 ()
20 ^C
21 [*] Stop recording
22 [*] Press <ENTER> to replay the recorded data packets or <CTRL+C> to quit ...
23 [+] Send data: 09981601dea2f3157ec032fcfa34ce70dee330c9
24 [+] Send data: 09981601dea2f3157ec032fcfa34ce70dee330c9…
25 ()

通过这款概念验证软件,我们成功完成了本节开头描述的两种攻击形式。通过物理接触USB收发器,记录下键盘按键所对应的无线通信数据,我们成功搞定了处于屏幕锁定状态下计算机系统的未授权访问权限,也成功恢复了明文的按键信息。

5.4 按键注入攻击

这5个测试设备中有3个存在加密问题,会受到按键注入攻击影响,这也是我们发现的最后一个安全漏洞(但并不意味着漏洞分量最轻)。

被测试的Cherry、Perixx以及Logitech键盘在计数器模式中使用了AES加密方式,密钥位数为128位(AES-128-CTR)。通常情况下,初始化向量(IV)包含一个随机数(nonce)以及一个计数器(counter)。例如,被测Cherry键盘所使用的随机值包含11个NULL字节(即值为0x00的11个字节),所使用的计数值为一个随机的5字节数据。

我们已经在基于无线电的分析中,看到过被测设备在无线通信中使用了AES加密算法,通过SPI接口篡改Cherry键盘的固件,我们可以对这一结果有更深入的分析及理解。为了分析设备固件,我们仔细研究了nRF24 SDK以及官方提供的源代码,这些资料都非常具有价值。

比如,在lib_crypt.h源代码中,我们发现代码中有些注释非常有趣,比如有注释介绍了nRF24LU1以及nRF24LE1在加密库实现方式上的区别,以及nRF24LE1所用的计数器(LS5B)的相关信息,如清单5.1所示。

1 /*
2 (...)
3 * @brief Example implementation for encrypting/decrypting data
4 *
5 * The encryption is based on AES counter mode (CTR) where a 128 bit hybrid counter
6 * is used for encryption/decryption. The counter is split in two , 11 bytes as MS11B
7 * and 5 bytes as LS5B. The LS5B part is not secret and tells the receiver how
8 * to decrypt an encrypted message.
9 (...)
10 * Note that the security of the link will not be reduced as a consequence of sending
11 * the counter value in plain text as long as the following criteria are met:
12 *
13 * - Cipher key used for encryption/decryption must be kept secret.
14 * - The plain text counter (LS5B) must be modified for each transfer.
15 (...)
16 * The library can be used on both nRF24LU1 and nRF24LE1 devices , but the implementation
17 * is slightly different between these. In the nRF24LE1 implementation the LS5B is not
18 * a counter , but random values generated by the embedded random number generator.
19 * The reason for this is that the counter value would have to be stored in data memory
20 * in between each packet , which is not possible when residing in "deep sleep" power save
21 * mode.
22 (...)
23 */

此外,我们也阅读了SDK中的一些源码,分析了5字节的随机计数值(LS5B)的生成算法,如清单5.2所示。

1 (...)
2 void lib_crypt_generate_ls5b(uint8_t * dest_buf)
3 {
4 uint8_t i;
5 hal_rng_power_up(true);
6
7 for(i=0;i<5;i++)
8 {
9 while(!hal_rng_data_ready ())
10 {}
11 dest_buf[i] = hal_rng_read();
12 }
13
14 hal_rng_power_up(false);
15 }
16 (...)

我们还发现明文形式的按键释放报文中只包含NULL字节,比如,对我们测试的Cherry键盘而言,明文报文中只包含11个NULL字节。

因此,在无线设备所使用的计数器模式加密流程中,攻击者能够得知设备发送的按键释放报文中的几项的信息,这几项信息已在图17中用红圈标出。

http://p1.qhimg.com/t01ae9c98a762aa6899.png

对Cherry AES B.Unlimited这个设备而言,已知的问题如下所示:

1、随机数被硬编码为11个NULL字节。

2、计数器为一个5字节的随机值,这个值可以被重复使用(参考5.3节所述的重放攻击内容),并且通过ShockBurst无线通信模式以明文形式发送这个数值。

3、使用ShockBurst无线通信模式发送密文形式的按键释放报文。

4、明文形式的按键释放报文为11个NULL字节。

5、对于带有特定IV(随机值+计数器)的按键释放报文而言,其按键流(keystream)数据块为11个NULL字节(即按键释放报文的内容),因为任意x与0异或结果都为x。

因此,攻击者可以任意篡改按键释放报文,实施按键注入攻击。

为了完成攻击任务,攻击者需要知道用于发送按键信息的实际数据格式。既然攻击者可以访问设备固件,通过分析固件的实际代码或不断的试错过程,他们有可能能够找出设备实际使用的数据格式,以及需要修改哪些比特位或者字节数据才能成功完成按键注入攻击。

例如,Cherry AES B.Unlimited键盘在按键数据中使用的USB HID数据格式如图18所示。

http://p0.qhimg.com/t012aa992aa257b4f87.png

这种USB HID数据格式所使用的修饰符及键盘代码如下所示:

http://p1.qhimg.com/t01c8ae275d162f8f01.png

使用大写字母A来进行按键注入攻击的案例如图19所示。

http://p1.qhimg.com/t011c268d5f0ae37964.png

通常情况下,攻击者只需要经过如下5个步骤就能实施按键注入攻击:

1、找到目标设备(无线键盘)

2、找到按键释放报文(通过启发式方法)

3、做些简单的数学运算

4、发送修改过的按键释放报文,尝试按键注入

5、重复步骤3&4,直至攻击成功

在我们这个研究项目中,针对存在这类漏洞的目标设备,我们研发了几个概念验证软件来进行按键注入攻击。

使用我们的工具对Perixx键盘进行按键注入攻击的输出结果如下所示。

1 # python keystroke_injector.py -c 6 11 28 32 39 65 75 80 -d perixx
2 _____ ______ ___ _ _ _____ _ _
3 | __ | ____|__ | || | | __ | | | |
4 _ __ | |__) | |__ ) | || |_ | |__) | | __ _ _ _ ___ ___| |_
5 | '_ | _ /| __| / /|__ _| | ___/| |/ _` | | | / __|/ _  __|
6 | | | | |  | | / /_ | | | | | | (_| | |_| __  __/ |_
7 |_| |_|_| __| |____| |_| |_| |_|__,_|__, |___/___|__|
8 __/ |
9 |___/
10 Keystroke Injector v0.7 by Matthias Deeg - SySS GmbH (c) 2016
11 [*] Configure nRF24 radio
12 [*] Set keyboard: Perixx
13 [*] Scanning for wireless keyboard ...
14 [+] Found nRF24 device with address 15:25:D8:AB:23 on channel 65
15 [?] Attack this device (y/n)? y
16 [*] Search for crypto key (actually a key release packet) ...
17 [+] Found crypto key
18 [*] Please choose your attack vector (0 to quit)
19 1) Open calc.exe
20 2) Open cmd.exe
21 3) Classic download & execute attack
22 0) Exit
23 [?] Select keystroke injection attack: 3
24 [*] Start keystroke injection ...
25 [*] Done.

我们使用自研的Cherry Attack概念验证工具对存在漏洞的Cherry键盘进行攻击,如图20所示。

http://p9.qhimg.com/t01e30ff0175dab6c71.png

如何对AES计数器模式中存在的这种加密问题加以利用呢?其实这并不是一件难事,部分利用代码如清单5.3所示。

1 def keyCommand(self , modifiers , keycode1 , keycode2 = KEY_NONE , keycode3 = KEY_NONE , keycode4 = KEY_NONE , keycode5 = KEY_NONE , keycode6 = KEY_NONE):
2 """ Return AES encrypted keyboard data"""
3
4 # generate HID keyboard data
5 plaintext = pack("8B", modifiers , 0, keycode1 , keycode2 , keycode3 ,
6 keycode4 , keycode5 , keycode6)
7
8 # encrypt the data with the set crypto key
9 ciphertext = ""
10 i = 0
11for b in plaintext:
12 ciphertext += chr(ord(b) ^ ord(self.cryptoKey[i]))
13 i += 1
14
15 return ciphertext + self.counter

为了演示我们所找到的按键注入漏洞,我们搭建了一个简单的设备,名为SySS Radio Hack Box[32],这款设备的第一个原型版本如图21所示。

http://p3.qhimg.com/t01b3bc76fe716dbf10.png

这个原型设备是在树莓派的基础上搭建而成的,我们手动焊接了一个非常简单的树莓派扩展板,与带有自定义Python脚本的Crazyradio PA搭配使用,如图22所示。

http://p7.qhimg.com/t016a532df0a18431f1.png

我们录制了如何使用SySS Radio Hack Box对无线设备实施按键重放注入攻击的视频,并将视频上传到YouTube网站上[33]。


六、设备厂商的声明及反馈

根据我们的漏洞披露计划,我们通过安全公告形式,向所有存在安全漏洞的设备所对应的厂商报告了相关的漏洞信息。

根据我们的漏洞披露策略,我们在一段时间后向公众公布了所有的安全公告[34]。

我们收到的设备厂商的声明及反馈如下文所述。

6.1 Perixx

对于Perixx PERIDUO-710W桌面无线设备中存在的安全问题,Perixx没有任何反馈信息。

6.2 Microsoft

对于Microsoft Wireless Desktop 2000中代码及数据缺乏安全防护的问题,微软的反馈信息如下:

“根据您在邮件里提供的信息,由于每个桌面无线设备所使用的加密密钥都不相同,因此这种攻击不具备普遍性。此外攻击需要物理接触键盘,同时还需要嗅探数据报文才能使用窃取的密钥来解密数据。如果攻击者可以打开键盘,导出闪存数据,攻击者同样也能够修改整个键盘。因此,这个漏洞不符合漏洞安全服务标准。我们会将这个问题提交给核心团队,评估是否需要在本产品的下个版本进行修改。”

对于鼠标欺骗攻击而言,微软的声明如下:

“这种行为符合我们的产品设计方案,因此我们不会对这个产品发布安全更新。”

对于重放攻击而言,微软的声明如下:

“我们正在验证对这个问题的修复措施是否能够生效,希望能够通过修复措施解决这一问题。由于这个问题存在于USB设备的固件中,我们仍在研究是否只能在后续生产的USB设备中解决这一问题,还是可以通过某种办法解决存在这一问题的所有USB设备。“

6.3 Logitech

对于Logitech MK520设备而言,罗技的反馈如下:

“非常感谢安全团队对这一产品的重视,请相信罗技会在未来的产品中提供更为安全的加密方案。“

6.4 Fujitsu

对于我们在Fujitsu LX901无线键盘中发现的重放攻击问题,富士通的反馈如下:

“非常感谢您对我们无线键盘安全问题的通知。正如我们前面提到过的那样,根据设备所使用的无线协议,您描述的攻击场景在现实生活中难以具体操作。我们销售产品的重点不是在于产品安全性上,而在于产品的易用性上(保证未加密的无线键盘不存在重大安全缺陷即可)。我们将在后续产品中考虑您提出的任何新意见 。“

6.5 Cherry

对于我们在Cherry AES B.Unlimited中发现的安全漏洞,Chery的声明如下:

“我们已经检查了您提交的‘安全漏洞’。我们决定未来在推广这个产品时,不再提及AES加密机制。目前,我们正在研究一款后续产品。正如我们一贯强调的那样,如果我们的客户在安全性上要求较高,我们推荐他们使用通过CC认证的有线产品。“


七、总结

在整个研究项目中,使用AES加密算法的5个现代桌面无线设备都存在安全漏洞。

总的来说,我们发现了5类安全问题,可以用于实施特定的攻击:

1、对代码(固件)及数据(加密密钥)保护不足

导致攻击者能够访问敏感数据。

2、通信数据没有经过加密或者认证

导致攻击者能够实施鼠标欺骗攻击。

3、缺乏防御重放攻击的保护机制

导致攻击者能够实施重放攻击。

4、对重放攻击保护不到位

导致攻击者能够实施重放攻击。

5、加密问题

导致攻击者能够实施按键注入攻击。

表6总结了我们的研究成果。

http://p9.qhimg.com/t01dde4b1246ec50d84.png

√ 存在安全问题

× 不存在安全问题

? 可能存在安全问题(需要进一步调研)

* Bastille Networks首先向罗技报告了这个问题

根据我们的经验,我们认为所有发现的安全漏洞都能在现实世界的攻击场景中加以利用,而不单单局限于实验环境中。事实上,在过去的几个月内,我们已经在渗透测试中使用了其中一些安全漏洞。

对于被测试的这几个版本的产品,厂商可能不会发布安全更新来修复这些安全漏洞,但有可能会在后续版本中修复这些问题。

我们的研究结果表明,不同厂商的现代桌面无线设备的安全级别也有所不同,某些设备会比其他设备更为安全。然而,现实中并不存在没有任何安全问题的桌面无线设备。

SySS不推荐人们在对安全有所要求的环境中使用存在已知安全漏洞的这些桌面无线设备。

在我们的研究过程期间,Bastille威胁研究团队也独立地在几个桌面无线设备中发现了多个安全漏洞,这些设备是不同厂商生产的具备AES加密机制的无线设备。读者可以在他们的网站上找到一个名为KeyJack的研究项目[35],了解更多信息。

2016年,我们在不同的IT安全大会上展示了我们的研究成果。例如,我们在Hack.lu 2016 IT安全大会上展示了无线鼠标和键盘上存在的安全问题,演讲主题为“现代桌面无线设备的安全性分析”,相关的汇报PPT及视频可以在[36, 37]中找到。


八、参考资料

[1] Dreamlab Technologies, KeyKeriki v2.0 – 2.4 GHz, http://www.remote-exploit.org/articles/keykeriki_v2_0__8211_2_4ghz/ , 2010 (Cited on page 1.)

[2] Samy Kamkar, KeySweeper, http://samy.pl/keysweeper , 2015 (Cited on page 1.)

[3] Travis Goodspeed, Promiscuity is the nRF24L01+’s Duty, http://travisgoodspeed.blogspot.de/2011/02/promiscuity-is-nrf24l01s-duty.html , 2011 (Cited on page 1.)

[4] Bastille Networks Internet Security, MouseJack, https://www.mousejack.com/ , 2016 (Cited on page 1.)

[5] Great Scott Gadgets, HackRF One, https://greatscottgadgets.com/hackrf/ (Cited on page 2.)

[6] Ettus Research, USRP B200, https://www.ettus.com/product/details/UB200-KIT (Cited on page 2.)

[7] Bitcraze, Crazyradio PA, https://www.bitcraze.io/crazyradio-pa/ (Cited on page 2.)

[8] Bastille Networks Internet Security, nrf-research-firmware, https://github.com/BastilleResearch/nrf-research-firmware , 2016 (Cited on page 3.)

[9] Dangerous Prototypes, Bus Pirate, http://dangerousprototypes.com/docs/Bus_Pirate , (Cited on page 5.)

[10] Dangerous Prototypes, nrfprog, https://github.com/JoseJX/nrfprog , (Cited on page 5.)

[11] Hex-Rays, Interactive Disassembler Pro, https://www.hex-rays.com/products/ida/index.shtml (Cited on page 7.)

[12] Nordic Semiconductor, Nordic Semiconductor nRF24LE Product Specification v1.6, http://www.nordicsemi.com/eng/content/download/2443/29442/file/nRF24LE1_Product_Specification_rev1_6.pdf (Cited on pages 4, 5, 7, and 12.)

[13] Nordic Semiconductor, nRF24L01+ Evaluation Kit, https://www.nordicsemi.com/eng/nordic/download_resource/9620/7/85171947/2434 (Cited on page 7.)

[14] GNU Radio https://en.wikipedia.org/wiki/GNU_Radio (Cited on page 9.)

[15] Omri Iluz, NRF24-BTLE-Decoder, https://github.com/omriiluz/NRF24-BTLE-Decoder, 2016 (Cited on page 9.)

[16] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-031, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-031.txt , 2016 (Cited on page 11.)

[17] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-032, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-032.txt , 2016 (Cited on page 11.)

[18] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-033, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-033.txt , 2016 (Cited on page 11.)

[19] Matthias Deeg and Gerhard Klostermeier SySS Security Advisory SYSS-2016-038, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-038.txt , 2016 (Cited on page 11.)

[20] Matthias Deeg and Gerhard Klostermeier SySS Security Advisory SYSS-2016-043, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-043.txt , 2016 (Cited on page 11.)

[21] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-044, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-044.txt , 2016 (Cited on page 11.)

[22] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-045, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-045.txt , 2016 (Cited on page 11.)

[23] Matthias Deeg and Gerhard Klostermeier, SySS Security Advisory SYSS-2016-046, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-046.txt , 2016 (Cited on page 11.)

[24] Matthias Deeg and Gerhard Klostermeier, SySS Security Advisory SYSS-2016-047, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-047.txt , 2016 (Cited on page 11.)

[25] Matthias Deeg and Gerhard Klostermeier, SySS Security Advisory SYSS-2016-058, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-058.txt , 2016 (Cited on page 11.)

[26] Matthias Deeg and Gerhard Klostermeier, SySS Security Advisory SYSS-2016-059, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-059.txt , 2016 (Cited on page 11.)

[27] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-060, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-060.txt , 2016 (Cited on page 11.)

[28] Gerhard Klostermeier and Matthias Deeg, SySS Security Advisory SYSS-2016-061, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-061.txt , 2016 (Cited on page 11.)

[29] Matthias Deeg and Gerhard Klostermeier, SySS Security Advisory SYSS-2016-068, https://www.syss.de/fileadmin/dokumente/Publikationen/Advisories/SYSS-2016-068.txt , 2016 (Cited on page 11.)

[30] SySS GmbH, Radioactive Mouse States the Obvious – Proof-of-Concept Video, https://www.youtube.com/watch?v=PkR8EODee44 , 2016 (Cited on page 15.)

[31] Matthias Deeg and Gerhard Klostermeier, nRF24 Playset, https://github.com/SySS-Research/nrf24-playset , 2017 (Cited on page 13.)

[32] Matthias Deeg and Gerhard Klostermeier, SySS Radio Hack Box, https://github.com/SySS-Research/radio-hackbox , 2017 (Cited on page 21.)

[33] SySS GmbH, SySS Radio Hack Box a.k.a. SySS Cherry Picker Demo Video, https://www.youtube.com/watch?v=KMlmd-LhMmo , 2016 (Cited on page 22.)

[34] SySS GmbH, SySS Responsible Disclosure Policy, https://www.syss.de/en/responsible-disclosure-policy/ (Cited on page 23.)

[35] Bastille Networks Internet Security, KeyJack, https://www.bastille.net/research/vulnerabilities/keyjack/keyjack-intro/ , 2016 (Cited on page 27.)

[36] Matthias Deeg and Gerhard Klostermeier, Of Mice and Keybords (Slides), Hack.lu 2016, http://archive.hack.lu/2016/Of_Mice_and_Keyboards-Hack.lu_2016.pdf , 2016 (Cited on page 27.)

[37] Matthias Deeg and Gerhard Klostermeier, Of Mice and Keybords (Talk), Hack.lu 2016, https://www.youtube.com/watch?v=Ja_VgUMz43Q , 2016 (Cited on page 27.)

(完)