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