+− THE DAILY DIFFdev & AI news
SHIP IT

Regex je oborio Cloudflare. 27 minuta.

2.

2. jul 2019, 13:42 UTC: jedno novo pravilo za Cloudflare-ov Web Application Firewall kreće uživo u preko 180 gradova za oko dve sekunde. To je XSS pravilo u simulacionom režimu, tako da ne blokira ništa, ali se i dalje pokreće pri svakom zahtevu, a završava se sa .*(?:.*=.*). PCRE se vraća unazad, svako CPU jezgro koje opslužuje HTTP dostiže 100 %, i svaki Cloudflare-proksirani sajt vraća 502 tokom 27 minuta; saobraćaj opada za 82 %. Prekidač za isključivanje se nalazi iza Cloudflare Access-a, koji se nalazi iza Cloudflare-a. Postmortem, iz Cloudflare-ovog sopstvenog izveštaja: CPU zaštita uklonjena nedeljama ranije u refaktorisanju namenjenom uštedi CPU-a, procedura koja je omogućila da svako pravilo preskoči fazu testiranja, mehanizam bez garancije složenosti, 11 uzroka i 7 popravki. Presuda o popravci: SHIP IT.

Pročitajte pisano izdanje (engleski) ↗

Šta ovaj video pokriva

  • 13:31–13:42 UTC: PR spojen, CI zelen (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 % širom sveta, saobraćaj −82 %, 502s svuda; interni kontrolni panel je iza Cloudflare Access-a, koji je u kvaru; neki akreditivi su istekli; retko uvežbavan zaobilazni put
  • 14:07–14:09: globalno WAF isključivanje; saobraćaj i CPU normalni nakon 27 minuta; 14:52 WAF ponovo radi minus to pravilo
  • 2. jul (15:50 UTC) i 12. jul: Cloudflare objavljuje belešku istog dana i kompletan postmortem; CPU zaštita ponovo dodata, 3.868 pravila ponovo pročitano, fazna implementacija, prelazak na regex mehanizam linearnog vremena

Preveden transkript

Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.

0:00 Jedan regularni izraz se istovremeno pokreće na svakom Cloudflare serveru, i sledećih dvadeset sedam minuta sajtovi iza njega su stranica 502, što je, za zaštitni zid, najstrože moguće podešavanje. 2. jul 2019, 13:42 UTC. Cloudflare objavljuje u roku od dva sata: nije napad, loše implementiranje, saobraćaj smanjen za 82 procenta. Deset dana kasnije CTO John Graham-Cumming objavljuje kompletan postmortem, uključen regex, i Hacker News mu daje 698 poena,

0:26 što je za prekid rada ovacija. Kako se to dogodilo, 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 zaštitnog zida protiv cross-site skriptovanja, u simulacionom režimu, tako da ne blokira ništa. 13:37, testovi prolaze; nijedan ne meri CPU. 13:42, pravilo se šalje u 180 gradova za dve sekunde, jer WAF pravila preskaču faze psa, svinje i kanarinca koje druge verzije dobijaju.

0:54 13:45, prva stranica. 13:49, Hacker News ima temu o statusnoj stranici, koja i dalje kaže da su svi sistemi u funkciji. Pravilo se završava sa tačka-zvezda, tačka-zvezda, jednako, tačka-zvezda: bilo šta, onda bilo šta, pa znak jednakosti. PCRE pogađa pohlepno, ne uspeva i vraća se kroz svaki drugi razdelnik. 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 zahtevu i svako jezgro je na sto posto, ne radeći ništa, temeljno. Dva čuvara su to trebala uhvatiti. Ograničenje CPU-a na pravila je greškom uklonjeno nedeljama ranije, u refaktorisanju namenjenom da WAF koristi manje CPU-a. A procedura dozvoljava da bilo koje pravilo preskoči testiranje, jer pravila postoje da zaustave stvarne napade; ovo nije bila hitna situacija, a ipak je postalo globalno.

1:37 14:00, WAF je identifikovan; nema napada. 14:02, neko predlaže globalno isključivanje: jedna komponenta, isključena, širom sveta. Prekidač je iza Cloudflare Access-a. 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 uvežbao. 14:07, isključi. 14:09, saobraćaj normalan. git blame: implementacija sa 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 ne imenuje nikoga. Radijus eksplozije: 27 minuta, 82 procenta saobraćaja, 100 procenata CPU-a na svakom jezgru, u svakom gradu. Kontrolna tabla i API se nalaze iza iste ivice, tako da korisnici ne mogu čak ni da ga isključe, Hacker News, ispod postmortema: imali su jedan problem, koristili regularni izraz, sada imaju dva. Stara šala. I dalje se kompajlira.

2:28 Presuda, postmortem: SHIP IT. CPU zaštita je vraćena, svih 3.868 pravila se ručno čitaju, pravila prolaze kroz testiranje, a mehanizam prelazi na onaj sa linearnim vremenom garancijama, objavljen od strane Ken Thompsona 1968. Ponedeljak: nema tačka-zvezda tačka-zvezda u bilo čemu što se pokreće po zahtevu, i držati prekidač za isključivanje van onoga što ubija. Pošaljite mi incident o kome i dalje ne smete da govorite, u komentarima, ili na the daily diff dot dev.

2:53 I to je razlika za danas. Ja sam Niko iz Axrisi-ja. 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 video snimci