Кажется, что проблемы с безопасностью появляются, как автобусы, кучками. Последний мило называется POODLE, но, в отличие от Heartbleed и Shellshock, он имеет совсем другую природу.
Что было интересно в Heatbleed и Shellshock, так это то, что они вызваны глупыми ошибками. В случае с Heatbleed программист просто не проверял, что запрос на отображение данных не запрашивает больше данных, чем было отправлено. По сути, это была проблема принудительного переполнения буфера, которую мы совершаем с самого начала программирования.
Проблема Shellshock была такой же «традиционной» ошибкой программирования. Проблема заключалась в том, что при определении того, что составляет динамически определяемую функцию, код выполнялся во время определения, и этот код мог быть добавлен злоумышленником. Это старая проблема — «не позволяйте внешнему миру давать вам код для выполнения».
Обе эти ошибки программирования беспокоили тем, что их было легко понять и легко использовать. В результате практически любой мог составить код, который его эксплуатировал, практически в кратчайшие сроки — по сути, это были открытые двери.
Теперь мы подошли к POODLE, и это не такая уж простая ошибка программирования. Этот попахивает настоящей криптовалютой. Он был обнаружен тремя сотрудниками Google и опубликован в блоге по онлайн-безопасности.
Атака состоит из двух компонентов. Первый — это простой переход на более уязвимое шифрование. TLS — это современный метод шифрования, используемый для наиболее безопасного протокола HTTP. Но для работы со старыми серверами клиент может перейти к более старому протоколу SSL 3.0. Это сделано для того, чтобы Интернет продолжал работать со старой технологией, но это также означает, что новый протокол TLS на практике безопасен только на практике, как и старый SSL 3.0, а это, как известно, не лучший проект.
Это дает нам последние три буквы POODLE — Downgraded Legacy Encryption.
Вторая часть атаки использует недостаток шифра RC4, который использует SSL 3.0. Блочный шифр использует заполнение для создания целого числа блоков. Проблема в том, что заполнение произвольно и не покрывается кодом аутентификации сообщения (MAC). Это позволяет злоумышленнику изменить заполнение и заставить сервер попытаться декодировать сообщение.
Конечно, чтобы изменить заполнение, злоумышленник должен быть «посредником», способным перехватывать пакеты данных, идущие от клиента, изменять их и пересылать на сервер, как если бы они исходили от клиента. Само по себе этого довольно сложно достичь, поэтому атака переводится из категории «легко» в категорию «действительно довольно сложно».
Фактическая атака также использует тот факт, что блок с L байтами заполнения всегда заканчивается байтом значения L-1. Если сообщение содержит полный блок заполнения в конце и если он заменен зашифрованным блоком из предыдущего сообщения в том же потоке, то сервер примет все сообщение целиком, если расшифрованный блок, подвергнутый XOR с предыдущим блоком, имеет L-1. в качестве окончательного значения — остальная часть блока должна быть заполнена, поэтому серверу все равно, что это такое.
В большинстве случаев сервер отклоняет сообщение, но в среднем один раз из 256 запросов все будет работать правильно, и сервер примет сообщение, а злоумышленник узнает значение последнего байта в блоке.
Это дает нам первые буквы POODLE, которые теперь означают Padding Oracle On Downgraded Legacy Encryption.
Перемещая сообщение, злоумышленник может декодировать каждый байт, помещая его в конец блока заполнения.
Предлагаемые решения в основном заключаются в отключении SSL 3.0, и это то, что, например, сделал Google.
Однако это не уязвимость системы безопасности «открытых дверей». Создание кода атаки, использующего Heartbeat или Shellshock, не было ракетостроением. POODLE больше похоже на ракетостроение. Это также требует успешной атаки типа «злоумышленник посередине», что, как утверждает Крейг Янг, исследователь безопасности из Tripwire, тоже непросто:
«В общем, злоумышленник должен уже иметь значительный контроль над клиентом жертвы и сетью, соединяющей жертву с сервером. В этой контролируемой среде злоумышленник может манипулировать записями SSL и использовать ответ сервера, чтобы указать, было ли сообщение читаемым. Каждый раз, когда сервер принимает сообщение, злоумышленник может расшифровать еще один байт из определенного места в запросе. Контролируя путь и тело запроса, потребуется не более 256 попыток манипуляции для каждого байта, который злоумышленник хочет расшифровать. атака идеальна для перехвата аутентифицированных HTTP-сессий, хотя маловероятно, что кто-либо, кроме национального шпионского агентства или поставщика телекоммуникационных услуг, будет иметь средства для проведения атаки ».
Фотография: Б. Шенер.