Вопрос безопасности учетных записей в системе «1С:Предприятие 8» является критически важным для любого системного администратора и специалиста по безопасности. В процессе эксплуатации информационных баз нередко возникают ситуации, когда пароль единственного пользователя с полными правами утерян, или требуется провести аудит безопасности парольной политики. Рассмотрим подробно, как платформа 1С хранит пароли, как эволюционировали алгоритмы защиты и какими способами можно восстановить доступ к данным в экстренных ситуациях.
Для начала проанализируем ситуацию с алгоритмами хеширования. В старых релизах платформы (вплоть до версии 8.3.15) разработчики использовали алгоритм SHA-1 для создания отпечатков паролей. Особенностью реализации было отсутствие «соли» (случайных данных, добавляемых к паролю перед хешированием), что делало такие хеши уязвимыми для атак с использованием радужных таблиц и быстрого перебора.
При использовании программных методов доступа, например через встроенный язык 1С, мы можем извлечь хеш пароля. Посмотрим на пример кода, который позволяет получить строковое представление хеша для конкретного пользователя:
ПользовательОбъект = ПользователиИнформационнойБазы.НайтиПоИмени("Администратор");
Если ПользовательОбъект <> Неопределено Тогда
ХешBase64 = ПользовательОбъект.СохраняемоеЗначениеПароля;
Сообщить("Хеш пароля (Base64): " + ХешBase64);
КонецЕсли;
Полученная строка СохраняемоеЗначениеПароля представляет собой бинарные данные в кодировке Base64. Если их декодировать, мы получим 160-битный SHA-1 хеш. В современных релизах (8.3.18 и выше) платформа перешла на использование PBKDF2 с уникальной солью для каждого пользователя и тысячами итераций хеширования, что на порядки усложняет процедуру несанкционированного подбора.
Если доступ к базе утерян, а база развернута на SQL-сервере, мы можем воспользоваться методом модификации системных таблиц. Выясним причину, по которой простая очистка таблицы v8users часто не помогает. Платформа 1С хранит данные о пользователях в двух местах: таблице v8users и специальном бинарном поле в таблице PARAMS.
Разберем по шагам алгоритм сброса списка пользователей в среде MS SQL Server:
SQL Server Management Studio (SSMS) и выполним запрос для очистки таблицы со списком пользователей:
DELETE FROM v8users;
users.usr. Нам необходимо временно «спрятать» эту запись. Выполним запрос:
UPDATE PARAMS SET FileName = 'users.usr_old' WHERE FileName = 'users.usr';
В файловом варианте информационная база представляет собой один файл 1Cv8.1CD. Рассмотрим подробнее, как можно восстановить доступ здесь. Прямое редактирование файла требует специализированного ПО, такого как Tool_1CD или Hex-редакторы.
Разберем по шагам методику «обнуления» пароля через Hex-редактор:
users.usr.PARAMS.v8ers.usr. Это заставит платформу игнорировать файл со списком пользователей при запуске.Посмотрим на пример того, как это работает на уровне логики платформы: когда 1С не находит в таблице PARAMS запись с ключом users.usr, она считает, что база является «чистой» в плане безопасности, и автоматически предоставляет полные права первому вошедшему пользователю.
Иногда администратору требуется программно проверить, у каких пользователей установлены пустые пароли или пароли, не соответствующие политике безопасности. Рассмотрим пример обработки, которая обходит список всех пользователей:
Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекущийПользователь Из Выборка Цикл
// Проверка на пустой пароль
Если Не ТекущийПользователь.ПарольУстановлен Тогда
Сообщить("У пользователя " + ТекущийПользователь.Имя + " не установлен пароль!");
КонецЕсли;
// Вывод информации о методе аутентификации
Если ТекущийПользователь.АутентификацияОС Тогда
Сообщить(ТекущийПользователь.Имя + " использует вход через Windows: " + ТекущийПользователь.ПользовательОС);
КонецЕсли;
КонецЦикла;
Проанализируем результат: использование свойства АутентификацияОС является наиболее безопасным методом, так как в этом случае хеш пароля вообще не хранится внутри базы 1С, а проверка делегируется контроллеру домена Active Directory через протоколы Kerberos или NTLM.
Для организаций с повышенными требованиями к безопасности (госучреждения, оборонные предприятия) существует версия 8.3z. Выясним причины её использования:
На основе вышеизложенного, сформулируем правила, которые помогут избежать компрометации данных:
8.3.18. Переход с SHA-1 на PBKDF2 — это самый простой и эффективный способ защитить базу от перебора паролей по украденному бэкапу.АутентификацияОС. Это исключает хранение паролей в таблице v8users.Подведем итог: техническая возможность восстановления пароля в 1С — это «палка о двух концах». С одной стороны, это спасательный круг для администратора при аварийных ситуациях. С другой стороны, это огромная дыра в безопасности, если злоумышленник получит доступ к файловой системе сервера. Помните, что безопасность 1С начинается не с настроек внутри конфигуратора, а с разграничения прав доступа на уровне операционной системы и СУБД.