btmonコマンド

Linux
この記事は約6分で読めます。

LinuxのBluetoothスタック(BlueZ)が提供するBluetoothプロトコルアナライザです。

BlueZ:Linux および Android システムで標準的に使われているオープンソースの Bluetooth プロトコルの実装

btmonとは

Bluetoothコントローラ(HCI)とLinuxカーネルとの間でやり取りされる全てのHCIパケットやイベントをリアルタイムで表示します。

Wiresharkがネットワークパケットを解析するツールであるのに対し、btmonはBluetooth版のパケットモニタです。

btmonの主な用途

用途内容
ペアリング解析どんな手順で認証しているか
接続トラブル解析どこで失敗したか
BLE解析Advertising内容を見る
Classic Bluetooth解析L2CAPなどを見る
HCIコマンド解析OSが送った命令を見る
セキュリティ研究Bluetooth通信の解析

データの収集

以下のコマンドで、

をモニタリングします。

コマンド実行後に、bluetoothマネージャの ‘search’ ボタンをクリックすると、信号収集を始めます。(具体的には下記)

画面右上のブルートゥースアイコン(図では左から2つ目)をクリックし、
bluetooth icon
表示された ‘Bluetooth Devices’ ダイアログの ‘seach’ ボタンをクリックします。
bluetooth devices

btmonの終了は ‘Ctrl + C’ です。

保存ファイルへの記録

記録は ‘-w’ オプションで保存ファイル名を指定します。

保存形式は、’btsnoop’ というBluetooth記録の標準形式です。

btmon -w

データの解析

収集したbluetoothのパケットデータの解析です。

統計

‘-a’ オプションでサマリーが表示されます。

btmon -a

上記の例では、

2行目:総パケット数257個

続いて2つのコントローラ別に表示されています。

第一のコントローラ(index 65535 BD_ADDR 00:00:00:00:00:00)は、仮想コントローラです。

第二のコントローラ(index 0 BD_ADDR 2C:CF:67:XX:XX:XX)は、ラズパイ搭載のbluetoothコントローラです。(Cypress Semiconductor 社製のbluetoothアダプタを内蔵していることが表示されています)

実物のアダプタは第二の方です。

項目意味・内容
commandsHCIコマンド・コントローラへ送信した命令
eventsコマンドの返事・コントローラからの応答やAdvertising Report
ACL packetsACL通信(接続後)
SCO packets音声通信(接続後)
ISO packetsLE Audio通信(接続後)
vender diagnoticsメーカー独自ログ
system notesログ開始などのシステムメモ
user logsユーザーメモ
control mesagesMGMT(management)イベント・BlueZの管理メッセージ
unknown opcodes

記録ファイルの詳細

保存したファイルは、 ‘btsnoop’ 方式なので、普通に ‘cat’ コマンドや、 ‘nano’ などのテキストエディタでは開けません。(開いても判読できません)

btmonツールの ‘-r’ オプションを使用します。

btmon -r

色分けされているので分かりやすいですが、行数が多く全体の俯瞰が今一つ困難です。

なので、 ‘grep’ コマンドなどを使用して分析します。

wiresharkによる解析

‘btsnoop’ 形式は “wireshark” ツールでも対応していますので、 “wireshark” で開けます。

kali ー 09-Discovery ー wireshark で起動します。

wireshark

起動時の画面です。

左上に並ぶアイコンの左から5つ目のアイコンをクリックするとファイルを指定して展開出来ます。

wireshark1

ファイルを展開した所です。

wireshark2

その他解読のヒント

紙面不足(と私の能力不足・努力不足・根気不足)で今回の投稿では完全に解読出来ていません。

取り敢えず分かる “単語” についていくつか記載します。

BDアドレスの種類について

bluetoothのアドレスは、固定アドレスのものと変動アドレスのものがあります。

まずはbluetoothは2系統あります。Classic系統とBLE(Bluetooth Low Energy)系統です。

BLE系統において、変動前のアドレス(すなわち工場出荷時から持つ固有のアドレス)をBLE Public Addressと呼び、これは一生変わりません。
一方変動後のアドレス(Random Address)は変動の具合により、さらに以下の3種類があります。

btmon出力上の表示変動アドレスの種類特徴
StaticBLE Static Random起動中は固定(再起動などで変わる場合あり)
ResolvableBLE Private Resolvable Addressペアリング済み機器は識別可能
定期的(15分毎)にアドレス変化
Non-ResolvableBLE Private Non-Resolvable Address完全に匿名(頻繁にアドレス変化)
Bluetoothコントローラ自身が使用するランダムアドレス

RSSIについて

通信内容にあるRSSIは電波の強さの指標です。

RSSI(Received Signal Strength Indicator)
無線通信の受信電波の強さを示す指標で単位はdBm(デシベルミリワット)
0に近いほど電波が強く、マイナスの数字が大きくなるほど電波が弱くなります。
Wi-FiやBluetooth、携帯電話のアンテナ表示などに使われます。

rssi

bluetooth機器の電波出力はほぼ一定の為、結果的に近似的な電波源の近さの目安となります。

RSSI距離の目安
-40 dBm30cm程度
-50 dBm約1m
-60 dBm2〜3m
-70 dBm5〜10m
-80 dBmかなり遠い
-90 dBm以下通信限界付近

まとめ

btmonは、周囲を飛び交うbluetoothの電波を傍受して記録するコマンドです。

記録形式は ‘btsnoop’ で、wiresharkツールでも解読できます。

wiresharkと同じくその解釈が困難で、これがポイントのようです。

参考)bluetooth関連コマンド

bluetooth関連の主なコマンドの使い分けです (by chatGPT先生)

コマンド用途
bluetoothctlBluetooth機器の操作(スキャン、ペアリング、接続など)
btmonBluetooth通信内容の監視・解析
hciconfig(旧)HCIデバイス設定(現在は非推奨)
btmgmtBluetoothコントローラ管理
hcitool(旧)簡易的なHCI操作(現在は非推奨)

ヘルプ

btmon -h

コメント

タイトルとURLをコピーしました