前言

从nazo✌那里借来一块树莓派,准备在上面搭建一个蓝牙嗅探/扫描环境以供蓝牙的研究
通过SD卡烧录镜像
官方网站:https://www.raspberrypi.com/
下载并使用烧录软件
官网->firmware:然后选择符合你系统型号(windows/linux/mac)的烧录软件
运行起来是这个效果:

镜像版本我选择的是官方的镜像:

按shift+ctrl+x有镜像的一些初始化配置:

烧录完成过后将SD卡插入树莓派然后连上typec供电开机即可:

开机后的操作
上图左边的那根线是micro HDMI线,另一头连接的是一块便携屏,开机过后便携屏上就有画面了:

当然如果没有便携屏的话,也可以在烧录的时候(按ctrl+shift+x)添加ssh和wifi的选项,然后开机后默认会连上你选择的wifi(默认是你电脑连的wifi)
然后进入路由器的管理页面查看树莓派的ip(当然也可以扫一下自己的路由ip),然后就能ssh连上去了:

但是像wireshark这种需要图形化显示的软件,直接ssh没办法做到
这个时候可以使用VNC Viewer等软件进行一个远程桌面的显示
不过可能有延迟,笔者还没有试过,大家如果有需要可以试试看,这里就不赘述
安装蓝牙嗅探的依赖
换源
这里我选择的是中科大源
在中科大的开源镜像站里搜索

点进去按它的教程执行如下指令:
1 2 3 | sudo sed - i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' / etc / apt / sources. list .d / raspi. list
sudo apt - get update
sudo apt upgrade
|
(ps:在用sudo之前需要通过sudo passwd root来设定root密码)
按装蓝牙依赖
1 2 | 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
|
安装ubertooth one蓝牙嗅探软件
笔者使用的嗅探设备为ubertooth one:

比较好的就是它有配套的软件,并且可以通过wireshark直接抓包
官方文档:https://ubertooth.readthedocs.io/en/latest/index.html
按照"Build guide"、"firmware"、"wireshark"一栏慢慢安装
首先安装libbtbb:
1 2 3 4 5 6 7 8 9 | wget https: / / github.com / greatscottgadgets / libbtbb / archive / 2020 - 12 - R1.tar.gz - O libbtbb - 2020 - 12 - R1.tar.gz
tar - xf libbtbb - 2020 - 12 - R1.tar.gz
cd libbtbb - 2020 - 12 - R1
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
|
然后安装ubertooth tools:
1 2 3 4 5 6 7 8 9 | wget https: / / github.com / greatscottgadgets / ubertooth / releases / download / 2020 - 12 - R1 / ubertooth - 2020 - 12 - R1.tar.xz
tar - xf ubertooth - 2020 - 12 - R1.tar.xz
cd ubertooth - 2020 - 12 - R1 / host
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
|
安装wireshark以及ubertooth插件:
1 2 3 4 5 6 7 | sudo apt - get install wireshark wireshark - dev libwireshark - dev cmake
cd libbtbb - 2020 - 12 - R1 / wireshark / plugins / btb
mkdir build
cd build
cmake - DCMAKE_INSTALL_LIBDIR = / usr / lib / arm - linux - gnueabihf / wireshark / plugins / ..
make
sudo make install
|
安装经典蓝牙插件:
1 2 3 4 5 6 7 | sudo apt - get install wireshark wireshark - dev libwireshark - dev cmake
cd libbtbb - 2020 - 12 - R1 / wireshark / plugins / btbredr
mkdir build
cd build
cmake - DCMAKE_INSTALL_LIBDIR = / usr / lib / arm - linux - gnueabihf / wireshark / plugins / ..
make
sudo make install
|
添加wireshark权限:
1 2 3 4 | sudo groupadd wireshark
sudo chgrp wireshark / usr / bin / dumpcap
sudo chmod 4755 / usr / bin / dumpcap
sudo gpasswd - a 你的用户名 wireshark
|
嗅探
使用"mkfifo file_name"或者"mknod file_name p"创建管道文件
然后在wireshark里按如下方式点击配置:

然后点击OK->start即可到达一个空白页面
(ps:在browser里可能会出现查找不到/tmp/pipe的情况,直接回车然后OK->start即可)
然后在命令行里输入:
1 | ubertooth - btle - f - c / tmp / pipe
|
即可看到wireshark里的蓝牙抓包信息:

扫描和连接
嗅探其实是一个帮助我们分析的过程,实际上与一个设备通信的关键是获取通信设备的MAC地址以及与它建立连接
这个过程同时也需要一定的硬件支持,不然可能会出现连不上的问题(参考今年西湖的10cm蓝牙2333)
于是我使用了一个蓝牙适配器,连完过后我的树莓派已经全副武装了hhh:

执行"hciconfig -a"指令:

这个hci1就是我们的蓝牙适配器了
扫描
通过bluetoothctl进行扫描,就能捕获到周围的蓝牙设备:

当然你也可以使用hcitool lescan,不过效果可能没有那么好:

有些设备是会显示设备名的,而有些设备可能就是unknown,这种情况可能就需要你带着你的蓝牙设备去一个偏僻无人的角落进行抓包获取MAC地址了XD
连接
可以通过如下命令与设备建立连接:

通过help我们能看出可以选择的命令
我们比较关心几个东西:
(1)连接/断开:对应着connect和disconnect
(2)发送消息:
1 | char - write - req handle value:将value写到handle句柄
|
(3)读取消息:
1 | char - read - hnd handle:读取handle句柄中的数值
|
(4)获取服务和特征值:primary和characteristics
当然命令也不止这几个,但这几个是相对比较常用的,如有其它需求,也可以参考help自行使用
后续工作
做好准备工作过后,我们就正式开始对一个蓝牙设备的攻击研究了
首先需要通过嗅探获取蓝牙报文,然后分析达成特定功能的报文处理的格式
然后通过gatttool连接到设备,发送同样格式的报文即可完成中间人攻击
后续会结合相应的例子具体分析,敬请期待~
参考文章
https://zhuanlan.zhihu.com/p/344447077
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2023-3-28 11:36
被Nameless_a编辑
,原因: