Проблема присутствует непосредственно в спецификации TLS и затрагивает только соединения, использующие шифры на основе протокола обмена ключами DH (Diffie-Hellman, TLS_DH_*»). С шифрами ECDH проблема не проявляется, и они остаются безопасными. Уязвимы только протоколы TLS до версии 1.2 включительно, протокол TLS 1.3 проблеме не подвержен. Уязвимость проявляется в реализациях TLS, повторно использующих секретный ключ DH в разных TLS-соединениях (подобное поведение наблюдается примерно на 4.4% серверов из рейтинга Alexa Top 1M).
В OpenSSL 1.0.2e и более ранних выпусках первичный ключ DH повторно используется во всех серверных соединениях, если явно не выставлена опция SSL_OP_SINGLE_DH_USE. Начиная с OpenSSL 1.0.2f первичный ключ DH повторно используется только при использовании статических DH-шифров («DH-*», например «DH-RSA-AES256-SHA»). В OpenSSL 1.1.1 уязвимость не проявляется, так как в данной ветке не используется первичный ключ DH и не применяются статические DH-шифры.
При использовании метода обмена ключами DH обе стороны соединения генерируют случайные закрытые ключи (далее ключ «a» и ключ «b»), на основе которых вычисляются и отправляются открытые ключи (ga mod p и gb mod p). После получения открытых ключей каждой стороной вычисляется общий первичный ключ (gab mod p), который применяется для формирования сессионных ключей. Атака Raccoon позволяет определить первичный ключ через анализ информации по сторонним каналам, отталкиваясь от того, что в спецификациях TLS вплоть до версии 1.2 предписывается отбрасывать все начальные нулевые байты первичного ключа перед вычислениями с его участием.
В том числе урезанный первичный ключ передаётся в функцию генерации сессионного ключа, основанную на хэш-функциях с отличающимися задержками при обработке разных данных. Точное измерения времени выполняемых сервером операций с ключом позволяет атакующему определить подсказки (oracle), которые дают возможность судить о том, начинается первичный ключ с нуля или нет. Например, атакующий может перехватить отправленный клиентом открытый ключ (ga), переотправить его на сервер и определить
начинается ли с нуля результирующий первичный ключ.
Само по себе определение одного байта ключа ничего не даёт, но перехватив переданное при согласовании соединения клиентом значение «ga» атакующий может сформировать набор других значений, связанных с «ga» и отправить их на сервер в отдельных сеансах согласования соединения. Формируя и отправляя значения «gri*ga», атакующий может через анализ изменения задержек в ответе сервера определить значения, приводящие к получению первичных ключей, начинающихся с нуля. Определив подобные значения атакующий, может составить набор уравнений для
В OpenSSL уязвимости
Отдельно отмечаются дополнительные проблемы (
ແຫຼ່ງຂໍ້ມູນ: opennet.ru