從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等軟件進行一個遠程桌面的顯示
不過可能有延遲,筆者還沒有試過,大家如果有需要可以試試看,這里就不贅述。
安裝藍牙嗅探的依賴
換源
這里我選擇的是中科大源
在中科大的開源鏡像站里搜索

點進去按它的教程執行如下指令:
sudo sed -i 's|//archive.raspberrypi.org|//mirrors.ustc.edu.cn/archive.raspberrypi.org|g' /etc/apt/sources.list.d/raspi.listsudo apt-get updatesudo apt upgrade
(ps:在用sudo之前需要通過sudo passwd root來設定root密碼)
按裝藍牙依賴
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:
wget https://github.com/greatscottgadgets/libbtbb/archive/2020-12-R1.tar.gz -O libbtbb-2020-12-R1.tar.gztar -xf libbtbb-2020-12-R1.tar.gzcd libbtbb-2020-12-R1mkdir buildcd buildcmake ..makesudo make installsudo ldconfig
然后安裝ubertooth tools:
wget https://github.com/greatscottgadgets/ubertooth/releases/download/2020-12-R1/ubertooth-2020-12-R1.tar.xztar -xf ubertooth-2020-12-R1.tar.xzcd ubertooth-2020-12-R1/hostmkdir buildcd buildcmake ..makesudo make installsudo ldconfig
安裝wireshark以及ubertooth插件:
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmakecd libbtbb-2020-12-R1/wireshark/plugins/btbmkdir buildcd buildcmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf/wireshark/plugins/ ..makesudo make install
安裝經典藍牙插件:
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmakecd libbtbb-2020-12-R1/wireshark/plugins/btbredrmkdir buildcd buildcmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf/wireshark/plugins/ ..makesudo make install
添加wireshark權限:
sudo groupadd wiresharksudo chgrp wireshark /usr/bin/dumpcapsudo chmod 4755 /usr/bin/dumpcapsudo gpasswd -a 你的用戶名 wireshark
嗅探
使用"mkfifo file_name"或者"mknod file_name p"創建管道文件
然后在wireshark里按如下方式點擊配置:

然后點擊OK->start即可到達一個空白頁面
(ps:在browser里可能會出現查找不到/tmp/pipe的情況,直接回車然后OK->start即可)
然后在命令行里輸入:
ubertooth-btle -f -c /tmp/pipe
即可看到wireshark里的藍牙抓包信息:

掃描和連接
嗅探其實是一個幫助我們分析的過程,實際上與一個設備通信的關鍵是獲取通信設備的MAC地址以及與它建立連接。
這個過程同時也需要一定的硬件支持,不然可能會出現連不上的問題(參考今年西湖的10cm藍牙2333)。
于是我使用了一個藍牙適配器,連完過后我的樹莓派已經全副武裝了hhh:

執行"hciconfig -a"指令:

這個hci1就是我們的藍牙適配器了。
掃描
通過bluetoothctl進行掃描,就能捕獲到周圍的藍牙設備:

當然你也可以使用hcitool lescan,不過效果可能沒有那么好:

有些設備是會顯示設備名的,而有些設備可能就是unknown,這種情況可能就需要你帶著你的藍牙設備去一個偏僻無人的角落進行抓包獲取MAC地址了XD。
連接
可以通過如下命令與設備建立連接:
gatttool -b MAC地址 -I

通過help我們能看出可以選擇的命令。
我們比較關心幾個東西:
(1)連接/斷開:對應著connect和disconnect
(2)發送消息:
char-write-req handle value:將value寫到handle句柄
(3)讀取消息:
char-read-hnd handle:讀取handle句柄中的數值
(4)獲取服務和特征值:primary和characteristics
當然命令也不止這幾個,但這幾個是相對比較常用的,如有其它需求,也可以參考help自行使用。
后續工作
做好準備工作過后,我們就正式開始對一個藍牙設備的攻擊研究了。
首先需要通過嗅探獲取藍牙報文,然后分析達成特定功能的報文處理的格式
然后通過gatttool連接到設備,發送同樣格式的報文即可完成中間人攻擊
后續會結合相應的例子具體分析,敬請期待。
安全圈
FreeBuf
看雪學苑
嘶吼專業版
D1Net
看雪學苑
D1Net
一顆小胡椒
ManageEngine卓豪
FreeBuf
FreeBuf
FreeBuf