+− THE DAILY DIFFdev & AI news
SHIP IT

ช่องพิเศษช่องเดียวทำให้พีซี 8.5 ล้านเครื่องล่ม ใช้เวลา 78 นาที

19 กรกฎาคม 2024, 04:09 UTC: CrowdStrike ผลัก Channel File 291 — ซึ่งเป็นการอัปเดต Rapid Response Content — ไปยังเซ็นเซอร์ Windows Falcon ทุกเครื่องที่ออนไลน์ เทมเพลตที่ใช้ได้ประกาศไว้ว่ามี 21 ช่องข้อมูลในเดือนกุมภาพันธ์; รหัสที่ให้ข้อมูลจะสร้างอาร์เรย์ที่มี 20 ช่อง เป็นเวลาสี่เดือนที่ไม่มีอะไรอ่านช่อง 21 เนื่องจากทุกกฎปล่อยให้เป็นไวด์การ์ด การอัปเดตนี้ใส่รูปแบบจริงลงไป Content Validator ฝั่งคลาวด์นับได้ 21 ช่องเทียบกับการประกาศและส่งผ่านไปได้; Content Interpreter ของเซ็นเซอร์ ซึ่งไม่มีการตรวจสอบขอบเขต จะอ่านช่อง 21 ในโหมดเคอร์เนลและ Windows จะเกิด page-faults: PAGE_FAULT_IN_NONPAGED_AREA, csagent.sys ไดรเวอร์จะโหลดตั้งแต่ช่วงต้นของการบูตโดยเจตนา อ่านไฟล์เดิม แล้วล่มอีกครั้ง — เกิด boot loop การแก้ไขถูกย้อนกลับเมื่อ 05:27 UTC, 78 นาทีต่อมา แต่เครื่อง 8.5 ล้านเครื่อง (จำนวนของ Microsoft, น้อยกว่า 1% ของ Windows) มีไฟล์ดังกล่าวอยู่แล้ว และการแก้ไขคือให้คนมาแก้ที่คีย์บอร์ดทุกเครื่อง: Safe Mode, ลบ C-00000291*.sys, คีย์กู้คืน BitLocker สายการบิน, โรงพยาบาล, ธนาคาร และศูนย์ 911 หยุดชะงัก; Delta ยกเลิกเที่ยวบินประมาณ 7,000 เที่ยว และเรียกร้องค่าเสียหายอย่างน้อย 500 ล้านดอลลาร์จาก CrowdStrike และ Microsoft; Parametrix ประมาณการค่าใช้จ่ายของ Fortune 500 ใกล้ 5.4 พันล้านดอลลาร์ การชันสูตรจาก Root Cause Analysis ของ CrowdStrike เอง, Preliminary Post Incident Review, บล็อกของ Microsoft, เอกสาร 8-K ของ Delta และการให้การต่อสภา Git blame: 65% CrowdStrike / 25% การออกแบบโหมดเคอร์เนล / 10% วันศุกร์ คำตัดสินการแก้ไข: SHIP IT, อย่างฉิวเฉียด

19 กรกฎาคม 2024, 04:09 UTC: CrowdStrike ผลัก Channel File 291 — ซึ่งเป็นการอัปเดต Rapid Response Content — ไปยังเซ็นเซอร์ Windows Falcon ทุกเครื่องที่ออนไลน์ เทมเพลตที่ใช้ได้ประกาศไว้ว่ามี 21 ช่องข้อมูลในเดือนกุมภาพันธ์; รหัสที่ให้ข้อมูลจะสร้างอาร์เรย์ที่มี 20 ช่อง เป็นเวลาสี่เดือนที่ไม่มีอะไรอ่านช่อง 21 เนื่องจากทุกกฎปล่อยให้เป็นไวด์การ์ด การอัปเดตนี้ใส่รูปแบบจริงลงไป Content Validator ฝั่งคลาวด์นับได้ 21 ช่องเทียบกับการประกาศและส่งผ่านไปได้; Content Interpreter ของเซ็นเซอร์ ซึ่งไม่มีการตรวจสอบขอบเขต จะอ่านช่อง 21 ในโหมดเคอร์เนลและ Windows จะเกิด page-faults: PAGE_FAULT_IN_NONPAGED_AREA, csagent.sys ไดรเวอร์จะโหลดตั้งแต่ช่วงต้นของการบูตโดยเจตนา อ่านไฟล์เดิม แล้วล่มอีกครั้ง — เกิด boot loop การแก้ไขถูกย้อนกลับเมื่อ 05:27 UTC, 78 นาทีต่อมา แต่เครื่อง 8.5 ล้านเครื่อง (จำนวนของ Microsoft, น้อยกว่า 1% ของ Windows) มีไฟล์ดังกล่าวอยู่แล้ว และการแก้ไขคือให้คนมาแก้ที่คีย์บอร์ดทุกเครื่อง: Safe Mode, ลบ C-00000291*.sys, คีย์กู้คืน BitLocker สายการบิน, โรงพยาบาล, ธนาคาร และศูนย์ 911 หยุดชะงัก; Delta ยกเลิกเที่ยวบินประมาณ 7,000 เที่ยว และเรียกร้องค่าเสียหายอย่างน้อย 500 ล้านดอลลาร์จาก CrowdStrike และ Microsoft; Parametrix ประมาณการค่าใช้จ่ายของ Fortune 500 ใกล้ 5.4 พันล้านดอลลาร์ การชันสูตรจาก Root Cause Analysis ของ CrowdStrike เอง, Preliminary Post Incident Review, บล็อกของ Microsoft, เอกสาร 8-K ของ Delta และการให้การต่อสภา Git blame: 65% CrowdStrike / 25% การออกแบบโหมดเคอร์เนล / 10% วันศุกร์ คำตัดสินการแก้ไข: SHIP IT, อย่างฉิวเฉียด

อ่านฉบับลายลักษณ์อักษร (ภาษาอังกฤษ) ↗

วิดีโอนี้ครอบคลุมอะไรบ้าง

  • 28 ก.พ. – 24 เม.ย. 2024: เซ็นเซอร์ 7.11 ส่ง IPC Template Type (21 ช่องข้อมูลประกาศไว้, 20 ช่องข้อมูลถูกจัดหา); การทดสอบความเครียดผ่านเมื่อ 5 มี.ค.; สี่อินสแตนซ์ทำงานได้เพราะช่องข้อมูล 21 เป็นไวด์การ์ด
  • 19 ก.ค., 04:09 UTC: Template Instances ใหม่สองรายการ; ข้อผิดพลาดทางตรรกะของ Content Validator ปล่อยให้รายการที่ไม่ใช่ไวด์การ์ดผ่านไปได้; การอ่านนอกขอบเขตในเคอร์เนล; 05:27 UTC ถูกย้อนกลับ
  • 19-29 ก.ค.: การแก้ไขด้วยตนเอง (Safe Mode, ลบไฟล์, คีย์ BitLocker); เซ็นเซอร์ประมาณ 97% กลับมาใช้งานได้ภายใน 24 ก.ค., ประมาณ 99% ภายใน 29 ก.ค.
  • 25 ก.ค. – 19 ส.ค.: การตรวจสอบขอบเขตขณะรันไทม์, การตรวจสอบจำนวนช่องข้อมูลขณะคอมไพล์, การตรวจสอบของ Validator, Canary + Deployment Rings, การควบคุมเนื้อหา Rapid Response โดยลูกค้า, การตรวจสอบอิสระสองครั้ง; RCA ฉบับเต็มพร้อม crash dump เมื่อ 6 ส.ค.

บทถอดเสียงที่แปลแล้ว

แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย YouTube

0:00 การอัปเดตความปลอดภัยครั้งหนึ่งมีช่องข้อมูล 21 ช่องในไดรเวอร์ที่สร้างขึ้นสำหรับ 20 ช่อง และเครื่อง Windows 8.5 ล้านเครื่องเกิด blue-screen ก่อนอาหารเช้า 19 กรกฎาคม 2024, 04:09 UTC CrowdStrike ผลัก Channel File 291 ไปยังเซ็นเซอร์ Falcon ทุกเครื่อง เจ็ดสิบแปดนาทีต่อมาพวกเขาถอนมันออก; ถึงตอนนั้นสายการบิน โรงพยาบาลและธนาคารก็จ้องมองสี่เหลี่ยมสีน้ำเงินเดียวกัน โพสต์แรกของ CEO บอกว่าไม่ใช่การโจมตีทางไซเบอร์ ซึ่งจริง แต่ไม่ใช่ประเด็น มันเกิดขึ้นได้อย่างไร ทำไมเป็นไปได้ และใครเป็นผู้รับผิดชอบ

0:27 นี่คือ The Daily Diff, ภายหลังเกิดเหตุ 28 กุมภาพันธ์ เซ็นเซอร์ 7.11 ส่งตัวตรวจจับใหม่สำหรับ named pipes มันประกาศช่องข้อมูลอินพุต 21 ช่อง; โค้ดที่ป้อนข้อมูลสร้างอาร์เรย์ของ 20 ช่อง ไม่มีใครสังเกตเห็น: เป็นเวลาสี่เดือนที่ทุกกฎปล่อยช่อง 21 เป็น ไวด์การ์ด และไม่มีใครอ่านไวด์การ์ด การทดสอบความเครียดผ่าน สี่กฎถูกส่งออกไป ทุกอย่างเรียบร้อย 19 กรกฎาคม, 04:09 กฎใหม่สองข้อ; หนึ่งในนั้นใส่รูปแบบจริงในช่อง 21

0:51 ตัวตรวจสอบความถูกต้องบนคลาวด์นับ 21 ช่องเทียบกับการประกาศและบอกว่าเรียบร้อย โฮสต์ Windows ออนไลน์ทุกเครื่องดาวน์โหลดมันพร้อมกัน เพราะไม่มี canary ring เซ็นเซอร์อ่านช่อง 21 ซึ่งไม่ใช้หน่วยความจำของมัน และเคอร์เนลก็ทำในสิ่งที่เคอร์เนลทำ 05:27, ถูกย้อนกลับ สายเกินไปสำหรับใครก็ตามที่รีบูต: ไดรเวอร์โหลดตั้งแต่ต้นของ การบูต, อ่านไฟล์เดิม, และล่มอีกครั้ง Boot loop ทำไมถึงเป็นไปได้? กฎคือการกำหนดค่าที่ผลักจากคลาวด์ ดังนั้นโค้ดจึงไม่ได้ข้ามโค้ด

1:16 pipeline ตัวแปลภาษาไม่มีการตรวจสอบขอบเขต; มันเชื่อมั่นตัวตรวจสอบความถูกต้อง และตัวตรวจสอบความถูกต้องเชื่อมั่นการประกาศ และทั้งหมดรันในโหมดเคอร์เนล ซึ่งตัวชี้ที่ผิดไม่ใช่ข้อยกเว้น แต่เป็น page fault ที่ Windows บอกว่าไม่สามารถป้องกันได้ด้วย try-except Patrick Wardle อ่านมันจาก crash dump ในบ่ายวันนั้น: ดัชนีศูนย์ x สิบสี่ ช่อง 21 การแก้ไขเป็นแบบแมนนวล Safe Mode, ลบ C-00000291, รีบูต สำหรับ BitLocker ให้พิมพ์รหัส

1:43 กู้คืน 48 หลัก ที่อยู่บน เซิร์ฟเวอร์ซึ่งเป็นสีน้ำเงินเช่นกัน git blame CrowdStrike, หกสิบห้าเปอร์เซ็นต์: RCA ระบุข้อค้นพบหกประการ และข้อค้นพบที่หกคือประโยคเต็ม: Template Instances ควรมี staged deployment การออกแบบโหมดเคอร์เนล ยี่สิบห้า: CrowdStrike บอกว่า Windows ไม่สามารถ โฮสต์ความปลอดภัยนอกเคอร์เนลได้ Microsoft บอกว่าไม่ใช่เหตุการณ์ของ Microsoft และ page fault ไม่สนใจ

2:05 วันศุกร์, สิบ ข้อความ commit บอกว่าไม่ใช่โค้ด รัศมีการระเบิด: อุปกรณ์ 8.5 ล้านเครื่อง, น้อยกว่าหนึ่งเปอร์เซ็นต์ของ Windows Delta ยกเลิกเที่ยวบินเจ็ดพันเที่ยวและฟ้องร้องเรียกค่าเสียหายห้าร้อยล้าน รวมถึง Microsoft บริษัทประกันภัยประมาณการค่าใช้จ่ายของ Fortune 500 ใกล้ห้าพันล้าน Hacker News: สี่พันห้าร้อยคะแนน ความย้อนแย้ง: การอัปเดตที่ตั้งใจจะตรวจจับเทคนิคการโจมตีแบบใหม่ กลับเป็นสาเหตุของการโจมตีเสียเอง คำตัดสิน, ภายหลังเกิดเหตุ: SHIP IT, อย่างฉิวเฉียด

2:27 ตรวจสอบขอบเขตภายในหกวัน, staged rings, การควบคุมการอัปเดตเนื้อหาโดยลูกค้า การตรวจสอบภายนอกสองครั้ง อย่างฉิวเฉียด เพราะทั้งหมดนั้นเป็นแนวปฏิบัติมาตรฐานอยู่แล้ว วันจันทร์: ไม่ว่าเอเจนต์ของคุณจะดึงอะไรจากคลาวด์ ก็จะได้ canary ring การกำหนดค่าคือโค้ด ณ ขณะที่บางอย่างแยกวิเคราะห์มันในที่ที่ไม่สามารถเกิดข้อผิดพลาดได้ ส่งเหตุการณ์ที่คุณยังไม่ได้รับอนุญาตให้พูดถึงให้ฉัน ในความคิดเห็น หรือที่ daily diff dot dev และนั่นคือ diff สำหรับวันนี้

2:48 ผม Niko จาก Axrisi รวมอย่างมีความรับผิดชอบ

แหล่งที่มา

  1. CrowdStrike, Root Cause Analysis — Channel File 291 (Aug 6, 2024, 12 pp.)www.crowdstrike.com
  2. CrowdStrike, Executive Summary of the RCA (Aug 6, 2024)www.crowdstrike.com
  3. CrowdStrike, Preliminary Post Incident Review (Jul 24, 2024)www.crowdstrike.com
  4. CrowdStrike, Remediation and Guidance Hub — Channel File 291 (the workaround steps)www.crowdstrike.com
  5. CrowdStrike, tech alert of Jul 19, 2024 (archived: Safe Mode → delete C-00000291*.sys → BitLocker key)web.archive.org
  6. Microsoft, David Weston, "Helping our customers through the CrowdStrike outage" (Jul 20, 2024; the 8.5 million figure)blogs.microsoft.com
  7. Delta Air Lines, Form 8-K (Aug 8, 2024; ~7,000 cancellations, at least $500 million)www.sec.gov
  8. Adam Meyers (CrowdStrike SVP), written testimony, House Homeland Security Subcommittee (Sep 24, 2024)homeland.house.gov
  9. George Kurtz on X, Jul 19, 2024, 09:45 UTCx.com
  10. Patrick Wardle on X, Jul 19, 2024 (the crash-dump index 0x14)x.com
  11. Hacker News, Jul 19, 2024 — "CrowdStrike Update: Windows Bluescreen and Boot Loops" (4,489 points)news.ycombinator.com
  12. The Guardian, Jul 24, 2024 — "CrowdStrike global outage to cost US Fortune 500 companies $5.4bn" (Parametrix estimate)www.theguardian.com
  13. Hacker News, Jul 21, 2024 — "Initial details about why CrowdStrike's CSAgent.sys crashed" (519 points)news.ycombinator.com
  14. Wikipedia — 2024 CrowdStrike-related IT outagesen.wikipedia.org

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

postmortem · th · 12 ก.ย. 2569

Regex ทำให้ Cloudflare ล่มเป็นเวลา 27 นาที

2 กรกฎาคม 2019, 13:42 UTC: กฎใหม่หนึ่งข้อสำหรับ Web Application Firewall ของ Cloudflare ใช้งานจริงในกว่า 180 เมืองในเวลาประมาณสองวินาที เป็นกฎ XSS ในโหมดจำลอง ดังนั้นจึงไม่บล็อกอะไรเลย แต่ยังคงทำงานใน

3:00 ↗
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 ↗
postmortem · th · 19 ก.ย. 2569

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

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

2:57 ↗