Атака представляет собой вариацию метода Блейхенбахера, предложенного в 1998 году, и продолжает развитие атак ROBOT (Return Of Bleichenbacher’s Oracle Threat) и New CAT (New Cache ATtack), опубликованных в 2017 и 2019 годах. Суть метода в том, что атакующий на основании разной реакции сервера и разного времени выполнения операций может отделить корректные и некорректные блоки добавочного заполнения (padding oracle), добавленные в соответствии со стандартом PKCS #1 v1.5 для выравнивания зашифрованных данных по границе блока. Манипулируя информацией о корректности блоков добавочного заполнения атакующий может путём перебора воссоздать подходящий шифротекст.
При этом атака непосредственно не восстанавливает закрытый ключ, а только позволяет расшифровать шифротекст или сформировать поддельное подписанное сообщение. Для успешного проведения атаки требуется отправка очень большого объёма пробных сообщений для расшифровки. Отличие метода Marvin сводится к усовершенствованию техники разделения корректных и некорректных добавочных данных, фильтрации ложных срабатываний, более точному определению задержек при вычислениях и задействованию дополнительных сторонних каналов при измерении.
Применении атаки против TLS-серверов, использующих шифрование на основе ключей RSA, даёт возможность атакующему пассивно сохранить перехваченный трафик и позднее расшифровать его. Для серверов, поддерживающих PFS (Perfect forward secrecy), проведение атаки значительно усложняется и успех зависит от того, как быстро будет проведена атака. Кроме того, метод позволяет сформировать фиктивную цифровую подпись, заверяющую содержимое сообщений ServerKeyExchange в TLS 1.2 или CertificateVerify в TLS 1.3, передаваемых на этапе обмена ключами, что может применяться для совершения MITM-атак по перехвату TLS-соединения между клиентом и сервером.
Проведение MITM-атак существенно усложняется из-за того, что цифровые подписи охватывают не только передаваемые данные, но и случайное значение, выбранное клиентом, а также из-за необходимости подделки подписи за относительно небольшое время, до того как клиент закроет соединение после истечения таймаута (для оптимизации подбора предлагается параллельно отправлять большое число проверочных запросов).
Проблема затрагивает различные реализации протоколов в которых применяется RSA и PKCS #1 v1.5, такие как TLS, XML Encryption, интерфейсы PKCS#11, JWT (JSON Web Token), JOSE (Javascript Object Signing and Encryption) и S/MIME. Несмотря на то, что в современных криптографических библиотеках присутствует та или иная защита от атак на базе метода Блейхенбахера, в ходе проведённого исследования было выявлено, что в библиотеках остаются незакрытые каналы утечки и не обеспечено постоянное время обработки пакетов с корректным и ошибочным добавочным заполнением. Например, реализация атаки Marvin на GnuTLS не привязывается к коду, непосредственно выполняющего вычисления, связанные с RSA, а использует разное время выполнения кода, который принимает решение о выводе того или иного сообщения об ошибке.
Возможность совершения атаки Marvin выявлена в реализациях TLS, предлагаемых в библиотеках:
- OpenSSL (CVE-2022-4304). Уязвимость вызвана утечкой информации в коде дешифровки RSA. Проблема устранена в февральских обновлениях OpenSSL (3.0.8 и 1.1.1t).
- GnuTLS (CVE-2023-0361). Уязвимость вызвана различием времени ответа при обработке шифротекста RSA в сообщении ClientKeyExchange с корректным и некорректным добавочным заполнением PKCS#1 v1.5. Проблема устранена в февральском выпуске GnuTLS 3.8.0.
- Mozilla NSS (CVE-2023-4421). Выявлены проблемы, связанные с непостоянным временем выполнения некоторых операций RSA в зависимости от обрабатываемых данных. Частично уязвимость устранена в выпуске 3.61. Дополнительные исправления ожидаются в выпуске NSS 3.94, который намечен на следующую неделю.
- pyca/cryptography (CVE-2020-25659). Изменения, блокирующие уязвимость, внесены в 2020 году, но их оказалось недостаточно без добавленных в 2021 году исправлений в OpenSSL.
- M2Crypto (CVE-2020-25657). Защита была добавлена год назад, но она эффективна только вместе с изменениями в API OpenSSL.
- OpenSSL-ibmca. Исправления, решающие проблемы с непостоянным временем обработки добавочного заполнения RSA PKCS#1 v1.5 и OAEP, добавлены в мартовский выпуск 2.4.0.
Кроме того, в библиотеке GNU MP (функция mpz_powm_sec) и Go-модуле crypto/rsa (фунекция DecryptPKCS1v15SessionKey) выявлены уязвимые вызовы API, приводящие к утечкам, которые можно использовать для совершения атак, анализирующих зависимость скорости выполнения операций от обрабатываемых данных (timing attacks). Из протестированных проектов, которые не подвержены атаке, отмечена библиотека BoringSSL.
Так как атака основана на фундаментальной уязвимости в операциях расшифровки на базе RSA с добавочным заполнением, соответствующим стандарту PKCS#1 v1.5, и за 25 лет существования проблемы в библиотеках так и обеспечили постоянное время обработки пакетов с корректным и ошибочным добавочным заполнением, в качестве оптимального решения предлагается прекратить использование RSA на TLS-серверах в пользу шифров на основе ECDH (Elliptic Curve Diffie Hellman).
Автор исследования также полагает, что рассмотренный класс уязвимостей не ограничивается RSA и может затрагивать многие другие криптографические алгоритмы, зависящие от типовых библиотек для целочисленных вычислений, например, использующих BIGNUM из OpenSSL, MPI из из NSS, Java BigInteger, Python int, Rust apint, GnuMP mpz_t, Go math/big Int и т.п. В качестве примера потенциальной применимости метода приводится атака Minerva на реализации алгоритма создания цифровой подписи ECDSA/EdDSA.
Для подтверждения возможности совершения атаки Marvin на практике исследователь продемонстрировал применимость метода к приложениям на базе библиотек M2Crypto и pyca/cryptography, для компрометации шифрования в которых оказалось достаточно нескольких часов при проведении эксперимента на среднем ноутбуке. Например, в экспериментах с библиотекой M2Crypto на ноутбуке Lenovo T480 с CPU Intel i7-8650U атака по дешифровке шифротекста при использовании 1024-разрядных ключей RSA заняла 9 часов и потребовала отправки 163 тысячи проверочных запросов.
Организация практических атак на TLS-серверы по сети требует более сложных манипуляций, сильно зависящих от размеров ключей, модели CPU на системе жертвы, особенностей конфигурации оборудования, операционной системы, применяемой реализации RSA и расстояния между сервером к атакующим (для учёта сетевых задержек). В наиболее оптимальном варианте проведение целевой сетевой атаки на систему жертвы, подключённую через один сетевой коммутатор с атакующим, потребует нескольких дней при использовании на стороне жертвы OpenSSL и нескольких часов, при использовании NSS.
Источник: http://www.opennet.ru/opennews/art.shtml?num=59848