
ウェブベースのインターセプションプロキシを介して、Bluetooth Smartデバイスとモバイルアプリ間のGATTトラフィックを傍受・リプレイ・改変するBLE Man-in-the-Middleフレームワーク。
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 / その他の RPM ベース
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 に Web インターフェースの起動を指示し、-u オプションはプロキシの IP アドレスを指定します。
Web ユーザーインターフェースは http://localhost:8080 で利用できるようになります。Web サーバーのポートはコマンドラインから変更できることに注意してください。
BtleJuice の Web インターフェースは、右上隅にインターセプションコアを制御するためのリンクセットを提供します。下図のとおりです。

まず、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 バインディングの使用方法の詳細については、パッケージドキュメント を参照してください。
DEF CON 24 の際に、モバイルアプリケーションの問題を回避するための noble/bleno のテクニックを数多く指摘し、BLE MITM 戦略を共有してくれた Slawomir Jasek に特別な感謝を捧げます =)。彼は Gattacker の作者でもあります。
Copyright (c) 2016 Econocom Digital Security
ここに、無償で、本ソフトウェアおよび関連する文書ファイル(以下「本ソフトウェア」)の複製物を入手したすべての個人に対し、本ソフトウェアを制限なく扱うことを許可します。これには、本ソフトウェアの複製物を使用、複製、変更、結合、公開、頒布、サブライセンス、および/または販売する権利、ならびに本ソフトウェアを提供された個人にそれらの行為を許可する権利が、以下の条件に従うことを条件として、無制限に含まれます:
上記の著作権表示およびこの許可表示は、本ソフトウェアのすべての複製物または主要な部分に含まれるものとします。
本ソフトウェアは「現状のまま」で提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および非侵害性の保証を含むがこれに限定されない、いかなる種類の保証もありません。いかなる場合においても、著作者または著作権所有者は、契約、不法行為、その他の原因を問わず、本ソフトウェアに起因または関連して、あるいは本ソフトウェアの使用またはその他の取り扱いに関連して発生する、いかなる請求、損害、その他の責任についても、一切の責任を負いません。