Открыть сервис

Padding oracle attack

Padding oracle attack — это класс криптографических атак, основанных на получении информации о корректности заполнения (padding) блока данных при расшифровке с использованием блочного шифра в режиме CBC (Cipher Block Chaining). Атака позволяет злоумышленнику, имеющему возможность отправлять произвольные зашифрованные тексты на сервер и получать ответ о том, прошла ли проверка заполнения успешно, постепенно восстановить открытый текст или даже ключ шифрования без знания самого ключа. Уязвимость возникает, когда система раскрывает факт ошибки заполнения (например, через код ошибки, время ответа или поведение приложения), что превращает сервер в «оракул» (oracle), дающий подсказки о структуре данных.

История

Впервые атака была описана в 2002 году исследователями Сержем Водене (Serge Vaudenay) в работе «Security Flaws Induced by CBC Padding — Applications to SSL, IPsec, WTLS...». Водене показал, что многие реализации протоколов, использующие режим CBC, уязвимы к атаке, если они не скрывают информацию о корректности заполнения. Позднее, в 2010-х годах, атака была успешно применена к реальным протоколам, таким как SSL/TLS (например, атака POODLE — Padding Oracle On Downgraded Legacy Encryption, 2014 год), а также к веб-приложениям, использующим шифрование в куках или параметрах URL. В 2016 году атака была продемонстрирована на протоколе ASP.NET, что привело к массовым исправлениям в продуктах Microsoft.

Принцип работы

Блочное шифрование и режим CBC

Блочные шифры (например, AES, DES) работают с блоками фиксированной длины (обычно 8 или 16 байт). Режим CBC (Cipher Block Chaining) использует предыдущий зашифрованный блок для XOR-сложения с текущим блоком открытого текста перед шифрованием. При расшифровке каждый блок расшифровывается, а затем XOR-ится с предыдущим зашифрованным блоком (или вектором инициализации для первого блока). Для выравнивания длины сообщения до кратной длине блока применяется заполнение (padding), например, по стандарту PKCS#7: каждый недостающий байт заполняется значением, равным количеству недостающих байт.

Оракул заполнения

Уязвимость возникает, когда расшифровывающая сторона (сервер) сообщает, было ли заполнение корректным. Например, при расшифровке зашифрованного текста сервер проверяет, соответствует ли последний байт расшифрованного блока правилам PKCS#7. Если нет — возвращается ошибка (например, HTTP 500, «Bad Padding» или «Invalid Padding»). Злоумышленник, перехватив зашифрованный текст, может модифицировать его и отправлять на сервер, наблюдая за ответами. Каждый ответ «да/нет» даёт один бит информации о содержимом расшифрованного блока.

Механизм атаки

Атака проводится на один блок зашифрованного текста, который злоумышленник хочет расшифровать. Пусть имеется зашифрованный текст, состоящий из блоков C1, C2, ..., Cn. Для расшифровки блока C2 злоумышленник модифицирует предыдущий блок C1, заменяя его на произвольный блок C1' (или на вектор инициализации для первого блока). Отправляя модифицированный зашифрованный текст (C1', C2) на сервер, злоумышленник получает ответ о корректности заполнения. Путём перебора значений байтов в C1' можно добиться, чтобы расшифрованный блок D(C2) XOR C1' давал корректное заполнение (например, 0x01 в последнем байте). Это позволяет восстановить последний байт исходного открытого текста P2 (последний байт D(C2) XOR исходный C1). Затем, зная этот байт, злоумышленник переходит к следующему байту, устанавливая заполнение 0x02 и т.д. В итоге восстанавливается весь блок P2.

Условия для атаки

Для успешной реализации padding oracle attack необходимы следующие условия:

  • Использование блочного шифра в режиме CBC (или аналогичного режима с заполнением).
  • Возможность отправлять произвольные зашифрованные тексты на сервер и получать ответ о корректности заполнения (явно или косвенно).
  • Отсутствие дополнительных механизмов защиты, таких как аутентификация (например, HMAC) или скрытие ошибок заполнения (например, возврат общей ошибки «Decryption failed» без уточнения причины).

Разновидности атак

POODLE (2014)

Атака на протокол SSL 3.0, использующая уязвимость в режиме CBC и возможность перехода на более старую версию протокола. Позволяла расшифровать куки и другие конфиденциальные данные в веб-сессиях. В 2014 году была признана серьёзной угрозой для безопасности HTTPS.

Lucky13 (2013)

Атака на TLS 1.0, основанная на различиях во времени обработки ошибок заполнения. Использовала тонкие временные задержки, чтобы определить, является ли заполнение корректным. Требовала множества запросов и статистического анализа.

ASP.NET Padding Oracle (2010)

Уязвимость в веб-фреймворке ASP.NET, где ошибки заполнения в зашифрованных куках или параметрах ViewState приводили к разным кодам ответа HTTP. Атака позволяла расшифровать данные аутентификации и получить доступ к аккаунтам пользователей.

Защита от атаки

Основные методы защиты включают:

  • Аутентифицированное шифрование: использование режимов, которые обеспечивают как конфиденциальность, так и целостность данных (например, GCM, CCM, EAX). В этих режимах проверка заполнения происходит только после проверки аутентификационного тега, что исключает утечку информации.
  • Скрытие ошибок заполнения: возврат единой ошибки (например, «Decryption failed») без указания причины. Однако этот метод не всегда эффективен, так как злоумышленник может использовать временные задержки (timing attacks).
  • Использование HMAC: добавление к зашифрованному тексту кода аутентификации сообщения (MAC) и проверка его перед расшифровкой. Это предотвращает возможность модификации зашифрованного текста.
  • Обновление протоколов: отказ от устаревших версий SSL/TLS (SSL 3.0, TLS 1.0) и переход на TLS 1.2 или 1.3, которые включают встроенные механизмы защиты от подобных атак.

Примеры в реальной жизни

  • Веб-приложения: многие фреймворки (Ruby on Rails, ASP.NET, Java Spring) в прошлом были уязвимы к padding oracle attack, если использовали режим CBC для шифрования сессионных данных или кук. Исправления включали переход на аутентифицированное шифрование.
  • VPN и протоколы: некоторые реализации IPsec и OpenVPN в старых версиях были уязвимы, если использовали CBC без аутентификации.
  • Банковские системы: атаки на протоколы электронных платежей, где шифрование CBC применялось для защиты PIN-кодов или номеров карт.

Критика и ограничения

Padding oracle attack считается классическим примером того, как неправильная обработка ошибок может подорвать криптографическую безопасность. Однако атака требует значительного количества запросов (от нескольких сотен до тысяч на один блок) и наличия сетевого доступа к серверу. В современных системах, где используется аутентифицированное шифрование, атака неэффективна. Тем не менее, она остаётся важным напоминанием о необходимости тщательного проектирования криптографических протоколов.

Интересные факты

  • Название «padding oracle» происходит от термина «oracle» в криптографии, обозначающего гипотетическое устройство, которое отвечает на вопросы о некоторой функции. В данном случае сервер выступает в роли такого оракула.
  • Атака POODLE была настолько эффективна, что привела к окончательному отказу от SSL 3.0 в 2015 году (RFC 7568).
  • В 2018 году была обнаружена атака на протоколы шифрования электронной почты (например, S/MIME), использующая padding oracle для расшифровки сообщений.

Источники

  • Vaudenay, S. (2002). «Security Flaws Induced by CBC Padding — Applications to SSL, IPsec, WTLS...»
  • Мёллер, Б., Дуонг, Т., Котович, К. (2014). «This POODLE Bites: Exploiting the SSL 3.0 Fallback»
  • Альфардан, Н., Патерсон, К. (2013). «Lucky Thirteen: Breaking the TLS and DTLS Record Protocols»
  • RFC 5246 (TLS 1.2), RFC 8446 (TLS 1.3)
  • Документация Microsoft по исправлению уязвимости ASP.NET Padding Oracle (2010)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →