用过蓝牙键盘、无线鼠标的人,大概率都听过蓝牙键盘被窃听的安全事件------攻击者只需要用一台低成本的抓包设备,就能截获空中传输的蓝牙按键数据,还原出用户输入的账号、密码甚至文档内容。这类攻击之所以能实现,绝大多数情况都不是蓝牙协议本身有漏洞,而是设备厂商在开发时,没有严格遵守HOGP规范中的安全要求,给攻击者留下了可乘之机。
目录
HOGP作为BLE人机交互设备的核心规范,不仅定义了HID数据的传输流程、模式切换、服务定义,更用完整的安全规则,划定了HID设备和主机必须遵守的安全底线。这些要求不是可有可无的建议,而是保护用户输入安全、防止设备被劫持、避免数据被窃听的核心屏障。本文就把HOGP的安全规范拆解得明明白白,从设备端和主机端的强制要求,到开发落地的避坑指南,彻底筑牢BLE HID设备的安全防线。
一、HOGP安全规范的核心定位
很多人以为,BLE的安全有SM安全管理器兜底,HOGP的安全要求只是重复通用规范。其实不然,HOGP的安全规范,是基于BLE核心安全体系,针对人机交互场景的特殊性,制定的场景化强制约束。
人机交互设备和其他BLE设备最大的不同,是它传输的数据极度敏感,且直接关系到设备的控制权:键盘输入的密码、鼠标的操作指令、游戏手柄的控制信号,一旦被窃听、篡改、伪造,轻则用户隐私泄露,重则设备被完全控制。同时,HID设备是长期使用的外设,用户不会每次使用都重新配对,需要稳定、长期的安全绑定关系。
所以HOGP安全规范的核心目标,始终围绕三个核心方向:
全程加密:所有核心HID数据的传输,必须在加密链路上进行,杜绝明文传输,防止空中窃听;
**双向绑定:**设备和主机必须完成完整的绑定流程,建立长期的安全信任关系,防止非法设备接入、非法主机连接;
策略统一:所有和HID相关的服务,必须保持一致的安全级别,避免出现安全短板,被攻击者利用突破。
二、HID设备端的强制安全要求
设备作为HID数据的发送方,也是安全防线的第一道关口,HOGP对设备端的安全要求,全部是强制必选,没有任何妥协的空间,每一条都直接关系到设备的基础安全性。
首先,设备必须始终处于可绑定模式。规范中明确要求,作为GAP外设角色的HID设备,必须处于BLE规范定义的可绑定模式。这里的可绑定模式,指的是设备允许和主机完成完整的安全绑定流程,生成并长期保存用于链路加密的长期密钥LTK,以及对应的身份解析密钥等安全参数。
我们可以用一个通俗的比喻理解这条要求:绑定就像设备和主机之间交换了专属的门禁密码,后续每次重连,双方都可以用这个密码快速验证身份,打开加密通道。如果设备不支持可绑定模式,就相当于每次开门都要临时换密码,不仅用户体验极差,更重要的是,没有长期绑定的密钥,链路加密的安全性会大打折扣,攻击者很容易通过重放攻击、中间人攻击窃取数据。更关键的是,不支持绑定的HID设备,根本无法通过蓝牙BQB认证,也无法兼容主流的操作系统主机。
第二点,所有HID服务的特征操作,必须要求加密链路。规范中明确要求,HID服务的所有特征,无论是读操作、写操作,还是用于传输输入报告的通知操作,都必须要求链路处于加密状态才能执行。
这是整个安全规范中最核心的一条,也是绝大多数安全事件的根源。HID的输入报告,比如键盘的按键扫描码、鼠标的位移数据,都是通过特征通知的方式从设备发送到主机的,如果这条要求没有落实,通知数据会以明文的形式在空中传输,任何一台支持BLE抓包的设备,都可以轻松截获并还原出用户的所有输入内容。
在实际开发中,这条要求的落地,就是在GATT数据库中,为HID服务的所有特征,设置正确的安全权限:只有当链路完成加密,且达到对应的安全级别时,主机才能访问这些特征。如果主机在未加密的链路上尝试访问,设备必须直接拒绝,并返回对应的ATT安全错误码,强制主机先完成链路加密,再进行数据交互。
第三点,设备应主动发起外设安全请求流程。规范中推荐,设备应使用BLE核心规范定义的外设安全请求流程,主动向主机告知自己的安全要求。
很多开发者会遇到这样的问题:主机连接设备之后,不会主动发起加密,直接尝试访问HID服务的特征,导致设备返回错误,连接异常。这时候,外设安全请求流程就起到了关键作用:当设备检测到主机在未加密的链路上尝试访问受保护的特征时,可以主动向主机发送安全请求,明确告知主机需要提升链路的安全级别,完成加密流程。这个流程就像设备主动提醒主机,必须先完成加密验证,才能访问核心数据,从机制上杜绝了明文传输的可能性。
**第四点,**所有关联服务的安全级别,必须和HID服务保持一致。规范中要求,设备支持的设备信息服务、电池服务、扫描参数服务的所有特征,都应该设置和HID服务完全相同的LE安全模式和安全级别。
很多开发者在这里会踩坑:把HID服务的安全级别设得很高,却忽略了电池服务、设备信息服务,给这些服务设置了明文可访问的权限。这就像给家里的大门装了最高级的防盗门,却把阳台的窗户完全打开,攻击者完全可以通过这些低安全级别的服务,获取设备的关键信息,甚至干扰主链路的通信,突破整个设备的安全防线。保持所有关联服务的安全级别统一,就是为了消除安全短板,让整个设备的安全策略形成闭环。
三、HID主机端的强制安全要求
主机作为HID交互的控制方,也是安全防线的核心环节,HOGP对主机端的安全要求,同样是强制约束,直接决定了整个HID交互的安全性。
首先,主机必须和设备完成完整的绑定流程。规范中明确要求,作为GAP中心角色的HID主机,必须和HID设备执行完整的绑定流程,和设备共同生成、保存安全密钥,建立长期的信任关系。
这条要求的核心目的,是防止伪造设备的接入。我们常说的蓝牙BadUSB攻击,很多时候就是因为主机没有严格执行绑定流程,允许了未绑定的恶意HID设备接入,导致攻击者通过伪造的键盘设备,向主机发送恶意按键指令,执行非法操作。主机严格执行绑定流程,就相当于只给已经验证过身份的设备开门,陌生的、未绑定的设备,根本无法接入主机进行HID交互,从根源上杜绝了伪造设备的攻击。
第二点,主机在重连之后,应尽早完成链路加密。规范中推荐,主机和绑定的设备重连之后,应该尽可能早地发起链路加密流程,完成链路的加密保护。
很多主机的常规操作是:重连之后先做服务发现、特征读取,等要访问HID服务的时候,再发起加密。这个流程看似没问题,实则留下了安全隐患:服务发现、特征读取的数据包,会以明文的形式在空中传输,攻击者可以通过这些数据包,获取设备的服务布局、特征UUID,为后续的攻击做准备。而规范要求的尽早加密,就是让主机在重连完成之后,立刻用绑定阶段保存的LTK发起加密,让整个连接过程中的所有交互,都在加密链路上进行,完全杜绝明文传输的窗口。
第三点,主机只能在收到设备的安全请求后,才能发起加密密钥刷新。规范中明确要求,主机只有在收到设备发起的外设安全请求之后,才能发起加密密钥的刷新操作,不能随意刷新密钥。
加密密钥刷新,是BLE中提升链路安全性的一种机制,通过更换新的加密密钥,降低密钥被破解的风险。但如果主机随意发起密钥刷新,会导致设备和主机的密钥不同步,轻则连接断开,重则绑定信息失效,需要重新配对。更重要的是,随意的密钥刷新,会给攻击者留下可乘之机,利用密钥刷新的流程发起中间人攻击。规范中的这条限制,就是为了让密钥的管理完全可控,只有设备主动请求的时候,主机才能执行刷新操作,保证整个安全流程的稳定性和安全性。
四、开发落地的避坑指南
在实际的HID设备开发中,很多开发者都会在安全规范上踩坑,这里整理了几个最常见的问题,帮大家提前避开:
第一个坑,调试阶段为了方便,关闭了HID服务的安全要求,量产的时候忘记恢复。这是最常见也最危险的问题,很多设备在调试的时候,为了不用每次都配对加密,把HID特征的安全权限设为明文可访问,量产的时候没有改回来,导致设备上市之后,所有的输入数据都是明文传输,直接暴露在窃听攻击之下。这里必须强调,调试阶段的临时配置,绝对不能带到量产版本中,必须严格遵守规范的安全要求。
第二个坑,设备没有开启可绑定模式,导致主机无法正常绑定。很多开发者为了简化配对流程,关闭了设备的可绑定模式,导致主机每次连接都要重新配对,用户体验极差,同时也不符合规范要求,无法通过蓝牙认证。必须始终开启可绑定模式,保证设备和主机能建立长期的绑定关系。
第三个坑,不同服务的安全级别不一致,导致兼容性问题。很多设备的HID服务要求加密,电池服务却允许明文访问,导致部分严格遵守规范的主机,在访问电池服务的时候出现异常,甚至直接断开连接。必须保证所有关联服务的安全级别和HID服务完全一致,避免出现兼容性问题。
HOGP的安全规范,从来都不是开发中的附加题,而是必须拿到满分的必答题。人机交互设备是用户和数字世界交互的入口,这个入口的安全,直接关系到用户的隐私和财产安全。无论是设备厂商还是主机系统开发者,都必须严格遵守这些安全要求,不能有任何的侥幸和妥协。只有把安全防线筑牢,才能让用户真正放心地使用无线HID设备,享受无线带来的便利。
五、检验
问题:HOGP规范中,对HID设备端的强制安全要求有哪些?核心设计目的是什么?
答案:
HOGP规范对HID设备端的强制安全要求包括四点核心内容:
-
作为GAP外设角色的HID设备,必须始终处于可绑定模式,允许与主机完成完整的绑定流程,生成并长期保存安全密钥;
-
HID服务的所有特征,无论是读、写还是通知操作,都必须要求加密链路才能执行,未加密链路的访问必须被拒绝;
-
设备应主动使用外设安全请求流程,向主机告知自身的安全要求,强制主机完成链路加密;
-
设备信息服务、电池服务、扫描参数服务等关联服务,必须设置与HID服务完全一致的安全模式和安全级别。
核心设计目的是通过全程加密、双向绑定、统一安全策略,杜绝HID输入数据被空中窃听,防止非法主机连接和伪造设备接入,建立完整的HID交互安全闭环,保护用户的敏感输入信息和设备控制权。
问题:HOGP规范要求HID主机在与绑定设备重连后,应尽早完成链路加密,为什么要制定这条规则?
答案:
这条规则的核心目的是消除明文传输的安全窗口,实现全连接周期的加密保护,具体原因包括三点:
-
避免重连初期的明文数据泄露:如果主机重连后先执行服务发现、特征读取等操作,再发起加密,这些操作的数据包会以明文形式在空中传输,攻击者可通过抓包获取设备的服务布局、特征UUID等关键信息,为后续攻击提供便利;
-
防止核心HID数据的意外明文传输:尽早加密可以保证,无论主机何时发起HID服务的访问,链路都已经处于加密状态,杜绝因流程顺序问题导致的输入报告明文传输;
-
提升重连的安全效率:主机与绑定设备已保存长期密钥LTK,重连后立即加密的流程开销极低,不会影响连接速度,却能从连接建立之初就完成安全防护,实现安全与体验的平衡。
问题:HOGP规范要求,HID设备的所有关联服务必须与HID服务保持一致的安全级别,背后的安全逻辑是什么?
答案:
这条要求的核心安全逻辑是消除安全短板,避免攻击者通过低安全级别的服务突破整个设备的安全防线,具体包括三点:
-
防范安全木桶效应:整个设备的安全上限,由安全级别最低的服务决定。如果HID服务设置了严格的加密要求,而电池服务、设备信息服务允许明文访问,攻击者可通过这些低安全级别的服务,获取设备的厂商信息、硬件版本、绑定状态等关键数据,为后续的定向攻击提供支撑;
-
保证安全策略的闭环统一:关联服务与HID服务使用相同的安全级别,可确保设备的所有对外交互都在统一的安全规则下进行,不会出现部分交互加密、部分交互明文的割裂情况,避免攻击者利用安全规则的差异发起攻击;
-
避免兼容性异常:主流的操作系统HID主机,会严格校验设备服务的安全级别一致性,如果不同服务的安全要求不统一,主机会判定设备存在安全风险,出现访问异常、主动断开连接等兼容性问题,统一的安全级别可保证设备与主机的正常交互。