當前位置: 華文世界 > 科技

基於樹莓派的藍芽協定抓包

2024-08-26科技

前言

前段時間嘗試用虛擬機器安裝 Ubuntu 系統和一款軟硬件開源的藍芽抓包器 Ubertooth One 來搭建藍芽嗅探環境,從官方推薦的 Ubuntu16.04 版本一直測試到 22.04 版本,看似簡單的藍芽環境嗅探,搭建過程卻遇到各種問題,如各版本報錯不一致,外掛程式安裝失敗,ubertooth 固件問題等,查閱了很多材料,嘗試了很久都沒有成功,想到手頭還有個樹莓派,考慮到會有 wireshark 等界面互動連線了個 3.5 寸螢幕。

樹莓派環境境說明

樹莓派型號:樹莓派4B
作業系統:Raspberry Pi OS 2023-05-03-raspios-bullseye/ Debian GNU/Linux 11 (bullseye)
Ubertooth 固件版本:ubertooth 2018-12-R1(更新固件後 ubertooth 2020-12-R1)
ubertooth tools 版本:libubertooth 1.1 (2020-12-R1), libbtbb 1.0 (2018-06-R1)
Wireshark版本:Version 3.4.10 (Git v3.4.10 packaged as 3.4.10-0+deb11u1)

樹莓派系統安裝

樹莓派安裝過程比較簡單,簡述一下。

1、下載官網燒錄軟件
官方網站:https://www.raspberrypi.com/software/

2、按需燒錄樹莓派系統

3、燒錄時提前配置開啟 ssh、wifi

4、將燒錄好的儲存卡插入到樹莓派中
此時就可以ssh連線樹莓派,如果有需要螢幕的情況比如 wireshark 圖形界面等,可以連線內建的 hdmi 線到顯示器上,如果覺得連線顯示器有些麻煩,想用vnc連線遠端桌面

5、VNC連線
終端輸入命令sudo raspi-config,會彈出一個界面 選擇 Interface Options -> VNC-> enable -> YES 即可開啟 vnc。

6、調整臨時分辨率
但預設連線vnc分辨率會比較小,無法看清螢幕內容 可以透過終端輸入以下命令臨時調整vnc分辨率,下次重新開機後失效。

vncserver -geometry 1920x1080

vnc 連線是地址後加 :1 選擇通道 1,例如 192.168.1.1:1 即可連線,但 192.168.1.1 仍可正常連線 vnc。

藍芽協定簡介

藍芽低能耗(Bluetooth Low Energy,或稱 Bluetooth LE、BLE,舊商標 Bluetooth Smart)也稱低功耗藍芽,是藍芽技術聯盟設計和銷售的一種個人區域網路技術,旨在用於醫療保健、運動健身、信標、安防、家庭娛樂等領域的新興套用。相較經典藍芽,低功耗藍芽旨在保持同等通訊範圍的同時顯著降低功耗和成本。

傳統藍芽和低功耗藍芽對比:

低功耗藍芽(Low Energy; LE),又視為 Bluetooth Smart 或藍芽核心規格 4.0 版本。其特點具備節能、便於采用,是藍芽技術專為物聯網(Internet of Things; IOT)開發的技術版本。

BLE 主打功能是快速搜尋,快速連線,超低功耗保持連線和傳輸數據,弱點是數據傳輸速率低,由於BLE的低功耗特點,因此普遍用於穿戴器材。

BLE 優點

1、高可靠性
對於無線通訊而言,由於電磁波在傳輸過程中容易受很多因素的幹擾,例如,障礙物的阻擋、天氣狀況等,因此,無線通訊系統在數據傳輸過程中具有內在的不可靠性。藍芽技術聯盟 SIG 在指定藍芽 4.0 規範時已經考慮到了這種數據傳輸過程中的內在的不確定性,在射頻,基頻協定,鏈路管理協定中采用可靠性措施,包括:差錯檢測和矯正,進行數據編解碼,數據降噪等,極大地提高了藍芽無線數據傳輸的可靠性,另外,使用自適應調頻技術,能最大程度地減少和其他 2.4G 無線電波的串擾。

2、低成本、低功耗
低功耗藍芽支持兩種部署方式:雙模式和單模式,一般智能機上采用雙模式,外設一般采用 BLE 單模。

低功耗設計:藍芽 4.0 版本強化了藍芽在數據傳輸上的低功耗效能,功耗較傳統藍芽降低了 90%。

傳統藍芽器材的待機耗電量一直是其缺陷之一,這與傳統藍芽技術采用16至32個頻道進行廣播有很大關系,而低功耗藍芽僅適用 3 個廣播通道,且每次廣播時射頻的開啟時間也有傳統的 22.5ms 減少到 0.6~1.2ms,這兩個協定規範的改變,大幅降低了因為廣播數據導致的待機功耗。

低功耗藍芽設計用深度睡眠狀態來替換傳統藍芽的空閑狀態,在深度睡眠狀態下,主機 Host 長時間處於超低的負載迴圈 Duty Cycle 狀態,只在需要運作時由控制器來啟動,由於主機較控制器消耗的能源更多,因此這樣的設計也節省了更多的能源。

3、快速啟動/瞬間連線
此前藍芽版本的啟動速度非常緩慢,2.1 版本的藍芽啟動連線需要 6s 時間,而藍芽4.0版本僅需要3ms 即可完成。

4、傳輸距離增強
傳統藍芽傳輸距離一般為 2-10 米,而藍芽4.0的有效傳輸距離可以達到 60~100米,傳輸距離大大提高,極好的開拓了藍芽技術的套用前景。

環境安裝

測試發現內建源速度還是挺快的,這裏就不用換源了。

1、安裝依賴
可以透過 sudo passwd root 重設下 root 密碼後再執行 sudo。

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

2、安裝 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

3、安裝 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

4、安裝 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

5、安裝 wireshark 藍芽外掛程式

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

6、添加 wireshark 許可權

sudo groupadd wiresharksudo chgrp wireshark /usr/bin/dumpcapsudo chmod 4755 /usr/bin/dumpcapsudo gpasswd -a 你的使用者名稱 wireshark

重新整理固件

安裝好上述環境之後,如果你的 Ubertooth one 是之前買的,是需要更新一下固件版本:

檢視一下當前固件版本:ubertooth-util -v

如果不是最新版本固件可以進入到之前下載的 ubertooth-2020-12-R1 資料夾下,找到 bluetooth_rxtx.dfu 檔。

cd ubertooth-2020-12-R1/ubertooth-one-firmware-bin/ubertooth-dfu -d bluetooth_rxtx.dfu -r

執行重新整理固件命令,器材將自動進入DFU模式並重新整理固件。

如果上訴操作沒有成功,可以嘗試將圖中器材短接一下再進行固件重新整理命令圖片


固件更新完成後可以再次透過 ubertooth-util -v 檢視固件版本,檢視是否已更新固件成功。

tips

如果最後出現 control message unsupported,則意味著更新固件失敗。可以透過執行 ubertooth-util -r 或重新拔插 Ubertooth 後再進行固件更新。

開始嗅探

使用 ubertooth-btle 進行掃描,在 Wireshark 中捕獲 BLE 數據。
1、終端執行命令:mkfifo /tmp/pipe 建立管道檔

2、開啟 Wireshark,單擊捕獲(Capture)->選項(Options)點選視窗右側的管理介面(Manage Interfaces)按鈕。

在管道(Pipe)文本框中,鍵入 「/tmp/pipe」,單擊 OK 保存後點選「開始」,完成後在終端中,執行 ubertooth-btle:

ubertooth-btle -f -c /tmp/pipe

在 Wireshark 視窗中,可以看到封包捲動。

可以使用 ubertooth-btle -f -c test.pcap 抓包並保存到本地。

直接匯入 wireshark 可能會顯示不正常,需要對 wireshark 進行一些配置。
1、單擊編輯(Edit)->參數設定(Preferences)
2、單擊協定(Protocols)-> DLT_USER
3、單擊編輯,點選加號(+),在DLT下,選擇「使用者0(DLT = 147),在有效載荷協定下,輸入:btle

配置完成後,直接在 wireshark 中開啟即可圖片。

使用 hcitool 進行掃描

常用命令 hcitool scan : 掃描附近藍芽器材。

hcitool lescan : 掃描附近低功耗藍芽器材。

使用 bluetoothctl 進行掃描

bluetoothctlscan on