LANに置く専用センサーノード「RoamSwitch Sensor」
RoamSwitch Sensor は、LANに置く専用ノードから、同じLAN上のRoamSwitch端末(Mac / Linux Client / Server Edition)をその端末の外側から監査します。ホスト自身の自己診断では原理的に見えない「同じLANの別の機器からどう見えるか」(開いているポート、認証なしで露出したサービス、横移動の足がかり)を確認します。あわせて、LAN上の機器台帳とARPなりすまし検知も提供します。
🛡️ 能動的脆弱性監査(ペアリング済み端末が対象)
全ポート走査 → 既知シグネチャ診断(Redis/dockerd/Memcached/MongoDB/Elasticsearch/CouchDB/Jenkins/VNCの認証なし露出、SMBv1・署名なし、RDPのNLA未強制、SMTPオープンリレー等)→ 汎用バナー取得 → nmap NSE補完診断の4フェーズ構成。破壊的操作は一切行いません。
📋 ネットワーク構成の把握(能動ARPスイープ)
LAN上の機器をARPスイープで洗い出します。IP・MAC・ホスト名・ベンダー・オンライン状態・初回/最終検出・IP履歴を台帳化し、機器ごとに名前・用途などを自由記述で登録できます。メモ未登録の機器は「要確認」として目立たせるため、機器台帳との突き合わせに使えます。nmapが未導入の場合は、Sensorが通信した機器のみを表示する受動モードに戻ります。
👁️ ARPイベントと「次にやること」
新規機器の出現と、既知IPに対するMACの変化(ARPなりすましの兆候)を、発生時刻・重大度(致命的〜情報)・判断の根拠・関係する機器の素性・具体的な確認手順つきで提示します。ゲートウェイIPのMAC変化は「致命的」として扱います。オプトインの受動キャプチャを有効にすると、単一機器による多数IPへのARP要求(LAN内偵察)も検知します。
🔎 LAN上の他機器の把握と不審な挙動(すべて検知のみ)
MACのベンダー・機器分類、mDNS/SSDP/DHCPの自己申告による機種特定、既知の悪性IPや管理用ポートへの接続、ボットネット化・DDoS参加の兆候(多数の宛先への接続)、DNSトンネリング/C2の兆候を参考情報として提示します。多くはミラーポート等の受動キャプチャ設定(オプトイン)が必要で、Sensorが通信を遮断することはありません。
🔑 ペアリングコード方式(Ed25519・固定IP・証明書ピン)
初期状態では何も信頼しません。Sensorオペレーターが発行する10分間有効の使い捨てペアリングコードを、端末側でSensorの固定IPアドレスおよびSensorの画面に表示される証明書フィンガープリントとあわせて入力することで、双方向の信頼が1回の操作で成立します。公開鍵は自動的に交換されるため、事前に知る必要はありません。クラウドへの登録・アカウント作成は不要です。
🔐 制御APIの防御(TLS 1.3・証明書ピン・リプレイ防止)
端末との制御通信(TCP 50543)は、TLS 1.3で受け付けます(control.tls: off / optional(既定)/ required)。証明書は自己署名で、信頼はSensorの画面に表示されるフィンガープリントを端末側で固定(ピン留め)して決め、ネットワーク経由での自動取得はしません。監査リクエストの署名は時刻とnonce付きのv2形式で再送を拒否し、ペアリングコードの総当たりや署名の失敗は送信元IPごとにロックアウトされます。旧形式(v1)署名の受理可否や待ち受けIPも設定できます。
🖥️ すべての機能を操作できる10言語のTUI
対話型TUIは、CLIのすべてのサブコマンド、デーモンのIPC、すべての設定キー(設定エディタ・TLS状態と証明書の再生成・手動ペアリング・通知テスト)、コレクター運用、すべてのイベント画面(受動監視・IoT挙動・不審な通信・脆弱性情報を含む)を、10言語で操作できます。CLIは日本語と英語です。監査レポートとエクスポートも10言語で出力できます。
📅 定期監査と前回との差分(オプトイン)
ペアリング済み端末を定期的に自動監査し、前回との差分(新規検出・解消・新たに開いたポート)を表示します。以前開いていたポートが全て見えなくなった場合は「解消」ではなく「到達不能の疑い」として扱います。無人の監査でも、端末が最後に認証したときのMACアドレスを監査の前後で確認し、IPアドレスが別の機器に渡っていれば監査しません。既定では無効で、実行間隔と実行してよい時間帯を設定します。
📣 通知と監査証跡(オプトイン)
リグレッション・新規機器・ARPなりすましなどを、Webhook(Slack・Discord・Teams等)とsyslog(RFC 5424)へ通知できます。ペアリング・解除・監査・設定変更は、実行者付きで改ざん検知つきの操作ログ(ハッシュ連鎖)に記録され、監査結果・機器台帳・操作ログをCSV・JSON・HTMLレポート(ブラウザでPDF保存)で書き出せます。通知の送信先はすべて運用者が設定したものだけで、既定では機器情報も監査結果も送信しません。検知用データ(CVEマップとnmap NSEデータベース)は更新サービスから毎日取得しますが、updates.fetch_cve_map で停止でき、この通信に機器・監査データは含まれません。
🗂️ 複数Sensorの集約(中央コレクター・オプトイン)
複数拠点にSensorを置く組織向けに、署名付きの要約を集める中央コレクターを同梱しています(既定では無効)。拠点別に状況を確認するダッシュボードとCSV出力を備え、Sensor側の監査ログの切り詰め・巻き戻しも検知します。RoamSwitch未導入の機器(管理外デバイス)は「未ペアリングのRoamSwitchホスト」か「不明な機器」かに分類して要約に含められます(collector.send_unmanaged_devices。通信内容は含みません)。登録したSensorの署名付きリクエストだけを受け付け、TLSなしでLAN外へ公開することはできません。
🚨 不正なDHCPサーバー・IPv6ルーターの検知(検知のみ)
1時間ごとに、ランダムなMACからDHCP(IPv6はDHCPv6)の探索パケットを1つだけ送り、応答したサーバーをすべて数えます(IPアドレスの貸出しは受けません)。あとから増えたサーバー、正規と違うゲートウェイやDNSを配るサーバー、IPv4のゲートウェイ以外が出すIPv6ルーター広告、IPv6アドレスの持ち主の入れ替わり(NDPなりすまし)、IPv4では見えずIPv6でだけ見える機器を知らせます。機器台帳はIPv6アドレスにも対応しました。Sensorが通信を遮断することはありません。
🔎 RoamSwitch未導入機器の軽量監査(オプトイン・接続確認のみ)
ペアリングしていないプリンター・カメラ・NASなどについて、運用者が許可した範囲に限り、決まったポートへの接続確認とサービスが自分から送る表示の読み取りだけを行います。ログインの試行や脆弱性の悪用はせず、OpenVASのような深い診断は、合意した(ペアリングした)端末にしか行いません。有効にするには承認者の記録と対象範囲の設定が先に必要で、実行のたびに承認の記録が監査ログに残ります。
🔒 紛失・盗難・廃棄したときの失効とロックダウン
コレクターで失効させると、そのSensorは次の送信で自分で停止し、ペアリング・監査・送信・通知をすべて止めます(停止は再起動後も続きます)。鍵と保存データを消去する設定、コレクターに長期間つながらないと停止する設定、廃棄用のコマンドもあります。ペアリングしていた端末の一覧と解除手順も表示します。
Sensor自体への攻撃対策が必要な場合は、同一マシンにRoamSwitch for LinuxのServer Editionを別途インストールすることを推奨します。両者は独立したプロセスとして共存できます。
監査レポートの出力例
roamswitch-sensor export all --format html(TUIでは e キー)で書き出せるレポートの例です。単体のHTMLファイルなので、ブラウザで開いて「PDFとして保存」すれば、監査人へ提出できるPDFになります。
RoamSwitch Sensor 監査レポート
| 作成日時 | 2026年9月20日(日) 11:30:12 (UTC+9) |
|---|---|
| 拠点 | 本社 3Fサーバールーム |
| Sensor 公開鍵 | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| 監査ログ | 整合性検証: 正常(改ざんなし) — 18 件, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
端末ごとの最新監査結果
| 端末 | アドレス | 実行日時 | 検出 | 開放ポート |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | 2026年9月20日(日) 11:00:43 (UTC+9) | 1 件 | 2 |
| db-prod-01 | 192.168.20.22 | 2026年9月20日(日) 11:01:14 (UTC+9) | 2 件 | 3 |
| dev-laptop-07 | 192.168.20.35 | 2026年9月20日(日) 11:02:07 (UTC+9) | 問題なし | 1 |
検出事項
| 日時 | 端末 | ポート | 内容 | 推奨対応 |
|---|---|---|---|---|
| 2026年9月20日(日) 11:01:14 (UTC+9) | db-prod-01 | 22 | SSH バージョンバナー公開 このSSHサーバーは接続時にバージョンバナーを公開しています。バナー自体は正常な動作ですが、攻撃者が既知の脆弱性を絞り込む手がかりになります。 | SSHを最新版に更新し、必要に応じてバナーの内容を最小化してください。 |
| 2026年9月20日(日) 11:01:14 (UTC+9) | db-prod-01 | 6379 | 既知の脆弱性: CVE-2021-32626 (Redis) NVDの説明(英語原文): Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Redis を CVE-2021-32626 の影響を受けないバージョンへ早急にアップグレードし、それまでは認証なしでのネットワークアクセスを制限してください。 |
| 2026年9月20日(日) 11:00:43 (UTC+9) | web-prod-01 | 22 | SSH バージョンバナー公開 このSSHサーバーは接続時にバージョンバナーを公開しています。バナー自体は正常な動作ですが、攻撃者が既知の脆弱性を絞り込む手がかりになります。 | SSHを最新版に更新し、必要に応じてバナーの内容を最小化してください。 |
| 2026年9月19日(土) 17:33:18 (UTC+9) | db-prod-01 | 22 | SSH バージョンバナー公開 このSSHサーバーは接続時にバージョンバナーを公開しています。バナー自体は正常な動作ですが、攻撃者が既知の脆弱性を絞り込む手がかりになります。 | SSHを最新版に更新し、必要に応じてバナーの内容を最小化してください。 |
機器台帳(LAN上で観測した全機器)
| MAC | IP | ホスト名 | ベンダー | RoamSwitch管理 | メモ |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | 管理外 | 本社ゲートウェイルーター |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | 管理外 | 3F Wi-Fiアクセスポイント | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | 管理外 | 2F 複合機 | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | 管理下 | 本番Webサーバー | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | 管理下 | 本番DBサーバー | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | 管理外 | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | 管理下 | 開発用ノートPC | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | 管理外 | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | 管理外 | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | 管理外 |
操作・承認ログ
| # | 日時 | 実行者 | 操作 | 対象 | 詳細 |
|---|---|---|---|---|---|
| 18 | 2026年9月20日(日) 11:02:07 (UTC+9) | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | 2026年9月20日(日) 11:02:05 (UTC+9) | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | 2026年9月20日(日) 11:01:14 (UTC+9) | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | 2026年9月20日(日) 11:01:12 (UTC+9) | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | 2026年9月20日(日) 11:00:43 (UTC+9) | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | 2026年9月20日(日) 11:00:41 (UTC+9) | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | 2026年9月19日(土) 18:11:40 (UTC+9) | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | 2026年9月19日(土) 18:11:32 (UTC+9) | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | 2026年9月19日(土) 18:10:02 (UTC+9) | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | 2026年9月19日(土) 17:47:19 (UTC+9) | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | 2026年9月19日(土) 17:46:52 (UTC+9) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | 2026年9月19日(土) 17:33:18 (UTC+9) | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | 2026年9月19日(土) 17:33:15 (UTC+9) | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | 2026年9月19日(土) 17:31:07 (UTC+9) | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | 2026年9月19日(土) 17:30:41 (UTC+9) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | 2026年9月19日(土) 17:12:26 (UTC+9) | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | 2026年9月19日(土) 17:11:58 (UTC+9) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | 2026年9月19日(土) 17:00:03 (UTC+9) | daemon | daemon_started | version 0.3.4 |
RoamSwitch Sensor Audit Report
| Generated | Sun, 2026-09-20 02:30:12 (UTC) |
|---|---|
| Site | HQ – 3F server room |
| Sensor public key | +kbYCoN5jJSykTAr8zDv/VCs2SdBcrwYbkCrzCRgsLM= |
| Audit log | Integrity check: OK (no tampering detected) — 18 entries, head #18 771a265c58fa2f0a8990bc6be79ff5259d96a76a0a3fea472f308df02eaa087f |
Latest audit per endpoint
| Endpoint | Address | Timestamp | Findings | Open ports |
|---|---|---|---|---|
| web-prod-01 | 192.168.20.21 | Sun, 2026-09-20 02:00:43 (UTC) | 1 finding(s) | 2 |
| db-prod-01 | 192.168.20.22 | Sun, 2026-09-20 02:01:14 (UTC) | 2 finding(s) | 3 |
| dev-laptop-07 | 192.168.20.35 | Sun, 2026-09-20 02:02:07 (UTC) | clean | 1 |
Findings
| When | Endpoint | Port | Finding | Recommendation |
|---|---|---|---|---|
| Sun, 2026-09-20 02:01:14 (UTC) | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| Sun, 2026-09-20 02:01:14 (UTC) | db-prod-01 | 6379 | Known Vulnerability: CVE-2021-32626 (Redis) Redis is an open source, in-memory database that persists on disk. In affected versions specially crafted Lua scripts executing in Redis can cause the heap-based Lua stack to be overflowed, due to incomplete checks for this condition. This can result with heap corruption and potentially remote code execution. This problem exists in all versions of Redis with Lua scripting support, starting from 2.6. The problem is fixed in versions 6.2.6, 6.0.16 and 5.0.14. | Upgrade Redis to a version not affected by CVE-2021-32626 as soon as possible, and restrict unauthenticated network access to it in the meantime. |
| Sun, 2026-09-20 02:00:43 (UTC) | web-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
| Sat, 2026-09-19 08:33:18 (UTC) | db-prod-01 | 22 | SSH Version Banner Disclosed This SSH server discloses its version banner on connect. This is normal SSH behavior, but the banner gives an attacker a starting point to look up known vulnerabilities for that version. | Keep SSH updated to the latest version, and minimize the banner's detail if your SSH implementation allows it. |
Device inventory (every device observed on the LAN)
| MAC | IP | Hostname | Vendor | Managed | Note |
|---|---|---|---|---|---|
| 00:1b:8b:3c:9a:07 | 192.168.20.1 | _gateway | NEC Platforms | no | HQ gateway router |
| 7c:8b:ca:61:d2:4e | 192.168.20.2 | TP-Link Technologies | no | 3F Wi-Fi access point | |
| e4:e7:49:2b:70:c1 | 192.168.20.3 | Hewlett Packard | no | 2F multifunction printer | |
| 90:61:ae:17:4d:e2 | 192.168.20.21 | Intel Corporate | yes | Production web server | |
| 90:61:ae:17:4d:f9 | 192.168.20.22 | Intel Corporate | yes | Production database server | |
| 04:20:9a:cc:31:8f | 192.168.20.31 | sensor-hq-01 | Panasonic AVC Networks Company | no | RoamSwitch-Sensor |
| a0:c9:a0:5e:83:2b | 192.168.20.35 | Murata Manufacturing | yes | Development laptop | |
| 8e:0f:95:a2:64:5d | 192.168.20.44 | no | |||
| 5e:e2:59:1d:c8:03 | 192.168.20.45 | no | |||
| a8:3b:76:9c:20:e4 | 192.168.20.52 | Cloud Network Technology Singapore PTE. | no |
Operation & approval log
| # | When | Actor | Action | Target | Detail |
|---|---|---|---|---|---|
| 18 | Sun, 2026-09-20 02:02:07 (UTC) | scheduler | audit_completed | dev-laptop-07 (Q9mW3sLp0xVc) | trigger=scheduled host=192.168.20.35 findings=0 open_ports=1 new_findings=0 resolved_findings=0 |
| 17 | Sun, 2026-09-20 02:02:05 (UTC) | scheduler | audit_started | dev-laptop-07 (Q9mW3sLp0xVc) | host=192.168.20.35 |
| 16 | Sun, 2026-09-20 02:01:14 (UTC) | scheduler | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=scheduled host=192.168.20.22 findings=2 open_ports=3 new_findings=1 resolved_findings=0 |
| 15 | Sun, 2026-09-20 02:01:12 (UTC) | scheduler | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | host=192.168.20.22 |
| 14 | Sun, 2026-09-20 02:00:43 (UTC) | scheduler | audit_completed | web-prod-01 (Xk3F9aLm2QzB) | trigger=scheduled host=192.168.20.21 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 13 | Sun, 2026-09-20 02:00:41 (UTC) | scheduler | audit_started | web-prod-01 (Xk3F9aLm2QzB) | host=192.168.20.21 |
| 12 | Sat, 2026-09-19 09:11:40 (UTC) | cli:uid=1000 | config_changed | schedule.window_end_hour | value=5 |
| 11 | Sat, 2026-09-19 09:11:32 (UTC) | cli:uid=1000 | config_changed | schedule.window_start_hour | value=1 |
| 10 | Sat, 2026-09-19 09:10:02 (UTC) | cli:uid=1000 | config_changed | schedule.enabled | value=true |
| 9 | Sat, 2026-09-19 08:47:19 (UTC) | control_api: | pair | dev-laptop-07 (Q9mW3sLp0xVc) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 8 | Sat, 2026-09-19 08:46:52 (UTC) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 7 | Sat, 2026-09-19 08:33:18 (UTC) | cli:uid=1000 | audit_completed | db-prod-01 (Zt4Kb8NwY1eR) | trigger=manual host=192.168.20.22 findings=1 open_ports=2 new_findings=1 resolved_findings=0 |
| 6 | Sat, 2026-09-19 08:33:15 (UTC) | cli:uid=1000 | audit_started | db-prod-01 (Zt4Kb8NwY1eR) | manual audit; host=192.168.20.22 |
| 5 | Sat, 2026-09-19 08:31:07 (UTC) | control_api: | pair | db-prod-01 (Zt4Kb8NwY1eR) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 4 | Sat, 2026-09-19 08:30:41 (UTC) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 3 | Sat, 2026-09-19 08:12:26 (UTC) | control_api: | pair | web-prod-01 (Xk3F9aLm2QzB) | endpoint redeemed an operator-issued pairing code and was added to the audit scope |
| 2 | Sat, 2026-09-19 08:11:58 (UTC) | cli:uid=1000 | pairing_code_issued | single-use, valid 10 minutes | |
| 1 | Sat, 2026-09-19 08:00:03 (UTC) | daemon | daemon_started | version 0.3.4 |
掲載しているマシン名・MACアドレス・IPアドレス・公開鍵はすべて架空です。レポートの本文は表示言語(10言語)で出力でき、ここには日本語版と英語版の例を掲載しています(日本語以外の表示では英語版を掲載しています)。