+− THE DAILY DIFFdev & AI news
SHIP IT

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 รวมอย่างรับผิดชอบ

แหล่งที่มา

  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

วิดีโอที่เกี่ยวข้อง

postmortem · th · 19 ก.ย. 2569

Google Cloud หยุดทำงานเนื่องจากช่องว่างเปล่า สามชั่วโมง

แถวนโยบายที่มีช่องว่างเปล่าบางส่วนทำให้เกิดข้อผิดพลาด null pointer และ Google Cloud หยุดทำงานพร้อมกันในทุกภูมิภาค จากนั้น Cloudflare ก็ล่มตามไปด้วย วันที่ 12 มิถุนายน 2025, 17:49 UTC: Service Control

2:57 ↗
postmortem · th · 16 ก.ย. 2569

Facebook ลบตัวเองออกจากอินเทอร์เน็ต หกชั่วโมง

Facebook ลบที่อยู่ของตัวเองออกจากอินเทอร์เน็ต และเมื่อวิศวกรของบริษัทมาถึงเพื่อกู้คืน ระบบอ่านบัตรก็ใช้งานไม่ได้เช่นกัน เพราะทำงานบน Facebook 4 ตุลาคม 2021, 15:40 UTC: คำสั่งบำรุงรักษาโครงข่ายหลักตามป

3:01 ↗
postmortem · th · 25 ก.ย. 2569

ข้อผิดพลาดหนึ่งมิลลิวินาทีหยุดการจราจรทางอากาศของสหราชอาณาจักร หกชั่วโมง

เวลา 10:00 น. ของวันอังคารที่ 8 กันยายน คำขอ squawk-code ปกติหนึ่งรายการภายในระบบน่านฟ้าแห่งชาติ (NAS) ของ NATS ถูกขัดจังหวะด้วยข้อความที่มีลำดับความสำคัญสูงกว่า ในขณะที่กำลังอัปเดตค่าบางส่วน หน้าต่าง

3:06 ↗
postmortem · th · 22 ก.ย. 2569

การรีบูตส่งผลให้ Telstra ย้อนกลับไปปี 2006 โทรศัพท์เก้าล้านเครื่อง

วิศวกรในเมลเบิร์นเปิดเครื่องโครงแชสซีควบคุมเวลาอีกครั้งในเวลา 02:50 น. และเมื่อถึงเวลาอาหารเช้า เครือข่ายมือถือที่ใหญ่ที่สุดของออสเตรเลียก็เห็นพ้องต้องกันว่ามันคือเดือนพฤศจิกายน 2006 8 กรกฎาคม 2026: ก

3:15 ↗