В последних версиях 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-сервером и вводит злоумышленников в бесконечный цикл ожидания, растягивая сессии на часы или дни. Но это скорее для забавы и издевательства над злоумышленниками, а не для реальной защиты.

Комментарии (7)


  1. randomsimplenumber
    11.08.2024 20:33

    Конечно, это проблемы не столько разработчиков OpenSSH, сколько IT-департаментов предприятий и всей IT-индустрии.

    Ну, формально говоря, да. Но нормального решения для управления ключами не существует. Разве что поделки на базе openldap.


    1. Ratenti
      11.08.2024 20:33

      Зачем ключи, если можно пароль использовать?


      1. MesDes
        11.08.2024 20:33

        У них почему-то ключи стали надежнее и удобнее паролей.


        1. Shaman_RSHU
          11.08.2024 20:33

          Потому что GlobalSign занимается...


        1. ialexander
          11.08.2024 20:33
          +1

          Ключи сложнее забрутфорсить, плюс private key не надо отправлять по сети, в отличие от паролей.


          1. yurtaev
            11.08.2024 20:33

            Пароль тоже не отправляется, шифруется сессионым ключем или хэширутеся.


  1. licked
    11.08.2024 20:33
    +1

    В насколько последних? Вот посмотрел на свежих Debian 12 и FreeBSD 14.1-p3. Нет такой опции...