web-dev-qa-db-ja.com

Bluetooth Low Energy(BLE)リンク層暗号化のセキュリティ

Bluetooth Low Energy(BLE)のリンク層暗号化は、2つのデバイス間のランダムなBLE接続を盗聴したが、2つのデバイス間の最初の接続を盗聴していない攻撃者に対して安全ですか?


背景:2つのデバイスが最初にペアリングされると、キー交換プロトコルを使用して長期キーが導出されます。その最初のペアリングを盗聴できる人は誰でも長期的な鍵を学ぶことができますが、この質問の目的のために、敵がその最初のペアリングを盗聴しなかったと想定します(たとえば、敵が近くにいなかったため)。 2つのデバイスは、この長期キーを使用して、今後のすべての接続で送信されるデータを暗号化します。 BLEは、リンク層の暗号化にAES-CCMを使用します。これは、長期間の鍵が予測できない場合に安全でなければなりません。

ただし、WOOT 2013で、Mark RyanはBLEに対する攻撃の可能性について推測する論文を発表しました。彼の攻撃では、攻撃者は偽造されたLL_REJECT_INDメッセージを1つのデバイスに挿入します。明らかに、これにより受信者は現在の長期鍵を忘れ、新しい鍵交換を強制して新しい長期鍵を導出します。攻撃者は、この新しいキー交換を傍受し、新しい長期キーを学習し、後続のすべてのトラフィックを復号化できます。少なくとも、それはライアンが推測したものです。

この攻撃は実際に機能しますか?たとえ攻撃者が2つのデバイス間の最初のペアリングをキャプチャしなかったとしても、BLEのリンク層暗号化は安全ではありませんか?

参照:Mike Ryan、「 Bluetooth:With Energy Energy Low Low Security "、WOOT 2013。 https://www.usenix.org/conference/woot13/workshop-program/presentation/ライアン

14
D.W.

攻撃は実際に機能します。 5年前にDEF CONで取得したUbertooth Oneを使用していて、BLE標準を実装するさまざまなIoTデバイスに対してテストしました。マイク・ライアンの論文は正しいです。

「モノのインターネットの悪用」という本から、著者はマイクライアンの作品とUbertooth Oneでの実装について説明しています。

ubertooth-btle -f -c ble.pcap

著者は、Bluetoothデバイスをコピーしてそれらをエミュレートできるため、さらなるトラブルシューティングのためのLightBlue iOSアプリの使用についても説明しています。 BLEは多くのチャネルを使用するため、ある程度の作業が必要になるため、ネットワークキャプチャの評価中にインターフェイスをオン/オフにすることを強くお勧めします。

標準のBLE暗号化データは、AESベースの一時キー(TK)を選択することにより、キー交換プロトコルを使用します。マイクライアンは、このキーをブルートフォースにする クラックル ツールをリリースしました。

crackle -i ble.pcap -o decrypted-ble.pcap

この手法はOOB(128ビットオプションキーもBLEで定義されています)モードに対しては効果的ではありませんが、 bertoothメーリングリスト に見られるように、開発チームはサンプルの収集と可能性のトラブルシューティングに取り組んでいますOOBモードの破壊。

よく知られている 支払い技術に関するブログ および関連するインフラストラクチャも、BLE OOBモードの解除に関するコメントを含め、Bluetoothセキュリティの終焉について推測しています。 12/29/15更新:BT 2.1についての議論が増えました。また、btproxyにも出会いました。私が出会った別のチュートリアルは、タイトルが bertoothOneでBluetoothのスニッフィングとクラッキング です。

ただし、(本「ハッキングエクスポーズドワイヤレス第3版」にあるように)Bluetoothの修復のアイデアは、Yaniv ShakedとAvishai Wool( http:// www.eng.tau.ac.il/~yash/shaked-wool-mobisys05 )。攻撃者は「修復攻撃」を使用して、2つのデバイスの一方のBD_ADDRを偽装することにより、2つのデバイス間で保存されているペアリングステータスを操作できます。

ツール bdaddr は、この手法の主要な実装です。

gcc -obdaddr -lbluetooth bdaddr.c
hciconfig hci0
Sudo bdaddr -i hci0 <new bdaddr>
(asks to reset device now)
Sudo bccmd -d hci0 warmreset
(check that it changed)
hciconfig hci0
Sudo hcitool cc <bdaddr of target to repair to>
Sudo hcitool enc <bdaddr target again> enable

白紙の状態に戻すには

Sudo bccmd -d hci0 coldreset
hciconfig hci0
13
atdre