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

Проблема в том, что локальные учетные записи чаще всего не имеют срока действия, не проверяются на сложность, и при этом имеют привилегированный доступ. Плюс ко всему парольные политики не всегда позволяют гибко настроить требования, к примеру, не запрещают использовать словарные пароли (вспомните всеми любимый 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