После четырёх месяцев разработки представлен релиз OpenSSH 8.7, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.
Основные изменения:
- В scp добавлен экспериментальный режим передачи данных с использованием протокола SFTP вместо традиционно применяемого протокола SCP/RCP. В SFTP применяются более предсказуемые методы обработки имён и не используется обработка glob-шаблонов через shell на стороне другого хоста, создающая проблемы с безопасностью. Для включения SFTP в scp предложен флаг “-s”, но в будущем планируется перейти на данный протокол по умолчанию.
- В sftp-server реализованы расширения протокола SFTP для раскрытия путей ~/ и ~user/, что необходимо для scp.
- В утилите scp изменено поведение при копировании файлов между двумя удалёнными хостами (например, “scp host-a:/path host-b:”), которое теперь по умолчанию производится через промежуточный локальный хост, как при указании флага “-3”. Указанный подход позволяет избежать передачи лишних учётных данных на первый хост и тройной интерпретации имён файлов в shell (на стороне источника, приёмника и локальной системы), а также при использовании SFTP позволяет использовать все методы аутентификации при обращении к удалённым хостам, а не только неинтерактивные методы. Для восстановления старого поведения добавлена опция “-R”.
- В ssh добавлена настройка ForkAfterAuthentication, соответствующая флагу “-f”.
- В ssh добавлена настройка StdinNull, соответствующая флагу “-n”.
- В ssh добавлена настройка SessionType, через которую можно установить режимы, соответствующие флагам “-N” (без сеанса) и “-s” (subsystem).
- В ssh-keygen в файлах с ключами разрешено указывать интервал действия ключа.
- В ssh-keygen добавлен флаг “-Oprint-pubkey” для вывода полного открытого ключа в составе подписи sshsig.
- В ssh и sshd, как клиент, так и сервер, переведены на использование более строгого парсера файла конфигурации, в котором используются похожие на shell правила обработки кавычек, пробелов и escape-символов. Новый парсер также не пропускает ранее имевшиеся допущения, такие как пропуск аргументов в опциях (например, теперь нельзя оставлять пустой директиву DenyUsers), незакрытые кавычки и указание нескольких символов “=”.
- При использовании DNS-записей SSHFP при верификации ключей, ssh теперь проверяет все совпавшие записи, а не только содержащие определённый тип цифровой подписи.
- В ssh-keygen при генерации ключа FIDO с указанием опции -Ochallenge для хэширования теперь используется встроенная прослойка, а не средства libfido2, что позволяет использовать challenge-последовательности, размером больше или меньше 32 байт.
- В sshd при обработке директивы environment=”…” в файлах authorized_keys теперь принимается первое совпадение и действует ограничение в 1024 имён переменных окружения.
Разработчики OpenSSH также предупредили о переводе в разряд устаревших алгоритмов, использующих хеши SHA-1, в связи с повышением эффективности коллизионных атак с заданным префиксом (стоимость подбора коллизии оценивается примерно в 50 тысяч долларов). В следующем выпуске планируется отключить по умолчанию возможность использования алгоритма цифровых подписей по открытому ключу “ssh-rsa”, который упоминается в оригинальном RFC для протокола SSH и остаётся широко распространённым на практике.
Для проверки применения ssh-rsa в своих системах можно попробовать подключиться по ssh с опцией “-oHostKeyAlgorithms=-ssh-rsa”. При этом отключение по умолчанию цифровых подписей “ssh-rsa” не означает полный отказ от использования RSA-ключей, так как помимо SHA-1 протокол SSH допускает применение других алгоритмов вычисления хэшей. В частности, помимо “ssh-rsa” останется возможность использования связок “rsa-sha2-256” (RSA/SHA256) и “rsa-sha2-512” (RSA/SHA512).
Для сглаживания перехода на новые алгоритмы в OpenSSH ранее по умолчанию была включена настройка UpdateHostKeys, которая позволяет автоматически перевести клиентов на более надёжные алгоритмы. При помощи указанной настройки включается специальное расширение протокола “[email protected]”, позволяющее серверу после прохождения аутентификации информировать клиента о всех доступных ключах хоста. Клиент может отразить эти ключи в своём файле ~/.ssh/known_hosts, что позволяет организовать обновление ключей хоста и упрощает смену ключей на сервере.
Использование UpdateHostKeys ограничено несколькими оговорками, которые в будущем могут быть отменены: ключ должен упоминаться в UserKnownHostsFile и не использоваться в GlobalKnownHostsFile; ключ должен присутствовать только под одним именем; не должен применяться сертификат хостового ключа; в known_hosts не должно применяться масок по имени хоста; должна быть отключена настройка VerifyHostKeyDNS; должен быть активен параметр UserKnownHostsFile.
Среди рекомендуемых для миграции алгоритмов упомянуты rsa-sha2-256/512 на базе RFC8332 RSA SHA-2 (поддерживается с OpenSSH 7.2 и используется по умолчанию), ssh-ed25519 (поддерживается с OpenSSH 6.5) и ecdsa-sha2-nistp256/384/521 на базе RFC5656 ECDSA (поддерживается с OpenSSH 5.7).