Družba Google je zabeležila največji DDoS napad na svojo infrastrukturo, katerega intenzivnost je dosegla 398 milijonov zahtevkov na sekundo. Nov napad je 7-krat močnejši od prejšnjega rekorda DDoS napada, pri katerem so zločinci uspeli ustvariti tok 47 milijonov zahtevkov na sekundo. Za primerjavo celoten promet na spletu ocenjujejo na ravni 1-3 milijarde zahtevkov na sekundo. Poleg Google so napadu tudi nasprotovale družbe Amazon in Cloudflare. Možnost izvedbe novega napada je povezana z odkrito ranljivostjo v protokolu HTTP/2 (CVE-2023-44487), ki omogoča, da ob minimalnem obremenjevanju stranke pošljejo ogromen tok zahtevkov na strežnik.
Nova tehnika napada nosi ime „Rapid Reset“ in izkorišča to, da sredstva za multiplikacijo kanalov, ki jih ponuja HTTP/2, omogočajo oblikovanje toka zahtevkov v okviru že vzpostavljenega povezovanja, brez odpiranja novih omrežnih povezav in brez čakanja na potrditev prejetja paketov. Ranljivost se obravnava kot posledica nepravilnosti protokola HTTP/2, v specifikaciji katerega je navedeno, da ob poskusu odpiranja prevelikega števila tokov nalaga, da se prekličejo le tisti tokovi, ki presegajo omejitev, vendar se ne zapre celotna omrežna povezava.
Na podoben način, kot so se prej izvajale metode napadov na HTTP/2, se v novem napadu prav tako ustvarja veliko število tokov v okviru ene povezave. Ključna razlika novega napada je, da namesto da bi čakali na odgovor, takoj za vsakim poslanim zahtevkom pošljemo okvir z zastavico RST_STREAM, ki takoj prekliče zahtevek. Preklic zahtevka v zgodnji fazi omogoča, da se izognemo povratnemu prometu proti stranki in obidemo omejitve, ki jih imajo HTTP strežniki glede največjega možnega števila tokov, ki so hkrati odprti v okviru ene povezave preko HTTP/2. Tako se v novem napadu obseg zahtevkov, poslanih HTTP strežniku, neha odvisiti od zamud med pošiljanjem zahtevka in prejemanjem odgovora (RTT, round-trip time) in se omeji samo na propustnost komunikacijskega kanala.

Ker karena napada na strani klijenta zahtevaju samo slanje zahteva bez očekivanja odgovora, napad može biti sproveden uz minimalne troškove. Na primer, napad zabeležen od strane kompanije Cloudflare od 201 miliona zahteva u sekundi bio je sproveden korišćenjem relativno malog botneta od 20.000 računara. Na strani strežnika troškovi obrade dolaznih zahteva su znatno viši, uprkos njihovom odbijanju, jer je potrebno obaviti operacije poput alokacije strukturiranih podataka za nove tokove, analizu zahteva, pakovanje zaglavlja i usklađivanje URL-a sa resursom. Kada je napad usmeren na povratne proksije, napad može da se proširi na backend, jer proksi može da stigne da preusmeri zahtev na backend pre nego što obradi okvir RST_STREAM.
Napad može biti izveden samo na ranjive servere koji podržavaju HTTP/2 (skripta za proveru manifestacije ranjivosti na serverima, alat za izvođenje napada). Do sada nisu zabeleženi napadi na HTTP/3, a mogućnost njihova izvođenja nije potpuno analizirana, ali predstavnici Google-a preporučuju programerima strežnikov da dodaju mere zaštite u implementaciji HTTP/3, slične onima sprovedenim za blokiranje napada na HTTP/2.
Podložnost ranjivosti i dostupnost ispravki za HTTP-servere i proksije:
- nginx (najava, objašnjenje da se ranjivost u potpunosti ne manifestuje u nginx-u sa podrazumevanjem, jer napad udari na limit broja zahteva po konekciji (tj. nakon svake 1000 zahteva veza će biti otkazana). U ispravci je dodata dodatna zaštita za ograničenje intenziteta zahteva putem direktive „limit_req“).
- U HAProxy je efektivna zaštita od prekoračenja limita za broj tokova HTTP/2 dodata već 2018. godine i važi od verzije 1.9-dev.
- Apache httpd (stvara se određeno opterećenje na httpd, ali se ono ne prenosi na backende i ograničava na aktivne limite na konekcije klijenata od 2016. godine).
- mod_h2 za Apache httpd.
- caddy
- envoy
- golang (problem je rešen u izdanjima Go 1.21.3 i 1.20.10).
- h2o (zakrpa).
- grpc-go
- hyper (ranjivost se ne manifestuje).
- jetty (ispravljeno u 12.0.2, 11.0.17, 10.0.17 i 9.4.53.v20231009).
- netty
- nghttp2 (ispravljeno u verziji 1.57.0).
- Facebook proxygen
- .NET i ASP.NET Core (ranjivosti je podložan http-server ASP.NET Core Kestrel).
- Node.js
- proxygen
- swift-nio-http2 (ispravljeno u verziji 1.28.0).
- Apache Tomcat (odpravljeno v različicah 11.0.0-M12, 10.1.14, 9.0.81, 8.5.94).
- Apache Traffic Server (odpravljeno v veji 9.2.x).
Izvor: opennet.ru
