TL; DR
2026 წლის 21 მაისს, npm-ის გამომცემელმა jaggle გამოუშვა ცხრა ვერსია (1.0.0 მეშვეობით 1.0.8) @jaggle/resizeobserves დაახლოებით ორსაათიან ფანჯარაში.
პაკეტი ლეგიტიმური უფლების შეცდომაა @juggle/resize-observer polyfill — ფართოდ გამოყენებადი პაკეტი ყოველკვირეული მილიონობით ჩამოტვირთვით — მაგრამ ResizeObserver-ის ფაქტობრივი იმპლემენტაცია არ მოყვება.
სამაგიეროდ, პაკეტის ინსტალაციის შემდგომი კაუჭი აინსტალირებს Python-ის პაკეტურ დატვირთვას, არეგისტრირებს მუდმივობას, როგორც პლატფორმის მშობლიური იერის მქონე გაშვების დროს ბროკერს და ათავსებს კრიპტოვალუტის ტრანზაქციებზე სამიზნე ჯვარედინი პლატფორმის მქონე ბუფერული ჰაიქერს.
Linux მდგრადობა ვლინდება როგორც python3-dbus-helper, MacOS as com.apple.python.runtimeდა Windows as PyRuntimeBroker.
დატვირთვა განუწყვეტლივ აკონტროლებს ბუფერს საფულის მისამართებისთვის. 40-ზე მეტი ბლოკჩეინი და ჩუმად ცვლის კოპირებულ მისამართებს თავდამსხმელის მიერ კონტროლირებადი საფულეებით.
მავნე პროგრამა მთლიანად ლოკალურად მუშაობს, გამავალი C2 ინფრასტრუქტურის გარეშე, რაც თავად ბუფერული მეხსიერების ჩანაცვლებას ექსფილტრაციის მექანიზმად აქცევს.
ძირითადი IOC თავად პაკეტის სახელია: @jaggle/resizeobserves — ყურადღება მიაქციეთ ხმოვანს „jaggle“-ში, რომელიც ამოვარდა და დამატებულ „s“-ს „resizeobserves“-ში.
სიმძიმე: მაღალი.
შეტევა: როგორ მუშაობს ის
npm:@jaggle/resizeobserves ჩვეულებრივ ეკრანზე მავნე პროგრამას არ ჰგავს npm ხედი. მისი README.md არის სიტყვასიტყვით README npm:@juggle/resize-observer — იგივე კოდის ნიმუშები, იგივე გამოყენების ინსტრუქციები, იგივე იმპორტი { ResizeObserver } '@juggle/resize-observer'-დან ცნობები მთელ დოკუმენტში. პლაგიატი იმდენად სრულია, რომ დოკუმენტაციის გადახედვისას ნებისმიერი ადამიანი იფიქრებდა, რომ ლეგიტიმური პაკეტის დოკუმენტაციას კითხულობს.
ის პაკეტი.jsonპირიქით, იშვიათია: არა საცავი ველი, ერთი ბინ შესასვლელი, რომელიც მიუთითებს bin/clipboard-guardian.jsდა პოსტინსტალაცია სკრიპტი, რომელიც მუშაობს კვანძი npm-install.jsREADME-ის „ძირითადი გამოყენების“ მაგალითები მიუთითებს JavaScript-ის იმპლემენტაციაზე, რომელიც tarball-ში არსად არ არსებობს. პაკეტში ერთადერთი JavaScript არის ინსტალაციის სკრიპტი.
ეტაპი 1 — npm პოსტინსტალაციის ჩატვირთვა Python-ის დატვირთვისთვის
npm-install.js პლატფორმაზე ორიენტირებულია. ის პოულობს pip შესრულებადი ფაილი ფიქსირებული ძიების გზის გასწვრივ (/usr/bin/pip3, /usr/local/bin/pip, უკან დაბრუნება python3 -m პიპ), tarball დირექტორიიდან აინსტალირებს შეფუთულ Python პაკეტს და — Linux-ზე — იღებს x კლიპი or Xsel მიერ apt-get, Pacman, ან dnf თუ არცერთი უკვე არ არის წარმოდგენილი:
გამოყენების –break-სისტემის-პაკეტები განზრახ არის გამოყენებული: თანამედროვე Linux დისტრიბუციები Python-ს PEP 668-ის გარედან მართული გარემოს მარკერით აწვდიან, რომელიც ნაგულისხმევად ბლოკავს საიტის მასშტაბით pip ინსტალაციას. ინსტალაციის სკრიპტი აიძულებს ინსტალაციას.
სკრიპტი ასევე ითვალისწინებს sudo-ს. როდესაც გაშვებული uid არის შედეგი sudo npm ინსტალაცია, სცენარში ნათქვამია SUDO_USER და ჭურვები getent passwd იპოვონ რეალური მომხმარებლის საშინაო დირექტორია, შემდეგ კი მისი მუდმივი ფაილები იქ იწერება და არა მასში. / Rootმდგრადობა დამოკიდებულია მომხმარებელზე და არა მთელ სისტემაზე.
ეტაპი 2 — Cross-OS-ის მუდმივი არსებობა გაშვების დროის ბროკერის სახელწოდებით
Python პაკეტის ინსტალაციის შემდეგ, სკრიპტი არეგისტრირებს ავტომატური დაწყების ჩანაწერს სხვადასხვა სახელით თითოეულ ოპერაციულ სისტემაზე:
- Linux — სისტემური მომხმარებლის ერთეული ~/.config/systemd/user/python3-dbus-helper.serviceერთეულის აღწერა is Python D-Bus Runtime Helperსკრიპტი ასევე ცდილობს მის ჩართვას . systemctl – მომხმარებლის ჩართვა, ხელით დაყენებულ სიმბოლურ ბმულზე დაბრუნება default.target.wants/ როდესაც systemctl ვერ ხერხდება. თუ sudo-ს ქვეშ მუშაობს, სკრიპტი გადადის სუდო -უ systemctl –მომხმარებელიერთად XDG_RUNTIME_DIR დააყენეთ ისე, რომ მომხმარებლის ავტობუსის ზარი იმუშაოს.
- MacOS — LaunchAgent-ის სია ~/ბიბლიოთეკა/LaunchAgents/com.apple.python.runtime.plist ერთად RunAtLoad=true მდე KeepAlive=true, შემდეგ კი ჩაიტვირთა მეშვეობით launchctl-ის ჩატვირთვა.
- Windows — PyRuntimeBroker სახელწოდებით დაგეგმილი დავალება, გააქტიურებული AtLogOn-ით, ნულოვანი შესრულების დროის ლიმიტით (ანუ ტაიმაუტის გარეშე), რეგისტრირებული PowerShell-ის მეშვეობით.
სამივე სახელი ერთი შეხედვით სანდოა. python3-dbus-დამხმარე მიჰყვება Linux-ის სამუშაო მაგიდებზე Python-D-Bus-ის ლეგიტიმური ინტეგრაციის დასახელების კონვენციას. com.apple.python.runtime ბაძავს Apple-ის მიერ საკუთარი სერვისებისთვის შებრუნებული DNS ეტიკეტირების მეთოდს. PyRuntimeBroker Windows-ის იმეორებს RuntimeBroker.exe — რეალური, ხელმოწერილი Microsoft-ის სერვისი, რომელიც UWP აპლიკაციების ნებართვის მოთხოვნებს ახორციელებს. ამ კონტექსტში არცერთი მათგანი არ არის რეალური Apple/Microsoft/Python სერვისები, არამედ დამცველი, რომელიც სწრაფ ვიზუალურ სკანირებას ახდენს. systemctl – მომხმარებლის სიის ერთეულები or დაგეგმვის დავალების მიღება ნაკლებად სავარაუდოა, რომ შეირყევა.
ეტაპი 3 — ბუფერული ფაილების გამტაცებელი
Python-ის დატვირთვა, დაინსტალირებულია clipboard_guardian/guardian.py, ყოველ 400 მილიწამში სისტემის ბუფერში კითხვის უსასრულო ციკლს აწარმოებს. თითოეულ მონიშვნაზე, ის მიმდინარე ბუფერშის შინაარსს იღებს pyperclip.paste() და ამუშავებს მათ ორმოცზე მეტი წინასწარ კომპილირებული რეგულარული გამოსახულებების სიასთან, რომლებიც მოიცავს საფულის მისამართის ფორმატებს Ethereum, Bitcoin, Monero, Solana, TRON, TON, Ripple, Litecoin, Dogecoin, Polkadot, NEAR, Cosmos, Algorand, Stellar, Cardano, Bitcoin Cash, Dash, Zcash, Aptos, Sui, Tezos, MultiversX, Harmony, Terra, Injective, Osmosis, Kava, Celestia, Nano, Filecoin, Ronin, Ergo, DigiByte, Hedera, BNB Smart Chain და კიდევ რამდენიმე სხვა, რომლებიც ნაგულისხმევ კონფიგურაციაში ცარიელია (Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin).
როდესაც მატჩი ხდება, სკრიპტი კითხულობს თავდამსხმელის მისამართს ამ ჯაჭვისთვის. ~/.config/clipboard-guardian/config.json (ან მისი პლატფორმის ეკვივალენტები) და ბუფერს ჩანაცვლებული ტექსტით ცვლის:
ქსელის შუქურა არ არსებობს. კლიპერი არ რეკავს სახლში, არ არეგისტრირებს ინფიცირებულ ჰოსტებს, არაფერს არ აშორებს. აშორება თავად ჩანაცვლებაა: როდესაც მომხმარებელი მიმღების მისამართს კოპირებს საფულის ინტერფეისიდან და ათავსებს მას გაგზავნის დიალოგურ ფანჯარაში, ჩასმული მისამართი ოპერატორს ეკუთვნის. თანხები იკარგება ქსელში, მომხმარებლისთვის გამჭვირვალედ.
რა არის ახალი აქ?
კრიპტო-კლიპერის ზოგად შაბლონთან შედარებით რამდენიმე დეტალი გამოირჩევა:
1. npm → Python-ის კროსოვერი. npm-ში ნანახი კრიპტო-კლიპერების უმეტესობა სუფთა JavaScript-ია, რომელიც ხშირად ბუნდოვანია... _0x მასივის როტაცია ან შეფასება(atob(…)) დასტები. ეს ნიმუში იყენებს npm tarball-ს, როგორც Python პაკეტის მიწოდების შეფუთვას — სუფთა Python — და საშუალებას აძლევს pip-ს გაუმკლავდეს დამოკიდებულებების ინსტალაციას (პიპერკლიპი, ფსუტილი, სურვილისამებრ დააყენეთ პროცეტი) გამოცხადებულია პაკეტში pyproject.tomlJavaScript-ის დაბნეულობა არ არის საჭირო. თავად კლიპერი მარტივი, ადვილად წასაკითხი Python-ისგან შედგება.
2. სამმაგი OS მუდმივობის ეტიკეტები შერჩეულია დამაჯერებლობის მიხედვით. ბევრი მრავალპლატფორმული ინსტალერი არეგისტრირებს მუდმივობას ზოგადი სახელწოდებებით (განახლება.სერვისი, helper.plist). ეს ნიმუში ცდილობს აირჩიოს ეტიკეტები, რომლებიც წააგავს პლატფორმაზე დაფუძნებულ გაშვების დროის ბროკერებს თითოეულ ოპერაციულ სისტემაზე. დასახელება ერთადერთი მცდელობაა ფარულობისა — არ არსებობს rootkit, მომხმარებლის ტერიტორიის დამალვა, გზის დაბინდვა. საბედნიეროდ, დამცველები იშვიათად ამოწმებენ. ~/.config/systemd/user/ და რომ სერვისი სახელწოდებით python3-dbus-დამხმარე შემთხვევით მიმოხილვაში არ გამოირჩევა.
3. პროცესის სათაურის შენიღბვა რეალურია, მაგრამ ანტიანალიზი მიძინებულია. Python-ის დატვირთვა განსაზღვრავს _შენიღბვის_პროცესი() ფუნქცია, რომელიც ადგენს პროცესის სათაურს დააყენეთ პროცეტი (Linux/macOS) ან კონსოლის სათაურის დაყენება W (Windows) — და მთავარი () ასე რომ, ps to გამოჩნდება python3-dbus-დამხმარე ნაცვლად python3 …/guardian.pyთუმცა, იგივე მოდული განსაზღვრავს მონიტორის_გაშვება() ფუნქცია, რომელიც ჩამოთვლის ცნობილ პროცესების მონიტორინგის ინსტრუმენტებს (htop, ბიტტოპი, დავალებების მენეჯერი, აქტივობის მონიტორი, პროცესის ჰაკერი, რესურსების მონიტორი, GNOME / KDE / Xfce / MATE სისტემის მონიტორები და ა.შ.) — და მთავარი () არასდროს იძახებს მას. ჩანაცვლების ციკლი უპირობოდ მუშაობს, მიუხედავად იმისა, აქვს თუ არა მომხმარებელს გახსნილი პროცესის მონიტორი. ფუნქცია მოწოდებულ ვერსიაში მკვდარი კოდია. სავარაუდოდ, ის წინა იტერაციიდან დარჩენილია ან ჯერ კიდევ დაუკავშირებელი ფუნქციის ჩარჩოა. ნებისმიერ შემთხვევაში, გამოქვეყნებული დატვირთვის ანტიანალიზის ზედაპირი ერთი პროცესის სათაურის სახელის გადარქმევაა და არა აქტიური მონიტორის თავის არიდება.
4. კომპლექტური კონფიგურაციის შერწყმის ქცევა. npm-install.js წერს ნაგულისხმევი საფულის სიას ~/.config/clipboard-guardian/config.json და, თუ კონფიგურაციის ფაილი უკვე არსებობს, აერთიანებს ნებისმიერ გასაღებს, რომლის არსებული მნიშვნელობა ცარიელია. ეს ნიშნავს, რომ მომხმარებელი, რომელიც ადრე იყო ინფიცირებული და ნაწილობრივ გაწმინდა კონფიგურაცია - ვთქვათ, დაცარიელებით ethereum value — ის ხელახლა შეივსება ყოველი შემდგომი მავნე პაკეტის ინსტალაციისას. კოდის არცერთ გზაზე მუდმივი ფაილი არ იწმინდება.
| თარიღი / დრო (UTC) | თარიღის |
|---|---|
2026-05-21 18:50:32 | @jaggle/resizeobserves@1.0.0 გამოქვეყნებულია. |
2026-05-21 19:55:55 | 1.0.1 გამოქვეყნებული — გარე სკანირებით მონიშნული პირველი ვერსია. |
2026-05-21 19:58:10 | 1.0.2 გამოქვეყნებულია. |
2026-05-21 20:05:03 | 1.0.3 გამოქვეყნებულია. |
2026-05-21 20:09:24 | 1.0.4 გამოქვეყნებულია. |
2026-05-21 20:13:48 | 1.0.5 გამოქვეყნებულია. |
2026-05-21 20:41:52 | 1.0.6 გამოქვეყნებულია. |
2026-05-21 20:43:56 | 1.0.7 გამოქვეყნებულია — დასძენს try/catch საფულის კონფიგურაციის ჩაწერის ეტაპის გარშემო შეფუთვა npm-install.js. |
2026-05-21 20:46:15 | 1.0.8 გამოქვეყნებულია — ინსტალატორის სახელი შეიცვალა — მას სახელი შეეცვალა. npm-install.js → npm-install.cjs (ბაიტის იდენტური შინაარსი). |
2026-05-22 | გამოქვეყნებულია განაჩენები და საერთაშორისო ოქმები. ვერსიები კვლავ ინახება რეესტრში გამოქვეყნების მომენტისთვის (მიმდინარეობს). |
ცხრა ვერსია ერთ საათსა და ორმოცდათექვსმეტ წუთში სწრაფია ტიპოსკვატისთვისაც კი. ნიმუში შეესაბამება ა-ს გამოქვეყნებისა და დაწვის კამპანია — რეესტრის ერთი სახელურის ქვეშ დატბორვა, დეტექციის განხორციელების ნებართვა და ერთი ვერსიის წაშლის შემდეგ ახალ სახელურზე გადასვლა. გაშვებისას ხილული დელტები კოსმეტიკურია: 1.0.1-ში დაემატა ექსპლიციტური /usr/bin/pip3-სტილის ბილიკები pip ძიების სიისკენ (sudo-თავსებადობა), 1.0.7-მა wallet-config write try/catch-ში ჩაამატა და 1.0.8-მა ინსტალატორის სახელი შეცვალა .js to .cjs მისი შინაარსის ბაიტების იდენტურობის შენარჩუნებით. .cjs ტრეკების გადარქმევა npm გაფრთხილებებით ორაზროვანი მოდულის გარჩევადობის შესახებ პაკეტებში აშკარა გარჩევადობის გარეშე. "ტიპი" ველი და შესაძლოა, ეს იყოს ინსტალაციის დროს წარმოქმნილი ხმაურის ჩახშობის მცდელობა, რამაც შეიძლება ყურადღება მიიპყროს. Python-ის დატვირთვა — ერთადერთი ნაწილი, რომელიც რეალურად იპარავს — უცვლელია ცხრავე ვერსიაში.
კომპრომისის ინდიკატორები
პაკეტები
| ეკოსისტემა | პაკეტი | ვერსიები | სტატუსი |
|---|---|---|---|
| npm | @jaggle/resizeobserves | 1.0.0 მეშვეობით 1.0.8 | პირდაპირ ეთერში გამოქვეყნების ადგილას; მოთხოვნილია წაშლა. |
ფაილები და ჰეშები
| ბილიკი | შენიშვნები |
|---|---|
clipboard_guardian/guardian.py(md5 f7935c2c82bc881288611ab6cd634f17) | იდენტურია ცხრავე გამოქვეყნებულ ვერსიაში (1.0.0 მეშვეობით 1.0.8). საკრეჭი მანქანის დატვირთვა. |
npm-install.js (1.0.0 – 1.0.7)npm-install.cjs (1.0.8) | მუდმივი ინსტალერი; იგივე ქცევა ყველა მხრიდან. 1.0.7's .js მდე 1.0.8's .cjs ბაიტების იდენტურია. |
~/.config/clipboard-guardian/config.json | Linux-ის მუდმივი კონფიგურაცია და საფულის პაკეტი. |
~/Library/Application Support/clipboard-guardian/config.json | macOS-ის მუდმივობის კონფიგურაცია და საფულის პაკეტი. |
%APPDATA%\clipboard-guardian\config.json | Windows-ის მუდმივი კონფიგურაცია და საფულის პაკეტი. |
~/.config/systemd/user/python3-dbus-helper.service | Linux-ის ავტომატური გაშვების მუდმივი ფუნქცია. |
~/Library/LaunchAgents/com.apple.python.runtime.plist | macOS LaunchAgent-ის მუდმივობა. |
~/Library/Logs/com.apple.python.runtime.log | აგენტის macOS stdout/stderr ჟურნალი. |
Scheduled Task PyRuntimeBroker | Windows-ის ავტომატური დაწყების დავალება (AtLogOn, ტაიმაუტის გარეშე). |
ქცევის ინდიკატორები
| სიგნალი | აღწერა |
|---|---|
pip install --break-system-packages npm-ის პოსტინსტალაციიდან | აიძულებს Python-ის ინსტალაციას მთელ საიტზე PEP 668 დაცვის გვერდის ავლით. |
apt-get install -y xclip (ან პაკმენი/დნფ) | პაკეტის ინსტალაციის დროს Linux-ზე ბუფერული პროგრამების ინსტალაცია. |
python3-dbus-helper.service სისტემური მომხმარებლის ერთეული | Persistence დარეგისტრირდა დამაჯერებლად შესახედაობის Runtime-Helper-ის სახელით. |
com.apple.python.runtime LaunchAgent | Apple-ის ლეგიტიმური სისტემის გზების გარეთ არსებული მუდმივობის იარლიყი. |
PyRuntimeBroker დაგეგმილი დავალება | ყალბი Windows-ის გაშვების დროის ბროკერის მუდმივი არსებობა ლეგიტიმური ინსტალატორის წყაროს გარეშე. |
Python-ის პროცესი სახელწოდებით python3-dbus-helper იმპორტიორი pyperclip მდე psutil | ქცევითი შეუსაბამობა ნაჩვენებ პროცესის სახელსა და იმპორტირებულ ბიბლიოთეკებს შორის. |
| ბუფერი იცვლება საფულის მისამართის კოპირებიდან დაახლოებით 0.4 წამში | კრიპტოვალუტის მისამართის ჩანაცვლების ხელმოწერის ქცევა. |
თავდამსხმელის საფულის ნაკრები (დამცველების საძიებო სია)
საფულის სია იგზავნება კოდირებული სახით npm-install.js მდე clipboard_guardian/guardian.pyდამცველებს შეუძლიათ გამოიყენონ სია როგორც ბლოკირების სიად (კორპორატიული საფულეებიდან ამ მისამართებზე ნებისმიერი გადარიცხვა საეჭვოდ მიიჩნიონ), ასევე საძიებო გასაღების სახით (დაინფიცირების ინდიკატორად მიიჩნიონ ნებისმიერი ამ სტრიქონის არსებობა არაავთენტიფიცირებულ კონფიგურაციის ფაილში, აწყობის არტეფაქტში ან დეველოპერის მანქანაში).
თავდამსხმელის საფულის პაკეტი
| ქსელი | მისამართი |
|---|---|
| ეთერიუმი / BSC | 0x450c0E58Fc2ba03632d3F5780ad8C966648B6F18 |
| რონინი (EVM) | ronin:450c0E58Fc2ba03632d3F5780ad8C966648B6F18 |
| ვიკიპედია | bc1qs2mpls4p0f7fng073gy2rcdgjpf7la4eugpt6y |
| Bitcoin Cash | bitcoincash:qqmvyxxklzp7l3eslxavhc8phl6hprdf25lwc29nlt |
| Litecoin | ltc1qnefc8x59a9cwtqnflt8hmqvezqw4hc7lt3fkqe |
| Dogecoin | DNEJmYRZtzyK44tZea4S7wV3otTyRk48Fy |
| Dash | XtJ7E6mnhPK93Vib29PGQrTmQjhTTqFwbS |
| Zcash | t1d4hcEnBjdh9X6Wb6R2dxqjnxddJ6ocP8M |
| DigiByte | DPmH2dhiGK3hk3A69tZUMz6tHzGFHBzSrH |
| Monero | 42zhAidVhP7QETk83JAspS59ASALSHFio44vmu6MdDCz15cSqtqsG4QVyzY8vTrjGrTEA6zMbWW6Yft1Ynz1xLfCN5FVbXf |
| სოლანა | DWBAmQLi9gP6mk7UfJfQGYTV1UPK32WekLTqg83q1mc5 |
| TRON | TVgEgMemmJABYYnbNr1Wi8bSgADEkdEBt2 |
| ტონი | UQDTSkvwmptU9eG988KgxS3WjnYAZlXgfpJxnz4mhWZAvULr |
| ripple | r9tj3cMCiqRijNYqNVYNuwKykkQfS8FE4H |
| პოლიკადო | 1JSkYqXQE4d28HdcmTPhbgCrdiPFTfSHxD67tam16p53oBG |
| ახლო | 5d6aec44551529e8cd9ebd3aaa84b3832fc3c7463596b2b6e72635b80096a364 |
| Cosmos | cosmos1pzfl3kv5g8g0ernj86rwpar08u2zl9suthx28e |
| osmosis | osmo1pzfl3kv5g8g0ernj86rwpar08u2zl9surv463t |
| სელესტია | celestia1pzfl3kv5g8g0ernj86rwpar08u2zl9su6ah6a5 |
| ინჟექციური | inj1g5xquk8u9wsrvvkn74uq4kxfvejgkmccn578gh |
| Kava | kava1kjfvgcz4q0y9yae2f3pa33vhj2estxxj3sqqux |
| ჰარმონია | one19hn0n7dzkhtl9ta9ekv5592s85jwstpka76t3a |
| დედამიწა | terra1h0dwu8z405jagdlr0fgr9jllac2sxajzlgme5x |
| Algorand | XSAMN3FTB5SUHUQFENBDDRXIMOPNFVLKAWA3RNOU54DWROMDZ6SR7DZ2PI |
| Stellar | GACNZSV4EQO65NZZUOBS3TMJM7GFTSRNKQBVJOX5P2G7U7SEBQ2ZUDJE |
| კარანო | addr1qyj050vla4cglmyrgm4vzf3dxtn0gynpks4t7vp7s3lg49e9wt0s94hcztzdgecxcz5hu9uk56q60yth6d66w026s2kq3ma56f |
| MultiverseX | erd1slvlgqsmwzk0c8xtksm4eq5vdfnc26slpzqsyxhz456zvme5rpasue6ge0 |
| ატოტოსი | 0x580ecda1ebd6ca5a46be2097568d013308bd54ef1d147acb880b59f7709f280e |
| sui | 0xf7e8a9a970fa65c058745c4b2cf2a856cc0283863e4ed1e142648f26097b0c78 |
| Nano | nano_393n56a5pfz8zg3nkzf7mytfgagzhu5mn9i3xiqg54weq8n1u8jgezxas7dn |
| Filecoin | f1fypyww3xubopfnv7q6yh5l4bko44wmfktf3ckui |
| თეზოს | tz1RccjnorHk61bt73ArLXcdgFjEj6T1ochk |
| Ergo | 9g1pNQGnFg7Hk1d9Z66bgHMkguGU7R41btypAnbG1NF5FJoNdBA |
| ჰედერა | 0.0.10488092 |
ნაგულისხმევ კონფიგურაციაში რეგულარული დაფარვის მქონე, მაგრამ ცარიელი საფულის სლოტებიანი ჯაჭვები — Sei, IOTA, Kaspa, Flow, Nervos, Decred, Ravencoin, Beacon-Chain BNB — ამ ბილდში აქტიურად არ არის ჩანაცვლებული, მაგრამ აღმოჩენილია. განიხილეთ ისინი, როგორც მონიტორინგის არეალი და არა ჩანაცვლების არეალი.
ატრიბუცია და მოტივაცია
კამპანია თხელ ატრიბუციის ზედაპირს გვთავაზობს. ჩვენ ვერ შევძელით ოპერატორის ვინაობის დადასტურება. რა შეგვიძლია ჩავწეროთ:
- გამომცემლის მეტამონაცემები. npm ანგარიში ჯაგლი ელ. ფოსტა მითითებულია, როგორც olgascarlet@deltajohnsons.comდომენი deltajohnsons.com არ გადადის კორპორატიულ იდენტობაზე, რომლის დადასტურებაც შეგვიძლია. npm ანგარიშზე არ ჩანს ელ. ფოსტის დადასტურება და SCM ვერიფიკაცია. GitHub-ზე საჯაროდ დაკავშირებული არ არის.
- საცავის ველი. ის პაკეტი.json არ ატარებს საცავი ველი. ლეგიტიმური npm:@juggle/resize-observer წერტილები რეალურ GitHub რეპოზიტორზე ათასობით ვარსკვლავითა და აქტიური პრობლემებით. რეპოზიტორის ბმულის არარსებობა npm UI-ზე ყველაზე სწრაფი ვიზუალური მაჩვენებელია.
- README პლაგიატი. README პაკეტი ლეგიტიმურია @juggle/resize-observer README ბაიტი ბაიტზე, მათ შორის იმპორტი მაგალითები, რომლებიც მიუთითებენ @juggle/resize-observer თავად (და არა გამოქვეყნების პაკეტი). ოპერატორს იმპორტირებული ფაილების გადაწერაც კი არ შეუწუხებია თავი — ეს საერთო სიგნალი იყო იმისა, რომ readme ფაილი ამოღებული იყო და არა ადაპტირებული.
- არ არსებობს ინფრასტრუქტურა, რომელზეც გადართვა იქნება საჭირო. არ არსებობს C2 საბოლოო წერტილი, DNS ძიება, IP მისამართი. მავნე ქცევა სრულად არის კაფსულირებული ლოკალურ კლიპერში და მყარად კოდირებული საფულის პაკეტში. ეს დომენზე ან ASN-ზე დაფუძნებულ პივოტირებას მიუწვდომელს ხდის. სხვადასხვა კამპანიაში გადაადგილების მცველებმა საფულეები ჰეშ-შესაბამისად უნდა შეადარონ ფაილში არსებულ ნებისმიერ წინა კლიპერს; პაკეტებში საფულის ხელახალი გამოყენება ყველაზე მართვადი ჯვარედინი კამპანიების კავშირია.
- სახელის არჩევანი. @jaggle/resizeobserves ერთი სიმბოლოთი განსხვავდება? @ჯუგლ და ერთი გადახვევა ცნობილიდან ზომის შეცვლის დამკვირვებელიკომბინირებული რედაქტირების მანძილი ორი გლიფია. ეს განზრახ ვიზუალური შეჯახებაა და არა ზოგადი ჩაჯდომის ფორმა.
მოტივაცია, რომელიც დაფუძნებულია დატვირთვის ქცევაზე: სუფთა მონეტიზაცია ოპორტუნისტული ბუფერული ჩანაცვლების გზით. არ ხდება ავტორიზაციის მონაცემების შეგროვება, მასპინძლის თითის ანაბეჭდის აღება, გარემოს ცვლადის წაკითხვა. ოპერატორს არ აინტერესებს ვინ არის მსხვერპლი - მას აინტერესებს, რომ მსხვერპლის შემდეგი გადაცემა მითითებული მისამართებიდან ერთ-ერთზე იყოს. ორმოცი ჯაჭვიანი დაფარვა მოქმედებაში მყოფი ლატარიის მოდელია: ფართოდ გაშლილი, იმედია, რომ ერთი მაღალი ღირებულების პასტა მოხვდება ყოველ N ინსტალაციაზე ერთხელ.
ოპერატორს, როგორც ჩანს, წაშლა არ ადარდებს. ორი საათის განმავლობაში ცხრა ვერსიის გამოქვეყნება ერთი და იგივე დიაპაზონით გამოქვეყნებისა და ჩაწერის სახელურს ჰგავს: მაქსიმალურად გაზარდეთ რეესტრის დატვირთვა წაშლის შეყოვნებამდე და შემდეგ გააგრძელეთ. ჩვენ არ დაგვიკვირვებია @jaggle წერის დროს ხელახლა გამოქვეყნება ახალი არეალის ქვეშ, მაგრამ ჩვენ ველოდებით მსგავს არეალისებს (@ჯაგი, @ჟონგლი-, @ჯოგლი) გამოჩნდება მომდევნო დღეებში, თუ ოპერატორი კვლავ აქტიურია.
გავლენა, ტენდენციები და რა უნდა გააკეთონ დამცველებმა
ზემოქმედების
რეალურ ფულზე გავლენის რაოდენობრივი განსაზღვრა მიმდინარე მონაცემთა ნაკრებიდან შეუძლებელია. კლიპერი არ წერს ტელემეტრიას და საფულეებში ჯერ არ შეინიშნება ჩანაცვლებული გადარიცხვების მიღება ანალიზის შეწყვეტის მომენტისთვის (ჩამოთვლილი ჯაჭვების შემდგომი ანალიზი ჩვენს სიაშია). ლეგიტიმური npm:@juggle/resize-observer საშუალოდ, ყოველკვირეული ჩამოტვირთვების რაოდენობა შვიდნიშნაა — მაღალი ტრაფიკის მქონე სამიზნე — და მავნე პაკეტი გამჟღავნების დროს 24 საათზე ნაკლებ ხანს იყო აქტიური, რაც ზღუდავს დაუცველი პოპულაციის რაოდენობას, მაგრამ არ ამცირებს მის ნულს.
აფეთქების რადიუსი, რომლის თვალყურის დევნებაც ღირს, პირდაპირი ჩამოტვირთვები არ არის. @jaggle/resizeobserves — ისინი სავარაუდოდ პატარაა. ეს არის **გარდამავალი ინსტალაცია**: დეველოპერი ამატებს პაკეტს sandbox პროექტში, რომელიც მუშაობს npm ინსტალაციადა შემდეგ ინსტალაციის კაუჭის გაშვების დავიწყება. ყველა მანქანას, რომელმაც დაამუშავა პოსტინსტალაცია, ახლა ავტომატურად გაშვებისას აქვს თითოეული მომხმარებლის ბუფერული გამანაწილებელი, მიუხედავად იმისა, არის თუ არა პროექტი დისკზე. პაკეტის დირექტორიის წაშლა კვანძის_მოდულები **არ** ხსნის მუდმივობას.
განვითარებადი ნიმუშები
ეს კამპანია ორ ტენდენციას ასახავს.
npm, როგორც Python-ის დატვირთვის მიწოდების შეფუთვა. npm tarball არის 4-ხაზიანი ინსტალერი; ფაქტობრივი მპარავი არის Python, რომელიც დაინსტალირებულია მთელი სისტემის მასშტაბით. pip შეფუთული დირექტორიიდან. ეს სიახლე არ არის — ჩვენ ადრეც გვინახავს npm პაკეტები, რომლებიც Python-ს ტოვებენ — მაგრამ ის კრიპტო-კლიპერის კამპანიებში გაცილებით უფრო გავრცელებული ფორმა ხდება. ოპერატორისთვის უპირატესობა ორმაგია: Python-ის ბუფერული ბიბლიოთეკები (პიპერკლიპი მათ შორის პირველი) უფრო სუფთა და მრავალპლატფორმულია, ვიდრე JavaScript-ის ეკვივალენტები და npm სკანერების უმეტესობა JavaScript ფაილებს დიდ ტვირთად აწვება, Python კი .py მსუბუქად კრავს შეკვრებს. ფასი იმაში მდგომარეობს, რომ ინსტალაციის კვალი გაცილებით ხმაურიანია - ახალი პიპის დაყენება ძნელია დამალვა დეველოპერის მანქანაზე, რომელიც ჩვეულებრივ არ პიპის დაყენება დროს npm ინსტალაცია.
პლატფორმისთვის შექმნილი სახელები ერთადერთ ფარულ ვარიანტად ითვლება. რამდენიმე ბოლოდროინდელმა „კლიპერმა“ და მცირე დატვირთვის მიმღებმა პროგრამამ კოდის დონის დაბნელება მთლიანად მიატოვა ლეგიტიმური იერის მქონე მუდმივი ლეიბლების სასარგებლოდ. python3-dbus-დამხმარე, com.apple.python.runtimeდა PyRuntimeBroker სახელმძღვანელოს მაგალითებია — სახელები, რომლებსაც დამცველი გამოტოვებს ორმოცი მომხმარებლის სერვისის სიაში. ეს არის იაფფასიანი, გამძლე ფარული ფორმა: წაშლა ხდება თითოეული პაკეტისთვის, მაგრამ მუდმივი ფაილები გადარჩება წაშლის შემდეგაც და სერვისი, რომელსაც სახელი ეწოდა რეალური პლატფორმის კომპონენტის მიხედვით, მხოლოდ აშკარა აუდიტით გაიწმინდება.
რა უნდა გააკეთონ დამცველებმა
- აუდიტი ~/.config/systemd/user/, ~/Library/LaunchAgents/ და Get-ScheduledTask გამომავალი დეველოპერის მანქანებზე IOC-ებში ჩამოთვლილი ჩანაწერებისთვის. npm პაკეტის წაშლის შემდეგ ეს ჩანაწერები ადგილზე რჩება; მათი ხელით წაშლაა საჭირო.
- ჩამოთვლილ საფულის მისამართებზე გადარიცხვების დაბლოკვა კორპორატიული ხაზინისა და DeFi საფულის საზღვრებზე, სადაც მისამართების დაშვების სია ხელმისაწვდომია.
- მოძებნეთ ~/.config/clipboard-guardian/config.json (და პლატფორმის ეკვივალენტები) დეველოპერ-მანქანების ფლოტში. ფაილის არსებობა მაღალი სანდოობის ინფექციაა, მიუხედავად იმისა, თუ რომელი პაკეტის ვერსიიდან იქნა იგი მოწოდებული.
- clipboard_guardian/guardian.py-სთვის node_modules/-ის ძიება build-cache-ის სნეპშოტებში, რომლებიც შესაძლოა წაშლამდე თარიღდებოდეს. ფაილის md5 სტაბილურია ყველა განხილულ ვერსიაში.
- Lockfile-pin @juggle/resize-observer (ლეგიტიმური პაკეტი), ამიტომ მომავალი ინსტალაციები ვერ შეძლებენ სხვა რამის გადაჭრას ერთსიმბოლოიანი არასწორი ტიპის შემთხვევაში, განსაკუთრებით ფაილების დაბლოკვის გარეშე სამუშაო პროცესებში, როგორიცაა npx.
- ნებისმიერი npm ინსტალაციის შემდგომი დამუშავება, რომელიც იწვევს pip ინსტალაციას როგორც მაღალი სიმძიმის მშენებლობაში -pipeline პოლიტიკა. არ არსებობს ლეგიტიმური მიზეზი, რის გამოც npm პაკეტს ინსტალაციის დროს pip სჭირდება — Python-ის ინსტრუმენტები ავრცელებს Python-ის ინსტრუმენტებს.
- pyperclip-ის იმპორტისთვის python3-dbus-helper სახელწოდების მქონე პროცესების მოსაძებნად process_iter()-შედარებითი მონიტორინგის მონაცემები. — შენიღბვის შეუსაბამობა (D-Bus დამხმარე, რომელიც ინახავს ბუფერული ბიბლიოთეკას) ყველაზე სუფთა ქცევითი ინდიკატორია, რაც კი გვაქვს.
- ინფიცირებული მანქანებიდან ჩასმული საფულის მისამართების როტაცია. ბუფერული ფაილების გამტაცებელი საფრთხეს უქმნის საფულის ინტერფეისსა და ჩასმის სამიზნეს შორის გზას; ინფიცირების დროს კოპირებული მისამართები შეიძლება ჩუმად შეიცვალოს. ინფიცირების ფანჯრის განმავლობაში გაგზავნილი ყველაფერი უნდა განიხილებოდეს, როგორც პოტენციურად არასწორად მიმართული.
დასკვნა: მდგრადობა წაშლას უფრო დიდხანს აგრძელებს. რეესტრი საბოლოოდ წაშლის @jaggle/resizeobserves ცხრავე ვერსიაში; systemd ერთეული, LaunchAgent და დაგეგმილი დავალება თავისით არ წაიშლება.
ლიტერატურა
- @juggle/resize-observer npm-ზე — ლეგიტიმური პაკეტი, რომელსაც ეს typosquat იმიტაციას უკეთებს; სასარგებლოა, როგორც ბაიტი-ბაიტიანი README პლაგიატის საბაზისო საფუძველი.
- @jaggle/resizeobserves რეესტრის მეტამონაცემები — გამოაქვეყნეთ ცხრა მავნე ვერსიის დროის ნიშნულები, რაც სასარგებლოა სასამართლო ვადების დასადგენად.





