+− THE DAILY DIFFdev & AI news
SHIP IT

Regex je srušio Cloudflare. 27 minuta.

2.

2. srpnja 2019., 13:42 UTC: jedno novo pravilo za Cloudflareov vatrozid web aplikacija počinje se primjenjivati u 180+ gradova za otprilike dvije sekunde. To je XSS pravilo u simulacijskom načinu rada, tako da ništa ne blokira, ali i dalje se izvodi pri svakom zahtjevu i završava s .*(?:.*=.*). PCRE se vraća unatrag, svaka CPU jezgra koja opslužuje HTTP doseže 100%, a svaka Cloudflare-posredovana stranica vraća 502 tijekom 27 minuta; promet pada 82%. Prekidač za gašenje nalazi se iza Cloudflare Accessa, koji se nalazi iza Cloudflarea. Postmortem, iz Cloudflareovog vlastitog izvješća: CPU zaštita uklonjena tjednima ranije u refaktoriranju namijenjenom uštedi CPU-a, procedura koja je omogućila bilo kojem pravilu da preskoči fazu testiranja, mehanizam bez jamstva složenosti, 11 uzroka i 7 popravaka. Presuda o popravku: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Što ovaj video pokriva

  • 13:31–13:42 UTC: PR spojen, CI zeleno (nema CPU testa), Quicksilver gura pravilo u 180+ gradova; WAF pravila preskaču DOG → PIG → Canary faze
  • 13:45–14:07: prva stranica; CPU 100% globalno, promet -82%, 502 posvuda; unutarnja kontrolna ploča je iza Cloudflare Accessa, koji je isključen; neki akreditivi su istekli; rijetko vježban zaobilazni put
  • 14:07–14:09: globalno prekidanje WAF-a; promet i CPU normalni nakon 27 minuta; 14:52 WAF se vraća bez pravila
  • 2. srpnja (15:50 UTC) i 12. srpnja: Cloudflare objavljuje bilješku istog dana i cjelovitu postmortem analizu; CPU zaštita ponovno dodana, 3.868 pravila ponovno pročitana, fazirana implementacija, prelazak na regex mehanizam s linearnim vremenom

Prevedeni transkript

Prevedeno iz izvornog engleskog pripovijedanja. Dostupni zvuk i titlovi kontroliraju se putem YouTubea.

0:00 Jedan regularni izraz se odjednom aktivira na svakom Cloudflare serveru, i sljedećih dvadeset i sedam minuta stranice iza njega prikazuju 502 stranicu, što je, za vatrozid, najstroža moguća postavka. 2. srpnja 2019., 13:42 UTC. Cloudflare objavljuje unutar dva sata: nije napad, loša implementacija, promet smanjen za 82 posto. Deset dana kasnije CTO John Graham-Cumming objavljuje cjelovitu postmortem analizu, uključujući regex, a Hacker News mu daje 698 bodova,

0:26 što je za prekid rada stojeće ovacije. Kako se to događa, zašto je to moguće i tko je zapravo kriv. Ovo je The Daily Diff, postmortem. 13:31. Spaja se zahtjev za povlačenje: jedno novo pravilo vatrozida protiv skriptiranja na više lokacija, u simulacijskom načinu, tako da ništa ne blokira. 13:37, testovi prolaze; nijedan ne mjeri CPU. 13:42, pravilo se šalje u 180 gradova u dvije sekunde, jer WAF pravila preskaču faze pas, svinja i kanarinac koje dobivaju druga izdanja.

0:54 13:45, prva stranica. 13:49, Hacker News ima temu o statusnoj stranici, koja još uvijek kaže da su svi sustavi operativni. Pravilo završava s točka-zvijezda, točka-zvijezda, jednako, točka-zvijezda: bilo što, zatim bilo što, zatim znak jednakosti. PCRE pogađa pohlepno, ne uspijeva i vraća se kroz svaki drugi razdjelnik. x jednako x traje 23 koraka. Dvadeset x-ova nakon znaka jednakosti: 555.

1:15 Dvadeset x-ova, bez znaka jednakosti: 4.067 koraka da se ništa ne pronađe. Pokrenite to pri svakom zahtjevu i svaka jezgra je na sto posto, temeljito ne radeći ništa. Dva čuvara su to trebala uhvatiti. Ograničenje CPU-a na pravilima je greškom uklonjeno tjednima ranije, u refaktoriranju namijenjenom da WAF koristi manje CPU-a. A procedura dopušta bilo kojem pravilu da preskoči fazu testiranja, jer pravila postoje da zaustave stvarne napade; ovaj nije bio hitan, a svejedno je otišao globalno.

1:37 14:00, WAF je identificiran; nema napada. 14:02, netko predlaže globalno prekidanje: jedna komponenta, isključena, globalno. Prekidač je iza Cloudflare Accessa. Cloudflare Access je iza Cloudflarea. Neki akreditivi su istekli zbog neuporabe, pa najbrža mreža na internetu provodi pet minuta na zaobilaznici koju nitko nije vježbao. 14:07, ubojstvo. 14:09, promet normalan. git blame: implementacija s jednom brzinom, globalna; CPU zaštita refaktorirana

2:04 slučajno; regex mehanizam bez gornje granice. Nije inženjer koji je napisao pravilo: postmortem navodi jedanaest uzroka i ne imenuje nikoga. Opseg eksplozije: 27 minuta, 82 posto prometa, 100 posto CPU-a na svakoj jezgri, u svakom gradu. Nadzorna ploča i API nalaze se iza istog ruba, tako da korisnici čak ne mogu isključiti To isključeno. Hacker News, pod postmortemom: imali su jedan problem, koristili su regularni izraz, sada ih imaju dva. Stara šala. Još se kompajlira.

2:28 Presuda, postmortem: SHIP IT. CPU zaštita je vraćena, svih 3.868 pravila se ručno pregledavaju, pravila prolaze kroz fazu testiranja, a mehanizam se prebacuje na onaj s linearnim vremenom jamstva, objavljen od Kena Thompsona 1968. godine. Ponedjeljak: nema točka-zvijezda točka-zvijezda u ničemu što se pokreće po zahtjevu, i držite prekidač za gašenje dalje od stvari koju ubija. Pošaljite mi incident o kojem još uvijek ne smijete govoriti, u komentarima, ili na the daily diff dot dev.

2:53 I to je razlika za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.

Izvori

  1. John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
  2. Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
  3. Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
  4. Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
  5. Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
  6. Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
  7. Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
  8. TechCrunch, Jul 2, 2019techcrunch.com

Povezani videozapisi