
読み取り専用・エージェントレスなLinuxカーネルセキュリティ設定監査ツール(ローカルおよびSSH対応)。初期の焦点:CVE-2026-98432に対するTCP移行/MPTCPチェック。
Python で書かれた軽量なオープンソースの Linux セキュリティ監査ツールです。
エージェントをインストールしたりシステム設定を変更したりすることなく、SSH 経由でローカルおよびリモートの Linux サーバーを監査します。
これは設定およびパッチ適用状況の監査ツールであり、エクスプロイトスキャナーではありません。 脆弱性に関連するカーネル設定と使用状況を報告し、 実行中 のカーネルパッケージをベンダーの修正版と比較します。 脆弱性を誘発しようと試みることは一切ありません。
| 機能 | v0.2.0 |
|---|---|
| Python 3.8+、サードパーティ依存なし | ✅ |
| ローカル Linux 監査 | ✅ |
| SSH 経由のリモート監査(エージェントレス) | ✅ |
| 複数サーバーの並列スキャン | ✅ |
| Ubuntu / Debian / Rocky / AlmaLinux / RHEL / Fedora | ✅ |
| TCP リクエストソケット移行の検査 | ✅ |
| MPTCP 設定 および使用状況 の検査 | ✅ |
| カーネル、ディストリビューション、再起動待ちの検出 | ✅ |
| JSON / CSV レポート | ✅ |
| カーネル CVE パッチ検証(Ubuntu、Debian、RHEL、Rocky、AlmaLinux、CentOS) | ✅ |
| セキュリティ更新の自動適用 | ❌ 一切なし |
| サーバー設定の変更 | ❌ 一切なし |
コントローラー(お使いの Mac または Linux ワークステーション)は、選択したチェック項目から小さな POSIX sh スクリプトを生成し、SSH 経由で各ターゲットの sh -s にパイプで渡します。ターゲットには何もコピーされず、インストールもされません。スクリプトは key=value 形式のファクトを出力し、すべての評価はコントローラー上で行われます。コントローラーはターゲットの出力を信頼できないものとして扱います(制御文字の除去、値の切り詰め、CSV 数式インジェクションの無効化)。
実行する前に、サーバー上で何が実行されるのかを正確に確認してください:
python3 netviser_cve_audit.py --print-script
ターゲットに必要なのは sh と標準ツール(iproute2 の ss、awk、grep、sed)のみです。ターゲットに Python は不要です。
コントローラーには Python 3.8+ と OpenSSH が必要です(macOS または Linux)。
git clone https://github.com/maxigentr/netviser-linux-security-auditor.git
cd netviser-linux-security-auditor
# Audit this Linux machine
python3 netviser_cve_audit.py --local
# Audit a remote server
python3 netviser_cve_audit.py --host [email protected]
# Custom SSH port and key
python3 netviser_cve_audit.py --host [email protected] --port 2290 --identity ~/.ssh/audit_ed25519
# Multiple servers, 10 in parallel
python3 netviser_cve_audit.py --hosts servers.txt --workers 10
# Non-root SSH user with passwordless sudo, for full process and BPF visibility
python3 netviser_cve_audit.py --host admin@web01 --sudo
# Watch MPTCP counters for 60 seconds to see if MPTCP is used right now
python3 netviser_cve_audit.py --hosts servers.txt --sample-interval 60
# Also check whether other kernel CVEs are patched
python3 netviser_cve_audit.py --hosts servers.txt --cve CVE-2024-1086,CVE-2024-26925
ツールはインストール(pip install .)して、netviser-audit または
python3 -m netviser_audit として実行することもできます。
ホストファイルの形式については
examples/servers.example.txt を参照してください。
ホストごとのポートは ssh://user@host:port または
~/.ssh/config のエイリアスを使用します。
| オプション | 説明 |
|---|---|
--local / --host H / --hosts FILE | 監査対象 |
--checks IDS | カンマ区切りのサブセット(--list-checks を参照)。依存関係は自動的に追加されます |
--cve IDS | これらの CVE のカーネルパッチ状況も報告します(繰り返し指定またはカンマ区切り) |
--offline | ベンダーのアドバイザリデータをダウンロードしません |
--advisories FILE | 以前に保存したアドバイザリデータを使用します。不足しているレコードは --offline でない限りダウンロードされます |
--save-advisories FILE | 使用したアドバイザリデータを保存し、オフラインまたは再現可能な実行に備えます |
--sudo | コレクターを sudo -n で実行します(プロンプトは表示されません) |
--sample-interval N | MPTCP カウンターを N 秒間隔で 2 回読み取ります |
--output PREFIX | レポートのプレフィックス(デフォルト netviser_audit → .json、.csv) |
--no-report | ターミナルへの出力のみ行います |
--fail-on-review | REVIEW の検出結果が存在する場合に終了コード 3 で終了します(CI / cron 向け) |
-v, --verbose | REVIEW / UNKNOWN だけでなく、すべての検出結果を表示します |
SSH は BatchMode=yes(鍵認証のみ)および
StrictHostKeyChecking=accept-new で実行されます。
終了ステータス: 0 成功、1 ターゲットをスキャンできなかった、2 使用法エラー、
3 レビュー対象の検出結果が存在する(--fail-on-review 指定時のみ)。
| Id | 検査対象 |
|---|---|
kernel | ディストリビューション、カーネルリリース、実行中のカーネルパッケージ、より新しいインストール済みカーネル / 再起動の要否 |
patch | ベンダーのアドバイザリデータに基づく、実行中のカーネルパッケージに対する各 CVE のパッチ状況 |
tcp_migration | net.ipv4.tcp_migrate_req、ロード済みの sk_reuseport BPF プログラム(root + bpftool) |
mptcp | net.mptcp.enabled、パスマネージャー、CONFIG_MPTCP、MPTCP ソケットとプロセス、ハンドシェイクカウンター、mptcpize の使用状況 |
cve_2026_98432 | CVE-2026-98432 に関連する設定。そのパッチ状況は patch.CVE-2026-98432 です |
すべての検出結果にはステータス — OK、INFO、REVIEW または UNKNOWN — と、
機械可読な判定(例: mptcp.usage = IN_USE)が付きます。
patch チェックは CVE ごとに 1 つの問いに答えます: 現在実行中のカーネルは、
ディストリビューションのベンダーによれば修正済みか?
dpkg-query / rpm -qf): その名前、正確なバージョン、ソースパッケージです。
また、そのパッケージの changelog およびロード済みのライブパッチ
(canonical-livepatch、kpatch-patch)に記載された CVE ID も一覧化します。~ バージョンが
正しく処理されます。| ディストリビューション | アドバイザリソース |
|---|---|
| Ubuntu | Ubuntu Security API — リリースおよびカーネルフレーバーごと(linux、linux-hwe-*、linux-aws など) |
| Debian | OSV 経由の Debian Security Tracker データ |
| RHEL、Rocky Linux、AlmaLinux、CentOS | Red Hat Security Data API — メインの RHEL ストリーム |
これらのサービスには CVE 識別子のみが送信され、ホストに関する情報が
コントローラーから外部に漏れることはありません。エアギャップ環境で使用する場合は、
一度 --save-advisories adv.json を付けて実行し、後で
--offline --advisories adv.json を付けて実行してください。
| 判定 | ステータス | 意味 |
|---|---|---|
PATCHED | OK | 実行中のカーネルバージョンがベンダーの修正済みバージョン以上 |
NOT_AFFECTED | OK | ベンダーがこのリリース/カーネルは影響を受けないと表明 |
LIVEPATCHED | OK | ロード済みのライブパッチがその CVE を修正済みとしてリストしている |
VULNERABLE | REVIEW | 修正がリリース済みだが、実行中のカーネルは古い。インストールして再起動すること |
FIX_PENDING | REVIEW | ベンダーが修正を準備中だが未リリース(Ubuntu) |
FIX_NOT_AVAILABLE | REVIEW | 影響あり、修正は未公開 |
WONT_FIX | REVIEW | ベンダーがこのリリースを修正しない(例: サポート終了) |
MENTIONED_IN_CHANGELOG | INFO | ベンダーの判定はないが、実行中カーネルの changelog がその CVE に言及している |
NO_DATA | UNKNOWN | ベンダーにこの CVE、リリース、カーネルフレーバーの記録がない |
UNSUPPORTED | UNKNOWN | このディストリビューション向けのアドバイザリソースがない(例: Fedora、SUSE) |
NOT_CHECKED | UNKNOWN | アドバイザリデータが利用不可(--offline、ネットワークエラー)またはカーネルパッケージが不明 |
制限事項:
VULNERABLE であり、検出結果にもその旨が示される。NOT_CHECKED)。net.mptcp.enabled = 1 は MPTCP ソケットを作成できることだけを意味する。
誰かが MPTCP を無効化する前に、mptcp チェックは実際の使用の証拠を収集する:
| 証拠 | 取得元 |
|---|---|
| リッスン中/確立済みの MPTCP ソケットとそのプロセス | ss -M -a -n -p |
ハンドシェイクカウンタ(MPCapableSYNRX、MPJoinSynRx、…) | /proc/net/netstat(MPTcpExt) |
| サンプリング期間中のカウンタ増加 | --sample-interval N |
| mptcpize でラップされたサービス | mptcpize または libmptcpwrap を参照する systemd ユニット / drop-in |
libmptcpwrap をロードした実行中プロセス | /proc/<pid>/maps |
結果は mptcp.usage に要約される:
| 判定 | 意味 | 推奨アクション |
|---|---|---|
IN_USE | 確立済みの MPTCP 接続、mptcpize でラップされたサービス、または MPTCP 接続を受け入れた MPTCP リスナーが存在 | 変更前に依存するサービスを特定すること |
ACTIVE_TRAFFIC | サンプリング中にハンドシェイクカウンタが増加 | トラフィックの発生元を特定すること |
LISTENING_ONLY | MPTCP リスナーはあるが、起動以降 MPTCP ハンドシェイクがない — 通常は MPTCP を機会的に有効化するプログラム(Go 1.24+ はリスナーに対してデフォルトでこれを行う) | 通常は依存関係なし。開いているリスナーは再起動するまで MPTCP を維持する |
PAST_ACTIVITY | 起動以降カウンタが非ゼロだが、現在のソケットはない | --sample-interval 60 で再実行すること |
NONE_OBSERVED | ソケットなし、カウンタ活動なし、mptcpize なし | 計画的な可逆的無効化テストが可能 |
DISABLED / NOT_APPLICABLE | MPTCP がオフ、またはカーネルに組み込まれていない | — |
NONE_OBSERVED はある時点での観測であり、証明ではない。IPPROTO_MPTCP
ソケットを直接開くアプリケーションは、ソケットを保持している間だけ現れ、
root でない場合は自分のプロセスのみが可視となる。
MPTCP の無効化をテストする場合は、メンテナンスウィンドウ中に、まず実行時に
(sysctl -w net.mptcp.enabled=0)行い、永続化する前にサービスの接続と
ログを監視すること。このツールがその変更を代行することは決してない。
初期リリースは、Linux カーネルの IPv4 TCP ユースアフターフリー脆弱性である CVE-2026-98432 に関連する設定に焦点を当てている。このツールは以下を検査する:
net.ipv4.tcp_migrate_req および sk_reuseport BPF プログラムnet.mptcp.enabled と実際の MPTCP 使用状況パッチステータスは patch.CVE-2026-98432 として報告される。