主要的两个蓝牙无线电版本是:
蓝牙基本速率/增强数据速率 (BR/EDR),也称为蓝牙经典
蓝牙低功耗 (BLE),也称为蓝牙智能,是2010年作为蓝牙4.0的一部分引入的轻量级子集
Bluetooth Classic 和 BLE 使用不兼容的不同堆栈。但是,它们可以共存于共享同一天线的一台设备中,因为它们都使用 2.4 GHz ISM 频段的相同无线电频率,并应用跳频扩频 (FHSS) 机制来避免干扰。事实上,在许多情况下,它们是相辅相成的;这就是为什么现在大多数设备都是双模式的原因。如下图所示,Bluetooth Classic 单模设备预计将在未来消失,而 BLE 单模设备则因 IoT 行业的扩张而增长。
值得注意的是,Bluetooth Classic 并不是 BLE 的过时版本;它们是用于不同应用的不同技术。Bluetooth Classic 主要用于需要点对点连续流传输的情况,例如无线音频流传输(无线扬声器、耳机、车载娱乐系统)或文件传输。另一方面,BLE 专为极低功耗操作而设计,支持多种通信拓扑,从点对点扩展到广播和网状网络。BLE 应用的示例包括监控传感器、信标和高精度室内定位服务。
这篇文章的重点是 BLE,特别是 4.2 版,该版本将在 2025 年 2 月之前有效。需要注意的是,蓝牙规范的第 5 版引入了一些本文未概述的新功能(例如,扩展广告,网状网络,或测向)。但是,第 5 版设备在市场上还不是很普遍。
是什么让它“低能耗”?
要点是 BLE 尽可能让无线电保持关闭状态。这是通过以下方式实现的:
只有三个广告频道,而不是经典规格的16到32个。这减少了待机时间。
非常快速的连接建立(从非连接状态到连接状态)大约需要三毫秒,这意味着使用无线电的时间更少。Bluetooth Classic连接最多可能需要100 毫秒。
低峰值功率,15mA,有助于节省电池。Bluetooth Classic 峰值功率为 25mA,这也很低,但对于基于纽扣电池的应用来说还不够。
蓝牙堆栈:
应用层 | 应用 | |
主持人 | 通用访问配置文件 (GAP) | |
通用属性配置文件 (GATT) | ||
属性协议 (ATT) | 保安经理 | |
逻辑链路控制和适配协议 (L2CAP) | ||
控制器 | 链路层 | 直接测试模式 |
物理层 |
让我们简要定义每一层是如何工作的:
应用层通常是最重要数据所在的位置。在这一层之下,其他人负责传输或转换数据。
GAP 定义了 BLE 连接的两个主要方面:
- 可见性:设备如何相互发现,包括扫描和广告
- 交互:设备如何相互交互,包括如何管理连接(角色、模式、安全参数等)
BLE 中主要有两种连接模式:Advertising(单向发送数据,不建立连接)和Connected(双向发送数据)。
只有在 GAP 完全设置可见性和交互方面之后,GATT 才会定义设备如何相互交换信息。为此,GATT 使用 ATT 作为底层协议来定义服务器如何向客户端公开其数据以及数据的结构。数据被构造为属性,可以是多种类型(命令、请求、响应、通知、指示或确认)中的一种,并使用 16 位唯一 ID(也称为“句柄”)存储在表中入口。因此,属性的句柄可以从 0x0001 到 0xFFFF。根据蓝牙规范,保留值为 0x0000 的属性句柄,不得使用。
如前所述,GATT 定义了如何与属性(必须发送的数据)进行交互,为此,它使用以下概念:
- 服务:一组一个或多个属性
- 特性:服务端要暴露给客户端的一段数据
gatttool是一个有用的工具,可以用来处理这些属性。
BLE 中的安全管理器负责配对、加密和签名等安全程序。所有连接都从“无安全”模式(不配对)开始,当它们想要以安全的方式交换数据时,它们需要配对。配对过程涉及交换临时密钥 (TK) 以生成用于加密连接链路的短期密钥 (STK)。整个通信的安全性在很大程度上取决于这种传统知识是如何交换的。有四种关联模型(针对 BLE 4.2),选择其中一种取决于设备的输入/输出能力(以明文形式交换的信息)。我们将它们从最不安全到最安全进行了排序:
关联模型 (1-3) 被称为LE Legacy Pairing ,由于缺乏安全性,应该避免使用。
- Just works :此模型适用于没有显示屏的设备,例如耳机或扬声器(因此,此方法可能最适用于 BLE <4.2 设备)。TK 设置为零,因此可以通过轻松计算 STK 进行窃听和中间人 (MiTM) 攻击。
- 密码:此模型适用于通常具有显示屏的设备(尽管有一些例外)。一台设备显示一个随机生成的 6 位数字 TK,另一台设备请求它。如果设备没有显示,用户需要在两者中输入相同的 TK。此方法提供了一些针对窃听和 MITM 攻击的保护;但是,由于 TK 很容易被暴力破解,因此整体安全性很差。
- 带外 (OOB) :此模型适用于具有替代通信技术(例如 NFC)的设备,可用于交换加密信息。如果备用通道是安全的,此方法可提供良好的安全保护。在这种情况下,TK 可能不容易被暴力破解,因为不需要人工交互,因此此方法生成的 TK 可能更长(最多 128 位)且更复杂。
关联模型 (4) 是最安全的,被称为LE 安全连接(在 BLE 4.2 中引入)。该模型的主要区别在于,这些关联模型不使用 TK 和 STK,而是使用长期密钥 (LTK) 来加密连接链接,并使用公钥密码学(特别是椭圆曲线 Diffie Hellman 算法)来交换LTK。此改进可防止窃听攻击,但不能防止 MitM 攻击。
数值比较:该模型提供了最好的安全性,而不会过多地影响用户体验。因此,在设计 BLE 设备或应用程序时推荐使用它。使用此模型时,两个设备交换其公共 ECDH 密钥,并为每个对等方独立生成一个随机的 128 位随机数,以提供针对重放攻击的保护。然后,交换这些随机数(使用 ECDH 密钥,以避免窃听攻击)并使用 确认值生成功能进行检查. 最后,两个设备都使用交换的公钥和随机数独立计算出一个六位数,并在显示器上显示出来。此时,用户需要检查它们并确认(用“是”或“否”)两个数字匹配。匹配数字意味着没有执行 MitM 攻击,因此可以安全地加密连接链接。如果数字不匹配且用户选择“否”,则配对过程失败,从而保护用户。
总之,上面列出的所有关联模型的主要和困难目标是在没有建立连接的两个设备之间安全地交换密钥。最大的优势是通常这两种设备之间都有一个人。
接下来是逻辑链路控制和适配协议 (L2CAP) 层,负责多路复用、分段和重组、逻辑连接建立和流量控制。它相当于TCP/IP栈中的IP。
最后,我们有链路层,它负责扫描、通告和创建连接,并直接与将位转换为 RF 的物理层交互。这两层是由蓝牙芯片中的硬件实现的。所有其他的都由设备中的软件实现。
渗透测试 BLE 连接
安全性如何?BLE只是一种技术;因此,两个设备之间的 BLE 安全责任取决于制造商应用的实施。
当可以完全控制至少一台设备时:
渗透测试 BLE 设备的最简单方法是使用主机控制器接口 (HCI)。如前所述,Host层由软件实现,Controller层由硬件实现。蓝牙 HCI 指定了它们之间的所有交互,并且可以记录这些交互。不需要额外的硬件。
记录 HCI 事件和命令非常容易,尤其是在 Android、Linux 和 OS X 系统上:
- Android:不需要 root 或其他应用程序。“开发者选项”下已经有一个名为“启用蓝牙 HCI 监听日志”的选项。启用此选项后,智能手机将开始将所有通过 HCI 的流量记录到一个文件中。
- Linux:“btmon”工具用于将 HCI 事件和命令记录到文件中。
- OS X:XCode 的附加工具,称为“PacketLogger”,用于记录此流量。
日志记录应用程序生成 BTsnoop 格式的文件,这些文件不是纯文本。但是,它们可以很容易地加载到 Wireshark 中。以下 Wireshark 过滤器可用于分析 BLE 流量:
- btatt:显示ATT数据包,内容是应用程序发送和接收的数据。
- bthci_cmd.le_long_term_key:显示 BLE 加密的长期密钥。在捕获的流量中找不到这些字节意味着连接未经过 BLE 加密(但可以在应用层加密)。
对于经典蓝牙:
- bthci_cmd.link_key:显示用于加密蓝牙连接的链接密钥。在捕获的流量中找不到这些字节意味着连接未经过 BLE 加密(但可以在应用层加密)。
日志记录总是比嗅探更容易,应尽可能使用。
当无法完全控制任何设备时:
例如,当想要分析无线游戏控制器与其游戏控制台之间的 BLE 流量时。通常,在这种情况下我们有三种选择:
- 将游戏控制器与另一台您可以完全控制并记录流量的设备配对(并非总是可行)。
- 在游戏控制台中获得完全控制并记录流量(并非总是可能)。
- 无需完全控制任何设备即可嗅探通信。
最后一个选项通常需要额外的硬件,例如 BBC MicroBit、BlueFruit 或 Ubertooth。然而,这些设备并不可靠,它们会丢失数据包,即使连接已被捕获。
此外,这些设备中的每一个都只能在一个 BLE 通道上收听。由于 BLE 频谱具有三个广告通道,因此使用一台设备捕获连接的概率为 33.33%。使用两个设备,则为 66.66%。使用三台设备(每个广告频道一台),概率为 100%。
通常用于嗅探的软件是BTLE Jack,它自动解决了 BLE 中应用的跳频机制带来的所有困难。
对于更专业的任务,Ellisys 公司销售用于蓝牙嗅探的非常好的和可靠的设备,例如 Bluetooth Explorer 或 Bluetooth Vanguard。但是,价格比 MicroBit 或 BlueFruit 高得多。
总之,对于大多数笔测试项目,使用主机控制器接口记录流量就足够了。如果顾问无法完全控制任何设备,一个 BBC MicroBit(或类似的嗅探工具)就足够了。但是,如果设备丢失数据包,他们将需要重复该过程。
中间人攻击
当日志记录或嗅探还不够并且需要修改流量时,我们通常使用两种攻击向量:
- 在完全受控的设备上挂钩函数(例如,使用Frida )。
- 在网络级别执行中间人 (MitM) 攻击。
如今,一些供应商对他们的应用程序代码进行了严重的混淆,使得逆向工程师很难理解。此外,渗透测试几乎总是有时间限制的,因此当代码被混淆时,第一个选项通常变得不可行。
然而,仅使用一台笔记本电脑和两个 BLE 加密狗,就可以执行 MitM 攻击,而无需对固件或移动应用程序进行任何类型的分析。因此,代码混淆不能防止第二种攻击向量。
gattacker 和BTLE Juice等工具已经处理了所有 BLE 协议阶段和功能,以允许 MitM 和中继攻击。这些工具非常灵活,非常适合发现应用程序或 BLE 协议本身的新缺陷。
例如,攻击者可以使用工具 gattacker 在配对阶段对两个设备之间的连接进行中间人攻击,并修改流量以诱使设备进入更不安全的关联模型。
结论
强烈建议开始研究 BLE 和物联网设备。许多物联网供应商仍在为其设备应用非常薄弱的安全性(如果有的话),这相当于 90 年代计算机的安全性。