最近一家美国物联网安全创业公司Bastille发布了一个关于无线鼠标的漏洞披露报告,称多产商生产的无线鼠标和无线键盘存在 安全漏洞 ,恶意攻击者可以通过低成本的无线攻击设备在远达100米的范围内可以远程控制受害者的无线鼠标并进行一些恶意操作,俗称mouseJack攻击,并且开源了攻击工具使用的 代码 ,笔者根据他们提供的一些信息进行逆向工程并深入研究揭密如何远程控制无线鼠标。
无线鼠标一般由两部分组成,鼠标和鼠标接收器,鼠标端通过采集鼠标的操作状态,比如采集鼠标各个按键的按下的状态,鼠标移动的轨迹等数据,然后把这些数据调制成模拟信号通过特定的无线频率(例如24Mhz,27Mhz,2.4Ghz,或者蓝牙)发射出去,鼠标接收器接受到无线信号后,解调成数据,解析里面的数据后做出相应的动作,比如按键和移动等操作,大多情况下无线鼠标通过2.4Ghz的无线频率和PC端进行通信,现在无线鼠标用的比较多的是光电鼠标(optical mouse),而光电鼠标又分为肉眼可见光鼠标和肉眼不可见光鼠标,今天我们将以肉眼不可见光的光电鼠标为例进行深入研究,笔者手头刚好有一个Rapoo/雷柏M217无线鼠标,参数如下。
外观如下
在研究无线鼠标通信的时候受到MouseJackRFStorm工具的启发,因为我没有拆开过鼠标,不知道里面用的是什么芯片,由于RFStorm使用的是芯片产商nordicsemi的nRF24LU1P 2.4Ghz无线收发芯片,通过这个信息我找到了这个芯片的 芯片手册 ,这算是对我的研究有了一个指引,而这个指引也适应我手头使用的这个无线鼠标。
分析过程如下
1. 观察鼠标的无线频谱
从上面的芯片手册可知无线收发芯片的可操作频率从2.4Ghz到2.525Ghz,通过设置使用的频道和数据传输速率来判断无线设备使用的通信频率。
环境如下:
Ubuntu Linux 14.04
HackRF One
Gqrx
通过快速滑动鼠标发现在2.402Ghz频率的位置振幅比较强烈,由此推测该无线鼠标使用的频点应该在此。
2.分析鼠标无线频谱并解调
我们通过 GnuRadio(一种开源的软件无线电平台)和HackRF One抓取无线信号通过Baudline对信号进行分析,通过上述无线射频芯片资料所知,信号是通过GFSK(高斯低通频移键控)调制的,所以我们可以通过GnuRadio里面正交解调模块解调信号,GnuRadio的连接框图如下,简要介绍功能,通过HackRF One设备在基带频率2.402Ghz通过2Mhz的采样率采样无线信号,原始信号存储到mice_move_2M.raw文件中,通过正交解调并通过一个低通过滤器把解调的结果存入文件move_2M_demod.raw文件中。
捕捉的信号
通过Baudline观察原始频谱和解调后的频谱.
原始频谱如下
解调后的频谱如下
解调后的信号是线性的比特流,它是承载数字数据的一种方式叫NRZ(Non-Return-To-Zero),简单理解就是高电平为比特1,低电平为比特0。
我们把信号存储为wav格式的音频文件以方便分析,用Audacity打开。
通过放大信号观察或者写个程序分析可计算出1个比特位需要多少个采样点(samples_per_symbol),如下是1sps,由于下面的信号的采样率是1Mhz,所以我们推算出它的信号传输速率是1Mbps,根据芯片资料也可以得知,默认设置传输速度是1Mbps。
接下来就是还原比特流,还原比特流可以通过GnuRadio的Clock RecoveryMM进行还原,也可以自己写个程序读取wav文件里面的数据来还原。
3. 数据格式分析
在还原数据之前我们要关心每一帧数据从哪里开始,到哪里结束,根据芯片资料所述,每一帧数据格式如下。
每一帧数据都由8比特的前导码,3到5个字节的设备地址,包控制域和包负载和最后的循环校验码组成,经过测试分析我所抓到的信号帧完全满足以上的格式,以其中一个数据帧为例,前导码为0×55,设备地址为20:49:17:de:7F,数据长度7个字节,内容为05 02 00 00 00 00 00,校验码为0xaeca。
而这里使用的CRC校验算法是CRC16-CCITT,算法如下:
4. 数据通信协议
通过分析发现每一次完整的射频通信传输由两个数据帧组成,第一个帧数据的负载长度为7个字节由发射端发送,紧接着接收端回一个的长度为0字节的应答包,表示接收端已接收到,如下频谱。
通过9个比特来控制包的传输应答方式.
负载长度 6个比特
包序列号 2个比特
是否应答 1个比特
包序列号用于识别发送的包与应答的包是否匹配的
是否应答指示发出去的包是否需要对方应答,1表示需要,0表示不需要应答.
如下所示,发送端发出7个字节的数据,PID号是比特11,1表示需要应答
回应包数据负载长度为0字节,PID号是比特11,0表示不需要应答。
4.1 移动鼠标通信协议
为了准确分析移动鼠标的通信协议与格式,我们需要获取鼠标无线发射端发出的数据与电脑鼠标接受端收到的数据,鼠标信号接收器是一个USB接口的nano receiver,它负责解调鼠标发射的信号通过USB给驱动,驱动解析出后作出相应的动作,比如鼠标按键或者移动操作。
我们通过wireshark可以抓取USB接口的数据包,如下图是鼠标移动时抓取到的数据包。
解析出这次鼠标移动USB收到的数据如下图所示
解析出的鼠标无线发射出的数据如下,数据的信息量比USB捕捉到的更丰富。
我们通过多次测试发现其规律,并解析这些数据的格式,以其中一个为例.
03000500ffff00
03 00 0500 ffff 00
第一个字节表示数据操作标志
03表示初始匹配设备,后续数据且有效
01表示数据负载标志
05表示一次操作结束标志
第二个字节表示按键操作标志
00表示没有按键操作
01表示按左键
02表示按右键
第三至四字节表示横坐标相对位移
16位有符号数据存储,向右移动为正,向左移动为负
第五至六字节表示纵坐标相对位移
16位有符号数据存储,向上移动为负,向下移动为正
以上数据为例相对于上次位移
横坐标向右移动5个像素,纵坐标向上移动1个像素
第七个字节表示鼠标中间的滚轮操作
01表示向上滚
ff表示向下滚
由上可知鼠标移动的轨迹是相对于上次的位移进行移动的,所以我们可以模拟推算出这次移动的相对位移轨迹。
4.2 按鼠标左右键无线信号数据包
下图是一次鼠标按左键和右键的无线信号数据包内容
4.3 鼠标滚轮操作无线信号数据包
下图是向上滚轮与向下滚轮的无线数据包
4.4 鼠标按住左键拖拉横移数据包
5. 关于跳频
跳频是该射频芯片的一个通信优化机制,目的是为了在一些特定场景下,当鼠标所使用的默认频点比如2.402Ghz由于其它同样使用2.4Ghz射频芯片的干扰,导致鼠标的可用性没有正常情况下好,所以鼠标的接收器会切换频点,会选择一个信号好的频点进行通信,那么鼠标发射器怎么知道接收器使用的是哪一个频点了,这个时候鼠标发射器就会每一个频率进行扫描测试,如果在设定的超时时间内发射器有响应,那么就在该频率和接收进行进一步通信。
我们进行一个小小的测试来验证这个观点。
拔掉鼠标接收器,只移动鼠标,我们捕捉到的频谱如下,我们设定信号的采样率为60Mhz,这样我们可以在比较宽的频宽之内进行信号捕捉,由于鼠标发射器发出的信号没有响应,所以一直在尝试各个不同的频点进行配对鼠标接收器,我们可以发现它跨频宽范围接近60Mhz左右。
我们通过baudline打开捕捉到的信号文件进行观察,扫描合适的频点进行通信。
通过分析我这边获知使用的最低频点为2.402Ghz,最高为2.459Ghz,中间还有一些可以使用的频点。
6. 远程劫持攻击
远程劫持攻击分两种,一种就是重放攻击,就是你录制一段对方操作鼠标的无线信号,通过软件无线电把这段信号重放,不过这种方式比较简单,基本上只是for fun,另一种方式就是自己制作无线鼠标数据包,按照鼠标硬件的一些无线特性,调制,重新采样,然后发射出去,这样可以构造各种鼠标操作信号,这种当然难度也会更高一些,下面我们从两种方式进行详细的阐述。
6.1 简单回放攻击
通过GnuRadio可以非常方便的进行简单的回放攻击,如下图
把录制好的鼠标信号通过软件无线电重放出去,达到控制鼠标的效果。
6.2 构造数据包攻击
从上面我们已经分析清楚了无线鼠标通信的数据包格式和通信方式,所以我们可以通过构造相应的原始数据包然后通过GFSK调制,重新采样,然后通过软件无线把信号发送出去来控制无线鼠标来达到我们攻击的目的,很多安全研究人员更喜欢使用与之有同样硬件特性的射频芯片来达到控制无线鼠标的效果,因为这样可以不用考虑太多的信号处理的过程,这是一个不错的选择,而软件无经电的硬件部分是一个通用的信号的收发平台,而信号的产生与调制完全是通过类似于GnuRadio的软件平台来实现完成,而且特定的射频芯片通过编程提供数据的负载,芯片自动完成格式封包和CRC校验等流程,而软件无线电需要自己封包,所以使用软件无线电来实现比专有的射频芯片来实现更加复杂,如下图是我们构造的数据包通过调制和重新采样通过软件无线电设备发射出去来控制无线鼠标。
首先这种透明无线传输方式肯定是不安全的,可以伪造和远程劫持无线鼠标来达到控制目的,事实上已经有此公司在这种无线通信上加入了一些加密传输的特性,例如 http://www.logitech.com/images/pdf/roem/Logitech_Adv_24_Ghz_Whitepaper_BPG2009.pdf ,也并不代表这样一定就是安全的,不过至少提高了一些攻击成本。
同样的安全问题也涉及到一些无线键盘。
现实危害必须在比较近的距离实施,虽然鼠标并不会取你屏幕坐标的信息,但是对于攻击者来讲还是可以精确控制对方鼠标在屏幕上面的位置。
https://github.com/RFStorm/mousejack
https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24LU1P#Specification
* 作者:阿里安全谢君(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)