แพ็คเกจ DeviceDoor npm ที่ส่งเฟรมเวิร์กฟิชชิ่งรหัสอุปกรณ์ Microsoft 365

DeviceDoor: แพ็กเกจ npm สาธารณะที่มาพร้อมกับเฟรมเวิร์กสำหรับการโจมตีแบบฟิชชิ่งและการส่งอีเมลจำนวนมากโดยใช้รหัสอุปกรณ์ของ Microsoft 365

TL; DR

nolimit-agent เป็นแพ็กเกจ npm ที่มีเวอร์ชันที่เผยแพร่แล้ว — 1.0.299 ถึง 1.0.307ปล่อยออกมาในช่วงสี่วัน ตั้งแต่วันที่ 26 มิถุนายน 2026 ถึง 29 มิถุนายน 2026 — แต่ละครั้งจะมี กรอบการทำงานที่สมบูรณ์แบบสำหรับการหลอกลวงทางอีเมลและการส่งอีเมลจำนวนมาก ภายในไดเร็กทอรีที่ซ่อนอยู่และถูกเข้ารหัสอย่างสมบูรณ์ ในทุกเวอร์ชัน รายการหลักจะชี้ไปยัง .ad/x0.jsหนึ่งในไฟล์ประมาณ 86 ไฟล์ในโฟลเดอร์ที่ตั้งชื่อตามจุด ซึ่งบรรจุสตริงอาร์เรย์ตัวเข้ารหัส JavaScript ประมาณ 4,200 รายการ โดยโครงสร้างการติดตั้งและรูปแบบการเข้าใช้งานนั้นเหมือนกันทุกบรรทัด

เบื้องหลังความคลุมเครือนั้นคือ... Microsoft 365 OAuth device-code flow (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode) ซึ่งเมื่อรหัสได้รับการอนุมัติแล้ว จะอ่านกล่องจดหมาย Outlook และรายการที่ส่งแล้วของเหยื่อผ่าน Microsoft Graph API; กลไกการส่งข้อความ SMTP และ SMS จำนวนมากที่ขับเคลื่อนด้วยรายชื่อผู้รับที่ผู้ให้บริการจัดหาให้; เทมเพลตข้อความปลอมแปลงแบรนด์; การสร้างลิงก์เปลี่ยนเส้นทางแบบเปิด; และการสอดแนมผ่าน DNS-over-HTTPS, WHOIS และการค้นหารหัส GitHub สัญญาณการรับส่งข้อมูลแบบเรียลไทม์ไปยังโครงสร้างพื้นฐานของผู้ให้บริการที่ api[.]nolimitent[.]xyz:4100.

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

ความรุนแรง: วิกฤติระบบนิเวศที่ได้รับผลกระทบ: NPMตัวบ่งชี้แรกที่ควรค้นหาคือ: โฮสต์ api[.]nolimitent[.]xyz.

การโจมตี: มันทำงานอย่างไร

เปลือกนอกที่ดูไม่เป็นอันตรายหุ้มด้วยสิ่งของที่ซ่อนอยู่ภายใน

บรรจุภัณฑ์มีพื้นผิวธรรมดา package.json ประกาศ a หลังการติดตั้ง ตะขอ – 

text postinstall: node scripts/postinstall.js 

— และเมื่อตรวจสอบแล้ว scripts/postinstall.js ไม่เป็นอันตราย: มันติดตั้งโปรแกรมช่วยการทำงานของคำสั่ง Windows แล้วก็จบการทำงาน พฤติกรรมดังกล่าวไม่ได้เกิดขึ้นจากส่วนนี้ หลัก และ ถัง ทั้งสองช่องชี้ไปยัง .ad/สมุดรายชื่อที่มีจุดนำหน้าเพื่อป้องกันไม่ให้ถูกมองข้าม ls เอาต์พุต และเนื้อหาของมันถูกเข้ารหัสโดยเครื่องจักรอย่างสม่ำเสมอ เครื่องสแกนแบบคงที่นับได้ประมาณ 4,293 ช่วงข้อมูลที่เข้ารหัสทั่วทั้งเอาต์พุต .ad/ ชุดโมดูล; จาวาสคริปต์ obfuscator เป็นส่วนประกอบที่จำเป็นสำหรับการพัฒนาซึ่งประกาศไว้ โดยมีรูปแบบการหมุนเวียนของสตริงและอาร์เรย์ที่ตรงกับไฟล์ที่รวมไว้

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

การเข้าถึงกล่องจดหมายรหัสอุปกรณ์ Microsoft 365

โมดูล .ad/x12.js มีคุณสมบัติที่สำคัญที่สุดของเฟรมเวิร์กนี้ นั่นคือ การขับเคลื่อนการให้สิทธิ์การเข้าถึงอุปกรณ์ Microsoft 365 OAuth 2.0:

text POST login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode 

การให้สิทธิ์ด้วยรหัสอุปกรณ์เป็นกระบวนการที่ถูกต้องตามกฎหมายของ Microsoft ซึ่งออกแบบมาสำหรับอุปกรณ์ที่มีข้อจำกัดด้านการป้อนข้อมูล: บริการจะร้องขอรหัส และผู้ใช้จะพิมพ์รหัสนั้นลงไป microsoft.com/deviceloginบนอุปกรณ์เครื่องที่สองและอนุมัติ จากนั้นบริการที่ร้องขอจะได้รับโทเค็น เมื่อบริการที่ร้องขอเป็นของบุคคลอื่นที่ไม่ใช่เจ้าของกล่องจดหมาย การอนุมัติจะมอบโทเค็นให้แก่บุคคลที่สามนั้น เมื่อได้รับโทเค็นแล้ว ไฟล์ `.ad/x12.js` อ่านข้อมูลจากกล่องจดหมายโดยตรงผ่าน Microsoft Graph:

text GET graph[.]microsoft[.]com/v1.0/me/mailFolders/inbox/messages?$top=250&$select=from GET graph[.]microsoft[.]com/v1.0/me/mailFolders/sentitems/messages?$top=250&$select=toRecipients 

การขอ $select การคาดการณ์จะดึงที่อยู่ผู้ส่งจากกล่องจดหมายเข้าและที่อยู่ผู้รับจากรายการที่ส่งแล้ว ซึ่งเป็นวัตถุดิบสำหรับการสร้างแผนที่ผู้ติดต่อของเหยื่อ นี่คือการเข้าถึงแบบผู้โจมตีแทรกกลาง (AiTM) โดยอาศัยความยินยอมแทนที่จะเป็นการดักจับรหัสผ่าน: ไม่มีข้อมูลประจำตัวให้ทำการฟิชชิ่งในความหมายแบบดั้งเดิม มีเพียงรหัสเพื่อขออนุมัติเท่านั้น

ระบบส่งอีเมลและ SMS จำนวนมาก พร้อมเทมเพลตการปลอมแปลงตัวตน

บริเวณทางเข้าตู้จดหมายจะมีเครื่องส่งจดหมายอยู่ แพ็กเกจนี้จะจัดส่งไฟล์ข้อมูลที่ผู้ใช้งานสามารถแก้ไขได้ เช่น รายชื่อผู้ส่ง (ผู้ส่ง.txt, smtps.txt) และไฟล์เทมเพลต (ฟังก์ชัน.txt) — ซึ่งที่อยู่ตัวแทนเหล่านั้นอ่านได้เหมือนเอกสารคัดเลือกนักแสดงเพื่อการปลอมตัว: security@apple.com, login-การตรวจสอบ, บริการ OAuth, การเรียกเก็บเงิน และผู้ส่งการแจ้งเตือนบัญชีกับ yourdomain.com ตัวแทนโอเปเรเตอร์จะเข้ามาแทนที่ ฝั่ง SMS จะมีโทรศัพท์อยู่ด้วยebook และการกำหนดค่าเกตเวย์ โปรแกรมส่งอีเมลจะวนซ้ำรายชื่อผู้รับที่ผู้ใช้งานกำหนด และส่งผ่านรีเลย์ SMTP ที่กำหนดค่าไว้

เพื่อให้การเชื่อมต่อสำเร็จลุล่วง .ad/xu.js และ .ad/xq.js สร้าง URL ที่ใช้ประโยชน์จากความกำกวมในการวิเคราะห์ URL และการติดตามการคลิก รูปแบบการปลอมแปลงจะฝังหน่วยงานที่ดูน่าเชื่อถือไว้ก่อนที่จะ... @ ดังนั้นคำนำหน้าแสดงจึงแตกต่างจากโฮสต์จริง:

text https://trusted[.]com@      https://trusted[.]com%40      https://trusted[.]com:80@ https://redirect[.]example[.]com/      https://track[.]example[.]com/click? 

นอกจากนี้ เฟรมเวิร์กยังดึงไอคอนเว็บไซต์จากเว็บไซต์ผู้บริโภครายใหญ่ๆ มาใช้ด้วย enterprise ผู้ให้บริการอีเมล — เทคนิคทั่วไปสำหรับการสร้างข้อความแจ้งเตือนหรือหน้า Landing Page ที่มีตราสินค้าของผู้ให้บริการอย่างน่าเชื่อถือ

การลาดตระเวนเป้าหมายและโครงสร้างพื้นฐาน

โมดูลหลายตัวจะรวบรวมข้อมูลบริบทก่อนส่งข้อมูล .ad/x0.js แก้ไขชื่อผ่าน DNS-over-HTTPS (dns[.]google/resolve), .ad/xa.js สอบถามข้อมูล WHOIS (api[.]whois[.]vu), และ .ad/x9.js เรียกใช้การค้นหาโค้ด GitHub (api[.]github[.]com/search/code?q=) — รูปแบบที่สอดคล้องกับการค้นพบการตั้งค่าเซิร์ฟเวอร์อีเมลและข้อมูลประจำตัว SMTP ที่เปิดเผยเพื่อป้อนให้กับรายการรีเลย์ .ad/xs.js ค้นหาข้อมูลในดัชนี CDX ของ Wayback Machine

คำสั่งและการควบคุม

ท่ามกลางฉากที่ถูกบดบังไว้ .ad/x4.js อ้างอิงถึงเอนด์พอยต์ของตัวดำเนินการ:

text http://api[.]nolimitent[.]xyz:4100 

โฮสต์แบ่งปัน ไม่จำกัด แบรนด์ที่มีการตั้งชื่อโดยสำนักพิมพ์เอง และ : 4100 พอร์ตคือช่องทางการติดต่อหลักของเฟรมเวิร์ก นี่คือตัวบ่งชี้ที่ทนทานที่สุดสำหรับผู้ป้องกัน: แพ็กเกจ เวิร์กสเตชันของนักพัฒนา หรือเอเจนต์การสร้างที่เข้าถึงได้ api[.]nolimitent[.]xyz ได้รันโค้ดนี้แล้ว

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

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

ตัวบ่งชี้ ประเภท ที่ไหน การกระทำของผู้พิทักษ์
nolimit-agent (ทุกเวอร์ชัน 1.0.299–1.0.307) แพ็คเกจ NPM Grep lockfiles / install logs
api[.]nolimitent[.]xyz (:4100) โฮสต์ C2 .ad/x4.js บล็อก; ค้นหาบันทึก DNS + พร็อกซี
.ad/ ซ่อนไดเร็กทอรีเป็นเป้าหมายหลัก/bin โครงสร้าง package.json สัญญาณรบกวนคงที่ในการตรวจสอบทะเบียน
trusted[.]com@ / %40 / :80@ แบบฟอร์มลิงก์ การปลอมแปลง URL .ad/xu.js, .ad/xq.js การตรวจสอบ URL ของอีเมล/พร็อกซี
การให้สิทธิ์รหัสอุปกรณ์ + กราฟ inbox/sentitems อ่าน พฤติกรรม .ad/x12.js การเข้าสู่ระบบ M365 + การตรวจสอบการตรวจสอบกราฟ

ค่าแฮชไฟล์ที่บันทึกไว้ในขั้นตอนการคัดกรอง:

  • แพ็คเกจ/.ad/x0.js — sha256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a

  • แพ็คเกจ/แพ็คเกจ.json — sha256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

สัญญาณบ่งชี้ผู้เช่า Microsoft 365 ที่น่าสนใจซึ่งแยกต่างหากจากแพ็กเกจนี้: การลงชื่อเข้าใช้ด้วยรหัสอุปกรณ์สำเร็จ ตามด้วยการอ่านกราฟอย่างรวดเร็ว โฟลเดอร์อีเมล/กล่องจดหมายเข้า และ โฟลเดอร์อีเมล/รายการที่ส่งแล้วโดยเฉพาะอย่างยิ่งจากเซสชันที่ผู้ใช้ไม่รู้จัก

การระบุสาเหตุและพฤติกรรมที่สังเกตได้

สิ่งที่สังเกตได้นั้นย่อมแยกออกจากตัวตนที่อยู่เบื้องหลัง

ข้อเท็จจริงที่สังเกตได้: แพ็กเกจนี้เผยแพร่ภายใต้แฮนเดิล ตัวแทนโนลิมิต ด้วยที่อยู่อีเมล Gmail ที่ไม่ได้รับการยืนยันและไม่มีแหล่งเก็บข้อมูลที่เชื่อมโยงอยู่; package.json อธิบายว่าเป็น “โปรแกรมส่งอีเมลขั้นสูง” และติดแท็กด้วย ทีมสีแดง คำหลัก; โค้ดรันไทม์ถูกรวมไว้ในส่วนที่ซ่อนอยู่และถูกทำให้คลุมเครือ .ad/ ไดเร็กทอรีที่มีชุดเครื่องมือ (จาวาสคริปต์ obfuscator) เป็นการพึ่งพาที่ประกาศไว้ และโฮสต์ที่เรียกกลับ api[.]nolimitent[.]xyz นำกลับมาใช้ใหม่ ไม่จำกัด แบรนด์นี้ เป็นแพ็กเกจเดียวที่มีโครงสร้างพื้นฐานสำคัญที่ควบคุมโดยผู้ให้บริการเพียงแห่งเดียว ไม่ใช่กลุ่มแพ็กเกจหลายรายการ และไม่พบความซ้ำซ้อนกับแคมเปญที่เคยตั้งชื่อไว้ก่อนหน้านี้

การขอ ทีมสีแดง คำสำคัญไม่ได้เปลี่ยนแปลงการจำแนกประเภท เครื่องมือรักษาความปลอดภัยเชิงรุกที่ถูกต้องตามกฎหมายซึ่งมีคุณสมบัติใช้งานได้สองทางนั้น จะทำอย่างโปร่งใส: ซอร์สโค้ดที่อ่านได้ เป้าหมายที่ผู้ปฏิบัติงานจัดหาให้ และไม่มีการติดต่อกลับไปยังเซิร์ฟเวอร์หลักที่ซ่อนอยู่ แพ็กเกจนี้กลับด้านคุณสมบัติเหล่านั้นทั้งหมด — รหัสการทำงานของมันถูกทำให้คลุมเครือและซ่อนไว้ และมันส่งสัญญาณไปยังโครงสร้างพื้นฐานของผู้ปฏิบัติงานที่กำหนดไว้ แทนที่จะเป็นเป้าหมายที่ผู้ใช้จัดหาให้ พฤติกรรม ไม่ใช่ป้ายกำกับ เป็นตัวตัดสิน ซึ่งก็คือเป็นอันตราย

ในที่นี้ไม่ได้ระบุเจตนา โพสต์นี้อธิบายว่าโค้ดทำอะไรบ้าง เช่น ขอรหัสอุปกรณ์ อ่านกล่องจดหมายผ่าน Graph ส่งอีเมลจำนวนมากผ่านรีเลย์ที่กำหนดค่าไว้ และส่งสัญญาณไปยังโฮสต์ที่กำหนดไว้ แต่ไม่ได้ระบุแรงจูงใจ

ผลกระทบ แนวโน้ม และคำแนะนำสำหรับผู้เล่นตำแหน่งกองหลัง

ผลกระทบสองประการที่เกิดขึ้นระหว่างการติดตั้งมีความสำคัญ ประการแรก นักพัฒนาหรือเอเจนต์ CI ใด ๆ ที่ทำการติดตั้ง ตัวแทนโนลิมิต นำเฟรมเวิร์กไปยังโฮสต์นั้นและสร้างการเรียกกลับไปยังเซิร์ฟเวอร์ต้นทาง api[.]nolimitent[.]xyzประการที่สอง ความสามารถในการใช้รหัสอุปกรณ์ขยายขอบเขตไปไกลกว่าโฮสต์ที่ติดตั้ง: กล่องจดหมาย Microsoft 365 ที่เจ้าของได้รับการชักจูงให้ยอมรับรหัสที่แสดง จะถูกอ่านโดยตรงผ่าน Graph โดยไม่ต้องมีการส่งรหัสผ่านใดๆ เลย

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

สำหรับกองหลัง:

  • การตรวจสอบทะเบียนและการพึ่งพา จัดการกับพัสดุที่มี หลัก/ถัง แปลงเป็นไดเร็กทอรีที่ซ่อนอยู่ (มีจุดนำหน้า) ซึ่งประกอบด้วยโค้ดของบริษัทเองที่ถูกเข้ารหัสแบบเดียวกันทั้งหมด โดยถือว่ามีความเสี่ยงสูงเนื่องจากโครงสร้างเพียงอย่างเดียว โดยไม่ขึ้นอยู่กับว่า hook การติดตั้งดูสะอาดหรือไม่ การย่อขนาดโค้ดไม่ใช่การเข้ารหัส — ตรวจสอบที่ลายเซ็นตัวถอดรหัสสตริงอาร์เรย์ ไม่ใช่ความยาวของบรรทัด
  • การเสริมความปลอดภัยของ Microsoft 365. จำกัดการเข้าถึงโดยใช้รหัสอุปกรณ์ด้วย Conditional Access ในกรณีที่ไม่จำเป็นต่อการปฏิบัติงาน การให้สิทธิ์โดยใช้รหัสอุปกรณ์เป็นช่องโหว่ของ AiTM ที่รู้จักกันดี และผู้ใช้แบบโต้ตอบไม่ค่อยจำเป็นต้องใช้ ตรวจสอบการลงชื่อเข้าใช้ด้วยรหัสอุปกรณ์ จากนั้นจึงทำการแจงนับกล่องจดหมาย Graph ทันที
  • การตรวจจับเครือข่าย บล็อกและแจ้งเตือนเมื่อ api[.]nolimitent[.]xyzตรวจสอบบันทึก DNS ขาออกและบันทึกพร็อกซีทั่วทั้งโครงสร้างพื้นฐานสำหรับนักพัฒนาและการสร้างระบบ
  • การตรวจจับเส้นทางอีเมล การขอ ผู้ใช้@โฮสต์ แบบฟอร์มปลอมแปลง URL (trusted[.]com@…) สามารถตรวจจับได้ที่เกตเวย์อีเมลและพร็อกซี ทำเครื่องหมายลิงก์ที่มีส่วนประกอบอำนาจนำหน้า an @.

แพ็กเกจดังกล่าวใช้งานได้บน npm ในขณะที่ทำการวิเคราะห์ เนื่องจากเฟรมเวิร์กที่ซ่อนอยู่ครอบคลุมทั้งเวอร์ชันที่เผยแพร่และเวอร์ชันปัจจุบัน ล่าสุด แท็ก (1.0.307) มีความสามารถด้านรหัสอุปกรณ์ การลบข้อมูลในรีจิสทรีควรครอบคลุมทุกเวอร์ชัน ไม่ใช่แค่เวอร์ชันก่อนหน้าเวอร์ชันเดียว 

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

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

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