Когда базу 1С можно собрать без ключа
Расшифровать файл без ключа нельзя. Но многим шифровальщикам и не нужно шифровать файл целиком: чтобы испортить бэкап на сотни гигабайт, хватает первых мегабайт. В нашем случае было зашифровано ровно 10 МиБ в начале каждого файла, дальше лежали нетронутые данные и служебный хвост шифровальщика.
SQL Server такой бэкап штатно не восстановит: без начала он не понимает, что перед ним. Зато сами страницы базы, по 8 КБ каждая, лежат в уцелевшей части целыми. Их можно вынуть, проверить и собрать из них новую базу. Это не расшифровка: исходный файл не возвращается, база собирается заново.
Подходит, если:
- базы 1С работали на MS SQL Server, а зашифрованы бэкапы (
.bak, сжатые или нет) или файлы данных (.mdf,.ndf); - зашифрована часть файла, а не весь. Это видно по самому файлу, и мы проверяем это бесплатно;
- файл больше зашифрованной области. Мелкие журналы транзакций и системные базы обычно зашифрованы целиком.
Файловые базы 1С и PostgreSQL устроены иначе, по ним смотрим отдельно и обещаний заранее не даём.
Что теряется и почему это не страшно
Сжатый бэкап с 10 МиБ шифротекста в начале - это примерно первые 70-100 МБ файла данных, около 9 тысяч страниц. В базе на 23 ГБ это около 0,3 % страниц. Беда в том, что именно в начале файла лежит описание таблиц и колонок, служебные страницы распределения и самые старые данные.
Поэтому основная работа идёт над структурой, а не над данными. Здесь выручает сама 1С: полное описание своих таблиц платформа хранит в базе, и в нашем случае оно уцелело. Что всё-таки пропало, видно точно: на потерянные страницы ссылаются уцелевшие соседи, а потерянные строки находятся по уцелевшим индексам. Отсюда отчёт о потерях и список документов, которые достаточно перепровести.
Старая копия: ищем её первой
Это самое дешёвое и самое полезное действие. Копия годовой и даже двухлетней давности не возвращает свежие данные, но она:
- служит донором конфигурации. У нас копия двухлетней давности закрыла 1 006 из 1 023 потерянных файлов конфигурации;
- показывает, какие таблицы, колонки и индексы ждёт платформа;
- даёт независимую проверку: старые проводки и закрытые периоды в собранной базе должны совпасть с копией. У нас по регистрам совпало 99,6-99,8 %.
Не помогают другие зашифрованные бэкапы той же базы за другие дни: у всех испорчено одно и то же начало. И не помогают базы другой редакции той же типовой: версии объектов не совпадают.
Что сделать до нашего подключения
- Не трогайте оригиналы. Не запускайте на них “расшифровщики” из интернета и утилиты восстановления. Это улики, и не исключено, что ключ когда-нибудь опубликуют.
- Скопируйте зашифрованные файлы на отдельный диск только на чтение. Работаем мы с копией.
- Найдите место. Распакованные страницы, промежуточные файлы и итоговая база занимают каждый примерно в 7 раз больше сжатого бэкапа.
- Отключите заражённые машины от сети и пускайте к нам только тестовый сервер, на котором будет идти сборка.
Расследование атаки, лечение инфраструктуры и переговоры со злоумышленниками мы не ведём. Наша часть - данные 1С.
Как устроена сборка
- Находим первый целый блок сразу за зашифрованным началом и идём по цепочке до конца файла.
- Каждую страницу проверяем по контрольной сумме. Чужие и устаревшие отсекаем по номеру последнего изменения: в бэкап попадают остатки старого содержимого диска, и многие из них стоят на “правильных” номерах.
- Восстанавливаем каталог: имена таблиц, колонки, типы, индексы. Для 1С сверяем его с описанием структуры, которое хранит платформа.
- Собираем конфигурацию по списку версий, а не по найденным строкам. Иначе 1С не откроет базу.
- Создаём новую базу в исходной сортировке, грузим данные, строим индексы, сверяем число строк.
- Проверяем целостность и снимаем итоговый бэкап с контрольной суммой.
Перед работой с вашей базой вся цепочка прогоняется на синтетической базе со всеми трудными случаями: кириллица, большие значения, даты на границах, удалённые строки. Норма - ноль расхождений. У нас самотест поймал перепутанные даты: таблица загрузилась без единой ошибки, а даты в ней были неверные.
Подробно наш случай, от утра атаки до того, что закрыли после, разобран в статье шифровальщик зашифровал базы 1С вместе с бэкапами.
Что делаем вместе с вами
Две вещи не видит ни одна проверка в SQL. Первая: открывается ли база в тонком клиенте и не взяли ли мы по ошибке не ту копию. Вторая: бухгалтер, который знает свои документы в лицо. Поэтому приёмка идёт в 1С и с вашими людьми: тестирование и исправление, перепроведение по списку, ключевые отчёты за последний месяц.
Сроки и цена
От 450 000 ₸ без налогов за сборку одной базы с отчётом о потерях. Бухгалтерская база 23 ГБ у нас собиралась 6 часов, но это время сборки, когда инструменты уже готовы и проверены. На новом случае добавляется проверка файлов, поиск копий и самотест под вашу версию SQL Server.
Итог зависит от объёма, числа баз и того, нашлась ли старая копия. Называем его после бесплатной проверки файлов и дальше не меняем. Если файл зашифрован целиком и собирать нечего, говорим это на первом шаге.
Чтобы следующая атака стоила дешевле, после восстановления помогаем поставить обслуживание баз с офлайн-копиями, до которых из сети не дотянуться.