蓝牙是属于典中典的一个技术了,不论是如今的智能家居,还是穿戴设备甚至是车联网、iot都离不开蓝牙,当然对于实战来说,蓝牙局限性较大,毕竟蓝牙广播的范围就那么大,所以针对这块来说,例如游戏手柄,蓝牙音响这类近距离常用设备就有了比较高的研究价值。ps:不得不说,wireshark是真神。

蓝牙前置知识

当然,如果从头开始捋顺的话,关于蓝牙方面的知识还是特别多的,尤其整个结构的含量不亚于高等数学,所以会用就足够了,在这里就先简单介绍一些基础知识。

这里我参考借鉴了该文章,我认为他的对于广播方式和连接方式讲解的还是通俗易懂的:
我们只需要理解一件事情,通常蓝牙设备在连接之前都会开启广播,那么我们的蓝牙数据分别会在37/38/39这三个信道兼来回窜梭,具体在哪我也不知道,但是这三个信道是可以被我们的蓝牙设备所发现的,也就是我们俗称的发现设备。

Android13蓝牙抓包 安卓 蓝牙抓包_linux

windows下的发现蓝牙设备

那么,当设备进行连接后,会进入入网状态,此时也就进入了一对一的连接状态,关闭广播模式,与连接者进行单对单的数据传输。

那么熟悉了上述流程就可以开始我们的正题了。

windows正确抓包姿势

前置条件:wireshark安装USBpcap的拓展插件支持。

对于windows来说,是最适合做快速调试与分析的设备了,对于蓝牙协议的抓包,可能很多人会陷入一个误区,那就是认为wireshark在捕获的时候应该选择蓝牙网络连接。

Android13蓝牙抓包 安卓 蓝牙抓包_Android13蓝牙抓包_02

然而实际上这是错误的,这是假的,是特技,如果你尝试连接好了你的蓝牙设备,你会发现什么也抓不到。

而真正重点在于USBpcap的拓展选项中(一定要先安装拓展,否则没有这个选项),他会捕获一切外接设备,例如鼠标,键盘,蓝牙耳机,等一系列的数据包。

Android13蓝牙抓包 安卓 蓝牙抓包_单片机_03

可能会些许乱,但是无伤大雅,可以善用过滤来获得我们要想的数据。

Android13蓝牙抓包 安卓 蓝牙抓包_Android13蓝牙抓包_04

虚拟机下linux进行蓝牙抓包正确姿势

该说不说,这确实是一个最大的坑点,全网也没有一篇文章来正确的指正这个事情,甚至vmware官方也自认为自己的办法是好用的,这里我要进行一个diss。

如果你的linux是装在你自己系统上的,那么直接装wireshark就可以,与windows相差无几,只不过后面需要注意一下某个内容。

虚假的姿势

如果你在网络上搜索“虚拟机开启蓝牙”你大概率会搜到这样的结果:

Android13蓝牙抓包 安卓 蓝牙抓包_嵌入式硬件_05

让你去打开,会显示这样:

Android13蓝牙抓包 安卓 蓝牙抓包_嵌入式硬件_06

与虚拟机共享蓝牙设备,这是错误的,这会发生什么呢? 让我们来看一看:

我们按照常规的流程,首先进入虚拟机,

sudo service bluetooth start

Android13蓝牙抓包 安卓 蓝牙抓包_抓包_07

已打开我们的蓝牙设备,这个时候你会发现可视化页面你是怎么也搜不到附近的蓝牙设备的。

并且,当你想使用bluetoothctl 进行scan on的时候,也是一样搜不到。

Android13蓝牙抓包 安卓 蓝牙抓包_Android13蓝牙抓包_08

当你想使用hcitool scan时,他甚至就是什么也没有。

Android13蓝牙抓包 安卓 蓝牙抓包_单片机_09

真正的姿势

这个时候就需要重新思考一下了。总所周知,vmware是万物皆可usb设备,你的摄像头,你的鼠标,甚至你笔记本的指纹都能被当成usb设备插到虚拟机上,

那么这个时候我要说什么就不言而喻了。

第一件事,关闭虚拟机,打开设置,把这个功能先取消;

Android13蓝牙抓包 安卓 蓝牙抓包_嵌入式硬件_10

第二件事,重新打开虚拟机,你就可以在右下角看到蓝牙图标;

Android13蓝牙抓包 安卓 蓝牙抓包_单片机_11

将其连接至虚拟机,重新启动蓝牙,service bluetooth start 。

Android13蓝牙抓包 安卓 蓝牙抓包_嵌入式硬件_12

这下可以看到,不论是常规蓝牙设备,还是一些无名的空气广播设备都可以被我们的设备kali所捕获到,当然了,连接也是没有任何问题的

Android13蓝牙抓包 安卓 蓝牙抓包_嵌入式硬件_13

这个时候我们可以启动一下wireshark看看,与windows不同,linux下的wireshark捕获是在单独的bluetooth中,这点是比较好的,不会出现大量的usb流量来干扰正常捕获。

Android13蓝牙抓包 安卓 蓝牙抓包_单片机_14

简单进行一个捕获,也是没问题的。

Android13蓝牙抓包 安卓 蓝牙抓包_Android13蓝牙抓包_15

高阶玩法

通过nrf mesh对其他蓝牙流量进行捕获

Android13蓝牙抓包 安卓 蓝牙抓包_linux_16

直接对全部空气中的蓝牙信道广播进行捕获,针对单一信道进行跟踪,当然后续的加密包是加密的,需要对mesh进行解密才可以。

后续的一些内容单独写篇文章,这里不再赘述。

小结

工具是好的,但是用错了方式可能会绕更多的弯路,网上教程多半不准,仍需自己摸索。