BLE安全之SM剖析(2) 上一章介绍了配对流程的第一阶段,剖析了配对第一阶段的配对请求包和配对响应包的各个字段的含义和使用。 机端和设备端分别生成一个随机数,LP_RAND_I 和 LP_RAND_R 2. 主机将LP_CONFIRM_I发送给设备端, 设备端将LP_CONFIRM_R值发送给主机端 2. 2. 双方收到对方公钥后,分别验证收到的公钥是否是合法的,双方根据ECDH算法可以计算出相同的共享密钥DHKey。 双方分别生成一个随机数Na和Nb 2.
就距离而言,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
本章介绍蓝牙协议(重点介绍:BLE)的基本特点、版本演进、协议的构成、等基础知识,本章重在了解,目的是对BLE协议有个大概的认知,即了解BLE协议栈的全貌。 BLE协议栈的实现方式采用分层的思想: 控制器部分包括:物理层(PHY)、链路层(LL)、控制接口层(HCI) 主机部分包括:裸机链路控制及自适应协议层(L2CAP)、安全管理层(SMP)、属性协议层( BLE采用40个信道,每个信道间隔为2MHz,分为数据信道和广播信道;广播信道占用3个,用于发现设备、建立连接、广播数据;数据信道占用37个,用于已建立连接设备间的数据通信。 05-L2CAP层 L2CAP是个复用层,可以让低功耗蓝牙复用三条不同的信道。它也支持数据的分割和重组功能,使得较大的报文可以在底层无线电中传输。 参考: 蓝牙协议学习入门 - SeeDeer的博客 蓝牙技术联盟核心规范: http://www.bluetooth.com
对 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调试助手。
射频通道,编号0-39,每个2M,分为广播通道和数据通道,广播通道是37,38,39,其余都是数据通道。 ——————END——————
BLE 安全 蓝牙的安全管理分为control端也就是LL层的安全管理和host端的安全管理, LL层的安全机制主要包括白名单管理,私有可解析地址管理,以及SM管理中的链路加解密等。 所以这个标志是确定第 2 阶段配对方法的指标。 - **KP**字段是keypress,仅在 Passkey Entry 协议中使用,在其他协议中被忽略。 在传统配对中,0x01表示会下发LTK用于链路的加密, 0x00表示不会下发LTK, 2. 在安全配对LESC中,由于在配对阶段二就会生成LTK,所以该字段会被忽略。3. BLE的SM常用密钥介绍 常用的密钥定义简单介绍下,具体的使用会在后面章节详细介绍。 2. 一个设备随机生成并显示6位数字,用户记下这个数字后,在另一个设备上输入相同的数字,此时SMP协议会将输入的数字传输给对端,来校验数字是否正确,以达到鉴权的目的。
Android BLE基础操作框架,基于回调,操作简单。包含扫描、多连接、广播包解析、服务读写及通知等功能。 项目地址:https://github.com/xiaoyaoyou1212/BLE 项目依赖:compile 'com.vise.xiaoyaoyou:baseble:2.0.0' 功能 支持多设备连接管理 该库是 BLE 操作的基础框架,只处理 BLE 设备通信逻辑,不包含具体的数据处理,如数据的分包与组包等。 更多关于广播包解析可以参考Android BLE学习笔记中数据解析部分。
本文根据实际使用经验,介绍了每种抓包方案的环境配置与抓包方法,对比分析目前几种 BLE 的空口抓包方案(只讨论普通人用得起的,ellisys 这类神器摸都没摸过 Orz) PART1 方案一 ubertooth libbluetooth-dev wget \ pkg-config python3-numpy python3-qtpy python3-distutils python3-setuptools 2、 新开一个终端,插入 ubertooth one 后输入 ubertooth-btle -f -c /tmp/pipe 就可以看到流量在终端里显示了,同时 wireshark 里也会捕获到流量 PART2 PART3 方案三 Hollong + wireshark 纬图出品的 BLE 抓包工具,配合 wireshark 抓包操作简单,优点是同时抓三个广播信道,不会出现概率问题,价格大概在 800 左右 找到Global Extcap path 里面的路径 把刚才的 extcap 文件夹里的内容拷贝过去 运行这条命令,若如下图所示这样就是成功了,Linux 下用 .sh nrf_sniffer_ble.bat
大家在IoT平台上创建产品时,在通讯协议中会看到蓝牙(Bluetooth,或简写BT)、BLE、MESH(SIG)的字样,这几个名称分别代表什么,有什么关联和差别,在此给大家做个简要的说明。 蓝牙4.0:增加了BLE(Bluetooth Low Energy)低功耗功能。 Bluetooth Mesh协议不是简单的Bluetooth 5的升级,他是独立与蓝牙协议之外的一套协议,是基于BLE开发组网协议。 总结 蓝牙(BT)通常泛指蓝牙技术,随着版本的演进,出现了低功耗(BLE)模式,蓝牙被表述为经典蓝牙和低功耗蓝牙两种模式。 MESH是蓝牙协议的一个补充协议,其是基于BLE协议栈开发的组网协议,也可以理解为蓝牙技术的一个分支。
开发者可通过该应用快速测试BLE设备,查看设备服务与特征,实现数据交互。 对调试BLE网络拓扑、分析设备交互逻辑、优化通信性能至关重要。 二、功能特点 2.1 设备扫描与连接流程 (1)设备扫描 可扫描周围所有处于广播状态的BLE外设,操作步骤如下: 1. 打开nRF Connect应用,进入主界面; 2. (2)设备连接 扫描到目标设备后,按以下步骤操作: 1. 在扫描结果列表中点击目标设备,进入详细信息页面; 2. 2.2 设备信息显示 nRF Connect提供直观的图形用户界面,支持BLE设备的查看、连接、交互及调试,核心功能如下: ①设备信息展示 扫描时将列出所有检测到的BLE设备,每个设备将显示: 名称:
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包抓包
低功耗蓝牙(BLE)以低功耗、低成本、开发简便逐渐被广泛应用,本文主要介绍一款较为通用、价格低廉的BLE设备从零开始如何利用App Inventor 2开发一款自己专属的手机蓝牙App应用。 本文主要通过一款常见的BLE硬件接入控制,介绍硬件接入App Inventor 2 的通用方法,类似的硬件接入都是大同小异的。 2、串口工具测试接线完成后,我们必须先来测试一下蓝牙硬件的连通性,但是由于蓝牙硬件是孤立存在的,我们无法查看手机App向它发送的什么数据,也无法让它往手机App发送数据,这时我们就需要用到串口工具。 例如智能手环,是作为BLE的从机设备(以上的数据透传演示BLE硬件就是作为从机的)IO口控制可以使用厂商提供的App进行IO口控制,也可以使用App Inventor 2 编程实现控制IO口电平的高/低 3、App Inventor 2 开发自己的蓝牙App主要用到 BlueToothLE 拓展,点此查看中文文档。BLE蓝牙的特点是无需配对,设备被扫描后直接连接即可通信。