Shai hulud - แพ็กเกจ npm - การโจมตีห่วงโซ่อุปทาน

Shai-Hulud: คำอธิบายเกี่ยวกับปัญหาของแพ็กเกจ npm

TL; DR

เมื่อวันที่ 14 กันยายน 2025 นักวิจัยได้ระบุ ไช-ฮูลุดหนอนที่สามารถแพร่พันธุ์ได้เองซ่อนอยู่ภายใน แพ็กเกจ npmเปลี่ยนการอัปเดตการพึ่งพาตามปกติให้เป็นการอัปเดตเต็มรูปแบบ การโจมตีห่วงโซ่อุปทานพบเห็นครั้งแรกใน @ctrl/tinycolor แพ็กเกจ Shai-Hulud จาก Daniel dos Santos Pereira ขโมยข้อมูลลับ ส่งออกผ่าน GitHub repositories และเวิร์กโฟลว์ แล้วเผยแพร่ตัวเองซ้ำบน registry โดยใช้ข้อมูลประจำตัวที่ถูกขโมย ภายในไม่กี่วัน จำนวนแพ็กเกจที่ติดไวรัสเพิ่มขึ้นจากหลายสิบเป็นหลายร้อย ซึ่งเป็นการยืนยันว่า... ไชฮูลุด นี่ไม่ใช่แค่โทรจันธรรมดา แต่เป็นเวิร์มที่ถูกออกแบบมาให้แพร่กระจายโดยอัตโนมัติทั่วระบบนิเวศของ npm

ผลกระทบ: นักพัฒนาหรือผู้ดูแลระบบ CI ที่ติดตั้งแพ็กเกจ npm สาธารณะมีความเสี่ยง

การดำเนินการทันที: บล็อกเวอร์ชันที่รู้จัก เปลี่ยนไปใช้การติดตั้งแบบใช้ไฟล์ล็อกเท่านั้น หมุนเวียนโทเค็น npm และ GitHub ตรวจสอบเวิร์กโฟลว์ และติดตามตัวบ่งชี้การบุกรุก (IoC)

เกิดอะไรขึ้น?

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

สำหรับทีม DevOps บทเรียนนั้นชัดเจน: หากการติดตั้งทุกครั้งสามารถเรียกใช้โค้ดได้ การอัปเดตส่วนประกอบต่างๆ ทุกครั้งก็อาจเป็นจุดอ่อนได้

เวกเตอร์เริ่มต้นที่เป็นไปได้และข้อมูลประจำตัวเป้าหมาย

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

  • ไฟล์การกำหนดค่า npm กดไลก์ .npmrcซึ่งมักจะมีโทเค็นสำหรับเผยแพร่รวมอยู่ด้วย
  • ตัวแปรสภาพแวดล้อม และการตั้งค่าด้วย GitHub PATs และ CI/CD ความลับ
  • จุดสิ้นสุดเมตาเดต้าบนคลาวด์ (AWS, GCP, Azure) ให้ข้อมูลประจำตัวที่มีอายุสั้นสำหรับการเคลื่อนย้ายภายในระบบ

ดังนั้น การขโมยข้อมูลประจำตัวจึงกลายเป็นจุดเริ่มต้น ด้วยโทเค็น npm ที่ถูกต้องและรหัสลับ GitHub ทำให้ Shai-Hulud สามารถจำลองตัวเองไปยังแพ็กเกจและที่เก็บข้อมูลหลายแห่งได้โดยไม่ต้องใช้ความพยายามจากมนุษย์เพิ่มเติม

ผลกระทบต่อผู้บริหารจากการโจมตีห่วงโซ่อุปทาน Shai-Hulud

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

  • การขโมยโทเค็นการเผยแพร่ npm และรหัสลับของ GitHub
  • เผยแพร่ซ้ำไปยังแพ็กเกจ npm อื่นๆ
  • เพิ่มเวิร์กโฟลว์ GitHub Actions ที่เป็นอันตรายเพื่อให้คงอยู่ต่อไป

ใครได้รับผลกระทบ:

ทีมใดก็ตามที่ติดตั้งแพ็กเกจ npm สาธารณะจะมีความเสี่ยง นอกจากนี้ นักพัฒนาที่มีโทเค็น npm หรือ GitHub ที่แคชไว้ก็มีความเสี่ยงสูงเช่นกัน ตัวรัน CI ที่ใช้รหัสลับที่มีขอบเขตกว้างก็มีความเสี่ยงเช่นกัน

ความเสี่ยงทางธุรกิจ

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

วิธีการทำงานของการโจมตีห่วงโซ่อุปทาน Shai-Hulud ในแพ็กเกจ npm

วัตถุประสงค์และแรงจูงใจของผู้โจมตี

แคมเปญนี้มุ่งเน้นการปรับปรุงประสิทธิภาพในสามด้านหลักๆ ดังนี้:

  • วัตถุประสงค์แรกคือ ขโมยข้อมูลประจำตัวในวงกว้าง จากแล็ปท็อปของนักพัฒนาและตัวรัน CI ซึ่งรวมถึงโทเค็นการเผยแพร่ npm, โทเค็น GitHub และข้อมูลรับรองระบบคลาวด์ อันที่จริง การวิเคราะห์หลายครั้งยืนยันว่ามีการเก็บรวบรวมความลับอย่างเป็นระบบ เช่น การเรียกใช้ TruffleHog และการสอบถามปลายทางเมตาเดต้าของระบบคลาวด์
  • วัตถุประสงค์ข้อที่สองคือ เผยแพร่โดยอัตโนมัติ โดยการละเมิดสิทธิ์ในการเผยแพร่ของผู้ดูแลระบบที่ถูกบุกรุก ส่งผลให้ฐานที่มั่นเพียงแห่งเดียวขยายตัวอย่างรวดเร็วเป็นหลายแห่ง เนื่องจากเวอร์ชันที่ติดไวรัสใหม่ของแพ็กเกจอื่นๆ ปรากฏขึ้นโดยไม่ต้องใช้ความพยายามจากมนุษย์เพิ่มเติม
  • วัตถุประสงค์ที่สามคือ คงอยู่และซึมออกได้อย่างน่าเชื่อถือ ผ่านโครงสร้างพื้นฐานของ GitHub ผู้โจมตีสร้าง repository สาธารณะชื่อ “Shai-Hulud” โดยใช้ base64 สองชั้น ข้อมูล.jsonและนอกจากนี้พวกเขายังสร้างเวิร์กโฟลว์ที่เรียงลำดับตามลำดับ ${{ toJSON(secrets) }} และส่งไปยังเว็บฮุคแบบคงที่

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

ภายในเพย์โหลด Shai-Hulud: Bundle.js ในแพ็กเกจ npm

Shai-Hulud จับคู่เป็น ขนาดใหญ่ บรรจุด้วย Webpack และย่อขนาดอย่างมาก ไฟล์ JavaScript (Bundle.js(ประมาณ 3–3.7 เมกะไบต์) ที่ดำเนินการจาก หลังการติดตั้ง เกี่ยวเข้า package.json. เพราะเหตุนี้, ทุกครั้งที่มีการติดตั้ง ระบบจะเรียกใช้เพย์โหลดโดยอัตโนมัติ การออกแบบนี้จะซ่อนตัวระบุ ลดความซับซ้อนของการควบคุม และรวมตรรกะทั้งหมดไว้ในไฟล์เดียวที่จะทำงานระหว่างการติดตั้ง นักวิเคราะห์ยืนยันอย่างสม่ำเสมอถึงการรวมไฟล์ด้วย Webpack ขนาดไฟล์ที่ผิดปกติ และการทำงานระหว่างการติดตั้ง

ลักษณะการปกปิดข้อมูลและการต่อต้านการวิเคราะห์ที่คุณจะพบได้ในตัวอย่าง:

  • กราฟโมดูลย่อ โดยใช้รหัสโมดูลเป็นตัวเลข มีคำอธิบายประกอบน้อย และการควบคุมการไหลของโปรแกรมที่เรียบง่าย นอกจากนี้, โครงสร้างแบบนี้ทำให้การตรวจสอบด้วยตนเองทำได้ยากมาก
  • การซ่อนสตริง โดยใช้เลเยอร์ base64 และตัวช่วยในการสร้างโครงสร้าง ตัวอย่างเช่น, การเข้ารหัสและถอดรหัส base64 ซ้ำๆ มักพบได้ในขั้นตอนการขโมยข้อมูล
  • การจัดส่งแบบไดนามิก ตลอด ประเมิน- รูปแบบสไตล์และเนื้อหาฟังก์ชันที่สร้างขึ้น จึงทำให้โค้ดสามารถเปลี่ยนแปลงพฤติกรรมได้ในขณะรันไทม์
  • การกรองระบบปฏิบัติการ โดยเฉพาะอย่างยิ่งควรเลือกใช้ระบบปฏิบัติการ Linux และ macOS ในการทำงานบน CI runner และแล็ปท็อปของนักพัฒนา

ในแง่ของการใช้งาน ชุดอุปกรณ์นี้มีลักษณะเป็นแบบแยกส่วน เอกสารอธิบายรายละเอียดเกี่ยวกับโมดูลต่างๆ เช่น การค้นหาระบบปฏิบัติการ การสแกนระบบไฟล์และข้อมูลลับของ Git การเข้าถึง SDK บนคลาวด์ การดำเนินการกับ GitHub API และกลไกการเผยแพร่ที่แก้ไขแพ็กเกจอื่นๆ ที่ผู้ดูแลเป็นเจ้าของ ที่จริงแล้ว ทั้ง StepSecurity และ ReversingLabs ต่างก็เน้นย้ำถึงฟังก์ชันที่อัปเดตแพ็กเกจที่มี hook ที่เป็นอันตรายโดยอัตโนมัติ

การเรียกใช้งานระหว่างการติดตั้งใน Shai-Hulud: แพ็กเกจ npm กระตุ้นให้เกิดเวิร์มได้อย่างไร

การโจมตีเริ่มต้นเมื่อ postinstall รัน node Bundle.js. ในขั้นตอนนี้ สคริปต์จะเริ่มต้นและคลายสถานะการทำงานในหน่วยความจำ เพื่อเตรียมพร้อมสำหรับการทำงานอย่างเต็มรูปแบบของเวิร์ม

การค้นพบและการเก็บเกี่ยว

  • เพย์โหลดจะดัมพ์ไฟล์ process.env และสแกนไฟล์ในเครื่องเพื่อค้นหาความลับที่มีเอนโทรปีสูงและคำนำหน้าโทเค็น นอกจากนี้ยังขยายขอบเขตการครอบคลุมโดยการเรียกใช้ TruffleHog ด้วย
  • ระบบจะสอบถามข้อมูลจากเอนด์พอยต์เมตาเดตาบนคลาวด์เพื่อรวบรวมข้อมูลประจำตัวที่มีอายุสั้น ยกตัวอย่างเช่น โทรไป 169.254.169.254 บน AWS หรือ metadata.google.internal บน GCP มักปรากฏในโฮสต์ที่ติดเชื้อ
  • ดังนั้น ข้อมูลรับรองใด ๆ ที่พบจะสามารถนำไปใช้ในการเผยแพร่แพ็กเกจ npm ใหม่หรือพุชเวิร์กโฟลว์ GitHub ได้ทันที

การกรอง

  • เวิร์มจะสร้างที่เก็บข้อมูล GitHub ใหม่ชื่อ ไช-ฮูลุด และเขียนค่าที่เข้ารหัสแบบ base64 สองชั้น data.json พร้อมรายละเอียดแพลตฟอร์ม ข้อมูลสภาพแวดล้อม และความลับต่างๆ ดังที่เห็นได้ พฤติกรรมที่ผิดปกติเช่นนี้สามารถตรวจจับได้ง่ายหากผู้ป้องกันรู้ว่าจะต้องมองหาที่ไหน
  • นอกจากนี้ยังสร้างเวิร์กโฟลว์ GitHub Actions ซึ่งมักจะอยู่บนสาขาที่มีชื่อว่า ชัย-ฮูลุดซึ่งเป็นการแปลงเป็นรูปแบบอนุกรม ${{ toJSON(secrets) }} และส่งข้อมูลไปยังเว็บฮุคแบบคงที่ นอกจากนี้ กระบวนการทำงานนี้จะดำเนินต่อไปจนกว่าจะมีคนลบออกด้วยตนเอง

การเผยแผ่

  • เมื่อตรวจพบโทเค็น npm ใดๆ เพย์โหลดจะแสดงรายการแพ็กเกจทั้งหมดที่เป็นของผู้ดูแลที่ถูกบุกรุก จากนั้นจะดึงไฟล์ tarball แต่ละไฟล์ แทรก bundle.js และรายการ postinstall แล้วเผยแพร่แพ็กเกจนั้นอีกครั้ง
  • ผลที่ตามมาคือ แพ็กเกจที่ติดไวรัสจำนวนมากอาจปรากฏขึ้นภายในเวลาไม่กี่ชั่วโมง ทำให้ขอบเขตความเสียหายขยายวงกว้างไปทั่วระบบนิเวศ

ความคงทนและการเปิดเผย

  • เวิร์มนี้ทำให้เวิร์กโฟลว์ที่เป็นอันตรายยังคงทำงานต่อไป และในหลายกรณี มันจะเปลี่ยนที่เก็บข้อมูลส่วนตัวให้เป็นที่เก็บข้อมูลสาธารณะด้วย “-การย้ายถิ่นฐาน” คำต่อท้ายทั้งหมดนี้ ทำให้ผู้โจมตีสามารถรักษาฐานที่มั่นและเพิ่มการรั่วไหลของข้อมูลให้สูงสุด

หมายเหตุการตรวจจับที่สำคัญ
การใช้งานที่ไม่ธรรมดานี้ ${{ toJSON(secrets) }} ในเวิร์กโฟลว์ Actions นั้นพบได้น้อย ดังนั้น ทีมควรพิจารณาสัญญาณนี้เป็นตัวบ่งชี้ที่มีนัยสำคัญสูงในระหว่างการล่า

รูปแบบเวิร์กโฟลว์ที่ผ่านการกรองอย่างดีที่คุณควรค้นหา

การใช้งานที่ไม่ธรรมดานี้ ไปยัง เจซอน (ความลับ) การกระทำต่างๆ เป็นตัวบ่งชี้ที่สำคัญอย่างยิ่งในเหตุการณ์นี้

รหัสเทียมการแพร่กระจายระดับสูง (ปลอดภัยและชัดเจน)

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

ทำไมสิ่งนี้ถึงเป็นหนอนในระบบนิเวศของแพ็กเกจ

เวิร์มคือมัลแวร์ที่แพร่กระจายได้เองโดยไม่ต้องอาศัยการดำเนินการใดๆ จากผู้ปฏิบัติงานในทุกขั้นตอน ในระบบปฏิบัติการ เวิร์มมักจะใช้ช่องโหว่ของเครือข่ายเพื่อแพร่กระจายจากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง ในทางตรงกันข้าม Shai-Hulud ทำงานอยู่ภายในรีจิสทรี npm เส้นทางที่มีประสิทธิภาพของมันคือผ่านทาง การนำข้อมูลรับรองมาใช้ซ้ำ.

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

ด้วยเหตุนี้ นักวิเคราะห์ด้านความปลอดภัย รวมถึง... การอ่านมืดจัดประเภท Shai-Hulud เป็น หนอนที่ขยายพันธุ์ได้เอง ไม่ใช่แค่โทรจันหรือเหตุการณ์ typosquatting ธรรมดาๆ ความแตกต่างนี้สำคัญมาก: โดยทั่วไปแล้วโทรจันจะโจมตีโฮสต์เพียงเครื่องเดียว แต่เวิร์มจะขยายผลกระทบโดยอัตโนมัติไปทั่วระบบนิเวศ

คู่มือฉบับย่อ “วิธีการทำงาน”

โดยสรุปแล้ว วงจรชีวิตของ Shai-Hulud มีดังนี้cisรายละเอียดขั้นตอนหลักๆ:

  • แพ็คเกจที่มี หลังการติดตั้ง ได้รับการติดตั้งแล้ว และ bundle.js ดำเนินการ
  • เพย์โหลดจะดัมพ์ตัวแปรสภาพแวดล้อม สแกนไฟล์และประวัติ Git แล้วรันคำสั่งต่างๆ ทรัฟเฟิลฮ็อกและสอบถามบริการเมตาเดตาบนคลาวด์ ด้วยเหตุนี้ ข้อมูลลับใด ๆ ที่ค้นพบจึงมีประโยชน์ในทันที
  • การขโมยข้อมูลเกิดขึ้นได้สองวิธี: วิธีแรกคือการสร้างที่เก็บข้อมูลสาธารณะชื่อ ไช-ฮูลุด ด้วยการเข้ารหัส base64 สองชั้น data.jsonประการที่สอง โดยการสร้างเวิร์กโฟลว์ GitHub Actions ที่โพสต์ข้อมูล ${{ toJSON(secrets) }} ไปยังเว็บฮุค
  • เวิร์มตัวนี้ใช้โทเค็น npm ที่ถูกขโมยมาเผยแพร่แพ็กเกจอื่นๆ ทั้งหมดที่เป็นของเจ้าของแพ็กเกจที่ถูกโจมตี โดยใช้ hook ที่เป็นอันตรายแบบเดียวกัน ด้วยวิธีนี้ การติดเชื้อจึงแพร่กระจายอย่างรวดเร็ว
  • สุดท้ายแล้ว ผู้โจมตีจะมีข้อมูลลับมากกว่า มีแพ็กเกจให้แพร่กระจายมากกว่า และ วิริยะ ภายในบัญชีและที่เก็บข้อมูล GitHub

วิธีหลีกเลี่ยงการโจมตีประเภทนี้ในทางปฏิบัติ

Shai-Hulud คือสัญญาณเตือนภัย เวิร์มที่ขโมยโทเค็นและเผยแพร่ตัวเองซ้ำนั้นไม่ใช่ความเสี่ยงในอนาคต แต่มันเกิดขึ้นจริงแล้วในปัจจุบัน ระบบนิเวศของแพ็กเกจ npm ในปัจจุบัน เพื่อป้องกันสิ่งนี้ การโจมตีห่วงโซ่อุปทานทีมงานต้องการระบบควบคุมที่สามารถตั้งโปรแกรมได้ ทำงานอัตโนมัติ และบังคับใช้ได้โดยตรง CI/CD pipelineนี่คือวิธีการป้องกันแบบเดียวกันกับที่คุณสามารถนำไปใช้ได้อยู่แล้ว ไซเกนี.

หยุดยั้งสิ่งประดิษฐ์ชั่วร้ายตั้งแต่ต้นทาง

คุณควรสแกนแพ็กเกจ npm และไฟล์ tarball ก่อนที่จะส่งถึงนักพัฒนาหรือระบบ CI (ไฟล์มีขนาดใหญ่เกินไป) bundle.js ไฟล์, การติดตั้งหลังการติดตั้งที่น่าสงสัย hooksและเครื่องหมายการปกปิดข้อมูลทั้งหมดล้วนเป็นสัญญาณเตือนเบื้องต้น นอกจากนี้ การบังคับใช้ช่วงเวลาพักและการกำหนดเวอร์ชันที่แน่นอนใน pipelines ป้องกันไม่ให้มีการนำเนื้อหาใหม่ที่ยังไม่ผ่านการตรวจสอบไปใช้โดยอัตโนมัติ

แข็ง CI/CD โดยค่าเริ่มต้น

Guardrails in CI/CD มีความสำคัญอย่างยิ่ง พวกมันจะปฏิเสธการรวมหรือการติดตั้งที่นำสคริปต์หรือไบนารีใหม่เข้ามา ในขณะเดียวกัน พวกมันจะบล็อกเวิร์กโฟลว์ที่จัดเก็บความลับหรือพยายามโพสต์จากภายนอก ทีมควรต้องการการติดตั้งแบบใช้ไฟล์ล็อกเท่านั้น (npm ci) ทั่วทุก pipelineดังนั้นชุดการพึ่งพาจึงยังคงสามารถสร้างซ้ำได้และปลอดภัย

ลดรัศมีการระเบิดของโทเค็น

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

สังเกตพฤติกรรมของหนอนได้ตั้งแต่เนิ่นๆ

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

แก้ไขได้อย่างรวดเร็วโดยไม่ทำให้ระบบเสียหาย

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

ตัวชี้วัดการประนีประนอม (IoCs)

ในการวิเคราะห์เกม Shai-Hulud ทีมต่างๆ ควรจับตาดูทั้งสองอย่าง IoC แบบคงที่ ในไฟล์และ IoC เชิงพฤติกรรม in pipelineสัญญาณเหล่านี้ร่วมกันช่วยตรวจจับการติดเชื้อได้ตั้งแต่ระยะแรกและตอบสนองได้ก่อนที่พยาธิจะแพร่กระจายไปมากกว่านี้

IoC แบบคงที่

ค่าแฮช SHA-256 ต่อไปนี้ตรงกับค่าที่สังเกตได้ bundle.js ตัวอย่าง:

  • 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09
  • 81d2a004a1bca6ef87a1caf7d0e0b355ad1764238e40ff6d1b1cb77ad4f595c3
  • dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c

นอกจากนี้ โปรดสังเกตรูปแบบที่เกิดขึ้นซ้ำๆ เหล่านี้:

  • A bundle.js ที่รากของแพ็กเกจ
  • "postinstall": "node bundle.js" ภายใน package.json.
  • ที่เก็บข้อมูลชื่อ ไช-ฮูลุด.
  • เวิร์กโฟลว์ GitHub ที่มี ${{ toJSON(secrets) }}.

IoC เชิงพฤติกรรม

นอกเหนือจากการตรวจสอบด้วยลายเซ็นไฟล์แล้ว กิจกรรมของเวิร์มยังแสดงให้เห็นผ่านพฤติกรรม ตัวอย่างเช่น:

  • มีการปล่อยคำสั่ง `npm publish` ออกมาเป็นจำนวนมากอย่างกะทันหันจากผู้ดูแลระบบรายหนึ่ง
  • เวิร์กโฟลว์ใหม่ที่ส่งข้อมูลไปยังปลายทางภายนอก
  • คำขอ POST ขาออกที่เรียกใช้จาก CI runner
  • คลังเก็บข้อมูลสาธารณะที่สร้างขึ้นใหม่เมื่อเร็ว ๆ นี้ ซึ่งมีการเข้ารหัสข้อมูลแบบไบนารี (blobs)

การค้นหาอย่างรวดเร็ว

บทสรุป: บทเรียนจากชัยฮูลุด

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

สำหรับนักพัฒนาและทีม DevOps บทเรียนนั้นชัดเจน:

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

ดังนั้น การหยุดยั้งการโจมตีเช่น Shai-Hulud จึงต้องใช้ระบบควบคุมที่เป็นอัตโนมัติและใช้งานง่าย ทีมควรสแกนแพ็กเกจ npm ก่อนการติดตั้ง ใช้การสร้างแบบ lockfile ตรวจจับกิจกรรมการเผยแพร่ที่ผิดปกติ และจำกัดอายุโทเค็นให้สั้น ขั้นตอนเหล่านี้ไม่ใช่ทางเลือกอีกต่อไป แต่เป็นรากฐานของความยืดหยุ่นในระบบสมัยใหม่ pipelines.

ที่ Xygeni เรามองว่าการโจมตีห่วงโซ่อุปทาน Shai-Hulud เป็นสัญญาณเตือนสำหรับระบบนิเวศโอเพนซอร์สทั้งหมด แนวทางที่ยั่งยืนคือการนำความปลอดภัยของห่วงโซ่อุปทานเข้ามาสู่กระบวนการพัฒนาโดยตรง ณ จุดที่โค้ด แพ็กเกจ npm และ... pipelines เชื่อมต่อ

ด้านล่างนี้คือรายการแพ็กเกจและเวอร์ชัน npm ทั้งหมดที่ถูกรายงานว่าถูกบุกรุกใน Shai-Hulud ใช้รายการนี้เพื่อตรวจสอบไฟล์ล็อก, รีจิสทรี และ CI ของคุณ pipelines สำหรับการสัมผัส

รายชื่อแพ็กเกจที่ถูกบุกรุก

📦 ตัวอย่างแพ็กเกจ npm ที่ถูกบุกรุก

ชื่อแพคเกจ เวอร์ชั่น เผยแพร่วันที่
เอ็นจิ้นกฎ JSON แบบง่าย0.2.12025-09-14T17:58:51.203Z
นักบิน0.8.82025-09-14T18:35:07.600Z
mcp-knowledge-graph1.2.12025-09-14T18:35:09.494Z
หัวหน้ากองทัพอากาศ0.3.12025-09-14T18:35:09.521Z
จัมป์เกต0.0.22025-09-14T18:35:09.651Z
ทีวี-ซีแอล0.1.52025-09-14T18:35:10.996Z
@thangved/callback-window1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/validation0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
➡️ ดูรายการแพ็กเกจที่ถูกบุกรุกทั้งหมด
ชื่อแพคเกจ เวอร์ชั่น เผยแพร่วันที่
เอ็นจิ้นกฎ JSON แบบง่าย0.2.12025-09-14T17:58:51.203Z
นักบิน0.8.82025-09-14T18:35:07.600Z
mcp-knowledge-graph1.2.12025-09-14T18:35:09.494Z
หัวหน้ากองทัพอากาศ0.3.12025-09-14T18:35:09.521Z
จัมป์เกต0.0.22025-09-14T18:35:09.651Z
ทีวี-ซีแอล0.1.52025-09-14T18:35:10.996Z
@thangved/callback-window1.1.42025-09-14T20:31:38.479Z
@tnf-dev/api1.0.82025-09-14T20:31:39.547Z
@tnf-dev/js1.0.82025-09-14T20:31:41.251Z
@tnf-dev/mui1.0.82025-09-14T20:31:41.259Z
@tnf-dev/core1.0.82025-09-14T20:31:42.728Z
@teselagen/react-table6.10.202025-09-14T20:37:08.597Z
@hestjs/demo0.1.22025-09-14T20:45:52.348Z
@nexe/eslint-config0.1.12025-09-14T20:45:53.625Z
@hestjs/eslint-config0.1.22025-09-14T20:45:55.044Z
@nexe/config-manager0.1.12025-09-14T20:45:55.066Z
@nexe/logger0.1.32025-09-14T20:45:55.170Z
@hestjs/logger0.1.62025-09-14T20:45:55.197Z
@hestjs/validation0.1.62025-09-14T20:45:55.595Z
@hestjs/core0.2.12025-09-14T20:45:55.888Z
@hestjs/cqrs0.1.62025-09-14T20:45:55.966Z
@hestjs/scalar0.1.72025-09-14T20:45:56.386Z
ng2-อัปโหลดไฟล์7.0.32025-09-15T02:44:29.555Z
ตัวจัดการการแจ้งเตือนตัวเก็บประจุ0.0.22025-09-15T04:54:48.431Z
ตัวเก็บประจุแบบเสียบปลั๊ก-โวนาจ1.0.22025-09-15T04:54:48.501Z
แอปสุขภาพปลั๊กอินตัวเก็บประจุ0.0.22025-09-15T04:54:48.704Z
สิทธิ์การใช้งานตัวเก็บประจุบนแอนดรอยด์0.0.42025-09-15T04:54:48.753Z
ชุดโทรศัพท์ VoIP1.0.22025-09-15T04:54:49.223Z
ตัวเก็บประจุ-ปลั๊กอิน-ihealth1.1.82025-09-15T04:55:08.113Z
@art-ws/common2.0.222025-09-15T05:21:15.411Z
@art-ws/config-eslint2.0.42025-09-15T05:21:17.199Z
ngx-ws1.1.52025-09-15T05:21:17.514Z
@art-ws/slf2.0.152025-09-15T05:21:17.524Z
@art-ws/http-server2.0.212025-09-15T05:21:17.745Z
pm2-gelf-json1.0.42025-09-15T05:21:18.413Z
@art-ws/di2.0.282025-09-15T05:21:18.488Z
@art-ws/di-node2.0.132025-09-15T05:21:18.849Z
@art-ws/config-ts2.0.72025-09-15T05:21:19.408Z
@art-ws/db-context2.0.212025-09-15T05:21:19.814Z
@art-ws/openapi0.1.92025-09-15T05:21:19.969Z
@art-ws/web-app1.0.32025-09-15T05:21:20.383Z
@art-ws/ssl-info1.0.92025-09-15T05:21:20.927Z
sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยให้กับการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni