
Note di ripristino per l'advisory Proxmox ID: PSA-2026-00043-1 (CVE-2023-54391)
Recupero da un wiper presentato come ransomware, dopo un attacco contro infrastruttura Proxmox esposta a internet (PSA-2026-00043-1 / CVE-2023-54391).
L'attaccante ha cancellato le guest e lasciato i filesystem danneggiati. Due percorsi di recupero a seconda del tipo di guest:
Questi sono gli strumenti e la metodologia, generalizzati per essere utili a chiunque si trovi nella stessa situazione. Sola lettura sulla sorgente, CC0. Nessun dato reale recuperato è incluso; l'output di esempio usa segnaposto.
Il disco danneggiato è ora la tua unica copia di ciò che resta. Non ripararlo. Creane un'immagine.
blockdev --setro /dev/<source> # 1. sola lettura, immediatamente
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. immagine su storage sicuro
# 3. NON eseguire fsck, montare in rw o "riparare"; ciò sovrascrive blocchi necessari a un carver
# 4. avvolgi ogni passaggio sulla sorgente in scripts/source_guard.sh
# 5. recupera solo dall'immagine, mai dall'originale
Disciplina condivisa, carver separati. Esegui qualsiasi con -h. Python 3.8+ / bash, nessun
pacchetto di terze parti. source_guard.sh richiede Linux /proc/diskstats.
| script | percorso | cosa fa |
|---|---|---|
scripts/source_guard.sh | condiviso | Avvolge un comando di recupero; dimostra che la sorgente è rimasta in sola lettura tramite un diff del contatore di scritture. Fallisce su qualsiasi scrittura sulla sorgente. |
scripts/wt_leaf_carve.py | database | Estrae BSON da pagine leaf WiredTiger grezze. Dimensione pagina tramite decodifica, non adattamento; controllo positivo obbligatorio. |
scripts/bson_frame.py | database | Conta/valida documenti BSON tramite framing su disco. Intero file di default; un campione è segnalato come FLOOR. |
scripts/fs_carve_classify.py | filesystem | Classifica frammenti di file estratti tramite contenuto, non nome file; scrive un manifest per file; scansione esaustiva dei segreti. |
scripts/sensitivity_scan.py | condiviso | Classifica i dati recuperati in livelli RED/AMBER/GREEN per esposizione di credenziali/PII. Stampa i conteggi, mai i valori. |
scripts/integrity_verify.py | condiviso | Dimostra che una copia riorganizzata è fedele alla sorgente. Basato sul contenuto (sopravvive ai rinomina); legge le colonne OK/FAILED, non i codici di uscita. |
scripts/make_demo.py | — | Genera fixture BSON sintetiche (nessun dato reale) per testare il toolkit. |
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
Eseguita in questo ordine. Il passaggio di estrazione si dirama in base alla guest; i bookend setro/immagine e la verifica basata sul contenuto sono gli stessi in entrambi i casi.
disco danneggiato ──setro+immagine──► immagine in sola lettura
│
database ──────────►│◄────────── filesystem
estrai pagine WT │ estrai file
conta documenti │ classifica per contenuto + manifest
│
classifica esposizione (RED/AMBER/GREEN)
verifica copia (basata sul contenuto)
│
recupero
find | sort | xargs sha256sum | sha256sum esegue l'hash anche di percorsi e locale. Usa LC_ALL=C, o un manifest per file.sha256sum -c esce con 0 mentre stampa FAILED. Leggi le colonne, non $?.Punti di partenza, non soluzioni chiavi in mano. WiredTiger in produzione usa compressione delle pagine (snappy/zstd) e codifica delle celle che il carver generico lascia non implementate. Implementa il tuo decoder robusto per pagine compresse. Incrocia ogni numero con un controllo positivo e un secondo strumento, diverso: due strumenti che condividono un presupposto concordano per il presupposto, non perché è corretto; leggere i byte è ciò che lo rileva.
Se i tuoi dati non sono gli stessi (database, applicazione o filesystem diversi), la metodologia regge comunque: imposta la sorgente in sola lettura, crea un'immagine, estrai dalla copia, controllo positivo prima di credere a uno zero, conta l'intero contenuto, verifica tramite contenuto. Sostituisci il carver; mantieni la disciplina.
Rafforza la causa principale: l'interfaccia web Proxmox su :8006 non dovrebbe essere raggiungibile da
internet. Segui gli advisory di sicurezza ufficiali Proxmox:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
Un resoconto più user-friendly con i consigli generali dell'autore su recupero e rafforzamento: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / pubblico dominio. Vedi LICENSE.