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.

V modernom prostredí hrozieb sa ransomware vyvinul z oportunistického šifrovania na vysoko cielené kampane s viacnásobným vydieraním. Pokročilé pretrvávajúce hrozby (APT) a syndikáty ransomwaru teraz počas svojho pôsobenia v sieti aktívne vyhľadávajú zálohovaciu infraštruktúru a archívy databáz. Ak útočník kompromituje vašu primárnu databázu a súčasne odstráni alebo zašifruje vaše zálohovacie úložiská, vaša organizácia čelí katastrofálnej strate dát.

Pre správcov databáz (DBA) a DevOps inžinierov už tradičná stratégia zálohovania 3-2-1 nestačí. Aby tímy infraštruktúry zaručili prežitie dát, musia prijať pravidlo 3-2-1-1, kde posledná „1“ predstavuje nemenné (imutable) úložisko.

Tento článok poskytuje komplexný technický pohľad na architektúru, implementáciu a správu nemenného úložiska pre databázové archívy s cieľom zabezpečiť absolútnu odolnosť voči ransomwaru.

Mechanizmus nemenného úložiska

Nemenné úložisko sa spolieha na architektúru typu Write-Once-Read-Many (WORM) – zapíš raz, čítaj mnohokrát. Akonáhle sú dáta zapísané do nemenného cieľa, nemôžu byť upravené, zašifrované ani odstránené žiadnym používateľom – vrátane správcov s oprávneniami root alebo kompromitovaných servisných účtov – až kým nevyprší matematicky vynútený časový zámok.

Režim súladu (Compliance Mode) vs. Režim správy (Governance Mode)

Pri implementácii nemennosti, najmä v cloudových objektových úložiskách ako AWS S3, Azure Blob alebo S3-kompatibilných on-premises SAN, musíte rozumieť rozdielu medzi režimami uchovávania:

  • Režim správy (Governance Mode): Zabraňuje štandardným používateľom mazať alebo meniť objekty. Používatelia so špecifickými oprávneniami IAM (napr. s3:BypassGovernanceRetention) však môžu zámok obísť. Je to užitočné na testovanie, ale nedostatočné na ochranu pred ransomwarem, pretože útočníci často eskalujú oprávnenia na úroveň správcu domény alebo roota.
  • Režim súladu (Compliance Mode): Zlatý štandard pre obranu proti ransomwaru. Akonáhle je objekt uzamknutý v režime súladu, jeho retenčné obdobie nemožno skrátiť a objekt nemôže odstrániť nikto, vrátane root účtu AWS. Zámok je vynútený na úrovni úložného klastra.

Architektúra nemenného zálohovacieho potrubia

Robustná architektúra archivácie databáz oddeľuje aktívne databázové operácie od vrstvy nemenného archívu. Nemennosť nemôžete aplikovať na aktívne databázové súbory (ako .mdf/.ldf v SQL Serveri alebo adresár pg_data v PostgreSQL), pretože databázy vyžadujú neustály prístup na čítanie a zápis.

Namiesto toho sa nemennosť aplikuje na:
1. Úplné a diferenciálne záložné súbory: Základné snímky databázy.
2. Transakčné logy / WAL súbory: Kontinuálny prúd databázových zmien potrebný pre obnovu k určitému bodu v čase (Point-in-Time Recovery – PITR).

Ciele úložiska pre nemennosť

Nemenné úložisko môžete implementovať naprieč rôznymi vrstvami infraštruktúry:
* Cloudové objektové úložisko: AWS S3 Object Lock, Azure Blob Immutable Storage, Google Cloud Storage Retention Policies.
* On-premises objektové úložisko: MinIO, Cloudian alebo Pure Storage FlashBlade s podporou S3 Object Lock API.
* Blokové/súborové úložisko: ZFS so snímkami (snapshots) určenými len na čítanie a delegovanou správou, alebo atribúty súborov v systéme Linux.

Implementácia nemenného úložiska: Technické návody

1. Cloudové objektové úložisko: AWS S3 Object Lock

Ak chcete chrániť databázové výpisy a transakčné logy v AWS, musíte pri vytváraní bucketu povoliť funkciu Object Lock.

Najprv vytvorte bucket s povoleným Object Lock:

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

Ďalej nakonfigurujte predvolenú retenčnú politiku. Pre databázové archívy je 30-dňový zámok v režime súladu štandardným základom, ktorý zabezpečí, že budete mať mesiac nemenných záloh.

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

Keď váš skript alebo agent na zálohovanie databázy odošle súbor do tohto bucketu, S3 automaticky vypočíta Retain Until Date na základe časovej pečiatky vytvorenia objektu plus 30 dní.

2. On-premises nemennosť: ZFS a atribúty Linuxu

Ak archivujete databázy na on-premises zálohovací server so systémom Linux, môžete dosiahnuť pseudo-nemennosť pomocou príkazu chattr alebo skutočnú nemennosť pomocou snímok ZFS.

Použitie Linux chattr:
Príznak +i (immutable) zabraňuje úprave, odstráneniu alebo premenovaniu súboru.

# Vytvorenie výpisu databázy
pg_dump -U postgres -Fc mydb > /backups/mydb_$(date +%F).dump

# Nastavenie nemennosti zálohy
sudo chattr +i /backups/mydb_$(date +%F).dump

# Overenie atribútu
lsattr /backups/mydb_$(date +%F).dump
# Výstup: ----i---------e------- /backups/mydb_2023-10-27.dump

Poznámka: Hoci chattr zastaví základné skripty ransomwaru, sofistikovaný útočník s prístupom root môže jednoducho spustiť chattr -i. Preto sa to musí kombinovať s prísnym RBAC a izolovanými zálohovacími sieťami.

Použitie snímok ZFS:
ZFS poskytuje oveľa silnejšiu obranu. Vytvorením snímky a jej „podržaním“ (hold) zabránite jej zničeniu.

# Vytvorenie snímky zálohovacieho datasetu
zfs snapshot tank/db_backups@archive_$(date +%F)

# Podržanie snímky, aby sa zabránilo jej odstráneniu
zfs hold keep_30_days tank/db_backups@archive_$(date +%F)

# Ani root nemôže zničiť túto snímku bez uvoľnenia podržania
zfs destroy tank/db_backups@archive_$(date +%F)
# Výstup: cannot destroy 'tank/db_backups@archive_...': dataset is busy

Stratégie archivácie špecifické pre databázy

Aby ste dosiahli obnovu k určitému bodu v čase (PITR), musíte nepretržite archivovať transakčné logy do svojho nemenného úložiska.

Archivácia WAL v PostgreSQL pomocou pgBackRest

pgBackRest je vysoko spoľahlivý nástroj na zálohovanie pre PostgreSQL, ktorý natívne podporuje S3-kompatibilné úložiská. Na ochranu svojich Write-Ahead Logs (WAL) nakonfigurujte pgBackRest tak, aby ich odosielal priamo do vášho nemenného S3 bucketu.

Vo vašom 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

# Uistite sa, že retencia je v súlade s vašou konfiguráciou S3 Object Lock
repo1-retention-full=2
repo1-retention-archive=2

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

Kľúčové upozornenie: Ak váš S3 bucket vynucuje 30-dňový zámok v režime súladu, ale pgBackRest sa pokúsi vymazať WAL súbory po 14 dňoch na základe repo1-retention-archive, volania API na odstránenie zlyhajú. Musíte zabezpečiť, aby retenčná politika vášho zálohovacieho softvéru bola väčšia alebo rovná nemennému zámku na úrovni úložiska.

Microsoft SQL Server: Zálohovanie na URL

SQL Server podporuje natívne zálohovanie priamo do S3-kompatibilného objektového úložiska. Môžete nakonfigurovať úlohu SQL Server Agenta na zápis súborov .bak a .trn priamo do nemenného bucketu.

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

Automatizácia a orchestrácia s CloudSave

Správa nemenných retenčných príznakov, rotácia prístupových kľúčov a zabezpečenie synchronizácie medzi retenčnými politikami databáz a zámkami úložiska pomocou vlastných skriptov je vysoko náchylná na chyby. Jediná chybná konfigurácia v cron úlohe alebo API volaní môže nechať vaše archívy nechránené alebo viesť k prudkému nárastu nákladov na cloudové úložisko kvôli osiroteným, uzamknutým objektom.

Podnikové zálohovacie platformy ako CloudSave zjednodušujú túto architektúru. CloudSave sa natívne integruje s AWS S3 Object Lock, Azure Blob Immutable Storage a on-premises S3-kompatibilnými API.

Pri konfigurácii plánu zálohovania databázy v CloudSave:
1. Platforma automaticky spracováva quiescence VSS (Volume Shadow Copy Service) pre SQL Server alebo API pg_start_backup() pre PostgreSQL.
2. Streamuje deduplikované, zašifrované zálohovacie dáta priamo do cieľového úložiska.
3. CloudSave dynamicky aplikuje WORM API volania (napr. PutObjectRetention) na úrovni jednotlivých objektov, čím dokonale zosúlaďuje trvanie zámku úložiska s retenčným plánom definovaným v politike.
4. Ak útočník kompromituje konzolu správy CloudSave, stále nemôže odstrániť zálohy, pretože zámok súladu je vynútený základnou infraštruktúrou úložiska, nie zálohovacím softvérom.

Osvedčené postupy pre nemenné databázové archívy

Aby ste zabezpečili, že vaša nemenná architektúra je skutočne odolná, dodržiavajte nasledujúce osvedčené postupy systémového inžinierstva:

1. Prísna synchronizácia NTP

Nemenné zámky sú matematicky viazané na časové pečiatky. Ak je služba NTP (Network Time Protocol) na vašom úložnom poli alebo zálohovacom serveri kompromitovaná alebo vykazuje odchýlky, môže to spôsobiť predčasné vypršanie zámkov alebo ich nikdy nevypršanie. Zabezpečte, aby vaša infraštruktúra úložiska používala autentifikované, redundantné zdroje NTP.

2. Izolácia IAM rolí a poverení

Poverenia použité na zápis do nemenného bucketu musia mať iba oprávnenia s3:PutObject a s3:PutObjectRetention. Nikdy by nemali mať oprávnenia s3:DeleteObject alebo s3:PutBucketObjectLockConfiguration.

Príklad politiky IAM s minimálnymi oprávneniami pre agenta zálohovania databázy:

{
    "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. Dimenzovanie retenčného obdobia

Nenastavujte zámky súladu na príliš dlhé obdobia (napr. 7 rokov pre compliance) na vašej primárnej vrstve pre rýchlu obnovu. Databázy generujú obrovské množstvo dát WAL/transakčných logov. Uzamknutie týchto dát na roky povedie k exponenciálnemu rastu nákladov na úložisko.
Namiesto toho použite vrstvený prístup:
* Vrstva operačnej obnovy: 14 až 30 dní nemenného uchovávania pre úplné zálohy a logy.
* Vrstva dlhodobej archivácie: Mesačné úplné zálohy presunuté do Glacier/Deep Archive so zámkom Vault Lock na 1 – 7 rokov.

4. Pravidelné testovanie obnovy v izolovaných (air-gapped) VPC

Nemennosť zaručuje, že dáta nemožno odstrániť, ale nezaručuje, že dáta sú bez logického poškodenia. Musíte automatizovať obnovu svojich nemenných databázových archívov do izolovaného, air-gapped VPC alebo VLAN. Spustite DBCC CHECKDB (SQL Server) alebo pg_amcheck (PostgreSQL) na obnovených dátach, aby ste overili štrukturálnu integritu.

Záver

Obrana proti ransomwaru je cvičením v predpoklade prieniku. V čase, keď sa vo vašom SIEM spustí upozornenie, sa útočníci pravdepodobne už pokúsili kompromitovať vašu zálohovaciu infraštruktúru. Architektúrou vašich databázových archívov pomocou nemenného úložiska v režime súladu pripravíte útočníkov o ich hlavnú páku. Či už využívate natívne cloudové API, ZFS holdy alebo podnikovú orchestrálnu platformu ako CloudSave, implementácia WORM úložiska už nie je voliteľná – je to povinný pilier modernej správy databáz a obnovy po havárii.