+− THE DAILY DIFFdev & AI news
SHIP IT

Regex je srušio Cloudflare. 27 minuta.

2.

2. jula 2019, 13:42 UTC: jedno novo pravilo za Cloudflare-ov Web Application Firewall postaje aktivno u više od 180 gradova za oko dvije sekunde. To je XSS pravilo u simulacionom režimu, tako da ništa ne blokira, ali se ipak pokreće na svakom zahtjevu, a završava se sa .*(?:.*=.*). PCRE se vraća unazad, svako CPU jezgro koje opslužuje HTTP dostiže 100%, i svaka stranica koju je proxy-ovao Cloudflare vraća 502 tokom 27 minuta; promet pada za 82%. Prekidač za isključenje se nalazi iza Cloudflare Access-a, koji se nalazi iza Cloudflare-a. Postmortem, iz Cloudflare-ovog vlastitog izvještaja: CPU zaštita uklonjena sedmicama ranije u refaktorisanju namijenjenom za uštedu CPU-a, procedura koja je omogućila bilo kojem pravilu da preskoči fazu testiranja, mehanizam bez garancije složenosti, 11 uzroka i 7 rješenja. Presuda o popravci: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Šta ovaj video pokriva

  • 13:31–13:42 UTC: PR spojen, CI zelen (bez CPU testa), Quicksilver gura pravilo u više od 180 gradova; WAF pravila preskaču DOG → PIG → Canary faze
  • 13:45–14:07: prva stranica; CPU 100% širom svijeta, promet -82%, 502s svuda; interna kontrolna ploča je iza Cloudflare Accessa, koji je isključen; neki akreditivi su istekli; rijetko vježbani zaobilazni put
  • 14:07–14:09: globalno WAF isključenje; promet i CPU normalni nakon 27 minuta; 14:52 WAF se vraća bez pravila
  • 2. jula (15:50 UTC) i 12. jula: Cloudflare objavljuje bilješku istog dana i potpuni postmortem; CPU zaštita ponovo dodana, 3.868 pravila ponovo pročitano, fazna implementacija, prelazak na regex mehanizam s linearnim vremenom

Prevedeni transkript

Prevedeno iz originalne engleske naracije. Dostupan zvuk i titlovi kontroliše YouTube.

0:00 Jedan regularni izraz postaje aktivan na svakom Cloudflare serveru istovremeno, i sljedećih dvadeset sedam minuta stranice iza njega su stranica 502, što je, za firewall, najstroža moguća postavka. 2. jul 2019. godine, 13:42 UTC. Cloudflare objavljuje u roku od dva sata: nije napad, loša implementacija, promet smanjen za 82 posto. Deset dana kasnije tehnički direktor John Graham-Cumming objavljuje potpuni postmortem, 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 ko je zapravo kriv. Ovo je The Daily Diff, postmortem. 13:31. Spaja se pull request: jedno novo pravilo firewall-a protiv cross-site skriptovanja, u simulacijskom modu, tako da ništa ne blokira. 13:37, testovi prolaze; nijedan ne mjeri CPU. 13:42, pravilo se šalje u 180 gradova za 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 stranici statusa, koja i dalje kaže da su svi sistemi operativni. Pravilo završava s tačka-zvijezda, tačka-zvijezda, jednako, tačka-zvijezda: bilo šta, zatim bilo šta, pa znak jednakosti. PCRE pretpostavlja pohlepno, ne uspijeva, i vraća se kroz svaki drugi razdvojeni dio. 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 na svakom zahtjevu i svako jezgro je na sto posto, ne radeći ništa, temeljito. Dva čuvara su to trebala uhvatiti. CPU ograničenje na pravilima je greškom uklonjeno sedmicama ranije, u refaktorisanju namijenjenom da WAF koristi manje CPU-a. A procedura dopušta bilo kojem pravilu da preskoči fazu testiranja, jer pravila postoje da zaustave žive napade; ovaj nije bio hitan, a ipak je otišao globalno.

1:37 14:00, WAF je identificiran; nema napada. 14:02, neko predlaže globalno gašenje: jedna komponenta, isključena, širom svijeta. Prekidač je iza Cloudflare Accessa. Cloudflare Access je iza Cloudflare-a. Neki akreditivi su istekli zbog neupotrebe, tako da najbrža mreža na internetu provodi pet minuta na zaobilaznom putu koji niko nije vježbao. 14:07, ubij. 14:09, promet normalan. git blame: implementacija s jednom brzinom, globalna; CPU zaštita refaktorisana

2:04 greškom; regex mehanizam bez gornje granice. Nije inženjer koji je napisao pravilo: postmortem navodi jedanaest uzroka i nikoga ne imenuje. Radijus eksplozije: 27 minuta, 82 posto prometa, 100 posto CPU-a na svakom jezgru, u svakom gradu. Kontrolna tabla i API nalaze se iza istog ruba, tako da korisnici ne mogu ni isključiti ga. Hacker News, ispod postmortema: imali su jedan problem, koristili su regularni izraz, sada ih imaju dva. Stara šala. Još uvijek se kompajlira.

2:28 Presuda, postmortem: SHIP IT. CPU zaštita je vraćena, svih 3.868 pravila se čitaju ručno, pravila prolaze kroz fazu testiranja, a mehanizam se prebacuje na onaj s linearnim vremenom garancije, objavljen od strane Kena Thompsona 1968. godine. Ponedjeljak: bez tačka-zvijezda tačka-zvijezda u bilo čemu što se pokreće po zahtjevu, i držite prekidač za isključenje podalje 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 diff 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