`

无线键鼠监听与劫持

阅读更多

引言:键盘是生活中最常见的硬件之一,无线键鼠由于其方便美观受到很多人的青睐,那么它的安全性如何呢?面对攻击我们又如何防护呢? 
本文选自《硬件安全攻防大揭秘》。

1.无线键鼠的兴起

  键盘连接到计算机有多种方式,有线键盘鼠标在生活中最常见,适用范围也很广泛,但有线连接不仅对操作距离有限制,而且给携带造成了不便。不仅如此,繁杂的线缆还很容易把桌面弄得凌乱不堪。无线键鼠非常好地解决了上述问题。无线键鼠又分为蓝牙类型和2.4GHz 类型,文中所指的无线鼠标一般指2.4GHz 类型。值得注意的是,虽然蓝牙键鼠的工作频段也是2.4GHz 频段,使用的却是蓝牙通信协议,符合蓝牙标准。而2.4GHz 类型的键鼠主要指利用专属无线协议开发的无线产品。2.4GHz 类型的无线键鼠,一般在计算机的USB 接口处插上一个适配器,鼠标和键盘通过电池供电。

2.无线键鼠的基本原理

  无线键鼠与有线键鼠的主要区别在于信号传输方式。有线键鼠利用导线传输信息,而无线键盘利用无线电传输信息。早期的无线键盘使用27MHz 的频段,当时的无线接收器相对现在的集成芯片来说要大得多。目前大多数产品都工作在2.4GHz 的ISM(工业、科学、医疗)频段。下面我们大致介绍无线键盘的工作原理。当按下键盘时,键盘内部的单片机利用矩阵扫描的原理检测到是哪个按键按下了,相应按键有相应的编码;单片机利用无线收发模块把按键信息通过无线电传播出去;电脑端插在USB 接口上的适配器收到相应的数据后会通过USB 向电脑操作系统传输按键的输入信息。这样就完成了一次按键信息的传送,下面将详细介绍无线通信的硬件部分和通信数据部分。

3.硬件部分

  如果想真正了解键盘的构造、基本原理等信息,拆解是非常直接有效的方法。 
图片描述
  上图为某无线键盘的拆解图。右下部分是一个电池槽,红色的线是一根电源线,为单片机和无线模块供电。目前市场上最常见的就是这种薄膜式键盘。薄膜式键盘取代机械键盘的原因并非机械键盘的品质不够好、手感不佳。机械键盘的手感、使用寿命都要优于薄膜键盘,只是因为成本过高而逐渐退出市场。最近因更追求产品的品质,机械键盘又逐渐流行起来。 
  薄膜式键盘内部共分三层,实现了无机械磨损,其特点是低价格、低噪音和低成本,已占领市场绝大部分份额。我们现在经常使用的就是薄膜键盘。薄膜式键盘架构很简单,除了上下盖、键帽之外,拆开键盘之后,还会看到橡胶帽(但事实上现在都是用硅胶制成)、三片薄膜、电路板,以及电路板上的IC。再检视薄膜的话,还可以看到导电的印刷涂料。薄膜式键盘的原理相当简单,三片薄膜中,最上方为正极电路,最下方为负极电路,中间为不导电的塑料片。 
【图4】
  接着,在上方放按压模块(通常包括键帽、键帽下方活动模块,以及橡胶帽),当手指从键帽压下时,上方与下方薄膜就会接触通电,完成导通。 
  然而,我们更关注的是它的射频部分。也就是它采用了哪款芯片,完成对数据的传输。这样我们才能更方便地找对方向进行研究。 
【图5】
  上图为无线键盘的射频部分,用的是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 公司官方给出的电路参考设计原理图。大多数公司都是据此进行开发的,除非一些公司对某些方面有特殊的需求才会对该原理图调整。许多厂家会据此进行二次开发,生产出该芯片的模块。 
【图6】
  下图为该芯片的成品模块 
【图7】
  该模块只引出了必要的电源及控制接口,其他外围电路都已经集成在模块上。这样的好处是使用更方便,不需要关心芯片的外围电路和天线部分。天线的设计是电路设计上的难点,细小的失误都可能对通信距离产生较大的影响。所以很多厂商都采用设计成熟的模块,而不是自己重新设计这一部分。 
【图8】
  上图为该模块的引脚顺序图,可以与单片机进行连接。相应的引脚功能如下。 
【图9】
  模块保留了用户需要用到的8 个接口。其中1 号和2 号引脚为电源接口,为该模块供电。3 号引脚为芯片使能接口,用于设置芯片是工作在接收模式还是发送模式。4 号至7 号引脚是用于SPI 通信的四条连线。CSN 用于片选芯片,也就是芯片的SPI 通信使能。SCK 是单片机为SPI 通信提供的通信时钟。MOSI 是单片机向模块发送数据的数据接口,MISO 是模块向单片机发送数据的数据接口。8 号引脚IRQ 在接收到数据时通过电平跳变来通知单片机模块已经收到了数据。这种方式的好处在于单片机在没有收到数据时可以完成其他任务,不需要一直查询该模块是否收到数据。当然,这个接口也可以不用,不过如上所述,需要一直查询是否收到了数据,这种方式是非常低效的。采用这种方式带来的另外一个缺点是一直使单片机处于工作状态,不利于休眠,会造成功耗大幅度提高。 
  通过上述物理接口就可以达到配置和操作nRF24L01 的目的。了解硬件是不够的,对通信的数据的学习仍然是一门必修课。

4.通信数据部分

  nRF24L01 支持数据包的自动装配,自动发送确认包和重发数据包。它支持1 至32 字节的负载长度。能把收到的包自动分解,得到需要的负载部分。nRF24L01 拥有6 个通信信道,最多支持1 对6 的星形网络。 
【图10】
  上图为nRF24L01 的数据包格式,其中包括了1 个字节的前导码、3 至5 字节的地址、9 个比特的包控制段、0 至32 字节的负载段及CRC 校验码。数据包内各个部分在整个通信中扮演着不同的角色,有着不同的作用,下面将对它们做详细介绍。 
  前导码用于让接收端的解调器和输入的比特流同步。这里的前导码的长度是一个字节,序列是01010101 或者10101010。至于具体是哪种前导码,与紧接在前导码后面地址的第一个比特有关。如果地址的第一个比特是1,则前导码被自动设置为10101010。如果地址的第一个比特是0,则前导码被自动设置为01010101。这些措施用于保证有足够的过度时间来稳定接收器。简单地说,前导码的存在主要是为了让后续的数据流接收更加稳定。 
  这里的地址是发射器发送给接收器的。地址用于该数据包被正确的接收器侦测和接收,而不是被其他设备错误地接收到。当我们在接收器中写入地址后,可以方便地过滤掉不是发送给自己的数据包,保证接收到的数据包至少地址是正确的。我们可以通过设置名为AW 的寄存器,调整地址的宽度到3 个、4 个或者5 个字节。 
【图11】
  上图为数据包中的包控制字段(Packet Control Field),它涉及对数据包的控制工作,主要包括负载长度字段(Payload Length)、包识别字段(PID)和自动应答的非确认标志(NO_ACK)。包控制字段包含6 比特的负载长度字段。当该器件作为接收端设定为动态负载长度时,该负载长度字段用于指示负载有多长,以便于快速读取负载。当设定为静态负载长度时,就用不到该字段了,因为每次的负载长度都是固定的。 
  两个比特的包识别字段用于检测接收到的包是新的还是重传的。包识别字段是为了防止同样的负载被多次送到单片机中重复处理。当发送端每次发送新的数据包的时候,包识别字段的值都会增长。在接收端的器件会根据包识别字段和循环校验码(CRC)决定该数据包是重传的还是新的。当多个数据包丢失后,这次的包识别码就可能和上次的一样,如果这样的话,nRF24L01 会比较两次的循环校验码。如果两次的循环校验码相同,最新接收的数据包就会被认为是上次接收数据包的备份而被丢弃。 
  可选的自动应答特性控制着非确认标志(NO_ACK)。当自动应答这个特性被利用时,这个标志才有效。设置这个标志为1,告诉接收器这个包是不需要被自动应答的。 
  负载(Payload)是用户定义的数据内容。它的长度可以是0 至32 字节。用户可以把需要传输的数据放在负载字段里传输。循环冗余校验码用于数据包的错误检测。在数据发送前,发射器会根据发送的数据产生循环冗余校验码。当接收器接收到数据时,也会根据接收到的数据产生循环冗余校验码。最后,接收器会计算接收到的数据校验码,并和直接接收到的校验码进行比对,如果相同则认为数据在传输过程中没有出错,如果不相同就认为出错了,需要采取重传或者其他措施。该字段可以被设定为1 个或者2 个字节,并且从地址开始计算,也包括了包控制字段和负载。

5 如何防御

  有线键盘记录器在有些单位或者某些场景,作为按键日志记录设备是必须使用的。请不要随意取下,以免引起不必要的误会。 
  对于个人而言,有线键盘记录器这种攻击手段要防御说容易不容易,说难也不难。说容易是因为这种外接设备肉眼可见,说难是因为要用软件检测非常难,几个简单的防御方法如下。 
  首先,提高防范意识。使用台式机前检查一下,看看后面是不是被装了“小尾巴”。当然,每次都看太麻烦,可以选择将机箱放在肉眼可见的桌上,没事瞅一眼。使用笔记本电脑的话,随时看下就好。 
其次,不熟悉的人送的键盘,不要随意接受!或者发现自己的键盘有被拆卸过的痕迹,也需要注意!也许,键盘里面,就藏着一块电路板,在你不经意时,窃取了你的账号和密码,继而以此为突破口窃取更多的机密。当然,还是自己去市面上买的键盘相对放心。 
  再就是,输入关键信息时,用软键盘输入比较好,前提是电脑本身的软件安全要做好,如果中了木马被录屏就没办法了。 
对于无线键盘监听的防御,很简单,不使用无线键鼠就行!特别是在办公室用台式机或者笔记本电脑时,完全没必要使用无线键盘,手机和iPad 用屏幕键盘就可以。如果必须要用无线键盘,可以考虑自己做一个转换的硬件,将USB 有线键盘转换成蓝牙或者无线键盘,至于方法,与无线键盘记录器是一个原理。 
  最后,安全没有绝对,但也不要被谣言所恐吓,保持良好心态,小心谨慎,定期更换强密码很重要。 
  特别是对于掌握公司或者机关单位重要账号密码的工作人员,请提高自我安全防范意识。

警告:非法窃取他人信息是违法行为,本节内容仅供学习参考!切勿犯错!

  我们将在明天的推送中向您介绍一个无线键鼠的监听与劫持的经典案例《MouseJack》:MouseJack能利用无线鼠标和键盘存在的一些问题,达到伪装成键盘并实现任意按键的效果。 
  本文选自《硬件安全攻防大揭秘》,点此链接可在博文视点官网查看。 

图片描述

 

  想及时获得更多精彩文章,可在微信中搜索“博文视点”或者扫描下方二维码并关注。
                         图片描述

分享到:
评论

相关推荐

    给平民的 Mousejack(65页).pdf

    MouseJack攻击首先通过扫描附近的所有无线鼠标,寻找信号跳跃的机会。一旦找到目标,攻击者就能监听到受害者的键盘和鼠标动作,如按键和鼠标移动。接着,攻击者可以记录这些“按键”和“鼠标点击”,然后重新播放...

    cole_02_0507.pdf

    cole_02_0507

    工程硕士开题报告:无线传感器网络路由技术及能量优化LEACH协议研究

    内容概要:南京邮电大学工程硕士研究的无线传感器网络路由技术。通过对无线传感器网络路由协议的历史和研究现状进行了详细探讨,着重介绍了SPIN、LEACH、TEEN、pEGASIS等常见协议的特点、优势与局限性。文中分析了现有路由协议中的能量管理和网络覆盖问题,并提出了一种结合最大覆盖模型的改进型能量LEACH协议来应对这些问题。该研究旨在提高无线传感网络能量效率和覆盖效果,从而拓展其在各行业尤其是环境监测和军事安全领域的大规模应用。 适合人群:本篇文章主要面向具有无线传感网路研究背景或对此有兴趣的研究人员、工程师和技术爱好者,特别是在能源消耗控制上有较高需求的应用开发者。 使用场景及目标:①帮助理解和选择合适的无线传感器网络路由技术;②指导开发新路由协议时关注的关键要素;③为企业实施物联网相关项目提供理论支撑。 其他说明:文章强调了优化算法对于改善系统性能的重要性,并展示了具体的实施方案。通过仿真实验对不同协议的效果进行了验证,体现了科学研究的严谨态度与实践导向。

    【东海期货-2025研报】东海贵金属周度策略:金价高位回落,阶段性回调趋势初现.pdf

    【东海期货-2025研报】东海贵金属周度策略:金价高位回落,阶段性回调趋势初现.pdf

    图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作)

    【资源介绍】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,也可以作为小白实战演练和初期项目立项演示的重要参考借鉴资料。 3、本资源作为“学习资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研和多多调试实践。 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip 图像数据处理工具+数据(帮助用户快速划分数据集并增强图像数据集。通过自动化数据处理流程,简化了深度学习项目的数据准备工作).zip

    diminico_02_0709.pdf

    diminico_02_0709

    agenda_3cd_01_0716.pdf

    agenda_3cd_01_0716

    A课件Python全栈开发线下班.zip

    目录: 第1章 Linux命令入门及VIM编辑器 第2章Python基础 第3章Python面向对象编程 第4章数据结构与算法 第5章UDP与TCP通信 第6章多进程编程 第7章多线程编程 第8章协程 第9章正则表达式 第10章 Http协议 Web服务器并发服务器 第11章网络通信过程 第12章 Python提高1 第13章 Python提高2 第14章 Mysq|基本使用 第15章 Mysq|查询 第16章Mysql与Python交互 第17章Mysql高级 第18章WSGI-miniWeb框架 第19章闭包装饰器 第20章 mini-web框架 添加路由-MySQL功能 第21章 mini-web框架 添加log日志路由支持正则 第22章元类与ORM-面向接口编程

    diminico_02_1108.pdf

    diminico_02_1108

    基于人工智能大模型技术的果蔬农技知识智能问答系统.pdf

    基于人工智能大模型技术的果蔬农技知识智能问答系统.pdf

    diminico_02_0307.pdf

    diminico_02_0307

    dawe_3cd_01_0717.pdf

    dawe_3cd_01_0717

    anslow_3ck_01_0319.pdf

    anslow_3ck_01_0319

    C#全自动多线程上位机源码编程:替代传统PLC触摸屏、以太网通信,强大功能多级页签,支持西门子PLC和OPC,安装KepserverEx5,链接其他数据库,C#多线程自动化工控屏幕上位机源码编程系统:

    C#全自动多线程上位机源码编程:替代传统PLC触摸屏、以太网通信,强大功能多级页签,支持西门子PLC和OPC,安装KepserverEx5,链接其他数据库,C#多线程自动化工控屏幕上位机源码编程系统:功能强大,多级页签,通信灵活,兼容多种配置与数据库连接,C#全自动多线程上位机源码编程 0, 纯源代码。 1, 替代传统plc搭载的触摸屏。 2, 工控屏幕一体机直接和plc通信。 3, 功能强大,多级页签。 4, 可以自由设定串口或以太网通信。 5, 主页。 6, 报警页。 7, 手动调试页。 8, 参数设定页。 9, 历史查询页。 10,系统设定页。 11, 赠送所有控件。 12,使用的西门子Plc。 13,注册opcdaauto.dll组件,用于使用opc。 15,安装kepserverEx5。 16,可以链接其他数据库。 ,核心关键词: C#; 全自动多线程; 上位机源码编程; 纯源代码; PLC替代; 通信; 强大功能; 多级页签; 串口或以太网通信; 主页; 报警页; 手动调试页; 参数设定页; 历史查询页; 系统设定页; 控件赠送; 西门子PLC; OPC

    移动应用开发全流程解析:从创意到上线与推广的最佳实践

    内容概要:本文详细介绍了移动应用开发的全过程,从创意构思和需求分析开始,依次阐述了原型设计、技术选型、前后端开发、测试优化、上线准备到最后的推广和后续维护,帮助读者深入了解和掌握各个环节的要点和最佳实践,特别注重实际操作中的问题和解决方法。文章不仅涵盖技术层面的内容,还包括市场营销和社会影响等方面的探讨。 适合人群:移动应用开发初学者和有一定经验的开发者,想要了解移动应用从构想直到推向市场全部过程的专业人士。 使用场景及目标:指导新创企业和个体开发者从零开始制作自己的应用程序,提供系统的理论知识以及实用技能指导。 阅读建议:本文适合分章节细读,尤其对于每个关键阶段,可以结合具体的案例研究深入理解;在实践应用时应注意参考文中提到的实际开发中容易碰到的问题及其解决方案。

    axios-v0.18.0

    axios-min.js

    Rust语言教程:从入门到进阶 Rust是一门注重性能、内存安全以及并发的系统编程语言 它被设计用来替代C和C++,同时提供更高的安全性和更好的并发支持 本教程将引导你从Rust的基础语法开始,逐步掌

    Rust语言教程:从入门到进阶 Rust是一门注重性能、内存安全以及并发的系统编程语言。它被设计用来替代C和C++,同时提供更高的安全性和更好的并发支持。本教程将引导你从Rust的基础语法开始,逐步掌握到更高级的概念。 一、Rust入门 1. Rust安装 工具链安装:通过rustup安装Rust工具链,它包含Rust编译器、Cargo包管理器以及标准库文档。 验证安装:在终端运行rustc --version和cargo --version来检查Rust和Cargo是否成功安装。 2. Hello, World! 创建一个新的Rust项目:cargo new hello_world --bin。 进入项目目录:cd hello_world。 编辑srcmain.rs文件,添加fn main() { println!(Hello, World!); }。 编译并运行项目:cargo run。 3. Rust基础语法 变量:使用let关键字声明变量,默认情况下变量是不可变的(immutable)。 数据类型:整数(i32, u32等)、浮点数(f32, f64)、布尔值(bool)、字

    anslow_05_0109.pdf

    anslow_05_0109

    【宝城期货-2025研报】国债期货:国债期货底部震荡为主.pdf

    【宝城期货-2025研报】国债期货:国债期货底部震荡为主.pdf

    dove_02_1106.pdf

    dove_02_1106

Global site tag (gtag.js) - Google Analytics