Scénario ransomware : isoler, vérifier, restaurer¶
Ce lab vous entraîne au réflexe face à un ransomware : isoler d'abord, geler les sauvegardes, identifier le dernier point sain, restaurer dans une bulle isolée, et comprendre pourquoi la copie MSP sous droits séparés survit quand le PBS local a été vidé par l'attaquant.
Cluster de test uniquement
Ce lab chiffre volontairement des fichiers et supprime des sauvegardes. Ne l'exécutez jamais sur la production ni sur un PBS qui contient des sauvegardes réelles. Utilisez un cluster de lab (même un PVE mono-nœud imbriqué) et deux PBS de lab.
Prérequis¶
| Élément | Lab |
|---|---|
| PVE | pve01 de lab, bridge isolé vmbr9 sans uplink |
| PBS « local » | pbs-lab-local, datastore pbs01, stockage PVE pbs-local |
| PBS « MSP » | pbs-lab-msp, datastore client-a, sync pull depuis pbs-lab-local toutes les heures, remove-vanished désactivé, prune keep-hourly 24, keep-daily 7 |
| Compte de sync | Sur pbs-lab-local : msp-pull@pbs avec rôle DatastoreReader seulement |
| VM victime | VM 9201 Debian, dossier /srv/data avec une centaine de fichiers texte, agent invité actif |
| Job de sauvegarde | VM 9201 vers pbs-local, toutes les heures |
Objectifs¶
- Appliquer l'ordre isoler → geler → vérifier → restaurer.
- Repérer dans les logs de sauvegarde le moment de l'infection.
- Distinguer intégrité technique (verify) et intégrité métier (fichiers lisibles).
- Constater l'intérêt d'une copie dont le client ne détient pas les droits de suppression.
Scénario pas à pas¶
Phase 1 : situation saine¶
- Laisser tourner au moins 3 sauvegardes horaires de la VM 9201 et 3 syncs vers
pbs-lab-msp. - Noter, dans le log de chaque sauvegarde, la ligne
dirty-bitmap statuset le pourcentagereused.
Phase 2 : attaque simulée¶
-
Dans la VM 9201, chiffrer les fichiers (script de lab, sans danger hors de ce dossier) :
-
Laisser passer une sauvegarde horaire (le point infecté entre dans le PBS local) et une sync.
- Simuler l'attaquant qui a volé le compte
root@pamdu PBS local : supprimer les snapshots de la VM 9201 surpbs-lab-local(Datastore → Content → groupevm/9201→ Remove). - Tenter la même suppression sur
pbs-lab-mspavec le comptemsp-pull@pbs: constater l'échec.
Phase 3 : réponse à incident¶
- Isoler la VM :
qm set 9201 --net0 virtio,bridge=vmbr9,link_down=1(ou Hardware → Network Device → Disconnect). Ne pas l'éteindre avant d'avoir décidé si une analyse mémoire est nécessaire. - Geler les sauvegardes : désactiver le job de sauvegarde PVE, les prune jobs et la GC des deux PBS. Côté MSP : suspendre la sync pull. Marquer Protected les snapshots candidats sur
pbs-lab-msp. - Identifier le dernier point sain sur
pbs-lab-msp:- lire les logs : la sauvegarde post-infection montre un volume modifié anormal et un
reuseden chute ; - déclarer
pbs-lab-mspdans PVE comme stockagepbs-msp, avec un compte du PBS MSP limité au rôleDatastoreReader(en réel, fourni temporairement par le MSP) ; - ouvrir chaque snapshot avec File Restore et vérifier que
/srv/data/*.txtest lisible.
- lire les logs : la sauvegarde post-infection montre un volume modifié anormal et un
- Vérifier le snapshot choisi : Datastore → Content → snapshot → Verify, statut
ok. -
Restaurer sous un nouvel ID, sur
vmbr9, sans démarrage automatique (RB-12) : -
Contrôler dans la VM 9202 que les fichiers sont lisibles, rechercher la persistance (tâches planifiées, clés SSH, comptes ajoutés), changer les mots de passe, puis seulement reconnecter au réseau.
- Réactiver les jobs, rapatrier la chaîne de sauvegarde sur le PBS local reconstruit (sync pull inverse dans un namespace dédié), et rédiger le retour d'expérience.
Questions¶
- Pourquoi isoler la VM avant de restaurer, plutôt que restaurer immédiatement par-dessus ?
- Pourquoi désactiver le prune et la GC dès la détection ?
- Le verify du snapshot infecté est
ok. Est-il sain ? - Pourquoi l'attaquant n'a-t-il pas pu supprimer la copie MSP ? Qu'est-ce qui aurait annulé cette protection ?
- Les sauvegardes sont chiffrées côté client et la clé n'était que sur
pve01, lui aussi chiffré par l'attaquant. Que se passe-t-il ?
Corrigé
- L'attaquant est peut-être encore présent : une VM restaurée sur le même réseau peut être réinfectée aussitôt. Restaurer par-dessus détruit aussi les preuves et le point de comparaison.
- Le prune supprime les points les plus anciens, souvent les seuls sains si l'infection date de plusieurs jours, et la GC rend la suppression définitive après le délai de grâce. Geler la rétention préserve tous les candidats.
- Non. Le verify contrôle l'intégrité des chunks par rapport à leur empreinte : un fichier chiffré par le ransomware est un contenu valide du point de vue de PBS. Seul le contrôle des données (File Restore, démarrage, applicatif) dit si le point est sain.
- La copie est tirée en pull par le PBS du MSP : le PBS local ne détient aucun identifiant du PBS MSP, et le compte
msp-pull@pbsn'a queDatastoreReadersur le PBS local.remove-vanishedest désactivé, donc les suppressions locales ne se propagent pas, et la rétention MSP est pilotée par le MSP seul. La protection serait annulée par :remove-vanishedactif, un push avec un jeton disposant deDatastore.PruneouDatastore.Modifycôté MSP, ou des comptes d'administration partagés (même annuaire AD) entre client et MSP. - Les sauvegardes, locales comme MSP, sont indéchiffrables. Seule une paperkey ou une master key séquestrée hors du cluster permet la restauration. C'est un point du test mensuel (PV de test).
En situation réelle
Ransomware avéré ou suspecté : ticket iTop P1 immédiat, avant toute restauration. Le MSP gèle la rétention de la copie distante et vous accompagne dans le choix du point sain (RB-15, sévérité).