การโจมตี Supply Chain ขนาดใหญ่บน NPM ส่งผลกระทบต่อแพ็กเกจกว่า 180 รายการด้วยมัลแวร์ที่สามารถจำลองตัวเองได้

ทีมชุมชน BigGo
การโจมตี Supply Chain ขนาดใหญ่บน NPM ส่งผลกระทบต่อแพ็กเกจกว่า 180 รายการด้วยมัลแวร์ที่สามารถจำลองตัวเองได้

การโจมตี supply chain ที่ซับซ้อนได้เข้าโจมตีระบบนิเวศ NPM โดยส่งผลกระทบต่อแพ็กเกจกว่า 180 รายการด้วยมัลแวร์ที่สามารถจำลองตัวเองได้และแพร่กระจายเหมือนหนอนดิจิทัล การโจมตีครั้งนี้ได้รับการตั้งชื่อว่า Shai Hulud ตามชื่อหนอนทรายยักษ์จากซีรีส์ Dune และถือเป็นหนึ่งในการโจมตีที่กว้างขวางที่สุดต่อ repository แพ็กเกจ JavaScript จนถึงปัจจุบัน

สстатิสติการโจมตี:

  • แพ็กเกจที่ถูกบุกรุก: มากกว่า 180 แพ็กเกจ
  • ขนาดมัลแวร์: 3.6MB minified bundle
  • ระบบเป้าหมาย: Linux และ macOS (ยกเว้น Windows โดยเจตนา)
  • วิธีการโจมตี: การขโมย authentication token ของ NPM และการเผยแพร่แพ็กเกจแบบอัตโนมัติ

การออกแบบมัลแวร์ที่แพร่กระจายตัวเอง

มัลแวร์ทำงานในรูปแบบของหนอนที่สามารถจำลองตัวเองได้และแพร่กระจายไปยังแพ็กเกจใหม่โดยอัตโนมัติเมื่อได้รับการเข้าถึงระบบของนักพัฒนา เมื่อติดตั้งแล้ว โค้ดที่เป็นอันตรายจะค้นหา token การยืนยันตัวตนของ NPM และใช้มันในการเผยแพร่เวอร์ชันที่ติดเชื้อของแพ็กเกจอื่นๆ ที่นักพัฒนาดูแลอยู่ สิ่งนี้สร้างผลกระทบแบบขั้นบันไดที่แต่ละแพ็กเกจที่ถูกโจมตีกลายเป็นจุดเริ่มต้นสำหรับการติดเชื้อเพิ่มเติม

การโจมตีมุ่งเป้าไปที่ระบบ Linux และ macOS โดยเฉพาะ และจงใจข้าม Windows environments มัลแวร์รวมถึง bundle ขนาด 3.6MB ที่ถูก minified แล้วซึ่งจัดการกับการขโมย credential การสำรวจระบบ และการแพร่กระจายอัตโนมัติไปยังแพ็กเกจใหม่

การเก็บเกี่ยว Credential ของนักพัฒนา

นอกจากการแพร่กระจายผ่านระบบนิเวศ NPM แล้ว มัลแวร์ยังค้นหา credential ที่ละเอียดอ่อนที่เก็บไว้ในระบบที่ติดเชื้ออย่างแข็งขัน มันมุ่งเป้าไปที่ AWS access keys, GitHub tokens และวัสดุการยืนยันตัวตนอื่นๆ ที่อาจให้การเข้าถึง cloud infrastructure และ source code repositories แนวทางที่มีจุดประสงค์คู่นี้ทำให้การโจมตีอันตรายเป็นพิเศษ เนื่องจากอาจนำไปสู่การโจมตีระบบที่กว้างขวางกว่าเพียงแค่ package repositories

การโจมตีแสดงให้เห็นว่าภัยคุกคาม supply chain สมัยใหม่ได้วิวัฒนาการจากการฉีด code อย่างง่ายไปสู่การดำเนินการเก็บเกี่ยว credential ที่ซับซ้อนซึ่งสามารถคงอยู่ข้ามหลายระบบและบริการได้

ตัวอย่างแพ็กเกจที่ได้รับผลกระทบ:

  • ARCVinylcolor
  • @ctrl/tinycolor
  • แพ็กเกจ NPM ต่างๆ ของ CrowdStrike
  • แพ็กเกจหลายตัวในระบบนิเวศ "nx"
  • แพ็กเกจที่มีการดาวน์โหลดหลายล้านครั้งต่อสัปดาห์
การแจ้งเตือนด้านความปลอดภัยที่เน้นการโจมตีห่วงโซ่อุปทาน NPM และแพ็กเกจที่ถูกบุกรุก
การแจ้งเตือนด้านความปลอดภัยที่เน้นการโจมตีห่วงโซ่อุปทาน NPM และแพ็กเกจที่ถูกบุกรุก

การตอบสนองของชุมชนและกลยุทธ์การบรรเทา

ชุมชนนักพัฒนา JavaScript ได้ตอบสนองด้วยการผสมผสานระหว่างความกังวลและโซลูชันที่ปฏิบัติได้จริง นักพัฒนาหลายคนกำลังพิจารณาใหม่เกี่ยวกับแนวทางการจัดการ dependency โดยบางคนสนับสนุนการควบคุมที่เข้มงวดกว่าในการติดตั้งแพ็กเกจ และคนอื่นๆ เรียกร้องให้มีการเปลี่ยนแปลงพื้นฐานในวิธีที่ระบบนิเวศจัดการกับ third-party code

นี่เป็นปัญหาทางวัฒนธรรมกับนักพัฒนาที่พบว่าการมี dependency (แบบ transitive) หลายร้อยรายการเป็นเรื่องปกติ และจากนั้นก็ปฏิบัติตามกระบวนการที่ในทุกเจตนาและจุดประสงค์ จะอัปเดตมันแบบอัตโนมัติอย่างไม่มองเห็น

Package managers หลายตัวได้ใช้มาตรการป้องกันแล้ว PNPM ขณะนี้บล็อก lifecycle scripts โดยค่าเริ่มต้นเว้นแต่จะได้รับการอนุญาตอย่างชัดเจน ในขณะที่เครื่องมืออื่นๆ กำลังสำรวจฟีเจอร์การติดตั้งแบบล่าช้าที่จะป้องกันไม่ให้แพ็กเกจที่เผยแพร่ใหม่ถูกติดตั้งโดยอัตโนมัติในช่วงเวลาที่กำหนด

เครื่องมือลดความเสี่ยงด้านความปลอดภัย:

  • PNPM: บล็อก lifecycle scripts โดยค่าเริ่มต้น ต้องการการอนุญาตเป็นรายการขาว
  • การติดตั้งแบบล่าช้า: การตั้งค่า minimumReleaseAge เพื่อป้องกันการติดตั้งแพ็กเกจใหม่ทันที
  • การสแกนแพ็กเกจ: การตรวจจับอัตโนมัติโดย Socket.dev , Aikido Security และผู้ให้บริการด้านความปลอดภัยอื่นๆ
  • OIDC Publishing: ผู้เผยแพร่ที่เชื่อถือได้เพื่อลดช่องโหว่จาก token
โพสต์บล็อกที่กล่าวถึงการโจมตีห่วงโซ่อุปทานและการตอบสนองของชุมชนในระบบนิเวศ JavaScript
โพสต์บล็อกที่กล่าวถึงการโจมตีห่วงโซ่อุปทานและการตอบสนองของชุมชนในระบบนิเวศ JavaScript

ผลกระทบต่อระบบนิเวศในวงกว้าง

การโจมตีครั้งนี้เน้นย้ำถึงความท้าทายด้านความปลอดภัยพื้นฐานที่ขยายไปนอกเหนือจาก NPM ไปยังระบบนิเวศแพ็กเกจอื่นๆ รวมถึง PyPI ของ Python, Cargo ของ Rust และ Go modules วัฒนธรรมของ micro-dependencies ในระบบนิเวศ JavaScript สร้างพื้นผิวการโจมตีที่ใหญ่ผิดปกติ โดยโปรเจ็กต์ทั่วไปมักจะรวม transitive dependencies หลายร้อยหรือหลายพันรายการ

เหตุการณ์นี้ได้ทำให้เกิดการอภิปรายใหม่เกี่ยวกับความจำเป็นในการมี standard libraries ที่ดีกว่า ข้อกำหนดการเซ็นแพ็กเกจ และการสแกนความปลอดภัยที่แข็งแกร่งกว่าก่อนที่แพ็กเกจจะพร้อมใช้งานสำหรับการติดตั้ง นักพัฒนาบางคนเรียกร้องให้ NPM ใช้การยืนยันตัวตนแบบสองปัจจัยแบบบังคับสำหรับผู้เผยแพร่ทั้งหมดและแนะนำช่วงระยะเวลาพักสำหรับแพ็กเกจที่เผยแพร่ใหม่

การโจมตีเป็นการเตือนใจอย่างชัดเจนว่าการพึ่งพาอย่างหนักของการพัฒนาซอฟต์แวร์สมัยใหม่ต่อ third-party packages สร้างความเสี่ยงด้านความปลอดภัยที่สำคัญซึ่งต้องการทั้งโซลูชันทางเทคนิคและการเปลี่ยนแปลงทางวัฒนธรรมในวิธีที่นักพัฒนาเข้าหาการจัดการ dependency

อ้างอิง: ARCVinylcolor and 46+ NPM Packages Compromised

การแสดงภาพความกังวลด้านความปลอดภัยที่เกี่ยวข้องกับระบบนิเวศแพ็กเกจในวงกว้างจากการโจมตี supply chain ที่เกิดขึ้นเมื่อเร็วๆ นี้
การแสดงภาพความกังวลด้านความปลอดภัยที่เกี่ยวข้องกับระบบนิเวศแพ็กเกจในวงกว้างจากการโจมตี supply chain ที่เกิดขึ้นเมื่อเร็วๆ นี้