Cryptology Academy · Урок

Атаки Padding Oracle подробно

Пошагово разберите атаку оракула дополнения CBC и узнайте, почему даже незначительные оракулы ошибок расшифрования катастрофически опасны.

Урок 1 из 413 шагов

«Атаки Padding Oracle подробно» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Структура расшифрования в режиме CBC

В режиме CBC (сцепления блоков шифра) расшифрование каждого блока включает расшифрование блока шифротекста с помощью блочного шифра, а затем выполнение XOR с предыдущим блоком шифротекста. Эта операция XOR создаёт важное свойство: изменяя биты в блоке шифротекста, злоумышленник может предсказуемо изменить определённые биты открытого текста следующего блока. Это свойство делает возможной атаку на оракул дополнения.

Объяснение дополнения PKCS#7

Блочным шифрам требуются входные данные, разделённые на блоки фиксированного размера. Дополнение PKCS#7 заполняет последний блок: если требуется 3 байта дополнения, добавляются три байта со значением 0x03 каждый. Если блок уже заполнен, добавляется полный блок дополнения, в котором все 16 байт имеют значение 0x10. Во время расшифрования проверяется согласованность байтов дополнения — все N байт должны иметь значение N — после чего они удаляются. Если дополнение недопустимо, расшифрование должно завершиться ошибкой.

Оракул: использование проверки дополнения

Оракул дополнения — это любая система, которая сообщает, имеет ли расшифрованный шифротекст корректное дополнение PKCS#7. Оракулом может быть явное сообщение об ошибке (Недопустимое дополнение), другой код состояния HTTP (500 вместо 403), другое тело ответа с ошибкой или даже разница во времени выполнения (расшифрование с корректным дополнением выполняется немного быстрее). Злоумышленнику не нужно знать ключ; ему нужен только этот двоичный сигнал: дополнение корректно или нет.

Побайтовое восстановление открытого текста

Злоумышленник выбирает конкретный блок шифротекста. Чтобы восстановить последний байт открытого текста, измените последний байт предыдущего блока шифротекста и отправьте изменённый шифротекст оракулу. Перебирайте 256 возможных значений, пока оракул не сообщит о корректном дополнении. При значении, создающем корректное дополнение (0x01), промежуточное значение расшифрования становится известным: оно подвергается операции XOR с изменённым байтом, чтобы получить 0x01. Выполнение XOR с исходным байтом шифротекста раскрывает байт открытого текста.

Восстановление всего блока

После восстановления последнего байта выбирается предпоследний байт. Промежуточное значение последнего байта уже известно, поэтому последний байт можно настроить так, чтобы получить 0x02. Затем перебираются 256 значений предпоследнего байта, пока дополнение 0x02 0x02 не станет корректным. Процесс повторяется для каждого байта, что позволяет восстановить полный блок размером 16 байт в среднем за 256 * 16 = 4,096 запросов к оракулу на блок. При быстром ответе оракула это можно выполнить за несколько секунд.

Восстановление всего сообщения

Процесс повторяется для каждого блока шифротекста (за исключением IV, который невозможно восстановить без предыдущего блока). Для полного расшифрования шифротекста размером 128 байт (8 блоков AES) в среднем требуется около 32 000 запросов к оракулу. При обработке веб-сервером сотен запросов в секунду это занимает минуты. Злоумышленник восстанавливает весь открытый текст, ни разу не получая ключ шифрования.

Эксплойты из реального мира: POODLE

POODLE (атака на оракул дополнения при переходе на устаревшее шифрование) использовала проверку дополнения CBC в SSL 3.0. В SSL 3.0 применялась схема дополнения, отличная от PKCS#7, но атаку удалось адаптировать к концепции оракула. Злоумышленник, способный внедрять содержимое в сеанс SSL 3.0 и заставлять клиентов переходить на SSL 3.0, мог восстановить файлы cookie сеанса с помощью техники оракула дополнения. POODLE привела к отказу от использования SSL 3.0.

Lucky Thirteen и BEAST

Атака Lucky Thirteen (2013) использовала побочный канал по времени в схеме TLS CBC «MAC-then-encrypt». Время проверки MAC отличалось на несколько наносекунд в зависимости от того, было ли дополнение корректным, что создавало временной оракул. BEAST (2011) использовала предсказуемый IV в режиме CBC TLS 1.0 для проведения атаки с выбранным открытым текстом на файлы cookie сеанса. Обе атаки показали, что режим CBC в TLS принципиально сложно реализовать правильно.

Защита: используйте AEAD вместо CBC

Надёжная защита от атак на оракул дополнения — использование режимов AEAD (аутентифицированное шифрование с дополнительными данными) вместо CBC. Режимы AEAD, такие как AES-256-GCM и ChaCha20-Poly1305, проверяют подлинность до выполнения расшифрования или проверки дополнения. Если тег аутентификации недействителен, расшифрование не выполняется и сведения о дополнении не раскрываются. TLS 1.3 требует использования AEAD и полностью удаляет CBC.

Защита: сначала шифрование, затем MAC

Если AEAD недоступен, схема «сначала шифрование, затем MAC» добавляет MAC для шифротекста, а не для открытого текста. До расшифрования или проверки дополнения проверяется MAC. Если проверка MAC не пройдена, операция немедленно прерывается без раскрытия каких-либо сведений о дополнении. Это необходимо выполнять за постоянное время, чтобы предотвратить временные оракулы. Ошибка проверки MAC ничего не сообщает о том, было бы дополнение корректным или нет.

Обнаружение уязвимостей оракула дополнения

Чтобы проверить наличие уязвимостей оракула дополнения, зашифруйте известное сообщение, затем отправьте приложению изменённый шифротекст и изучите ответ. Если корректное и некорректное дополнение приводят к заметно различающимся ответам (сообщению об ошибке, коду состояния или времени ответа), оракул дополнения существует. Такие автоматизированные инструменты, как padbuster и PadBuster, специально проверяют веб-приложения на наличие оракулов дополнения, систематически изменяя шифротексты и анализируя ответы.

Механизм оракула дополнения

Что требуется атаке с использованием оракула дополнения от целевой системы, чтобы расшифровать шифротекст без ключа?

Краткое повторение атаки на оракул дополнения

Кратко об оракуле дополнения: свойство XOR при расшифровании CBC позволяет управляемо изменять байты открытого текста; проверка дополнения PKCS#7 раскрывает двоичный оракул; злоумышленник перебирает значения байтов и наблюдает за корректными и некорректными ответами, чтобы побайтно восстановить открытый текст; реальные эксплойты включают POODLE, Lucky Thirteen и BEAST; защита заключается в переходе на AEAD (GCM, ChaCha20-Poly1305), который проверяет подлинность до расшифрования.

Можно начать бесплатно

Изучай Cryptology Academy с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
67
Уроки
261

Часто задаваемые вопросы

Урок «Атаки Padding Oracle подробно» бесплатный?

Да — полный текст урока «Атаки Padding Oracle подробно» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Атаки Padding Oracle подробно»?

Пошагово разберите атаку оракула дополнения CBC и узнайте, почему даже незначительные оракулы ошибок расшифрования катастрофически опасны. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Атаки Padding Oracle подробно»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Атаки Padding Oracle подробно
  2. Атаки повторной передачи и уязвимости повторного использования nonce
  3. Атаки по времени в коде на уровне приложения
  4. Основные схемы неправильного использования криптографии
← Назад к Cryptology Academy