BLE服务
- BLE将自身服务归于多个service中,每个service中包括若干个characteristics;service和characteristic均使用16位UUID标识;
- characteristic是存储数据的位置,characteristic中可以包括descriptors;descriptors有两类UUID 0x2901和0x2902,前者可以保存数据,后者决定当characteristic改变时是否广播(回调通知)
- 获取设备实现的所有characteristics UUID没有限制,包括其相关属性(读、写、notify)
连接
- 设备周期性广播、APP响应广播,然后双方自动进入连接状态,接着双方都可以要求加密连接和更新连接参数
- ble4.2之前:配对过程使用明文传输交换temp key(TK),然后使用TK加密通信协商STK,STK用于加密后续通信。(BLE链路层安全特性)
- ble4.2(LE Secure Connections)使用椭圆曲线ECDH(有限域的离散对数问题)用来安全的交换LTK,LTK用于加密后续通信
- 配对过程交换TK:有静态pin code(000000) 、输入随机pin code和通过带外数据(NFC)三种方式。前两种方式均不能对抗嗅探攻击(但攻击时间窗口很小)
- 有共享设备等业务场景,使用链路层的加密不够方便(即不存在配对过程),一般都会基于characteristic实现自定义加密通信,每次广播的数据都需要主动加密,否则就是裸奔
- 因为BLE设备会产生很多关联方,所以LTK会包括Master Identification (EDIV, Rand) 作为标识符
- 配对过程生成STK,绑定过程生成LTK。配对绑定是传输层机制(类似https协议),ble传输通道默认是加密的,应用层也可以增加额外加密
-
协议
- ATT(属性协议) MTU默认23bytes,可以观察到分段写数据
- GATT(通用属性协议)在蓝牙协议栈中相当于TCP/IP协议栈中的http协议
其他
- 重放攻击:发送的无线信号可以全部嗅探到,也就可以重放,需要ble设备带有计数器功能
- 中间人攻击:未连接时,BLE设备会广播设备信息,但频率不会太高;攻击者可以先持续与设备连接(连接状态中不会再发广播),然后发出同样的广播,误导APP进行连接
- 随机化MAC地址:避免被追踪,仅配对过的设备可以解析出MAC地址,需配对设备交换过Identity Resolving Key (IRK)
- 白名单:可以设置MAC白名单
- 广播DoS:中间人广播盖过设备广播,APP连接到中间人服务。加密和签名防止中间人解密广播数据
DOS攻击之后,用户可能手动发起配对,攻击者此时可以进行嗅探攻击 - BLE设备最好一机一密
- bluez修改ble mac
android ble mac: adb shell settings get secure bluetooth_address
bluez源码 ./configure --enable-experimental; make之后bdaddr 在tools/目录
sudo bdaddr 4C:49:E3:03:10:5E; 需要重新插入蓝牙设备
android接口
BluetoothLeScanner.startScan()方法与传统BluetoothAdapter.startLeScan()方法
工具
- bluez工具https://github.com/pcborenstein/bluezDoc/wiki/hcitool-and-gatttool-example
- nRF-Connect android工具 https://github.com/NordicSemiconductor/Android-nRF-Connect/releases
- gattack工具 https://gattack.io/ https://github.com/securing/docs/raw/master/whitepaper.pdf
- ble sniffer: ubertooth(开源)/nRF51822 Nordic BLE
参考
- BLE学习 Getting_Started_with_Bluetooth_Low_Energy 链接: https://pan.baidu.com/s/1tTw-A2jfdAmcRm8RIPm4rA 提取码: pyra
- BLE security https://www.digikey.com/eewiki/display/Wireless/A+Basic+Introduction+to+BLE+Security
- iot安全 https://sec.xiaomi.com/article/59
- iot安全 https://sec.xiaomi.com/article/58