สรุปสั้น

นักวิจัยด้านความมั่นคงปลอดภัยไซเบอร์พบชุดแพ็กเกจ npm ประสงค์ร้ายชุดใหม่รวม 18 รายการ ที่พุ่งเป้าไปยังผู้ใช้เครื่องมือสำหรับนักพัฒนาของ Alibaba โดยเฉพาะ และปล่อยโทรจันควบคุมระยะไกล (remote access trojan หรือ RAT) ที่ทำงานได้ข้ามระบบปฏิบัติการ ลักษณะของแคมเปญเป็นการโจมตีห่วงโซ่อุปทานซอฟต์แวร์แบบเจาะจงเป้าหมาย โดยเลือกสภาพแวดล้อมที่ใช้ภาษาจีนเป็นหลัก แพ็กเกจตัวเด่นคือ lib-mtop ซึ่งเป็นแพ็กเกจแบบไม่มีสโคปที่ตั้งชื่อซ้ำกับแพ็กเกจส่วนตัวของ Alibaba ภายใต้สโคป @ali แพ็กเกจนี้ถูกเผยแพร่ครั้งแรกช่วงเดือนพฤศจิกายน พ.ศ. 2566 โดยไม่มีฟังก์ชันอะไรเลย ก่อนที่จะมีการอัปโหลดเวอร์ชันใหม่สามตัวคือ v1.0.1, v1.0.2 และ v1.0.3 ในช่วงเดือนมีนาคมถึงเมษายนที่ผ่านมา ซึ่งเวอร์ชันเหล่านี้แถมโค้ดโหลดเดอร์ที่ดึงเพย์โหลด JavaScript จากเซิร์ฟเวอร์ระยะไกลด้วย curl แล้วสั่งรันทันที

จุดที่ทำให้แคมเปญนี้ต่างจากการวางแพ็กเกจปลอมทั่วไปคือผู้ก่อเหตุแยกโค้ดโหลดเดอร์ออกเป็นชิ้น ๆ แล้วฝังกระจายไว้ในหลายแพ็กเกจที่ถูกส่งถึงเป้าหมายผ่านสายพันธุ์ dependency เดียวกัน แพ็กเกจชั้นบนที่เลียนชื่อแพ็กเกจส่วนตัวของ @ali ทำหน้าที่เป็นตัวล่อเพื่อกระตุ้นให้ระบบติดตั้งสายพันธุ์ dependency ทั้งชุด ผลปลายทางเป็นแบ็กดอร์ที่มีความสามารถครบเครื่อง ทั้งการรันคำสั่ง อัปโหลดและดาวน์โหลดไฟล์ตามอำเภอใจ สำรวจข้อมูลเครื่อง จัดเตรียมเพย์โหลดชั้นถัดไป และขยับตัวไปยังเครื่องอื่นในเครือข่าย ยังไม่ทราบว่าใครอยู่เบื้องหลัง แต่คอมเมนต์ภาษาจีนในซอร์สโค้ดและการที่คอมมิตบน GitHub ประทับเวลาด้วยเขตเวลา UTC+08:00 บ่งชี้ว่าน่าจะเป็นฝีมือของผู้ก่อภัยที่พูดภาษาจีนซึ่งไล่ล่านักพัฒนาที่พูดภาษาจีนด้วยกันเอง

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 4 สิงหาคม พ.ศ. 2569 ว่าบริษัท Socket ได้เผยแพร่ผลวิเคราะห์แคมเปญนี้ โดยนาย Karlo Zanki นักวิจัยของ Socket ระบุว่าบัญชีผู้ดูแลชื่อ ch4ce ซึ่งปัจจุบันเข้าไปแล้วขึ้นข้อความ not found บน npmjs[.]com เป็นผู้เผยแพร่แพ็กเกจอีกสี่ตัวคือ aone-kit, aone-kit-cli, aone-sandbox และ local-config-parser

สามตัวแรกเป็นเปลือกเปล่าที่ตั้งชื่อซ้ำกับแพ็กเกจส่วนตัวใต้สโคป @ali และประกาศแพ็กเกจเหล่านั้นเป็น dependency ในไฟล์ package.json ส่วนตัวสุดท้ายคือ local-config-parser ทำงานเป็นตัวอ่านไฟล์ตั้งค่า JSON ได้จริงตามที่โฆษณา แต่มี dependency ที่แต่ละตัวดูไม่มีพิษภัยและถูกเผยแพร่จากบัญชีผู้ใช้ npm รายอื่น เมื่อประกอบเข้าด้วยกันจึงกลายเป็นท่อลำเลียง RAT ขั้นสูงไปยังนักพัฒนาที่มีแนวโน้มว่าทำงานอยู่ในบริษัทในเครือ Alibaba Group

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

stepsecurity javascript ssh rat alibaba tool users cybersecurity packages deliver cross
stepsecurity javascript ssh rat alibaba tool users cybersecurity packages deliver cross

Socket อธิบายว่า “เมื่อแพ็กเกจแบบนี้ถูกติดตั้งในสภาพแวดล้อมที่เข้าถึงแพ็กเกจส่วนตัวแบบมีสโคปที่ถูกเลียนแบบได้ กระบวนการ resolve dependency จะทำงานตามปกติ พร้อมกับฟังก์ชันพิเศษเล็ก ๆ ที่แถมมากับ dependency เพิ่มเติมที่ถูกติดตั้งไปด้วย” นักวิจัยพบว่ามีแพ็กเกจตัวล่อชั้นบนมากถึง 10 ตัวที่พึ่งพา smart-config-manager ซึ่งทำหน้าที่เป็นสะพานชั้นกลางเชื่อมไปยังแพ็กเกจชั้นล่างที่บรรจุตรรกะโหลดเดอร์เอาไว้

แคมเปญนี้เกิดขึ้นในช่วงเวลาใกล้เคียงกับที่มีผู้ก่อภัยไม่ทราบตัวตนเผยแพร่เวอร์ชันปนเปื้อนของ mrmustard เวอร์ชัน 0.7.4 ซึ่งเป็นไลบรารี Python สำหรับการคำนวณควอนตัมเชิงโฟโตนิกจาก Xanadu เพื่อรันโปรแกรมขโมยข้อมูลที่เก็บกุญแจส่วนตัว SSH ข้อมูลรับรอง AWS และไฟล์ตั้งค่า Kubernetes แล้วส่งออกไปยังเซิร์ฟเวอร์ของผู้โจมตีที่โดเมน metrics.femboy[.]energy บริษัท StepSecurity ระบุว่าเพย์โหลดทำงานทุกครั้งที่มีการ import แพ็กเกจ และการวิเคราะห์เพิ่มเติมชี้ว่าบัญชี GitHub ของผู้ดูแลหลักถูกเจาะเพื่อผลักเวอร์ชันปลอมออกมา โดยผู้โจมตีสำรวจ CI runner ที่โครงการโฮสต์เอง แล้วส่งความลับสำหรับเผยแพร่แพ็กเกจออกไปยัง URL ของ webhook[.]site ด้าน SafeDep ระบุว่ามัลแวร์ตัวนี้ “ติดตั้งกลไกคงอยู่ในระบบไว้สามชุดแยกจากกัน ที่ทำให้โปรแกรมขโมยข้อมูลยังทำงานต่อไปนานหลังจากถอนการติดตั้งแพ็กเกจแล้ว” และเสริมว่า “การขโมยข้อมูลรับรองพุ่งเป้าไปยังสภาพแวดล้อมงานวิจัยและ HPC ด้วยการเก็บคิวงาน SLURM และรายการ GPU ควบคู่ไปกับความลับของคลาวด์ตามปกติ”

วิธีการโจมตี

แพ็กเกจชั้นล่างตัวหนึ่งจะติดต่อไปยังคลัง GitHub เพื่อดึงไฟล์ตั้งค่าของ rule engine มาเก็บไว้ แล้วใช้ไฟล์นั้นสั่งรันเพย์โหลดประสงค์ร้าย ซึ่งจะไปติดต่อเซิร์ฟเวอร์ระยะไกลเพื่อดึงมัลแวร์ชั้นที่สองต่อ จุดที่น่าสังเกตคือ rule engine ใช้โมดูล vm ของ Node.js ในการทำงานช่วงสุดท้าย และเลือกดาวน์โหลดเพย์โหลดตามระบบปฏิบัติการของเหยื่อ โดยดึงไฟล์จากโดเมนที่ปลอมตัวเป็นของ Alibaba คือ aone-cli-next.oss-cn-beijing.aliyuncs[.]com เพื่อกลมกลืนกับทราฟฟิกปกติและเลี่ยงการตรวจจับ

พฤติกรรมในขั้นนี้แตกต่างกันไปตามแพลตฟอร์ม

  • บน Windows สั่งหยุดการทำงานของแอปพลิเคชัน Alilang ซึ่งเป็นเครื่องมือด้านความมั่นคงปลอดภัยองค์กร VPN และงานสำนักงาน แล้วแทนที่โค้ดแกนกลางของแอปด้วยเวอร์ชันที่ฝังโทรจันไว้
  • บน Linux ดาวน์โหลดไบนารีไปไว้ที่ /tmp รันเป็นโปรเซสแยก แล้วลบไฟล์ออกจากดิสก์หลังจากถูกโหลดเข้าหน่วยความจำแล้ว
  • บน macOS แทรกสคริปต์เบื้องหลังลงในไฟล์ ~/.zshrc และตั้ง Launch Agent ให้ทำงานทุก 10 นาที

เพย์โหลดชั้นสุดท้ายยังคงอยู่ในระบบด้วยการฉีดโค้ดประสงค์ร้ายเข้าไปในแอปพลิเคชันสำหรับทำงานร่วมกันที่ใช้กันแพร่หลายในองค์กร ได้แก่ DingTalk, Wukong และ Qoder

รายชื่อแพ็กเกจทั้งหมดที่เกี่ยวข้องกับแคมเปญนี้คือ lib-mtop, aone-kit, aone-kit-cli, aone-sandbox, local-config-parser, smart-config-manager, cloud-config-fetcher, fast-transform-pipeline, aone-cloud-cli, colder-cli, def-open-client, feedback-ai-sdk, flight-compare-analyzer, lwp-web-client, lzd-unified-station-sdk, open-worker-cli, test-skill-zip และ uniapi-bridge

ผลกระทบ

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

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

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

คำแนะนำ

  • ผู้ที่ติดตั้งแพ็กเกจตัวใดตัวหนึ่งในรายชื่อข้างต้นควรถือว่าเครื่องถูกเจาะแล้ว หมุนข้อมูลรับรองที่สำคัญทั้งหมดจากเครื่องที่สะอาด และตรวจสอบระบบของนักพัฒนาว่ามีร่องรอยกิจกรรมน่าสงสัยหรือไม่
  • ตั้งค่า scope และ registry ให้ชัดเจน เพื่อไม่ให้ระบบไปดึงแพ็กเกจสาธารณะที่ตั้งชื่อซ้ำกับแพ็กเกจส่วนตัวขององค์กร ซึ่งเป็นแกนกลางของการโจมตีครั้งนี้
  • ตรวจสายพันธุ์ dependency ทั้งชุด ไม่ใช่แค่แพ็กเกจที่ประกาศติดตั้งโดยตรง โดยเฉพาะแพ็กเกจที่เพิ่งเผยแพร่เวอร์ชันใหม่หลังจากเงียบมานานหลายปี
  • เฝ้าระวังทราฟฟิกขาออกจากเครื่องนักพัฒนาและระบบ CI ที่วิ่งไปยัง GitHub และ object storage นอกรายการที่อนุญาต รวมถึงการเรียกใช้ curl จากกระบวนการติดตั้งแพ็กเกจ
  • ตรวจไฟล์ ~/.zshrc และ Launch Agent บน macOS ตรวจโปรเซสที่รันจาก /tmp บน Linux และตรวจความถูกต้องของไบนารี Alilang บน Windows
  • แยกสิทธิ์ของระบบ CI ออกจากบัญชีผู้ดูแลแพ็กเกจ และเปิดใช้การยืนยันตัวตนสองชั้นสำหรับการเผยแพร่ เพื่อลดผลกระทบเมื่อ CI runner ที่โฮสต์เองถูกเจาะแบบกรณี mrmustard

แหล่งอ้างอิง