本文讲的是
针对蓝牙4.0 BLE通讯过程的逆向和攻击,
从6个月前,我就开始针对BLE设备进行学习和研究,其中接触到了一些关于BLE逆向的博客和文章,但是相关内容都没有给出很好的方案。因此通过我的这篇文章,你将会很好地了解如何进行BLE 4.0通讯的逆向工程并利用它。
在开始之前,我们首先需要了解蓝牙通信,通常情况下有2种类型的蓝牙通信:
经典蓝牙,即蓝牙2.0
低功耗蓝牙,即BLE 4.0
实际上,经典的蓝牙规范从蓝牙1.0和1.0B开始,这些规范由蓝牙技术联盟(Bluetooth SIG)来进行规范和处理,而所有蓝牙制造商和服务公司都是SIG的成员。
蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本;较3.0版本更省电、成本低、3毫秒低延迟、超长有效连接距离、AES-128加密等;通常用在蓝牙耳机、蓝牙音箱等设备上。
蓝牙技术联盟(Bluetooth SIG)2010年7月7日宣布,正式采纳蓝牙4.0核心规范(Bluetooth Core Specification Version 4.0 ),并启动对应的认证计划。会员厂商可以提交其产品进行测试,通过后将获得蓝牙4.0标准认证。 该技术拥有极低的运行和待机功耗,使用一粒纽扣电池甚至可连续工作数年之久。
BLE 4.0设备通常在两种情况下被使用:
外设: – 主要用在低功耗和受限制的设备上
中枢设备: – 通常用在比较强大的设备上,如手机,笔记本电脑等
Bluetooth网络的启动网络在蓝牙术语中被称为Piconet,Piconet 指用蓝牙(Blue tooth)技术把小范围(10-100m)内装有蓝牙单元(即在支持蓝牙技术的各种电器设备中嵌入的蓝牙模块)的各种电器组成的微型网络,俗称微微网。一个微微网由2-8个蓝牙单元组成,即可以组成以一个为主、其他2-7个为副的电器组成的微微网。这些电器可以是PC机、打印机、传真机、数码相机、移动电话、笔记本电脑等等。多个微微网之间还可以互联形成散射网(Scatternet),从而方便快捷地实现各类设备之间随时随地的通信。
GAP和GATT则主要用于蓝牙设备的可被发现以及扫描工作。
GAP代表通用访问配置文件,它控制连接和被发现的过程。GAP能够确保您的设备对所有人都可见。
一旦建立了外围设备和中央设备之间的连接,蓝牙设备通常也将停止被发现,您通常将无法再发送被发现过程的数据包,这时您就需要使用GATT的服务和特性在两个方向进行通信。
GATT代表通用属性配置文件,它定义了客户端和服务器之间的通信语义。当连接建立时,它起着一个作用,这一作用使用了一个概念,称为简档,服务和特征。该配置文件是使用Bluetooth SIG或外围设计器编译的预定义服务集合。服务可能包含一个或多个特性,它用于分解不同实体中的数据,并以16位或128位UUID标识。特性封装单个数据点,并在16位或128位UUID中标识。
所以通过以上的内容我们大致了解了BLE 4.0,现在我们有一个Mansaa蓝牙LED灯泡,它支持BLE 4.0通信协议,所以下面我会以它为例进行讲解:
首先在这里我使用了Kali 2.0,并配有默认的最新Bluez实用程序与BLE设备进行交互。同时我还使用了CSR 4.0 BLE适配器来交互和利用BLE设备。一旦你插入了CSR适配器,它会在hci1上侦听你是否在虚拟机上,这里我是在Kali虚拟机上。您可以通过命令“hciconfig”来标识接口。
在重启阶段,我使用hcitool来识别可用的BLE设备的蓝牙地址。
$ hcitool - I hci1 lescan
lescan用于扫描启用BLE的设备。
要了解有关特定蓝牙地址的更多信息,请使用以下命令。
$ hcitool –I hci1 leinfo 8C:8B:83:52:FF:B8
leinfo用于收集有关BLE设备的更多信息,如制造商信息,这里看到的德州仪器是Mansaa BLE LED设备中使用的BLE芯片的制造商。
现在我们再来获取有关Mansaa设备提供的服务和特性的信息,从而能够从Bluez使用gatttool实用程序的服务和特性信息。
$ gatttool –I hci1 –b 8C:8B:83:52:FF:B8 - - primary
在上面的截图中我们可以看到,00001800-0000-1000-8000-00805f9b34fb是主服务的UUID。您可以看到1800,1801,180a是由SIG指定的特定服务的标识号,您可以从以下链接获取有关1800的更多信息。
https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.service.generic_access.xml
而对于其他的一样也是如此,1800用于通用信息,如设备名称,外观等。
为了识别Mansaa设备的特点,我再次使用gatttool和命令如下:
$ gatttool –I hci1 –b 8C:8B:83:52:FF:B8 - - characteristics
在以上屏幕截图中,您可以看到2a00,2a01,2a02和2a03是由SIG指定的特征UUID的标识号。您可以从以下链接获取有关2a00的信息。
https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.gap.device_name.xml
现在是时候进行BLE通信的逆向工程了,我启用了HCI监听记录来记录中央(这里是我们的Android Mobile)和外围设备(Mansaa LED灯泡)之间的所有交互。以下是从Android Mobile启用和检索日志文件的链接:
http://www.fte.com/WebHelp/BPA600/Content/Documentation/WhitePapers/BPA600/Encryption/GettingAndroidLinkKey/RetrievingHCIlog.htm
在通信过程中,我在Android手机上启动Mansaa应用程序,并开启和关闭Mansaa BLE LED灯泡,并再次尝试更改灯泡的颜色,因此所有这些交互记录在btsnoop日志文件中。
从名为btsnoop_hci.log的手机中检索日志文件,并使用Wireshark打开它,并应用过滤器“btl2cap.cid == 0x0004”,并用句柄分析写入命令。
以上截图中的write命令的句柄0x002b用于写入值为d0fffffff的命令。这意味着Mansaa应用程序正在使用句柄0x002b编写一些值,因此将利用该值和句柄。
所以在分析每一个价值时,都会了解每个价值的使用。一旦我使用了gatttool,那么就要将这些值发送给Mansaa Bulb。
$ gatttool –I hci1 –b 8C:8B:83:52:FF:B8 - -char-write-req –a 0x002b –n d00000000
BOOM,Mansaa BLE灯泡熄灭了。
这意味着通过分析命令可知,d00000000被用于关闭灯泡了,-char-write-req用于写入任何请求, – 用于给出句柄和值,即d00000000与-n开关。
进一步的进行操作后,我了解了其他值的用法:
开灯
绿色
粉红色
好了,以上就是我的整个过程了,希望能够让您有所收获。
原文发布时间为:2017年7月10日
本文作者:Change
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。