+− THE DAILY DIFFdev & AI news
SHIP IT

Regulárny výraz odstavil Cloudflare. 27 minút.

2.

2. júla 2019, 13:42 UTC: jedno nové pravidlo pre Web Application Firewall od Cloudflare sa spúšťa vo viac ako 180 mestách za približne dve sekundy. Je to pravidlo XSS v simulačnom režime, takže nič neblokuje, ale stále beží na každej požiadavke a končí sa reťazcom .*(?:.*=.*). PCRE sa vracia späť, každé jadro CPU obsluhujúce požiadavky HTTP dosiahne 100 % a každá stránka s proxy Cloudflare vracia chybu 502 po dobu 27 minút; prevádzka klesá o 82 %. Núdzový vypínač je za Cloudflare Access, ktorý je za Cloudflare. Postmortem, z vlastného zápisu Cloudflare: ochrana CPU odstránená týždne predtým pri refaktorovaní s cieľom ušetriť CPU, postup, ktorý umožnil akémukoľvek pravidlu preskočiť fázu testovania, motor bez záruky zložitosti, 11 príčin a 7 opráv. Verdikt k oprave: SHIP IT.

Prečítajte si písanú edíciu (anglicky) ↗

Čo toto video pokrýva

  • 13:31–13:42 UTC: PR zlúčený, CI zelené (žiadny CPU test), Quicksilver posúva pravidlo do 180+ miest; pravidlá WAF preskakujú fázy DOG → PIG → Canary
  • 13:45–14:07: prvá stránka; CPU 100 % celosvetovo, prevádzka −82 %, všade chyby 502; interný ovládací panel je za Cloudflare Access, ktorý je nefunkčný; niektoré poverenia vypršali; zriedkavo trénovaný obchvat
  • 14:07–14:09: celosvetové ukončenie WAF; prevádzka a CPU normálne po 27 minútach; 14:52 WAF späť mínus pravidlo
  • 2. júl (15:50 UTC) a 12. júl: Cloudflare zverejňuje poznámku z rovnakého dňa a úplnú analýzu incidentu (postmortem); ochrana CPU znovu pridaná, 3 868 pravidiel prečítaných znova, postupné nasadenia, prechod na regex motor s lineárnou časovou zložitosťou

Preložený prepis

Preložené z pôvodného anglického rozprávania. Dostupný zvuk a titulky sú kontrolované službou YouTube.

0:00 Jeden regulárny výraz sa spustí naraz na každom serveri Cloudflare, a počas nasledujúcich dvadsiatich siedmich minút sú stránky za ním chybovou stránkou 502, čo je pre firewall najprísnejšie možné nastavenie. 2. júla 2019, 13:42 UTC. Cloudflare zverejňuje do dvoch hodín: nejde o útok, ale o zlé nasadenie, prevádzka klesla o 82 percent. O desať dní neskôr CTO John Graham-Cumming zverejňuje kompletnú postmortem analýzu, vrátane regulárneho výrazu, a Hacker News jej dáva 698 bodov,

0:26 čo je za výpadok standing ovation. Ako sa to stalo, prečo je to možné a kto za to skutočne nesie vinu. Toto je The Daily Diff, postmortem. 13:31. Žiadosť o zlúčenie sa spojí: jedno nové pravidlo firewallu proti cross-site scriptingu, v simulačnom režime, takže nič neblokuje. 13:37, testy prejdú; žiadny nemeria CPU. 13:42, pravidlo sa nasadí do 180 miest za dve sekundy, pretože pravidlá WAF preskakujú fázy dog, pig a canary, ktoré prechádzajú iné verzie.

0:54 13:45, prvá stránka. 13:49, Hacker News má vlákno o stave stránky, ktorá stále hovorí, že všetky systémy sú v prevádzke. Pravidlo končí bodka-hviezdička, bodka-hviezdička, rovná sa, bodka-hviezdička: čokoľvek, potom čokoľvek, potom znak rovnosti. PCRE háda chamtivo, zlyhá a vracia sa späť cez všetky ostatné rozdelenia. x rovná sa x trvá 23 krokov. Dvadsať x po rovná sa: 555.

1:15 Dvadsať x, žiadny znak rovnosti: 4 067 krokov na nájdenie ničoho. Spustite to na každej požiadavke a každé jadro je na sto percent, robí nič, dôkladne. Dve stráže to mali zachytiť. Limit CPU na pravidlá bol omylom odstránený týždne predtým, pri refaktorovaní, ktorého cieľom bolo, aby WAF používal menej CPU. A postup umožňuje akémukoľvek pravidlu preskočiť fázu testovania, pretože pravidlá existujú na zastavenie živých útokov; tento nebol núdzový a aj tak šiel globálne.

1:37 14:00, WAF je identifikovaný; žiadny útok. 14:02, niekto navrhuje globálne ukončenie: jedna komponenta, vypnutá, celosvetovo. Spínač je za Cloudflare Access. Cloudflare Access je za Cloudflare. Niektoré poverenia vypršali z dôvodu nepoužívania, takže najrýchlejšia sieť na internete strávi päť minút na obchádzkach, ktoré nikto necvičil. 14:07, vypnúť. 14:09, prevádzka normálna. git blame: nasadenie s jednou rýchlosťou, globálne; ochrana CPU refaktorovaná preč

2:04 náhodou; regex motor bez hornej hranice. Nie inžinier, ktorý napísal pravidlo: postmortem uvádza jedenásť príčin a nikoho nemenujú. Rozsah dopadu: 27 minút, 82 percent prevádzky, 100 percent CPU na každom jadre, v každom meste. Dashboard a API sú za rovnakým okrajom, takže zákazníci to nemôžu ani vypnúť. Hacker News, pod postmortem: mali jeden problém, použili regulárny výraz, teraz majú dva. Starý vtip. Stále kompiluje.

2:28 Verdikt, postmortem: SHIP IT. Ochrana CPU je späť, všetkých 3 868 pravidiel sa číta ručne, pravidlá prechádzajú fázou testovania a motor prechádza na motor s lineárnou časovou zárukou, publikovaný Kenom Thompsonom v roku 1968. Pondelok: žiadna bodka-hviezdička bodka-hviezdička v ničom, čo beží na požiadavku, a držte núdzový vypínač mimo veci, ktorú vypína. Pošlite mi incident, o ktorom stále nemáte povolené hovoriť, v komentároch alebo na daily diff dot dev.

2:53 A to je dnešný diff. Som Niko z Axrisi. Zlučujte zodpovedne.

Zdroje

  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

Súvisiace videá