- นักพัฒนาคนหนึ่งในแคนาดาถูกโจมตีแบบ ล่อให้ติดแบ็กดอร์ โดยแอบอ้างว่าเป็นการสัมภาษณ์กับ VC ปลอม และลำดับการโจมตีก็สอดคล้องกับงานของนักพัฒนาจนถึงขั้นน่าสงสัยว่ามุ่งเป้าไปที่ตัวจัดการแพ็กเกจ crates.io
- รีโพเหยื่อถูกทำให้ดูเหมือนแอป TypeScript ชื่อ “Ticket Harbor” แต่ซ่อนโค้ดอันตรายไว้ใน เส้นทางการรันของ TypeScript ผ่าน
patch-packageและtypescript+5.9.2.patch - สตับที่ถูกแทรกไว้จะถอดการพรางด้วย base64 และ XOR แล้วรันด้วย
new Function(...)ก่อนจะผ่าน hidden chunk ในoperators/3.pngและ WASM stub เพื่อปล่อย payload ระยะที่ 2 ขนาด 1.68MB ในโปรเซส Node แยกต่างหาก - payload สุดท้าย “PinpinRAT” จะสร้างคู่กุญแจ RSA-2048 และคีย์เซสชัน AES-256-CBC พร้อมรองรับการเก็บลายนิ้วมือโฮสต์, อัปโหลด·ดาวน์โหลดไฟล์, รันโปรเซส, จัดการไฟล์ซิสเต็ม, ทำ DNS query และลบตัวเอง
- หากเคยรันรีโพนี้ ต้องตัดเครือข่ายทันทีและเปลี่ยนข้อมูลรับรองจากอุปกรณ์อื่น โดยต้องรับมือบนสมมติฐานว่า คุกกี้และความลับที่ป้องกันด้วยรหัสผ่านอาจถูกขโมยไปแล้ว
การโจมตีเจาะจงนักพัฒนาที่เริ่มจากการสัมภาษณ์ปลอม
- ผู้โจมตีเข้าหาโดยอ้างว่าเป็นบุคคลปลอมจาก “Lua Ventures”
- Lua Ventures ถูกแนะนำว่าเป็น VC สาย DeFi ที่ตั้งอยู่ในสิงคโปร์ แต่ความจริงคือหยุดดำเนินกิจการไปแล้ว
- ไม่เปิดเผยชื่อบุคคล เพราะอาจทำให้สับสนกับคนชื่อเดียวกันที่มีอยู่จริง
- อีเมลดูน่าเชื่อถือ และยังมีลิงก์โปรไฟล์ LinkedIn ที่ดูธรรมดาแต่เหมือนจริงแนบมาด้วย
- พูดถึง Lyrasing และ Roadpay ว่าเป็นบริษัทลงทุนที่กำลังมองหาที่ปรึกษา
- ทั้งสองบริษัทมีตัวตนบนเว็บในระดับพื้นฐาน จึงดูไม่เหมือนของปลอม แต่คล้ายบริษัทระยะเริ่มต้นมากกว่า
- ยังมี archive.org snapshot ของเว็บไซต์ Roadpay หลงเหลืออยู่
- หลังตอบโต้ทางอีเมลก็ไปต่อถึงขั้นคุย Google Meet
- คู่สนทนาเป็นผู้ชายที่มีสำเนียงเยอรมัน และบอกว่ากำลังเดินทาง
- ตัวการสนทนาเองไม่มีจุดผิดปกติชัดเจน
ทริกเกอร์การรันที่ปลอมเป็น “แบบทดสอบงาน”
- หลังจบสาย ผู้โจมตีเสนอ “แบบทดสอบ” และส่งรีโพมาให้
- รีโพถูกตกแต่งให้ดูเหมือน แอปจองตั๋วเรือเฟอร์รี ชื่อ “Ticket Harbor”
- ไฟล์
task.txtมีรายการงานที่น่าเบื่อแต่ดูสมจริง และลงท้ายด้วยคำสั่งให้รัน- เนื้อหาคือให้รัน typecheck, test suite และคำสั่ง build สำหรับ desktop/server ที่เกี่ยวข้องในรีโพ
- คำสั่งนี้เองคือทริกเกอร์การติดเชื้อจริง
- ทันทีที่มีการรัน TypeScript หรือ import
typescript.jsเช่นnpm run typecheck,build,devก็อาจทำให้ payload ถูกเรียกใช้ได้
- ทันทีที่มีการรัน TypeScript หรือ import
เชนการรันที่ซ่อนอยู่ในแพตช์ TypeScript
- สัญญาณเตือนแรกคือรีโพนี้ดูเหมือน โจทย์ TypeScript
- สิ่งที่ร้องขอใกล้เคียงโจทย์รับสมัครงาน TypeScript มากกว่าการวิเคราะห์สถาปัตยกรรม
- เมื่อนำรีโพเข้า Claude เพื่อตรวจอย่างรวดเร็ว ก็พบความผิดปกติที่เกี่ยวกับ
patch-package
- ไดเรกทอรี
patches/มีจำนวนมากผิดปกติ- บางแพตช์ดูปกติ ทำหน้าที่เป็น noise เพื่อซ่อน payload ที่แท้จริง
- ตัวอย่างเช่น
sumchecker+3.0.1.patch,@electron+get+2.0.3.patch,extract-zip+2.0.1.patch
- โค้ดอันตรายหลักอยู่ใน
typescript+5.9.2.patch- แทรกสตับที่รันทันทีไว้บนสุดของ
typescript.jsและ_tsc.js - สตับจะถอดรหัสสตริง base64, XOR ถอดกลับทีละไบต์ด้วยคีย์
73แล้วรันด้วยnew Function(...) - มีการส่ง
require,Buffer,WebAssembly,process,__dirnameเข้าไปยังฟังก์ชันที่รัน
- แทรกสตับที่รันทันทีไว้บนสุดของ
- เชนการรันผ่านหลายขั้นตอน
- มี
postinstallhook สี่ตัวที่รันpatch-package - หนึ่งในนั้นใช้
git update-index --skip-worktreeกับไฟล์แพตช์เพื่อซ่อนจากgit status - ตัวโหลดจะอ่าน hidden chunk ที่ต่อท้ายไฟล์
operators/3.png - จากนั้นรัน WASM stub ขนาดเล็กใน custom
wAsmchunk - แล้วปล่อย payload ระยะที่ 2 ที่ถูกพรางไว้ขนาด 1.68MB ในโปรเซส Node แยกที่เงียบ ๆ
- มี
- โค้ดโจมตีถูกออกแบบมาเพื่อลดร่องรอยหลังรัน
- ซ่อนแพตช์ด้วย
git skip-worktree - ตัว dropper จะลบบรรทัดที่ตัวเองแทรกไว้ในไฟล์แพตช์หลังรันครั้งแรก
- ไดเรกทอรีชั่วคราวของระยะที่ 2 จะลบตัวเองระหว่างการทำงาน
- ซ่อนแพตช์ด้วย
ความสามารถของ PinpinRAT
- payload สุดท้ายถูกเรียกว่า “PinpinRAT”
- ชื่อนี้มาจากสตริงภายใน และยังตัดความเป็นไปไม่ได้ไม่ได้ว่าอาจเป็นที่รู้จักในชื่ออื่น
- ไม่พบการอ้างอิงอื่นทางออนไลน์
- payload ถูกซ่อนไว้หลังการพรางหลายชั้น
- obfuscator.io
- base64 เพิ่มอีกสองชั้น
- เมื่อเริ่มทำงาน RAT จะเก็บลายนิ้วมือโฮสต์และส่งออกไป
- IP หลักและรายการ IP ทั้งหมด
- ชื่อผู้ใช้จาก
os.userInfo().username - ชื่อโฮสต์
- OS type, release, platform, architecture
- PID ของโปรเซสและ
process.argvทั้งหมด - เวอร์ชัน Node
- ยังมีโครงสร้างการเข้ารหัสด้วย
- สร้างคู่กุญแจ RSA-2048 ในเครื่อง
- สร้างคีย์เซสชัน AES-256 แบบสุ่ม
aes_psk - ทราฟฟิกหลังจากนั้นจะถูกเข้ารหัสด้วย AES-256-CBC และติดแท็กความถูกต้อง HMAC-SHA256
- คำสั่งที่รองรับให้ความสามารถระดับ รีโมตแอ็กเซสโทรจัน
env: แปลงprocess.envเป็นสตริง JSON แล้วส่งออกupload: อ่านพาธไฟล์ใดก็ได้แล้วขโมยออกไปdownload: เขียนไบต์ที่ผู้โจมตีส่งมาไว้ในพาธที่เขียนได้spawn: รันโปรเซสใดก็ได้ พร้อมตัวเลือกขยายผ่าน shellls,cd,pwd,cp,mv: จัดการไฟล์ซิสเต็มทั่วไปdns: resolve ชื่อใดก็ได้ผ่าน resolver ที่กำหนดdismantle: ลบตัวเอง
ตัวบ่งชี้การถูกเจาะและการตอบสนองทันที
- ภาพที่บรรจุ payload VirusTotal ไม่ถูกตรวจพบโดยเอนจิน AV ใดเลย
- หากเคยรัน ต้องแยกระบบออกจากเครือข่ายทันที
- ต้องเปลี่ยนข้อมูลรับรองจากอุปกรณ์อื่น
- รวมถึงต้องถือว่าคุกกี้และความลับที่ป้องกันด้วยรหัสผ่านถูกเจาะแล้ว
- ตัวบ่งชี้การถูกเจาะ ที่เกี่ยวข้องกับ PinpinRAT มีดังนี้
- C2:
89.124.107.161:80 - งานที่ตั้งเวลาไว้บน Windows:
PinpinWrappedJs - การปลอมตัวเป็นโปรเซสบน macOS:
com.apple.WebKit.Networking - ตัวแปรสภาพแวดล้อม:
NODT_PAYLOAD_PATH,NODT_PAYLOAD_ARGS - PNG chunk guard:
WASMPACK(wAsm) PINPIN_NO_AUTOSTART=1: ปิดการคงอยู่- cronjob ที่มี
mutex.js: อาจมีอยู่ก็ต่อเมื่อ RAT มีสิทธิ์เพียงพอ และอาจไม่มีบน macOS - สตริง anchor ของ
typescript.js:12ff4b51,ticket-harbor-tsc-shim-anchor typescript+5.9.2.patchที่บรรจุ payload- ไดเรกทอรีอาร์ติแฟกต์:
- macOS:
~/Library/Caches/runtime-cache/.cache-<randomhex>/ - Linux:
/tmp/.cache-<randomhex>/ - Windows:
%TEMP%\\.cache-<randomhex>\\ - ภายในมี
payload.jsและmutex.js
- macOS:
- C2:
สัญญาณเตือนที่มาเห็นภายหลัง
- ในข้อความมีถ้อยคำที่เมื่อดูละเอียดแล้วเหมือนมี ร่องรอยของ LLM
- โปรไฟล์ LinkedIn ดูเหมือนปกติในแวบแรก แต่การไล่เรียงวุฒิและคุณสมบัติดูแปลก และไม่มีความเคลื่อนไหวจริง
- ลิงก์โซเชียลมีเดียของเว็บไซต์มีประวัติจริง แต่ชื่อถูกเปลี่ยนในเดือนพฤศจิกายน 2025
- โพสต์ต่าง ๆ มีรายละเอียดต่ำ และออกแนวชมบริษัทแบบกำกวมมากกว่า
- เว็บไซต์บริษัทดูหรู แต่แทบไม่มีตัวตนจริง
- ผู้โจมตีไม่ได้ส่งคำเชิญปฏิทินอย่างเป็นทางการ แต่ส่งแค่เวลาและ Google Meet มาให้
- ระหว่างคุยกล้องก็ปิดตลอด และบอกว่ากำลังเดินทาง
- มีทั้ง VC ที่อ้างว่าอยู่สิงคโปร์, การทำงานตามเขตเวลา CEST, การเข้าหานักพัฒนาในแคนาดา และโดเมน
.ccที่มุ่งลูกค้าในสหรัฐฯ ปรากฏพร้อมกัน- ทำให้ตรวจสอบความน่าเชื่อถือขององค์กรที่อยู่ไกลได้ยากขึ้น
- แต่ละสัญญาณเพียงอย่างเดียวอาจยังไม่ชัด ทว่าหากมี ไฟเหลือง หลายดวงสะสมรวมกัน ก็เป็นรูปแบบที่ควรมองเป็นไฟแดงได้
ผู้อยู่เบื้องหลังและขอบเขต
- ยังยืนยันผู้อยู่เบื้องหลังไม่ได้
- การโจมตีนี้มุ่งเป้านักพัฒนา และประกอบด้วยตัวตนปลอม, เรื่องราวบังหน้าที่น่าเชื่อ, เว็บไซต์ปลอมหลายแห่ง, การนัดหมายอย่างอดทน และกับดัก
gitที่ซับซ้อน - สอดคล้องกับรูปแบบ “หลอกสัมภาษณ์งาน” ที่ผู้กระทำหลายกลุ่มใช้กันในปี 2026
- ในชุมชน Rust บน Reddit ก็มีการพูดถึงกรณีที่ถูกเล็งเป้าในลักษณะคล้ายกัน
- วิธีการนี้แนบแน่นกับเวิร์กโฟลว์นักพัฒนามาก จนถ้าจัดกับดักแบบเดียวกันในรูป
build.rsของรีโพ Rust ก็อาจหลงเชื่อได้
1 ความคิดเห็น
ความคิดเห็นบน Lobste.rs
ผมสับสนที่ชื่อเรื่องคาดเดาว่าอาจเป็น ผู้โจมตีที่มีรัฐหนุนหลัง เพราะในกรณีนี้ไม่มีส่วนไหนที่ดูจำเป็นต้องใช้การเตรียมการหรือความซับซ้อนถึงระดับนั้น
พอจินตนาการความเป็นไปได้ก็ได้อยู่ แต่ดูสมเหตุสมผลพอ ๆ กับสถานการณ์อื่น ๆ เท่านั้น
ถึงอย่างนั้นก็แทบจะแน่ใจว่าไม่น่าใช่ผู้โจมตีที่มีรัฐหนุนหลัง การโจมตีประเภทนี้ตอนนี้ไม่ได้ยากขนาดนั้นแล้ว
เป็นเรื่องบังเอิญจริง ๆ ที่การโจมตีครั้งนี้คล้ายกับกรณีสมมติที่ผมอธิบายไว้ในบล็อกโพสต์เมื่อสัปดาห์ก่อน: the hypothetical I describe in my blog post from a week ago
ผมแค่เลือกหนึ่งในหลาย ๆ รูปแบบการโจมตีที่ดูเป็นไปได้ เพื่อใช้เป็นตัวอย่างว่าผู้เชี่ยวชาญที่เชี่ยวชาญเทคโนโลยีก็ยังถูกหลอกได้ ผมเห็นว่า การหลอกลวงที่ประณีต หลายแบบที่มุ่งเป้าคนกำลังเพิ่มขึ้น แต่ไม่รู้ว่ากระแส หลอกสัมภาษณ์งาน กำลังเกิดขึ้นอยู่ พอได้รู้เรื่องการโจมตีครั้งนี้เลยรู้สึกขนลุกอยู่บ้าง
เมื่อสัปดาห์ที่แล้ว ผมได้รับ ข้อเสนอสัมภาษณ์งาน แบบเดียวกันเป๊ะจาก D____ S_____ แห่ง Lua Ventures ผมเมินไปเหมือนสแปมจากรีครูตเตอร์ส่วนใหญ่ ซึ่งดีแล้วที่ทำแบบนั้น
เหมือนว่าเมื่อไม่กี่วันหรือไม่กี่สัปดาห์ก่อนมีโพสต์ส่งเข้ามาแนวนี้
รู้สึกเหมือนมีบทความคล้าย ๆ กันอยู่หลายบทความ
น่าประหลาดใจที่บอกว่า “ดูเหมือนอีเมลจริง” มันเป็น ข้อความที่ LLM สร้าง ชัดเจนมาก จนผมน่าจะเริ่มสงสัยตั้งแต่ประโยคที่สองแล้ว