Regex ทำให้ Cloudflare ล่มเป็นเวลา 27 นาที
2 กรกฎาคม 2019, 13:42 UTC: กฎใหม่หนึ่งข้อสำหรับ Web Application Firewall ของ Cloudflare ใช้งานจริงในกว่า 180 เมืองในเวลาประมาณสองวินาที เป็นกฎ XSS ในโหมดจำลอง ดังนั้นจึงไม่บล็อกอะไรเลย แต่ยังคงทำงานในทุกคำขอ และลงท้ายด้วย .*(?:.*=.*) PCRE ทำการแบ็คแทร็ค, ทุกคอร์ CPU ที่ให้บริการ HTTP ทำงานถึง 100%, และทุกไซต์ที่ใช้ Cloudflare เป็นพรอกซีส่งคืนค่า 502 เป็นเวลา 27 นาที; การเข้าชมลดลง 82% สวิตช์ฉุกเฉินอยู่เบื้องหลัง Cloudflare Access ซึ่งอยู่เบื้องหลัง Cloudflare รายงานหลังเกิดเหตุ จากการเขียนของ Cloudflare เอง: ตัวป้องกัน CPU ที่ถูกถอดออกไปเมื่อหลายสัปดาห์ก่อนในการปรับโครงสร้างเพื่อประหยัด CPU, ขั้นตอนที่อนุญาตให้กฎใดๆ ข้ามการจัดเตรียม, เอนจิ้นที่ไม่มีการรับประกันความซับซ้อน, 11 สาเหตุและ 7 วิธีแก้ไข คำตัดสินเกี่ยวกับวิธีแก้ไข: SHIP IT
2 กรกฎาคม 2019, 13:42 UTC: กฎใหม่หนึ่งข้อสำหรับ Web Application Firewall ของ Cloudflare ใช้งานจริงในกว่า 180 เมืองในเวลาประมาณสองวินาที เป็นกฎ XSS ในโหมดจำลอง ดังนั้นจึงไม่บล็อกอะไรเลย แต่ยังคงทำงานในทุกคำขอ และลงท้ายด้วย .*(?:.*=.*) PCRE ทำการแบ็คแทร็ค, ทุกคอร์ CPU ที่ให้บริการ HTTP ทำงานถึง 100%, และทุกไซต์ที่ใช้ Cloudflare เป็นพรอกซีส่งคืนค่า 502 เป็นเวลา 27 นาที; การเข้าชมลดลง 82% สวิตช์ฉุกเฉินอยู่เบื้องหลัง Cloudflare Access ซึ่งอยู่เบื้องหลัง Cloudflare รายงานหลังเกิดเหตุ จากการเขียนของ Cloudflare เอง: ตัวป้องกัน CPU ที่ถูกถอดออกไปเมื่อหลายสัปดาห์ก่อนในการปรับโครงสร้างเพื่อประหยัด CPU, ขั้นตอนที่อนุญาตให้กฎใดๆ ข้ามการจัดเตรียม, เอนจิ้นที่ไม่มีการรับประกันความซับซ้อน, 11 สาเหตุและ 7 วิธีแก้ไข คำตัดสินเกี่ยวกับวิธีแก้ไข: SHIP IT
อ่านฉบับลายลักษณ์อักษร (ภาษาอังกฤษ) ↗
วิดีโอนี้ครอบคลุมอะไรบ้าง
- 13:31–13:42 UTC: PR รวมเข้าด้วยกัน, CI เขียว (ไม่มีการทดสอบ CPU), Quicksilver ผลักดันกฎไปยังกว่า 180 เมือง; กฎ WAF ข้ามขั้นตอน DOG → PIG → Canary
- 13:45–14:07: หน้าแรก; CPU 100% ทั่วโลก, การเข้าชมลดลง 82%, 502s ทั่วทุกที่; แผงควบคุมภายในอยู่เบื้องหลัง Cloudflare Access ซึ่งไม่ทำงาน; ข้อมูลประจำตัวบางอย่างหมดอายุ; การบายพาสที่แทบไม่เคยฝึกฝน
- 14:07–14:09: การหยุดทำงานของ WAF ทั่วโลก; การเข้าชมและ CPU กลับสู่ปกติหลังจาก 27 นาที; 14:52 WAF กลับมาโดยไม่มีกฎดังกล่าว
- 2 ก.ค. (15:50 UTC) และ 12 ก.ค.: Cloudflare เผยแพร่บันทึกในวันเดียวกันและรายงานหลังเกิดเหตุฉบับเต็ม; ตัวป้องกัน CPU ถูกเพิ่มกลับเข้าไปใหม่, กฎ 3,868 ข้อถูกอ่านใหม่, การเปิดตัวแบบเป็นขั้นตอน, ย้ายไปใช้เอนจิ้น regex ที่ใช้เวลาเชิงเส้น
บทถอดเสียงที่แปลแล้ว
แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย YouTube
0:00 หนึ่งนิพจน์ทั่วไปทำงานบนเซิร์ฟเวอร์ Cloudflare ทุกเครื่องพร้อมกัน และในอีกยี่สิบเจ็ดนาทีถัดไป เว็บไซต์ที่อยู่เบื้องหลังก็กลายเป็นหน้า 502 ซึ่งสำหรับไฟร์วอลล์แล้ว ถือเป็นการตั้งค่าที่เข้มงวดที่สุดเท่าที่จะเป็นไปได้ 2 กรกฎาคม 2019, 13:42 UTC Cloudflare โพสต์ภายในสองชั่วโมง: ไม่ใช่การโจมตี แต่เป็นการปรับใช้ที่ผิดพลาด การเข้าชมลดลง 82 เปอร์เซ็นต์ สิบวันต่อมา CTO John Graham-Cumming เผยแพร่รายงานหลังเกิดเหตุฉบับเต็ม รวมถึง regex และ Hacker News ให้คะแนน 698 คะแนน
0:26 ซึ่งสำหรับการหยุดทำงานถือเป็นการปรบมือยืน มันเกิดขึ้นได้อย่างไร ทำไมถึงเป็นไปได้ และใครคือผู้ที่ถูกตำหนิอย่างแท้จริง นี่คือ The Daily Diff, รายงานหลังเกิดเหตุ 13:31 การรวมคำขอดึง: กฎไฟร์วอลล์ใหม่หนึ่งข้อเพื่อป้องกันการโจมตีข้ามไซต์ การเขียนสคริปต์ ในโหมดจำลอง ดังนั้นจึงไม่บล็อกอะไรเลย 13:37 การทดสอบผ่าน ไม่มีมาตรการวัด CPU 13:42 กฎส่งไปยัง 180 เมืองในสองวินาที เพราะกฎ WAF ข้ามขั้นตอน dog, pig และ canary ที่การเปิดตัวอื่นๆ ได้รับ
0:54 13:45 หน้าแรก 13:49 Hacker News มีกระทู้เกี่ยวกับหน้าสถานะ ซึ่งยังคงระบุว่าระบบทั้งหมดทำงานปกติ กฎลงท้ายด้วย dot-star, dot-star, equals, dot-star: อะไรก็ได้ จากนั้นอะไรก็ได้ จากนั้นเครื่องหมายเท่ากับ PCRE คาดเดาอย่างตะกละตะกราม ล้มเหลว และย้อนรอยผ่านการแยกอื่นๆ ทั้งหมด x เท่ากับ x ใช้ 23 ขั้นตอน x ยี่สิบตัวหลังเครื่องหมายเท่ากับ: 555
1:15 x ยี่สิบตัว ไม่มีเครื่องหมายเท่ากับ: 4,067 ขั้นตอนเพื่อไม่พบอะไรเลย รันสิ่งนั้นในทุกคำขอและทุกคอร์ทำงานที่หนึ่งร้อยเปอร์เซ็นต์ ไม่ได้ทำอะไรเลย อย่างละเอียดถี่ถ้วน ตัวป้องกันสองตัวควรจะจับมันได้ ขีดจำกัด CPU บนกฎถูกลบออกไปโดยไม่ได้ตั้งใจเมื่อหลายสัปดาห์ก่อน ในการปรับโครงสร้างเพื่อทำให้ WAF ใช้ CPU น้อยลง และขั้นตอนอนุญาตให้กฎใดๆ ข้ามการจัดเตรียม เพราะกฎมีอยู่เพื่อหยุดการโจมตีสด การโจมตี; นี่ไม่ใช่เหตุฉุกเฉิน และมันก็แพร่กระจายไปทั่วโลกอยู่ดี
1:37 14:00 ระบุ WAF; ไม่ใช่การโจมตี 14:02 มีคนเสนอให้ยุติการทำงานทั่วโลก: คอมโพเนนต์เดียว ปิดทั่วโลก สวิตช์อยู่เบื้องหลัง Cloudflare Access Cloudflare Access อยู่เบื้องหลัง Cloudflare ข้อมูลประจำตัวบางอย่างหมดอายุจากการไม่ใช้งาน ดังนั้นเครือข่ายที่เร็วที่สุดบน อินเทอร์เน็ตใช้เวลาห้านาทีในการบายพาสที่ไม่มีใครเคยฝึกฝน 14:07 หยุดทำงาน 14:09 การรับส่งข้อมูลปกติ git blame: การเปิดตัวด้วยความเร็วเดียว ทั่วโลก; การ์ด CPU ถูกปรับโครงสร้างออกไปโดย
2:04 อุบัติเหตุ; เอนจิ้น regex ที่ไม่มีขีดจำกัดบน ไม่ใช่วิศวกรที่เขียนกฎ: รายงานหลังเกิดเหตุระบุสาเหตุสิบเอ็ดประการและ ไม่ได้ระบุชื่อใคร รัศมีผลกระทบ: 27 นาที, 82 เปอร์เซ็นต์ของการรับส่งข้อมูล 100 เปอร์เซ็นต์ CPU บนทุกคอร์ ในทุกเมือง แดชบอร์ดและ API อยู่เบื้องหลัง Edge เดียวกัน ดังนั้นลูกค้าจึงไม่สามารถปิด มันได้ Hacker News ภายใต้รายงานหลังเกิดเหตุ: พวกเขามีปัญหาหนึ่งอย่าง ใช้ regular expression ตอนนี้พวกเขามีสองอย่าง มุกตลกเก่า ยังคงทำงานได้
2:28 คำตัดสิน รายงานหลังเกิดเหตุ: SHIP IT CPU guard กลับมาแล้ว กฎ 3,868 ข้อทั้งหมดถูกอ่านด้วยมือ กฎผ่านการจัดเตรียม และเอนจิ้นย้ายไปใช้เอนจิ้นที่มีการรับประกันเวลาเชิงเส้น เผยแพร่โดย Ken Thompson ในปี 1968 วันจันทร์: ไม่มี dot-star dot-star ในสิ่งใดก็ตามที่ทำงานต่อคำขอ และเก็บสวิตช์ฆ่าออกห่างจากสิ่งที่มันฆ่า ส่งเหตุการณ์ที่คุณยังไม่ได้รับอนุญาตให้พูดถึง ในความคิดเห็น หรือที่ the daily diff dot dev
2:53 และนั่นคือความแตกต่างสำหรับวันนี้ ผม Niko จาก Axrisi รวมอย่างรับผิดชอบ
แหล่งที่มา
- 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



