
Notas de recuperação para o ID de aviso do proxmox: PSA-2026-00043-1 (CVE-2023-54391)
Recuperação de um wiper que se apresentava como ransomware, após um ataque contra infraestrutura Proxmox exposta à internet (PSA-2026-00043-1 / CVE-2023-54391).
O atacante apagou os convidados e deixou os sistemas de arquivos danificados. Duas trilhas de recuperação, dependendo do que era o convidado:
Estas são as ferramentas e a metodologia, generalizadas para que sejam úteis a qualquer pessoa na mesma situação. Somente leitura sobre a fonte, CC0. Nenhum dado real recuperado está incluído; a saída de exemplo usa espaços reservados.
O disco danificado agora é sua única cópia do que resta. Não o conserte. Faça uma imagem dele.
blockdev --setro /dev/<fonte> # 1. somente leitura, imediatamente
dd if=/dev/<fonte> of=/seguro/disk.img bs=4M conv=noerror,sync # 2. imagem para armazenamento seguro
# 3. NÃO execute fsck, monte rw ou "repare"; isso sobrescreve blocos que um carver precisa
# 4. envolva cada passagem de fonte em scripts/source_guard.sh
# 5. recupere apenas da imagem, nunca do original
Disciplina compartilhada, carvers divididos. Execute qualquer um com -h. Python 3.8+ / bash, sem
pacotes de terceiros. source_guard.sh precisa de Linux /proc/diskstats.
| script | trilha | o que faz |
|---|---|---|
scripts/source_guard.sh | compartilhada | Envolve um comando de recuperação; prova que a fonte permaneceu somente leitura via um diff de contador de escrita. Falha em qualquer escrita na fonte. |
scripts/wt_leaf_carve.py | banco de dados | Extrai BSON de páginas folha WiredTiger brutas. Tamanho de página por decodificação, não ajuste; controle positivo obrigatório. |
scripts/bson_frame.py | banco de dados | Conta/valida documentos BSON por enquadramento em disco. Arquivo inteiro por padrão; uma amostra é sinalizada como um PISO. |
scripts/fs_carve_classify.py | sistema de arquivos | Classifica fragmentos de arquivos extraídos por conteúdo, não nome de arquivo; escreve um manifesto por arquivo; varredura exaustiva de segredos. |
scripts/sensitivity_scan.py | compartilhada | Classifica dados recuperados em VERMELHO/ÂMBAR/VERDE para exposição de credenciais/PII. Imprime contagens, nunca valores. |
scripts/integrity_verify.py | compartilhada | Prova que uma cópia reorganizada é fiel à fonte. Chaveada por conteúdo (sobrevive a renomeações); lê colunas OK/FALHOU, não códigos de saída. |
scripts/make_demo.py | — | Gera fixtures BSON sintéticas (sem dados reais) para exercitar o kit de ferramentas. |
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
Executada nesta ordem. A etapa de extração ramifica por convidado; os limites setro/imagem e a verificação chaveada por conteúdo são os mesmos em ambos os casos.
disco danificado ──setro+imagem──► imagem somente leitura
│
banco de dados ─────►│◄────────── sistema de arquivos
extrair páginas WT │ extrair arquivos
contar documentos │ classificar por conteúdo + manifesto
│
classificar exposição (VERMELHO/ÂMBAR/VERDE)
verificar cópia (chaveada por conteúdo)
│
recuperar
find | sort | xargs sha256sum | sha256sum também faz hash de caminhos e locale. Use LC_ALL=C, ou um manifesto por arquivo.sha256sum -c sai com 0 enquanto imprime FALHOU. Leia as colunas, não $?.Pontos de partida, não soluções prontas. WiredTiger de produção usa compressão de página (snappy/zstd) e codificação de células que o carver genérico deixa como stub. Implemente seu próprio decodificador robusto para páginas comprimidas. Cruze cada número com um controle positivo e um segundo instrumento diferente: duas ferramentas que compartilham uma suposição concordam por causa da suposição, não porque está correto; ler os bytes é o que detecta isso.
Se seus dados não são os mesmos (banco de dados, aplicativo ou sistema de arquivos diferente), a metodologia ainda se aplica: coloque a fonte em somente leitura, faça a imagem, extraia da cópia, faça controle positivo antes de acreditar em um zero, conte tudo, verifique por conteúdo. Troque o carver; mantenha a disciplina.
Endureça a causa raiz: a interface web do Proxmox em :8006 não deve ser alcançável a partir da
internet. Siga os avisos de segurança oficiais do Proxmox:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
Um relato mais amigável com os conselhos gerais do autor sobre recuperação e endurecimento: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / domínio público. Veja LICENSE.