BLE安全之配对流程剖析(3) 上一章介绍了配对流程的第二阶段,剖析了配对第二阶段的配对算法的选择和鉴权方式的选择。 接下来就进入了ble配对的阶段三,在该阶段双方会根据生成的STK或LTK来生成其他的密钥,就是配对的密钥分配阶段。 1. 通过这个可以将BLE配对产生的配对密钥转化成经典蓝牙的密钥。 link key = h6(ILK, “lebr”) 如果两端的CT2都设置为1,则: ILK = h7(SALT, LTK) BR/EDR link key = h6(ILK, “lebr”) 3.
就距离而言,BLE专注于非常短的距离通信。可以创建和配置一个BLE设备,该设备可以可靠地传输30米或30米以上的视线范围内的数据,但典型的操作范围可能更接近2到5米。 蓝牙BLE组成 BLE由三个主要构建模块组成:应用程序、主机和控制器。顾名思义,应用程序块是与蓝牙协议栈交互的用户应用程序。主机覆盖蓝牙协议栈的上层。控制器覆盖下层。 BLE的不同的层次和他们的目的 BLE和许多其他无线技术一样,由许多层组成。每一层都有其作用,对BLE器件的正常工作起着重要作用。 让我们再来看看BLE设备的3个构建模块:应用程序、主机和控制器: 应用程序是最高级别的,它负责包含与应用程序实现的实际用例相关的所有逻辑、用户界面和数据处理。 应用程序的体系结构高度依赖于使用BLE开发的项目,所以我们将把这一部分留给第二部分,我们将使用BLE P Click构建项目。
BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。 数据包 的包头,包含了:LLID(2bit)逻辑链路标识符、NESN(1bit)下一个预期序列号、SN(1bit)序列号、MD(1bit)更多数据、RFU(3bit)保留、length(8bit)长度。 04-HCI层 HCI (Host Controller interface), 为Host访问Controller提供一组标准的接口 主要完成3个任务: Host通过HCI发送命令给Controller 蓝牙规范定义了4种物理接口,3线 串口 、4线串口、HID、SDIO。这里不做过多介绍。 05-L2CAP层 L2CAP是个复用层,可以让低功耗蓝牙复用三条不同的信道。 参考: 蓝牙协议学习入门 - SeeDeer的博客 蓝牙技术联盟核心规范: http://www.bluetooth.com
对 RxSwift 及 BLE 感兴趣的同学可以看看,或有所得。
特点:数据传输速度比蓝牙BR快2-3倍(最高2-3 Mbps)。 1.2. 应用场景 音频设备:蓝牙耳机、蓝牙音箱,提供稳定高质量的音频传输。 BLE技术的应用场景与市场前景 随着物联网、智能家居等领域的快速发展,BLE技术的应用场景越来越广泛。 在智能家居中,BLE技术可以用于控制灯光、窗帘、空调等家居设备;在健康监测领域,BLE技术可以实现心率监测、步数统计等功能;在运动跟踪领域,BLE技术可以记录用户的运动数据并传输到手机应用中进行分析。 BLE 定义:BLE是蓝牙4.0及更高版本中引入的一种低功耗蓝牙技术,旨在通过一系列优化措施实现显著的能效提升。 传输速率 BR/EDR:最高传输速率可达3Mbps(EDR模式下),但在实际应用中可能因设备限制而有所降低。
相比传统的蓝牙,BLE更显著的特点是低功耗。这一优点使android App可以与具有低功耗要求的BLE设备通信,如近距离传感器、心脏速率监视器、健身设备等。 // 使用此检查确定 BLE 是否支持在设备上,然后你可以有选择性禁用 BLE 相关的功能 if (! ---- 你的 app 能与 BLE 通信之前,你需要确认设备是否支持 BLE,如果支持,确认已经启用。 如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE但被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。 连接到GATT服务端 ---- 与一个BLE设备交互的第一步就是连接它——更具体的,连接到BLE设备上的GATT服务端。
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要 角色和职责 以下是Android设备与BLE设备互动时适用的角色和职责: 中央与外围。 这适用于BLE连接本身。 处于中心角色的设备扫描,寻找广告,并且外围角色中的设备进行广告。 然后在运行时,您可以通过使用PackageManager.hasSystemFeature()确定BLE可用性: // Use this check to determine whether BLE 初始化BLE蓝牙广播(广告) (1)广播的设置 (2)设置广播的数据 (3)设置响应的数据 (4)设置连接回调 private void initGATTServer() { onCharacteristicWriteRequest:device name = null, address = 74:32:DE:49:3C:28 3.onCharacteristicWriteRequest
BLE 考虑功耗, 使用了3个广播信道,顺序广播。 两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。
Characteristic由Characteristic Definition定义, 包含一个Characteristic声明、Characteristic属性、值、值的描述(Optional) 3 Primary Service Discovery 3. Relationship Discovery 4. Characteristic Discovery 5.
最早了解 BLE 中继攻击是在 2022 年 3 月份,在网上搜了一堆关于 BLE 攻击方法的介绍,但当时并不知道无钥匙进入系统这么个东西,所以没感觉到中继攻击有什么大用途,当时接触的是些手环、灯泡这类的物联网设备 后来在 5 月份的时候 NCC 发布了 BLE 链路层中继解锁特斯拉的视频(https://youtu.be/5mdU4ksOc2w),发现原来 BLE 中继还挺有用的,就回头看了看之前搜集的资料,尝试搭建了 btlejuice 这个用来 BLE 中继攻击的工具(再吐槽一次 npm 安装东西太难了叭) 先把 btlejuice 以及 gattacker 这些中继攻击思路简单描述一下: 用两台带有蓝牙适配器的电脑 钥匙就无能为力了,与 NCC 发的视频实现的效果差距太大,便没有深入研究了 后来在网上冲浪的时候发现 NCC 在 hardware.io 分享了他们对 BLE 进行链路层中继的实现思路(https:/ 不会嵌入式开发,告辞 后来看到了小米的师傅们要在 KCon 分享他们实现的 BLE 链路层中继,斥巨资买了张门票(真就为了这个议题去的哈哈哈)然后心满意足的听了小米的师傅们对 BLE 攻击的分享(还说工具要在
索尼相机现在支持基于蓝牙低功耗 (BLE) 的控制协议。该接口允许客户端控制以及从支持 BLE 的遥控器获取状态。 遙控器 对于启用了索尼 BLE 的相机,发现过程相当简单。 例如 ILCE-7C 有8E3F7E15-AF80-1567-D946-A9190C2Cf98A 服务 支持的摄像机有多种操作模式,可确定哪些服务可操作。 相机控制服务 该服务支持对 BLE 的各种相机控制。相信这个服务比 DIRC 有更多的功能,但它的使用目前受到客户的限制。一旦客户端开始使用此接口,您就可以确定我们会窥探该接口。 相机控制服务目前正被索尼应用程序用于 BLE 到 Wifi 切换。它的许多特征似乎是为了支持FTP 服务器,但这并没有得到证实。 外面拍了天空 https://gethypoxic.com/blogs/technical/sony-camera-ble-control-protocol-di-remote-control
,这里以“BLE-UART”这个设备为例,连接之后可以看到从设备支持4个服务,其中前面0x1800、0x1801、0x180A是蓝牙联盟定义的,后面的是自定义的,显示Unknown Service。 (5)特征读写 ble是通过特征传输数据的,特征又有不同的属性,ff05这个特征只支持写。 (6)修改MTU 通过Request MTU可以修改MTU,提高数据的传输量。 2、BLE调试助手 这个是南京沁恒开发的app,调试起来也比较方便,支持从机模式,用法和nRF Connect差不多。 (1)从机模式切换,默认是主机模式 (2)扫描从机 (3)连接从机 (4)查看服务与特征 (5)特征读写 (6)修改MTU 3、LightBlue 在ios上一般使用这个调试 (3)特征读写 (4)修改MTU 上面3个ble调试app,都可以使用,个人推荐nRF Connect和BLE调试助手。
射频通道,编号0-39,每个2M,分为广播通道和数据通道,广播通道是37,38,39,其余都是数据通道。
Android BLE基础操作框架,基于回调,操作简单。包含扫描、多连接、广播包解析、服务读写及通知等功能。 该库是 BLE 操作的基础框架,只处理 BLE 设备通信逻辑,不包含具体的数据处理,如数据的分包与组包等。 //设置连接失败重试次数 .setConnectRetryInterval(1000)//设置连接失败重试间隔时间 .setOperateRetryCount(3)//设置数据操作失败重试次数 .setOperateRetryInterval(1000)//设置数据操作失败重试间隔时间 .setMaxConnectCount(3);//设置最大连接设备数量// 更多关于广播包解析可以参考Android BLE学习笔记中数据解析部分。
本文根据实际使用经验,介绍了每种抓包方案的环境配置与抓包方法,对比分析目前几种 BLE 的空口抓包方案(只讨论普通人用得起的,ellisys 这类神器摸都没摸过 Orz) PART1 方案一 ubertooth numpy python3-qtpy python3-distutils python3-setuptools 2、安装 libbtbb wget https://github.com/greatscottgadgets plugins .. make sudo make install 【这里如果提示没有python使用先whereis python3然后再sudo ln -s /usr/bin/python3 /usr 方案三 Hollong + wireshark 纬图出品的 BLE 抓包工具,配合 wireshark 抓包操作简单,优点是同时抓三个广播信道,不会出现概率问题,价格大概在 800 左右 提供官方软件 找到Global Extcap path 里面的路径 把刚才的 extcap 文件夹里的内容拷贝过去 运行这条命令,若如下图所示这样就是成功了,Linux 下用 .sh nrf_sniffer_ble.bat
BLE 安全 蓝牙的安全管理分为control端也就是LL层的安全管理和host端的安全管理, LL层的安全机制主要包括白名单管理,私有可解析地址管理,以及SM管理中的链路加解密等。 3. 而在传统蓝牙中,该字段表示是否需要通过经典蓝牙的Linkey来得到LTK。- idKey: 表示是否下发IRK,IRK是用来解析私有可解析地址的。 BLE的SM常用密钥介绍 常用的密钥定义简单介绍下,具体的使用会在后面章节详细介绍。 在选择好了合适的配对和鉴权方式后,接下来就是BLE配对的阶段二 ,在该阶段会通过配对流程生成STK或者LTK,该阶段不同的配对和鉴权方式导致情况较多,会专门在下章节详细介绍。
过程中比较重要的版本有: 蓝牙2.1:新增EDR(Enhanced Data Rate)技术,通过提高多任务处理和多种蓝牙设备同时运行的能力,使得蓝牙设备的传输率可达 3Mbps。 蓝牙4.0:增加了BLE(Bluetooth Low Energy)低功耗功能。 Bluetooth Mesh协议不是简单的Bluetooth 5的升级,他是独立与蓝牙协议之外的一套协议,是基于BLE开发组网协议。 总结 蓝牙(BT)通常泛指蓝牙技术,随着版本的演进,出现了低功耗(BLE)模式,蓝牙被表述为经典蓝牙和低功耗蓝牙两种模式。 MESH是蓝牙协议的一个补充协议,其是基于BLE协议栈开发的组网协议,也可以理解为蓝牙技术的一个分支。
BLE安全之SM剖析(2) 上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。 3. 如果结果一致,则将自身的LP_RAND_R值发送给主机端 3. 3. secure pairing配对流程 secure pairing与legacy paring不同, secure pairing在该阶段是直接生成LTK,而不是生成STK。 模式 和Numeric Comparison 模式的ra值和rb值分别设置为0, • passkey entry模式的ra值和rb值即为输入的数值 • OOB模式的ra值和rb值为外部OOB传输的数值 3.
开发者可通过该应用快速测试BLE设备,查看设备服务与特征,实现数据交互。 对调试BLE网络拓扑、分析设备交互逻辑、优化通信性能至关重要。 点击SCAN或类似扫描按钮,应用将实时列出扫描到的设备,展示设备名称、MAC地址(部分设备因隐私配置可能隐藏,显示随机地址)、信号强度(RSSI)及扫描间隔等信息; 3. 点击Connect按钮发起连接,若设备需配对码或用户确认,需在设备端完成相应操作; 3. 2.2 设备信息显示 nRF Connect提供直观的图形用户界面,支持BLE设备的查看、连接、交互及调试,核心功能如下: ①设备信息展示 扫描时将列出所有检测到的BLE设备,每个设备将显示: 名称:
3. 拒绝服务攻击 由于目前大多数无线设备都使用内置电池组,因此这些设备存在遭受拒绝服务攻击(DoS)的风险。DoS攻击会导致系统频繁崩溃,并耗尽其电池电量。 以 Heart Rate Service为例,可以看到它的官方通过 16 bit UUID是0x180D,包含3个Characteristic:Heart Rate Measurement, Body 利用 BLE 的工具 Linux为BLE提供了最好的支持。想要使用BLE,我们需要安装blueZ。 第3步:运行Android app(magic blue)并向灯泡发送一些更改颜色的指令。多重复操作几遍。 第3步:我们可以连接到特定设备并枚举所有Services和Characterstics。