
BtleJuice Bluetooth Smart (LE) 中間者攻撃フレームワーク
===================
BtleJuice は、Bluetooth Smart デバイス(Bluetooth Low Energy とも呼ばれます)に対して Man-in-the-Middle 攻撃を実行するための完全なフレームワークです。以下のもので構成されています:
BtleJuice のインストールは簡単です。まず、システムが新しいバージョンの Node.js (>=4.3.2) と npm を使用していることを確認してください。次に、必要な依存関係をすべてインストールしてください:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
### Fedora / Other-RPM based
sudo yum install bluez bluez-libs bluez-libs-devel npm
最後に、npm を使用して BtleJuice をインストールします:
sudo npm install -g btlejuice
すべてがうまくいけば、BtleJuice を使用する準備ができています!
BtleJuice は、インターセプションプロキシとコアの2つの主要コンポーネントで構成されています。これらの2つのコンポーネントは、2つの Bluetooth 4.0+ アダプターを同時に操作するために、独立したマシンで実行する必要があります。BtleJuice Proxy は Docker コンテナ内では動作しません。
仮想マシンを使用すると、このフレームワークを1台のコンピュータで動作させることができる場合があります。
仮想マシンから、btlejuice をインストールし、USB BT4 アダプターが仮想マシンから利用可能であることを確認してください:
$ sudo hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 10:02:B5:18:07:AD ACL MTU: 1021:5 SCO MTU: 96:6
DOWN
RX bytes:1433 acl:0 sco:0 events:171 errors:0
TX bytes:30206 acl:0 sco:0 commands:170 errors:0
$ sudo hciconfig hci0 up
次に、仮想マシンがホストから到達可能な IP アドレスを持っていることを確認してください。
仮想マシンでプロキシを起動します:
$ sudo btlejuice-proxy
ホストマシンでは、Bluetooth サービスを停止し、HCI デバイスが開かれたまま/初期化されたままであることを確認することを忘れないでください:
$ sudo service bluetooth stop
$ sudo hciconfig hci0 up
最後に、ホストマシンで次のコマンドを実行します:
$ sudo btlejuice -u <Proxy IP address> -w
-w フラグは BtleJuice にウェブインターフェースを起動するよう指示し、-u オプションはプロキシの IP アドレスを指定します。
Web ユーザーインターフェースは http://localhost:8080 で利用可能になりました。ウェブサーバーのポートはコマンドラインで変更できることに注意してください。
BtleJuice のウェブインターフェースは、右上隅にインターセプションコアを制御するためのリンクのセットを提供します。以下に示します。

まず、Select target ボタンをクリックすると、インターセプションコアによって検出された利用可能なすべての Bluetooth Low Energy デバイスを表示するダイアログが表示されます:

目的のターゲットをダブルクリックし、インターフェースの準備ができるまで待ちます(Bluetooth ボタンの外観が変わります)。ダミーデバイスの準備ができたら、関連するモバイルアプリケーションまたは別のデバイス(期待されるものに応じて)を使用してダミーデバイスに接続します。接続が成功すると、メインインターフェースに Connected イベントが表示されます。

インターセプトされたすべての GATT 操作は、対応するサービスと特性の UUID、そしてもちろんそれらに関連するデータとともに表示されます。データはデフォルトで HexII 形式(Ange Albertini によって設計された形式のバリアント)で表示されますが、データ自体をクリックすることで HexII から Hex(およびその逆)に切り替えることができます。Hex と HexII の両方の形式が BtleJuice でサポートされています。
任意の GATT 操作を右クリックして Replay オプションを選択することで、再生することが可能です。以下に示します:


Write(または Read)ボタンをクリックして、対応する GATT 操作を再生します。この操作はメインインターフェースに記録されます。
最後になりましたが、インターフェースはローカルまたはグローバルに任意の GATT 操作をインターセプトし、リアルタイムのデータ変更を可能にします。右上隅の Intercept ボタンをクリックしてグローバルインターセプションを使用するか、コンテキストメニューを使用して特定のサービスと特性のフックを有効または無効にすることができます。GATT 操作がインターセプトされるたびに、次のダイアログボックスが表示されます:

バージョン 1.0.6 以降、インターフェースは読み取り可能なエクスポートと JSON エクスポートを可能にするデータエクスポート機能を提供しています。これらのエクスポートは、インターセプトされた GATT 操作に基づいて生成されますが、ターゲットデバイスに関する情報も含まれます。Export ボタンをクリックすると、次のダイアログが表示されます:

ダイアログボックスの下部にある Export ボタンをクリックして、インターセプトされたデータの JSON(またはテキスト)バージョンをダウンロードします。
現在、設定ダイアログは、ターゲットデバイスが切断されたときにプロキシを自動的に再接続する単一のオプションを提供しています。これは、短時間だけアクティブなデバイスを扱う場合に役立ちます。

プロキシがアクティブなときに右上の Select Target ボタンをクリックすると、プロキシが停止し、再度ターゲット選択が可能になります。
BtleJuice の Node.js バインディングも npm を通じてインストールできます:
$ sudo npm install -g btlejuice-bindings
Node.js バインディングの使用方法の詳細については、パッケージドキュメント を参照してください。
Slawomir Jasek 氏に特に感謝します。彼は、モバイルアプリケーションの問題を回避するための多くの noble/bleno のトリックを指摘し、DEF CON 24 で BLE MITM 戦略を共有してくれました =)。彼はまた、Gattacker の作者でもあります。
Copyright (c) 2016 Econocom Digital Security
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.