HTTP/2 protokolli haavatavus, mis oli kasutuses suurimas DDoS-rünnakus

Google registreeris oma infrastruktuuri vastu suurima DDoS-rünnaku, mille intensiivsus oli 398 miljonit päringut sekundis. Uus rünnak ületab intensiivsuses eelmise rekordilise DDoS-rünnaku seitsme korra, mille käigus õnnestus küberkurjategijatel genereerida 47 miljonit päringut sekundis. Võrdluseks, kogu veebiliiklus hinnatakse 1-3 miljardi päringu tasemel sekundis. Peale Google'i sattusid rünnaku alla ka ettevõtted Amazon ja Cloudflare. Uue rünnaku võimalus on seotud HTTP/2 protokollis tuvastatud haavatavusega (CVE-2023-44487), mis võimaldab kliendi minimaalsete koormuste korral suunata serverile tohutuid päringute vooge.

Uue rünnaku tehnikat nimetatakse „Rapid Reset” ja see kasutab ära HTTP/2 protokollis olemasolevaid kanalite paljususe vahendeid, mis võimaldavad genereerida päringute voogu juba loodud ühenduse raames, ilma et oleks vaja avada uusi võrguühendusi ja mitte oodata pakettide kätte saamise kinnitusest. Haavatavust käsitletakse kui HTTP/2 protokolli puudujäägi tagajärge, mille spetsifikatsioonis on öeldud, et kui proovida avada liiga suurt arvu vooge, tuleks tühistada ainult need, mis ületavad piirangut, kuid mitte sulgeda kogu võrguühendust.

Sarnaselt varasematele HTTP/2 rünnaku meetoditele tekib uues rünnakus samuti suur hulk vooge ühe ühenduse raames. Uue rünnaku võtmeerinevus on see, et iga saadetud päringu järel saadetakse kohe RST_STREAM lipuga raami, mis tühistab päringu. Päringu tühistamine varases etapis aitab vältida tagasiliikuvate andmete teed kliendile ja mööduda HTTP-serveritel esinevatest piirangutest, mis kehtivad samaaegselt avatud voogude maksimaalsest arvust HTTP/2 raames. Seega ei sõltu uues rünnakus HTTP-serverile suunatud päringute maht enam päringu saatmise ja vastuse vastuvõtmise vaheajast (RTT, round-trip time), vaid sõltub ainult sidekanali läbilaskevõimest.

HTTP/2 protokolli haavatavus, mis oli kasutuses suurimas DDoS-rünnakus

Kuna kliendi poolel rünnakuks piisab lihtsalt päringute saatmisest, ilma vastuseid saamata, saab rünnakut teostada minimaalsete kuludega. Näiteks Cloudflare'i poolt fikseeritud rünnak 201 miljoni päringu sekundis viidi läbi suhteliselt väikese 20 000 arvuti botneti abil. Kliendi poolel serverid kulu saabuvate päringute töötlemiseks on oluliselt suurem, vaatamata nende tühistamisele, kuna tuleb teostada selliseid toiminguid nagu andmestruktuuride eraldamine uute voogude jaoks, päringu analüüs, pealkirja lahtipakkimine ja URL-i vastavus ressurssidega. Tagasi pööratud prokside ründamisel võib rünnak levida tagapaneelidele, kuna proksi võib jõuda suunata päringu tagapaneelile enne RST_STREAM'i raami töötlemist.

Rünnakut saab teostada ainult haavatavatele serveritele, mis toetavad HTTP/2 (skripti kontrollimiseks, haavatavuste kinnitamiseks, rünnaku teostamiseks). Hetkel pole HTTP/3 rünnakute kohta mingeid fikseerimisi ja nende teostamise võimalust pole täielikult analüüsitud, kuid Google'i esindajad soovitavad arendajatel serverid lisada HTTP/3 rakendustesse kaitsemeetmed, mis on sarnased HTTP/2 rünnakute blokeerimiseks rakendatutele.

Haavatavus ja paranduste olemasolu HTTP-serverite ja prokside jaoks:

  • nginx (teade, selgitus, et haavatavus ei avaldu täielikult nginxis vaikimisi konfiguratsioonis, kuna rünnak põrkub ühenduse päringute arvu piiranguga (drt. pärast iga 1000 päringut ühendus katkestatakse). Parandusse on lisatud täiendav kaitse päringute intensiivsuse piiramiseks direktiivi „limit_req“ kaudu).
  • HAProxy-s on efektiivne kaitse HTTP/2 voogude arvu ületamise vastu lisatud juba 2018. aastal ja see kehtib alates versioonist 1.9-dev.
  • Apache httpd (tekitatakse teatav koormus httpd-le, kuid see ei laiene tagapaneelidele ja piiratakse alates 2016. aastast kehtivate klientide ühenduse piirangutega).
  • mod_h2 Apache httpd jaoks.
  • caddy
  • envoy
  • golang (probleem lahendatud Go väljaannetes 1.21.3 ja 1.20.10).
  • h2o (patš).
  • grpc-go
  • hyper (haavatavus ei avaldu).
  • jetty (parandatud versioonides 12.0.2, 11.0.17, 10.0.17 ja 9.4.53.v20231009).
  • netty
  • nghttp2 (parandatud versioonis 1.57.0).
  • Facebook proxygen
  • .NET ja ASP.NET Core (haavatavuseks on ASP.NET Core Kestrel http-server).
  • Node.js
  • proxygen
  • swift-nio-http2 (parandatud versioonis 1.28.0).
  • Apache Tomcat (parandatud versioonides 11.0.0-M12, 10.1.14, 9.0.81, 8.5.94).
  • Apache Traffic Server (parandatud versioonis 9.2.x).

Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster