Veracode Threat Research เปิดเผยแคมเปญ Supply Chain Attack ที่ใช้เทคนิค Steganography ซ่อนโค้ดอันตรายไว้ภายในไฟล์ภาพ PNG เพื่อหลบเลี่ยงการตรวจจับจากระบบ Anti-malware โดยผู้โจมตีเผยแพร่ npm Package ปลอมชื่อ buildrunner-dev ซึ่งแอบอ้าง (Typosquatting) ให้คล้ายกับ Package ที่เคยได้รับความนิยมอย่าง buildrunner และ build-runner เพื่อหลอกนักพัฒนาให้ติดตั้ง ก่อนแพร่กระจาย Pulsar RAT มัลแวร์ควบคุมเครื่องระยะไกลที่พัฒนาต่อยอดจาก Quasar RAT
กลไกการโจมตี: จาก npm Package สู่ Pulsar RAT ผ่าน 3 ชั้น
แคมเปญนี้ออกแบบมาให้ npm Package ต้นทางดูสะอาดปลอดภัยที่สุดเท่าที่จะเป็นไปได้ โดยแบ่งการโจมตีเป็นหลายขั้นตอน:
- npm Package "buildrunner-dev" แอบอ้างชื่อคล้าย Package ที่เคยได้รับความนิยม buildrunner และ build-runner ซึ่งปัจจุบันไม่มีการดูแลต่อแล้ว (Abandoned) หลอกนักพัฒนาที่พิมพ์ชื่อผิดหรือเข้าใจว่าเป็น Fork ที่ยังดูแลอยู่ให้ติดตั้ง
- package.json กำหนด postinstall Hook ที่รัน
init.jsโดยอัตโนมัติทันทีที่มีการnpm install init.jsทำหน้าที่เป็น Downloader ดึงไฟล์packageloader.batที่ถูก Obfuscate อย่างหนักจาก Repository บน Codeberg ทำให้ตัว npm Package เองยังคง "สะอาด" ไม่มีโค้ดอันตรายฝังอยู่โดยตรง- ไฟล์ PNG ตัวที่ 3 ที่ดึงมาระหว่าง Runtime ซ่อน .NET Assembly ที่เข้ารหัสไว้ภายในภาพ ด้วยเทคนิค Steganography เมื่อถอดรหัสออกมาจะกลายเป็น Pulsar RAT
Pulsar เป็น RAT ที่พัฒนาต่อยอดจาก Quasar RAT มีความสามารถโดดเด่นด้าน Fileless Execution, HVNC-style Stealth Remote Desktop (ควบคุมหน้าจอโดยผู้ใช้ไม่เห็นความผิดปกติ), ขโมย Credential และสอดแนมข้อมูลอย่างกว้างขวาง แคมเปญนี้ยังรวมเทคนิค AMSI Bypass และ Process Hollowing เพื่อหลบเลี่ยงการตรวจจับเพิ่มเติม
ระบบที่ได้รับผลกระทบ
- นักพัฒนาที่ติดตั้ง npm Package buildrunner-dev โดยเข้าใจผิดว่าเป็น buildrunner หรือ build-runner ตัวจริง
- เครื่อง Windows ของนักพัฒนาที่รัน
npm installโดยไม่ตรวจสอบชื่อ Package หรือ Source ให้ละเอียดก่อน - ระบบ CI/CD Pipeline ที่ดึง Dependency จาก npm โดยอัตโนมัติ มีความเสี่ยงติดมัลแวร์ไปพร้อมกับกระบวนการ Build
ผลกระทบที่อาจเกิดขึ้น
- เครื่อง Developer ที่ติดตั้ง Package อันตรายเสี่ยงถูกควบคุมระยะไกลแบบเต็มรูปแบบ ผ่าน Pulsar RAT ที่มีความสามารถ Stealth Remote Desktop และขโมย Credential
- ตรวจจับได้ยากเป็นพิเศษเนื่องจากโค้ดอันตรายซ่อนอยู่ในไฟล์ภาพ PNG เครื่องมือ Anti-malware ทั่วไปที่สแกนไฟล์ตามนามสกุลหรือ Signature มักมองข้ามไฟล์ภาพว่าไม่เป็นอันตราย
- npm Package ต้นทางเองไม่มีโค้ดอันตรายฝังอยู่โดยตรง ทำให้การสแกน Dependency แบบ Static Analysis ทั่วไปอาจไม่พบสัญญาณผิดปกติตั้งแต่ขั้นตอนติดตั้ง
- ความเสี่ยงต่อ CI/CD Pipeline และ Source Code ขององค์กร หากเครื่อง Developer หรือ Build Server ติดมัลแวร์ อาจเปิดทางสู่การโจมตี Supply Chain ต่อเนื่องไปยังผลิตภัณฑ์ปลายทาง
สิ่งที่องค์กรควรทำ
- ตรวจสอบ package.json และ Lock File ของโปรเจกต์ทันทีว่ามีการเรียกใช้ buildrunner-dev หรือไม่ หากพบให้ถอดถอนและตรวจสอบเครื่องที่เกี่ยวข้องทันที
- ตรวจสอบ Process หรือการเชื่อมต่อเครือข่ายที่ผิดปกติไปยัง Codeberg หรือ Domain ที่ไม่คุ้นเคย บนเครื่อง Developer และ CI/CD Server ทั้งหมด
- ใช้เครื่องมือ Software Composition Analysis (SCA) ตรวจสอบ postinstall Script ของทุก Dependency ก่อน Build เนื่องจากช่องโหว่นี้อาศัย postinstall Hook เป็นจุดเริ่มต้นการโจมตี
- ตรวจสอบชื่อ npm Package อย่างละเอียดก่อนติดตั้งทุกครั้ง โดยเฉพาะ Package ที่มีชื่อใกล้เคียงกับ Tool ยอดนิยมที่ถูก Abandoned ไปแล้ว
แนวทางลดความเสี่ยงระยะยาว
1. ปิดการรัน postinstall Script อัตโนมัติในสภาพแวดล้อม CI/CD ที่ไม่จำเป็นต้องใช้
ใช้ Flag เช่น --ignore-scripts เมื่อ Install Dependency ในสภาพแวดล้อมที่ต้องการความปลอดภัยสูง
2. ใช้ Lockfile และ Dependency Pinning อย่างเคร่งครัดในทุกโปรเจกต์
เพื่อป้องกันการติดตั้ง Package เวอร์ชันใหม่ที่อาจถูกแทรกโค้ดอันตรายโดยไม่ได้ตรวจสอบก่อน
3. ตรวจสอบ Dependency ใหม่ทุกตัวก่อนเพิ่มเข้าโปรเจกต์ โดยเฉพาะ Package ที่มีประวัติผู้เผยแพร่สั้นหรือเพิ่งสร้างขึ้น
Package ที่แอบอ้างชื่อคล้าย Tool ยอดนิยมที่ถูก Abandoned ควรได้รับการตรวจสอบเป็นพิเศษก่อนนำไปใช้
4. เพิ่มการตรวจสอบไฟล์ภาพที่ดาวน์โหลดมาระหว่าง Runtime ด้วยเครื่องมือที่ตรวจจับ Steganography
เนื่องจากเทคนิคนี้กำลังถูกใช้มากขึ้นในแคมเปญ Supply Chain Attack เพื่อหลบเลี่ยง Anti-malware แบบดั้งเดิม
วิเคราะห์ในมุมมองจาก TXEC
แคมเปญนี้สะท้อนวิวัฒนาการสำคัญของเทคนิคการโจมตี Supply Chain ผ่าน npm ที่ผู้โจมตีจงใจออกแบบให้ Package ต้นทางดูสะอาดที่สุดเท่าที่จะเป็นไปได้ โดยแยกโค้ดอันตรายออกเป็นหลายชั้น (Downloader → Obfuscated Batch File → Steganographic PNG) ทำให้การตรวจสอบ Dependency แบบ Static Analysis ทั่วไปที่มักสแกนเฉพาะโค้ด JavaScript หรือไฟล์ Text มองข้ามภัยคุกคามที่ซ่อนอยู่ในไฟล์ภาพได้ง่าย
TXEC มองว่าการใช้ Steganography ร่วมกับ Supply Chain Attack เป็นสัญญาณเตือนว่าเครื่องมือ Security แบบดั้งเดิมที่พึ่งพา File Type หรือ Signature Scanning เพียงอย่างเดียวไม่เพียงพอต่อไปแล้ว องค์กรที่มีทีมพัฒนาซอฟต์แวร์ควรทบทวนกระบวนการตรวจสอบ Dependency ให้ครอบคลุมถึงพฤติกรรม Runtime และการดาวน์โหลดไฟล์เพิ่มเติมระหว่างการทำงาน ไม่ใช่ตรวจสอบเฉพาะโค้ดที่มองเห็นได้ในขั้นตอน Install เท่านั้น
รู้ก่อน ตรวจพบเร็ว ลดความเสียหายได้มากกว่า
[ แหล่งอ้างอิง: Veracode, CyberSecurityNews, GBHackers, Hackread ]