Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
mongobleed-detector — MongoBleedエクスプロイトの検出スクリプト | Kitploit
ツール/GitHubGitHub/neo23x0/mongobleed-detector
脆弱性分析スクリプトと自動化フォレンジックデジタルフォレンジック脅威インテリジェンスインシデントレスポンスデータベースセキュリティログ分析
GitHubneo23x0/mongobleed-detector

mongobleed-detector

MongoBleedエクスプロイトの検出スクリプト

リポジトリを見る
81137ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

MongoBleed Detector

CVE-2025-14847 (MongoBleed) のためのオフラインMongoDB分析ツール

MongoDBデータを分析し、複数の検出モジュールを使用してCVE-2025-14847の悪用の可能性を特定するスタンドアロンLinuxコマンドラインツールです。

目次

  • 概要
  • 検出モジュール
  • 要件
  • インストール
  • 2つの動作モード
  • モード1:ローカル分析
  • モード2:リモート収集
  • コマンドラインオプション
  • 確信度レベル
  • 出力例
  • テスト
  • 注意点と制限事項
  • 参考文献とクレジット
  • ライセンス

概要

MongoBleed (CVE-2025-14847) は、MongoDBのzlib伸長処理におけるメモリ開示の脆弱性であり、攻撃者が認証なしでサーバーメモリから資格情報、セッショントークン、PIIなどの機密データを直接抽出することを可能にします。

このツールは、インシデント対応担当者が複数の証拠ソースを使用して悪用の試みを検出できるようにします。

  • モジュールA: ログ相関(接続イベント、メタデータの欠如)
  • モジュールB1: アサートカウント分析(serverStatus.asserts スナップショット)
  • モジュールB2: FTDCスパイク検出(diagnostic.data 時系列)

主な機能

  • マルチモジュール検出 - 複数のデータソースを相関させて高い確信度を実現
  • オフライン&エージェントレス - 分析中にネットワーク接続不要
  • 自動検出 - 利用可能なデータソースを自動的に検出
  • リモート収集 - SSH経由で複数のホストからデータを収集
  • 複合スコアリング - HIGH / MEDIUM / LOW の確信度判定
  • ストリーミング処理 - 巨大なログファイルも効率的に処理

検出モジュール

モジュールA:ログ相関

MongoDB JSONログを分析して悪用パターンを検出します。

イベントIDタイプ説明
22943Connection Acceptedクライアントが接続したときに記録されます
51800Client Metadataクライアントがドライバー/アプリケーション情報を送信したときに記録されます
22944Connection Closedクライアントが切断したときに記録されます

重要な洞察: 正規のMongoDBドライバーは常にクライアントメタデータを送信します。MongoBleedの悪用は接続し、メモリを抽出し、切断しますが、メタデータを送信しません。

モジュールB1:アサートカウント

db.serverStatus().asserts のスナップショットを分析して、asserts.userカウンターの異常なパターンを検出します。

  • 複数スナップショット: 経時的なスナップショットを比較し、ユーザーアサーションの突然のスパイクを検出
  • 単一スナップショットヒューリスティック: スナップショットが1つしかない場合、asserts.userを他のアサーションタイプと比較して怪しいパターンを検出します。ユーザーアサートが異常に高い(比率≥250倍)または他のすべてのタイプがゼロの場合、疑わしいとフラグします(MEDIUM確信度)

注意: 累積カウンターは誤検出を引き起こす可能性があります。最良の結果を得るには、FTDC(モジュールB2)と組み合わせて使用してください。

モジュールB2:FTDCスパイク検出

MongoDBのFull-Time Diagnostic Data Capture(FTDC)ファイルを分析して、アサーションカウンターの時間局所的なスパイクを検出します。FTDCは定期的にserverStatusをサンプリングするため、攻撃の正確なタイミングを特定できます。

要件

シェルスクリプト (mongobleed-detector.sh)

  • Linux または macOS(bash 4+)
  • jq - JSONプロセッサ
  • awk(gawk推奨)
  • gzip - 圧縮ログ対応

Pythonコンポーネント(オプション、FTDCデコード用)

  • Python 3.8+
  • pymongo - FTDCファイルデコード用

リモートスキャナー (mongobleed-remote.py)

  • Python 3.8+
  • ネイティブSSHクライアント(ssh、scpコマンド)
  • 基本動作に追加のPythonパッケージは不要

依存関係のインストール

root@kitploit:~
# シェルスクリプトの依存関係
# Debian/Ubuntu
apt-get install jq gawk gzip

# RHEL/CentOS/Fedora
dnf install jq gawk gzip

# macOS
brew install jq gawk

# Python依存関係(FTDCデコード用)
pip install -r requirements.txt

インストール

root@kitploit:~
# リポジトリのクローン
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector

# スクリプトに実行権限を付与
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py

# Python依存関係のインストール(オプション、FTDC対応用)
pip install -r requirements.txt

2つの動作モード

モード1:ローカル分析

MongoDBホストから手動で収集したデータを分析します。

モード2:リモート収集

SSH経由で複数のホストから自動的にデータを収集し、ローカルで分析します。

モード1:ローカル分析

ステップ1:データの収集

MongoDBホストからデータを収集し、次の構造に整理します。

root@kitploit:~
./collected-data/
├── logs/                    # MongoDB JSONログ
│   ├── mongod.log
│   ├── mongod.log.1
│   └── mongod.log.2.gz
├── assert-counts/           # serverStatus().asserts スナップショット
│   ├── asserts-2025-01-01.json
│   └── asserts-2025-01-02.json
└── ftdc-files/              # FTDC diagnostic.data の内容
    ├── metrics.2025-01-02T10-00-00Z-00000
    └── metrics.interim

ログの収集

root@kitploit:~
# リモートホストからコピー
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/

アサートカウントの収集

MongoDBホストで次のコマンドを実行します(mongoshアクセスが必要)。

root@kitploit:~
mongosh --quiet --eval 'JSON.stringify({
  timestamp: new Date().toISOString(),
  hostname: db.hostInfo().system.hostname,
  asserts: db.serverStatus().asserts,
  uptime: db.serverStatus().uptime
})' > asserts-$(date +%Y%m%d-%H%M%S).json

結果のJSONファイルを ./collected-data/assert-counts/ にコピーします。

ヒント: このコマンドを複数回(例:1時間ごと)実行すると、ベースラインを確立してスパイクを検出できます。

FTDCファイルの収集

FTDCファイルは次の場所にあります。

  • mongod: <storage.dbPath>/diagnostic.data/(通常は /var/lib/mongodb/diagnostic.data/)
  • mongos: systemLog.path から派生(例:/var/log/mongodb/mongos.diagnostic.data/)
root@kitploit:~
# FTDCファイルのコピー(sudoが必要な場合あり)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/

ステップ2:分析の実行

root@kitploit:~
# 自動検出モード - 利用可能なすべてのデータを分析
./mongobleed-detector.sh --data-dir ./collected-data/

# カスタム閾値
./mongobleed-detector.sh --data-dir ./collected-data/ \
    -t 1440 \              # 24時間のルックバック
    -c 50 \                # 接続閾値を下げる
    --spike-threshold 50   # スパイク閾値を下げる

レガシーモード(ログのみ)

後方互換性のため、ログを直接分析することもできます。

root@kitploit:~
# デフォルトパスをスキャン
./mongobleed-detector.sh

# 特定のログファイルをスキャン
./mongobleed-detector.sh -p /path/to/logs/*.json

# フォレンジックモード(複数ホストを分析)
./mongobleed-detector.sh --forensic-dir /evidence/

モード2:リモート収集

複数のホストから自動的にデータを収集し、分析します。

root@kitploit:~
# ホストファイルを作成
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF

# 収集と分析
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/

リモートスキャナーオプション

root@kitploit:~
# 特定のSSH鍵を使用
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key

# 並列実行
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10

# FTDC収集をスキップ(高速)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc

# 収集のみ、後で分析
./mongobleed-remote.py --hosts-file hosts.txt --user admin --collect-only

# SSHオプションを渡す(例:ジャンプホスト)
./mongobleed-remote.py --hosts-file hosts.txt --user admin \
    -o "ProxyJump=bastion.example.com"

# 特権ファイルアクセスにsudoを使用(FTDCファイルは制限されていることが多い)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --sudo

# 接続問題のトラブルシューティング用デバッグモード
./mongobleed-remote.py --hosts-file hosts.txt --user admin --debug

FTDC権限に関する注意: /var/lib/mongodb/diagnostic.data/ 内のFTDCファイルは通常 mongodb ユーザーが所有しており、一般ユーザーは読み取れません。「FTDC Permission Issues」の警告が表示された場合は、--sudo フラグを使用してください。この場合、リモートユーザーにパスワードなしのsudoアクセス(sudoersのNOPASSWD)が必要です。

収集されるデータ

コマンドラインオプション

mongobleed-detector.sh

mongobleed-remote.py

終了コード

コード意味
0HIGHまたはMEDIUMの発見なし
1HIGHまたはMEDIUMの発見あり
2エラー(依存関係の欠如、データなしなど)

確信度レベル

ツールは、利用可能なすべての証拠に基づいて複合的な確信度判定を提供します。

モジュール別リスクレベル

ログ相関(モジュールA)の場合、個々のIPが次のように分類されます。

リスク基準
HIGH接続数 ≥ 閾値、メタデータレート < 10%、バーストレート ≥ 400/分
MEDIUM接続数 ≥ 閾値、メタデータレート < 10%、バーストレート < 400/分
LOW

出力例

root@kitploit:~
INFO: Auto-discovery mode: analyzing ./collected-data/
INFO: Module A: Analyzing 3 log file(s)...
INFO: Module B1: Analyzing assert-counts...

╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                              MongoBleed (CVE-2025-14847) Detection Results                                       ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

Module Status:
  [✓] Module A (Log Correlation): 3 log file(s) found
  [✓] Module B1 (Assert Counts): 4 snapshot(s) found
  [−] Module B2 (FTDC Spikes): No FTDC files or decoder unavailable

Analysis Parameters:
  Time Window:        4320 minutes
  Connection Thresh:  100
  Burst Rate Thresh:  400/min
  Metadata Rate:      0.10
  Spike Threshold:    100
  User Ratio Thresh:  250x

Module A - Log Correlation Findings:

Risk     SourceIP                                  ConnCount  MetaCount  DiscCount    MetaRate%    BurstRate/m FirstSeen (UTC)        LastSeen (UTC)        
-------- ---------------------------------------- ---------- ---------- ---------- ------------ -------------- ---------------------- ----------------------
HIGH     137.137.137.137                                8172          0       8172        0.00%         490.32 2025-12-27T12:55:52Z   2025-12-27T13:12:32Z  

Module B1 - Assert Counts Analysis:
  Analyzed 4 snapshots from 2025-01-01T10:00:00Z to 2025-01-01T11:30:00Z
    asserts.user: 100 -> 860 (delta: 760)
  SPIKE DETECTED: 2025-01-01T10:30:00Z to 2025-01-01T11:00:00Z
    Delta: +740 user asserts (110 -> 850)

═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Combined Verdict:
  MEDIUM CONFIDENCE - Investigation recommended
    - Suspicious connection patterns but FTDC data unavailable for correlation

⚠ IMPORTANT: If exploitation is confirmed, patching alone is insufficient.
  - Rotate all credentials that may have been exposed
  - Review accessed data for sensitive information disclosure
  - Check for lateral movement from affected systems
  - Preserve logs for forensic analysis

Caveats:
  - Connection metadata absence is PoC-specific and can be evaded
  - Assertion counters are cumulative - false positives possible without baseline
  - FTDC provides timing but not perfect attribution
  - Patch + rotate secrets remains mandatory regardless of detection results

テスト

リポジトリには、検出ツールを検証するためのテストスイートが含まれています。

実世界のサンプルデータ

example-data/ ディレクトリには、MongoBleed PoCを使用して攻撃されたMongoDB 8.0.16インスタンスの実際のデータが含まれています。

root@kitploit:~
example-data/
├── logs/                    # 攻撃パターンを含む実際のMongoDBログ
│   ├── mongod.log
│   └── mongod.log.1.gz
├── assert-counts/           # 攻撃後のserverStatus().assertsスナップショット
│   └── asserts-post-attack.json
└── ftdc-files/              # 実際のFTDC診断データファイル
    └── metrics.*

このデータは次のものを示しています。

  • 攻撃者IP 137.137.137.137からの16,344接続、メタデータは0%
  • 攻撃中に蓄積された37,384件のユーザーアサート
  • 攻撃時間枠にわたるFTDCファイル

合成テストデータの生成

root@kitploit:~
./test/generate-test-logs.sh

これにより、さまざまなパターンを持つ追加の合成テストデータが作成されます。

  • HIGH / MEDIUM / LOW / INFO リスクパターンを持つログファイル
  • アサートカウントJSONスナップショット(スパイクありとなし)
  • エッジケース(IPv6、不正な入力など)

テストの実行

root@kitploit:~
./test/test-detector.sh

期待される出力:

root@kitploit:~
╔════════════════════════════════════════════════════════╗
║       MongoBleed Detector Test Suite                   ║
╚════════════════════════════════════════════════════════╝

Module A Tests (Log Correlation):
✓ PASS: Exit code is 1 (findings detected)
✓ PASS: Detected source IP 137.137.137.137
...

Module B1 Tests (Assert Counts):
✓ PASS: Shows Module B1 status
✓ PASS: Detected assert spike
...

Auto-Discovery Mode Tests:
✓ PASS: Shows Module A status
✓ PASS: Shows combined verdict
...

Results:
  Passed: 24
  Failed: 0

All tests passed!

注意点と制限事項

⚠️ 重要な制限

検出の限界

  1. PoC固有の検出: メタデータ欠如の検出は、既知のMongoBleed PoCの動作に基づいています。巧妙な攻撃者は、偽のメタデータを送信するようにエクスプロイトを変更する可能性がありますが、これにより悪用速度が低下します。

  2. 累積カウンター: asserts.user はmongod再起動以降の累積値です。ベースラインスナップショットがない場合、高い値は長期稼働インスタンスでは正常である可能性があります。経時的な複数のスナップショットにより精度が大幅に向上します。

  3. FTDCのタイミング: FTDCはタイミング情報を提供しますが、完全な属性情報は提供しません。最良の結果を得るには、ログ相関と組み合わせて使用してください。

  4. ログ保持: 存在するログのみ分析できます。積極的なローテーションや攻撃者によるログ消去は証拠を破壊します。

技術的要件

  1. JSONログ必須: MongoDB 4.4+ はデフォルトでJSONログを使用します。従来のテキストログはサポートされていません。

  2. FTDCデコーダー: FTDCデコードにはpymongoを使用するPython 3が必要です。これがないとモジュールB2は使用できません。

  3. mongoshアクセス: アサートカウントの収集には、適切な権限を持つmongoshが必要です。

検出後の措置

HIGHまたはMEDIUMの発見が確認された場合。

  1. 証拠の保存 - ローテーション前にログをコピー
  2. 資格情報のローテーション - すべてのMongoDB資格情報とメモリ内にあった可能性のあるシークレットをローテーション
  3. データのレビュー - どの機密データが公開された可能性があるかを評価
  4. 横方向の移動 - 攻撃者が他のシステムに移動していないか確認
  5. 即時パッチ適用 - MongoDBセキュリティアップデートを適用
  6. 報告 - インシデント対応手順に従う

参考文献とクレジット

検出研究

このツールの検出ロジックは、Eric Capuano と Tamir Zimerman による研究に基づいています。

  • Hunting MongoBleed (CVE-2025-14847) - 脆弱性と検出方法に関するEric Capuanoの記事
  • A Different MongoBleed Perspective - アサーションベースの検出に関するTamir Zimermanの分析

MongoDBドキュメント

  • serverStatusコマンド - assertsフィールドのドキュメント
  • Full Time Diagnostic Data Capture - FTDCストレージの場所
  • What is MongoDB FTDC - FTDC形式の背景

影響を受けるバージョン

ライセンス

LICENSEファイルを参照してください。

コントリビューション

コントリビューションを歓迎します!Issueやプルリクエストを送信してください。

このツールを本番データに対してテストした場合は、特に以下のフィードバックをいただけると幸いです。

  • 誤検出率
  • 正規のトラフィックパターン
  • エッジケースやパースの失敗
  • FTDCデコードの問題
ツールをダウンロード
データタイプソース保存先
ログ/var/log/mongodb/mongod.log*<output-dir>/<hostname>/logs/
アサートカウントmongosh コマンド<output-dir>/<hostname>/assert-counts/
FTDCファイル/var/lib/mongodb/diagnostic.data/metrics.*<output-dir>/<hostname>/ftdc-files/
オプション説明デフォルト
-d, --data-dir <path>収集データのあるディレクトリ(自動検出モード)-
-p, --path <glob>追加のログパス/グロブ(繰り返し可)-
-t, --time <minutes>ルックバックウィンドウ(分)4320(3日)
-c, --conn-threshold接続数の閾値100
-b, --burst-thresholdバーストレート閾値(毎分)400
-m, --metadata-rateメタデータレート閾値(0.0〜1.0)0.10
--spike-thresholdアサートスパイク閾値100
--user-ratio-threshold単一スナップショット検出用のユーザー/その他アサート比率250
--no-default-pathsデフォルトログパスをスキップfalse
--forensic-dir <path>サブディレクトリを個別のホストとして分析-
オプション説明デフォルト
-H, --host <hostname>スキャンするリモートホスト(繰り返し可)-
-f, --hosts-file <file>ホスト名を含むファイル(1行に1つ)-
-u, --user <user>SSHユーザー名現在のユーザー
-k, --key <file>SSH秘密鍵ファイルssh-agent
-P, --port <port>SSHポート22
-o, --ssh-options <opt>追加のSSHオプション(繰り返し可)-
--sudo特権ファイルアクセスにsudoを使用(FTDC)false
-O, --output-dir <path>収集データを保存するディレクトリ./collected-data
--log-path <path>収集するリモートログパス(繰り返し可)標準パス
--ftdc-path <path>リモートFTDCディレクトリパス(繰り返し可)標準パス
--skip-logsログ収集をスキップfalse
--skip-assertsserverStatus().assertsの収集をスキップfalse
--skip-ftdcFTDCファイル収集をスキップfalse
--collect-onlyデータの収集のみ行い、分析は実行しないfalse
-j, --parallel <n>並列接続数5
--timeout <seconds>SSHコマンドのタイムアウト300
-d, --debugデバッグ出力を有効にする(SSHコマンドを表示)false
-q, --quiet進捗メッセージを抑制false
確信度基準解釈
HIGHFTDCピークが検出され、かつ同じ時間枠内に怪しいログがある悪用の強い指標
MEDIUMFTDCピークまたは怪しいログ(相関なし)調査推奨
LOWスパイクのない累積アサートカウントのみ異常検出、弱い証拠
INFO重要な発見なし通常の動作
接続数 ≥ 閾値、メタデータレート ≥ 10%
INFO接続数 < 閾値
バージョン脆弱なバージョン修正バージョン
8.2.x8.2.0 - 8.2.28.2.3
8.0.x8.0.0 - 8.0.168.0.17
7.0.x7.0.0 - 7.0.277.0.28
6.0.x6.0.0 - 6.0.266.0.27
5.0.x5.0.0 - 5.0.315.0.32
4.4.x4.4.0 - 4.4.294.4.30
4.2.x4.2.0+修正なし
4.0.x4.0.0+修正なし
3.6.x3.6.0+修正なし