Сканер для выявления слабых паролей в СУБД

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

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

Проблема в том, что локальные учетные записи чаще всего не имеют срока действия, не проверяются на сложность, и при этом имеют привилегированный доступ. Плюс ко всему парольные политики не всегда позволяют гибко настроить требования, к примеру, не запрещают использовать словарные пароли (вспомните всеми любимый P@ssw0rd).

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

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

В этом посте я расскажу о том, что мы использовали для своих задач и как в процессе пришли к выводу, что лучше и проще сделать своё. И поделюсь решением со всеми желающими.


Мы используем достаточно хороший популярный сканер. Но реализовать на нем необходимую нам функциональность было сложно — на каждую базу данных надо было создавать аудит файлы (так как конфигурации у нас в СУБД разные), плюс создавать множество учеток для сканирования, а затем добавлять новые учетки, снова меняя аудитники руками.
К тому же этот сканер не умеет брутить пароли в офлайн режиме, а это проблема. И вот почему.

Брутфорс можно проводить в двух режимах — онлайн и офлайн. Если мы говорим об онлайн брутфорсе, то это эмулирование пользовательского входа и активный перебор паролей. Одной из таких программ является Hydra, и она поддерживает большинство СУБД. Подход применим в большинстве случаев для проведения пентестов и обнаружения дефолтных учеток и паролей. Но не подходит для регулярных проверок и недефолтных учетных записей (пользовательские и сервисные). Потому что учетные записи в таком случае будут блокироваться при наличии соответствующей политики безопасности.

В отличие от онлайн брутфорса его офлайн версия заключается в том, что логины и хеши паролей выгружаются, а затем уже осуществляется брутфорс утилитами вида hashcat или John the Ripper. Тут и никакой нагрузки на БД, и без риска залочить учетку при брутфорсе. А еще вы можете использовать словари на несколько миллионов записей: что при онлайн брутфорсе практически невозможно.

Делаем своё


Так как текущим сканером реализовать описанный функционал сложно, а дополнительный покупать дорого, то пришла идея сделать свой сканер.

В итоге у нас появился собственный сканер для офлайн брутфорса локальных учетных записей.
Сканер поддерживает MS SQL, Oracle и PostgreSQL. Конечно, были свои технические сложности, например, вытащить хеши в формате, который поддерживает hashcat. Но основная сложность это понять как работать с найденными результатами: как поменять пароль без ущерба продуктиву, как сделать, чтобы такие пароли больше не появлялись и т.д.
Но это мы оставим за рамками данной статьи.

UI не сильно доработан, пока используем админку django. Выглядит он вот так:



  • есть возможность просмотра списка БД и добавление новых
  • видно статус брутфорса для каждой учетной записи
  • можно посмотреть результаты сканирования
  • при совпадении слабого пароля выводит это в результатах (хеш пароля, подобранный пароль и имя учетки)




  • можно задавать время сканирования


Главные плюсы


  • Умеет брутить в офлайн режиме
  • Есть проверка по словарю
  • Все это бесплатно


Если вы сомневаетесь нужно ли вам разворачивать такой сканер, можете попробовать вручную забрать хеши паролей от локальных учетных записей и прогнать их через hashcat

Примеры запросов:

oracle 11g
select user#, name, spare4 from sys.user$ where spare4 is not null;


microsoft sql server (выше 2005):
select name, cast (name+'|'+master.dbo.fn_VarBinToHexStr(password_hash) as varchar(1000)) FROM master.sys.sql_logins


Наш сканер не заменит полноценный сканер безопасности, но станет важным и приятным дополнением. И теперь он доступен всем: github.com/qiwi/bruteforce
Если у вас возникнут вопросы или трудности с разворачиванием, создавайте issue на github, мы обязательно ответим.

За реализацию большое спасибо Surdum и slezhuk
Источник: https://habr.com/ru/company/qiwi/blog/528470/


Интересные статьи

Интересные статьи

Анализ безопасности хранения и хеширования паролей при помощи алгоритма MD5 С появлением компьютерных технологий стало более продуктивным хранить информацию в базах данны...
Перевод наиболее интересных пунктов из FAQ для документа Digital Identity Guidelines от NIST (The National Institute of Standards and Technology) от 8 января 2020 года. Кому эт...
История сегодня пойдёт про автосервис в Москве и его продвижении в течении 8 месяцев. Первое знакомство было ещё пару лет назад при странных обстоятельствах. Пришёл автосервис за заявками,...
Компании растут и меняются. Если для небольшого бизнеса легко прогнозировать последствия любых изменений, то у крупного для такого предвидения — необходимо изучение деталей.
В конце апреля MongoDB объявили о покупке Realm — кроссплатформенной мобильной базы данных. В сегодняшнем материале — о том, как компании подошли к сделке и что планируют. ...