BLE安全之SM剖析(2) 上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。 机端和设备端分别生成一个随机数,LP_RAND_I 和 LP_RAND_R 2. 主机将LP_CONFIRM_I发送给设备端, 设备端将LP_CONFIRM_R值发送给主机端 2. 2. 双方收到对方公钥后,分别验证收到的公钥是否是合法的,双方根据ECDH算法可以计算出相同的共享密钥DHKey。 双方分别生成一个随机数Na和Nb 2.
L2CAP层用于BLE设备的CID 可以看出BLE主要使用0x0004、0x0005、0x0006三个信道;0x0004用于ATT协议,0x0005用于L2CAP信令,0x0006用于安全管理。 L2CAP信令通道PDU格式 Length:长度 Channel ID:信道ID,0x0005标识BLE设备。 命令格式 Code:1字节,操作码; Identitier:1字节,ID; Length:2字节,长度; data:0-N字节。 L2CAP层信通道完整包结构 Code取值 Connection Parameter Update request包抓包 Connection Parameter Update response包抓包
2、SCAN_REQ整包结构 关于Preamble、Access Address、Header、CRC等字段可参考图解ble4.2空口包(air interface packets)一文。
2、扫描回复数据格式 可以看出广播数据格式由多个AD Structure组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成;Length为1字节,表示AD 3、SCAN_RSP整包结构 关于Preamble、Access Address、Header、CRC等字段可参考图解ble4.2空口包(air interface packets)一文。
L2CAP层用于BLE设备的CID 可以看出BLE主要使用0x0004、0x0005、0x0006三个信道; 0x0004用于ATT协议, 0x0005用于L2CAP信令, 0x0006用于安全管理
前言:蓝牙协议基于蓝牙核心规范展开,BLE属于蓝牙的一部分,虽然蓝牙协议很复杂,但是归根结底还是各种数据交互,从本文开始将开始一个系列,总结蓝牙的各种数据包;本文聊聊BLE4.2空口包的结构。 协议栈会自动处理这个字段; Access Address:接入地址,广播通道的时候使用0x8E89BED6这个固定值,数据通道的时候使用随机值; PDU:协议数据单元,又分为广播通道PDU和数据通道PDU,其中前2个字节是数据头字段 2、广播通道PDU 2.1、广播通道PDU格式: Header:包头; Payload:数据。 (2)扫描PDU: SCAN_REQ:扫描请求; SCAN_RSP:扫描回复。 (3)初始化PDU: CONNECT_REQ:连接请求。
就距离而言,BLE专注于非常短的距离通信。可以创建和配置一个BLE设备,该设备可以可靠地传输30米或30米以上的视线范围内的数据,但典型的操作范围可能更接近2到5米。 BLE的不同的层次和他们的目的 BLE和许多其他无线技术一样,由许多层组成。每一层都有其作用,对BLE器件的正常工作起着重要作用。 主机包含以下层: l 通用访问配置文件(GAP) l 通用属性配置文件(GATT) l 逻辑链路控制和适配协议(L2CAP) l 属性协议(ATT) l 安全经理(SM) l 主机控制器接口 现在我们可以转到BLE设备的主机部分。 逻辑链路控制和适配协议(L2CAP) L2CAP负责两项任务:1、它需要来自上层的多个协议,并将它们封装成标准的BLE数据包格式(反之亦然)。 2、分段和重组:它从上层获取大量数据包并将其分解为适合发送端BLE数据包的27字节最大有效载荷大小的块,反之亦然,它接收多个已经分段并重新组合的数据包将它们分成一个大的数据包然后发送到上层 L2CAP
2、LLData 字段格式 AA:Access Address,接入地址; CRCInit:CRC校验; WinSize:传输窗口大小; WinOffset:传输窗口偏移; Interval:连接间隔
对 RxSwift 及 BLE 感兴趣的同学可以看看,或有所得。
特点:数据传输速度比蓝牙BR快2-3倍(最高2-3 Mbps)。 1.2. 应用场景 音频设备:蓝牙耳机、蓝牙音箱,提供稳定高质量的音频传输。 LE2M(Long Range 2M): LE2M是BLE技术的一个扩展版本,它提供了比标准BLE更远的通信距离和更高的数据传输速率。 通过优化传输功率和接收灵敏度,LE2M使得BLE设备能够在更远的距离内进行稳定通信,适用于需要较远距离通信但仍然要求低功耗的应用场景。 2. BLE 5.0及更高版本: 传输速度与距离提升:BLE 5.0在传输速度和传输距离上相比前代有了显著提升。其传输速度比前代提高了2倍,达到2Mbps,同时传输距离也提高了4倍,最远可达300米。 BLE技术的应用场景与市场前景 随着物联网、智能家居等领域的快速发展,BLE技术的应用场景越来越广泛。
// 使用此检查确定 BLE 是否支持在设备上,然后你可以有选择性禁用 BLE 相关的功能 if (! ---- 你的 app 能与 BLE 通信之前,你需要确认设备是否支持 BLE,如果支持,确认已经启用。 如果不支持BLE,那么你应该适当地禁用部分BLE功能。如果支持BLE但被禁用,你可以无需离开应用程序而要求用户启动蓝牙。使用BluetoothAdapter两步完成该设置。 连接到GATT服务端 ---- 与一个BLE设备交互的第一步就是连接它——更具体的,连接到BLE设备上的GATT服务端。 private static final int STATE_CONNECTING = 1; //设备正在连接状态 private static final int STATE_CONNECTED = 2;
低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端 Android对外模模式(peripheral)的支持 从Android5.0开始才支持 关键术语和概念 以下是关键BLE术语和概念的摘要 : 通用属性简档(GATT) - GATT简档是用于通过BLE链路发送和接收称为“属性”的短数据块的一般规范。 角色和职责 以下是Android设备与BLE设备互动时适用的角色和职责: 中央与外围。 这适用于BLE连接本身。 处于中心角色的设备扫描,寻找广告,并且外围角色中的设备进行广告。 然后在运行时,您可以通过使用PackageManager.hasSystemFeature()确定BLE可用性: // Use this check to determine whether BLE 2.onDescriptorWriteRequest:device name = null, address = 74:32:DE:49:3C:28 2.onDescriptorWriteRequest
BLE 考虑功耗, 使用了3个广播信道,顺序广播。 两个蓝牙设备想要建立连接, 第一步是 从机(server) 向外广播, 主机(client) 搜索到后发起请求。 value note 0x05 len 0x03 Complete List of 16-bit Service Class UUIDs 0x22 uuid1_L 0x11 uuid1_H 0x22 uuid2_ L 0x33 uuid2_H 广播中的厂商信息 这个一段的广播标记时 0XFF, 对应用于标记设备的生产商和其他信息。
Attribute | | Protocol | <----> | Protocol | --------------- --------------- | L2CAP | <----> | L2CAP | --------------- --------------- | Controller | <----> | Controller Characteristic Properties 1 octets Bit field of characteristic properties Characteristic Value Handle 2 octets Handle of the Attribute containing the value of this characteristic Characteristic UUID 2/16 octets Server Configuration 2. Primary Service Discovery 3. Relationship Discovery 4.
最早了解 BLE 中继攻击是在 2022 年 3 月份,在网上搜了一堆关于 BLE 攻击方法的介绍,但当时并不知道无钥匙进入系统这么个东西,所以没感觉到中继攻击有什么大用途,当时接触的是些手环、灯泡这类的物联网设备 后来在 5 月份的时候 NCC 发布了 BLE 链路层中继解锁特斯拉的视频(https://youtu.be/5mdU4ksOc2w),发现原来 BLE 中继还挺有用的,就回头看了看之前搜集的资料,尝试搭建了 /youtu.be/2CvHM5gZVnY),当时在他们公开的 PPT 中说要对固件进行修改,嗯? 不会嵌入式开发,告辞 后来看到了小米的师傅们要在 KCon 分享他们实现的 BLE 链路层中继,斥巨资买了张门票(真就为了这个议题去的哈哈哈)然后心满意足的听了小米的师傅们对 BLE 攻击的分享(还说工具要在 原视频:https://youtu.be/myW2cxyOHEQ
索尼相机现在支持基于蓝牙低功耗 (BLE) 的控制协议。该接口允许客户端控制以及从支持 BLE 的遥控器获取状态。 遙控器 对于启用了索尼 BLE 的相机,发现过程相当简单。 (这里是因为上面换行了,这里回分开) 捕获的信息 SONY制造商的bit意思 总而言之,我们搜索其制造数据包含以下内容的tag包: 0x2D 0x01 0x03 0x 00 0x64 0x 00 例如 ILCE-7C 有8E3F7E15-AF80-1567-D946-A9190C2Cf98A 服务 支持的摄像机有多种操作模式,可确定哪些服务可操作。 相机控制服务 该服务支持对 BLE 的各种相机控制。相信这个服务比 DIRC 有更多的功能,但它的使用目前受到客户的限制。一旦客户端开始使用此接口,您就可以确定我们会窥探该接口。 相机控制服务目前正被索尼应用程序用于 BLE 到 Wifi 切换。它的许多特征似乎是为了支持FTP 服务器,但这并没有得到证实。
(1)打开手机app,扫描周围的设备(从机),支持过滤功能 (2)设备信号强度(RSSI)查看 可以很清晰的观察rssi的变化: (3)连接设备 点击“CONNECT”按钮,即可连接目标设备 2、BLE调试助手 这个是南京沁恒开发的app,调试起来也比较方便,支持从机模式,用法和nRF Connect差不多。 (1)从机模式切换,默认是主机模式 (2)扫描从机 (3)连接从机 (4)查看服务与特征 (5)特征读写 (6)修改MTU 3、LightBlue 在ios上一般使用这个调试 (1)扫描设备 (2)连接设备 连接上后可以看到连接状态、以及广播数据,并且每个服务都是展开,每个服务下面的特征也一目了然。 (3)特征读写 (4)修改MTU 上面3个ble调试app,都可以使用,个人推荐nRF Connect和BLE调试助手。
2、广播数据格式 可以看出广播数据格式由多个AD Structure组成,每个AD Structure由3部分构成,Length、AD Type、AD Data组成;Length为1字节,表示AD 3、ADV_IND整包结构 由上面1、2可以得出整个ADV_IND结构如下: 关于Preamble、Access Address、Header、CRC等字段可参考图解ble4.2空口包(air interface 4、ADV_IND抓包 使用wireshark和Nordic BLE Sniffer抓包。 5.2、不完整的16位UUID(0x02) 5.3、广播间隔(0x1A) 可以看出,广播间隔数据为2个字节。 5.4、LE角色(0x1C) 可以看出,LE角色数据为1个字节。
前面的十来篇文章,都是关于ble的理论,本文开始实战,基于CH579学习蓝牙。 1、广播包 格式参考ble4.2不可连接的非定向广播包详解(ADV_NONCONN_IND)一文。 2、交互过程 可以看出,ADV_NONCONN_IND过程只有广播,不会有其他包。 ——————END—————— 相关文章推荐: ble 40个射频通道 ble4.2 ATT层包详解(Attribute Protocol) ble4.2 L2CAP层信令通道包详解(SIGNALING PACKET FORMATS) 非定向可连接广播、扫描请求、扫描回复、连接请求之间的关系 ble4.2连接请求包详解(CONNECT_REQ) ble4.2扫描回复包详解(SCAN_RSP) ble4.2 扫描请求包详解(SCAN_REQ) ble4.2可连接的非定向广播包详解(ADV_IND) ble4.2不可连接的非定向广播包详解(ADV_NONCONN_IND) ble4.2空口包详解(air
射频通道,编号0-39,每个2M,分为广播通道和数据通道,广播通道是37,38,39,其余都是数据通道。 ——————END——————