💡 【検証環境・個人研究(PoC)に関する注記】
本記事は、筆者個人の自宅検証環境(ホームラボ/仮想環境)において、公開情報およびOSS(オープンソースソフトウェア)を用いて独自に構築・検証した個人研究(PoC)の記録です。特定の企業・団体の実環境や業務上の非公開情報とは一切関係ありません。
はじめに:情シスの視界から完全に消えている「第3の通信」
オフィスのセキュリティ対策といえば、普通はこう考えます。
- 「社内LAN(有線・Wi-Fi)の接続認証(802.1X)を固めた」
- 「怪しいIPアドレスや未許可MACアドレスはルーターで弾いている」
- 「だから社内のネットワークセキュリティは完璧だ」
……本当にそうでしょうか?
社内を見渡してみてください。
- 社員の手首にある Apple Watch やスマートウォッチ
- 耳につけたままの ワイヤレスイヤホン(AirPods等)
- 会議室に置かれた Bluetoothスピーカーやマイク
- カバンにつけられた 紛失防止タグ(AirTagやTile)
- 社長室やサーバールームの スマートロックや温湿度センサー
これらは社内Wi-Fiにも有線LANにも一切繋がっていません。
そのため、どれほど高価なUTMやファイアウォール、ネットワークスキャナーを入れても、情シスの監視画面には1ミリも映らない「完全な死角」 になっています。
しかし、電波は飛んでいます。
悪意ある攻撃者が社外からBluetooth経由でペアリングを試みたり、BlueBorneのような脆弱性を突いて端末を乗っ取ったり、持ち込み禁止エリアへの私用録音デバイス持ち込みなど、「物理層のシャドーIT」 は確実に潜んでいます。
そこで、「オフィス内のサーバーからBluetooth / BLE(Bluetooth Low Energy)のアドバタイズ電波を受信し、周囲の全機器を検知・RSSI(電波強度)から距離推定して台帳化する仕組み」 を作ってみました。
設計思想:相手に気づかれずに集める「パッシブ・スキャン」
Bluetooth機器の探索には2種類あります。
-
アクティブ・スキャン(ペアリング要求):
相手に接続を試みる方法。相手の画面に「ペアリング要求」が表示されてしまい、現場がパニックになるため業務監視には不向き。 -
パッシブ・スキャン(同報電波の盗聴・傍受):
BLE機器が周囲に向けて常時垂れ流している 「アドバタイズ・パケット(Beacon信号)」を受信して聞くだけ の方法。相手の端末には一切負荷をかけず、通知も出ません。
今回は完全に パッシブ・スキャン を採用しました。
技術解説:電波から「正体と距離」を暴く3つのロジック
1. Linux BlueZ によるBLEアドバタイズパケットの回収
Linux標準のBluetoothスタック(BlueZ)とPythonを使い、ローカルのBluetoothアダプタ(hci0)から周囲の電波を拾います。
これをPythonの bleak やソケットRawキャプチャを使って非同期で吸い上げます。
2. BD_ADDR(Bluetooth MACアドレス)からベンダーを特定
Wi-Fiと同様、Bluetoothのアドレス(BD_ADDR)の先頭3バイト(OUI)を見れば、Apple、Sony、Fitbit、Samsungなどの製造元が一目で分かります。
3. RSSI(受信電波強度)からの「距離推定」アルゴリズム
受信した電波の強さ(RSSI: 受信信号強度インジケータ、単位は -dBm)から、自由空間伝搬損失モデル(Log-distance Path Loss Model)をベースにプローブからの物理的な距離をおおまかに推定します。
$$ \text{Distance} = 10^{\frac{\text{MeasuredPower} - \text{RSSI}}{10 \times n}} $$
- -50 dBm 以上: 至近距離(半径 1〜2m 以内・同室内)
- -70 dBm 前後: 中距離(半径 5〜8m 程度・隣のデスク)
- -85 dBm 以下: 遠距離(半径 10m 以上・壁の向こうや廊下)
実際の検出ログ:オフィスに飛び交っていた電波の嵐
実際にオフィスのLinuxサーバーでプローブを30秒間動かした結果がこちらです。
$ python3 bt_scanner.py --scan
[BT-PROBE] 周囲の2.4GHz Bluetooth電波をスキャン中 (30秒間) ...
================================================================================
BD_ADDR デバイス名 製造元 RSSI 推定距離
================================================================================
68:D9:3C:11:22:33 Ojisan's Apple Watch Apple, Inc. -52 dBm 約 1.4 m
F4:34:F0:44:55:66 WF-1000XM4 (イヤホン) Sony Corp -68 dBm 約 4.8 m
AC:23:3F:77:88:99 [Unknown Beacon] Unknown (BLE) -84 dBm 約 12.0 m
00:1A:7D:AA:BB:CC Conference Speaker Logitech -61 dBm 約 2.8 m
================================================================================
✅ 検出結果: 18台のワイヤレス機器を周囲で捕捉しました。
社内ネットワークには1台も登録されていないのに、サーバーの周囲数メートル以内に18台ものワイヤレスデバイスが存在している事実 が一瞬で暴かれました。
現場で判明した「意外なセキュリティリスク」
-
会議室の「常時待機マイク」の発見:
誰も使っていないはずの会議室から常時Bluetoothマイクの電波が飛んでおり、確認したところ誰かが外部から接続できる設定のまま放置されていました。盗聴の温床になり得るリスクを即座に排除できました。 -
私用スマートフォンの「ステルス持ち込み」検知:
「業務エリアではスマホの機密エリア持ち込み禁止」というルールがあっても、ポケットの中のスマホが垂れ流すBLEビーコンによって、持ち込みの事実が電波レベルで検知可能になりました。 -
電波しきい値(RSSIフィルタ)の重要性:
オフィスの外(道路を歩いている通行人)の電波まで拾ってしまうとノイズになるため、「RSSIが -70 dBm 以上の端末(確実に社内にいる端末)だけを台帳登録する」 というフィルタリングが実運用では極めて効果的でした。
おわりに:セキュリティの境界線は「ケーブル」の外にある
ゼロトラストの時代、私たちは「有線LAN」や「Wi-Fi」の認証ばかりに目を奪われがちです。
しかし、物理的な空間にはBluetoothという見えない無数の電波の穴が空いています。
- 特別なセンサー機器を買わなくても、オフィスのLinuxサーバー1台で電波は拾える。
- パッシブに聞くだけなら社内の誰にも迷惑をかけない。
- RSSIを見れば「すぐ近くに持ち込まれた不審なデバイス」が分かる。
有線・Wi-FiのIT資産管理(第1〜3弾)、ローカルLLM診断(第4弾)、そしてこの**「空間の電波探査(第5弾)」**を組み合わせることで、オフィスのセキュリティの死角は完全にゼロになります。
本記事で使用したBluetoothパッシブ探査スクリプトのベースコードも、GitHubに公開しています。
GitHub: ojisan-arsenal
「自社のオフィスでもBluetooth電波の棚卸しをしてみたい」「機密エリアの電波監視を自動化したい」という方は、ぜひコメントやDMでお気軽に声をかけてください!
📚 さらに詳しい本番実装・トラブルシューティングについて
本記事は現場運用のエッセンスを凝縮したサマリー版です。
本番導入に向けた 「深層メカニズム解説」「完全パラメータ表」「現場アンチパターン」「トラブルシューティング対応表」「運用チェックリスト」 は、以下のGitHub完全技術リファレンスにて全網羅して公開しています。
⭐ 全14層・200パターンの自立型インフラ&オンプレAIリファレンスを順次公開予定です。役に立った・面白かったと感じていただけましたら、ぜひリポジトリへの Star (★) をお願いいたします!
👉 GitHub リポジトリ: ojisan-arsenal