
Wiederherstellungshinweise für Proxmox Advisory-ID: PSA-2026-00043-1 (CVE-2023-54391)
Wiederherstellung nach einem Wiper, der sich als Ransomware ausgab, nach einem Angriff auf internet-exponierte Proxmox-Infrastruktur (PSA-2026-00043-1 / CVE-2023-54391).
Der Angreifer löschte die Gäste und hinterließ beschädigte Dateisysteme. Zwei Wiederherstellungswege, je nachdem, was der Gast war:
Dies sind die Werkzeuge und die Methodik, verallgemeinert, damit sie für jeden in derselben Lage nützlich sind. Schreibgeschützt gegenüber der Quelle, CC0. Keine echten wiederhergestellten Daten sind enthalten; Beispielausgaben verwenden Platzhalter.
Die beschädigte Festplatte ist jetzt Ihre einzige Kopie dessen, was übrig ist. Reparieren Sie sie nicht. Erstellen Sie ein Image.
blockdev --setro /dev/<source> # 1. schreibgeschützt, sofort
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. Image auf sicheren Speicher
# 3. NICHT fsck, rw mounten oder "reparieren"; das überschreibt Blöcke, die ein Carver benötigt
# 4. jeden Quellendurchlauf in scripts/source_guard.sh einwickeln
# 5. nur vom Image wiederherstellen, niemals vom Original
Gemeinsame Disziplin, getrennte Carver. Führen Sie jedes mit -h aus. Python 3.8+ / bash, keine
Drittanbieter-Pakete. source_guard.sh benötigt Linux /proc/diskstats.
| Skript | Spur | Was es tut |
|---|---|---|
scripts/source_guard.sh | gemeinsam | Wickelt einen Wiederherstellungsbefehl ein; beweist, dass die Quelle schreibgeschützt blieb, über einen Schreibzähler-Diff. Schlägt bei jedem Quellenschreibzugriff fehl. |
scripts/wt_leaf_carve.py | Datenbank | Schneidet BSON aus rohen WiredTiger-Blattseiten heraus. Seitengröße per Dekodierung, nicht Passung; obligatorische Positivkontrolle. |
scripts/bson_frame.py | Datenbank | Zählt/validiert BSON-Dokumente anhand der On-Disk-Framing. Standardmäßig ganze Datei; eine Stichprobe wird als FLOOR gekennzeichnet. |
scripts/fs_carve_classify.py | Dateisystem | Klassifiziert herausgeschnittene Dateifragmente nach Inhalt, nicht Dateiname; schreibt ein Manifest pro Datei; erschöpfender Geheimnis-Scan. |
scripts/sensitivity_scan.py | gemeinsam | Stuft wiederhergestellte Daten in RED/AMBER/GREEN für Credential-/PII-Exposition ein. Gibt Zählungen aus, niemals Werte. |
scripts/integrity_verify.py | gemeinsam | Beweist, dass eine reorganisierte Kopie der Quelle treu ist. Inhaltsbasiert (übersteht Umbenennungen); liest OK/FAILED-Spalten, nicht Exit-Codes. |
scripts/make_demo.py | — | Erzeugt synthetische BSON-Fixtures (keine echten Daten), um das Toolkit zu testen. |
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
In dieser Reihenfolge ausgeführt. Der Carve-Schritt verzweigt je nach Gast; die setro/image-Klammern und die inhaltsbasierte Verifizierung sind in beiden Fällen gleich.
beschädigte Festplatte ──setro+image──► schreibgeschütztes Image
│
Datenbank ──────────►│◄────────── Dateisystem
WT-Seiten schneiden │ Dateien schneiden
Dokumente zählen │ nach Inhalt klassifizieren + Manifest
│
Exposition stufen (RED/AMBER/GREEN)
Kopie verifizieren (inhaltsbasiert)
│
wiederherstellen
find | sort | xargs sha256sum | sha256sum hasht auch Pfade und Locale. LC_ALL=C verwenden oder ein Manifest pro Datei.sha256sum -c beendet mit 0, während FAILED ausgegeben wird. Die Spalten lesen, nicht $?.Ausgangspunkte, nicht schlüsselfertig. Produktions-WiredTiger verwendet Seitenkomprimierung (snappy/zstd) und Zellkodierung, die der generische Carver auslässt. Eigene starke Dekodierung für komprimierte Seiten einbauen. Jede Zahl gegen eine Positivkontrolle und ein zweites, anderes Instrument gegenprüfen: Zwei Werkzeuge, die eine Annahme teilen, stimmen wegen der Annahme überein, nicht weil sie richtig ist; das Lesen der Bytes ist es, was das aufdeckt.
Wenn Ihre Daten nicht dieselben sind (andere Datenbank, App oder Dateisystem), trägt die Methodik trotzdem: Quelle schreibgeschützt setzen, Image erstellen, aus der Kopie schneiden, vor dem Glauben an eine Null positiv kontrollieren, das Ganze zählen, nach Inhalt verifizieren. Carver austauschen; Disziplin beibehalten.
Die Grundursache härten: Die Proxmox-Web-UI auf :8006 sollte nicht aus dem Internet erreichbar
sein. Den offiziellen Proxmox-Sicherheitshinweisen folgen:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
Ein benutzerfreundlicherer Bericht mit den allgemeinen Ratschlägen des Autors zu Wiederherstellung und Härtung: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / Public Domain. Siehe LICENSE.