Открытый порт SSH круглосуточно принимает трафик подбора учётных данных
Сканирующие ботнеты обходят всё маршрутизируемое адресное пространство IPv4 и перебирают списки паролей на каждом хосте, который отвечает на TCP/22. Демон SSH, доступный из интернета, получает этот трафик независимо от того, корпоративный это бастион или единственный VPS.
- Тысячи неудачных аутентификаций в сутки
- Новый хост, отвечающий на TCP/22, начинает записывать неудачные SSH-аутентификации уже через несколько часов после того, как его адрес стал маршрутизируемым. Типичный сервер с выходом в интернет фиксирует в systemd-journald тысячи событий Failed password и Invalid user в сутки, и приходят они из диапазонов, которые сменяются быстрее, чем один администратор способен их просмотреть.
- CPU, память и записи в журнал тратятся на трафик, который никогда не пройдёт аутентификацию
- Каждая попытка SSH-аутентификации стоит TCP-рукопожатия, обмена ключами SSH, обращения к стеку PAM через /etc/pam.d/sshd и одной синхронной записи в systemd-journald. Непрерывный поток брутфорса тем самым держит постоянную фоновую нагрузку на хосте, раздувает хранилище журнала и оттесняет настоящие административные подключения в очередь sshd MaxStartups - и ничего из этого атакующему не требуется проходить аутентификацию, чтобы получить.
- Один угаданный пароль - это полная компрометация
- Единственный верный пароль даёт интерактивную оболочку с правами этой учётной записи: разворачивание шифровальщика, выгрузка данных или рассылка спама от имени адреса самого хоста. Слабые или переиспользованные из публичных утечек пароли ломаются словарным перебором за считаные дни, и журнал аутентификации записывает удачную попытку ровно так же, как любую другую строку.
- pam_faillock превращает атаку в блокировку настоящего администратора
- Стек PAM, описанный в /etc/pam.d/sshd, считает последовательные неудачи модулем pam_faillock и блокирует учётную запись при достижении порога deny. Атакующий, который угадал только существующее имя пользователя - но не пароль, - может намеренно выбить этот счётчик и запереть настоящего администратора снаружи хоста. Получается отказ в обслуживании, произведённый целиком самим защитным механизмом.
SSH Protector переносит решение из пространства пользователя в input-хук netfilter
Демон SSH Protector сопоставляет неудачные события аутентификации по исходной сети и фиксирует одно правило nftables, отбрасывающее всю подсеть /24 атакующего. Как только это правило существует, netfilter отбрасывает пакеты в input-хуке ядра - до того как sshd примет соединение, до обращения к PAM и до любой записи в журнал. Нагрузка на CPU, объём журнала и число попыток, доходящих до проверки пароля, падают одновременно.

