21.02.2024

Terrapin — уязвимость в протоколе SSH, позволяющая снизить защиту соединения

Группа исследователей из Рурского университета в Бохуме (Германия) представила новую технику MITM-атаки на SSH — Terrapin, эксплуатирующую уязвимость (CVE-2023-48795) в протоколе. Атакующий, способный организовать MITM-атаку, имеет возможность в процессе согласования соединения блокировать отправку сообщения с настройкой расширений протокола для снижения уровня защиты соединения. Прототип инструментария для совершения атаки опубликован на GitHub.

В контексте OpenSSH уязвимость, например, позволяет откатить соединение на использование менее защищённых алгоритмов аутентификации и отключить защиту от атак по сторонним каналам, воссоздающим ввод через анализ задержек между нажатиями клавиш на клавиатуре. В Python-библиотеке AsyncSSH в сочетании с уязвимостью (CVE-2023-46446) в реализации внутреннего конечного автомата (internal state machine) атака Terrapin позволяет вклиниться в SSH-сеанс.

Уязвимость затрагивает все реализации SSH, поддерживающие ChaCha20-Poly1305 или шифры в режиме CBC в сочетании с режимом ETM (Encrypt-then-MAC). Например, подобные возможности доступны в OpenSSH уже более 10 лет. Уязвимость блокирована в сегодняшнем выпуске OpenSSH 9.6, а также в обновлениях PuTTY 0.80, libssh 0.10.6/0.9.8 и AsyncSSH 2.14.2. В Dropbear SSH исправление уже добавлено в код, но новый выпуск пока не сформирован.

Уязвимость вызвана тем, что атакующий, контролирующий трафик соединения (например, владелец вредоносной беспроводной точки), может откорректировать порядковые номера пакетов в процессе согласования соединения и добиться незаметного удаления произвольного числа служебных SSH-сообщений, отправленных клиентом или сервером. Среди прочего, атакующий может удалить сообщения SSH_MSG_EXT_INFO, используемые для настройки применяемых расширений протокола. Для того чтобы другая сторона не определила пропадание пакета из-за разрыва в порядковых номерах, атакующий для сдвига порядкового номера инициирует отправку фиктивного пакета с тем же порядковым номером, что и у удалённого пакета. Фиктивный пакет содержит сообщение с флагом SSH_MSG_IGNORE, которое игнорируется при обработке.

Атака не может быть проведена при использовании потоковых шифров и CTR, так как нарушение целостности будет выявлено на уровне приложения. На практике атаке подвержены только шифр ChaCha20-Poly1305 (chacha20-poly1305@openssh.com), при котором состояние отслеживается только по порядковым номерам сообщений, и связка из режима Encrypt-Then-MAC (*-etm@openssh.com) и шифров CBC.

В OpenSSH 9.6 и других реализациях для блокирования атаки реализовано расширение протокола «strict KEX», которое автоматически включается при наличии поддержки на стороне сервера и клиента. Расширение завершает соединение при поступлении любых нештатных или лишних сообщений (например, с флагом SSH_MSG_IGNORE или SSH2_MSG_DEBUG), полученных в процессе согласования соединения, а также сбрасывает счётчик MAC (Message Authentication Code) после завершения каждого обмена ключами.

Источник: https://www.opennet.ru/opennews/art.shtml?num=60304 Источник.