Satu "regex" menjatuhkan Cloudflare. 27 minit.
2 Julai 2019, 13:42 UTC: satu peraturan baharu untuk Web Application Firewall Cloudflare disiarkan di 180+ bandar dalam kira-kira dua saat.
2 Julai 2019, 13:42 UTC: satu peraturan baharu untuk Web Application Firewall Cloudflare disiarkan di 180+ bandar dalam kira-kira dua saat. Ia adalah peraturan XSS dalam mod simulasi, jadi ia tidak menyekat apa-apa, tetapi ia masih berjalan pada setiap permintaan, dan ia berakhir dengan .*(?:.*=.*). PCRE kembali ke belakang, setiap teras CPU yang melayan HTTP mencapai 100 %, dan setiap tapak yang diproksi Cloudflare mengembalikan 502 selama 27 minit; trafik jatuh 82 %. Suis "kill switch" terletak di belakang Cloudflare Access, yang terletak di belakang Cloudflare. Postmortem, dari penulisan Cloudflare sendiri: "CPU guard" yang dibuang beberapa minggu sebelumnya dalam "refactor" yang bertujuan untuk menjimatkan CPU, prosedur yang membenarkan sebarang peraturan melangkau "staging", enjin tanpa jaminan kerumitan, 11 punca dan 7 pembetulan. Keputusan mengenai pembetulan: SHIP IT.
Baca edisi bertulis (Bahasa Inggeris) ↗
Apa yang diliputi video ini
- 13:31–13:42 UTC: PR digabungkan, CI hijau (tiada ujian CPU), Quicksilver menolak peraturan ke 180+ bandar; Peraturan WAF melangkau peringkat DOG → PIG → Canary
- 13:45–14:07: halaman pertama; CPU 100 % di seluruh dunia, trafik −82 %, 502 di mana-mana; panel kawalan dalaman berada di belakang Cloudflare Access, yang "down"; beberapa kelayakan telah tamat tempoh; pintasan yang jarang dilakukan
- 14:07–14:09: WAF tamat global; trafik dan CPU normal selepas 27 minit; 14:52 WAF kembali tanpa peraturan
- 2 Julai (15:50 UTC) dan 12 Julai: Cloudflare menerbitkan nota hari yang sama dan postmortem penuh; "CPU guard" ditambah semula, 3,868 peraturan dibaca semula, pelancaran berperingkat, beralih ke enjin "regex" masa linear
Transkrip terjemahan
Diterjemahkan daripada penceritaan asal Bahasa Inggeris. Audio dan kapsyen yang tersedia dikawal oleh YouTube.
0:00 Satu ungkapan nahu tunggal disiarkan pada setiap pelayan Cloudflare sekaligus, dan untuk dua puluh tujuh minit berikutnya tapak di belakangnya adalah halaman 502, yang, untuk "firewall", adalah tetapan paling ketat yang mungkin. 2 Julai 2019, 13:42 UTC. Cloudflare menyiarkan dalam masa dua jam: bukan serangan, tetapi "deploy" yang buruk, trafik turun 82 peratus. Sepuluh hari kemudian CTO John Graham-Cumming menerbitkan postmortem penuh, "regex" disertakan, dan Hacker News memberikannya 698 mata,
0:26 yang untuk gangguan adalah "standing ovation". Bagaimana ia berlaku, mengapa ia mungkin, dan siapa sebenarnya yang dipersalahkan. Ini adalah The Daily Diff, postmortem. 13:31. Permintaan "pull" digabungkan: satu peraturan "firewall" baharu terhadap "cross-site" penulisan skrip, dalam mod simulasi, jadi ia tidak menyekat apa-apa. 13:37, ujian lulus; tiada yang mengukur CPU. 13:42, peraturan dihantar ke 180 bandar dalam dua saat, kerana peraturan WAF melangkau peringkat anjing, babi dan kenari yang diterima oleh keluaran lain.
0:54 13:45, halaman pertama. 13:49, Hacker News mempunyai "thread" pada halaman status, yang masih menyatakan semua sistem beroperasi. Peraturan berakhir dengan "dot-star, dot-star, equals, dot-star": apa-apa sahaja, kemudian apa-apa sahaja, kemudian tanda sama dengan. PCRE meneka dengan rakus, gagal, dan mengulang kembali melalui setiap pecahan lain. x sama dengan x mengambil 23 langkah. Dua puluh x selepas sama dengan: 555.
1:15 Dua puluh x, tiada tanda sama dengan: 4,067 langkah untuk mencari apa-apa. Jalankan itu pada setiap permintaan dan setiap teras berada pada seratus peratus, tidak melakukan apa-apa, dengan teliti. Dua pengawal sepatutnya menangkapnya. Had CPU pada peraturan telah dibuang secara tidak sengaja beberapa minggu sebelumnya, dalam "refactor" yang bertujuan untuk menjadikan WAF menggunakan CPU yang kurang. Dan prosedur membenarkan sebarang peraturan melangkau "staging", kerana peraturan wujud untuk menghentikan serangan langsung serangan; yang ini bukan kecemasan, dan ia menjadi global pula.
1:37 14:00, WAF dikenal pasti; tiada serangan. 14:02, seseorang mencadangkan penamatan global: satu komponen, dimatikan, di seluruh dunia. Suis terletak di belakang Cloudflare Access. Cloudflare Access terletak di belakang Cloudflare. Beberapa kelayakan telah tamat tempoh akibat tidak digunakan, jadi rangkaian terpantas di internet menghabiskan lima minit pada pintasan yang tiada siapa yang melatihnya. 14:07, bunuh. 14:09, trafik normal. git blame: satu pelancaran dengan satu kelajuan, global; "CPU guard" difaktorkan semula secara
2:04 tidak sengaja; enjin "regex" tanpa batas atas. Bukan jurutera yang menulis peraturan: postmortem menyenaraikan sebelas punca dan tidak menamakan sesiapa. Julat kesan: 27 minit, 82 peratus trafik, 100 peratus CPU pada setiap teras, di setiap bandar. Papan pemuka dan API terletak di belakang "edge" yang sama, jadi pelanggan tidak boleh pun mematikannya. mematikannya. Hacker News, di bawah postmortem: mereka mempunyai satu masalah, menggunakan ungkapan nahu, kini mereka mempunyai dua. Jenaka lama. Masih boleh disusun.
2:28 Keputusan, postmortem: SHIP IT. "CPU guard" telah kembali, kesemua 3,868 peraturan dibaca secara manual, peraturan melalui "staging", dan enjin beralih kepada yang mempunyai jaminan masa linear, diterbitkan oleh Ken Thompson pada tahun 1968. Isnin: tiada "dot-star dot-star" dalam apa-apa yang berjalan per permintaan, dan biarkan "kill switch" jauh dari perkara yang dibunuh. Hantar saya insiden yang anda masih tidak dibenarkan bercakap tentangnya, dalam komen, atau di "daily diff dot dev".
2:53 Dan itulah perbezaan untuk hari ini. Saya Niko dari Axrisi. Gabungkan dengan bertanggungjawab.
Sumber
- John Graham-Cumming, "Details of the Cloudflare outage on July 2, 2019" (Jul 12, 2019)blog.cloudflare.com
- Matthew Prince, "Cloudflare outage caused by bad software deploy (updated)" (Jul 2, 2019)blog.cloudflare.com
- Matthew Prince on X, Jul 2, 2019, 14:22 UTCx.com
- Matthew Prince on X, Jul 2, 2019, 14:36 UTC ("No evidence yet attack related")x.com
- Hacker News, Jul 2, 2019, 13:49 UTC — "Cloudflare Network Performance Issues" (631 points)news.ycombinator.com
- Hacker News, Jul 2, 2019 — "Cloudflare outage caused by bad software deploy" (348 points)news.ycombinator.com
- Hacker News, Jul 12, 2019 — "Details of the Cloudflare outage on July 2, 2019" (698 points)news.ycombinator.com
- TechCrunch, Jul 2, 2019techcrunch.com



