1 ความคิดเห็น

 
GN⁺ 2024-07-21
ความคิดเห็นบน Hacker News
  • ถ้าเป็นระบบที่อยู่ใน เส้นทางสำคัญ ขนาดนี้ ก็ไม่ควรผ่าน CI pipeline ที่ถูกต้องมาได้
    ผมไม่ได้เข้มงวดกับ automated test มากนัก แต่สำหรับระบบที่สำคัญระดับนี้ การจัดการสถานะควรต้องดีเป็นพิเศษ
    ไม่ควร deploy ขึ้น production หากไม่มี integration test สำหรับทุกสภาพแวดล้อมที่อ้างว่ารองรับ และเป็นไปไม่ได้ที่บริษัทขนาดและความสำคัญระดับนี้จะไม่มีแม้แต่ staging หรือ dev test server ที่ตรวจสอบ image ทั้งหมดที่รองรับ

    • ข้อมูลยังมีไม่พอ แต่สันนิษฐานกันมากเกินไป เช่น ในความเป็นจริงอาจมีไฟล์ปกติอยู่ และจุดที่ล้มเหลวอาจเป็น โค้ดที่อัปโหลด artifact ที่ผ่านการตรวจสอบแล้วขึ้น CDN ก็ได้
      ถ้าเป็นแบบนั้น ปัญหาอาจเกิดขึ้นได้หลังผ่านการตรวจสอบจำนวนมากก่อน deploy แล้ว ผมยังไม่อยากรีบด่วนสรุปว่าเขาไม่ได้ทดสอบการส่งออกไปยัง Windows เลย
    • ใครบอกว่าไม่มีสภาพแวดล้อมแบบนั้น? ใครบอกว่าไม่ได้ผ่านการทดสอบทั้งหมดนั้น? ตอนนี้มี ข้อสันนิษฐานมากเกินไป
    • จำได้ว่าเมื่อหลายปีก่อน ตอนสัมภาษณ์กับทีมที่ดูแลภาษาที่รันในเคอร์เนล พวกเขาบอกว่า CI รัน ชุดผสมของเครื่อง/OS และการตั้งค่า 20,000~40,000 แบบ
      ในจำนวนนั้นก็น่าจะมี Windows พื้นฐานอยู่ด้วยแน่ ๆ
    • ถ้าเกณฑ์การยอมรับคือ “หากมีลายเซ็นข้อมูลที่ไม่ถูกต้อง ให้ป้องกันไม่ให้เครื่องบูต” เพราะอาจหมายถึงการ deploy ที่เสียหายหรือเครือข่ายมีปัญหา การไม่บูตก็อาจเป็นพฤติกรรมที่ถูกต้องเมื่อมองย้อนหลัง
      เป็นไปได้ว่าออกแบบไว้ว่าเครื่องไม่ควรบูตจนสมบูรณ์จนกว่าจะดาวน์โหลดไฟล์ที่มีลายเซ็นถูกต้องมาได้
    • มองได้ยากว่าไฟล์ที่เต็มไปด้วย null character ทั้งหมดจะเป็น artifact จาก automated build pipeline
      ผมขอเดาว่าน่าจะมีบางอย่างถูก build และผ่าน CI test แล้ว จากนั้นระบบพังใน ขั้นตอนปลายทาง ที่คัดลอกไฟล์เพื่อเตรียม deploy แต่ตอนนี้ทั้งหมดก็เป็นแค่การคาดเดาเท่านั้น
  • ที่เกี่ยวข้องกัน ผมว่าไม่ใช่เรื่องบังเอิญที่หายนะทางเทคโนโลยีครั้งใหญ่ที่สุดสองครั้งในประวัติศาสตร์ (CrowdStrike และการแฮ็ก SolarWinds เมื่อหลายปีก่อน) ล้วนมาจาก ซอฟต์แวร์ความปลอดภัย ที่หลุดการควบคุม
    ผมคิดว่าคนสายแฮกเกอร์ที่อยากเริ่มบริษัทซอฟต์แวร์ความปลอดภัย มีแนวโน้มจะสนใจน้อยที่สุดในการทำส่วนที่น่าเบื่อของวัฒนธรรมที่เน้นกระบวนการ SolarWinds ถูกเปิดเผยว่ามีวัฒนธรรมความปลอดภัยภายในบริษัทที่เลวร้าย และกรณีนี้ก็ดูมีแนวโน้มสูงว่าเมื่อพบสาเหตุรากแล้ว จะเป็นกระบวนการ deploy ที่เร็วและหลวม

    • ไม่เห็นด้วย บริษัทความปลอดภัยมักเป็นโรค “ใหญ่เกินกว่าจะล้มได้” และเงินก็ไหลเข้าง่าย เพราะลูกค้าอยากติ๊กช่องให้ครบ
      ความปลอดภัยไม่ใช่ผลิตภัณฑ์ที่ซื้อได้ แต่เป็นวัฒนธรรม และต้องปลูกฝังตั้งแต่วันแรกด้วยความพยายามเชิงรุกและงานหนัก ไม่มีผลิตภัณฑ์ใดในตลาดที่มอบความปลอดภัยให้ได้ มีแต่ผลิตภัณฑ์ให้โยนความรับผิดชอบเมื่อเกิดปัญหาเท่านั้น
    • เดิมที CrowdStrike ก่อตั้งและมีสำนักงานใหญ่ใน Irvine, California
      องค์กรวิศวกรรมช่วงแรกส่วนใหญ่ทำงานแบบรีโมต/จากบ้าน หรืออยู่ที่ Irvine และเมื่อบริษัทขยายตัวก็เพิ่มสำนักงานที่ Sunnyvale จากนั้นภายหลังย้ายสำนักงานใหญ่ทางการไป Austin, TX
      ในช่วงไม่กี่ปีมานี้ยังขยายงานวิศวกรรมในต่างประเทศด้วย ซึ่งอาจรวมถึง offshoring
    • เป็นสมมติฐานที่แยกกัน แต่เข้ากันได้ ซอฟต์แวร์ความปลอดภัยโดยทั่วไปต้องการ สิทธิ์เข้าถึงที่กว้างและทรงพลัง
      ดังนั้นเมื่อเกิดความผิดพลาดหรือถูกเจาะ ผลกระทบจึงมักใหญ่กว่ามาก
    • ประวัติของอุตสาหกรรมนี้ก็ค่อนข้างแปลกทีเดียว แค่นึกขึ้นมาได้ทันทีก็มี CrowdStrike, SolarWinds, Kaspersky, https://en.wikipedia.org/wiki/John_McAfee
      น่าจะยังมีอย่างอื่นที่ผมลืมไปอีก อาจมีโครงสร้างคล้ายปัญหา self-selection ที่รบกวนอุตสาหกรรมกัญชาถูกกฎหมายก็ได้
    • ซอฟต์แวร์ความปลอดภัยต้องการ การเข้าถึงระดับเคอร์เนล ถ้ามีอะไรพัง ก็จะนำไปสู่ boot loop และ crash
      ซอฟต์แวร์ส่วนใหญ่อื่น ๆ ไม่ต้องการการเข้าถึงระดับลึกขนาดนั้น และแม้จะ crash ก็ไม่ลากทั้งระบบล่มไปด้วย อีกทั้งยังอัปเกรดอัตโนมัติอย่างรวดเร็วได้
  • ถ้าจะพยายามหาด้านบวกของภัยพิบัติครั้งนี้ ก็มีความหวังเล็ก ๆ ว่าองค์กรต่าง ๆ อาจกลับมาคิดใหม่เรื่อง การเข้าถึงระดับเคอร์เนล
    ไม่อาจถือได้ว่าบริษัทเกมไหน ๆ ก็มีความสามารถพอจะใช้ซอฟต์แวร์ anti-cheat ระดับเคอร์เนล

    • เว้นแต่ Microsoft จะเข้มงวดอย่างมาก ผมไม่คิดว่าซอฟต์แวร์เกมจะได้รับผลกระทบ
      ถึงอย่างนั้น Microsoft ก็มีบริษัทเกมในเครือ ดังนั้นมีแนวโน้มจะยังคงให้ hook สำหรับเกมต่อไป องค์กรธุรกิจคงไม่สะดุ้งกับแนวทาง anti-cheat ของ Riot เพราะพวกเขาไม่ได้ติดตั้ง LoL บนเครื่องทำงาน
    • คู่ต่อสู้ที่ต้องสู้ด้วยคือคนซื้อ cheat ที่บอกว่า “ไดรเวอร์ระดับเคอร์เนล แบบสุ่ม ๆ? ไม่มีปัญหา!”
    • ผมคิดว่า anti-cheat ส่วนใหญ่ควรเป็นแบบ อิงพฤติกรรมฝั่งเซิร์ฟเวอร์
    • เท่าที่รู้ บน macOS อย่างน้อยก็เข้าถึงเคอร์เนลไม่ได้ ซึ่งถือว่าโชคดีอยู่บ้าง
  • เรื่องนี้ดูเหมือนไฟล์ทดสอบแบบที่คน QA น่าจะลองเป็นลำดับที่สองหรือสาม ถัดจากไฟล์เปล่าและไฟล์ที่ถูกต้องขั้นต่ำ ระดับของ ความไร้ความสามารถรอบด้าน ที่เผยออกมาตรงนี้น่าตกใจมาก
    ในตลาดที่แข่งขันกันสร้างความประทับใจให้ผู้บริหารที่ไม่ใช่สายเทคนิคด้วยการนำเสนอ ก็ไม่น่าแปลกใจที่บริษัทที่เก่งเชิงเทคนิคไม่ได้มีความได้เปรียบเหนือบริษัทที่ไร้ความสามารถ
    ช่วงหลังผมได้อ่านคำพิพากษาคดี Craig Wright https://www.judiciary.uk/judgments/copa-v-wright/ เขาอ้างเท็จว่าตัวเองคือ Satoshi Nakamoto แต่กลับไม่มีความสามารถทางเทคนิคพื้นฐานแม้ในสาขาที่เขาอ้างว่าเป็นผู้เชี่ยวชาญระดับโลก ตอนอยู่บนคอกพยาน เขายังไม่รู้ด้วยซ้ำว่า ‘unsigned’ หมายถึงอะไร และดูเหมือนเขาหลอกผู้คนมาตั้งแต่ยุค 90 ด้วยศัพท์เทคนิค เดโมที่จัดฉาก และเอกสารปลอม ขณะทำงานด้านความปลอดภัยให้บริษัทใหญ่ ๆ
    George Kurtz ผู้ก่อตั้งและ CEO ของ CrowdStrike เคยเป็น CTO ตอนที่ McAfee ทำเรื่องเกือบเดียวกันนี้เมื่อ 14 ปีก่อน: https://old.reddit.com/r/sysadmin/comments/1e78l0g/can_crowd... https://en.wikipedia.org/wiki/George_Kurtz
    CrowdStrike เองก็ทำให้เกิดปัญหาเดียวกันบน Debian stable เมื่อ 3 เดือนก่อน: https://old.reddit.com/r/debian/comments/1c8db7l/linuximage6...
    น่ากลัวมากที่ข้อกำหนด PCI compliance ผลักดันให้ CrowdStrike และแอนติไวรัสเข้าไปอยู่แทบทุกมุมของโครงสร้างพื้นฐาน IT ในปัจจุบัน

    • น่าขันเช่นกันที่ compliance กลายเป็น single point of failure ขนาดมหึมา และสร้างช่องโหว่ที่ใหญ่ที่สุดขึ้นมา
      แต่ก็นะ กฎระเบียบของรัฐก็เป็นแบบนี้แหละ
    • สิ่งที่เลวร้ายที่สุดของเหตุการณ์นี้คือ ตอนนี้ผู้เล่นระดับรัฐได้พิมพ์เขียวที่ชัดเจนสำหรับ การโจมตีโครงสร้างพื้นฐานครั้งใหญ่ แล้ว
    • ตลกดีที่คนในลิงก์โกรธที่มีคนเรียกเรื่องนี้ว่า “Microsoft outage” แล้วบอกว่า “เป็นความผิดของ CrowdStrike”
      แต่นี่ก็เป็นความล้มเหลวของ Microsoft ด้วย และในภาพใหญ่กว่านั้นก็เป็นอีกหนึ่งความล้มเหลวของทั้งอุตสาหกรรม
      ต้องเกิดเรื่องแบบนี้ซ้ำอีกกี่ครั้ง ถึงจะมีการปฏิรูปอุตสาหกรรมที่ทำให้เราสร้างระบบที่ปลอดภัยและเชื่อถือได้แบบที่เราศึกษากันมาตลอด 70 ปีได้? รู้สึกเหมือนปี 1988 กำลังวนกลับมาอีกครั้ง
    • ค่อนข้างน่าขันที่ Craig Wright เคยเสนอว่าอย่าให้คอมพิวเตอร์หรือคลัสเตอร์แห่งเดียวออกใบรับรองดิจิทัล แต่ให้นำขึ้นไปไว้บน blockchain
      ถ้าอยู่ที่เดียวก็จะกลายเป็นเป้า แต่เครือข่ายแบบ peer-to-peer ทนต่อการโจมตีได้มากกว่ามาก
      ถ้าปัญหาครั้งนี้เกี่ยวกับการที่ root certificate ของคอมพิวเตอร์ทุกเครื่องถูกแทนที่ด้วยของ CrowdStrike ใบรับรองที่ลงทะเบียนบน blockchain ก็อาจเป็นทางแก้ได้ ผมไม่ใช่ผู้เชี่ยวชาญด้านคริปโตกราฟี แต่ฟังดูมีเหตุผล
      เพิ่มเติมคือ พอได้ฟังคำอธิบาย blockchain ของ Craig Wright ผมถึงเริ่มเข้าใจ whitepaper ของ Bitcoin ได้ค่อนข้างมาก เขาอาจไม่ใช่ coder ชั้นยอด แต่การเป็นนักคณิตศาสตร์ก็ไม่ได้ไร้ประโยชน์ในด้านความปลอดภัยใช่ไหม?
    • ไม่อยากให้ฟังดูเหมือนทฤษฎีสมคบคิด แต่ตอนนี้ยังเร็วเกินไปที่จะใช้ Hanlon’s razor ตัดความเป็นไปได้เรื่องเจตนาร้ายออกไป
      ความผิดพลาดส่วนใหญ่ไม่ได้ไร้เหตุผลในระดับทั่วโลกแบบนี้ ดูเหมือนความผิดพลาดครั้งใหญ่ที่สุดเท่าที่เคยมีมา คล้าย Y2K ที่ไม่เคยเกิดขึ้นจริง
  • บทความนี้ผิด และไม่มีวิธีอื่นที่จะเอาลงจากหน้าแรกได้ เลย flag ไว้
    การพบไฟล์ที่เป็น 0 ทั้งหมดบนคอมพิวเตอร์ที่พัง ไม่ได้แปลว่าไฟล์นั้นถูก แจกจ่ายมาเป็น 0 ทั้งหมดตั้งแต่แรก
    https://x.com/craiu/status/1814339965347610863
    https://x.com/cyb3rops/status/1814329155833516492

    • CrowdStrike มีพฤติกรรมที่หากไฟล์ที่กำลังส่งผ่าน network socket ตรงกับ signature ของมัลแวร์ ก็จะ แทนที่ไฟล์นั้นด้วย 0
      ถ้าไฟล์เหล่านี้คือไฟล์ signature ของมัลแวร์เอง ก็ไม่น่าแปลกใจถ้าจะมีการ match เกิดขึ้น
    • ในที่สุด CrowdStrike ก็ยืนยันด้วยตัวเอง: https://www.crowdstrike.com/blog/tech-analysis-channel-file-...
  • ตรงกับสิ่งที่ได้ยินมาจากเพื่อนที่รู้จักคนทำงานที่ CrowdStrike เกี่ยวกับบั๊กนี้
    บั๊กซ่อนตัวอยู่ใน kernel driver มาหลายปี และถูกจุดชนวนเมื่อมีข้อมูลที่มีข้อบกพร่องเข้ามา ข้อมูลนั้นถูกเพิ่มในขั้นตอน post-processing ของการอัปเดตการตั้งค่า หลังการทดสอบแล้ว แต่ก่อนจะคัดลอกไปยังเซิร์ฟเวอร์อัปเดตที่ client จะดึงไป
    ดูเหมือนชุดทดสอบของ CrowdStrike จะใช้ได้ดีกับข้อมูลการตั้งค่าเอง แต่ไม่สามารถจับปัญหาก่อนออก production ได้ เพราะกำลังทดสอบสิ่งที่ผิดอยู่
    ถ้ามี postmortem ออกมา ก็หวังว่าจะยอมรับปัญหานี้ และอธิบายว่าจะทำอะไรเพื่อป้องกัน ความล้มเหลวของกระบวนการที่ส่งผลกระทบทั่วโลก อีกครั้ง

    • ในที่สุดก็มีคำอธิบายที่พอฟังขึ้นบ้าง
      ผู้ดูแลระบบที่มีความสามารถน่าจะปิดฟีเจอร์ auto-update กันหมดตั้งแต่ Greenland ไปจนถึง New Zealand ภายในตอนนี้ บล็อกด้วย firewall และวางแผนเอาผลิตภัณฑ์นี้ออกจากสินทรัพย์เซิร์ฟเวอร์ให้เร็วที่สุดเท่าที่ทำได้
      งบการตลาดของผลิตภัณฑ์คู่แข่งคงเพิ่มขึ้นในไตรมาสนี้
    • CrowdStrike ควรเจออะไรมากกว่าแค่ “ยอมรับ” เรื่องนี้มาก ๆ
      ต่อให้ในสัญญามี “การจำกัดความรับผิด” ก็หวังว่าจะมีการสอบสวนอย่างจริงจัง ค่าปรับ และการไล่เบี้ยทางกฎหมาย
      ขนาดความเสียหายจากเหตุการณ์นี้แทบจะคำนวณไม่ได้ และยิ่งมากขึ้นเมื่อรวมเวลาที่บริษัทและคนทั่วไปต้องเสียไป เช่น คนที่กำลังจะขึ้นเครื่องบินด้วย
      ความประมาทเลินเล่อ แบบนี้ต้องมีราคาที่ต้องจ่าย
  • มีข้ออ้างว่าไฟล์ที่ Kevin Beaumont ได้รับบน Mastodon นั้นแตกต่างกันไปตามลูกค้าแต่ละราย
    https://cyberplace.social/@GossiTheDog/112812454405913406
    เลื่อนลงไปดูอีกเล็กน้อยก็จะเห็น

    • ผมนึกว่า Windows บังคับให้ เคอร์เนลโมดูลทั้งหมดต้องมีลายเซ็น
      ถ้าไม่ใช่แค่การหลุดของไฟล์ทดสอบธรรมดา แต่เป็นสำเนาที่เสียหายหลายชุด ก็น่าสงสัยว่ามันผ่านการตรวจสอบลายเซ็นและถูกเคอร์เนลโหลดได้อย่างไร
  • นี่อาจไม่ใช่เนื้อหาไฟล์ดั้งเดิม แต่เป็นผลจาก การรับมือแบบทำเอง เพื่อหยุดความเสียหายก็ได้
    อาจมีใครบางคนคาดหวังว่าถ้าเขียนทับไฟล์ที่ผิดพลาดด้วยไฟล์ขนาดเท่ากันแต่เป็น 0 ทั้งหมด อัปเดตก็จะไม่ก่ออันตราย
    หรือถ้าตามสมมติฐานว่า “ข้าม QA เพราะช่องโหว่ร้ายแรง” การหยุดการกระจายแพตช์จริงอาจเป็นความพยายามเพื่อลดการเข้าถึงข้อมูลจริงและชะลอการ reverse engineering ช่องโหว่

  • ตามคำอธิบายที่โพสต์บนบอร์ดเทคโนโลยีของ 4chan ปัญหามีสองขั้นตอน
    ไดรเวอร์เคอร์เนลที่มีลายเซ็นชื่อ CSAgent.sys ทำหน้าที่พาร์สไฟล์นิยามไวรัสของ CrowdStrike และไม่ได้จัดการกรณีที่ไฟล์นิยาม malformed ทำให้เกิดการเข้าถึงหน่วยความจำที่ไม่ถูกต้องอย่างเหมาะสม
    มี ไดรเวอร์เคอร์เนลแบบระเบิดเวลา ที่ทำงานได้โดยไม่มีปัญหามาหลายเดือนร่วมกับไฟล์นิยามปกติ แล้วจู่ ๆ เว็บเซิร์ฟเวอร์หรือ CDN ที่ให้ไฟล์นิยามก็เริ่มส่งเนื้อหาผิด เช่น ไฟล์ว่าง ไบต์สุ่ม หรือไฟล์ของซอฟต์แวร์อื่น
    คำอธิบายคือไคลเอนต์อัปเดตดาวน์โหลดสิ่งนี้ลงใต้ C:\Windows\System32\drivers จากนั้น CSAgent.sys อ่านซ้ำและพาร์สจนเจอ PAGE_FAULT_IN_NONPAGED_AREA ทำให้เกิดจอฟ้าและวนรีบูต
    ว่ากันว่าถ้าดูความแตกต่างระหว่าง CSAgent.sys_18511.sys กับ CSAgent.sys_18513.sys จะเห็นร่องรอยว่ามีการเปลี่ยนการตรวจสอบขนาดและขนาดบัฟเฟอร์ เพื่อไม่ให้ไฟล์นิยามที่ผิดพลาดทำให้ล่มในอนาคต

    • ฟังดูเหมือนมี ฟังก์ชันป้องกันไวรัส บางอย่างบนเซิร์ฟเวอร์ที่ให้ไฟล์นิยามไปขัดขวางการอ่านดิสก์ แล้วแทนที่จะส่งข้อผิดพลาด กลับส่งข้อมูลเอาต์พุตเป็น 0
      ถ้าแพ็กเกจแอนติไวรัสบางตัวเป็นสาเหตุจริง ๆ ก็คงตลกไม่น้อย
    • ถ้าเหตุการณ์แบบนี้เกิดขึ้นหลายครั้ง ก็อาจเป็น การโจมตีของแฮ็กเกอร์ ที่เล็งไดรเวอร์เคอร์เนลที่เขียนมาแย่ ๆ
      โดยเฉพาะในบริบทช่วงเลือกตั้งแบบตอนนี้ และบริษัทที่ Trump ชื่นชอบ ก็อาจเป็นการโชว์พลังได้
  • เคยมีกรณีที่ซอฟต์แวร์ความปลอดภัยเปลี่ยนทั้งไฟล์ให้เป็น 0 จนทำให้การคอมไพล์ซอฟต์แวร์พังมาก่อน
    ไม่ได้บอกว่าครั้งนี้เป็นแบบนั้น แต่ก็ไม่ใช่เรื่องน่าประหลาดใจ
    โดยพื้นฐานคือบน Windows ตัวลิงเกอร์เปิดไฟล์ไม่ได้ เพราะมีโปรเซสอื่นล็อกไฟล์ไว้เพื่อสแกน แต่แทนที่จะส่งข้อผิดพลาด กลับเปลี่ยน object code ที่จะถูกลิงก์ให้เป็น 0
    ผู้คนหาสาเหตุไม่เจอ จนกระทั่งเปิดดีบักเกอร์ดู จึงยืนยันได้ว่า object code ก้อนใหญ่ถูก แทนที่ด้วย 0

    • เจอปัญหา Visual Studio เขียนไฟล์ที่เพิ่งคอมไพล์เสร็จไม่ได้มาหลายครั้งเกินไปแล้ว
      แอนติไวรัสไปจับไบนารีที่เพิ่งสร้างขึ้นไว้พอดีในจังหวะที่ mt.exe ต้องเขียน เลยถึงขั้นทำ mt.exe wrapper ที่เพิ่มการ retry เอาไว้ งาน CI build ก็เคยล้มแบบสุ่มเพราะเรื่องนี้เหมือนกัน