1 คะแนน โดย GN⁺ 5 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • นักพัฒนาคนหนึ่งในแคนาดาถูกโจมตีแบบ ล่อให้ติดแบ็กดอร์ โดยแอบอ้างว่าเป็นการสัมภาษณ์กับ 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

  • สัญญาณเตือนแรกคือรีโพนี้ดูเหมือน โจทย์ 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 เข้าไปยังฟังก์ชันที่รัน
  • เชนการรันผ่านหลายขั้นตอน
    • มี postinstall hook สี่ตัวที่รัน patch-package
    • หนึ่งในนั้นใช้ git update-index --skip-worktree กับไฟล์แพตช์เพื่อซ่อนจาก git status
    • ตัวโหลดจะอ่าน hidden chunk ที่ต่อท้ายไฟล์ operators/3.png
    • จากนั้นรัน WASM stub ขนาดเล็กใน custom wAsm chunk
    • แล้วปล่อย 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: รันโปรเซสใดก็ได้ พร้อมตัวเลือกขยายผ่าน shell
    • ls, 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

สัญญาณเตือนที่มาเห็นภายหลัง

  • ในข้อความมีถ้อยคำที่เมื่อดูละเอียดแล้วเหมือนมี ร่องรอยของ LLM
  • โปรไฟล์ LinkedIn ดูเหมือนปกติในแวบแรก แต่การไล่เรียงวุฒิและคุณสมบัติดูแปลก และไม่มีความเคลื่อนไหวจริง
  • ลิงก์โซเชียลมีเดียของเว็บไซต์มีประวัติจริง แต่ชื่อถูกเปลี่ยนในเดือนพฤศจิกายน 2025
    • โพสต์ต่าง ๆ มีรายละเอียดต่ำ และออกแนวชมบริษัทแบบกำกวมมากกว่า
  • เว็บไซต์บริษัทดูหรู แต่แทบไม่มีตัวตนจริง
  • ผู้โจมตีไม่ได้ส่งคำเชิญปฏิทินอย่างเป็นทางการ แต่ส่งแค่เวลาและ Google Meet มาให้
    • ระหว่างคุยกล้องก็ปิดตลอด และบอกว่ากำลังเดินทาง
  • มีทั้ง VC ที่อ้างว่าอยู่สิงคโปร์, การทำงานตามเขตเวลา CEST, การเข้าหานักพัฒนาในแคนาดา และโดเมน .cc ที่มุ่งลูกค้าในสหรัฐฯ ปรากฏพร้อมกัน
    • ทำให้ตรวจสอบความน่าเชื่อถือขององค์กรที่อยู่ไกลได้ยากขึ้น
  • แต่ละสัญญาณเพียงอย่างเดียวอาจยังไม่ชัด ทว่าหากมี ไฟเหลือง หลายดวงสะสมรวมกัน ก็เป็นรูปแบบที่ควรมองเป็นไฟแดงได้

ผู้อยู่เบื้องหลังและขอบเขต

  • ยังยืนยันผู้อยู่เบื้องหลังไม่ได้
  • การโจมตีนี้มุ่งเป้านักพัฒนา และประกอบด้วยตัวตนปลอม, เรื่องราวบังหน้าที่น่าเชื่อ, เว็บไซต์ปลอมหลายแห่ง, การนัดหมายอย่างอดทน และกับดัก git ที่ซับซ้อน
  • สอดคล้องกับรูปแบบ “หลอกสัมภาษณ์งาน” ที่ผู้กระทำหลายกลุ่มใช้กันในปี 2026
  • ในชุมชน Rust บน Reddit ก็มีการพูดถึงกรณีที่ถูกเล็งเป้าในลักษณะคล้ายกัน
  • วิธีการนี้แนบแน่นกับเวิร์กโฟลว์นักพัฒนามาก จนถ้าจัดกับดักแบบเดียวกันในรูป build.rs ของรีโพ Rust ก็อาจหลงเชื่อได้

1 ความคิดเห็น

 
GN⁺ 5 시간 전
ความคิดเห็นบน Lobste.rs
  • ผมสับสนที่ชื่อเรื่องคาดเดาว่าอาจเป็น ผู้โจมตีที่มีรัฐหนุนหลัง เพราะในกรณีนี้ไม่มีส่วนไหนที่ดูจำเป็นต้องใช้การเตรียมการหรือความซับซ้อนถึงระดับนั้น
    พอจินตนาการความเป็นไปได้ก็ได้อยู่ แต่ดูสมเหตุสมผลพอ ๆ กับสถานการณ์อื่น ๆ เท่านั้น

    • น่าจะเป็นเพราะ การหลอกลวงที่ประณีต แบบนี้ใช้ทรัพยากรมาก จึงค่อนข้างพบได้น้อย เมื่อเห็นการหลอกลวงที่ประณีตก็มักรู้สึกได้ง่ายว่าอาจมีรัฐหนุนหลัง
      ถึงอย่างนั้นก็แทบจะแน่ใจว่าไม่น่าใช่ผู้โจมตีที่มีรัฐหนุนหลัง การโจมตีประเภทนี้ตอนนี้ไม่ได้ยากขนาดนั้นแล้ว
  • เป็นเรื่องบังเอิญจริง ๆ ที่การโจมตีครั้งนี้คล้ายกับกรณีสมมติที่ผมอธิบายไว้ในบล็อกโพสต์เมื่อสัปดาห์ก่อน: the hypothetical I describe in my blog post from a week ago
    ผมแค่เลือกหนึ่งในหลาย ๆ รูปแบบการโจมตีที่ดูเป็นไปได้ เพื่อใช้เป็นตัวอย่างว่าผู้เชี่ยวชาญที่เชี่ยวชาญเทคโนโลยีก็ยังถูกหลอกได้ ผมเห็นว่า การหลอกลวงที่ประณีต หลายแบบที่มุ่งเป้าคนกำลังเพิ่มขึ้น แต่ไม่รู้ว่ากระแส หลอกสัมภาษณ์งาน กำลังเกิดขึ้นอยู่ พอได้รู้เรื่องการโจมตีครั้งนี้เลยรู้สึกขนลุกอยู่บ้าง

  • เมื่อสัปดาห์ที่แล้ว ผมได้รับ ข้อเสนอสัมภาษณ์งาน แบบเดียวกันเป๊ะจาก D____ S_____ แห่ง Lua Ventures ผมเมินไปเหมือนสแปมจากรีครูตเตอร์ส่วนใหญ่ ซึ่งดีแล้วที่ทำแบบนั้น

    • สงสัยว่าเป็นคนฝั่ง Rust หรือเปล่า บุคคลสำคัญใน คอมมูนิตี้ Rust ตกเป็นเป้าของ Lua เลยอยากรู้ว่าจำกัดอยู่แค่ Rust หรือกว้างกว่านั้น
  • เหมือนว่าเมื่อไม่กี่วันหรือไม่กี่สัปดาห์ก่อนมีโพสต์ส่งเข้ามาแนวนี้

  • น่าประหลาดใจที่บอกว่า “ดูเหมือนอีเมลจริง” มันเป็น ข้อความที่ LLM สร้าง ชัดเจนมาก จนผมน่าจะเริ่มสงสัยตั้งแต่ประโยคที่สองแล้ว

    • สำหรับผมมันไม่ได้ชัดขนาดนั้น แค่รู้สึกเหมือน สำนวนแบบ LinkedIn ซึ่งก็มักฟังดูเหมือน LLM เขียนเหมือนกัน แต่กลิ่นมันคล้ายกันมากจนผมไม่แน่ใจว่าตัวเองมีความสามารถแยกสองอย่างนี้ออกจากกันไหม