1. Общая информация
Все мы знаем, что сами пароли пользователей в базе 1С не хранятся. Хранятся только некие "значения" этих паролей. Например, хранимое значение пароля "password" имеет вид "W6ph5Mm5Pz8GgiULbPgzG37mj9g=,ESu3kTBHkd3PaS4p/VzxSbNf6jc=". Сохранённые значения паролей можно получить через свойство СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы:
СохраняемоеЗначение = ПользовательИнформационнойБазы.СохраняемоеЗначениеПароля;
Но получение значения этого свойства доступно только для пользователя с административными правами. В данном случае становится возможным на какое-то время выгрузить сохранённые значения паролей пользователей из базы, что-то с ними или с базой сделать и потом загрузить их обратно.
Но это всё неинтересно, т.к. мы в этом случае обладаем административными правами и имеем доступ к базе. А что делать, если мы не можем войти в базу ни под каким пользователем ?
В статье http://infostart.ru/public/151254, ранее выложенной на Инфостарте, описан метод сброса списка пользователей для получения доступа в базу. Это отличный способ, известный уже довольно давно, но раньше приходилось всё делать руками в hex-редакторе. Автор статьи автоматизировал этот процесс и теперь стало довольно просто получить доступ к базе. Однако реально узнать пароль конкретного пользователя не получится. Поэтому я задался вопросом, а можно ли это сделать и насколько это реально ?
2. Получение хэша пароля
Не знаю, секрет это или не секрет, но пароль в 1С хранится в виде хэша, сформированного из строки пароля по алгоритму SHA-1 http://ru.wikipedia.org/wiki/SHA-1 и упакованного по алгоритму base64.
Т.о. хэш равен:
Хэш = СтрЗаменить(Base64Значение(Лев(СохраняемоеЗначение, Найти(СохраняемоеЗначение, ",") - 1)), " ", "");
Следует отметить, что СохраняемоеЗначение - это строка, которая хранит в себе два значения: для пароля и для пароля в верхнем регистре, разделенные запятой. Поэтому для получения хэша нужно взять первую (левую) часть сохраняемого значения.
Всё хорошо, но откуда нам взять это сохраняемое значение ? Если права есть, то мы можем зайти в базу и получить его описанным выше способом. Если прав нет и доступа в базу вообще нет - есть замечательная утилита Tool_1CD http://infostart.ru/public/19633. С её помощью можно открыть файл *.1cd, затем открыть таблицу V8USERS, выбрать пользователя и посмотреть, что хранится в поле DATA. Помимо всего прочего в DATA хранится сохраняемое значение пароля. Оно то нам и нужно. Этот способ актуален для файлового варианта работы с базой.
Для клиент-серверного варианта вопрос получения содержимого поля DATA таблицы V8USERS остается пока открытым. Может кто-то подскажет, как извлечь оттуда данные ? В частности, можно воспользоваться выгрузкой базы в формате *.dt (архивная копия наверняка где-то завалялась, необязательно актуальная), чтобы получить *.1cd, а дальше действовать через утилиту Tool_1CD.
3. А что дальше ? Хэш - не пароль
Итак, мы имеем хэш пароля, сформированный по алгоритму SHA-1. А это уже что-то.
Известно, что в "обратную сторону" по хэшу SHA-1 получить пароль практически невозможно. Поэтому все (т.е. единственный на сейчас) методы восстановления пароля по хэшу сводятся к банальному брутфорсу (перебору). Суть перебора проста - формируем строку, получаем для неё хеш по нужному алгоритму, сравниваем полученный хэш с нашим искомым хэшем. Если хэши совпали - ура, пароль найден. Если нет - формируем следующую строку и ищем дальше. В общем случае мы перебираем все возможные комбинации символов, получаем для них хэши и сравниваем с нашим, пока нам не повезёт.
Скептики скажут, что для восстановления сложного пароля понадобится не одна сотня лет. Это так в общем случае, но есть несколько НО:
- 1. Львиная доля пользователей баз 1С не заботится о сложности пароля и зачастую ограничивается только цифрами или несколькими буквами.
- 2. Часто пароли всех пользователей, в том числе и админов, в базе имеют один и тот же вид. Например, только 5 цифр.
- 3. Всегда можно узнать у какого-либо пользователя ИБ какого примерно вида были пароли. А это информация для маски перебора.
- 4. Существует масса словарей и сервисов (сайтов) с уже готовыми комбинациями пароль = хэш. Т.е. достаточно ввести хэш и система по своей базе найдет соответствующий ему пароль.
Все это повышает вероятность получения пароля путем перебора.
В интернете существует множество утилит, позволяющих сформировать хэш SHA-1 по переданной строке. Также существуют утилиты по восстановлению пароля по хэшу методом перебора или по словарю, по различным маскам. Например, есть интернет-сервис, на котором хранится довольно большой словарь уже подобранных хэшей. Им можно воспользоваться здесь: http://www.md5decrypter.co.uk/sha1-decrypt.aspx.
Итак, что имеем в итоге 3-х пунктов:
- 1. Узнаем сохранённое значение пароля для выбранного пользователя: либо из самой базы (если есть права), либо используя утилиту Tool_1CD (файловая база), либо вытягиваем данные из поля DATA таблицы V8USERS (клиент-сервер).
- 2. Получаем хэш SHA-1 пароля из левой части сохранённого значения: обработка прилагается.
- 3. Ищем пароль: формируем хэш строки, сравниваем с полученным хэшем (утилиты перебора по маске), либо интернет-сервисы с базами готовых словарей.
4. Много буковок, конкретные шаги по восстановлению пароля
4.1. Получаем сохранённое значение пароля нужного пользователя. Берем базу *.1cd (предварительно можно скопировать файл базы, чтобы не блокировать для работы других пользователей), открываем ее в Tool_1CD, выбираем нужного пользователя в таблице V8USERS и смотрим содержимое поля DATA. Копируем в буфер обмена нужный кусок строки.
4.2. Запускаем обработку получения хэша в любой базе на платформе 8.2 (я создал пустую базу). Обработка элементарная, поэтому ее легко можно сконвертировать под любую другую платформу при необходимости. Копипастим сюда сохранённое значение пароля (из п. 4.1), вводим нужную маску (рекомендуется, иначе состариться успеем) и нажимаем "Восстановить пароль".
При восстановлении пароля используется консольная утилита sha1.exe http://www.egoroff.spb.ru/opinions/26.html. Она позволяет как сформировать хэш SHA-1 по переданной строке, так и восстановить строку по словарю (маске). Обработка формирует хэш SHA-1 по переданному значению сохраненного пароля, затем формирует строку запуска утилиты sha1.exe и запускает её. Вобщем, кому интересно, код открыт, там всё просто. Файл sha1.exe должен лежать в одном каталоге с обработкой.
4.3. Перебор...
Видно, что для пароля от 0 до 6 символов и содержащий буквы и цифры перебор занимает ВСЕГО 12 минут. Сходил, кофе сделал, вернулся - пароль уже подобран !
4.4. Результат
К слову сказать, мой супер пароль был подобран за 3.5 минуты (6 символов, буквы и цифры)... Даже кофе не успел сделать. Вот такие результаты !
Параллельно решил проверить хэш на сайте: результат - мгновенное восстановление пароля ! Кстати на этом сайте хэши можно задать списком, т.е. восстановить пароли сразу всех пользователей базы.
5. Джентельменский набор
- 1. Tool_1CD - http://infostart.ru/public/19633
- 2. Обработка ВосстановлениеПароля1С - прилагается
- 3. sha1.exe - http://www.egoroff.spb.ru/opinions/26.html
- 4. Интернет-сервис - http://www.md5decrypter.co.uk/sha1-decrypt.aspx
- 5. Обработка АудитПаролейПользователей - прилагается
Отдельное спасибо авторам утилит Tool_1CD и sha1.exe !
6. Подведем итоги
Как выяснилось, в большинстве случаев перебор паролей может дать быстрый результат. В наших реалиях при наличии различных дополнительных условий восстановление пароля пользователя 1С становится простой и решаемой задачей. Как показывает практика и мой личный опыт работы с клиентами, практически всегда пользователи ставят элементарные пароли на доступ в 1С. Бывает, конечно, когда сами админы ставят себе сложный пароль, но какой-нибудь главбух с полными правами при этом влепит себе дату рождения в качестве пароля и всё. Имеем сначала один пароль, потом все остальные. Вариантов использования масса. Причем представленный способ восстановления паролей гарантирует целостность и неизменность базы, т.е. нет изменений на физическом уровне.
Например, пароль, состоящий из:
- 1. Только из цифр 0..9, длиной максимум 9 символов восстанавливается за максимум 6.5 минут.
- 2. Только английских букв, длиной 7 символов - за максимум 44 минуты.
- 3. Буквы и цифры, длиной 6 символов - максимум 12 минут.
Т.о. цифры вполне реальные и восстановление пароля становится простым делом техники.
Выводы делайте сами )
7. Причина публикации статьи
Во многих организациях халатно относятся к безопасности и правам доступа к данным, в связи с чем практически любой желающий (внутри компании) может в той или иной степени способствовать утечке информации. Поэтому статья призывает обратить внимание разработчиков систем хранения данных к безопасности доступа к данным и устойчивости этих систем к утечкам информации. А также призывает обратить внимание администраторов баз данных на сложность паролей пользователей и способы их авторизации в системе.
Комментарии
2А где обработки можно скачать? Я что-то не нашел.