DeviceDoor npm პაკეტი Microsoft 365 Device-Code-ის ფიშინგის ჩარჩოს მიწოდება

DeviceDoor: საჯარო npm პაკეტი, რომელიც აგზავნის Microsoft 365 მოწყობილობის კოდის ფიშინგისა და მასობრივი ფოსტის ჩარჩოს.

სარჩევი

აუცილებლად წასაკითხი პოსტები

საინტერესო უახლესი პოსტები

TL; DR

nolimit-agent არის npm პაკეტი, რომლის გამოქვეყნებული ვერსიები — 1.0.299-დან 1.0.307 წლამდე, გამოვიდა ოთხი დღის განმავლობაში 2026-06-26-დან 2026-06-29-მდე — თითოეული შეიცავს ფიშინგისა და მასობრივი ფოსტის სრული ჩარჩო დამალულ, სრულად დაბინდულ დირექტორიაში. ყველა ვერსიაში მთავარი ჩანაწერი გადადის .ad/x0.js, dotfile-ის სახელობის საქაღალდეში არსებული დაახლოებით 86 ფაილიდან ერთ-ერთი, რომელიც დაახლოებით 4,200 javascript-obfuscator string-array ბლობს შეიცავს; ინსტალაციის კაუჭი და ჩანაწერის განლაგება მთელ ხაზზე იდენტურია.

დაბნელების უკან დგას ა. Microsoft 365 OAuth მოწყობილობის კოდის ნაკადი (login[.]microsoftonline[.]com/common/oauth2/v2.0/devicecode), რომელიც კოდის დამტკიცების შემდეგ კითხულობს მსხვერპლის Outlook-ის შემოსულებს და აგზავნის შეტყობინებებს Microsoft Graph API-ის მეშვეობით; ოპერატორის მიერ მოწოდებული მიმღებების სიებით მართული SMTP და SMS შეტყობინებების მასიური გაგზავნის მექანიზმი; ბრენდის იმპერსონაციის შეტყობინებების შაბლონები; ღია გადამისამართების ბმულების აგება; და დაზვერვა DNS-HTTPS-ის, WHOIS-ის და GitHub კოდის ძიების საშუალებით. ოპერატორის ინფრასტრუქტურისთვის გაშვების დროს ტრაფიკის შუქურები api[.]nolimitent[.]xyz:4100.

დაზარალებული: ნებისმიერი პირი, რომელიც დააინსტალირებს პაკეტის ნებისმიერ ვერსიას და ნებისმიერი Microsoft 365-ის საფოსტო ყუთი რომლის მფლობელიც ამტკიცებს მის მეშვეობით წარმოდგენილ მოწყობილობის კოდს. უახლესი ვერსია, 1.0.307, არის უახლესი თეგი და გააჩნია იგივე მოწყობილობის კოდის საფოსტო ყუთის შესაძლებლობა — მავნე კოდი არ შემოიფარგლება მხოლოდ ერთი წინა ვერსიით.

სიმძიმე: კრიტიკულიდაზარალებული ეკოსისტემა: npmპირველი მოსაძებნი ერთადერთი ინდიკატორი: მასპინძელი api[.]nolimitent[.]xyz.

შეტევა: როგორ მუშაობს ის

კეთილთვისებიანი გარსი ფარული ტვირთის თავზე

შეფუთვას ჩვეულებრივი ზედაპირი აქვს. პაკეტი.json აცხადებს პოსტინსტალაცია კაუჭი – 

text postinstall: node scripts/postinstall.js 

— და შემოწმებისას სკრიპტები/პოსტინსტალ.js უვნებელია: ის აინსტალირებს Windows-ის ბრძანების ფილტრს და მთავრდება. კაუჭი არ არის ის ადგილი, სადაც ქცევა მდებარეობს. მთავარი მდე ბინ ორივე ველი მიუთითებს .რეკლამა/, დირექტორია, რომლის წინა წერტილიც მას შემთხვევითობისგან იცავს ls გამომავალი, და რომლის შინაარსიც ერთგვაროვნად არის დაბინდული მანქანის მიერ. სტატიკურმა სკანერმა დაითვალა ~4,293 კოდირებული დატვირთვის არეალი მთელ .რეკლამა/ მოდულის ნაკრები; javascript-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 

ის $არჩევა პროექციები იღებენ გამგზავნის მისამართებს შემოსული წერილებიდან და მიმღების მისამართებს გაგზავნილი წერილებიდან — ნედლეულს მსხვერპლის კორესპონდენტების რუკის დასადგენად. ეს არის შუაში მოწინააღმდეგის (AiTM) წვდომა თანხმობით და არა პაროლის აღებით: კლასიკური გაგებით ფიშინგისთვის არ არსებობს ავტორიზაციის დამადასტურებელი დოკუმენტი, მხოლოდ დამტკიცების მისაღებად საჭირო კოდი.

მასობრივი ფოსტისა და SMS-ის ძრავა იმიტაციის შაბლონებით

საფოსტო ყუთის გარშემო განთავსებულია საფოსტო გზავნილი. პაკეტი იგზავნება ოპერატორის მიერ რედაქტირებად მონაცემთა ფაილებში — გამგზავნის სიებში (გამგზავნები.txt, smtps.txt) და შაბლონის ფაილი (functions.txt) — რომლის ჩანაცვლების ველში მოცემული მისამართები იკითხება, როგორც იმპერსონაციისთვის განკუთვნილი ფურცლის ფორმა: security@apple.com, login-ვერიფიკაცია, OAuth-სერვისი, ბილინგსა და ანგარიშის შეტყობინებების გამგზავნები a-ს წინააღმდეგ 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 ფოსტის პროვაიდერები — რუტინული ტექნიკა მიმწოდებლის ბრენდირებული შეთავაზების ან სადესანტო გვერდის დამაჯერებელი წარმოსადგენად.

სამიზნეებისა და ინფრასტრუქტურის დაზვერვა

გაგზავნამდე რამდენიმე მოდული აგროვებს კონტექსტს. .ad/x0.js სახელების გადაჭრა DNS-ის მეშვეობით 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 ითხოვს Wayback Machine-ის CDX ინდექსს.

ბრძანება და კონტროლი

დაბნელებული ნაკრების გასწვრივ, .ad/x4.js მიუთითებს ოპერატორის საბოლოო წერტილზე:

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

მასპინძელი იზიარებს თავის შეუზღუდავი ბრენდი გამომცემლის საკუთარი სახელწოდებით და : 4100 პორტი არის ჩარჩოს გამოძახების არხი. ეს არის ყველაზე მდგრადი ინდიკატორი დამცველებისთვის: პაკეტი, დეველოპერის სამუშაო ადგილი ან შემქმნელი აგენტი, რომელიც აღწევს api[.]nolimitent[.]xyz ეს კოდი გაუშვა.

კომპრომისის ინდიკატორები

ქვემოთ მოცემული ინდიკატორები არის ის ინდიკატორები, რომლებზეც დამცველს შეუძლია იმოქმედოს — grep a lockfile, ბლოკირება host ან ძიება proxy და DNS logs. Microsoft-ის საბოლოო წერტილები ჩნდება იმიტომ, რომ ჩარჩო მათ ბოროტად იყენებს; ისინი თავად არ არიან მავნე და არ უნდა დაიბლოკოს.

ინდიკატორი ტიპი სად დამცველის მოქმედება
nolimit-agent (ყველა ვერსია 1.0.299–1.0.307) პაკეტი npm Grep lockfiles / ინსტალაციის ჟურნალები
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 — შა256 e4153bb614ee03ec456e6b5b41926385db6aae0e4f3e771d18e581571ad7ca2a

  • პაკეტი/პაკეტი.json — შა256 8618064f1f6146b4a8f0459aff9154dca1847e3936aa44f4d4cd37e127075644

Microsoft 365-ის დამქირავებლის სიგნალი, რომლის ძებნაც ღირს ამ პაკეტისგან დამოუკიდებლად: მოწყობილობის კოდის წარმატებული შესვლა, რასაც მოჰყვება გრაფიკის წაკითხვა. ფოსტის საქაღალდეები/შემომავალი მდე ფოსტის საქაღალდეები/შეტყობინებები, განსაკუთრებით ისეთი სესიიდან, რომელსაც მომხმარებელი არ ცნობს.

ატრიბუცია და დაკვირვებული ქცევა

დაკვირვებადი რამ განცალკევებულია იმისგან, თუ ვინ დგას მის უკან.

დაკვირვებადი ფაქტები: პაკეტი გამოქვეყნებულია სახელურის ქვეშ ნოლიმიტის აგენტი დაუდასტურებელი Gmail მისამართით და დაკავშირებული წყაროს საცავი არ აქვს; ეს პაკეტი.json აღწერს მას, როგორც „გაფართოებული ელფოსტის გამგზავნს“ და მონიშნულია შემდეგი ტეგით: წითელი გუნდი საკვანძო სიტყვა; გაშვების კოდი კონცენტრირებულია დაფარულ, გაუგებარ გარემოში. .რეკლამა/ დირექტორია, რომლის ხელსაწყოთა ჯაჭვიც (javascript-obfuscator) არის დეკლარირებული დამოკიდებულება; და გამოძახების სახლის ჰოსტი api[.]nolimitent[.]xyz ხელახლა იყენებს შეუზღუდავი ბრენდი. ეს არის ერთი პაკეტი ერთი ოპერატორის მიერ კონტროლირებადი ინფრასტრუქტურის ორიენტირით — არა მრავალპაკეტიანი კლასტერი და არ დაფიქსირებულა რაიმე გადაფარვა ადრე დასახელებულ კამპანიასთან.

ის წითელი გუნდი საკვანძო სიტყვა კლასიფიკაციას არ ცვლის. ორმაგი დანიშნულების ლეგიტიმური შეტევითი უსაფრთხოების ინსტრუმენტი ამას გამჭვირვალედ აკეთებს: წასაკითხი წყარო, ოპერატორის მიერ მოწოდებული სამიზნეები და ფარული ზარის არარსებობა. ეს პაკეტი ინვერსირებს თითოეულ ამ თვისებას - მისი ოპერაციული კოდი ბუნდოვანი და დამალულია და ის მიმართავს ოპერატორის ფიქსირებულ ინფრასტრუქტურას და არა მომხმარებლის მიერ მოწოდებულ სამიზნეს. ქცევა და არა იარლიყი განსაზღვრავს განაჩენს, რომელიც მავნეა.

განზრახვა აქ არ არის დადასტურებული. პოსტი აღწერს კოდის მიერ შესრულებულ სამუშაოს — მოწყობილობის კოდის მოთხოვნას, საფოსტო ყუთის წაკითხვას Graph-ის საშუალებით, კონფიგურირებული რელეების მეშვეობით მასობრივი ფოსტის გაგზავნას, შუქურის გაგზავნას ფიქსირებულ ჰოსტზე — და მოტივს უცვლელად ტოვებს.

გავლენა, ტენდენციები და დამცველის ხელმძღვანელობა

ინსტალაციის დროს ორი ეფექტი მნიშვნელოვანია. პირველი, ნებისმიერი დეველოპერი ან CI აგენტი, რომელიც ინსტალაციას ახორციელებს ნოლიმიტის აგენტი ჩარჩოს ამ ჰოსტზე გადააქვს და აწესებს ზარის მთავარ მისამართს api[.]nolimitent[.]xyzმეორეც, მოწყობილობის კოდის შესაძლებლობა ვრცელდება ინსტალაციის ჰოსტის მიღმა: Microsoft 365 საფოსტო ყუთი, რომლის მფლობელსაც ევალება წარმოდგენილი კოდის დამტკიცება, იკითხება პირდაპირ Graph-ის მეშვეობით, პაროლის გარეშე.

უფრო ფართო ტენდენცია ინტერნალიზაციისკენაა მიმართული. მოწყობილობის კოდის (AiTM) ფიშინგი დამოუკიდებელი ფიშინგის ინფრასტრუქტურიდან საჯარო რეესტრში არსებულ პაკეტში გადავიდა — გავრცელება npm ინსტალაცია ელექტრონული ფოსტით გაგზავნილი ბმულის ნაცვლად. კომპლექტის ამგვარად შეფუთვა ფიშინგის ოპერატორის ჰოსტინგისა და ბმულის მიწოდების პრობლემას რეესტრის ხელმისაწვდომობის სანაცვლოდ ცვლის და ოპერატიულ კოდს სუფთა ინსტალაციის კაუჭისა და dotfile-ის სახელწოდებით დაბინდული დირექტორიის მიღმა მალავს, რომელიც სწრაფ ხელით დათვალიერებას გამორიცხავს.

დამცველებისთვის:

  • რეესტრის და დამოკიდებულების მიმოხილვა. დაამუშავეთ პაკეტი, რომლის მთავარი/ბინ იხსნება ფარულ (წერტილის პრეფიქსით) დირექტორიაში, რომელიც შეიცავს ერთგვაროვნად დაბინდულ პირველი მხარის კოდს, როგორც მაღალი რისკის შემცველს მხოლოდ სტრუქტურის მიხედვით, მიუხედავად იმისა, სუფთად გამოიყურება თუ არა ინსტალაციის კაუჭი. მინიფიფიკაცია არ არის დაბინდვა — კარიბჭე სტრიქონ-მასივის დეკოდერის ხელმოწერაზეა და არა ხაზის სიგრძეზე.
  • Microsoft 365-ის გამკვრივება. მოწყობილობის კოდის ავტორიზაციის ნაკადის შეზღუდვა პირობითი წვდომით, სადაც ის ოპერატიულად არ არის საჭირო; მოწყობილობის კოდის მინიჭება ცნობილი AiTM ვექტორია და იშვიათად სჭირდებათ ინტერაქტიულ მომხმარებლებს. მოწყობილობის კოდის ავტორიზაციის აუდიტი, რასაც მოჰყვება Graph-ის საფოსტო ყუთის დაუყოვნებელი ჩამოთვლა.
  • ქსელის აღმოჩენა. დაბლოკვა და გაფრთხილება ჩართულია api[.]nolimitent[.]xyzმოძებნეთ გამავალი DNS და პროქსი სერვერების ჟურნალები დეველოპერებისა და ააშენეთ ინფრასტრუქტურა.
  • ფოსტის ბილიკის აღმოჩენა. ის მომხმარებელი@მასპინძელი URL-ის გაყალბების ფორმები (სანდო[.]com@…) ამოსაცნობია ფოსტის კარიბჭესა და პროქსი სერვერზე; დროშის ბმულები, რომელთა ავტორიტეტის კომპონენტი წინ უსწრებს @.

პაკეტი ანალიზის დროს npm-ზე იყო ხელმისაწვდომი. რადგან ფარული ჩარჩო მოიცავს მთელ გამოქვეყნებულ ვერსიის ხაზს და მიმდინარე ვერსიას. უკანასკნელი ტეგი (1.0.307) შეიცავს მოწყობილობის კოდის ფუნქციას, რეესტრის წაშლა უნდა მოიცავდეს ყველა ვერსიას და არა მხოლოდ ერთ წინა ვერსიას. 

sca-tools-software-composition-analysis-tools
თქვენი პროგრამული უზრუნველყოფის რისკების პრიორიტეტიზაცია, გამოსწორება და დაცვა
მიიღეთ თქვენი უფასო ანგარიში.
საკრედიტო ბარათი არ არის საჭირო.

უზრუნველყავით თქვენი პროგრამული უზრუნველყოფის შემუშავება და მიწოდება

Xygeni Product Suite-თან ერთად