全部博文(465)
分类: 网络与安全
2017-01-19 10:41:03
引言:键盘是生活中最常见的硬件之一,无线键鼠由于其方便美观受到很多人的青睐,那么它的安全性如何呢?面对攻击我们又如何防护呢?
本文选自《硬件安全攻防大揭秘》。
键盘连接到计算机有多种方式,有线键盘鼠标在生活中最常见,适用范围也很广泛,但有线连接不仅对操作距离有限制,而且给携带造成了不便。不仅如此,繁杂的线缆还很容易把桌面弄得凌乱不堪。无线键鼠非常好地解决了上述问题。无线键鼠又分为蓝牙类型和2.4GHz 类型,文中所指的无线鼠标一般指2.4GHz 类型。值得注意的是,虽然蓝牙键鼠的工作频段也是2.4GHz 频段,使用的却是蓝牙通信协议,符合蓝牙标准。而2.4GHz 类型的键鼠主要指利用专属无线协议开发的无线产品。2.4GHz 类型的无线键鼠,一般在计算机的USB 接口处插上一个适配器,鼠标和键盘通过电池供电。
无线键鼠与有线键鼠的主要区别在于信号传输方式。有线键鼠利用导线传输信息,而无线键盘利用无线电传输信息。早期的无线键盘使用27MHz 的频段,当时的无线接收器相对现在的集成芯片来说要大得多。目前大多数产品都工作在2.4GHz 的ISM(工业、科学、医疗)频段。下面我们大致介绍无线键盘的工作原理。当按下键盘时,键盘内部的单片机利用矩阵扫描的原理检测到是哪个按键按下了,相应按键有相应的编码;单片机利用无线收发模块把按键信息通过无线电传播出去;电脑端插在USB 接口上的适配器收到相应的数据后会通过USB 向电脑操作系统传输按键的输入信息。这样就完成了一次按键信息的传送,下面将详细介绍无线通信的硬件部分和通信数据部分。
如果想真正了解键盘的构造、基本原理等信息,拆解是非常直接有效的方法。
上图为某无线键盘的拆解图。右下部分是一个电池槽,红色的线是一根电源线,为单片机和无线模块供电。目前市场上最常见的就是这种薄膜式键盘。薄膜式键盘取代机械键盘的原因并非机械键盘的品质不够好、手感不佳。机械键盘的手感、使用寿命都要优于薄膜键盘,只是因为成本过高而逐渐退出市场。最近因更追求产品的品质,机械键盘又逐渐流行起来。
薄膜式键盘内部共分三层,实现了无机械磨损,其特点是低价格、低噪音和低成本,已占领市场绝大部分份额。我们现在经常使用的就是薄膜键盘。薄膜式键盘架构很简单,除了上下盖、键帽之外,拆开键盘之后,还会看到橡胶帽(但事实上现在都是用硅胶制成)、三片薄膜、电路板,以及电路板上的IC。再检视薄膜的话,还可以看到导电的印刷涂料。薄膜式键盘的原理相当简单,三片薄膜中,最上方为正极电路,最下方为负极电路,中间为不导电的塑料片。
接着,在上方放按压模块(通常包括键帽、键帽下方活动模块,以及橡胶帽),当手指从键帽压下时,上方与下方薄膜就会接触通电,完成导通。
然而,我们更关注的是它的射频部分。也就是它采用了哪款芯片,完成对数据的传输。这样我们才能更方便地找对方向进行研究。
上图为无线键盘的射频部分,用的是Nordic 公司设计的nRF24L01 芯片。黑色方块即为该芯片,周围是该芯片正常工作所需的外围器件,例如电容、电阻等器件。左边黄色蛇形的图案是PCB 天线。它是利用印制电路板上的导线作为天线的一种方式。这种天线的好处是相对于外置天线体积更小,而且更廉价,但缺点是距离较短,适用于对距离没有严格要求的地方。这款无线收发芯片是了解无线键鼠通信基本原理的关键部分,有助于我们对无线键盘的研究,下面将介绍该芯片的一些基本情况。
nRF24L01 是Nordic 公司设计的一个具备协议解析功能的单芯片无线收发器,适合低功耗的无线应用场景。nRF24L01 工作在全球开放ISM 频段(工业、科学和医用频段),频率范围内2.400GHz~2.4835GHz。因为nRF24L01 仅仅是一个无线收发器,没有集成单片机,所以在使用时需要配合单片机和少量的外围器件工作。我们可以通过SPI 接口对nRF24L01 进行操作和配置。通过SPI 接口可以读写nRF24L01 内部的寄存器,完成对其的配置和其他所有的操作。
该无线设备采用GFSK 调制方式。用户可以修改无线设备的信道、输出功率和数据速率。nRF24L01 支持三种速率250kbit/s、1Mbit/s 和2Mbit/s。目前应用广泛的是2Mbit/s 的数据传输速率。
下图所示为Nordic 公司官方给出的电路参考设计原理图。大多数公司都是据此进行开发的,除非一些公司对某些方面有特殊的需求才会对该原理图调整。许多厂家会据此进行二次开发,生产出该芯片的模块。
下图为该芯片的成品模块
该模块只引出了必要的电源及控制接口,其他外围电路都已经集成在模块上。这样的好处是使用更方便,不需要关心芯片的外围电路和天线部分。天线的设计是电路设计上的难点,细小的失误都可能对通信距离产生较大的影响。所以很多厂商都采用设计成熟的模块,而不是自己重新设计这一部分。
上图为该模块的引脚顺序图,可以与单片机进行连接。相应的引脚功能如下。
模块保留了用户需要用到的8 个接口。其中1 号和2 号引脚为电源接口,为该模块供电。3 号引脚为芯片使能接口,用于设置芯片是工作在接收模式还是发送模式。4 号至7 号引脚是用于SPI 通信的四条连线。CSN 用于片选芯片,也就是芯片的SPI 通信使能。SCK 是单片机为SPI 通信提供的通信时钟。MOSI 是单片机向模块发送数据的数据接口,MISO 是模块向单片机发送数据的数据接口。8 号引脚IRQ 在接收到数据时通过电平跳变来通知单片机模块已经收到了数据。这种方式的好处在于单片机在没有收到数据时可以完成其他任务,不需要一直查询该模块是否收到数据。当然,这个接口也可以不用,不过如上所述,需要一直查询是否收到了数据,这种方式是非常低效的。采用这种方式带来的另外一个缺点是一直使单片机处于工作状态,不利于休眠,会造成功耗大幅度提高。
通过上述物理接口就可以达到配置和操作nRF24L01 的目的。了解硬件是不够的,对通信的数据的学习仍然是一门必修课。
nRF24L01 支持数据包的自动装配,自动发送确认包和重发数据包。它支持1 至32 字节的负载长度。能把收到的包自动分解,得到需要的负载部分。nRF24L01 拥有6 个通信信道,最多支持1 对6 的星形网络。
上图为nRF24L01 的数据包格式,其中包括了1 个字节的前导码、3 至5 字节的地址、9 个比特的包控制段、0 至32 字节的负载段及CRC 校验码。数据包内各个部分在整个通信中扮演着不同的角色,有着不同的作用,下面将对它们做详细介绍。
前导码用于让接收端的解调器和输入的比特流同步。这里的前导码的长度是一个字节,序列是01010101 或者10101010。至于具体是哪种前导码,与紧接在前导码后面地址的第一个比特有关。如果地址的第一个比特是1,则前导码被自动设置为10101010。如果地址的第一个比特是0,则前导码被自动设置为01010101。这些措施用于保证有足够的过度时间来稳定接收器。简单地说,前导码的存在主要是为了让后续的数据流接收更加稳定。
这里的地址是发射器发送给接收器的。地址用于该数据包被正确的接收器侦测和接收,而不是被其他设备错误地接收到。当我们在接收器中写入地址后,可以方便地过滤掉不是发送给自己的数据包,保证接收到的数据包至少地址是正确的。我们可以通过设置名为AW 的寄存器,调整地址的宽度到3 个、4 个或者5 个字节。
上图为数据包中的包控制字段(Packet Control Field),它涉及对数据包的控制工作,主要包括负载长度字段(Payload Length)、包识别字段(PID)和自动应答的非确认标志(NO_ACK)。包控制字段包含6 比特的负载长度字段。当该器件作为接收端设定为动态负载长度时,该负载长度字段用于指示负载有多长,以便于快速读取负载。当设定为静态负载长度时,就用不到该字段了,因为每次的负载长度都是固定的。
两个比特的包识别字段用于检测接收到的包是新的还是重传的。包识别字段是为了防止同样的负载被多次送到单片机中重复处理。当发送端每次发送新的数据包的时候,包识别字段的值都会增长。在接收端的器件会根据包识别字段和循环校验码(CRC)决定该数据包是重传的还是新的。当多个数据包丢失后,这次的包识别码就可能和上次的一样,如果这样的话,nRF24L01 会比较两次的循环校验码。如果两次的循环校验码相同,最新接收的数据包就会被认为是上次接收数据包的备份而被丢弃。
可选的自动应答特性控制着非确认标志(NO_ACK)。当自动应答这个特性被利用时,这个标志才有效。设置这个标志为1,告诉接收器这个包是不需要被自动应答的。
负载(Payload)是用户定义的数据内容。它的长度可以是0 至32 字节。用户可以把需要传输的数据放在负载字段里传输。循环冗余校验码用于数据包的错误检测。在数据发送前,发射器会根据发送的数据产生循环冗余校验码。当接收器接收到数据时,也会根据接收到的数据产生循环冗余校验码。最后,接收器会计算接收到的数据校验码,并和直接接收到的校验码进行比对,如果相同则认为数据在传输过程中没有出错,如果不相同就认为出错了,需要采取重传或者其他措施。该字段可以被设定为1 个或者2 个字节,并且从地址开始计算,也包括了包控制字段和负载。
有线键盘记录器在有些单位或者某些场景,作为按键日志记录设备是必须使用的。请不要随意取下,以免引起不必要的误会。
对于个人而言,有线键盘记录器这种攻击手段要防御说容易不容易,说难也不难。说容易是因为这种外接设备肉眼可见,说难是因为要用软件检测非常难,几个简单的防御方法如下。
首先,提高防范意识。使用台式机前检查一下,看看后面是不是被装了“小尾巴”。当然,每次都看太麻烦,可以选择将机箱放在肉眼可见的桌上,没事瞅一眼。使用笔记本电脑的话,随时看下就好。
其次,不熟悉的人送的键盘,不要随意接受!或者发现自己的键盘有被拆卸过的痕迹,也需要注意!也许,键盘里面,就藏着一块电路板,在你不经意时,窃取了你的账号和密码,继而以此为突破口窃取更多的机密。当然,还是自己去市面上买的键盘相对放心。
再就是,输入关键信息时,用软键盘输入比较好,前提是电脑本身的软件安全要做好,如果中了木马被录屏就没办法了。
对于无线键盘监听的防御,很简单,不使用无线键鼠就行!特别是在办公室用台式机或者笔记本电脑时,完全没必要使用无线键盘,手机和iPad 用屏幕键盘就可以。如果必须要用无线键盘,可以考虑自己做一个转换的硬件,将USB 有线键盘转换成蓝牙或者无线键盘,至于方法,与无线键盘记录器是一个原理。
最后,安全没有绝对,但也不要被谣言所恐吓,保持良好心态,小心谨慎,定期更换强密码很重要。
特别是对于掌握公司或者机关单位重要账号密码的工作人员,请提高自我安全防范意识。
警告:非法窃取他人信息是违法行为,本节内容仅供学习参考!切勿犯错!
我们将在明天的推送中向您介绍一个无线键鼠的监听与劫持的经典案例《MouseJack》:MouseJack能利用无线鼠标和键盘存在的一些问题,达到伪装成键盘并实现任意按键的效果。
想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。