สรุปสั้น
DeceptiveDevelopment คือ กลุ่มที่สอดคล้องกับเกาหลีเหนือซึ่งรู้จักกันมาหลายปีจากการปลอมเป็นผู้สรรหางาน แล้วหลอกนักพัฒนาให้รันโปรเจกต์ “ข้อสอบเขียนโค้ด” ที่ฝังมัลแวร์ เพื่อขโมยกระเป๋าคริปโตและรหัสผ่านเบราว์เซอร์ รายงาน APT Activity Report ของบริษัท ESET ที่เผยแพร่เมื่อ 28 ตุลาคม 2569 ระบุว่ากลุ่มนี้ยกระดับแล้ว ระหว่างเมษายนถึงกันยายน 2569 ผู้โจมตีใช้สิทธิ์ Git กุญแจ SSH และ token ที่ขโมยจากเครื่องนักพัฒนา แก้โค้ดใน repository ทั้งสาธารณะและส่วนตัวของเหยื่อ แล้วเขียน commit history ใหม่เพื่อซ่อนการเปลี่ยนแปลง โปรเจกต์ที่ถูกฝังกลายเป็นช่องทางใหม่เข้าสู่เครื่องของทุกคนที่ดาวน์โหลดไปใช้
แพ็กเกจที่ถูกฝังพบบน npm, Go module mirror, Packagist, PyPI และร้านส่วนขยายเบราว์เซอร์ ส่วนใหญ่เป็นเครื่องมือเล็ก ๆ ที่ดูแลโดยนักพัฒนาคนเดียว ปลายทางของการติดเชื้อ คือ OmniStealer ตัวขโมยข้อมูล และ DEV#POPPER RAT ที่ฝังตัวในแอปที่นักพัฒนาเปิดทุกวัน กลุ่มนี้ยังซ่อนที่อยู่เซิร์ฟเวอร์สั่งการไว้ในธุรกรรม Ethereum และย้ายไฟล์ไปบริการที่ปิดยาก ทำให้การ takedown ยากขึ้น นักพัฒนาไม่ควรรันโค้ดจากผู้สรรหาบนเครื่องทำงานหลัก และควรหมุนเวียน token ทันทีเมื่อสงสัยว่าเครื่องติดเชื้อ
รายละเอียดข่าว
เว็บไซต์ Cyber Security News รายงานเมื่อวันที่ 30 ตุลาคม 2569 ว่า ESET มองการเปลี่ยนแปลงนี้เป็นสัญญาณว่ากลุ่มเกาหลีเหนือให้คุณค่ากับเครื่องของนักพัฒนามากขึ้น โน้ตบุ๊กเครื่องเดียวมักมีทั้งสิทธิ์ Git กุญแจคลาวด์ และสิทธิ์ปล่อยแพ็กเกจ ซึ่งมีค่ามากกว่ารหัสผ่านชุดเดียว และนักพัฒนาที่ติดเชื้อหนึ่งคนอาจทำให้ผู้ใช้อีกหลายสิบหรือหลายร้อยคนเสี่ยงตาม ESET ยังพบว่าโปรเจกต์ที่ถูกเล็งส่วนใหญ่เป็นของนักพัฒนาเดี่ยว ซึ่งชี้ว่าการแพร่กระจายน่าจะเป็นแบบอัตโนมัติ ไม่ได้เลือกเป้าทีละโปรเจกต์
ในช่วง 6 เดือนเดียวกัน กลุ่มนี้ทำให้โครงสร้างพื้นฐานปิดยากขึ้นด้วย ESET ตรวจแพ็กเกจ npm ที่ใช้เทคนิค NullReceiver (ซึ่ง Cloud Thunder เคยรายงานใน 2026/08/026 ) และพบเทคนิคเดียวกันใน repository ที่ถูกติดอาวุธซึ่งเป็นของนักพัฒนาจริง โดยถูกเรียกผ่าน task ที่ซ่อนไว้ใน VS Code ESET ระบุว่านี่เป็นกรณีแรกที่ติดตามได้ซึ่งฝังการหาที่อยู่เซิร์ฟเวอร์ผ่านบล็อกเชนลงในโปรเจกต์บน GitHub โดยตรง ข้อสอบ Web3 ปลอมช่วงแรกถูกวางบน Gitea ที่ใครก็โฮสต์เองได้ ส่วน payload ขั้นหลังย้ายไปอยู่บน JSONBin.io, JSONHosting และ Pinata ซึ่งเป็นเกตเวย์สู่เครือข่าย IPFS
ข้อจำกัดของหลักฐาน คือ รายงานที่สื่อนำมาเผยแพร่ไม่ได้ระบุชื่อแพ็กเกจหรือ repository ที่ถูกฝัง จำนวนผู้ใช้ที่ดาวน์โหลด หรือแฮชของมัลแวร์ จึงยังประเมินขนาดผลกระทบจริงไม่ได้ (บริบทแคมเปญหลอกสัมภาษณ์งานของเกาหลีเหนือดูได้ที่ 2026/09/149 )

วิธีการโจมตี
ล่อด้วยงานปลอม — การโจมตียังเริ่มจากเหยื่อล่อ เช่น งานจ้างหรือข้อสอบเขียนโค้ดปลอมที่ขอให้นักพัฒนารันโปรเจกต์ เมื่อรันแล้ว มัลแวร์ค้นเครื่องหาสิทธิ์ Git กุญแจ SSH และ access token
ใช้สิทธิ์นักพัฒนาฝังโค้ด — ผู้โจมตีล็อกอินเป็นนักพัฒนาคนนั้น แล้วเพิ่มโค้ดอันตรายลงใน repository ของเหยื่อเอง จากนั้นมักเขียน commit history ใหม่ (rewrite history) เพื่อไม่ให้เพื่อนร่วมทีมที่ตรวจล็อกโปรเจกต์เห็นการเปลี่ยนแปลง โค้ดที่ถูกฝังกระจายต่อผ่าน npm, Go module mirror, Packagist, PyPI และร้านส่วนขยายเบราว์เซอร์ ทุกโปรเจกต์ที่ถูกฝังจึงกลายเป็นทางเข้าใหม่
OmniStealer ขโมยข้อมูล — ตัวขโมยข้อมูลที่เขียนด้วย Python รันได้หลายระบบปฏิบัติการและอัปเดตบ่อย เล็งรหัสผ่านในเบราว์เซอร์ กระเป๋าคริปโต ตัวจัดการรหัสผ่าน และความลับของนักพัฒนา
DEV#POPPER ฝังตัวในแอปประจำวัน — RAT ที่เขียนด้วย Node.js ซึ่งงานวิจัยก่อนหน้าพบว่าบันทึกการกดแป้นและรันคำสั่งระยะไกลได้ เวอร์ชันใหม่เพิ่มโค้ดตัวเองเข้าไปใน VS Code, Cursor และ Discord ทำให้มัลแวร์รันซ้ำทุกครั้งที่แอปเหล่านี้เปิด
NullReceiver ซ่อน C2 ในบล็อกเชน — loader อ่านธุรกรรมล่าสุดจากที่อยู่ Ethereum ที่ฝังไว้ แล้วดึง IP ของเซิร์ฟเวอร์สั่งการจากที่อยู่ผู้รับของธุรกรรมโอนเปล่า ผู้โจมตีจึงเปลี่ยนเซิร์ฟเวอร์ได้ด้วยธุรกรรมใหม่เพียงรายการเดียวโดยไม่ต้องอัปเดตแพ็กเกจ และบันทึกบนบล็อกเชนลบไม่ได้
โฮสต์ที่ปิดยาก — บน IPFS ไฟล์ถูกค้นด้วยเนื้อหา การปิดบัญชีจึงไม่ได้ลบไฟล์เสมอไป ส่วน Gitea ที่โฮสต์เองไม่มีทีมกลางให้รายงาน
ผลกระทบ
กลุ่มที่เสี่ยงมี 2 ชั้น ชั้นแรก คือ นักพัฒนาที่รับงานฟรีแลนซ์หรือหางาน ซึ่งเป็นเป้าของเหยื่อล่อโดยตรง ชั้นที่สอง คือ ทุกองค์กรที่ดึงแพ็กเกจโอเพนซอร์สขนาดเล็กเข้ามาในโปรเจกต์ เพราะแพ็กเกจที่ดูแลโดยคนเดียวมีคนตรวจน้อยและเป็นจุดที่ถูกฝังมากที่สุด ผลลัพธ์ คือ ความลับของนักพัฒนา กระเป๋าคริปโต และสิทธิ์เข้าระบบองค์กรรั่ว และการติดเชื้อแพร่ต่อเป็นทอด ๆ
การที่ DEV#POPPER ฝังตัวใน editor และการที่ C2 อยู่บนบล็อกเชนทำให้การกำจัดยากขึ้น การลบแพ็กเกจที่ติดเชื้อออกอย่างเดียวไม่พอ ต้องตรวจทั้ง editor และหมุนเวียนสิทธิ์ทั้งหมด
คำแนะนำ
- ห้ามรันโค้ดจากผู้สรรหาหรือข้อสอบเขียนโค้ดบนเครื่องทำงานหลัก ให้ใช้ VM หรือคอนเทนเนอร์ที่ทิ้งได้และไม่มีสิทธิ์ใด ๆ
- หากสงสัยว่าเครื่องติดเชื้อ ให้หมุนเวียน token ของ Git กุญแจ SSH token ปล่อยแพ็กเกจ (npm, PyPI, Packagist) และกุญแจคลาวด์ทันที
- ตรวจ repository ที่ดูแลหา commit ที่ถูกเขียนประวัติใหม่ force push ที่ไม่ได้ตั้งใจ และไฟล์
.vscode/tasks.jsonที่มี task รันอัตโนมัติเมื่อเปิดโฟลเดอร์ - ตรวจไฟล์ของ VS Code, Cursor และ Discord หาโค้ดที่ถูกแทรกเพิ่ม และติดตั้งแอปใหม่จากแหล่งทางการหากพบความผิดปกติ
- แจ้งเตือนเมื่อระบบ build หรือเครื่องนักพัฒนาเรียก RPC ของ Ethereum หรือเกตเวย์ IPFS อย่าง Pinata, JSONBin.io และ JSONHosting โดยไม่มีเหตุผลทางธุรกิจ
- เปิด commit signing และ branch protection บน repository สำคัญ และใช้ lockfile พร้อมตรวจแพ็กเกจก่อนอัปเดต dependency
