การละเมิดความปลอดภัยแพ็กเกจ NPM ครั้งใหญ่เปิดเผยช่องโหว่โครงสร้างพื้นฐานสำคัญผ่านการโจมตี Phishing แบบง่าย

ทีมชุมชน BigGo
การละเมิดความปลอดภัยแพ็กเกจ NPM ครั้งใหญ่เปิดเผยช่องโหว่โครงสร้างพื้นฐานสำคัญผ่านการโจมตี Phishing แบบง่าย

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

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

แพ็คเกจและเวอร์ชันที่ถูกบุกรุก:

ไทม์ไลน์:

  • 8 กันยายน: ส่งอีเมลฟิชชิ่งให้กับผู้ดูแล
  • ภายใน 4 ชั่วโมง: ทีม DuckDB สังเกตเห็นการบุกรุก
  • การตอบสนองทันที: เวอร์ชันถูกยกเลิกและลบโดย NPM
  • เผยแพร่เวอร์ชันใหม่ที่ปลอดภัย: 1.3.4/1.30.0

มาตรการความปลอดภัยปัจจุบันไม่เพียงพอต่อการต่อสู้กับภัยคุกคามสมัยใหม่

เหตุการณ์นี้ได้จุดประกายการถกเถียงอย่างเข้มข้นเกี่ยวกับว่าแนวทางปฏิบัติด้านความปลอดภัยที่มีอยู่เพียงพอหรือไม่สำหรับการป้องกันโครงสร้างพื้นฐานซอฟต์แวร์ที่สำคัญ แม้ว่า NPM จะกำหนดให้ใช้การยืนยันตัวตนแบบสองขั้นตอนสำหรับแพ็กเกจยอดนิยม แต่ระบบปัจจุบันที่ใช้รหัสตามเวลากลับเสี่ยงต่อการโจมตีแบบ man-in-the-middle นี้ ผู้เชี่ยวชาญด้านความปลอดภัยกำลังเรียกร้องให้นำวิธีการยืนยันตัวตนขั้นสูงมาใช้ทันที

ชุมชนกำลังผลักดันอย่างหนักให้ใช้ passkeys และ hardware security keys ซึ่งออกแบบมาให้ไม่สามารถ phish ได้เนื่องจากจะตรวจสอบตัตนของเว็บไซต์ก่อนส่งข้อมูลการยืนยันตัวตนใดๆ ไม่เหมือนกับรหัสการยืนยันตัวตนแบบสองขั้นตอนแบบดั้งเดิมที่สามารถถูกดักจับได้ ระบบเหล่านี้ถูกผูกมัดทางการเข้ารหัสกับโดเมนเฉพาะ ทำให้เว็บไซต์ปลอมไร้ประโยชน์แม้ว่าจะดูเหมือนของจริงทุกประการ

ระบบจัดการแพ็กเกจต้องการการเปลี่ยนแปลงพื้นฐาน

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

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

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

การปรับปรุงความปลอดภัยที่แนะนำ:

  • Passkeys/Hardware Tokens: การยืนยันตัวตนแบบป้องกันการฟิชชิ่งที่ผูกกับโดเมนเฉพาะ
  • Package Signing: การตรวจสอบความถูกต้องของซอฟต์แวร์ด้วยการเข้ารหัสลับ
  • Email Authentication: การลงนาม GPG ในการสื่อสารอย่างเป็นทางการทั้งหมด
  • Publishing Delays: ระยะเวลาพักสำหรับแพ็กเกจเวอร์ชันใหม่
  • Enhanced Monitoring: การตรวจจับรูปแบบกิจกรรมบัญชีที่ผิดปกติ

ผลกระทบในวงกว้างต่อความปลอดภัยห่วงโซ่อุปทานซอฟต์แวร์

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

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

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

อ้างอิง: DuckDB NPM packages 1.3.3 และ 1.29.2 ถูกบุกรุกด้วยมัลแวร์