Розділи сайту Всі
#openssh
Опубликован релиз OpenSSH 9.2, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP. В новой версии устранена уязвимость, приводящая к двойному освобождению области памяти на стадии до прохождения аутентификации. Уязвимости подвержен только выпуск OpenSSH 9.1, в более ранних версиях проблема не проявляется.

Для создания условий проявления уязвимости достаточно изменить баннер SSH-клиента на "SSH-2.0-FuTTYSH_9.1p1" для того, чтобы добиться выставления флагов "SSH_BUG_CURVE25519PAD" и "SSH_OLD_DHGEX", зависящих от версии SSH-клиента. После выставления данных флагов память под буфер "options.kex_algorithms" освобождается два раза - при выполнении функции do_ssh2_kex(), вызывающей compat_kex_proposal(), и при выполнении функции do_authentication2(), вызывающей по цепочке input_userauth_request(), mm_getpwnamallow(), copy_set_server_options(), assemble_algorithms() и kex_assemble_names().

Создание рабочего эксплоита для уязвимости считается маловероятным, так как процесс эксплуатации слишком усложнён - современные библиотеки распределения памяти предоставляют защиту от двойного освобождения памяти, а процесс pre-auth, в котором присутствует ошибка, выполняется с пониженными привилегиями в изолированном sandbox-окружении.
Представлен релиз OpenSSH 9.0, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP. В новой версии утилита scp переведена по умолчанию на использование SFTP вместо устаревшего протокола SCP/RCP.

В SFTP применяются более предсказуемые методы обработки имён и не используется обработка glob-шаблонов в именах файлов через shell на стороне другого хоста, создающая проблемы с безопасностью. В частности, при применении SCP и RCP сервер принимает решение о том, какие файлы и каталоги отправить клиенту, а клиент лишь проверяет корректность возвращённых имён объектов, что в случае отсутствие должных проверок на стороне клиента позволяет серверу передать другие имена файлов, отличающиеся от запрошенных.
Опубликован релиз OpenSSH 8.6, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP. В новой версии устранена уязвимость в реализации директивы LogVerbose, появившейся в прошлом выпуске и позволяющей поднять уровень сбрасываемой в лог отладочной информации, в том числе реализовать возможность фильтрации по шаблонам, функциям и файлам, связанным с кодом, выполняемым со сброшенными привилегиями в процессе sshd, изолированном в sandbox-окружении.

Атакующий, добившийся получения контроля за непривилегированным процессом при помощи какой-то ещё не известной уязвимости, может использовать связанную с LogVerbose проблему для обхода sandbox-изоляции и совершения атаки на процесс, выполняемый с повышенными привилегиями. Применение уязвимости в LogVerbose на практике оценивается как маловероятное, так как настройка LogVerbose по умолчанию отключена и обычно используется только во время отладки. Также для атаки требуется найти новую уязвимость в непривилегированном процессе.
После пяти месяцев разработки представлен релиз OpenSSH 8.5, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.

Разработчики 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 8.5 по умолчанию включена настройка UpdateHostKeys, которая позволяет автоматически перевести клиентов на более надёжные алгоритмы. При помощи указанной настройки включается специальное расширение протокола "hostkeys@openssh.com", позволяющее серверу после прохождения аутентификации информировать клиента о всех доступных ключах хоста. Клиент может отразить эти ключи в своём файле ~/.ssh/known_hosts, что позволяет организовать обновление ключей хоста и упрощает смену ключей на сервере.
После четырёх месяцев разработки представлен релиз OpenSSH 8.4, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.
После четырёх месяцев разработки представлен релиз OpenSSH 8.2, открытой реализации клиента и сервера для работы по протоколам SSH 2.0 и SFTP.

Ключевым улучшением в выпуске OpenSSH 8.2 стала возможность использования двухфакторной аутентификации при помощи устройств, поддерживающих протокол U2F, развиваемый альянсом FIDO. U2F позволяет создавать недорогие аппаратные токены для подтверждения физического присутствия пользователя, взаимодействие с которыми производится через USB, Bluetooth или NFC. Подобные устройства продвигаются в качестве средства для двухфакторной аутентификации на сайтах, уже поддерживаются основными браузерами и выпускаются различными производителями, включая Yubico, Feitian, Thetis и Kensington.

Для взаимодействия с устройствами, подтверждающими присутствие пользователя, в OpenSSH добавлены новые типы ключей "ecdsa-sk" и "ed25519-sk", в которых используются алгоритмы цифровой подписи ECDSA и Ed25519, в сочетании с хэшем SHA-256. Процедуры взаимодействия с токенами вынесены в промежуточную библиотеку, которая загружается по аналогии с библиотекой для поддержки PKCS#11 и является обвязкой над библиотекой libfido2, предоставляющей средства для коммуникации с токенами поверх USB (поддерживается протоколы FIDO U2F/CTAP 1 и FIDO 2.0/CTAP 2). Подготовленная разработчиками OpenSSH промежуточная библиотека libsk-libfido2 включена в основной состав libfido2, как и HID-драйвер для OpenBSD.

Для аутентификации и генерации ключа необходимо указать в настройках параметр "SecurityKeyProvider=internal", предварительно собрав openssh со встроенной поддержкой библиотеки-прослойки (--with-security-key-builtin), или выставить переменную окружения SSH_SK_PROVIDER, указав путь к внешней библиотеке libsk-libfido2.so (export SSH_SK_PROVIDER=/path/to/libsk-libfido2.so). Далее нужно запустить "ssh-keygen -t ecdsa-sk" или, если ключи уже созданы и настроены, подключиться к серверу при помощи "ssh". При запуске ssh-keygen созданная пара ключей будет сохранена в "~/.ssh/id_ecdsa_sk" и может использоваться аналогично другим ключам.

Открытый ключ (id_ecdsa_sk.pub) следует скопировать на сервер в файл authorized_keys. На стороне сервера только проверяется цифровая подпись, а взаимодействие с токенами производится на стороне клиента (на сервере не нужно устанавливать libsk-libfido2, но сервер должен поддерживать тип ключей "ecdsa-sk"). Сгенерированный закрытый ключ (id_ecdsa_sk) по сути является дескриптором ключа, образующим реальный ключ только в сочетании с секретной последовательностью, хранимой на стороне токена U2F. В случае попадания ключа id_ecdsa_sk в руки атакующего, для прохождения аутентификации ему также потребуется получить доступ к аппаратному токену, без которого сохранённый в файле id_ecdsa_sk закрытый ключ бесполезен.
В кодовую базу OpenSSH добавлена экспериментальная поддержка двухфакторной аутентификации с использованием устройств, поддерживающих протокол U2F, развиваемый альянсом FIDO. U2F позволяет создавать недорогие аппаратные токены для подтверждения физического присутствия пользователя, взаимодействие с которыми производится через USB, Bluetooth или NFC. Подобные устройства продвигаются в качестве средства для двухфакторной аутентификации на сайтах, уже поддерживаются основными браузерами и выпускаются различными производителями, включая Yubico, Feitian, Thetis и Kensington.

Для взаимодействия с устройствами, подтверждающими присутствие пользователя, в OpenSSH добавлен новый тип ключей "sk-ecdsa-sha2-nistp256@openssh.com" ("ecdsa-sk"), в котором используется алгоритм цифровой подписи ECDSA (Elliptic Curve Digital Signature Algorithm) с эллиптической кривой NIST P-256 и хэшем SHA-256. Процедуры взаимодействия с токенами вынесены в промежуточную библиотеку, которая загружается по аналогии с библиотекой для поддержки PKCS#11 и является обвязкой над библиотекой libfido2, предоставляющей средства для коммуникации с токенами поверх USB (поддерживается протоколы FIDO U2F/CTAP 1 и FIDO 2.0/CTAP 2). Подготовленная разработчиками OpenSSH промежуточная библиотека libsk-libfido2 включена в основной состав libfido2, как и HID-драйвер для OpenBSD.
Разработчики проекта OpenSSH добавили изменение, призванное обеспечить защиту от различных атак по сторонним каналам, таких как Spectre, Meltdown, Rowhammer и Rambleed, с помощью которых злоумышленники могут извлечь важные данные из памяти.

Изменения в код были внесены на минувшей неделе одним из разработчиков OpenSSH и OpenBSD, специалистом Google Дэмианом Миллером (Damien Miller). Добавленная защита предотвращает восстановление закрытого ключа, содержащегося в оперативной памяти. Закрытые ключи SSH могут использоваться атакующими для подключения к удаленному серверу без авторизации.

Как пояснил Миллер, суть защиты заключается в шифровании закрытых ключей (в моменты, когда они не используются) с помощью симметричного ключа, полученного из относительно большого предварительного ключа (prekey), состоящего из случайных данных (в настоящее время его размер составляет 16 КБ). В случае, если злоумышленнику удастся извлечь данные из памяти компьютера или сервера, он получит зашифрованную версию ключа SSH.