使用Ubertooth监听蓝牙通信 – 作者:MactavishMeng

作为没有使用过Ubertooth的小白,尝试从零开始搭建Ubertooth的环境,相关配置、依赖,来进行蓝牙数据的监听,配合Wireshark,进行蓝牙数据监听和分析。

环境说明

VMWare版本:14.0.0 build-6661328

操作系统:Ubuntu 14.04.5 LTS

Ubertooth软件版本:ubertooth 2018-12-R1

Libbtbb版本:libbtbb 2018-12-R1

Wireshark版本: Version 2.6.6 (Git v2.6.6 packaged as 2.6.6-1~ubuntu14.04.0)

本次编译安装的目的,是能够借助Wireshark去查看和分析监听到的蓝牙数据包,因此需要2个部分:Ubertooth(应用程序本体)和libbtbb(蓝牙基带库,源码中带有Wireshark插件)

实际上还有一部分需要关注,附带在Ubertooth下载的源码里,就是硬件对应的固件。由于固件是和软件配套的,因此在编译软件的时候需要给硬件刷入对应的固件,否则会报api不匹配的问题(下文中会说到)

软件编译

软件的编译部分其实很简单,使用Ubuntu系统的话官方git上是有相关说明的,而且很详细,可以傻瓜的照做。下面就简单说明一下。

首先先给出官方WiKi (Build-Guide)的链接,如果阅读能力强的可以直接看官方说明,下面的描述都以Ubuntu为例。

首先安装编译环境,如cmake, gcc等,一条命令:

sudo apt-get install cmake libusb-1.0-0-dev make gcc g++ libbluetooth-dev \
pkg-config libpcap-dev python-numpy python-pyside python-qt4

libbtbb(蓝牙基带库)

接下来安装蓝牙基带库(Bluetooth Baseband Library),下载源码并解压,这里也是借用了官方给出的命令,正好我安装的也是2018-12-R1的版本。

wget https://github.com/greatscottgadgets/libbtbb/archive/2018-12-R1.tar.gz -O libbtbb-2018-12-R1.tar.gz
tar -xf libbtbb-2018-12-R1.tar.gz

如果不用wget命令的话,也可以直接在Releases页面上下载(注意版本和文件名哦),然后手动解压~~

接下来按照官方的说明,cd命令进入解压好的文件夹,使用mkdir命令新建一个名为build的文件夹,用于编译源码。之后就是简单粗暴的make过程。不过注意,最后的make install一定要用sudo去跑(长期用Kali已经忘记还有”以管理员身份运行“这回事了……)完整的命令如下:

cd libbtbb-2018-12-R1
mkdir build
cd build
cmake ..
make
sudo make install

如果没有报错,那就说明安装成功了。下面放出几张我build过程的截图:

2019-06-17_135840.png

2019-06-17_135948.png

2019-06-17_140050.png

根据官方说明,首次安装的时候可能会报错,或者出现找不到lib库的情况,此时则需要在命令行中执行

sudo ldconfig

即可,虽然不知道为什么,而且我安装的时候并未出现任何报错的提示。

Ubertooth工具软件

Ubertooth工具软件就是指在命令行中输入ubertooth-xxx这样的命令能执行的那个玩意。编译的时候和libbtbb类似,用wget命令或者直接在Release页面进行下载,并解压。官方的命令如下:

wget https://github.com/greatscottgadgets/ubertooth/releases/download/2018-12-R1/ubertooth-2018-12-R1.tar.xz
tar xf ubertooth-2018-12-R1.tar.xz

后面的步骤也是一样的,新建build文件夹,在这个文件夹里cmake – make – make install完成安装:

cd ubertooth-2018-12-R1/host
mkdir build
cd build
cmake ..
make
sudo make install

需要注意的是,这里是在host文件夹下进行编译,解压出的源码中还有很多其他的文件夹,注意不要弄错了

同样的,这里官方也给了提示,如果首次编译或报找不到lib库的问题,请在命令行中输入:

sudo ldconfig

至此,基带和工具全部都安装完成了,这时候插上Ubertooth,将其分配给虚拟机,并在命令行中输入ubertooth-util -v即可查看到当前你的Ubertooth的固件版本。

2019-06-17_142417.png

这里是我已经刷过了固件,所以显示的版本是2018-12-R1(原来没刷固件之前忘记截图了),能看到固件,说明btbb库和Ubertooth工具都安装成功了。

Wireshark插件

根据官方libbtbb github的 issus 50,作者对Wireshark插件的问题进行了回答:

  • 对于Wireshark 2.0之前的版本,需要编译plugins-legacy中的插件
  • 对于Wireshark 2.0 ~ 2.2 的版本,需要编译plugins中的插件
  • 对于Wireshark 2.2+的版本,无需编译任何插件即可,因为Wireshark官方已经自带了相关插件。

因此插件的编译步骤可以直接略过。

固件更新

在使用之前,需要对Ubertooth硬件中的固件进行更新。上面Ubertooth tools部分提到了ubertooth-util -v命令可以查看到当前刷入的固件版本,同时有一个API 版本的问题,Ubertooth要求固件的API版本与Ubertooth tools的版本一致,否则不能使用。

在Ubertooth tools的源码中是包含了固件的,固件是.dfu格式的文件。源码中有可以直接用的固件,在ubertooth-2018-12-R1/ubertooth-one-firmware-bin/bluetooth_rxtx.dfu。更新固件的命令是:

ubertooth-dfu -d bluetooth_rxtx.dfu -r

我在虚拟机中执行这一步的时候报错了,每次执行的时候都会尝试切换到DFU模式,然后USB显示无法识别,同时硬件上面的四个由深到浅的红色指示灯一直循环跑马灯。不知道这里是我虚拟机有问题,还是我的USB口有问题。

2019-06-17_160303.png

尝试了很久都不成功之后,找了一台macbook,安装ubertooth tool,执行上面的命令,成功刷入。

这里官方给出了一个troubleshooting,如果有报错libUSB Error: Command Error: (-1),或者硬件上面四个灯跑马灯的话,需要重新编译固件,就要用到ubertooth-2018-12-R1/firmware文件夹的内容了,编译命令如下:

cd ubertooth-2018-12-R1/firmware
make clean all && make
ubertooth-dfu -r -d bluetooth_rxtx/bluetooth_rxtx.dfu

在之前一直提示Unable to find Ubertooth错误的时候,我也尝试编译了固件,证明并不是固件的问题。由于没有成功刷入编译的固件,此部分不再赘述。

抓包验证

Wireshark设置

到了这一步,前期准备工作就都完成了。现在需要把Ubertooth和Wireshark进行联动,将Ubertooth收集到的数据传到Wireshark进行解析。这里主要参考官方Wiki,步骤如下:

1.在终端中运行命令:mkfifo /tmp/pipe

2.打开Wireshark,选择 ‘Capture -> Options’ 对抓包接口进行设置

3.点击右下角 ‘Manage Interfaces’ 对接口进行管理

4.切换到 ‘Pipes’ 选项卡

5.保存设置,选中 ‘/tmp/pipe’ 并点击开始

6.此时,在终端中运行命令:ubertooth-btle -f -c /tmp/pipe

2019-06-17_162401.png

切回Wireshark,应该可以看到滚动的数据包了。

这里有一点需要注意,“mkfifo /tmp/pipe” 命令需要在所有步骤前进行,即先创建pipe这个文件,再设置wireshark读取,最后用Ubertooth-btle命令写入,顺序错了是会不成功的。

一些小问题

DLT=147, check your Preferences->Protocols->DLT_USER

这个问题我的个人理解是Wireshark没有能识别出这类数据包的具体类别,因此需要手动指定一下。

这个是没进行操作之前(有报错的时候)。

2019-06-17_151144.png

步骤很简单:

1.点击 Edit -> Preference (编辑 -> 首选项);

2.在左侧选择 Protocol下的DLT_USER选项;

3.点击Edit按钮;

4.点击左下角的 “+” 添加一条记录,在DLT处选择DLT=147,Payload protocol部分双击修改,填入btle,点击OK保存。

此时显示就正常了。

2019-06-17_163721.png

这是修复过的样子:

2019-06-17_163522.png

undefined symbol: new_create_dissector_handle

这个问题是在Wireshark 2.2+版本下按照官方Build Guide编译插件后造成的。原因在上面的插件编译那一节已经说到了,2.2+版本可以直接用,不需要进行任何插件的编译工作。

因为折腾了很久才明白各个版本之间的区别,因此还是在这里提一句,记录一下。

下面是这个错误报错的截图:

2019-06-18_193005.png

来源:freebuf.com 2019-07-11 11:14:31 by: MactavishMeng

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论