แพ็กเกจ npm อันตราย หลบเลี่ยงมาตรการป้องกัน Installation Script ด้วยการทำงานขณะ Runtime

 

แคมเปญมัลแวร์บน npm ที่ยังคงดำเนินอยู่ ซึ่งเกี่ยวข้องกับแพ็กเกจ 'indexed-btree' แสดงให้เห็นว่ากลุ่มผู้โจมตีสามารถ Bypass มาตรการป้องกันการโจมตีแบบ Supply Chain Attack ด้วยการซ่อนโค้ดอันตรายไว้ในพฤติกรรมการทำงานตามปกติของแพ็กเกจขณะ Runtime แทนที่จะซ่อนไว้ใน Installation Script

แพ็กเกจดังกล่าวถูกค้นพบโดยนักวิจัยจาก Checkmarx โดยมัลแวร์จะพยายามปลอมตัวเป็นไลบรารี 'sorted-btree' ของจริง และมียอดดาวน์โหลดไปแล้วถึง 2 ล้านครั้งต่อสัปดาห์

แคมเปญนี้ยังอาจสร้างผลกำไรจำนวนมากให้กับผู้โจมตี ซึ่ง Checkmarx ระบุว่า มีการใช้กระเป๋าเงินดิจิทัล (Wallet) ที่ถือครองเงินอยู่ 109 ETH อย่างไรก็ตาม รายงานไม่ได้ระบุว่าเงินจำนวนดังกล่าวมาจากการขโมยสกุลเงินคริปโต

การ Bypass มาตรการด้านความปลอดภัยล่าสุด

เมื่อเดือนมิถุนายน 2026 GitHub ได้ประกาศชุดมาตรการด้านความปลอดภัยสำหรับ npm ที่ออกแบบมาเพื่อช่วยป้องกันการโจมตีแบบ Supply Chain Attack ซึ่งสร้างความปั่นป่วนให้กับระบบนิเวศ Open-source ซ้ำแล้วซ้ำเล่านับตั้งแต่ช่วงปลายปี 2025

หนึ่งในมาตรการสำคัญคือการบล็อก Lifecycle Script ของ Dependency อย่าง 'preinstall', 'install' และ 'postinstall' เว้นแต่จะได้รับการอนุมัติอย่างชัดเจน

ส่วนมาตรการอื่น ๆ จะป้องกันไม่ให้ npm ดึง Dependency จาก Git Repository หรือ URL ภายนอกมาโดยอัตโนมัติ หากไม่ได้รับอนุญาต

แพ็กเกจอันตราย indexed-btree หลบเลี่ยงมาตรการป้องกันเหล่านี้ด้วยการไม่ใช้ Installation Script แต่เปลี่ยนไปซ่อน Loader ของตนเองไว้ในเมธอด BTree.prototype.set() ของแพ็กเกจแทน ซึ่งจะทำงานขณะ Runtime เมื่อแอปพลิเคชันเรียกใช้เมธอดดังกล่าวด้วยค่า Key ที่กำหนดไว้เฉพาะ

ส่งผลให้ขั้นตอนการติดตั้งดูปลอดภัย และไม่ไปกระตุ้นกลไกการขออนุมัติใด ๆ ของ npm v12

Checkmarx อธิบายว่า "Loader ของมัลแวร์จะซ่อนอยู่ในเมธอด BTree.prototype.set ของไลบรารีเอง ซึ่งเป็นฟังก์ชันหลักที่ผู้ใช้งานทุกรายต้องเรียกใช้อยู่ตลอดเวลา"

"สิ่งนี้จะไปทำให้การทำงานของ sharedLoad.min.js ซึ่งมีมัลแวร์ในขั้นตอนแรกที่ผ่านการทำ Obfuscation เอาไว้ นับเป็นวิธีการที่ถูกสร้างขึ้นมาอย่างดี เพื่อแอบซ่อนผ่านเครื่องมือ Taint-analysis มาตรฐาน และเครื่องมือสแกนแบบ Static ส่วนใหญ่ไปได้"

 

เมื่อมัลแวร์ถูกเรียกใช้งานแล้ว จะสามารถเก็บรวบรวมข้อมูลรายละเอียดของระบบ ซึ่งประกอบด้วย

  • สถาปัตยกรรมของระบบ
  • Hostname
  • CPU
  • หน่วยความจำ
  • Uptime

จากนั้นจะส่งข้อมูลดังกล่าวออกไปผ่านช่องทาง Slack และ Telegram ที่ถูก Hard-code เอาไว้

นอกจากนี้ มัลแวร์ยังคอยดึงข้อมูล Command-and-Control (C2) จาก Smart Contract บน Ethereum ที่อยู่บนเครือข่ายทดสอบ Sepolia เป็นระยะ โดยใช้การแลกเปลี่ยนคีย์แบบ X25519 เพื่อสร้างคีย์ AES ขึ้นมา และถอดรหัส Payload ในขั้นตอนที่สองที่ถูกเก็บไว้ใน Smart Contract ดังกล่าว

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

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

  • การสร้าง GitHub Repository ที่ดูเหมือนของจริง
  • การเพิ่มประวัติการ Commit เข้าไปในโปรเจกต์
  • การจัดแต่งบัญชีนักพัฒนา

 

 

Checkmarx ยังค้นพบแพ็กเกจ npm เพิ่มเติมอีก 9 รายการที่เชื่อมโยงกับปฏิบัติการเดียวกันนี้ ซึ่งปัจจุบันได้ถูกนำออกจาก npm แล้ว โดยแพ็กเกจเหล่านั้นก็มียอดดาวน์โหลดจำนวนมากเช่นกัน ดังต่อไปนี้ :

  • ordered-kv-index (448,184 ดาวน์โหลด)
  • btree-leaderboard (493,685 ดาวน์โหลด)
  • priority-slot-queue (402,860 ดาวน์โหลด)
  • btree-range-store (468,092 ดาวน์โหลด)
  • btree-core (1,951,274 ดาวน์โหลด)
  • btree-time-index (425,312 ดาวน์โหลด)
  • btree-lru-cache (372,185 ดาวน์โหลด)
  • neighbor-key-map (366,019 ดาวน์โหลด)
  • sliding-score-window (448,024 ดาวน์โหลด)

นักพัฒนาได้รับคำแนะนำไม่ให้พึ่งพาการสแกนในขั้นตอนการติดตั้งเพียงอย่างเดียว แต่ควรใช้การวิเคราะห์พฤติกรรมขณะ Runtime ควบคู่ไปด้วย

ส่วนผู้ที่ติดตั้ง indexed-btree หรือแพ็กเกจใด ๆ ในรายการข้างต้นไปแล้ว ควรเปลี่ยน (Rotate) Secrets ทั้งหมด และกู้คืนสภาพแวดล้อมในการพัฒนาจากข้อมูลสำรองที่ปลอดภัย

ที่มา : bleepingcomputer