Релиз OpenSSH 8.1

После шести месяцев разработки представлен релиз OpenSSH 8.1, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.

Отдельного внимания в новом выпуске заслуживает устранение уязвимости, затрагивающей ssh, sshd, ssh-add и ssh-keygen. Проблема присутствует в коде парсинга закрытых ключей с типом XMSS и позволяет атакующему инициировать целочисленное переполнение. Уязвимость отмечена как эксплуатируемая, но малоприменимая, так как поддержка ключей XMSS относится к экспериментальным возможностям, отключённым по умолчанию (в переносимой версии в autoconf даже не предусмотрено сборочной опции для включения XMSS).

Основные изменения:

  • В ssh, sshd и ssh-agent добавлен код, препятствующий восстановлению приватного ключа, находящегося в оперативной памяти, в результате проведения атак по сторонним каналам, таким как Spectre, Meltdown, RowHammer и RAMBleed. Приватные ключи теперь зашифровываются при загрузке в память и расшифровываются только в моменты использования, в остальное время оставаясь зашифрованными. При подобном подходе для успешного восстановления закрытого ключа атакующему требуется предварительно восстановить случайно сгенерированный промежуточный ключ размером 16 Кб, используемый для шифрования основного ключа, что маловероятно при свойственной современным атакам частоте ошибок восстановления;
  • В ssh-keygen добавлена экспериментальная поддержка упрощённой схемы создания и верификации цифровых подписей. Цифровые подписи могут создаваться при помощи обычных SSH-ключей, хранимых на диске или в ssh-agent, и верифицироваться с использования похожего на authorized_keys списка допустимых ключей. В цифровую подпись встраивается информация о пространстве имён для исключения путаницы при применении в различных областях (например, для email и файлов);
  • ssh-keygen переведён по умолчанию на использование алгоритма rsa-sha2-512 при заверении сертификатов цифровой подписью на базе RSA-ключа (при работе в режиме CA). Подобные сертификаты несовместимы с выпусками до OpenSSH 7.2 (для обеспечения совместимости следует переопределить тип алгоритма, например через вызов "ssh-keygen -t ssh-rsa -s ...");
  • В ssh в выражении ProxyCommand реализована поддержка раскрытия подстановки "%n" (указанное в адресной строке имя хоста);
  • В списках алгоритмов шифрования для ssh и sshd для вставки предлагаемых по умолчанию алгоритмов теперь можно использовать символ "^". Например, для добавления ssh-ed25519 к списку по умолчанию можно указать "HostKeyAlgorithms ^ssh-ed25519";
  • В ssh-keygen обеспечен вывод прикреплённого к ключу комментария при извлечении открытого ключа из закрытого;
  • В ssh-keygen добавлена возможность использования флага "-v" при выполнении операций поиска ключей (например, "ssh-keygen -vF host"), указание которого приводит к выводу наглядной сигнатуры хоста;
  • Добавлена возможность использования PKCS8 в качестве альтернативного формата для хранения закрытых ключей на диске. По умолчанию продолжает использоваться формат PEM, а PKCS8 может оказаться полезным для достижения совместимости со сторонними приложениями.