Атаки вирусов-шифровальщиков остаются одной из самых серьезных угроз для корпоративных информационных систем. Ситуация, когда файлы баз данных .mdf и .ldf оказываются зашифрованными, а резервные копии недоступны или повреждены, требует хладнокровного и профессионального подхода.
Рассмотрим типичный сценарий: после атаки удалось частично восстановить файлы базы данных. SQL Server "видит" базу, но при попытке подключения клиентом 1С (как в режиме Предприятия, так и в Конфигураторе) возникает ошибка: "Ошибка считывания вторичной информации". Разберем подробно, почему это происходит и какие шаги мы можем предпринять для спасения данных.
Прежде чем приступать к "лечению", давайте проанализируем, что происходит внутри файла базы данных. Ошибка "Ошибка считывания вторичной информации" в контексте 1С указывает на то, что платформа не может корректно интерпретировать служебные данные, необходимые для инициализации сеанса.
Вирусы-шифровальщики часто действуют по алгоритму шифрования начала файла (заголовка) или случайных блоков данных для скорости. В формате хранения MS SQL Server это означает следующее:
Config, DBSchema, Params), часто располагаются в начале файла данных .mdf. Именно их частичное шифрование приводит к тому, что физически данные есть, но 1С не может сопоставить их с метаданными.Теперь перейдем к конкретным методам восстановления работоспособности.
Часто шифровальщик повреждает файл транзакций .ldf. SQL Server не подключит базу с битым логом. В этом случае нам необходимо пересоздать лог. Выполним следующие действия в Management Studio:
Рассмотрим пример кода T-SQL для этой операции:
ALTER DATABASE [ИмяВашейБазы] SET EMERGENCY;
GO
ALTER DATABASE [ИмяВашейБазы] SET SINGLE_USER;
GO
DBCC CHECKDB ([ИмяВашейБазы], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO
Обратите внимание на параметр REPAIR_ALLOW_DATA_LOSS. Мы осознанно идем на риск потери части данных, так как альтернатива — полная потеря базы. Этот процесс попытается исправить структуру страниц и, если лог поврежден, SQL Server может предложить создать новый при выполнении команды присоединения базы без лога (через sp_attach_single_file_db или аналогичные процедуры, если база была предварительно отсоединена).
Ошибка вторичной информации часто связана с невозможностью прочитать параметры сеанса или пользователя из таблицы Params. В этой таблице хранятся временные настройки, и её очистка безопасна для бизнес-данных.
Попробуем очистить эту таблицу, чтобы заставить 1С пересоздать записи при следующем запуске:
USE [ИмяВашейБазы];
GO
TRUNCATE TABLE [dbo].[Params];
GO
После выполнения этого запроса попробуйте запустить 1С. Если ошибка сохраняется, значит, проблема глубже — в таблице конфигурации.
Если структура конфигурации повреждена, 1С не запустится. Однако данные справочников и документов (бизнес-данные) могут быть целы. Эффективный метод, предложенный в профессиональном сообществе, заключается в замене таблицы Config на здоровую из аналогичной конфигурации.
Для этого нам понадобится:
.cf точно того же релиза, что был установлен в поврежденной базе. Это критически важно, так как структура таблиц должна совпадать идеально..cf. Назовем её CleanBase.Теперь выполним перенос "здоровой" таблицы конфигурации в "больную" базу. Подразумевается, что мы заменяем поврежденные метаданные на корректные.
Внимание! Перед любыми манипуляциями обязательно сделайте копию текущего состояния файлов .mdf (даже если они битые).
В SQL Management Studio выполним следующие шаги (концептуально):
Config в поврежденной базе.CleanBase.dbo.Config в DamagedBase.dbo.Config.
-- Очищаем таблицу в целевой базе
USE [DamagedBase];
TRUNCATE TABLE [dbo].[Config];
-- Вставляем данные из чистой базы
INSERT INTO [DamagedBase].[dbo].[Config]
SELECT * FROM [CleanBase].[dbo].[Config];
В современных версиях платформы 1С 8.3 также могут быть важны таблицы DBSchema и ConfigSave. Если простая замена Config не помогла, имеет смысл повторить операцию и для этих таблиц.
Если замена конфигурации не помогает или база слишком сильно повреждена на уровне файловой структуры (SQL pages), более надежным, хотя и трудоемким способом, является перенос самих данных в новую базу.
Логика процесса следующая:
.cf файла нужной версии. У нас появляется корректная структура всех таблиц (Справочников, Документов, Регистров), но они пустые.Мы будем переносить только таблицы данных. В базе 1С их имена начинаются с префиксов:
_Reference... — Справочники_Document... — Документы_InfoRg... — Регистры сведений_AccumRg... — Регистры накопленияМы не переносим системные таблицы (Config, v8users, IBVersion и т.д.), так как именно они могут содержать повреждения, блокирующие запуск.
Пример динамического скрипта для переноса одной таблицы (потребуется сгенерировать такие для всех таблиц данных):
-- Пример логики переноса (требует адаптации под конкретные имена таблиц)
INSERT INTO [NewBase].[dbo].[_Reference123]
SELECT * FROM [DamagedBase].[dbo].[_Reference123]
При таком подходе, если какая-то таблица попадет на поврежденный участок диска (зашифрованный сектор), SQL Server выдаст ошибку при чтении. Мы сможем пропустить эту конкретную таблицу, но спасти остальные 99% данных. Это лучше, чем полная потеря базы.
После того как нам удалось запустить базу (либо методом подмены Config, либо переносом данных), необходимо запустить тестирование и исправление.
Однако перед этим вернемся к SQL Server и выполним окончательную проверку целостности:
DBCC CHECKDB ([ИмяВашейБазы]) WITH NO_INFOMSGS;
Если шифровальщик повредил данные внутри таблиц, команда DBCC CHECKDB с параметром исправления может удалить поврежденные страницы. Как упоминалось в анализе проблемы, это может привести к исчезновению целых таблиц (если поврежден заголовок таблицы) или части строк.
После восстановления доступа в режиме Конфигуратора обязательно выполните:
.dt файл и загрузить обратно в файловый вариант, а затем снова в SQL. Это часто помогает "причесать" внутренние идентификаторы.В рассматриваемом случае одной из баз была "Альфа-Авто". При восстановлении таких конфигураций нужно учитывать наличие систем защиты (например, СЛК или Катран). Ключевая информация о лицензиях может храниться в скрытых или защищенных таблицах внутри базы.
Если вы восстановили базу, но программа требует повторной активации или не видит ключи защиты, скорее всего, таблицы защиты были повреждены или не перенесены. В этом случае, возможно, потребуется переустановка системы защиты и повторный ввод лицензий/ключей через службу поддержки разработчика отраслевого решения.
Восстановление после шифровальщика — это всегда борьба за минимизацию потерь. Полное восстановление возможно только при наличии целых бэкапов. Однако методы прямой работы с SQL таблицами (очистка Params, подмена Config, выборочный перенос данных) позволяют спасти критически важную бизнес-информацию даже в, казалось бы, безвыходных ситуациях.
Главный совет на будущее: настройте резервное копирование по правилу "3-2-1", где одна копия обязательно должна храниться офлайн или в облаке, недоступном для прямой записи с сервера, чтобы вирус не мог добраться до архивов.