Чем легче пароль, тем проще

06 сентября 2012

Внимание: Данная статья не является руководством к действию! Автор не несет ответственности за последствия использования данного материала в корыстных целях!!!

Файлы для загрузки:

Обработка "Подбор паролей пользователей"

Предисловие 

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

С ростом популярности платформы, приоритетными становятся вопросы безопасности ее использования, особенно в свете появления web-клиента и использования облачных технологий.

В статье пойдет речь о такой проблеме безопасности, как защита учетных записей с помощью паролей.

О паролях

Большинство пользователей и администраторов платформы ставят очень простые пароли для учетных записей. Очень часто сталкивался с тем, что в компании, где в учетной программе работают более ста человек, все пользователи имели однотипные пароли, например из шести цифр. Не редкость, когда пользователи ставят пароль из цифр в соответствии со своей датой рождения. В итоге мы получаем огромную брешь в безопасности, ведь подбор такого пароля занимает считанные минуты, а то и секунды. Давайте проверим, насколько защищают такие пароли от несанкционированного доступа к программе.

А где же пароль?

Сразу оговорюсь, что речь будет идти о платформе 1С:Предприятие 8.2. Многое из нижесказанного относится и к платформе 8.0 и 8.1.

Стоит отметить, что пароли не сохраняются в информационной базе в явном виде. Платформа хранит только некие значения паролей. Например, пароль "buhgalter" будет хранится в базе данных как "pNQXtNU+qlWQH/PgrIov/ugNK5E=,n2j4ZW0+pntwRx1/9tPKBoYaQeY=". Имея административные права, можно получить сохраняемое значение через свойство СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы.

СохраняемоеЗначение ПользовательИнформационнойБазы.СохраняемоеЗначениеПароля

Пароль в базе хранится в виде хэша, сформированного из значений пароля по алгоритму SHA1 (Wiki) и затем запакованного с помощью BASE64 (Wiki). Сохраняемое значение пароля содержит два значения, разделенных запятой - хэш исходного пароля и того же пароля в верхнем регистре. Используя синтаксис 1С, напишем код, получающий хэш из свойства СохраняемоеЗначениеПароля:

СтрЗаменить(Base64Значение(Лев(ПользовательИБ.СохраняемоеЗначениеПароля, Найти(ПользовательИБ.СохраняемоеЗначениеПароля, ",")- 1)), " ", "")

С помощью написанного кода отсекаем второй хэш после запятой и приводим первый хэш к SHA1, распаковывая его из base64. Все просто.

В случаях, когда доступ к информационной базе отсутствует, то есть нет доступа к учетным записям, можно использовать утилиту TOOL_1CD (Infostart). С помощью данной утилиты можно открыть файл базы *.1CD и посмотреть хэш пароля любого пользователя. Для этого нужно открыть таблицу "v8users" и для выбранной записи пользователя в колонке "data" найти хэш.

Поиск хэш-кода пароля пользователя в файле информационной базы *.1cd

Стоит отметить, что утилита "1CD_TOOL" работает только с файловым вариантом информационной базы. Если используется клиент-серверный варианты работы, то получить хэш паролей пользователей будет сложнее.

В данный момент мне не удалось получить хэш пароля, хранящегося в базе SQL. Данные о пользователях хранятся в таблице "v8users", также как и в файловом варианте, однако получить нужную информацию не так уж просто.

Таблица пользователей в SQL-базе

 По аналогии с файловым режимом работы можно предположить, что нужное значение хранится в колонке "Data" с другими данными в двоичном виде (см. скриншот выше). Типом данных у поля "Data" является "Image". Пробовал получать из него данные с помощью прямых запросов к базе SQL, но все, до чего удалось дойти - это получение информации в двоичном виде. Хэш пароля так и не удалось получить.

Хэш ничего не значит!

Ну или почти ничего...

Получить хэш пароля это половина дела. Даже не так! Это треть дела! Потому что наличие хэша пароля не означает, что этот пароль мы сможем получить в исходном виде. Допустим, мы получили хэш-код пароля интересующего нас пользователя. Пусть хэш будет "3FCFC1F7F34E78A937E81171BA51DC39538DB993". Что с ним делать дальше?

Варианта два:

  1. Брутфорс
  2. Поиск пароля в базе хэш-кодов

Время подбора

Это может показаться странным, но практически единственным способ расшифровать пароль из SHA1 будет именно перебор. Учитывая, что пароль в шесть символов, содержащий в себе цифры, буквы и специальные знаки будет подбираться долгое время, сравнимое длительностью человеческой жизни, а то и больше (см. рисунок), то успешный подбор пароля по хэшу возможен только, если пароль низкий по уровню сложности или часто используем.

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

  1. cmd5.ru
  2. tmto.org
  3. www.md5decrypter.co.uk
  4. другие...

Воспользуемся третьим ресурсом. Перейдя на сайт, введем найденный нами хэш. В результате получим пароль.

Поиск в базе хешей

Видно сразу, пароль простой и взят только для примера. Что касается первого способа, перебора всех вариантов хэшей, то тут дело обстоит следующим образом. Если подбор осуществляется без каких-либо условий, без использования маски пароля, то тогда время, затраченное на поиск нужного значения может составить несколько тысяч лет (!) , в чем вы могли убедиться выше. 

Если же мы при переборе укажем, что пароль состоит только из цифр, а его длина 6 символов, то время на поиск исходного значения пароля составит не более нескольких секунд.

Как же выполнить подбор пароля по хэшу на практике методом брутфорса? Тут можно либо самому написать программу для перебора значений по алгоритму SHA1, либо использовать готовые разработки. Поскольку в рамках статьи не ставилось цели рассказать об используемом алгоритме шифрования, воспользуемся готовым приложением. Это консольная программа с функцией подсчета хэша SHA1 ("SHA1 Калькулятор"). 

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

Подбор пароля по хэшу

Последовательность работы с ней такая:

  1. Выбираем пользователя из списка
  2. Полученный хэш либо ищем в базе расшифрованных кодов, либо подбираем с помощью SHA1 калькулятора (в зависимости от выполненной команды в обработке)
  3. Получаем подобранный пароль (если повезет).

Из обработки также возможно распечатать хэш-коды паролей для выбранных пользователей в списке. После можно будет проводить групповую расшифровку, если появится необходимость.

Что все это значит?

А значит это все, что множество паролей на учетные записи, которые ставятся в компаниях нашей необъятной Родины абсолютно не подходят для обеспечения безопасности информационной системы. Сам был свидетелем того факта, что в крупной торговой компании, где количество пользователей платформы превышало сто человек, пароли в абсолютном большинстве стояли цифровые и не более восьми символов.

Конечно, обычный пользователь не сможет получить хэш паролей других пользователей в платформе, поскольку у него не будет административных прав. Большинство пользователей могут вообще не знать что такое хэш. Но в конечном итоге это может не помешать им воспользоваться уязвимостью в рабочей информационной системе при помощи готовых программ, обработок  эксплуатирующих уязвимости и позволяющих пользователям не вдаваться в детали работы программ.

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

Ниже в качестве бонуса к статье прикреплено видео, на котором показан пример использования обработки подбора паролей.

 


comments powered by Disqus