
Linux/BlueZ上でのBluetooth Low Energyセキュリティテスト用の単一Goバイナリ:スキャン、GATTの列挙、読み取り/書き込み/通知、キャラクタリスティックのファジング、およびJSON出力を伴う構造化された評価の実行。
Linux/BlueZ上でのBluetooth Low Energy評価ワークフロー全体を1つのGoバイナリに統合: スキャン、列挙、読み取り/書き込み/通知、ファジング、構造化セキュリティ評価を、スクリプトやエージェント向けのJSON出力とともに提供。
Caeruleusは、Bluetooth Low Energy (BLE) のセキュリティテストを、Linux BlueZスタック上に構築された単一のGoバイナリに統合します。BlueZ D-Busと生のL2CAP/HCIソケットを介してペリフェラルと通信し、ライフサイクル全体をカバーします: デバイスの検出、GATTツリーの閲覧と読み取り/書き込み、通知のキャプチャ、書き込み可能なキャラクタリスティックのファジング、そして再現可能なセキュリティ評価ワークフローの実行。すべてのコマンドは、スクリプト、レポート、LLMエージェント向けに構造化された-o json / -o jsonl出力を生成します。
攻撃的セキュリティエンジニアによって、よくあるbettercap、gatttool、hcitool、bluetoothctl、そしてその場限りのBleakスクリプトの山を置き換えるために作られたCaeruleusは、抽象化を人間やエージェントが実際に作業するレベルに保ちます。
caeruleus: ラテン語でBluetooth Low Energyの「blue」を意味する
BLEセキュリティテストの標準的なワークフローは、そもそも連携するようには設計されていないツールを渡り歩く宝探しのようなものです:
hcitool / hciconfig — アダプタ設定と検出用。どちらもBlueZで非推奨とされ、多くのモダンなディストリビューションには存在しません。bettercap — ble.reconとble.enum用。強力ですが、GATTツリーを閲覧するためだけに完全なネットワーク攻撃フレームワークをインストールすることになります。gatttool — ハンドルの読み書き用。何年も非推奨ですが、いまだにすべてのチュートリアルに登場します。それぞれが独自の方言を話し、次のステップにパイプできる機械可読な出力を出すものはありません。そのため、あなた自身が統合レイヤーとなり、MACアドレスとハンドルをターミナル間で手作業でコピーすることになります。BlueZ自身がサポートするフロントエンド(bluetoothctl、btmgmt)は汎用の管理ツールであり、評価作業には適さない抽象化レベルを想定しています。
Caeruleusはその山全体を、一貫した単一のコマンドサーフェスに置き換えます:
| ユースケース | 従来の方法 | Caeruleusの場合 |
|---|---|---|
| 近くのデバイスを検出 | hcitool lescan / bettercap ble.recon / bluetoothctl scan on | caeruleus scan |
| サービス/キャラクタリスティックの一覧表示と読み取り | bettercap ble.enum <mac> | caeruleus enumerate -b <mac> --values |
| 対話セッション | gatttool -I / bluetoothctl | caeruleus shell -b <mac> |
| ハンドルの読み取り | gatttool --char-read-hnd 0x0013 | caeruleus read -b <mac> -a 0x0013 |
| ハンドルへの書き込み | gatttool -b <mac> --char-write-req -a 0x002c -n $(...) | caeruleus write -b <mac> -a 0x002c --req -s "value" |
| 通知のキャプチャ | カスタムBleakロガー | caeruleus listen -b <mac> -a <handle> |
| 未認証の露出を監査 | カスタムBleak監査スクリプト | caeruleus recon / caeruleus assess ... |
| キャラクタリスティックのファジング | カスタムファザー / boofuzz | caeruleus fuzz write -b <mac> -a <handle> |
| 接続パラメータ、MTU | hcitool con / btmgmt con-info | caeruleus conn-params -b <mac> |
| アダプタの電源と復旧 | btmgmt power / hciconfig reset / rfkill | caeruleus doctor / caeruleus adapter power cycle |
どこでも構造化出力。 出力を生成するすべてのコマンドは-o text|json|jsonlをサポートします。JSONは二次的なエクスポートではなく正規の表現です。jsonlはscan --liveとlisten向けにイベントごとに1レコードをストリーム出力します。enumerate --compactはgrepやLLMのコンテキストウィンドウ向けに、キャラクタリスティックごとに1行のkey=valueを出力します。
BLEスタックの健全性。 caeruleus doctorはBlueZとカーネルの状態を調べ、OK/WARN/FAILのチェックリストを表示します: bluetoothdの実行、アダプタの電源投入、リークした検出セッションの有無、BlueZキャッシュのアドレスとMGMTチップのライブアドレスの比較、2秒間のライブスキャンプローブ、安全な帯域でのExchangeMTU。OK以外の所見にはそれぞれ具体的な修正コマンドが付き、終了コードはgrep/diffの慣例に従います(0でクリア、失敗時は2)。
クリーンな切断処理。 SIGTERM/SIGHUPを受けると、ツールは切断パスを実行し、Connected=falseがBlueZを通じて伝播するまでポーリングします。これにより、ペリフェラルは監視タイムアウトまで停止するのではなく、即座に再アドバタイズします。クラッシュ後の「ゴースト接続」はもうありません。
スクリプティングと自動化。 serve/sendはUnixソケット上で1つのGATTリンクを開いたままにするため、スクリプトやエージェントはコマンドごとの約1.5秒の再接続コストを回避できます。batchは単一の永続接続上でstdinからコマンドを実行します。listen --trigger-valueは通知を設定し、書き込みを発火させ、応答をアトミックにキャプチャします。
便利な細部。 GAP Appearanceとアドバタイズされたサービスからのデバイスタイプ推論(ウォッチは生のappearanceコードではなく「Smartwatch」と表示されます)。寛容な入力パース(ハンドルは0x002a、0X2A、42として。16進数はdeadbeef、de:ad:be:ef、0xdeadbeefとして)。caeruleus recipesは19の一般的なワークフローを一覧表示しキーワード検索します。conn-paramsは、gatttoolもbettercapも公開しない、ネゴシエートされたインターバル、レイテンシ、監視タイムアウトを表示します。
CaeruleusはLLMエージェントを第一級のユーザーとして扱います。-o json / -o jsonlは、エージェントが人間向けに整形されたテーブルをスクレイピングすることなくパースできる、トークン効率の良い構造化出力を提供します。また、リポジトリにはポータブルなAgent Skill(skills/caeruleus/SKILL.md)が同梱されており、Agent Skills互換のあらゆるアシスタントにコマンドサーフェスと推奨される評価方法論を教えます。エージェントをデバイスに向ければ、方法論全体をエンドツーエンドで実行します。
私たちのベンチマークでは、Caeruleusとそのスキルを使ったOpus 4.8 (xHigh)は、同じモデルが自由にツールを選んだ場合(hcitoolやBleakスクリプトに手を伸ばした)の62%の時間と70%のトークンでタスクを完了しました。
CaeruleusはBlueZ (bluetoothd) を備えたLinuxと標準的なBLEアダプタを対象としています。macOSやWindowsではビルドも実行もできません。一部の生ソケットコマンドはrootを必要とします。
Goツールチェーンを使う場合:
go install github.com/praetorian-inc/caeruleus/cmd/caeruleus@latest
ビルド済みリリースバイナリ (x86_64とarm64): Releasesページから自分のアーキテクチャ用のアーカイブをダウンロードし、展開してcaeruleusを$PATHに配置します。
ソースから:
git clone https://github.com/praetorian-inc/caeruleus
cd caeruleus
make build # -> ./caeruleus
make test # unit tests + shell tests
アダプタを健全性チェックし、近くにあるものを検出します:
$ caeruleus doctor
adapter: hci0
[ OK] bluetoothd active
[ OK] Powered true
[ OK] Discovering false
[ OK] Address agreement 00:1A:7D:DA:71:13
[ OK] LE scan healthy saw advertisements
[ OK] ExchangeMTU 247
$ caeruleus scan
ADDRESS TYPE RSSI DEVICE NAME
------------------------------------------------------------
9C:9C:1F:F2:88:86 public -32 BLECTF_JohnsonSpace
C4:C0:B0:3B:5B:EF random -59 Aranet4 06D4B
DC:FD:B4:CA:B4:E9 random -62 JBL Boombox 2
GATTツリー全体を閲覧し、すべてのキャラクタリスティックを一度に読み取り、その後個々のハンドルを操作します:
$ caeruleus enumerate -b 9C:9C:1F:F2:88:86 --values
SVC HND CHR HND CHR UUID PROPS HEX ASCII
0x0014 0x0015 0x2A00 R 424c457b46... BLE{F4K3_1D3NT1TY}
0x0028 0x002d 0xFF03 R 424c457b50... BLE{T0K3N_S4V3R}
0x0028 0x002f 0xFF05 R,W 577269746... Write anything here
$ caeruleus read -b 9C:9C:1F:F2:88:86 -a 0x002d
0x002d hex=424c457b503447335f5455524e33527d ascii="BLE{T0K3N_S4V3R}"
$ caeruleus write -b 9C:9C:1F:F2:88:86 -a 0x002f -s "praetorian"
0x002f written=10 type=request
対話的なshell (gatttoolスタイルの動詞)、stdinのbatchモード、そしてserve/sendのウォームリンクデーモンは、多数の操作にわたって1つの接続を保持する必要があるときに利用できます。
| グループ | コマンド |
|---|---|
| 検出 | scan, enumerate, primary, characteristics |
| GATT操作 | read, write, raw-write, listen, cccd, mtu |
| 接続管理 | pair/unpair, conn-params, disconnect, forget |
| スクリプティングと自動化 | shell, batch, serve/send |
| セキュリティ評価 | recon, assess check-auth, assess encryption, assess pairing, assess wwr, assess dfu |
| ファジング | fuzz write (--rawを含む), fuzz replay |
| アダプタと診断 | doctor, adapter, bdaddr, monitor |
すべてのコマンドのグローバルフラグ: -b/--bdaddr、-i/--adapter (デフォルトhci0)、-t/--timeout、-o/--format、-q/--quiet、-v/--verbose。特権コマンド(conn-params、monitor、fuzz write --raw、cccd --raw、raw-write、mtu --set、bdaddr --set)はrootを必要とします。