Как восстановить доступ к базе 1С при утере пароля администратора и как устроено хеширование в платформе

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Вопрос безопасности учетных записей в системе «1С:Предприятие 8» является критически важным для любого системного администратора и специалиста по безопасности. В процессе эксплуатации информационных баз нередко возникают ситуации, когда пароль единственного пользователя с полными правами утерян, или требуется провести аудит безопасности парольной политики. Рассмотрим подробно, как платформа 1С хранит пароли, как эволюционировали алгоритмы защиты и какими способами можно восстановить доступ к данным в экстренных ситуациях.

Анализ механизмов хранения паролей: от SHA-1 до PBKDF2

Для начала проанализируем ситуацию с алгоритмами хеширования. В старых релизах платформы (вплоть до версии 8.3.15) разработчики использовали алгоритм SHA-1 для создания отпечатков паролей. Особенностью реализации было отсутствие «соли» (случайных данных, добавляемых к паролю перед хешированием), что делало такие хеши уязвимыми для атак с использованием радужных таблиц и быстрого перебора.

При использовании программных методов доступа, например через встроенный язык 1С, мы можем извлечь хеш пароля. Посмотрим на пример кода, который позволяет получить строковое представление хеша для конкретного пользователя:


ПользовательОбъект = ПользователиИнформационнойБазы.НайтиПоИмени("Администратор");
Если ПользовательОбъект <> Неопределено Тогда
    ХешBase64 = ПользовательОбъект.СохраняемоеЗначениеПароля;
    Сообщить("Хеш пароля (Base64): " + ХешBase64);
КонецЕсли;

Полученная строка СохраняемоеЗначениеПароля представляет собой бинарные данные в кодировке Base64. Если их декодировать, мы получим 160-битный SHA-1 хеш. В современных релизах (8.3.18 и выше) платформа перешла на использование PBKDF2 с уникальной солью для каждого пользователя и тысячами итераций хеширования, что на порядки усложняет процедуру несанкционированного подбора.

Восстановление доступа в клиент-серверном варианте (SQL)

Если доступ к базе утерян, а база развернута на SQL-сервере, мы можем воспользоваться методом модификации системных таблиц. Выясним причину, по которой простая очистка таблицы v8users часто не помогает. Платформа 1С хранит данные о пользователях в двух местах: таблице v8users и специальном бинарном поле в таблице PARAMS.

Разберем по шагам алгоритм сброса списка пользователей в среде MS SQL Server:

  1. Создадим резервную копию базы данных. Любые прямые манипуляции с SQL-таблицами могут привести к повреждению структуры ИБ.
  2. Откроем SQL Server Management Studio (SSMS) и выполним запрос для очистки таблицы со списком пользователей: DELETE FROM v8users;
  3. Однако этого недостаточно, так как платформа сверяет данные с записью users.usr. Нам необходимо временно «спрятать» эту запись. Выполним запрос: UPDATE PARAMS SET FileName = 'users.usr_old' WHERE FileName = 'users.usr';
  4. После этого попробуем зайти в Конфигуратор 1С. Платформа не обнаружит активных пользователей и позволит войти без пароля.
  5. Важный момент: Сразу после входа необходимо создать нового пользователя с полными правами.
  6. После создания нового администратора можно вернуть старые настройки (если требуется восстановить связи со старыми пользователями), однако чаще всего достаточно пересоздать нужных сотрудников вручную.

Восстановление доступа в файловом варианте (.1CD)

В файловом варианте информационная база представляет собой один файл 1Cv8.1CD. Рассмотрим подробнее, как можно восстановить доступ здесь. Прямое редактирование файла требует специализированного ПО, такого как Tool_1CD или Hex-редакторы.

Разберем по шагам методику «обнуления» пароля через Hex-редактор:

  1. Откроем копию файла базы в Hex-редакторе.
  2. Выполним поиск текстовой строки users.usr.
  3. Проанализируем ситуацию: нам нужно найти вхождение этой строки в таблице PARAMS.
  4. Заменим один любой символ в названии файла, например, сделаем v8ers.usr. Это заставит платформу игнорировать файл со списком пользователей при запуске.
  5. Зайдем в Конфигуратор и создадим нового администратора.

Посмотрим на пример того, как это работает на уровне логики платформы: когда 1С не находит в таблице PARAMS запись с ключом users.usr, она считает, что база является «чистой» в плане безопасности, и автоматически предоставляет полные права первому вошедшему пользователю.

Использование программного кода для автоматизации проверки

Иногда администратору требуется программно проверить, у каких пользователей установлены пустые пароли или пароли, не соответствующие политике безопасности. Рассмотрим пример обработки, которая обходит список всех пользователей:


Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекущийПользователь Из Выборка Цикл
    // Проверка на пустой пароль
    Если Не ТекущийПользователь.ПарольУстановлен Тогда
        Сообщить("У пользователя " + ТекущийПользователь.Имя + " не установлен пароль!");
    КонецЕсли;
    
    // Вывод информации о методе аутентификации
    Если ТекущийПользователь.АутентификацияОС Тогда
        Сообщить(ТекущийПользователь.Имя + " использует вход через Windows: " + ТекущийПользователь.ПользовательОС);
    КонецЕсли;
КонецЦикла;

Проанализируем результат: использование свойства АутентификацияОС является наиболее безопасным методом, так как в этом случае хеш пароля вообще не хранится внутри базы 1С, а проверка делегируется контроллеру домена Active Directory через протоколы Kerberos или NTLM.

Защищенный программный комплекс «1С:Предприятие 8.3z»

Для организаций с повышенными требованиями к безопасности (госучреждения, оборонные предприятия) существует версия 8.3z. Выясним причины её использования:

Рекомендации по обеспечению безопасности

На основе вышеизложенного, сформулируем правила, которые помогут избежать компрометации данных:

  1. Обновление платформы: Всегда используйте релизы не ниже 8.3.18. Переход с SHA-1 на PBKDF2 — это самый простой и эффективный способ защитить базу от перебора паролей по украденному бэкапу.
  2. Защита бэкапов: Как мы выяснили, имея файл базы или доступ к SQL, пароль можно сбросить за несколько минут. Поэтому архивы должны храниться в зашифрованном виде на выделенных серверах с ограниченным доступом.
  3. Использование ОС-аутентификации: Старайтесь максимально использовать АутентификацияОС. Это исключает хранение паролей в таблице v8users.
  4. Сложные пароли: Даже при старых алгоритмах длинный и сложный пароль (более 12 символов с разными регистрами) крайне трудно подобрать методом брутфорса.

Подведем итог: техническая возможность восстановления пароля в 1С — это «палка о двух концах». С одной стороны, это спасательный круг для администратора при аварийных ситуациях. С другой стороны, это огромная дыра в безопасности, если злоумышленник получит доступ к файловой системе сервера. Помните, что безопасность 1С начинается не с настроек внутри конфигуратора, а с разграничения прав доступа на уровне операционной системы и СУБД.

← На главную