Google har registreret det største DDoS-angreb på sin infrastruktur, med en intensitet på 398 millioner anmodninger per sekund. Det nye angreb er 7 gange mere intenst end det tidligere rekordstore DDoS-angreb, hvor angriberne formåede at generere en strøm af 47 millioner anmodninger per sekund. Til sammenligning vurderes den samlede trafik på hele internettet at være 1-3 milliarder anmodninger per sekund. Udover Google har også Amazon og Cloudflare været udsat for angrebet. Muligheden for et nyt angreb er relateret til en sårbarhed i HTTP/2-protokollen (CVE-2023-44487), som gør det muligt at sende en enorm mængde anmodninger til serveren med minimal belastning på klienten.
Den nye angrebsteknik er kaldet „Rapid Reset“ og udnytter, at de multiplexeringsevner, der tilbydes i HTTP/2, muliggør dannelse af en strøm af anmodninger inden for allerede etablerede forbindelser, uden at åbne nye netværksforbindelser og uden at vente på bekræftelse af modtagelse af pakker. Sårbarheden betragtes som et resultat af mangler i HTTP/2-protokollen, i hvis specifikation det angives, at ved forsøg på at åbne for mange strømme, skal kun de strømme, der overskrider grænsen, annulleres, men hele netværksforbindelsen må ikke lukkes.
På samme måde som tidligere anvendte metoder til at udføre angreb på HTTP/2 skabes der også i det nye angreb et stort antal strømme inden for én forbindelse. Den væsentlige forskel ved det nye angreb er, at i stedet for at vente på et svar, sendes der et frame med RST_STREAM-flaget efter hver sendt anmodning, som øjeblikkeligt annullerer anmodningen. Annuleringen af anmodningen på et tidligt stadium gør det muligt at undgå omvendt trafik mod klienten og omgå de begrænsninger, der er til stede på HTTP-servere for det maksimale antal strømme, der samtidigt kan åbnes i én forbindelse over HTTP/2. Dermed holder mængden af anmodninger, der sendes til HTTP-serveren, op med at afhænge af forsinkelserne mellem afsendelse af anmodningen og modtagelse af svaret (RTT, round-trip time) og er kun begrænset af båndbredden i forbindelsen.

Da angreb på klientsiden blot kræver at sende anmodninger uden at modtage svar, kan angrebet gennemføres med minimale omkostninger. For eksempel blev et angreb registreret af Cloudflare med 201 millioner anmodninger pr. sekund udført af en relativt lille botnet bestående af 20.000 computere. På klientsiden server er omkostningerne ved behandling af indkommende anmodninger væsentligt højere, selvom de annulleres, da det er nødvendigt at udføre operationer som tildeling af datakonstruktioner til nye strømme, parsing af anmodningen, udpakning af headeren og matchning af URL med ressourcen. Under angreb på omvendte proxyer kan angrebet sprede sig til backends, da proxyen kan nå at omdirigere anmodningen til backend inden behandlingen af RST_STREAM-rammen.
Angrebet kan kun udføres på sårbare servere, der understøtter HTTP/2 (et script til at tjekke for sårbarhed i servere, værktøjer til at udføre angrebet). Der er endnu ikke registreret angreb på HTTP/3, og muligheden for sådanne angreb er ikke fuldt ud analyseret, men repræsentanter fra Google anbefaler udviklere servere at tilføje beskyttelsesforanstaltninger til implementeringen af HTTP/3, der ligner dem, der er implementeret for at blokere angreb på HTTP/2.
Sårbarhedens påvirkning og tilgængeligheden af rettelser for HTTP-servere og proxyer:
- nginx (annoncering, forklaring på at sårbarheden ikke fuldt ud manifesterer sig i nginx med standardkonfiguration, da angrebet vil ramme grænsen for antallet af anmodninger pr. forbindelse (dvs. efter hver 1.000 anmodninger vil forbindelsen blive nulstillet). Der er tilføjet yderligere beskyttelse mod intensitet af anmodninger gennem direktivet "limit_req").
- I HAProxy er effektiv beskyttelse mod overskridelse af grænsen for antallet af HTTP/2-strømme blevet tilføjet allerede i 2018 og gælder fra version 1.9-dev.
- Apache httpd (der skabes en vis belastning på httpd, men den spreder sig ikke til backends og begrænses af gældende grænser for klientforbindelser siden 2016).
- mod_h2 til Apache httpd.
- caddy
- envoy
- golang (problemet er løst i Go 1.21.3 og 1.20.10).
- h2o (patch).
- grpc-go
- hyper (sårbarheden manifesterer sig ikke).
- jetty (rettet i version 12.0.2, 11.0.17, 10.0.17 og 9.4.53.v20231009).
- netty
- nghttp2 (rettet i version 1.57.0).
- Facebook proxygen
- .NET og ASP.NET Core (sårbarheden påvirker HTTP-serveren ASP.NET Core Kestrel).
- Node.js
- proxygen
- swift-nio-http2 (rettet i version 1.28.0).
- Apache Tomcat (rettet i versionerne 11.0.0-M12, 10.1.14, 9.0.81, 8.5.94).
- Apache Traffic Server (rettet i version 9.2.x).
Kilde: opennet.ru
