
Восстановительные заметки для уведомления proxmox с идентификатором: PSA-2026-00043-1 (CVE-2023-54391)
Восстановление после вируса-стирателя, замаскированного под ransomware, после атаки на доступную из интернета инфраструктуру Proxmox (PSA-2026-00043-1 / CVE-2023-54391).
Атакующий стёр гостевые системы и повредил файловые системы. Два пути восстановления в зависимости от типа гостевой системы:
Это инструменты и методология, обобщённые так, чтобы они были полезны любому, кто окажется в аналогичной ситуации. Только чтение исходных данных, CC0. Реальные восстановленные данные не включены; в примерах вывода используются заглушки.
Повреждённый диск теперь — ваша единственная копия того, что осталось. Не чините его. Снимите образ.
blockdev --setro /dev/<source> # 1. только чтение, немедленно
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. образ в безопасное хранилище
# 3. НЕ запускайте fsck, монтирование rw или "восстановление"; это перезапишет блоки, нужные карверу
# 4. оборачивайте каждый проход по источнику в scripts/source_guard.sh
# 5. восстанавливайте только из образа, никогда с оригинала
Общая дисциплина, раздельные карверы. Запускайте любой с -h. Python 3.8+ / bash, без
сторонних пакетов. source_guard.sh требует Linux /proc/diskstats.
| скрипт | направление | что делает |
|---|---|---|
scripts/source_guard.sh | общий | Оборачивает команду восстановления; доказывает, что источник остался только для чтения, через разницу счётчика записи. Завершается ошибкой при любой записи в источник. |
scripts/wt_leaf_carve.py | база данных | Извлекает BSON из сырых листовых страниц WiredTiger. Размер страницы — по декодированию, а не подгонке; обязательный положительный контроль. |
scripts/bson_frame.py | база данных | Подсчитывает/проверяет BSON-документы по дисковому фреймингу. По умолчанию весь файл; выборка помечается как МИНИМУМ. |
scripts/fs_carve_classify.py | файловая система | Классифицирует извлечённые фрагменты файлов по содержимому, а не имени файла; записывает манифест для каждого файла; исчерпывающее сканирование секретов. |
scripts/sensitivity_scan.py | общий | Разделяет восстановленные данные на уровни RED/AMBER/GREEN для оценки риска учётных данных/персональных данных. Выводит счётчики, никогда значения. |
scripts/integrity_verify.py | общий | Доказывает, что реорганизованная копия соответствует источнику. Ключ по содержимому (переживает переименования); читает колонки OK/FAILED, а не коды выхода. |
scripts/make_demo.py | — | Генерирует синтетические BSON-фикстуры (без реальных данных) для проверки набора инструментов. |
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
Выполняется в этом порядке. Шаг извлечения разветвляется по типу гостевой системы; обрамление setro+image и проверка по ключу содержимого одинаковы в обоих случаях.
повреждённый диск ──setro+image──► образ только для чтения
│
база данных ────────►│◄────────── файловая система
извлечение страниц WT │ извлечение файлов
подсчёт документов │ классификация по содержимому + манифест
│
оценка риска (RED/AMBER/GREEN)
проверка копии (ключ по содержимому)
│
восстановление
find | sort | xargs sha256sum | sha256sum хеширует и пути, и локаль. Используйте LC_ALL=C или манифест для каждого файла.sha256sum -c завершается с кодом 0, печатая FAILED. Читайте колонки, а не $?.Отправные точки, а не готовое решение. Продакшн-версия WiredTiger использует сжатие страниц (snappy/zstd) и кодирование ячеек, которые универсальный карвер заглушает. Подключите собственный надёжный декодер для сжатых страниц. Перепроверяйте каждое число положительным контролем и вторым, другим инструментом: два инструмента, разделяющие одно допущение, согласуются из-за допущения, а не потому, что оно верно; именно чтение байтов это выявляет.
Если ваши данные другие (другая база данных, приложение или файловая система), методология всё равно работает: переведите источник в режим только для чтения, снимите образ, извлекайте из копии, проверяйте положительным контролем перед тем, как поверить нулю, подсчитывайте всё целиком, проверяйте по содержимому. Замените карвер; сохраните дисциплину.
Устраните первопричину: веб-интерфейс Proxmox на :8006 не должен быть доступен из
интернета. Следуйте официальным бюллетеням безопасности Proxmox:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
Более удобное для чтения описание с общими рекомендациями автора по восстановлению и укреплению: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / общественное достояние. См. LICENSE.