A Google a világ legnagyobb DDoS-támadását észlelte, amelynek intenzitása másodpercenként 398 millió kérést tett ki. Az új támadás hétszer intenzívebb a korábbi rekord DDoS-támadásnál, amelyben a támadóknak sikerült létrehozniuk egy 47 millió kérés másodpercenkénti áramlást. Összehasonlításképpen, az összes webes forgalmat 1-3 milliárd kérés másodpercenkénti szinten becsülik. A Google mellett az Amazon és a Cloudflare is szembesült a támadással. Az újabb támadás lehetősége egy HTTP/2 protokollban felfedezett sebezhetőséggel (CVE-2023-44487) hozható összefüggésbe, amely lehetővé teszi, hogy minimális terhelés mellett hatalmas számú kérés áramoljon a szerver felé.
Az új támadási technikát "Rapid Reset" néven emlegetik, és a HTTP/2 által biztosított csatorna multiplexelési eszközöket használja, amelyek lehetővé teszik a kérésáram kialakítását már létező kapcsolaton belül, anélkül, hogy új hálózati kapcsolatokat kellene nyitni és anélkül, hogy várni kellene a csomagok érkezésének megerősítésére. A sebezhetőséget a HTTP/2 protokoll hibájaként kezelik, amelynek specifikációjában azt állítják, hogy ha túl sok folyamatot próbálnak megnyitni, csak a limitet túllépő folyamatokat kell érvényteleníteni, de az egész hálózati kapcsolatot nem szabad bezárni.
Hasonlóan a korábban alkalmazott HTTP/2 támadási módszerekhez, az új támadás is nagyszámú folyamatot hoz létre egyetlen kapcsolaton belül. A legfontosabb különbség az új támadásban az, hogy minden egyes elküldött kérés után nem várakozik a válaszra, hanem azonnal egy RST_STREAM flaggel ellátott keretet küld el, amely azonnal érvényteleníti a kérést. A kérés korai érvénytelenítése lehetővé teszi a visszafelé irányuló forgalom megszüntetését a kliens irányába, és megkerüli a HTTP-szervereken meglévő korlátozásokat a maximálisan megnyitható folyamatok számát illetően egyetlen HTTP/2 kapcsolaton belül. Így az új támadás során a HTTP-szervernek küldött kérések mennyisége már nem függ a kérés elküldése és a válasz megérkezése közötti késedelmektől (RTT, round-trip time), és kizárólag a kapcsolat átviteli sebességén múlik.

Mivel a támadáshoz elegendő egyszerűen kéréseket küldeni anélkül, hogy válaszokat kapnánk, a támadás minimális költségekkel végrehajtható. Például a Cloudflare által rögzített 201 millió kérés/másodperc támadást egy viszonylag kisméretű, 20 ezer számítógépből álló botnet segítségével hajtották végre. Az oldalon a szerver a beérkező kérelmek feldolgozási költségei jelentősen magasabbak, még a kérelmek visszavonása esetén is, mivel el kell végezni olyan műveleteket, mint az új adatfolyamokhoz kapcsolódó struktúrák kialakítása, a kérés elemzése, a fejlécek kibővítése és az URL-erőforrásokkal való összevetés. A fordított proxyk ellen irányuló támadás a háttérszerverekre is kiterjedhet, mivel a proxy még a RST_STREAM keret feldolgozása előtt átirányíthatja a kérést a háttérszerverre.
A támadás csak az HTTP/2-t támogató sebezhető szerverek ellen valósítható meg (a sebezhetőség ellenőrzésére szolgáló script, a támadáshoz szükséges eszközkészlet). HTTP/3-sek ellen eddig nem regisztráltak támadásokat, és a lehetőségük teljes körű vizsgálata még nem történt meg, de a Google képviselői javasolják a fejlesztőknek, szerverek hogy az HTTP/3 megvalósítása során védelmi intézkedéseket vezessenek be, hasonlóan az HTTP/2 ellen hatékony védelmiekhez.
A sebezhetőségre való érzékenység és a javítások állapota HTTP-szerverek és proxik esetén:
- nginx (a hirdetés, a magyarázat, hogy a sebezhetőség nem nyilvánul meg teljes mértékben az nginx-ben az alapértelmezett konfigurációjában, mivel a támadás elakad a kapcsolatonkénti kérések számára vonatkozó korláton (tehát minden 1000 kérés után a kapcsolat megszakad). A javításban további védelem került bevezetésre a kérések intenzitásának korlátozása érdekében a "limit_req" direktíván keresztül).
- A HAProxy hatékony védelme a HTTP/2 szálkorlátján való túllépés ellen már 2018 óta elérhető, és az 1.9-dev verzió óta működik.
- Apache httpd (a httpd-n meghatározott terhelés keletkezik, de ez nem terjed ki a háttérszerverekre, és a 2016 óta érvényben lévő klienskapcsolati korlátokra korlátozódik).
- mod_h2 Apache httpd-hez.
- caddy
- envoy
- golang (a probléma a Go 1.21.3 és 1.20.10 verzióiban megoldásra került).
- h2o (javítás).
- grpc-go
- hyper (a sebezhetőség nem nyilvánul meg).
- jetty (javítva a 12.0.2, 11.0.17, 10.0.17 és 9.4.53.v20231009 verziókban).
- netty
- nghttp2 (javítva az 1.57.0 verzióban).
- Facebook proxygen
- .NET és ASP.NET Core (a sebezhetőség a http-szerver ASP.NET Core Kestrel esetében van jelen).
- Node.js
- proxygen
- swift-nio-http2 (javítva az 1.28.0 verzióban).
- Apache Tomcat (javított a verziókban 11.0.0-M12, 10.1.14, 9.0.81, 8.5.94).
- Apache Traffic Server (javított a 9.2.x ágon).
Forrás: opennet.ru
