
Notes de récupération pour l'avis proxmox ID : PSA-2026-00043-1 (CVE-2023-54391)
Récupération après un wiper déguisé en ransomware, suite à une attaque contre une infrastructure Proxmox exposée sur Internet (PSA-2026-00043-1 / CVE-2023-54391).
L'attaquant a effacé les invités et laissé les systèmes de fichiers endommagés. Deux pistes de récupération selon le type d'invité :
Voici les outils et la méthodologie, généralisés pour être utiles à toute personne dans la même situation. Lecture seule sur la source, CC0. Aucune donnée réelle récupérée n'est incluse ; les exemples de sortie utilisent des espaces réservés.
Le disque endommagé est désormais votre seule copie de ce qui reste. Ne le réparez pas. Imagez-le.
blockdev --setro /dev/<source> # 1. lecture seule, immédiatement
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. image vers un stockage sûr
# 3. ne PAS faire de fsck, de montage rw, ni de "réparation" ; cela écrase les blocs dont un carver a besoin
# 4. enveloppez chaque passe sur la source dans scripts/source_guard.sh
# 5. récupérez uniquement depuis l'image, jamais depuis l'original
Discipline partagée, carvers séparés. Lancez n'importe lequel avec -h. Python 3.8+ / bash, aucun
paquet tiers. source_guard.sh nécessite Linux /proc/diskstats.
| script | piste | ce qu'il fait |
|---|---|---|
scripts/source_guard.sh | partagé | Enveloppe une commande de récupération ; prouve que la source est restée en lecture seule via un diff de compteur d'écritures. Échoue sur toute écriture sur la source. |
scripts/wt_leaf_carve.py | base de données | Extrait le BSON des pages feuilles WiredTiger brutes. Taille de page par décodage, pas par ajustement ; contrôle positif obligatoire. |
scripts/bson_frame.py | base de données | Compte/valide les documents BSON par cadrage sur disque. Fichier entier par défaut ; un échantillon est signalé comme un PLANCHER. |
scripts/fs_carve_classify.py | système de fichiers | Classe les fragments de fichiers extraits par contenu, pas par nom de fichier ; écrit un manifeste par fichier ; scan exhaustif des secrets. |
scripts/sensitivity_scan.py | partagé | Hiérarchise les données récupérées ROUGE/AMBRE/VERT pour l'exposition d'identifiants/données personnelles. Affiche les compteurs, jamais les valeurs. |
scripts/integrity_verify.py | partagé | Prouve qu'une copie réorganisée est fidèle à la source. Basé sur le contenu (survit aux renommages) ; lit les colonnes OK/ÉCHEC, pas les codes de sortie. |
scripts/make_demo.py | — | Génère des fixtures BSON synthétiques (aucune donnée réelle) pour tester la boîte à outils. |
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
Exécutée dans cet ordre. L'étape d'extraction bifurque selon l'invité ; les bornes setro/image et la vérification basée sur le contenu sont identiques dans les deux cas.
disque endommagé ──setro+image──► image en lecture seule
│
base de données ────►│◄────────── système de fichiers
extraire les pages WT │ extraire les fichiers
compter les documents │ classifier par contenu + manifeste
│
hiérarchiser l'exposition (ROUGE/AMBRE/VERT)
vérifier la copie (basée sur le contenu)
│
récupération
find | sort | xargs sha256sum | sha256sum hache aussi les chemins et la locale. Utilisez LC_ALL=C, ou un manifeste par fichier.sha256sum -c sort avec 0 tout en affichant ÉCHEC. Lisez les colonnes, pas $?.Points de départ, pas des solutions clés en main. WiredTiger en production utilise la compression de pages (snappy/zstd) et un encodage de cellules que le carver générique laisse en ébauche. Implémentez votre propre décodeur robuste pour les pages compressées. Recoupez chaque nombre avec un contrôle positif et un second instrument différent : deux outils qui partagent une hypothèse s'accordent à cause de l'hypothèse, pas parce qu'elle est juste ; c'est la lecture des octets qui permet de le détecter.
Si vos données ne sont pas les mêmes (base de données, application ou système de fichiers différents), la méthodologie tient toujours : passez la source en lecture seule, imagez-la, extrayez depuis la copie, contrôlez positivement avant de croire un zéro, comptez l'ensemble, vérifiez par contenu. Changez le carver ; gardez la discipline.
Durcissez la cause racine : l'interface web Proxmox sur :8006 ne doit pas être accessible depuis
Internet. Suivez les avis de sécurité officiels Proxmox :
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
Un article plus convivial avec les conseils généraux de l'auteur sur la récupération et le durcissement : https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / domaine public. Voir LICENSE.