😇
牛牛的安全 Odin
  • 个人介绍
  • 数据安全
  • 工控安全
    • 工控概念
  • 车联网安全合规
    • R155
    • CSMS\VTA
    • GDPR认证
  • 车联网安全
    • 漏洞订阅
    • 汽车攻击时间轴
    • 汽车信息安全研究
      • 车厂安全需求 Custom Requirement
      • 安全威胁
      • 参考文章
      • Who’s Behind the Wheel?
      • 安全研究基础
      • 智能网联汽车安全渗透指标
      • 智能网联汽车软件安全测试关键技术研究
      • 基于硬件在环的整车控制器功能安全测试技术研究
      • 智能网联汽车信息安全解决方案
      • 自动驾驶汽车的安全性-识别挑战
    • ECU逆向案例
      • 特斯拉攻击链
      • 汽车动力系统ECU固件逆向工程初探
  • 物联网安全
    • IoT 技术和协议
    • 智能设备常规测试思路总结
    • 各种调试接口(SWD、JTAG、Jlink、Ulink、STlink)的区别
    • QEMU 系统仿真
      • 如何“用 QEMU 模拟它”
      • 处理加密的路由器固件
    • 自动分析Automated Approach
    • IOT渗透测试(一)
    • 物联网安全目录
  • 固件分析案例
    • 智能门锁、手环
      • MCU固件反汇编
      • 云丁鹿客门锁中bootloader和FreeRTOS的分析
      • 云丁鹿客门锁BLE通信的分析(下)
      • 云丁鹿客门锁BLE通信的分析(中)
      • 云丁鹿客门锁BLE通信的分析(上)
      • 华为智联旗下小豚AI摄像头的完整分析(下)
      • 华为智联旗下小豚AI摄像头的完整分析(上)
      • 海康萤石智能门锁的网关分析(4)
      • 海康萤石智能门锁的网关分析(3)
      • 海康萤石智能门锁的网关分析(2)
      • 海康萤石智能门锁的网关分析(1)
      • idapython编写和调试
      • 果加智能门锁的全面分析(下)
      • 果加智能门锁的全面分析(中)
      • 果加智能门锁的全面分析(上)
      • BLE智能手环
      • 耶鲁智能门锁的简单测试(下)
      • 耶鲁智能门锁的简单测试(上)
      • 耶鲁门锁漏洞
      • 对一款BLE灯泡的分析
      • BLE协议栈与Android BLE接口简介
    • 在IoT设备中查找端口对应进程的四种方法
    • 路由器命令执行
    • 对基于Philips TriMedia CPU的网络摄像机进行逆向工程
    • 从Microsoft Band以及 Hello Sense 设备中提取自己的历史数据
    • CVE-2021-22909- 深入研究 UBIQUITI 固件更新错误
    • 复现|摄像头固件重打包
    • Dlink_DWR-932B路由器固件分析
    • 针对小米九号平衡车的无接触式攻击
    • 记一次智能印章设备的漏洞挖掘
  • APP 逆向
    • Go二进制文件逆向分析从基础到进阶——综述
    • Switch APP逆向分析
  • 传统静态代码分析
    • 静态分析案例
      • ELF恶意软件的静态分析原理和方法(上)
      • ELF恶意软件的静态分析原理和方法(下)
    • 静态代码分析工具清单
    • 企业级静态代码分析工具清单
  • 应用安全测试
    • DAST、SAST、IAST
    • IAST 工具初探
  • 芯片架构
    • ARM指令集概念
    • ARM指令集
    • 冯·诺伊曼结构
    • 指令集
    • 处理器架构、指令集和汇编语言,三者有何关系?
  • 病毒分析
    • 熊猫烧香
  • 编程知识
    • REST API 教程
  • 流量分析工具
    • 卡巴斯基开源的智能手机流量劫持工具
    • 利用 Burp Suite 劫持 Android App 的流量(二)
    • 利用 Burp Suite 劫持 Android App 的流量(一)
  • 区块链安全
    • 安全多方计算
    • Chainalysis 团队从区块链的角度分析发现 2020 年最大的 4 起勒索软件攻击实现存在关联
  • 攻击案例
    • 特斯拉Powerwall网关可能受到黑客攻击
  • 移动应用
    • Mac上使用Charles抓包
    • 手机抓包工具汇总
    • APP渗透测试流程和技巧大全
    • 加壳和脱壳
    • 浅谈 Android Dex 文件
    • 移动应用漏洞分析样例分享
    • 移动应用常见漏洞分析
    • 移动应用漏洞分析工具介绍
    • 渗透测试流程详解 及 移动APP安全测试要点
    • Frida Android hook
  • 安全设计
    • 【软件安全设计】安全开发生命周期(SDL)
Powered by GitBook
On this page
  • BLE协议
  • Android的BLE接口
  • 小结
  1. 固件分析案例
  2. 智能门锁、手环

BLE协议栈与Android BLE接口简介

Previous对一款BLE灯泡的分析Next在IoT设备中查找端口对应进程的四种方法

Last updated 3 years ago

BLE协议

我们通常所说的蓝牙,即Bluetooth,有两种形式:传统蓝牙BR(Basic Rate)和低功耗蓝牙BLE(Bluetooth Low Energy)。前者的典型使用场景是蓝牙耳机、蓝牙音箱等,而后者的典型使用场景是各种IoT设备,如蓝牙手环等。

蓝牙的数据传输模型如下图2-1所示,分为Physical层、Logical层和L2CAP层:

为了帮助理解,可以类比OSI七层网络协议:数据发送时,高层将数据发送给L2CAP层,并逐层向下流动;数据接收时,设备从Physical层获得数据,并逐层向上流动。对这三层数据传输模型有一些简单的认知,就可以极大的加快我们分析和研究的速度。

首先,来关注下L2CAP层。在这一层中,我们需要关注的内容比较少,高层应用中出现的需要发送的BLE数据和需要接收的BLE数据都会直接出现在这一层之中,所以,如果我们能够抓到这一层的通信数据,则意味着我们可以直接抓到高层应用的通信数据,虽然这些数据可能是在应用层中被加密了,但至少这些数据还没有被BLE协议栈加密。这在某种程度上方便了我们的分析。通过wireshark分析L2CAP层的通信数据如下图:

上图中,ATT协议即为运行于L2CAP层之上的通信协议,wireshark可以直接分析出ATT协议中的通信数据。在本专题的后续文章中,我们可以看到抓取未加密的L2CAP层数据用于辅助分析的案例。

然后,我们再来关注下Physical层。Physical层定义了3个广播信道和37个数据通信信道。两个BLE设备进行连接时,会随机挑选一个广播信道进行广播,连接建立之后,会在37个通信信道上进行跳频通信。下图展示了某一次通信的流程:

上图中,BLE通信在0x27信道进行广播,等待BLE双方成功建立连接之后,会在0x5----0xA----0xF----0x14等信道,按照一定规律进行跳频通信。

最后,我们再来关注下Logical层。该层中主要完成BLE通信过程中的各种逻辑控制,这么说并不准确,但可以帮助我们理解问题。大多数使用场景中,一次BLE通信过程存在master和slave两方,其中master是主动扫描并发起连接的一方,而slave是不断发送广播并等待连接的一方。在一次通信中,master和slave的状态变化如下图所示:

其中,scanner和advertiser分别表示master和slave的扫描状态和广播状态。建立连接之后,开始跳频通信,并成为最终的master和slave。

Android的BLE接口

绝大部分IoT设备都需要与Android/IOS手机通信,而BLE显然是一种很常见的通信方式。为此,我们也有必要了解一下Android设备中,关于BLE通信相关的各种API。

我们先回忆一下TCP的socket通信。在socket通信中,服务端程序运行于某一IP地址上,并持续监听某一端口(port)。客户端程序选择服务端的IP和port,发起socket连接,经过三次TCP握手之后完成socket连接的建立,此后使用该socket进行通信。蓝牙BLE通信也是如此,首先我们需要扫描周围的蓝牙BLE设备,并选择某个BLE设备。此时,需要用到的API如下:

扫描并选择完毕之后,我们就需要与之通信。在TCP通信中,发送数据和接收数据常用的函数为:send和recv。而在BLE通信中,我们使用到的API如下表所示:

上表中,读者可能对characteristic有些陌生,我们在这里对characteristic有一个简短的说明。每一个BLE设备,都有一个对应的profile,用于对这个设备进行描述。一个profile中包含多个service,这些service就是该设备提供的各种服务。而在一个service中,会有多个characteristic,设备提供的service就是靠这些characteristic来完成的。用一张图片来表示上述文字,如下:

上图中,右侧图片为一个BLE设备的实例,可以看到在图片中有4个service,前两个为Unknown service,后两个分别是Battery Service(电池服务)和Current Time Service(当前时间服务)。而在第二个Unknown service中,有一个Unknown Characteristic。值得一提的是,Service和Characteristic各自拥有一个UUID用于标识,在BluetoothGatt类的相关函数中,就是用这些UUID找到所需的service和characteristic,这就相当于TCP通信中的端口(port)。

小结

这个系列的第一篇到此就要结束了,在本篇中,我们简要介绍了一下BLE协议栈以及Android BLE的常用API。

图2-1 蓝牙协议的数据传输模型
图2-2 wireshark分析L2CAP层通信
图2-3 某一次BLE通信
图2-4 master和slave的状态变化
表3-1 Andorid设备BluetoothLeScanner类中的常用接口
表3-2 Andorid设备BluetoothGatt类中的常用接口
图3-1 BLE profile实例