Атака POODLE (Padding Oracle on Downgraded Legacy Encryption) использует уязвимость в протоколе SSL 3.0 (CVE-2014-3566). Эта уязвимость позволяет злоумышленнику подслушивать коммуникации, зашифрованные с помощью SSLv3. Уязвимость больше не присутствует в протоколе Transport Layer Security (TLS), который является преемником SSL (Secure Socket Layer).
Почему веб-серверы поддерживают старые протоколы? Возможно, администраторы этих серверов хотели убедиться, что пользователи могут обращаться к ним с помощью очень старых браузеров. Однако мы подозреваем, что более вероятно, что на таких серверах используется очень старое серверное программное обеспечение с очень старыми конфигурациями.
Что может сделать злоумышленник с помощью POODLE?
Уязвимость POODLE позволяет злоумышленнику подслушивать зашифрованные сообщения. Это означает, что злоумышленник может украсть передаваемые конфиденциальные данные, например, пароли или куки сеанса, а затем выдать себя за пользователя. Это может привести к очень серьезным последствиям, включая потерю контроля над веб-приложением (например, если злоумышленник выдает себя за администратора).
Атака не очень проста, поскольку для ее успешного проведения необходимо пройти три этапа:
- На первом этапе злоумышленник должен провести успешную атаку «человек посередине» (MITM). Теперь злоумышленник может прослушивать все коммуникации между клиентом и сервером, а также добавлять их (выдавать себя за клиента или сервер). Однако если это защищенное соединение, то связь шифруется с помощью SSL/TLS, поэтому злоумышленник не сможет понять, что именно отправляется.
- На втором этапе злоумышленник должен убедить сервер использовать старый протокол SSL 3.0. Злоумышленник может сделать это путем обрыва соединений - после нескольких таких обрывов сервер попробует использовать более старый протокол, думая, что клиент не может использовать более новый протокол, такой как TLS 1.2. Это называется атакой на понижение протокола или танцем понижения.
- На третьем этапе, когда клиент и сервер общаются по протоколу SSL 3.0, злоумышленник может использовать атаку POODLE для расшифровки отдельных частей сообщения и кражи конфиденциальной информации.
- Чтобы убедиться в успехе атаки POODLE, злоумышленник также должен быть способен обманом заставить браузер пользователя запустить JavaScript, например, с помощью социальной инженерии.
Как работает POODLE?
Атака POODLE возможна благодаря нескольким особенностям протокола SSL/TLS. Подробнее о том, как работают эти протоколы, вы можете прочитать в нашей серии статей о SSL/TLS. На данный момент вам достаточно знать, что протокол SSL/TLS позволяет серверу и браузеру использовать наборы различных алгоритмов для шифрования обмена данными - они называются наборами шифров.
Уязвимость POODLE затрагивает наборы шифров, включающие симметричное шифрование вместе с блочными шифрами, например, алгоритмы AES или DES. В таких случаях клиент и сервер сначала договариваются о секретном ключе, используя асимметричное шифрование (закрытый ключ и открытый ключ). Затем все сообщения шифруются симметрично с использованием этого ключа. В случае блочных шифров данные шифруются блоками фиксированной длины, например, 8 или 16 байт.
В наборах шифров, уязвимых к POODLE, также используется цепочка блоков шифра (режим CBC). Это означает, что значение каждого блока зависит от значения предыдущего блока - оно вычисляется с помощью логической операции XOR. Кроме того, в начале добавляется случайный блок данных - он называется вектором инициализации. Это необходимо для того, чтобы каждый раз при шифровании данные выглядели по-разному (а значит, злоумышленник не сможет вычислить их по сходству).
Что такое MAC-Then-Encrypt?
Чтобы понять POODLE, вы должны сначала понять MAC и MAC-then-Encrypt.
Протокол SSL/TLS не только гарантирует конфиденциальность данных. Он также гарантирует, что данные не были подделаны. Например, вы не хотите, чтобы кто-то мог ввести свой собственный номер счета, когда вы пытаетесь перевести деньги между счетами в онлайн-банке.
Чтобы гарантировать, что данные не испорчены, каждый зашифрованный фрагмент данных имеет контрольную сумму - MAC (код аутентификации сообщения). MAC можно вычислить, только если у вас есть ключ шифрования. Если MAC неверен, это означает, что кто-то подделал сообщение.
В протоколе SSL 3.0 используется подход MAC-then-Encrypt. Это означает, что сначала алгоритм вычисляет значение MAC, затем добавляет его в конец данных, а затем шифрует все сообщение, включая подложку.
Что такое вставка?
В блочном шифре все данные должны быть кратны размеру блока. Например, если размер блока равен 8, данные должны иметь размер 64, 80 или 336 байт (кратный 8). Если данные не кратны 8, их необходимо дополнить несущественными данными, чтобы достичь нужной длины.
Большинство реализаций веб-серверов используют следующую технику набивки:
Последний байт последнего блока всегда должен содержать длину прокладки. Это значение представляет собой количество предыдущих байтов, которые добавляются. Например, если добавляется 4 байта, то значение блока будет таким: xx-xx-xx-yy-yy-yy-04 (yy означает добавление). Это требование SSL.
В большинстве реализаций значения всех байтов прокладки равны значению длины. Например, если 4 из 8 байтов имеют прокладку, значение блока будет таким: xx-xx-xx-04-04-04-04.
Если длина данных кратна размеру блока, например 336, то должен быть добавлен дополнительный блок, содержащий только прокладку: 07-07-07-07-07-07-07-07. Это необходимо, поскольку если последний байт не представляет собой набивку, алгоритм не сможет отличить набивку от реальных данных.
Обратите внимание, что SSL не проверяет байты набивки (кроме длины набивки), поэтому, пока последний байт находится между 00 и 07, блок будет принят. Например, блок xx-xx-xx-12-34-56-78-04 будет принят.
Что такое Padding Oracle Attack?
Padding Oracle - это ситуация, когда злоумышленник знает или может догадаться, почему данные, отправленные им на сервер, были отклонены: то ли потому, что набивка была неправильной, то ли потому, что MAC был неверным.
Представьте себе следующую ситуацию:
- Злоумышленник получает данные от браузера и знает, что эти данные содержат пароль. Злоумышленник знает, что это HTTP POST-запрос, и знает, где именно в этом запросе находится пароль.
- Злоумышленник изменяет зашифрованные данные и отправляет их на сервер.
- Сервер отвечает злоумышленнику, что данные неверны. Однако он может ответить с двумя типами ошибок: он может сказать злоумышленнику, что ошиблись в набивке или что ошиблись в MAC. Это делает возможной атаку POODLE.
Padding Oracle используются и для других атак. Некоторые протоколы не отвечают напрямую, а, например, сначала проверяют набивку и только потом проверяют MAC. В таких случаях, если атакующий получает быстрый ответ, это ошибка в набивке, а если ответ занимает немного больше времени, это ошибка MAC.
Анатомия атаки POODLE
Чтобы провести типичную атаку POODLE и украсть куки веб-сессии, злоумышленник делает следующее:
- Злоумышленник обманывает браузер жертвы, заставляя его запустить JavaScript-код, который позволяет злоумышленнику выполнить атаку.
- JavaScript-код злоумышленника обманывает браузер пользователя, заставляя его отправить несколько легитимных запросов на сервер. Эти запросы включают куки сеанса.
- JavaScript-код изменяет URL-адрес соединения (добавляя дополнительные символы) таким образом, чтобы длина данных, отправляемых на сервер, была кратна размеру блока (например, 8). Это означает, что последний блок будет содержать только подложку (см. пояснения выше).
- Злоумышленник знает, в каких блоках данных содержится сессионный cookie. Например, данные могут состоять из 10 блоков, и злоумышленник знает, что третий и четвертый блоки содержат значение cookie сеанса.
- Злоумышленник копирует весь третий блок до последнего и отправляет его на сервер много раз, каждый раз меняя что-то в URL соединения, чтобы MAC был другим.
- Максимум 256 раз сообщение будет принято. Это означает, что последним байтом третьего блока после расшифровки будет число 07, что означает правильное заполнение.
- Теперь злоумышленнику известен расшифрованный последний байт, и он может объединить его с предыдущими блоками с помощью операции XOR, чтобы получить реальный последний байт третьего блока.
- Затем злоумышленник может сделать URL соединения на один байт длиннее и повторить описанные выше действия, чтобы получить следующую часть cookie. А затем повторить все сначала для четвертого блока данных.
- Если длина cookie равна 16, злоумышленник узнает cookie не более чем через 4096 запросов, что займет максимум несколько минут.
Как узнать, уязвим ли ваш веб-сервер к POODLE
Чтобы узнать, уязвим ли ваш веб-сервер к POODLE, достаточно знать, поддерживает ли он SSL 3.0.
Были и старые реализации протокола TLS, которые были уязвимы к POODLE. Однако все современные реализации TLS безопасны.
Обратите внимание, что хотя POODLE - это сетевая уязвимость, она также затрагивает веб-серверы и веб-браузеры.
Как устранить уязвимость POODLE
Чтобы защитить свой сервер от POODLE и BEAST, настройте его на поддержку только TLS 1.2 и никаких старых протоколов. Все старые версии SSL и TLS уже официально устарели, и все современные браузеры, такие как Chrome, Firefox и Internet Explorer, поддерживают TLS 1.2.
Веб-сервер Apache
Отредактируйте директиву SSLProtocol в файле ssl.conf, который обычно находится в /etc/httpd/conf.d/ssl.conf. Например, если у вас есть:
1 | SSLProtocol all |
измените его на:
1 | SSLProtocol TLSv1.2 |
Затем перезапустите httpd.
NGINX
Отредактируйте директиву ssl_protocols в файле nginx.conf. Например, если у вас есть:
1 | ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; |
измените его на:
1 | ssl_protocols TLSv1.2; |
Затем перезапустите nginx.
Microsoft IIS
Чтобы отключить TLS 1.0 в Microsoft IIS, необходимо отредактировать параметры реестра в Microsoft Windows.
- Откройте редактор реестра
- Найдите ключ HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server
- Измените значение DWORD записи Enabled на 0.
- Создайте запись DisabledByDefault и измените ее DWORD-значение на 1.
Повторите описанные выше действия для всех версий SSL и для TLS 1.1.