
Sweyntooth Bluetooth Low Energy (BLE) 脆弱性の概念実証 (Proof of Concept)。
このリポジトリは、ASSET Research Group による研究成果の一部です。

SweynTooth は、6 つの主要なシステムオンチップ (SoC) ベンダーのさまざまな Bluetooth Low Energy (BLE) ソフトウェア開発キット (SDK) にわたる 18 個の脆弱性 群を対象としています。これらの脆弱性は、特定の BLE SoC 実装の欠陥を露呈するもので、電波範囲内の攻撃者が状況に応じてデッドロック、クラッシュ、バッファオーバーフローを引き起こしたり、セキュリティを完全にバイパスしたりすることを可能にします。(更新) BLE KNOB 亜種に対するデバイスチェック用のテストスクリプトも追加しました。
脆弱性の詳細、利用可能なパッチ、影響を受けるデバイスについては、ASSET Research Group SweynTooth 開示ウェブサイト をご覧ください。
Fitbit、August Smart Lock、Eve Energy、CubiTag などの「スマート」デバイスが影響を受けます。
この PoC は、Scapy や Colorama などのよくメンテナンスされたライブラリを使用しています。BLE パケットの生成と解析は、カスタマイズされた Scapy プロトコルレイヤー (bluetooth4LE と bluetooth.py) を介して行われます。Scapy のメインリポジトリに追加機能を含めるための マージが進行中 です。
まず、システムに Python2.7 と、requirements.txt ファイルに記載されている Python パッケージがインストールされていることを確認する必要があります。
Ubuntu を使用している場合は、次のコマンドを実行してください:
sudo apt-get install python2.7
sudo pip install -r requirements.txt
次に、SweynTooth は Nordic nRF52840 Dongle を使用して、脆弱なペリフェラルとの間でリンク層の生パケットを無線で送受信します。Python 2.7 スクリプトを開始する前に、ボードにドライバファームウェアを書き込む必要があります。
ファームウェアコードのバイナリは nRF52_driver_firmware.zip ファイル内にあります。ボードにファームウェアを書き込むには、nrfutil ツールをインストールする必要があります。書き込む前に nRF52840 を DFU モードにしてください (USB ドングルを PC に接続した状態で、小さなリセットボタンを押してリセットします)。
次のコマンドで Python の依存関係をインストールし、ファームウェアを書き込むことができます:
python -m pip install nrfutil pyserial pycryptodome
nrfutil dfu usb-serial -p COM_PORT -pkg nRF52_driver_firmware.zip
スクリプトは Linux または Windows で動作します。COM_PORT パラメータを nRF52840 のポート名に合わせて変更するだけです。
前述の書き込み方法が機能しない場合は、nRF Connect App for Desktop を使用してファームウェアを書き込むこともできます。このアプリは hex ファームウェア (nRF52_driver_firmware.hex) を書き込むための便利なインターフェースを提供します。
要件がインストールされたら、次のコマンドを実行してエクスプロイトスクリプトを実行できます:
python Telink_key_size_overflow.py COM7 A4:C1:38:D8:AD:A9
最初の引数はシリアルポート名 (通常 Linux では /dev/ttyACM0) で、2 番目の引数は脆弱な BLE デバイスのアドレスです。このアドレスを見つけるには、任意の BLE スキャナまたは nRF Connect App を使用できます。
例として Key Size Overflow 脆弱性を取り上げると、脆弱なデバイスがクラッシュ後にハングした場合、スクリプトは次のような出力を返します:

Python の依存関係のインストールを避けるために Docker イメージで SweynTooth を使用したい場合は、docker.sh ヘルパースクリプトを使用して Docker インスタンスをビルドおよび実行するか、リリースページで利用可能なプレビルド Docker イメージ (リンク) をダウンロードできます。docker.sh の使用方法は以下のとおりです。
--------- HELP -------------
sudo ./docker run <script_name> <serial_port> <ble_target_address> - Start any sweyntooth script by its name (<script_name>)
sudo ./docker build - Build docker container
sudo ./docker build release - Build docker container and create compressed image for release
sudo ./docker shell - Start docker container shell
---------- EXAMPLE ----------
./docker.sh run extras/Microchip_and_others_non_compliant_connection.py /dev/ttyACM0 f0:f8:f2:da:09:63
各エクスプロイトスクリプトは 1 つの欠陥に対応しています。次の概要表は、影響を受ける SoC 上の脆弱性と、その脆弱性を悪用するスクリプトとの対応関係を示しています。