В последних версиях OpenSSH появилась защита от брутфорса (перебора) паролей, а также от попыток эксплоита. Это очень ценные настройки, которыми разработчики рекомендуют воспользоваться всем.
Нужно отметить, что новая функция OpenSSH фундаментально отличается от fail2ban, sshguard и подобных инструментов, поскольку она не парсит логи и не изменяет правила файрвола, а применяет опции только внутри одной программы, не обращаясь никуда через ядро, что делает её гораздо безопаснее вышеупомянутых утилит.
В июньском коммите один из разработчиков OpenSSH Дэмиен Миллер (Damien Miller) представил новые опции конфигурации sshd(8):
PerSourcePenalties
и PerSourcePenaltyExemptList
. Как написано в коммите, изменения вводят «штраф за нежелательное поведение». В реальности они добавляют привычную опцию для многих веб-приложений — задержку после ввода неправильного пароля (первый патч). А также защиту от введения такой задержки для некоторых клиентов (второй патч).Задержка после ввода
Как написано в документации, если включена функция
PerSourcePenalties
, то sshd(8) будет отслеживать итоговый статус дочерних процессов сеанса предварительной аутентификации чтобы определить неудачную аутентификацию. К таким условиям относятся ситуации, когда клиент неоднократно безуспешно пытался пройти аутентификацию (это может указывать на попытку брутфорса по одному или нескольким аккаунтам) и когда поведение клиента приводило к аварийному завершению работы sshd (возможно, попытки эксплоита sshd).При возникновении таких ситуаций sshd устанавливает для этого клиента наказание определённой продолжительности (например, 30 секунд). Если время превышает минимальный порог, указанный в
PerSourcePenalties
, то соединения с этого адреса клиента будут отклонены (вместе с любыми другими в том же диапазоне PerSourceNetBlockSize
).При повторном нарушении с того же адреса штрафы будут увеличиваться, вплоть до указанного в настройках максимума.
Аргументы
PerSourcePenalties
указываются в следующем формате:crash:срок
— насколько отключать клиента после падения программы (по умолчанию90s
);
authfail:срок
— насколько отключать клиента после одной или нескольких неудачных попыток аутентификации (по умолчанию5s
);
noauth:срок
— насколько отключать клиента, который отключился после попытки аутентификации (по умолчанию1s
), эту задержку нужно использовать осторожно, чтобы не оштрафовать легитимные сканеры вроде ssh-keyscan(1);
grace-exceeded:срок
— насколько отключать клиента, который не прошёл аутентификацию за указанное времяLoginGraceTime
(по умолчанию20s
);
max:срок
— максимальное время, на которое может быть отключён конкретный клиент (по умолчанию10m
), повторные штрафы суммируются до этой величины;
min:срок
— минимальное время, на которое может быть отключён клиент после накопления штрафов (по умолчанию15s
);
max-sources4:number
иmax-sources6:number
— максимальное количество диапазонов IPv4- и IPv6-адресов для отслеживания штрафов (по умолчанию65536
в обоих случаях);
overflow:срок
— определяет поведение сервера при превышении значения в предыдущем параметре: есть вариантыdeny-all
(запрет всех входящих соединений, кроме указанных вPerSourcePenaltyExemptList
) иpermissive
(разрешает новые соединения, стоит по умолчанию)
overflow6:режим
— позволяет указать другой режим переполнения для адресов IP:v6, по умолчанию используется тот же, что указан для IPv4.
Судя по документации, опция
PerSourcePenalties
уже включена по умолчанию с дефолтными значениями, указанными выше. Её можно выключить вручную с помощью ключевого слова off
. Также можно вручную изменить значения всех таймаутов.Защита от штрафа
Опция
PerSourcePenaltyExemptList
освобождает определённые диапазоны адресов от всех штрафов. Это гарантирует отсутствие задержки ввода для самого администратора системы.Если не установить такой защиты, то возможна ситуация, когда злоумышленник попытается устроить DoS-атаку против администратора системы, введя для него искусственные штрафы путём намеренно безуспешной аутентификации из его адресного диапазона. Если пользователи находятся за NAT-файрволом, то несколько клиентов могут использовать один IP-адрес, так что штраф одному из них повлияет на остальных. Таким образом, администратор может пострадать даже случайным образом.
Помимо защиты, опция просто избавляет администратора от задержки после ошибки при вводе пароля.
Другие проблемы
Подбор паролей с помощью брутфорса — не единственная угроза для SSH. Хотя её устранили с помощью последнего патча, остальные проблемы ещё предстоит решить в будущем.
Среди них называют следующие:
- Сложность в управлении SSH-ключами у хостов и клиентов, что выливается в плачевное состояние менеджмента ключей на многих предприятиях.
- Возможности для MiTM-атак, что связано с негодными условиями хранения секретов (см. проблему выше).
Конечно, это проблемы не столько разработчиков OpenSSH, сколько IT-департаментов предприятий и всей IT-индустрии. В целом, на предприятиях рекомендуется уделить особое внимание системе управления ключами, организации их хранения и использования.
Кстати, для защиты от брутфорса SSH есть ещё интересная программа Endlessh, которая притворяется SSH-сервером и вводит злоумышленников в бесконечный цикл ожидания, растягивая сессии на часы или дни. Но это скорее для забавы и издевательства над злоумышленниками, а не для реальной защиты.