Компания Google регистрира най-голямата DDoS атака срещу своята инфраструктура, с интензивност от 398 милиона заявки в секунда. Новата атака е 7 пъти по-интензивна от предишната рекордна DDoS атака, при която на злонамеренците им е успяло да генерират поток от 47 милиона заявки в секунда. За сравнение, целият трафик в интернет е оценен на ниво от 1-3 милиарда заявки в секунда. Освен Google, с атаката са се сблъскали също и компании като Amazon и Cloudflare. Възможността за нова атака е свързана с откритие на уязвимост в протокола HTTP/2 (CVE-2023-44487), която позволява при минимално натоварване на клиента да се насочват огромни потоци от заявки към сървъра.
Новата техника на атака е наречена «Rapid Reset» и се възползва от възможностите за мултиплексиране на каналите за свързване, предоставени от HTTP/2, за да генерира поток от заявки в рамките на вече установена връзка, без да се отварят нови мрежови връзки и без изчакване за потвърждение на получаването на пакетите. Уязвимостта се разглежда като следствие от недостатъците в протокола HTTP/2, в спецификацията на който е указано, че при опит за отваряне на прекалено много потоци, трябва да се анулират само потоците, надвишаващи лимита, но не и да се затваря цялата мрежова връзка.
По аналогия с предишно използваните методи за атаки на HTTP/2, в новата атака също се генерира голям брой потоци в рамките на едноединствено свързване. Ключовата разлика в новата атака е, че вместо да се изчаква отговор след всяка изпратена заявка, веднага след всяка отправена заявка се изпраща кадър с флага RST_STREAM, който незабавно отмята заявката. Отменянето на заявката в ранна стадия позволява да се избегне обратният трафик към клиента и да се заобиколят съществуващите ограничения на HTTP сървърите за максималния брой потоци, които могат да бъдат отворени едновременно в рамките на едно единствено свързване по HTTP/2. По този начин, в новата атака обемът на заявките, насочвани към HTTP сървъра, спира да зависи от забавянията между изпращането на заявка и получаването на отговор (RTT, време за обратно пътуване) и зависи единствено от пропускателната способност на каналите за свързване.

Тъй като за провеждане на атака от страна на клиента е достатъчно просто да се изпращат заявки, без да се получават отговори, атаката може да се осъществи с минимални разходи. Например, атаката, регистрирана от компанията Cloudflare, с 201 милиона заявки в секунда, е проведена с помощта на относително малък ботнет от 20 хиляди компютъра. От страна на сървър разходите за обработка на входящите заявки са значително по-високи, въпреки че те биват отменени, тъй като е необходимо да се извършват операции като присвояване на структурни данни за новите потоци, разбор на запитването, разопаковане на заглавките и сопоставяне на URL с ресурса. При атака на обратни прокси атаката може да се разпространи към бекендите, тъй като проксито може да успее да пренасочи заявката към бекенда преди обработката на кадъра RST_STREAM.
Атаката може да бъде извършена само срещу уязвими сървъри с подкрепа за HTTP/2 (скрипт за проверка на проявата на уязвимост в сървърите, инструменти за извършване на атака). Понастоящем не са регистрирани атаки срещу HTTP/3, а възможността за извършването им не е напълно анализирана, но представители на Google препоръчват на разработчиците сървъри да добавят в реализацията на HTTP/3 мерки за защита, подобни на тези, реализирани за блокиране на атаки срещу HTTP/2.
Уязвимост и наличието на корекции за HTTP сървъри и проксита:
- nginx (анонс, пояснение, че уязвимостта не се проявява напълно в nginx по подразбиране, тъй като атаката ще се сблъска с лимит на броя заявки на връзка (т.е. след всяки 1000 заявки, връзката ще бъде сблъскана). В корекцията е добавена допълнителна защита срещу интензивността на заявките чрез директива «limit_req»).
- В HAProxy ефективна защита от превишаване на лимита на броя потоци HTTP/2 беше добавена още през 2018 година и действа от версия 1.9-dev.
- Apache httpd (създава се определено натоварване на httpd, но то не се разпространява към бекендите и е ограничено от действащите от 2016 година лимити за клиентски връзки).
- mod_h2 за Apache httpd.
- caddy
- envoy
- golang (проблемът е решен в версиите Go 1.21.3 и 1.20.10).
- h2o (патч).
- grpc-go
- hyper (уязвимостта не се проявява).
- jetty (отстранено в 12.0.2, 11.0.17, 10.0.17 и 9.4.53.v20231009).
- netty
- nghttp2 (отстранено в версия 1.57.0).
- Facebook proxygen
- .NET и ASP.NET Core (уязвимостта засяга http сървъра ASP.NET Core Kestrel).
- Node.js
- proxygen
- 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).
Източник: opennet.ru
