
PSA-2026-00043-1(CVE-2023-54391)に関するproxmoxアドバイザリの復旧メモ
ランサムウェアを装ったワイパーからの復旧 — インターネットに露出したProxmoxインフラストラクチャへの攻撃後(PSA-2026-00043-1 / CVE-2023-54391)。
攻撃者はゲストを消去し、ファイルシステムを破損させたままにしました。ゲストの種類に応じて2つの復旧経路があります:
これらはツールと方法論であり、同じ状況にある誰にとっても役立つように一般化されています。ソースに対して読み取り専用、CC0。実際の復旧データは含まれていません。出力例はプレースホルダーを使用しています。
破損したディスクは、残っているものの唯一のコピーです。修復しないでください。イメージ化してください。
blockdev --setro /dev/<source> # 1. 即座に読み取り専用にする
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. 安全なストレージにイメージ化
# 3. fsck、rwマウント、「修復」は行わないこと。カーバーが必要とするブロックを上書きする
# 4. すべてのソースパスを scripts/source_guard.sh でラップする
# 5. 元のディスクではなく、イメージからのみ復旧する
共通の規律、分割されたカーバー。いずれも -h で実行可能。Python 3.8+ / bash、サードパーティ製パッケージ不要。source_guard.sh はLinuxの /proc/diskstats が必要です。
python3 scripts/make_demo.py
python3 scripts/bson_frame.py --total demo/*.bson
python3 scripts/sensitivity_scan.py demo/*.bson
python3 scripts/integrity_verify.py --compare demo/source demo/copy
この順序で実行しました。カービングステップはゲストによって分岐します。setro+imageのブックエンドとコンテンツキー方式の検証はどちらの場合も同じです。
damaged disk ──setro+image──► read-only image
│
database ──────────►│◄────────── filesystem
carve WT pages │ carve files
count docs │ classify by content + manifest
│
tier exposure (RED/AMBER/GREEN)
verify copy (content-keyed)
│
recover
find | sort | xargs sha256sum | sha256sum はパスとロケールもハッシュします。LC_ALL=C またはファイルごとのマニフェストを使用してください。sha256sum -c はFAILEDを出力しながら終了コード0で終了します。$? ではなく列を読んでください。ターンキーではなく出発点です。本番のWiredTigerは、汎用カーバーがスタブ化するページ圧縮(snappy/zstd)とセルエンコーディングを使用します。圧縮ページ用に独自の強力なデコーダーを配線してください。すべての数値をポジティブコントロールと、2つ目の異なる計測器と照合してください: 仮定を共有する2つのツールは、それが正しいからではなく、仮定のために一致します。バイトを読むことがそれを検出します。
データが同じでない場合(異なるデータベース、アプリ、またはファイルシステム)、方法論は依然として有効です: ソースを読み取り専用に設定し、イメージ化し、コピーからカービングし、ゼロを信じる前にポジティブコントロールし、全体をカウントし、コンテンツで検証します。カーバーを交換し、規律を維持してください。
根本原因を強化してください: :8006 のProxmox Web UIはインターネットから到達可能であってはなりません。公式のProxmoxセキュリティアドバイザリに従ってください:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
復旧と強化に関する著者の一般的なアドバイスを含む、よりユーザーフレンドリーな解説: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / パブリックドメイン。LICENSE を参照してください。
| スクリプト | トラック | 機能 |
|---|
scripts/source_guard.sh | 共通 | 復旧コマンドをラップし、書き込みカウンターの差分によりソースが読み取り専用のままであることを証明。いかなるソース書き込みでも失敗します。 |
scripts/wt_leaf_carve.py | データベース | 生のWiredTigerリーフページからBSONをカービング。ページサイズはフィットではなくデコードで決定。必須のポジティブコントロール。 |
scripts/bson_frame.py | データベース | オンディスクフレーミングによるBSONドキュメントのカウント/検証。デフォルトはファイル全体。サンプルはFLOORとしてフラグ付けされます。 |
scripts/fs_carve_classify.py | ファイルシステム | カービングされたファイルフラグメントをファイル名ではなくコンテンツで分類。ファイルごとのマニフェストを書き出し、徹底的なシークレットスキャンを実行。 |
scripts/sensitivity_scan.py | 共通 | 復旧データを資格情報/PII露出についてRED/AMBER/GREENに階層化。カウントのみを出力し、値は決して出力しません。 |
scripts/integrity_verify.py | 共通 | 再構成されたコピーがソースに忠実であることを証明。コンテンツキー方式(リネームに耐性)。終了コードではなくOK/FAILED列を読み取ります。 |
scripts/make_demo.py | — | ツールキットを実行するための合成BSONフィクスチャ(実データなし)を生成。 |