Categories
Database Backup

** Learn how to protect enterprise database archives from ransomware using immutable storage. Discover technical implementation steps for AWS S3 Object Lock, ZFS, PostgreSQL, and SQL Server.

Dans le paysage actuel des menaces, les ransomwares ont évolué, passant du chiffrement opportuniste à des campagnes de multi-extorsion hautement ciblées. Les menaces persistantes avancées (APT) et les syndicats de ransomwares recherchent désormais activement les infrastructures de sauvegarde et les archives de bases de données pendant leur temps de présence sur le réseau. Si un attaquant compromet votre base de données principale et supprime ou chiffre simultanément vos référentiels de sauvegarde, votre organisation fait face à une perte de données catastrophique.

Pour les administrateurs de bases de données (DBA) et les ingénieurs DevOps, la stratégie de sauvegarde traditionnelle 3-2-1 n’est plus suffisante. Pour garantir la survie des données, les équipes d’infrastructure doivent adopter la règle 3-2-1-1, où le dernier « 1 » représente le stockage immuable.

Cet article propose une analyse technique approfondie de la conception, de la mise en œuvre et de la gestion du stockage immuable pour les archives de bases de données afin d’assurer une résilience absolue face aux ransomwares.

Le fonctionnement du stockage immuable

Le stockage immuable repose sur une architecture WORM (Write-Once-Read-Many, ou « écrire une fois, lire plusieurs fois »). Une fois les données écrites sur une cible immuable, elles ne peuvent être ni modifiées, ni chiffrées, ni supprimées par aucun utilisateur — y compris les administrateurs disposant de privilèges root ou les comptes de service compromis — jusqu’à l’expiration d’un verrouillage temporel mathématiquement appliqué.

Mode Conformité vs Mode Gouvernance

Lors de la mise en œuvre de l’immuabilité, en particulier dans le stockage objet cloud comme AWS S3, Azure Blob ou les SAN sur site compatibles S3, vous devez comprendre la distinction entre les modes de rétention :

  • Mode Gouvernance : Empêche les utilisateurs standard de supprimer ou de modifier des objets. Cependant, les utilisateurs disposant d’autorisations IAM spécifiques (par exemple, s3:BypassGovernanceRetention) peuvent contourner le verrouillage. C’est utile pour les tests mais insuffisant pour la protection contre les ransomwares, car les attaquants élèvent souvent leurs privilèges jusqu’au niveau administrateur de domaine ou root.
  • Mode Conformité : L’étalon-or pour la défense contre les ransomwares. Une fois qu’un objet est verrouillé en mode Conformité, sa période de rétention ne peut être raccourcie et l’objet ne peut être supprimé par personne, y compris le compte root AWS. Le verrouillage est appliqué au niveau du cluster de stockage.

Concevoir un pipeline de sauvegarde immuable

Une architecture d’archivage de base de données robuste sépare les opérations de base de données actives du niveau d’archivage immuable. Vous ne pouvez pas appliquer l’immuabilité aux fichiers de base de données actifs (comme .mdf/.ldf dans SQL Server ou le répertoire pg_data dans PostgreSQL) car les bases de données nécessitent un accès constant en lecture/écriture.

Au lieu de cela, l’immuabilité est appliquée aux :
1. Fichiers de sauvegarde complets et différentiels : Les instantanés de référence de la base de données.
2. Journaux de transactions / Fichiers WAL : Le flux continu de modifications de la base de données requis pour la récupération à un instant T (PITR).

Cibles de stockage pour l’immuabilité

Vous pouvez implémenter le stockage immuable sur différents niveaux d’infrastructure :
* Stockage objet cloud : AWS S3 Object Lock, Azure Blob Immutable Storage, politiques de rétention Google Cloud Storage.
* Stockage objet sur site : MinIO, Cloudian ou Pure Storage FlashBlade prenant en charge les API S3 Object Lock.
* Stockage bloc/fichier : ZFS avec instantanés en lecture seule et administration déléguée, ou attributs de fichier Linux.

Mise en œuvre du stockage immuable : guides techniques

1. Stockage objet cloud : AWS S3 Object Lock

Pour protéger les dumps de bases de données et les journaux de transactions dans AWS, vous devez activer Object Lock lors de la création du bucket.

Tout d’abord, créez le bucket avec Object Lock activé :

aws s3api create-bucket 
    --bucket prod-db-archive-immutable 
    --region us-east-1 
    --object-lock-enabled-for-bucket

Ensuite, configurez la politique de rétention par défaut. Pour les archives de bases de données, un verrouillage de conformité de 30 jours est une base standard, garantissant que vous disposez d’un mois de sauvegardes inaltérables.

aws s3api put-object-lock-configuration 
    --bucket prod-db-archive-immutable 
    --object-lock-configuration '{
        "ObjectLockEnabled": "Enabled",
        "Rule": {
            "DefaultRetention": {
                "Mode": "COMPLIANCE",
                "Days": 30
            }
        }
    }'

Lorsque votre script ou agent de sauvegarde de base de données envoie un fichier vers ce bucket, S3 calcule automatiquement la Retain Until Date (date de conservation) basée sur l’horodatage de création de l’objet plus 30 jours.

2. Immuabilité sur site : ZFS et attributs Linux

Si vous archivez des bases de données sur un serveur de sauvegarde Linux sur site, vous pouvez obtenir une pseudo-immuabilité en utilisant la commande chattr, ou une véritable immuabilité en utilisant les instantanés ZFS.

Utilisation de chattr sous Linux :
L’indicateur +i (immuable) empêche la modification, la suppression ou le renommage de fichiers.

# Dump de la base de données
pg_dump -U postgres -Fc mydb > /backups/mydb_$(date +%F).dump

# Rendre la sauvegarde immuable
sudo chattr +i /backups/mydb_$(date +%F).dump

# Vérifier l'attribut
lsattr /backups/mydb_$(date +%F).dump
# Sortie : ----i---------e------- /backups/mydb_2023-10-27.dump

Note : Bien que chattr arrête les scripts de ransomware basiques, un attaquant sophistiqué ayant un accès root peut simplement exécuter chattr -i. Par conséquent, cela doit être combiné avec un contrôle d’accès basé sur les rôles (RBAC) strict et des réseaux de sauvegarde isolés.

Utilisation des instantanés ZFS :
ZFS offre une défense beaucoup plus solide. En prenant un instantané et en y plaçant une « retenue » (hold), vous empêchez la destruction de cet instantané.

# Prendre un instantané du jeu de données de sauvegarde
zfs snapshot tank/db_backups@archive_$(date +%F)

# Placer une retenue sur l'instantané pour empêcher la suppression
zfs hold keep_30_days tank/db_backups@archive_$(date +%F)

# Même root ne peut pas détruire cet instantané sans libérer la retenue
zfs destroy tank/db_backups@archive_$(date +%F)
# Sortie : cannot destroy 'tank/db_backups@archive_...': dataset is busy

Stratégies d’archivage spécifiques aux bases de données

Pour obtenir une récupération à un instant T (PITR), vous devez archiver en continu les journaux de transactions vers votre stockage immuable.

Archivage WAL PostgreSQL avec pgBackRest

pgBackRest est un outil de sauvegarde très fiable pour PostgreSQL qui prend nativement en charge le stockage compatible S3. Pour protéger vos journaux Write-Ahead (WAL), configurez pgBackRest pour envoyer les données directement vers votre bucket S3 immuable.

Dans votre pgbackrest.conf :

[global]
repo1-type=s3
repo1-s3-bucket=prod-db-archive-immutable
repo1-s3-region=us-east-1
repo1-s3-endpoint=s3.amazonaws.com
repo1-s3-key=AKIAIOSFODNN7EXAMPLE
repo1-s3-key-secret=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

# Assurez-vous que la rétention s'aligne avec votre configuration S3 Object Lock
repo1-retention-full=2
repo1-retention-archive=2

[prod_cluster]
pg1-path=/var/lib/postgresql/14/main

Considération cruciale : Si votre bucket S3 applique un verrouillage de conformité de 30 jours, mais que pgBackRest tente d’expirer et de supprimer les fichiers WAL après 14 jours en fonction de repo1-retention-archive, les appels d’API de suppression échoueront. Vous devez vous assurer que la politique de rétention de votre logiciel de sauvegarde est supérieure ou égale au verrouillage immuable au niveau du stockage.

Microsoft SQL Server : Sauvegarde vers URL

SQL Server prend en charge les sauvegardes natives directement vers un stockage objet compatible S3. Vous pouvez configurer un travail SQL Server Agent pour écrire les fichiers .bak et .trn directement dans un bucket immuable.

CREATE CREDENTIAL [s3://prod-db-archive-immutable.s3.us-east-1.amazonaws.com]
WITH IDENTITY = 'S3 Access Key',
SECRET = 'AccessKeyID:SecretAccessKey';
GO

BACKUP DATABASE [ProductionDB]
TO URL = 's3://prod-db-archive-immutable.s3.us-east-1.amazonaws.com/ProductionDB_Full.bak'
WITH FORMAT, COMPRESSION, STATS = 10;
GO

Automatisation et orchestration avec CloudSave

La gestion des indicateurs de rétention immuable, la rotation des clés d’accès et la synchronisation entre les politiques de rétention des bases de données et les verrouillages de stockage via des scripts personnalisés sont très sujettes aux erreurs. Une seule mauvaise configuration dans une tâche cron ou un appel API peut laisser vos archives exposées ou entraîner une explosion des coûts de stockage cloud en raison d’objets verrouillés orphelins.

Les plateformes de sauvegarde d’entreprise comme CloudSave simplifient cette architecture. CloudSave s’intègre nativement avec AWS S3 Object Lock, Azure Blob Immutable Storage et les API compatibles S3 sur site.

Lors de la configuration d’un plan de sauvegarde de base de données dans CloudSave :
1. La plateforme gère automatiquement la mise en quiescence VSS (Volume Shadow Copy Service) pour SQL Server ou l’API pg_start_backup() pour PostgreSQL.
2. Elle diffuse les données de sauvegarde dédupliquées et chiffrées directement vers la cible de stockage.
3. CloudSave applique dynamiquement les appels d’API WORM (par exemple, PutObjectRetention) objet par objet, alignant parfaitement la durée du verrouillage de stockage avec le calendrier de rétention défini par la politique.
4. Si un attaquant compromet la console de gestion CloudSave, il ne peut toujours pas supprimer les sauvegardes, car le verrouillage de conformité est appliqué par l’infrastructure de stockage sous-jacente, et non par le logiciel de sauvegarde.

Meilleures pratiques pour les archives de bases de données immuables

Pour garantir que votre architecture immuable est réellement résiliente, respectez les meilleures pratiques d’ingénierie système suivantes :

1. Synchronisation NTP stricte

Les verrouillages immuables sont mathématiquement liés à des horodatages. Si le service NTP (Network Time Protocol) sur votre baie de stockage ou votre serveur de sauvegarde est compromis ou dérive, cela peut entraîner l’expiration prématurée des verrouillages ou empêcher leur expiration. Assurez-vous que votre infrastructure de stockage utilise des sources NTP authentifiées et redondantes.

2. Isoler les rôles et identifiants IAM

Les identifiants utilisés pour écrire dans le bucket immuable ne doivent avoir que les autorisations s3:PutObject et s3:PutObjectRetention. Ils ne doivent jamais avoir les autorisations s3:DeleteObject ou s3:PutBucketObjectLockConfiguration.

Exemple de politique IAM à privilèges minimaux pour un agent de sauvegarde de base de données :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetBucketObjectLockConfiguration"
            ],
            "Resource": [
                "arn:aws:s3:::prod-db-archive-immutable",
                "arn:aws:s3:::prod-db-archive-immutable/*"
            ]
        }
    ]
}

3. Dimensionnement de la période de rétention

Ne définissez pas de verrouillages de conformité pour des périodes excessivement longues (par exemple, 7 ans pour la conformité) sur votre niveau de récupération rapide primaire. Les bases de données génèrent des quantités massives de données de journaux WAL/transactions. Verrouiller ces données pendant des années entraînera une croissance exponentielle des coûts de stockage.
Utilisez plutôt une approche par niveaux :
* Niveau de récupération opérationnelle : 14 à 30 jours de rétention immuable pour les sauvegardes complètes et les journaux.
* Niveau d’archivage à long terme : Sauvegardes complètes mensuelles déplacées vers Glacier/Deep Archive avec Vault Lock pour 1 à 7 ans.

4. Tests de récupération réguliers dans des VPC isolés (Air-Gapped)

L’immuabilité garantit que les données ne peuvent pas être supprimées, mais elle ne garantit pas que les données sont exemptes de corruption logique. Vous devez automatiser la restauration de vos archives de bases de données immuables dans un VPC ou un VLAN isolé et déconnecté (air-gapped). Exécutez DBCC CHECKDB (SQL Server) ou pg_amcheck (PostgreSQL) sur les données restaurées pour vérifier l’intégrité structurelle.

Conclusion

La défense contre les ransomwares consiste à partir du principe que la brèche est inévitable. Au moment où une alerte se déclenche dans votre SIEM, les acteurs malveillants ont probablement déjà tenté de compromettre votre infrastructure de sauvegarde. En concevant vos archives de bases de données à l’aide d’un stockage immuable en mode Conformité, vous privez les attaquants de leur principal levier. Que vous utilisiez des API cloud natives, des retenues ZFS ou une plateforme d’orchestration d’entreprise comme CloudSave, la mise en œuvre d’un stockage WORM n’est plus facultative : c’est un pilier obligatoire de l’administration moderne des bases de données et de la reprise après sinistre.