+− THE DAILY DIFFdev & AI news
SHIP IT

Egy regex vitte le a Cloudflare-t. 27 percre.

2019.

2019. július 2., 13:42 UTC: a Cloudflare webalkalmazás-tűzfalának egy új szabálya élesedik több mint 180 városban, körülbelül két másodperc alatt. Ez egy XSS szabály szimulációs módban, így semmit sem blokkol, de minden kérésnél fut, és .*(?:.*=.*) végződésű. A PCRE visszalép, minden HTTP-kéréseket kiszolgáló CPU mag 100%-ra pörög, és minden Cloudflare-proxyn keresztül futó oldal 502-es hibát ad vissza 27 percig; a forgalom 82%-kal esik. A "kill switch" a Cloudflare Access mögött van, ami a Cloudflare mögött van. Boncolás a Cloudflare saját beszámolója alapján: a CPU-védelmet hetekkel korábban távolították el egy átalakítás során, aminek célja a CPU megtakarítása volt, az eljárás, amely lehetővé tette, hogy bármely szabály kihagyja a "staging" fázist, a motor, amelynek nincs komplexitási garanciája, a 11 ok és a 7 javítás. A javításra vonatkozó ítélet: SHIP IT.

Olvassa el az írott kiadást (angolul) ↗

Amit ez a videó tartalmaz

  • 13:31–13:42 UTC: PR egyesítve, CI zöld (nincs CPU teszt), a Quicksilver a szabályt több mint 180 városba továbbítja; a WAF szabályok kihagyják a DOG → PIG → Canary szakaszokat
  • 13:45–14:07: első oldal; CPU 100% világszerte, forgalom −82%, 502-es hibák mindenhol; a belső vezérlőpult a Cloudflare Access mögött van, ami leállt; néhány hitelesítő adat lejárt; egy ritkán gyakorolt bypass
  • 14:07–14:09: globális WAF leállítás; forgalom és CPU normális 27 perc után; 14:52 WAF visszatér a szabály nélkül
  • Július 2 (15:50 UTC) és július 12: a Cloudflare még aznap közzéteszi a megjegyzést és a teljes utólagos elemzést; a CPU-védelem újra hozzáadva, 3 868 szabály újraolvasva, "staged rollout"-ok, áttérés lineáris idejű regex motorra

Lefordított átirat

Az eredeti angol narrációból fordítva. A rendelkezésre álló hangot és feliratokat a YouTube vezérli.

0:00 Egy reguláris kifejezés élesedik egyszerre minden Cloudflare szerveren, és a következő huszonhét percben az általa védett oldalak 502-es oldalt mutatnak, ami egy tűzfal esetében a lehető legszigorúbb beállítás. 2019. július 2., 13:42 UTC. A Cloudflare két órán belül posztol: nem támadás, hanem hibás telepítés, a forgalom 82 százalékkal csökkent. Tíz nappal később John Graham-Cumming CTO közzéteszi a teljes utólagos elemzést, a regexet is beleértve, és a Hacker News 698 pontot ad neki,

0:26 ami egy leállás esetében álló ováció. Hogyan történik, miért lehetséges, és kit terhel valójában a felelősség. Ez a The Daily Diff, boncolás. 13:31. Egy pull request egyesül: egy új tűzfal szabály a cross-site scripting ellen, szimulációs módban, így semmit sem blokkol. 13:37, a tesztek sikeresek; egyik sem méri a CPU-t. 13:42, a szabály két másodperc alatt 180 városba kerül kiszállításra, mert a WAF szabályok kihagyják a "dog", "pig" és "canary" szakaszokat, amiket más kiadások kapnak.

0:54 13:45, az első oldal. 13:49, a Hacker News-on van egy szál az állapotoldalról, ami még mindig azt mutatja, hogy minden rendszer működőképes. A szabály dot-starral, dot-starral, egyenlő jellel, dot-starral végződik: bármi, aztán bármi, aztán egy egyenlőségjel. A PCRE mohón tippel, hibázik, és visszalép az összes többi elválasztáson keresztül. Az x egyenlő x 23 lépést igényel. Húsz x az egyenlő után: 555.

1:15 Húsz x, nincs egyenlő jel: 4 067 lépés, hogy semmit se találjon. Futtassa ezt minden kérésnél, és minden mag száz százalékon fut, alaposan, semmit sem csinálva. Két őrnek el kellett volna kapnia. A szabályokra vonatkozó CPU-korlátot hetekkel korábban tévedésből eltávolították, egy átalakítás során, aminek célja a WAF kevesebb CPU használata volt. És az eljárás lehetővé teszi, hogy bármely szabály kihagyja a "staging"-et, mert a szabályok arra valók, hogy megállítsák az élő támadásokat; ez nem volt vészhelyzet, és mégis globálisan ment.

1:37 14:00, a WAF azonosítva; nincs támadás. 14:02, valaki a globális leállítást javasolja: egy komponens, kikapcsolva, világszerte. A kapcsoló a Cloudflare Access mögött van. A Cloudflare Access a Cloudflare mögött van. Néhány hitelesítő adat lejárt a használaton kívüliség miatt, így az internet leggyorsabb hálózata öt percet töltött egy olyan bypass-on, amit senki sem gyakorolt. 14:07, leállítás. 14:09, forgalom normális. git blame: egy kiadás egy sebességgel, globálisan; egy CPU-védelem véletlenül átalakítva;

2:04 egy regex motor felső korlát nélkül. Nem az a mérnök, aki a szabályt írta: a boncolás tizenegy okot sorol fel és senkit sem nevez meg. Hatótáv: 27 perc, a forgalom 82 százaléka, 100 százalék CPU minden magon, minden városban. A műszerfal és az API ugyanazon az élvonalon helyezkedik el, így az ügyfelek még kikapcsolni sem tudják. Hacker News, a boncolás alatt: volt egy problémájuk, használtak egy reguláris kifejezést, most kettő van. Régi vicc. Még mindig fordítódik.

2:28 Ítélet, boncolás: SHIP IT. A CPU-védelem visszatért, mind a 3868 szabályt kézzel átolvassák, a szabályok átmennek a "staging" fázison, és a motor egy lineáris idejű garanciákkal rendelkezőre vált, amelyet Ken Thompson publikált 1968-ban. Hétfő: nincs dot-star dot-star semmiben, ami kérésenként fut, és tartsa a "kill switch"-et távol attól, amit leállít. Küldje el nekem azt az incidenst, amiről még mindig nem beszélhet, a kommentekben, vagy a daily diff dot dev címen.

2:53 És ez a mai diff. Niko vagyok az Axrisi-től. Merge felelősségteljesen.

Források

  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

Kapcsolódó videók