กลับไปหน้าข่าวสาร

MALFEX แคมเปญ Supply Chain Attack ผ่าน npm ซ่อน Malware ในภาพ PNG โจมตี Windows Developer

แชร์:

Checkmarx เผยแพร่รายงานวิเคราะห์แคมเปญ MALFEX เมื่อวันที่ 5 ตุลาคม 2569 — กลุ่ม Threat Actor ที่ Checkmarx ประเมินว่าดำเนินการโดย Operator รายเดียว เผยแพร่ JavaScript Package อันตราย 8 รายการ (รวม 12 Package ที่เชื่อมโยง) ผ่าน npm Registry ตั้งแต่เดือนสิงหาคม 2566 มียอดดาวน์โหลดรวม 40,767 ครั้ง ณ วันที่ 1 ตุลาคม 2569 เทคนิคเด่นคือ ซ่อนไฟล์ Malware ในภาพ PNG ผ่าน Steganography และ IExpress Archive เพื่อหลบ Detection — Payload หลักได้แก่ Overlord RAT และ movinlike Stealer ที่มุ่งขโมย Discord Token, Browser Credential และ Crypto Wallet


รายละเอียดทางเทคนิค


3 วิธีการส่ง Payload


  • ▸ Path 1 — Disguised Executable (Install Script): Package ที่ติดตั้งจะรัน Hidden Script ดึงไฟล์ที่ Server ส่งมาในรูป image/png แต่จริงๆ เป็น Microsoft IExpress Archive → Extract มี Signed AutoIt3.exe ที่รัน Encrypted Script → หลัง XOR/RC4/LZNT1 Decode ได้ Overlord RAT ถูก Inject เข้า Signed Process โดยมี Explorer เป็น Parent
  • ▸ Path 2 — Steganographic PNG (Load-time Chain): Package ดึง PNG ที่ถูกต้องตามมาตรฐาน แต่มี Encrypted Executable Data ซ่อนอยู่หลัง Image End Marker → AES Decrypt → Go Downloader ดาวน์โหลด movinlike (64 MB Node.js Stealer) ผ่าน IP 104.234.65[.]75 Port 700 — ทำงานตอน Load Package ไม่ใช่ Install ดังนั้นการปิด npm Lifecycle Script ไม่ช่วยป้องกัน
  • ▸ Path 3 — ASCII Art Downloader: Font Value เฉพาะ Trigger การดาวน์โหลด; โค้ดอันตรายถูก Push นอก Viewport ด้วย Whitespace ยาว เพื่อหลบการตรวจสอบ; Download Error ถูก Ignore โดยอัตโนมัติ


npm Package ที่เกี่ยวข้อง


  • ▸ function-flag — เวอร์ชัน 1.7.3, 4.0.0, 3.0.0, 2.3.5–2.3.9 (เวอร์ชัน 2.3.4 ไม่เป็นอันตราย)
  • ▸ function-color — เวอร์ชัน 1.7.3, 1.0.0
  • ▸ cdn-img-fetch — เวอร์ชัน 1.0.0–1.0.3
  • ▸ img-to-native — เวอร์ชัน 1.0.0–1.0.3
  • ▸ native-runner — เวอร์ชัน 1.0.0–1.0.3
  • ▸ tlxbnhd, tldriver, mxdriver — เวอร์ชัน 0.0.1–0.0.2


Overlord RAT — ความสามารถหลัก


  • ▸ Screen Capture, Keystroke Logging, Clipboard Collection, File Search, Remote Command Execution, Hidden Desktop
  • ▸ Persistence: Scheduled Task \Maiden รัน "AutoIt3.exe" "h.a3x" ทุก 5 นาที Start Date ตั้งเป็น 1/1/2020 (Backdated), Author "Welcome," Comment "Wichita"
  • ▸ C2 Discovery: สามารถดึง Server Address จาก Encrypted Solana Transaction Memo — ตัวอย่างที่วิเคราะห์ไม่มี C2 Configuration และยังไม่พบ C2 Traffic จริง


movinlike Stealer — เป้าหมาย


  • ▸ Discord Token, Browser Cookie และ Saved Password, Telegram Session, Cryptocurrency Wallet
  • ▸ แก้ไข Discord Startup Script → Exfiltrate ข้อมูลในรูป Compressed Chunk ไปยัง Discord Webhook (discord[.]com/api/webhooks/1553545982975811594/...)


Network Indicators of Compromise


  • ▸ IP 104.234.65[.]75 — movinlike Download Server (Port 700 และ Port 80, /setup.exe)
  • ▸ Domain api.imghippo[.]com/files/hOG8244hc.png — Overlord Delivery
  • ▸ Domain raw.githubusercontent[.]com/cavecrew/proj/main/banner.png — Stealer-chain PNG
  • ▸ IP 45.89.30[.]194, 191.96.81[.]101, 51.137.158[.]178 — Payload Servers
  • ▸ Domain cdnzona.discloud[.]app, apicdn.squareweb[.]app, bypasscdn.onrender[.]com, apizona.onrender[.]com — CDN Infrastructure


File Artifacts และ Persistence


  • ▸ Directory: %LOCALAPPDATA%\ScopeSmart Technologies Inc\ (มี AutoIt3.exe, h.a3x, SmartScope.vbs)
  • ▸ Stealer: %APPDATA%\Microsoft\Windows\node_runtime_helper.exe, %TEMP%\._cif_data
  • ▸ Dropped: <package dir>\gldriver_pre_core.exe และ gldriver_pre_asset.exe (ถูกลบหลัง Execute)


Attribution


  • ▸ npm Publisher: malfexkkj, malfex_user, malfexteste2-4
  • ▸ Git Author: corpmalfex[@]gmail.com
  • ▸ AES Decryption Key: malfexteam2027
  • ▸ README Owner: Murizada


ผลกระทบที่อาจเกิดขึ้น


  • ▸ Developer Endpoint Compromise: นักพัฒนาที่ติดตั้ง Package เหล่านี้จะให้ Attacker เข้าถึง Workstation เต็มรูปแบบผ่าน Overlord RAT — รวมถึง Source Code, Internal Credentials, VPN Config และ Cloud Access Key ที่อยู่ในเครื่อง Developer มักเป็น Entry Point สู่ Production Environment ที่ไม่ถูกตรวจสอบ
  • ▸ Supply Chain Propagation: หากองค์กรมี Internal npm Mirror ที่ Cache Package เหล่านี้ไว้ Developer ทุกคนที่ Install Dependency จะได้รับ Malware โดยอัตโนมัติ — ณ วันที่ Checkmarx ตรวจสอบ Package อันตรายบางรายการยังไม่มี Advisory คลุมทุกเวอร์ชัน


สิ่งที่องค์กรควรทำ


  • ▸ ตรวจสอบ Dependency ทันที: ค้นหา Package ชื่อ function-flag, function-color, cdn-img-fetch, img-to-native, native-runner, tlxbnhd, tldriver, mxdriver ใน package.json, package-lock.json, และ Internal Mirror — ถ้าพบ Version ที่เสี่ยง Isolate Host ทันทีก่อนดำเนินการอื่น
  • ▸ ถ้าพบ Infection: ลบ Scheduled Task \Maiden, ไฟล์ใน %LOCALAPPDATA%\ScopeSmart Technologies Inc\ และ node_runtime_helper.exe; Rotate Password และ Token ทุกอย่างจาก Clean System; End Telegram Session; ย้าย Cryptocurrency ไปยัง Wallet ใหม่
  • ▸ Block IOCs และ Clean Internal Registry: Block IP 104.234.65[.]75 บน Firewall; ลบ Package อันตรายออกจาก Internal npm Mirror ก่อนที่ Developer จะ Reinstall


แนวทางลดความเสี่ยงระยะยาว


  • ▸ npm Package Vetting Process: กำหนด Policy ให้ Developer ตรวจสอบ npm Package ก่อน Install โดยดู Publisher History, Download Count, และ Last Publish Date — Package ที่ Publish ครั้งแรกหรือมี Publisher ที่ไม่รู้จักควรผ่าน Review ก่อน
  • ▸ Internal Registry Scanning: ตั้ง SAST/SCA Tool ที่สแกน Package Content ใน Internal Mirror ไม่ใช่เพียง Dependency Name — MALFEX ใช้เทคนิคที่ Signature-based Scanner อาจพลาด เช่น Steganography ใน PNG
  • ▸ Developer Workstation Isolation: แยก Developer Environment จาก Production Network — หาก Attacker Compromise Developer Machine ควรไม่มี Direct Access ไปยัง Production Credential หรือ Cloud IAM Role


วิเคราะห์ในมุมมองจาก TXEC


MALFEX โดดเด่นในแง่ที่ Operator "ลงนาม" งานตัวเองอย่างชัดเจน — ชื่อ malfex ปรากฏใน npm Account, Git Email, AES Key และ README ซึ่งผิดปกติจาก APT ทั่วไปที่พยายาม Minimize Attribution; นี่อาจบ่งชี้ถึง Operator ที่มั่นใจว่าจะไม่ถูกติดตาม หรือเป็นนักพัฒนาที่เปลี่ยนทาง


ประเด็นที่น่ากังวลที่สุดคือ Path 2 ที่ทำงานตอน Load Package ไม่ใช่ Install — ทำให้ Best Practice อย่าง --ignore-scripts ไม่ช่วยป้องกัน และ 40,767 downloads ตั้งแต่ 2023 หมายความว่า Infection อาจฝังอยู่ในองค์กรที่ไม่รู้ตัวมานานหลายปีแล้ว