TL; DR
ერთმა npm გამომცემელმა გააგზავნა რვა პატარა პაკეტი, რომელთა სახელებიც ბლოკჩეინისა და საფულის შემუშავების ყოველდღიური საშენი ბლოკების მსგავსად იკითხება. base58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpersდა crypto-validate-libთითოეული მათგანი შეიცავს მოქმედ უტილიტას. თუმცა, ამ უტილიტის შემდეგ ემატება თვითგამოძახებადი კოდის ბლოკი, რომელიც მუშაობს მოდულის იმპორტისთანავე.
იმპორტიდან დაახლოებით 37 წამის შემდეგ, ეს ბლოკი შიფრავს პაკეტში შემავალ დატვირთვას, რომელიც შენიღბულია, როგორც სატესტო მოწყობილობა, წერს მას მომხმარებლის საშინაო დირექტორიაში დამალულ ფაილში, რეგისტრირდება ყოველ ჯერზე გადატვირთვისთვის. login Windows-ზე, macOS-სა და Linux-ზე და გაშიფრულ სკრიპტს ცალკე პროცესის სახით უშვებს. npm ინსტალაციის დროს ეს არაფერი ირთვება; ის კოდის იმპორტსა და გაშვებას ელოდება, რაც ინსტალაციასთან შედარებით უფრო მშვიდი მომენტია.
დატვირთვა არ არის გაუმჭვირვალე. ის იგზავნება როგორც უბრალო base64, ამიტომ „ტესტირების მოწყობილობის“ გაშიფვრა მეორე საფეხურს სრულად აღადგენს: ა კრიპტო-საფულე და საიდუმლოებების მპარავი რომელიც ელოდება მანქანის უმოქმედოდ გაჩერებას, აგროვებს კერძო გასაღებებსა და სათესლე ფრაზებს, დაშიფვრავს თითოეულ ნაპოვნი მონაცემის RSA-4096 გასაღებით და ამოიღებს მას საჯარო IPFS საცავში მიმაგრებით, ყოველ 12 საათში ერთხელ უკუკავშირს უბრუნებს.
ჩვენ ვაკვირდებით კლასტერს, როგორც PhantomSyncანალიზის დროს რვავე პაკეტი npm-ის რეესტრში იყო განთავსებული და ერთი ანგარიშის ქვეშ იყო გამოქვეყნებული.
| ეკოსისტემა | npm |
| პაკეტები | base58-utils, abi-encode, eth-dev, arb-kit, layer2-sdk, solana-key-utils, eth-wallet-helpers, crypto-validate-lib |
| სამიზნე პლატფორმები | Windows, macOS, Linux |
| ძირითადი ქცევა | დაგვიანებული, იმპორტის დროის წვეთოვანი დამალულია, როგორც სატესტო მოწყობილობა; ინსტალაციების cross-platform მუდმივობა |
| Payload | კრიპტო-საფულისა და საიდუმლოებების მოპარვის ინსტრუმენტი, RSA-4096 დაშიფვრა, ექსფილტრაცია საჯარო IPFS პინინგის საშუალებით |
შეტევის ანატომია
პირველივე წაკითხვისას თითოეული შეფუთვა შეუმჩნევლად გამოიყურება. base58-utilsმაგალითად, არის რამდენიმე კილობაიტი ნულოვანი დამოკიდებულების მქონე Base58 / Bitcoin-WIF დამხმარე კოდი — ზუსტად ის, რასაც სახელი გვპირდება. შესაბამისი კოდი მდებარეობს მას შემდეგ, რაც მოდულის მოდული.ექსპორტი, სადაც ფაილის ზედა ნაწილის სწრაფად გადახედვისას მკითხველი ნაკლებად სავარაუდოა, რომ მოძებნოს: თვითგამოძახებადი ფუნქცია, რომელიც ტაიმერის მეშვეობით თავად იგეგმება.
პაკეტის წყაროდან რეკონსტრუირებული ოპერაციების ჯაჭვი ასე მუშაობს:
1. Package is required() by the host project 2. A self-invoking function schedules a callback ~37,000 ms later (setTimeout) 3. On fire, the callback reads test/fixtures/keypairs.dat (a base64 blob) 4. It base64-decodes that blob into a Node.js script 5. It writes the script to ~/.cache-db/.node-sync/syncd.js (mode 0o700) 6. It installs login-persistence for that script (see below) 7. It spawns "node syncd.js" as a detached process დიზაინის ორი ვარიანტი გამოირჩევა.
ტვირთი მოძრაობს როგორც სატესტო მოწყობილობა. მეორე ეტაპი არ არის დაწერილი აშკარა კოდის სახით. ის არსებობს test/fixtures/keypairs.dat, base64 ფაილი, რომლის სახელიც ერწყმის პაკეტს, რომელიც აცხადებს, რომ ამუშავებს გასაღებების წყვილებს. ადამიანისთვის, რომელიც tarball-ს ათვალიერებს, ეს ნიმუშის მონაცემებს ჰგავს; დამატებული კოდისთვის კი ეს არის სკრიპტი, რომელიც უნდა გაშიფროს და გაუშვას. თავად dropper არ შეიცავს ქსელის მისამართს — ისინი მეორე ეტაპზეა — მაგრამ არ არის დამატებითი დაბნეულობა: ფიქსაცია base64-ის ერთი ფენაა, ამიტომ მისი გაშიფვრა (base64 -d) სრულად აღადგენს სინქრონიზებული.js და მისი ქსელის ქცევა. შემდეგ ნაწილში განხილულია, თუ რას აკეთებს აღდგენილი ეტაპი.
დეტონაცია დაგვიანებულია და დაკავშირებულია იმპორტთან და არა ინსტალაციასთან. რადგან ტრიგერი არის მოითხოვს() პლუს დაახლოებით 37 წამიანი ტაიმერი ინსტალაციის კაუჭის ნაცვლად, ქცევა გვერდს უვლის შემოწმებებს, რომლებიც მხოლოდ უყურებენ npm ინსტალაცია ნაბიჯი და შეფერხება ბევრ ხანმოკლე sandbox და CI გაშვებას აჭარბებს. როდესაც რამე შესრულდება, პაკეტის მიმღები ინსტალაცია დიდი ხნის დასრულებული იქნება.
როგორც კი გაშიფრული სკრიპტი დისკზე იქნება ~/.cache-db/.node-sync/syncd.js — არჩეული გზა, რომელიც წასაკითხად არის შერჩეული, როგორც რუტინული ქეშის დირექტორია — dropper-ი მას სამივე ძირითად პლატფორმაზე გადატვირთვის შემდეგაც კი გადაურჩენს:
- Linux: cron ჩანაწერი, რომელიც ხელახლა იწყებს სკრიპტს. ჩანაწერი ინსტალირდება არსებული crontab-ის ფილტრაციით. grep -v სინქრონიზებული, რასაც გვერდითი ეფექტი აქვს - ახალი ჩანაწერი არ გამოჩნდება იმავე სახელის greps-ის მქონე უბრალო სიაში.
- Windows: დაგეგმილი დავალება სახელწოდებით WinNodeSync, რომელიც 12-წუთიანი ინტერვალით განმეორდება.
- macos: დაწყებული სამუშაო, რომელსაც ეტიკეტი აქვს com.apple.syncd, რომელიც რამდენიმე პაკეტშია წარმოდგენილი — ეტიკეტი, რომელიც Apple-ის ლეგიტიმურ სისტემურ სერვისს ბაძავს.
შემდეგ სკრიპტი დაუყოვნებლივ იწყება, როგორც განცალკევებული პროცესი, ამიტომ ის განაგრძობს მუშაობას იმპორტიორი პროგრამის დასრულების შემდეგ.
რას აკეთებს მეორე ეტაპი
რადგანაც ფიქსაცია წარმოადგენს ერთ base64 ფენას, მეორე ეტაპი დეკოდირდება სუფთად და მისი სრულად წაკითხვა შესაძლებელია. რვავე პაკეტი შეიცავს ერთი და იგივე სკრიპტის სამი ვარიანტიდან ერთ-ერთს, რომელიც თავს სათაურის კომენტარში იდენტიფიცირებს, როგორც phantom syncd v3 — topo durmiente („მძინარე თოლი“). მისი ამოცანაა კრიპტოვალუტის საფულის მასალისა და დეველოპერის საიდუმლოებების მოპარვა და მათი აპარატიდან გაგზავნა. ის შემდეგი ნაბიჯებით მუშაობს:
- 1. დაელოდეთ სანამ მანქანა უმოქმედო იქნება. სანამ რამეს გააკეთებ, სინქრონიზებული.js ამოწმებს, რამდენ ხანს იყო მომხმარებელი არააქტიური და მხოლოდ გარკვეულ ზღვარს (დაახლოებით 15 წუთი) გადააჭარბებს — xprintidle Linux-ზე, იორეგი HIDdleTime macOS-ზე და PowerShell უმოქმედო დროის მოთხოვნა Windows-ზე. შესაბამისად, მონაცემების შეგროვება, როგორც წესი, მაშინ ხდება, როდესაც კლავიატურასთან არავინ არის.
- 2. მიიღეთ დისტანციურად მართვადი გააქტიურების გადამრთველისკრიპტი მოქმედებამდე იღებს მცირე კონფიგურაციას ჩიხიდან. ძირითადი წყაროა GitHub-ის gist-ის ნედლი URL (gist.githubusercontent.com/juang55/…/cfg.txt); სკრიპტი მხოლოდ მაშინ აქტიურდება, თუ ეს კონფიგურაცია კითხულობს აქტიური=1თუ არსი მიუწვდომელია, ის კვლავ სამ მყარად კოდირებულ IPFS კონტენტის იდენტიფიკატორზეა დამოკიდებული, რომლებიც საჯარო კარიბჭეების მეშვეობით არის მოძიებული. gateway.pinata.cloud, ipfs.ioდა cloudflare-ipfs.comეს ოპერატორს აძლევს ფაქტობრივი ჩართვის/განიარაღების კონტროლის შემდგომ შესაძლებლობას და ჩამოგდებისადმი მდგრად სარეზერვო საშუალებას. (ყველაზე პატარა ვარიანტი, გაიგზავნა...) კრიპტო-ვალიდატის-ლიბ, eth-საფულის დამხმარეებიდა სოლანას გასაღების უტილიტები, არსის ფენა ამოღებულია და მხოლოდ IPFS იდენტიფიკატორებს ეყრდნობა.)
- 3. საფულის მასალისა და საიდუმლოებების შეგროვება. სკრიპტი მომხმარებლის საწყის დირექტორიაში გადაადგილდება — ~/.config/solana, ~/.ethereum/keystore, ~/.foundry, ~/.hardhat, / .სშდა Desktop/დოკუმენტები/ჩამოტვირთვა (ესპანურენოვანი საქაღალდეების სახელების ჩათვლით), პლუს ~/.env და shell rc ფაილები და მათი ეკვივალენტი აპლიკაცია მდებარეობებზე Windows-ზე. ის მიზნად ისახავს Ethereum-ის კერძო გასაღებებს, Bitcoin WIF გასაღებებს, BIP-39-ის საწყის ფრაზებს, Solana-ს გასაღებების წყვილებს, Ethereum-ის გასაღებების შენახვის JSON-ს, SSH გასაღებებს და საიდუმლოების მატარებელ გარემოს ცვლადებს. უფრო დიდი ვარიანტი (in abi-encode, base58-utils, eth-dev) შეიცავს სრულ 2048 სიტყვიან BIP-39 ლექსიკონს და იყენებს რეგულარულ გამოთქმებს ამონაწერი ინდივიდუალური გასაღებები და დადასტურებული საწყისი ფრაზები ნებისმიერი ტექსტიდან, რომელსაც ის კითხულობს; ორი პატარა ვარიანტი ფაილებს საკვანძო სიტყვით ადარებს (თესლი, mnemonic, საფულე, მეტამასკი, phantom, ledger, Box, ...) და მთლიანი ფაილების ატვირთვა.
- 4. დაშიფვრა და ამოღება საჯარო პინინგის სერვისის მეშვეობით. თითოეული აღმოჩენა შეფუთულია მასპინძლის თითის ანაბეჭდთან (მომხმარებლის სახელი@მასპინძლის სახელი, პლატფორმა, დროის ნიშნული) და დაშიფრულია სკრიპტში ჩაშენებული მყარი კოდირებული RSA-4096 საჯარო გასაღებით. დაშიფრული ჩანაწერი შემდეგ აიტვირთება IPFS-ზე მიმაგრებით. api.pinata.cloud/pinning/pinJSONToIPFS, ავტორიზებულია Pinata API-ის მყარი კოდირებული სერთიფიკატებით. არ არსებობს სპეციალური C2 სერვერი, რომლის ამოღებაც შესაძლებელია: მოპარული მონაცემები ინახება საჯარო დეცენტრალიზებულ საცავში, რომლის აღდგენაც ოპერატორს შეუძლია შედეგად მიღებული კონტენტის ჰეშების გამოყენებით. ატვირთვები დაყოფილია რამდენიმე წამიანი შემთხვევითი რხევით და ლოკალური ჟურნალით. დროის ნიშნული | გასაღების ტიპი | დაბრუნებული ჰეში ინახება ~/.cache-db/.node-sync/.sl.
- 5. გააგრძელეთ და ჩართეთ შუქნიშანი 12-საათიანი ციკლით. მეორე ეტაპი აღადგენს საკუთარ მუდმივობას — Linux-ის cron ჩანაწერი, ა. com.apple.syncd macOS-ზე დავალების გაშვება და დაგეგმილი დავალების სახელწოდება WindowsNodeSync Windows-ზე — დაყენებულია ყოველ 12 საათში ერთხელ ხელახლა გასაშვებად. გაითვალისწინეთ, რომ ეს არის სხვადასხვა Windows-ის დავალების სახელი იმ დავალების, რომელსაც dropper აინსტალირებს (WinNodeSync); ორივეს ძებნა ღირს.
Timeline
რვა პაკეტი გამოქვეყნდა მჭიდროდ 2026-07-13 და 2026-07-14. რამდენიმე მათგანს ერთზე მეტი ვერსია აქვს; ჩამოსაშლელი ფუნქცია იდენტურია ყველა ვერსიაში, მხოლოდ ხაზის ოფსეტები იცვლება ზემოთ მოცემული სასარგებლო კოდის ზომის ცვლილებასთან ერთად.
| თარიღი | თარიღის |
|---|---|
| 2026-07-13 | კლასტერში პირველი პაკეტები ერთი გამომცემლის ქვეშ ჩნდება (solana-key-utils, eth-wallet-helpers, crypto-validate-lib და დანარჩენის ადრეული ვერსიები) |
| 2026-07-13 → 07-14 | დარჩენილი სახელები და შემდგომი ვერსიები გამოქვეყნებულია; თითოეულში იგივე დამატებული დროპერი იგზავნება |
| 2026-07-14 | რვავე პაკეტი მონიშნული და გაანალიზებულია; ყველა პაკეტის ინსტალაცია რეესტრიდან კვლავ შესაძლებელია. |
აფეთქებისას, გამომცემლის რეესტრის რეპუტაცია კლასტერის დასაწყისში დაახლოებით ნეიტრალურიდან მკვეთრად უარყოფითამდე შეიცვალა, აღმოჩენების რაოდენობის ზრდასთან ერთად — ეს პაკეტების მონიშვნის დაკვირვებადი გვერდითი ეფექტი იყო და არა შემუშავებული ფუნქცია.
კომპრომისის ინდიკატორები
ანალიზის დროს დადასტურდა ქვემოთ მოცემული ყველა ინდიკატორის არსებობა — „მეორე ეტაპის“ ცხრილებში არსებული ინდიკატორების — დეკოდირებით. test/fixtures/keypairs.dat და აღდგენილის კითხვა სინქრონიზებული.js.
ფაილები და გზები
| ინდიკატორი | როლი |
|---|---|
~/.cache-db/.node-sync/syncd.js | გაშიფრული მეორე ეტაპი, დაწერილი 0o700 რეჟიმით |
~/.cache-db/.node-sync/.sl | ლოკალური ექსფილტრაციის ჟურნალი (დროის ნიშნული | გასაღების ტიპი | IPFS ჰეში) |
test/fixtures/keypairs.dat | Base64-ით კოდირებული დატვირთვა, რომელიც tarball-ის შიგნით „ტესტირების მოწყობილობის“ სახითაა განთავსებული. |
მეორე საფეხურის ქსელური ინფრასტრუქტურა (აღდგენილია syncd.js-დან)
| ინდიკატორი | როლი |
|---|---|
gist.githubusercontent.com/juang55/b298754cb72942b1cdcf02ccd45cde2f/raw/cfg.txt | გააქტიურება ხდება ავტომატურად; სკრიპტი მხოლოდ კონფიგურაციის წაკითხვის შემთხვევაში მუშაობს active=1 |
Qmcqz3w8j4qFQXDAXAxnrdc2oSX3nzBT4NqtpTqL8mr1ga | IPFS კონფიგურაციის სარეზერვო ასლი (CID) |
QmdTXoqVmTHY1i4ZWLdLkoQ9YChp5TXPh5cWXwnAYZt5iF | IPFS კონფიგურაციის სარეზერვო ასლი (CID) |
QmfJkLU5gdCpqbbqEjWYC2anXW9FmuEeSLLeLiHVJKYUjp | IPFS კონფიგურაციის სარეზერვო ასლი (CID) |
gateway.pinata.cloud, ipfs.io, cloudflare-ipfs.com | IPFS კარიბჭეები, რომლებიც გამოიყენება კონფიგურაციის სარეზერვო ასლის მისაღებად |
api.pinata.cloud/pinning/pinJSONToIPFS | ექსფილტრაციის საბოლოო წერტილი, მოპარული მონაცემები მიმაგრებულია საჯარო IPFS-ზე |
| Pinata-ს API გასაღები | 13c766575b9270a9825d, მყარი კოდირებული ექსფილტრაციის სერთიფიკატი |
მეორე ეტაპის შეგროვების სამიზნეები (აღდგენილია syncd.js-დან)
| ინდიკატორი | როლი |
|---|---|
~/.config/solana, ~/.ethereum/keystore, ~/.foundry, ~/.hardhat, ~/.ssh, ~/.env, shell rc ფაილები | დირექტორიები/ფაილები, რომლებიც მოძებნილი იყო გასაღებებისა და საიდუმლოებების მოსაძებნად |
AppData\Roaming\Solana, AppData\Local\ethereum\keystore | Windows-ის ეკვივალენტების ძიება |
| შეგროვებული არტეფაქტების ტიპები | ETH-ის კერძო გასაღებები, Bitcoin WIF, BIP-39-ის საწყისი ფრაზები, Solana-ს გასაღებების წყვილები, Ethereum-ის გასაღებების საცავი JSON, SSH გასაღებები, საიდუმლო გარემოს ცვლადები |
მდგრადობის არტეფაქტები
| პლათფორმა | ინდიკატორი |
|---|---|
| Linux | cron შესვლის გაშვება syncd.js; დაინსტალირებულია crontab-ის საშუალებით, გაფილტრულია grep -v syncd |
| Windows | დაგეგმილი ამოცანა WinNodeSync (წვეთოვანი) და WindowsNodeSync (მეორე ეტაპი) |
| MacOS | გაშვებული ლეიბლი com.apple.syncd |
| ყველა | მეორე ეტაპი მეორდება 12-საათიანი ციკლით |
ქცევა
- თვითგამოძახების ფუნქცია დაემატა შემდეგ მოდული.ექსპორტი, დაგეგმვა ა დაყენების დროის ამოწურვა იმპორტისას ~37,000 ms-დან.
- შვილობილი_პროცესი spawn(“კვანძი”, ) განცალკევებული პარამეტრების ნაკრებით.
- მეორე ეტაპზე უმოქმედო რეჟიმის აქტივაცია (xprintidle / იორეგი HIDdleTime / PowerShell-ის უმოქმედობის დრო; ~15 წუთიანი ზღვარი).
- RSA-4096 დაშიფვრა თითოეული ძიების მიხედვით, შემდეგ HTTPS POST საჯარო IPFS პინინგის API-სთვის.
პაკეტები და ვერსიები (npm, გამომცემელი solbuilder_io)
| პაკეტი | ვერსიები |
|---|---|
base58-utils | 1.0.0, 1.0.1, 1.0.3 |
abi-encode | 1.0.0, 1.0.1, 1.0.2 |
eth-dev | 1.0.0, 1.0.1, 1.0.2 |
arb-kit | 1.0.0, 1.0.1 |
layer2-sdk | 1.0.0, 1.0.1 |
solana-key-utils | 1.0.0 |
eth-wallet-helpers | 1.0.0 |
crypto-validate-lib | 1.0.0 |
გამომცემლობა
- solbuilder_io - angel_lopez89[@]პროტონი[.]მე, ელფოსტა დაუდასტურებელია, წყაროს კონტროლის ანგარიში არ არის დადასტურებული, დაკავშირებული საცავი არ არის.
ატრიბუცია და დაკვირვებული ქცევა
რვა პაკეტს აქვს ერთი გამომცემლის ანგარიში და ერთი დატვირთვა. თითოეული არის ტრივიალური პაკეტი — რამდენიმე კილობაიტი რეალური სასარგებლო კოდი იმავე dropper-ით — გამოქვეყნებული დაკავშირებული საცავის გარეშე და დაუდასტურებელი ერთჯერადი სტილის ელფოსტის ქვეშ. ეს ერთგვაროვნება, გაზიარებული ჩაწერის გზა, გაზიარებული მუდმივი ეტიკეტები და გაზიარებული keypairs.dat staging ფაილი არის ის, რაც კლასტერს ერთმანეთთან აკავშირებს.
პაკეტები უჩვეულოდ გულახდილები არიან საკუთარი საქციელის შესახებ. სოლანას გასაღების უტილიტები შეიცავს ჩასმულ კომენტარებს, რომლებიც აღწერს დამატებულ ბლოკს მარტივად — მას აწერენ ეტიკეტს ფანტომი: უხილავი მუდმივობა, კიდევ ერთი (ესპანურად) წერია ფონის ზედაპირის ამოტუმბვა, „მოლის გაშვება ფონზე“. ეს არის კოდის ანოტაციები იმის შესახებ, თუ რას აკეთებს ის; ამ პოსტში კამპანიის სახელი აღებულია ამ პირველი იარლიყიდან ყალბ კვანძთან „სინქრონიზაციის დემონი“ ერთად (სინქრონიზებული), რომელსაც დაჟინებული მოქმედების მექანიზმი ბაძავს.
ჩვენ მხოლოდ იმას აღვწერთ, რასაც კოდი დაკვირვების პროცესში აკეთებს. პაკეტების დასახელება - ყველა კრიპტო, საფულე და ბლოკჩეინ-ინსტრუმენტული ტერმინი - მიუთითებს დეველოპერის აუდიტორიაზე, რომელიც, სავარაუდოდ, მათ სახელით მოიძიებს; ეს თავისთავად არ ადგენს, ვინ არის გამომცემელი. მეორე ეტაპი სრულად აღდგენილი იყო base64 ფიქსაციის გაშიფვრით და მისი ქცევა ზემოთ არის აღწერილი: ის აგროვებს საფულის გასაღებებს, საწყის ფრაზებს და საიდუმლოებებს და გადასცემს მათ, RSA-დაშიფრული სახით, საჯარო IPFS საცავში Pinata-ს მეშვეობით. დიზაინის აღსანიშნავი არჩევანია კერძო C2 სერვერის არარსებობა - კონფიგურაცია მოდის GitHub gist-დან და IPFS-დან, ხოლო მოპარული მონაცემები ინახება საჯარო დეცენტრალიზებულ საცავში, რომელიც კონტენტ ჰეშით არის გასაღები, რომელთა ხელში ჩაგდებაც უფრო რთულია, ვიდრე ერთი თავდამსხმელის მიერ კონტროლირებადი ჰოსტი. წერის დროს ამ კლასტერის შესაბამისი წინა საჯარო ანგარიშგება არ იყო ნაპოვნი.
გავლენა, ტენდენციები და რეკომენდაციები დამცველებისთვის
ვინ არის გამომჟღავნებული. ყველას, ვინც ამ პაკეტებიდან ერთ-ერთი დაამატა Node პროექტს და შემდეგ გაუშვა კოდი, რომელიც მას იმპორტირებს. რადგან detonation იმპორტის დროს ხდება და არა ინსტალაციის დროს, პაკეტის უბრალოდ არსებობა საკმარისი არ არის - მაგრამ ნებისმიერი ნორმალური გამოყენება, რომელიც მოდულს იტვირთავს, დატვირთვას აღწევს. სატყუარას სახელები მიზნად ისახავს დეველოპერებს, რომლებიც ეფუძნებიან Ethereum-ს, Solana-ს, Arbitrum-ს, Layer-2-ს და ზოგად საფულეს/კოდირების ინსტრუმენტებს - პოპულაციას, რომელსაც, სავარაუდოდ, ზუსტად ის აქტივები აქვს, რასაც მეორე ეტაპი ეძებს. ყველას, ვინც ამ მოდულებიდან ერთ-ერთი გაუშვა მანქანაზე, რომელიც შეიცავს საფულის გასაღებებს, საწყის ფრაზებს, გასაღებების საცავებს, SSH გასაღებებს ან .ენვ secrets-მა ეს რწმუნებათა სიგელები კომპრომეტირებულად უნდა მიიჩნიოს და ისინი როტაციაში უნდა ჩაანაცვლოს.
ორი ნიმუში, რომელთა ინტერნალიზაციაც ღირს. პირველი, დატვირთვა-როგორც-აპარატში: მეორე ეტაპის გაგზავნა, როგორც base64, დამაჯერებლად დასახელებულ მონაცემთა ფაილში (test/fixtures/keypairs.dat) პაკეტის ხილული წყაროს სისუფთავეს ინარჩუნებს და მავნე კონტენტს ფაილში გადააქვს, რომელსაც განხილვის ინსტრუმენტები და ადამიანის მიერ სკამირები ხშირად ინერტულ მონაცემებად აღიქვამენ. მეორეც, იმპორტის დროის შეფერხებით შესრულება ჯვარედინი პლატფორმული მუდმივობითინსტალაციის კაუჭიდან ტრიგერის გადატანა, ტაიმერის დამატება და შემდეგ cron-ში, დაგეგმილ ამოცანებსა და launchd-ში მუშაობის შენარჩუნება განზრახ გადადგმული ნაბიჯია უფრო ხმაურიანი ინსტალაციის სკრიპტის ტექნიკისგან, რომელსაც ავტომატიზირებული რეესტრის სკანირება ყველაზე ყურადღებით აკვირდება.
დამცველებისა და მომვლელებისთვის ინსტრუქცია:
- დამატებული კოდის დამუშავება შემდეგ მოდული.ექსპორტი განხილვის პრიორიტეტად — dropper-ის ლოგიკა ხშირად იმალება „რეალური“ მოდულის ზედაპირის ქვეშ.
- არ ჩათვალოთ, რომ მონაცემთა ფაილები ინერტულია. base64 blob ქვეშ ტესტი/მოწყობილობები/ რომელიც იკითხება გაშვების დროს და დეკოდირდება, შესრულებადი ფაილის მიმდებარეა; ფლაგმა გაშვების დროს იკითხება fixture ფაილები, რომლებიც კვებავენ a-ს. ფუნქცია/ევალება/დაწერე-შემდეგ-ქვირითობა ჯაჭვი.
- ეძებეთ ვარდნის ბილიკი ~/.cache-db/.node-sync/ და მუდმივობის ერთეულებისთვის WinNodeSync (დაგეგმილი დავალება) და com.apple.syncd (launchd) დეველოპერის მანქანებზე, რომლებმაც ეს სახელები გამოიყენეს.
- გაფრთხილება Node პროცესებზე, რომლებიც ქმნიან cron ჩანაწერებს, დაგეგმილ დავალებებს ან გაშვებულ დავალებებს — ლეგიტიმური ბიბლიოთეკები იშვიათად აკეთებენ ამას იმპორტის დროს.
- უპირატესობა მიანიჭეთ დაბლოკილ ფაილებს და მიმაგრებულ ვერსიებს და გადახედეთ ნებისმიერი ახალი მცირე „სასარგებლო“ დამოკიდებულების განსხვავებას, განსაკუთრებით გამოქვეყნებულია ნულოვანი დამოკიდებულების პაკეტები დაუდასტურებელი ანგარიშების მიერ, რომლებსაც არ აქვთ დაკავშირებული საცავი.
რეესტრის დამცველებისთვის, დასკვნა ის არის, რომ ინსტალაციის კაუჭის მონიტორინგი აუცილებელია, მაგრამ არასაკმარისი: მონაცემთა ფაილში დამონტაჟებული იმპორტის დროის, ტაიმერით დაგვიანებული dropper გაივლის მხოლოდ ინსტალაციის დროის შემოწმებას და მუდმივი მოქმედების ნაბიჯი ხშირად ყველაზე ხმამაღალი დაკვირვებადი სიგნალია, რომლის დაჭერაც შესაძლებელია.



