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 トラフィックのキャプチャやインジェクションが実現できるようです。
試しに Linux の Bluetooth スタック「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」のキャプチャデータでも参考になります。