Добавить в корзинуПозвонить
Найти в Дзене
RebelTech

В крупномасштабной DDoS-атаке была использована уязвимость в протоколе HTTP/2.

Компания Google сообщает о регистрации мощнейшей DDoS-атаки на свою инфраструктуру, которая была характеризована интенсивностью в 398 миллионов запросов в секунду. Вместе с Google, компании Amazon и Сloudflare также столкнулись с атаками, которые генерировали 155 и 201 миллион запросов в секунду соответственно. Это существенно превышает предыдущий рекорд DDoS-атаки, когда злоумышленникам удалось создать поток из 47 миллионов запросов в секунду. Для сравнения, общий объем трафика во всем Интернете оценивается в 1-3 миллиарда запросов в секунду. Атаки осуществлялись с использованием ранее неизвестной уязвимости (CVE-2023-44487) в протоколе HTTP/2, которая позволяет направлять огромный поток запросов на сервер при минимальной нагрузке на клиента. Новый метод атаки получил название "Rapid Reset" и использует возможности мультиплексирования каналов связи, предоставляемые протоколом HTTP/2. Этот метод позволяет формировать поток запросов внутри уже установленного соединения, без необходимост

Компания Google сообщает о регистрации мощнейшей DDoS-атаки на свою инфраструктуру, которая была характеризована интенсивностью в 398 миллионов запросов в секунду. Вместе с Google, компании Amazon и Сloudflare также столкнулись с атаками, которые генерировали 155 и 201 миллион запросов в секунду соответственно. Это существенно превышает предыдущий рекорд DDoS-атаки, когда злоумышленникам удалось создать поток из 47 миллионов запросов в секунду. Для сравнения, общий объем трафика во всем Интернете оценивается в 1-3 миллиарда запросов в секунду. Атаки осуществлялись с использованием ранее неизвестной уязвимости (CVE-2023-44487) в протоколе HTTP/2, которая позволяет направлять огромный поток запросов на сервер при минимальной нагрузке на клиента.

Новый метод атаки получил название "Rapid Reset" и использует возможности мультиплексирования каналов связи, предоставляемые протоколом HTTP/2. Этот метод позволяет формировать поток запросов внутри уже установленного соединения, без необходимости открывать новые сетевые соединения и ожидать подтверждения получения пакетов. Недоработка протокола HTTP/2, заключается в том, что если открывается слишком большое количество потоков, протокол должен аннулировать только те потоки, которые превышают лимит, не закрывая при этом всё сетевое соединение.

В новой атаке на HTTP/2 используется аналогичный метод создания большого числа потоков внутри одного соединения, как это делалось ранее. Однако, отличием является то, что вместо ожидания ответа после отправки каждого запроса, используется кадр с флагом RST_STREAM, который сразу отменяет запрос. Это позволяет избежать обратного трафика к клиенту и обойти ограничения, установленные на максимальное количество одновременно открытых потоков в HTTP/2 соединении на сервере. Таким образом, в новой атаке объем отправляемых запросов на HTTP-сервер уже не зависит от задержек между отправкой и получением ответа (RTT), а только от пропускной способности коммуникационного канала.

Так как достаточно просто отправлять запросы на стороне клиента без ожидания ответов, атака может быть проведена с минимальными затратами. Например, в одной атаке, отмеченной компанией Сloudflare, было отправлено 201 миллион запросов в секунду при помощи относительно небольшого ботнета из 20 тысяч компьютеров. Однако, на стороне сервера затраты на обработку этих запросов значительно выше, даже несмотря на их отмену. Это объясняется тем, что сервер должен выполнить некоторые операции, такие как выделение памяти для новых потоков, разбор запросов, распаковка заголовков и сопоставление URL с ресурсами. В случае атаки на обратные прокси, она может распространиться на бэкенды, так как прокси может успеть перенаправить запрос на бэкенд до обработки сигнала RST_STREAM.

Атаку можно осуществить только на уязвимые серверы, которые поддерживают HTTP/2 (есть скрипт, который проверяет подверженность серверов уязвимости, и инструменты для выполнения атаки). Пока что не было зарегистрировано атак на HTTP/3, и возможности их осуществления полностью не изучены, но сотрудники Google рекомендуют разработчикам серверов включить в реализацию HTTP/3 защитные меры, аналогичные используемым для блокирования атак на HTTP/2.

Подверженность уязвимости и наличие исправлений для HTTP-серверов и прокси:

  • nginx (анонс, пояснение, что уязвимость в полной мере не проявляется в nginx в конфигурации по умолчанию, так как атака упрётся в лимит на число запросов на соединение (т.e. после каждых 1000 запросов соединение будет сбрасываться). В исправлении добавлена дополнительная защита по ограничению интенсивности запросов через директиву "limit_req").
  • В HAProxy эффективная защита от превышения лимита на число потоков HTTP/2 была добавлена ещё в 2018 году и действует начиная с версии 1.9-dev.
  • Apache httpd (создаётся определённая нагрузка на httpd, но она не распространяется на бэкенды и ограничивается действующими с 2016 года лимитами на соединения клиентов).
  • mod_h2 для Apache httpd.
  • golang (проблема устранена в выпусках Go 1.21.3 и 1.20.10).
  • hyper (уязвимость не проявляется).
  • jetty (исправлено в 12.0.2, 11.0.17, 10.0.17 и 9.4.53.v20231009).
  • nghttp2 (исправлено в версии 1.57.0).
  • .NET и ASP.NET Core (уязвимости подвержен http-сервер ASP.NET Core Kestrel).
  • swift-nio-http2 (исправлено в версии 1.28.0).
  • Apache Tomcat (исправлено в версиях 11.0.0-M12, 10.1.14, 9.0.81, 8.5.94).
  • Apache Traffic Server (исправлено в ветке 9.2.x).
  • lighttpd (пока нет информации).