コンテンツにスキップ

3. BlueTooth

3.1. BlueToothの基礎知識

3.1.1. BlueToothとは

BluetoothとはIEEE802.15.1で規定された10m~100m以内の近距離で端末同士を1対1でワイヤレス接続することを想定して作られた近接無線通信技術である。 Ver3.0までのBluetooth Classic、Ver4.0以降のBLE(Bluetooth Low Energy)がある。

Bluetooth

3.1.2. Bluetoothの通信方式

BluetoothはBluetooth Classicまでがユニキャスト通信に対応、BLEがユニキャスト通信とブロードキャスト通信に対応している。

  • ユニキャスト通信
    • ペリフェラル ... 1対1通信を要求するAD(アドバタイズ)を送信。接続時は子機として動作
      • 例) スマートウォッチやBlueToothイヤホンなど
    • セントラル ... 1対1接続要求アドバタイズをスキャンし接続。接続時は親機として動作
      • 例) ... スマホやタブレットなど
  • ブロードキャスト通信
    • ブロードキャスタ ... ブロードキャスタ用アドバタイズを送信
      • 例) 温度センサーや位置ビーコンなど
    • オブザーバ ... ブロードキャスト用アドバタイズのスキャン
      • 例) 表示機器、スマホ

ペリフェラルとセントラル

ペリフェラルとセントラルは双方向通信が可能となっており、一対一の対応関係確立後にデータ送信をする。 接続確立後はペアリングにて暗号化通信を行うことが可能。

ブロードキャスタとオブザーバ

ブロードキャスタとオブザーバは単方向通信のみ。 接続/ペアリングが行われないため暗号化通信はサポートしていない。

3.1.3. Bluetoothのセキュリティ

Bluetoothの認証/暗号化鍵交換

Bluetoothのセキュリティは認証/暗号化の鍵交換に関してペアリングボンディングがある。

ペアリング

ペアリングはセントラルとペリフェラル間のデータ暗号化(AWS-CCMや楕円曲線暗号が用いられる)のための鍵交換を行うもの。 この仕組みにより一度相互に認証したデバイス同士は、次回から電源を入れるだけで自動的に接続できる。

特徴は以下の通り。

  • 鍵は一時的にデータの暗号化に用いる
  • 鍵は再利用しない

ペアリングの種類は認証の有無で分けると以下の2種類がある。

  • 認証ペアリング ... 中間者攻撃のリスクはないペアリング
  • 未認証ペアリング ... 中間者攻撃のリスクがあるペアリング

また鍵の種類で分けると以下のようになる。

  • Bluetooth Classicのペアリング
  • Simple Secureペアリング(Simple Secure Pairing) ... ECDH(楕円曲線ディフィ・ヘルマン)アルゴリズムの公開鍵交換方式を利用し交換される
  • PINペアリング ... 数字で最大16桁の暗証コードを打ち込むことで認証する
  • BLEのペアリング
  • Legacyペアリング(LE Legacy Pairing) ... BLE4.0で導入されたもので鍵(128Bit)は無線で平文交換される
  • LESCペアリング(LE Secure Connections) ... BLE4.2以降で導入。鍵は有線で公開鍵暗号方式を利用し交換される

ボンディング

ペアリングで交換した鍵を保存し次同じ相手と接続するときはペアリングせずに前回の鍵を再利用するもの。

3.2. BLEの基礎知識

3.2.1. BLEとは

Bluetooth Low Energy(BLE)は省電力で動作するBluetooth通信の規格。 バージョン4.0から実装された。

BLEはiPhoneをはじめとしたスマートフォンを筆頭に、その性能を活かし、ビーコンと呼ばれる小型のセンサーなどにも活用されている。 具体的にはスマートIoTデバイス、フィットネスモニター機器、キーボードなど、主にバッテリー駆動のアクセサリーなどでよく使われてる

3.2.2. BLEの通信方式

BLEの各種パラメータは以下の通り。

パラメータ
標準規格 Bluetooth 4.0以降
周波数帯 2.4GHz
変調/拡散 GFSK方式/周波数ホッピング
チャネル 2MHz帯40チャネル(一部のバージョンでは広告チャネルとデータチャネルが異なる)
通信距離 一般的に数メートルから10メートル程度
通信速度 125Kbpsから2Mbps(データレートは選択可能)

FSK ... デジタル信号を搬送波の周波数偏移に変えて通信する方式

GFSK ... 入力信号を正規分布型フィルタを十sて通信利用帯域を抑える方式

またBLEはユニキャスト通信とブロードキャスト通信に対応している。

3.2.3. BLEのセキュリティ認証手法

Legacy Pairingのフェーズ

鍵が交換されるLegacyペアリングのフェーズは以下の通り。

BLESecurity

ペアリングの方法

LegacyペアリングではJust WorksPassKeyOut Of Bandのいずれか1つ、LESCペアリングでは下記4つのいずれか1つが使用可能となっている。

  • Just Works ... デバイスの選択のみで双方認証しないもの
    • 特徴: 平文であるため盗聴により暗号鍵(STK)がわかる
    • 最も一般的なペアリングの方法
  • PassKey ... セントラルが作成した6桁のランダム認証コード
    • 特徴: PassKeyをデバイス側に入力させて認証する
  • Out Of Band ... BLE以外(RFIDなど)の通信手段で認証
  • Numeric Comparison ... 接続時に毎度ランダムな数字をセントラル/ペリフェラルで表示し同じであるならばボタンを押すなどして認証
    • 特徴: デバイスに表示/入力機能がある場合に使用される

3.2.4. BLEのプロトコルスタック

BLEのアーキテクチャはアプリケーション層ホスト層コントローラ層に分けられる。

BLE

BLEのプロトコルにはATTGAPGATTがある。

またBLEでは属性(アトリビュート)という単位でデータを処理している。 属性は以下内容からなり、属性を複数組み合わせることでGATTデータベースを作成する。

  • Attributeハンドル(2Byte) ... 通し番号
  • Attributeタイプ(2or16Byte) ... UUIDでService,Characteristicを表す
  • Attribute値(0~512Byte) ... アプリケーションレイヤが使用するデータ
  • Attributeパーミッション ... Read,Writeの許可(permission)属性

ATT(アトリビュートプロトコル)

ATTは属性(アトリビュート)のやり取りを行うプロトコル。

GAP(汎用アクセスプロファイル)

GAPはアドバタイズメント、通信の役割(セントラル/ペリフェラルなど)など接続確立手順の内容(プロファイル)を表す。

GATT(汎用アクトリビュートプロファイル)

データベースにアクセスするプロトコル(ハッキングには最も重要となる)

3.2.5. GATT

GATTはChracateristicServiceの関連する情報を送受するプロトコル。

  • Chracateristic ... READ, WRITE, NOTIFYなどセントラrに公開するデータ処理属性
  • Service ... Chracateristicをまとめたラベル(ユーザ利用サービス名)
  • UUID ... ChracateristicとServiceの識別番号(16Bit)

3.2.6. BLEのセキュリティ認証手法

Legacy Pairingのフェーズ

鍵が交換されるLegacyペアリングのフェーズは以下の通り。

BLESecurity

Legacy Pairingのペアリングの方法

LegacyペアリングではJust WorksPassKeyOut Of Bandのいずれか1つ、LESCペアリングでは下記4つのいずれか1つが使用可能となっている。

  • Just Works ... デバイスの選択のみで双方認証しないもの
    • 特徴: 平文であるため盗聴により暗号鍵(STK)がわかる
    • 最も一般的なペアリングの方法
  • PassKey ... セントラルが作成した6桁のランダム認証コード
    • 特徴: PassKeyをデバイス側に入力させて認証する
  • Out Of Band ... BLE以外(RFIDなど)の通信手段で認証
  • Numeric Comparison ... 接続時に毎度ランダムな数字をセントラル/ペリフェラルで表示し同じであるならばボタンを押すなどして認証
    • 特徴: デバイスに表示/入力機能がある場合に使用される

3.2.7. BLEのセキュリティモードとレベル

BLEにはセキュリティモードが2つとそれぞれレベルが設定されている。

  • セキュリティモード1 ... ペアリングによる認証/暗号化の有無の組み合わせによる定義
    • レベル1 ... ペアリングせずセキュリティ機能なし
    • レベル2 ... 認証なしのペアリング/暗号化
    • レベル3 ... 認証ありのペアリング/暗号化
    • レベル4 ... ペアリングし鍵交換に楕円曲線ディフィー・ヘルマン鍵共有方式(ECDHE方式)を使用し暗号化
  • セキュリティモード2 ... データ署名による認証の有無の組み合わせによる定義
    • レベル1 ... 認証なしのペアリング/データ署名
    • レベル2 ... 認証ありのペアリング/データ署名

なおデータ署名は送信元が検証可能なパケットを送信元におくることを指す(ATTで実装される)

3.3. Bluetooth Classicの基礎知識

3.3.1. Bluetooth Classicとは

Bluetooth ClassicはBluetooth+HSとも呼ばれる24Mbpsの高速通信が可能となるBluetooth通信規格。 高速通信は無線LANの通信方式(PAL)を利用することによって実現している。

ペアリングやプロファイルなどは従来と同じBluetoothの仕様/プロトコル/周波数を用いており、必要に応じて下位のレイヤーを別の通信方式に切り替えるAlternate MAC/PHY(AMP)機能が搭載された。 内部的には低消費電力である従来のBluetoothとの連絡を保ちつつ、大量の通信が必要になった際にはIEEE 802.11無線LANに切り替えるようになっている。

主にワイヤレスヘッドホン、ワイヤレススピーカーなどのオーディオ分野で使用されている

3.3.2. Bluetooth Classicの通信方式

Bluetooth Classic(Bluetooth HF)の各種パラメータは以下の通り。

パラメータ
標準規格 IEEE802.15.1
周波数帯 2.4GHz
変調/拡散 GFSK方式/周波数ホッピング
チャネル 2MHz帯40チャネル(データ用: 0~36, AD用: 37~39)
通信距離 Classic1: 約100m, Classic2: 約10m, Classic3: 約1m
通信速度 125Kbps~24Mbps (実行速度は約10Kbps程度)

またBluetooth Classicはユニキャスト通信に対応している。

3.3.3. Bluetooth Classicのセキュリティモードとレベル

Bluetooth Classicにはモードが4つとそれぞれレベルが設定されている。

  • モード1 ... セキュリティ無しのモード
  • モード2 ... データ通信時に必要に応じて認証・暗号化を行う
  • モード3 ... 接続時に認証・暗号化を行う
  • モード4 ... 使用状況に応じて認証・暗号化を行う
    • レベル0 ... セキュリティ無し、ユーザー操作なし
    • レベル1 ... セキュリティ無し、ユーザー操作あり
    • レベル2 ... 暗号あり、認証なし
    • レベル3 ... 暗号あり、認証あり
    • レベル4 ... 高強度暗号あり、認証あり

なおほぼ全ての Bluetooth classicの製品はモード4として実装されている

3.4. BlueToothの脆弱性

3.4.1. KNOB攻撃

KNOB攻撃は2019年8月に発表された暗号化通信の鍵を1Byteにすることで、暗号化通信の鍵を容易に特定することができる**Bluetooth Classicの脆弱性を悪用した攻撃。

この脆弱性を悪用すると、暗号鍵を強制的に1バイトに制限することができてしまうためブルートフォース攻撃によって暗号鍵を容易に特定することが可能になる。 そのため中間者攻撃のリスクがある。

この脆弱性は後にマイクロソフト社やアップル社などからセキュリティパッチが提供された

POC: https://github.com/francozappa/knob

3.4.2. Blueborne

BlueBorne、2017年9月に公表されたBluetoothの脆弱性の総称。

攻撃者がこの脆弱性を悪用すると、ペアリングの仕組みを使わずともデバイスと接続できるようになり、マルウェア感染や乗っ取り、個人情報の窃取などの被害を受ける可能性がある。 脆弱性の発覚後、対応するアップデートが提供された

3.4.3. BlueFrag

BlueFragは2020年2月に報告されたAndroidにおける脆弱性でAndroid 8.0系、8.1系、9.0系での存在が確認された

この脆弱性があるデバイスでBluetoothが有効になっていると、近くの攻撃者がデバイスのMACアドレスを推測し、不正にアクセスすることでデバイスの管理権限を乗っ取ることが可能となる。

なおセキュリティパッチはすでにリリースされた

3.4.4. Apple Bleee

Apple Bleeeは2019年7月に報告されたApple製品におけるBluetoothの脆弱性。 iPhoneなどに実装されているBLEが持つ、常時データの送受信が可能である仕様を悪用したものとなっている。

この脆弱性では攻撃者はターゲットの電話番号やiOSのバージョンなどを盗み見ることができる。 iPhone 5S以降、またはiOS 11以上のiPhoneに関して注意が必要となる。

3.5. BlueToothの操作シェル/セキュリティツール

3.5.1 通常のLinuxコマンド

systemctl start bluetooth

systemctl start bluetoothはBlueTooth機能を有効化するコマンド。 GUI上での起動が安定しないことから使用される。

l2ping

l2ping <MACアドレス>はBluetoothデバイスが通信可能であるかどうかを確認したり、通信の遅延を測定したりすることができるコマンド

3.5.2 BlueZ

BlueZはOSSのBluetoothプロトコルスタック設定/制御ソフトウェア。 シェルからBlueZを操作するコマンドであるhciconfighcitoolhcidumpなどが含まれる。

BlueZ http://www.bluez.org

コマンド 説明
hciconfig 端末のBluetoothインターフェイス確認
hciconfig <インターフェイス> Bluetoothインターフェイスの起動/停止
hcitool Bluetooth機器の検出/スキャン
hcitool lescan ビーコンでアドバタイズしているBluetoothをスキャンする
hcitool lecc 端末とBluetooth機器の接続
hcitool scan 既に接続中のBluetoothを確認
hcidump Bluetoothパケットキャプチャ

3.5.3 BtleJuice

BtleJuiceはWebプロキシ利用のBLEの中間者攻撃/リプレイ攻撃用のツール

Github: https://github.com/DigitalSecurity/btlejuice

3.5.4 BtleJack

BtleJackはmicro:bitの利用前提のCLIのBLEハッキングツール。 機能としてはBLEパケットキャプチャ/スニッフィングに対応している。 またジャミングによるハイジャックも可能

micro:bitとは https://sanuki-tech.net/micro-bit/overview/about/

Github: https://github.com/virtualabs/btlejack

3.5.5. Crackle

CrackleはBLE暗号化の復号化を行える、BLEレガシーペアリングに基づいて接続をキャプチャした場合に適したツール。

Github: https://github.com/mikeryan/crackle.git

3.5.6. BetterCap

BLEのデバイスのペネトレーションテストに使用できるツール。

# BLEビーコンのリスニングを開始
sudo bettercap --eval "ble.recon on"
# Wait some time
ble.show # BLEデバイス一覧の表示
ble.enum <MACアドレス> # This will show the service, characteristics and properties supported

# Write data in a characteristic
ble.write <MACアドレス> <UUID> <HEX DATA>
ble.write MACアドレス> ff06 68656c6c6f # Write "hello" in ff0

3.6. UberTooth One

3.6.1. UberTooth Oneとは

UberTooth OneはBluetoothデバイスのセキュリティとプロトコルの解析を行うためのOSSワイヤレスツール。以下のことが可能。

  • Bluetoothモニタリング
  • Bluetoothパケット解析
  • Bleutoothセキュリティのテスト

3.6.2. UberToothを使用する

詳しくはコチラから。

BLEデバイスのスキャン

BLEデバイスは以下コマンドでスキャン可能。

sudo hcitool lescan

BLEデバイスの表示例

D5:AA:D0:41:A3:60 Mi Smart Band 4
78:A5:04:62:71:3D TepHeatB

BLEのスニッフィング

BLEデバイスのスキャンで得たBlueTooth Device Addressを指定することでデバイス間通信をキャプチャできる。

ubertooth-btle -f <BD_ADDR>
ubertooth-btle -f <BD_ADDR> -c <FilePath> #Fileに書き込む場合

WiresharkでBLEをキャプチャする

  1. ターミナルでmkfifo /tmp/pipe
  2. WireSharkを開く
  3. 「キャプチャ=>オプション」を選択
  4. 「Manage Interfaces」を選択
  5. 「新規」を選択し「パイプ」に「/tmp/pipe」と入力
  6. 「保存」「閉じる」
  7. 「/tmp/pipe」を選択して「開始」を選択
  8. ターミナルでubertooth-btle -f -c /tmp/pipeを実行
  9. うまくいかない場合は/tmp/pipeの実行/読み取り権限などを付与

UberToothスペクトルアナライザを使用する

2.4GHz帯を解析するツールであるスペクトラムアナライザを使用できる。

ubertooth-specan-ui

スペクトル

  • 緑色の振幅: 異なるチャネルの複数の 802.11b ネットワークの電波
  • 白い振幅: スキャン中に表示されるビーコン