+− THE DAILY DIFFdev & AI news
SHIP IT

Pravilni izraz je pokleknil Cloudflare. 27 minut.

2.

2. julij 2019, 13:42 UTC: novo pravilo za požarni zid spletnih aplikacij Cloudflare zažene v 180+ mestih v približno dveh sekundah. Gre za pravilo XSS v simulacijskem načinu, zato ne blokira ničesar, vendar se še vedno izvaja ob vsaki zahtevi in se konča z .*(?:.*=.*). PCRE se vrača nazaj, vsaka CPU jedra, ki strežejo HTTP, dosežejo 100 %, in vsako spletno mesto, posredovano prek Cloudflare, vrača 502 za 27 minut; promet pade za 82 %. Stikalo za izklop je za Cloudflare Access, ki je za Cloudflare. Postmortem, iz lastnega zapisa Cloudflare: CPU zaščita, odstranjena tedne prej v prenovi, namenjeni varčevanju s CPU, postopek, ki je omogočal, da katero koli pravilo preskoči stopnjo priprave, motor brez garancije kompleksnosti, 11 vzrokov in 7 popravkov. Sodba o popravku: SHIP IT.

Preberi pisno izdajo (angleščina) ↗

Kaj zajema ta videoposnetek

  • 13:31–13:42 UTC: PR združen, CI zelen (brez CPU testa), Quicksilver potisne pravilo v 180+ mest; pravila WAF preskočijo stopnje DOG → PIG → Canary
  • 13:45–14:07: prva stran; CPU 100 % po vsem svetu, promet −82 %, 502s povsod; notranja nadzorna plošča je za Cloudflare Access, ki je nedosegljiv; nekateri podatki za prijavo so potekli; redko vajo, ki jo je treba obiti
  • 14:07–14:09: globalna ukinitev WAF; promet in CPU normalna po 27 minutah; 14:52 WAF nazaj brez pravila
  • 2. julij (15:50 UTC) in 12. julij: Cloudflare objavi obvestilo istega dne in celotni postmortem; CPU zaščita ponovno dodana, 3.868 pravil ponovno prebranih, fazne uvedbe, prehod na regex motor z linearnim časom

Preveden prepis

Prevedeno iz izvirnega angleškega pripovedovanja. Razpoložljivi zvok in podnapisi so nadzorovani s strani YouTuba.

0:00 En regularni izraz se hkrati zažene na vsakem strežniku Cloudflare, in naslednjih sedemindvajset minut so mesta za njim stran 502, kar je za požarni zid najstrožja možna nastavitev. 2. julij 2019, 13:42 UTC. Cloudflare objavi v dveh urah: ni napad, slaba uvedba, promet zmanjšan za 82 odstotkov. Deset dni kasneje CTO John Graham-Cumming objavi celoten postmortem, vključen regex, in Hacker News mu dodeli 698 točk,

0:26 kar je za izpad stoječe ovacije. Kako se zgodi, zakaj je mogoče in kdo je dejansko kriv. To je The Daily Diff, postmortem. 13:31. Zahteva za združitev je sprejeta: eno novo pravilo požarnega zidu proti medmrežnemu skriptiranju, v simulacijskem načinu, tako da ničesar ne blokira. 13:37, testi uspejo; noben ne meri procesorja. 13:42, pravilo se pošlje v 180 mest v dveh sekundah, ker pravila WAF preskočijo faze pes, prašič in kanarček, ki jih dobijo druge izdaje.

0:54 13:45, prva stran. 13:49, Hacker News ima nit o statusni strani, ki še vedno pravi, da vsi sistemi delujejo. Pravilo se konča s pika-zvezdica, pika-zvezdica, enako, pika-zvezdica: karkoli, nato karkoli, nato enačaj. PCRE pohlepno ugiba, ne uspe in se vrača skozi vsak drug razcep. x je enako x traja 23 korakov. Dvajset x-jev za enačajem: 555.

1:15 Dvajset x-jev, brez enačaja: 4.067 korakov, da ne najde ničesar. Zaženite to ob vsaki zahtevi in vsaka jedra so na sto odstotkih, nič ne delajo, temeljito. Dve straži bi to morali ujeti. Omejitev procesorja pri pravilih je bila pomotoma odstranjena tedne prej, v preoblikovanju, namenjenem zmanjšanju porabe procesorja WAF-a. In postopek omogoča, da katero koli pravilo preskoči stopnjo priprave, ker pravila obstajajo za zaustavitev napadov v živo; to ni bil nujni primer in je kljub temu šel globalno.

1:37 14:00, WAF je identificiran; ni napada. 14:02, nekdo predlaga globalno ukinitev: ena komponenta, izklopljeno, po vsem svetu. Stikalo je za Cloudflare Access. Cloudflare Access je za Cloudflare. Nekateri podatki za prijavo so potekli zaradi neuporabe, zato najhitrejše omrežje na internetu porabi pet minut za obvod, ki ga nihče ni vadil. 14:07, ubit. 14:09, promet normalen. git blame: uvedba z eno hitrostjo, globalna; CPU zaščita po pomoti preoblikovana stran;

2:04 regex motor brez zgornje meje. Ne inženir, ki je napisal pravilo: postmortem navaja enajst vzrokov in ne imenuje nikogar. Polmer eksplozije: 27 minut, 82 odstotkov prometa, 100 odstotkov CPU na vsaki jedri, v vsakem mestu. Nadzorna plošča in API sta za istim robom, zato stranke ne morejo niti izklopiti tega. Hacker News, pod postmortemom: imeli so eno težavo, uporabili regularni izraz, zdaj jih imajo dve. Stara šala. Še vedno se prevaja.

2:28 Sodba, postmortem: SHIP IT. CPU zaščita je nazaj, vseh 3.868 pravil se prebere ročno, pravila gredo skozi stopnjo priprave, in motor se premakne na tistega z linearno-časovnimi garancijami, objavljeno s strani Kena Thompsona leta 1968. Ponedeljek: no dot-star dot-star v ničemer, kar se izvaja na zahtevo, in stikalo za izklop naj bo izklopljeno iz stvari, ki jo ubije. Pošljite mi incident, o katerem še vedno ne smete govoriti, v komentarjih ali na the daily diff dot dev.

2:53 In to je razlika za danes. Jaz sem Niko iz Axrisi. Združite odgovorno.

Viri

  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 videoposnetki