对低功耗蓝牙(BLE)的简要学习分析 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

对低功耗蓝牙(BLE)的简要学习分析

h1apwn 资讯 2020-05-24 12:20:00
575264
收藏

导语:从无线耳机到汽车音响,计算机键盘和鼠标以及其他日常生活用品,我们的日常生活中几乎每个人都会使用低功耗蓝牙(BLE)。

0x01  基础知识

从无线耳机到汽车音响,计算机键盘和鼠标以及其他日常生活用品,我们的日常生活中几乎每个人都会使用低功耗蓝牙(BLE)。

尽管该标准很受欢迎,但似乎普遍缺乏对它的工作原理以及某些术语的含义的理解,我将在本文分析一些基本概念和关键术语。

BLE在外围配置中使用无线电波在短范围内工作,这意味着一个中央设备(电话)将向外围设备(无线耳机)发送数据。

为此,设备需要连接在一起,这是通过设备在三个不同的通道上进行广播来实现的,该通道由连接设备定期扫描,BLE中有几种主要的连接类型,分别是连接,配对和绑定,它们的含义略有不同:

连接

已连接是未加密的一次性连接,这提供了没有任何安全功能的简单连接。

配对

配对是一次性连接,在配对过程中,交换包括临时安全密钥在内的安全功能,以便在两个设备之间确保数据的安全。但是,这只是临时连接,因此一旦蓝牙关闭或超出范围,该设备便可以自由连接到任何其他设备。

绑定

绑定是一种更永久的解决方案,因此一旦完成配对,设备便会存储安全密钥并将其用于以后的所有通信,这意味着对于初始配对之后的每个后续连接,不会在设备之间传输密钥。

在查看BLE时,可以使用几种不同的工具进行枚举,其中最受欢迎的工具是:

· Hciconfig –配置蓝牙接口

· Hcitool –用于扫描和发现

· Bleah –可用于枚举蓝牙设备

· Gatttool –与蓝牙设备交互

· Bettercap –与蓝牙设备交互

· Bluepy –用于直接与BLE通信的python库

要进行蓝牙攻击,只需要一个USB软件狗或带有蓝牙模块的树莓派。

枚举设备时,通常会出现一些不同的标题:

句柄:句柄是内存中存储数据的位置。

特征:特征是UUID,它在内存中与句柄引用相同的位置。

权限:这是有关每个句柄权限信息,这些主要是:

· 

· 

· 通知

· 广播

数据:这是存储在该内存地址位置的数据,可以是一条消息或一段代码。

为了展示一些蓝牙术语的实际用途,我写了一个BLE CTF题目,研究了BLE蓝牙的一些关键功能以及如何使用它们。

0x02  实战解题

题目地址:https://github.com/hackgnar/ble_ctfhttps://blog.yekki.co.uk/ble-hacking/

https://drive.google.com/open?id=1GsmSUYrEYa-dqCzcnEC4vBBolis90kh-

为了巩固之前学习过的一些BLE知识,我将通过解这道CTF题目来分析。

要运行这道CTF题目,需要将其写入SD卡,然后插入具有蓝牙模块的树莓派中。

pi启动运行,连接到raspbian上,然后检查蓝牙模块是否正在运行。

 sudo hciconfig

确认运行正常就可以扫描所有BLE设备。

 sudo hcitools lescan

找到了BSidesLDN CTF。

由此,我们有了设备的MAC地址:

 B8:27:EB:4E:8B:2F

使用bleah,可以枚举设备并查看其中的内容。

 sudo bleah -b“ B8:27:EB:4E:8B:2F” -e

我们有一些具有数据的句柄,我的理解是这些flag是“ Digit:Code”,所以我们已经有了第二个flag

 B8:27:EB:4E:8B:2F

但是第一个flag在哪里呢?

我们可以通过读取0x000c句柄来仔细检查

句柄值增加1,而当它们为十六进制时,其值升至8,然后升至f,因此,看起来没有隐藏标记1的句柄上没有间隙。

由于它具有write属性,因此让我们向其中写入一些数据,然后查看是否可以将其读回。

 gatttool -b b8:27:eb:4e:8b:2f --char-write-req -a 0x000f -n $(echo -n“ test” | xxd -ps)

编写成功,因此,如果我们写回去,那么我们就会得到flag!

如果我们使用–listenflag写入一些数据,则应该读出一些数据!

但是,事实并非如此!

没有做出任何回应,尝试更改输入类型:

 gatttool -b b8:27:eb:4e:8b:2f --char-write-req -a 0x0012 -n $(echo -n“ test” | xxd -ps)--listen

仍然没有得到回应。

多读一些关于BLE的通知,有一个CCCD,它代表客户端特征配置描述符,首先要获取通知,我们需要将此CCCD设置为要获取通知,为此,需要将正确的代码0100写入CCCD处理程序,在这种情况下为0x0013。

为此,我进入了交互式gatttools:

 gatttool -I

然后连接到设备:

 connect b8:27:eb:4e:8b:2f

连接成功后,我用0100的代码写到CCCD。

 char-write-req 0x0013 0100

在交互模式下,它只有“操作”,“处理程序”,“数据”,然后,当写入0x0012时,就会得到答案!

使用cyberchef对此进行解码,我们得到第四个flag!

查看flag5,它仅具有读权限,读到0x0016将读出已知句柄,一直到0x0017。

 gatttool -b b8:27:eb:4e:8b:2f --char-read -a 0x0017 | awk -F':''{print $ 2}'| tr -d''| xxd -r -p; printf' \ n'

flag6也只有读权限,这里我们得到Owt的读取答复,我们有了新的线索!

读0x3000

 gatttool -b b8:27:eb:4e:8b:2f --char-read -a 0x3000 | awk -F':''{print $ 2}'| tr -d''| xxd -r -p; printf' \ n'

成功了!

flag6完成了!

因此,现在我们必须找到flag1,由于处理程序中的设备上没有明显的间隙,因此无法将其存储在其中。考虑蓝牙的工作原理,在建立连接之前,设备必须自己做广播,这就是我们在一开始就在lescan上看到的,但是,除了设备的MAC地址和名称之外,还有其他数据吗?

就像扫描网络流量一样,可以在扫描时拦截流量,因此可以使用Wireshark或本例中的tcpdump。

使用蓝牙接口运行tcpdump:

 sudo tcpdump -i bluetooth1 -s 0

然后,我们运行另一个lescan,观察数据!

因此,我们有了第一个和最后一个flag,解这种CTF题目有助于巩固知识并进一步了解BLE的工作原理!

本文翻译自:https://www.pentestpartners.com/security-blog/introduction-to-bluetooth-low-energy/如若转载,请注明原文地址:
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务