Bluetoothトラフィックをキャプチャしてみる

Bluetoothバイス間を流れるトラフィックをキャプチャしたいと思い、関連する情報を調べてました。その調べた結果を整理するために、日記にまとめてみました。

Bluetoothバイス間を流れるトラフィックのキャプチャ

ノート PC 等に内蔵されている Bluetoothバイスなどを使用する場合、「そのデバイスが送信する HCI データ」または「そのデバイスに向けて送信される HCI データ」しかキャプチャできません。Wireshark Wiki における「Bluetooth traffic to or from your machine」という記述、および hcidump の man マニュアルにおける「raw HCI data coming from and going to a Bluetooth device」という記述が、このことを裏付けています。

Bluetoothバイス間を流れるトラフィックを無作為にキャプチャする場合*1、商用製品または Ubertooth One などの特殊な Bluetoothバイスが必要となるようです。neko氏のブログ記事によると、商用製品には Frontline 社の製品(FTS4BT?)があるようです。「Ubertooth One」を使うと、Bluetooth トラフィックのキャプチャやインジェクションが実現できるようです。


試しに LinuxBluetooth スタック「BlueZ」の「hcidump」を使って、Buffalo 製 Bluetoothバイスが送受信する HCI データをキャプチャしてみました。

「hcidump」による Bluetooth トラフィックのキャプチャ

動作環境

下図の通りです。BackTrack 5R3 を起動した「ノート PC」から「l2ping」コマンドを実行して、「ノート PC」と「Galaxy Nexus(SC-04D)」でやり取りされる HCI データを「hcidump」コマンドでキャプチャします。


実践

BackTrack 5R3 に同梱されている「hcidump」コマンドのバージョンを確認した後、Bluetooth 論理インターフェイス hci0 で HCI データをキャプチャしました。キャプチャした HCI データを bt.pcap に保存しました(下記参照)。

root@bt:/tmp# hcidump -version
2.3
root@bt:/tmp# hcidump -i hci0 -w bt.pcap
HCI sniffer - Bluetooth packet analyzer ver 2.3
btsnoop version: 1 datalink type: 1002
device: hci0 snap_len: 1028 filter: 0x0


「hcidump」コマンドを実行しているときに、「l2ping」コマンドを「Galaxy Nexus(SC-04D)」の MAC アドレス宛に実行しました(下記参照)。「l2ping」コマンドの実行結果では、Buffalo 製 BluetoothバイスMAC アドレスを「aa:bb:cc:dd:ee:ff」、「Galaxy Nexus(SC-04D)」の MAC アドレスを「00:11:22:33:44:55」に置換しています。

root@bt:~# l2ping -i hci0 -c 5 00:11:22:33:44:55
Ping: 00:11:22:33:44:55 from aa:bb:cc:dd:ee:ff (data size 44) ...
44 bytes from 00:11:22:33:44:55 id 0 time 6.85ms
44 bytes from 00:11:22:33:44:55 id 1 time 25.81ms
44 bytes from 00:11:22:33:44:55 id 2 time 4.82ms
44 bytes from 00:11:22:33:44:55 id 3 time 27.81ms
44 bytes from 00:11:22:33:44:55 id 4 time 28.83ms
5 sent, 5 received, 0% loss


「l2ping」コマンドを実行したあと、「hcidump」コマンドを終了しました。bt.pcap を Wireshark で開くと、下図のようになります。bt.pcap ファイルから「l2ping」コマンドの実行結果(リクエストおよびレスポンス)のみ抽出して、CloudShark にアップしました


「hcidump」コマンドで取得した bt.pcap のファイルタイプを「file」コマンドで確認したところ、「BTSnoop」のファイルタイプに該当していました。この「BTsnoop」は、Symbian OS における Bluetooth HCI layer のログフォーマットに該当します

root@bt:/tmp# file bt.pcap 
bt.pcap: BTSnoop version 1, HCI UART (H4)


「Ubertooth One」で Bluetooth トラフィックをキャプチャする場合、libbtbbデータ形式で保存されるようなので、「hcidump」のデータ形式と異なるようです。このブログ記事Wiresharkスクリーンショットをみてみると、確かに違う... とはいえ、「Bluetoothバイス間をどんなデータが流れるか」を知る目的であれば、「hcidump」のキャプチャデータでも参考になります。

まとめ

Bluetooth トラフィックをキャプチャすることは難しい。

*1:Ehternet(802.3) の Network Interface Card(NIC) における promiscous モードや、無線 LAN(802.11) の NIC における Monitor モードに該当します。