HTTP/2 protokolli nõrkus, mida kasutati suurimas DDoS-rünnakus

Google on registreerinud suurima DDoS-rünnaku oma infrastruktuuri vastu, mille intensiivsus ulatus 398 miljoni päringuni sekundis. Uus rünnak on 7 korda intensiivsem kui eelmine rekordiline DDoS-rünnak, kus ründajatel õnnestus tekitada voog, mis koosnes 47 miljonist päringust sekundis. Võrdluseks, kogu veebiliiklus on hinnanguliselt 1–3 miljardit päringut sekundis. Lisaks Google'ile puutusid rünnakuga kokku ka ettevõtted Amazon ja Cloudflare. Uue rünnaku võimalus on seotud nõrkuse tuvastamisega HTTP/2 protokollis (CVE-2023-44487), mis võimaldab minimaalsete klientide koormustega suunata serverile tohutul hulgal päringuid.

Uus rünnakutehnika on saanud nimeks "Rapid Reset" ja kasutab ära HTTP/2 protokollisüüte multiplexerimise vahendeid, mis võimaldavad luua päringute voogu juba loodud ühenduse raames, ilma et oleks vaja avada uusi võrguühendusi või oodata pakettide kinnitusretsepti. Haavatavust nähakse kui HTTP/2 protokolli puudujääki, mille spetsifikatsioonis on öeldud, et liiga paljude voogude avamisel tuleks tühistada ainult vood, mis ületavad limiidi, mitte sulgeda kogu võrguühendust.

Sarnaselt varasematele HTTP/2 rünnaku meetoditele luuakse ka uues rünnakus suur hulk vooge ühe ühenduse raames. Uue rünnaku oluline erinevus seisneb selles, et iga saadetud päringu järel saadetakse raami RST_STREAM lipuga, mis tühistab päringu kohe. Päringu varajane tühistamine võimaldab vältida tagasivoolu kliendi suunas ja ületada olemasolevad HTTP-serverite piirangud maksimaalse voogude arvu osas, mis võivad olla samal ajal avatud ühe HTTP/2 ühenduse raames. Seega ei sõltu uue rünnaku käigus HTTP-serverile edastatavate päringute maht enam päringute saatmise ja vastuse saamise vahepealsetest viivitustest (RTT, round-trip time), vaid sõltub ainult sidekanali läbilaskevõimest.

HTTP/2 protokolli nõrkus, mida kasutati suurimas DDoS-rünnakus

Kuna kliendi poole rünnaku läbiviimiseks piisab lihtsalt päringute saatmisest, saamata vastuseid, saab rünnaku läbi viia minimaalsete kuludega. Näiteks Cloudflare'i poolt registreeritud rünnak, mille maht oli 201 miljonit päringut sekundis, viidi läbi suhteliselt väikese 20 000 arvuti botneti abil. Poolilt serverile on sissetulevate päringute töötlemise kulud oluliselt kõrgemad, hoolimata nende tühistamisest, kuna tuleb teha selliseid toiminguid nagu andmestruktuuride eraldamine uute voogude jaoks, päringu analüüsimine, päise lahtipakkimine ja URL-i sidumine ressursiga. Tagasi pöördumiste rünnaku puhul võib rünnak levida taustsüsteemidesse, kuna proksil võib õnnestuda suunata päring taustsüsteemile enne RST_STREAM'i kaadri töötlemist.

Rünnakut saab teostada ainult haavatavates serverites, mis toetavad HTTP/2 (haavatavuse kontrollimise skript serverites, rünnaku teostamise tööriistad). HTTP/3 rünnakute kohta ei ole veel registreeritud ja nende teostamise võimalust pole täielikult analüüsitud, kuid Google'i esindajad soovitavad arendajatel. serverite HTTP/3 rakendustes tuleks lisada kaitsemeetmed, sarnased need, mis on kasutusele võetud HTTP/2 rünnakute tõkestamiseks.

Vulgaarsete haavatavuste staatus ja olemasolevad parandused HTTP-serveritele ja -proksitele:

  • nginx (teade, et haavatavus ei väljendu täielikult nginxis vaikimisi konfiguratsioonis, kuna rünnak jõuab ühenduse taotlemise limiidini (t.e. pärast iga 1000 taotlust ühendus taastatakse). Paranduses on kasutusele võetud lisakaitse taotluste intensiivsuse piiramise kaudu direktiivi „limit_req” abil).
  • HAProxy-s on tõhus kaitse HTTP/2 taotluste ületamise limiidist alates 2018. aastast ja see kehtib alates versioonist 1.9-dev.
  • Apache httpd (loob teatud koormuse httpd-le, kuid see ei laiene tagaplaanile ja on piiratud alates 2016. aastast kehtivate kliendiühenduste piiridega).
  • mod_h2 Apache httpd jaoks.
  • caddy
  • envoy
  • golang (probleem on lahendatud versioonides Go 1.21.3 ja 1.20.10).
  • h2o (patch).
  • grpc-go
  • hyper (haavatavus ei väljendu).
  • 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 (haavatavuse all on http-server ASP.NET Core Kestrel).
  • 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 harus 9.2.x).

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster