PhantomSync: npm криптовалюта пакеттері әмиян ұрлаушысын жасырады

PhantomSync: сегіз крипто-әзірлеушінің npm пакеттері кешіктірілген, өздігінен сақталатын дропперді жасырады

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 ретінде жіберіледі, сондықтан «сынақ бекіткішін» декодтау екінші кезеңді толық қалпына келтіреді: a крипто-әмиян және құпияларды ұрлаушы ол машинаның бос тұруын күтеді, құпия кілттер мен бастапқы сөз тіркестерін жинайды, әрбір табылған ақпаратты қатты кодталған 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
Негізгі мінез-құлықКідіртілген, импорттау уақытындағы дроппер сынақ құрылғысы ретінде жасырылған; платформааралық тұрақтылықты орнатады
ЖүктемеКрипто-әмиян және құпияларды ұрлау, 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

Дизайнның екі нұсқасы ерекше көрінеді.

Жүк сынақ құрылғысы ретінде тасымалданады. Екінші кезең айқын код ретінде жазылмаған. Ол ... ішінде өмір сүреді. сынақ/арматура/перне жұптары.dat, атауы кілт жұптарын өңдеймін деп мәлімдейтін бумаға араласатын base64 файлы. Тарболды қарап шыққан адамға бұл үлгі деректері сияқты көрінеді; қосылған код үшін бұл декодтау және іске қосуға арналған скрипт. Дроппердің өзінде желілік мекенжай жоқ — олар екінші кезеңде тұрады — бірақ қосымша шатастыру жоқ: бекіткіш base64-тің бір қабаты, сондықтан оны декодтау (base64 -d) толық қалпына келтіреді syncd.js және оның желілік әрекеті. Келесі бөлімде қалпына келтіру кезеңінің не істейтіні қарастырылады.

Детонация кешіктірілді және орнатуға емес, импорттауға байланысты. Себебі триггер талап ету() сонымен қатар орнату ілмегінің орнына ~37 секундтық таймер, тек бақылайтын тексерулерді айналып өту әрекеті npm орнату қадам, және кідіріс көптеген қысқа мерзімді sandbox және CI іске қосуларынан асып түседі. Кез келген нәрсе орындалған кезде, пакетті жүктеген орнату әлдеқашан аяқталған болады.

Декодталған скрипт дискіде болғаннан кейін ~/.cache-db/.node-sync/syncd.js — кәдімгі кэш каталогы сияқты оқу үшін таңдалған жол — дроппер оны үш негізгі платформаның барлығында қайта жүктеуден аман қалдырады:

  • Linux: Скриптті қайта іске қосатын cron жазбасы. Жазба бар crontab сүзгісі арқылы орнатылады. grep -v синхрондалған, бұл жаңа жазбаны сол атау үшін greps жасайтын қарапайым тізімнен алып тастаудың жанама әсері бар.
  • Windows жүйесі: деп аталатын жоспарланған тапсырма WinNodeSync, 12 минуттық аралықпен қайта іске қосуға орнатылған.
  • macOS: белгіленген іске қосу тапсырмасы com.apple.syncd, бірнеше пакеттерде бар — заңды Apple жүйелік қызметін имитациялайтын жапсырма.

Содан кейін сценарий бөлек процесс ретінде бірден іске қосылады, сондықтан ол импорттаушы бағдарлама аяқталғаннан кейін жұмысын жалғастырады.

Екінші кезең не істейді

Арматура бір base64 қабаты болғандықтан, екінші кезең таза декодталады және толық оқуға болады. Барлық сегіз пакетте бір сценарийдің үш нұсқасының бірі бар, ол тақырыптық түсініктемеде өзін келесідей анықтайды. phantom syncd v3 — жоғары тұрақты («ұйқыдағы көр»). Оның міндеті - криптовалюта әмиянының материалдары мен әзірлеушілердің құпияларын ұрлап, оларды машинадан шығару. Ол келесі қадамдармен жұмыс істейді:

  • 1. Машина бос тұрғанша күтіңіз. Бірдеңе істемес бұрын, syncd.js пайдаланушының қанша уақыт белсенді болмағанын және тек белгілі бір шектен асып кеткенін (шамамен 15 минут) тексереді — xprintide Linux жүйесінде, иорег macOS жүйесіндегі HIDIdleTime және Windows жүйесіндегі PowerShell бос уақыт сұрауы. Сондықтан, ақпарат жинау пернетақтада ешкім болмаған кезде орын алады.
  • 2. Қашықтан басқарылатын белсендіру қосқышын алыңызСкрипт әрекет етпес бұрын өлі күйден кішкене конфигурацияны алады. Негізгі дереккөз - GitHub gist шикі URL мекенжайы (gist.githubusercontent.com/juang55/…/cfg.txt); скрипт тек сол конфигурация оқылған жағдайда ғана іске қосылады белсенді=1Егер gist қолжетімді болмаса, ол жалпыға қолжетімді шлюздер арқылы алынатын үш қатты кодталған IPFS мазмұн идентификаторларына оралады. gateway.pinata.cloud, ipfs.io, және cloudflare-ipfs.comБұл операторға кейіннен қаруды/қаруды алып тастауды басқаруды және атып түсіруге төзімді резервтік қорғанысты береді. (Ең кіші нұсқасы, жеткізілді крипто-валидат-кітапханасы, eth-wallet-helpers, және solana-key-utils, gist қабаты жойылған және тек IPFS идентификаторларына ғана сүйенеді.)
  • 3. Әмиян материалы мен құпияларын жинаңыз. Скрипт пайдаланушының үй каталогын аралап шығады — ~/.config/solana, ~/.ethereum/кілттер қоймасы, ~/.құю цехы, ~/.қатты қалпақ, ~/.ssh, және Desktop/құжаттар/Жүктеулер (испан тіліндегі қалта атауларын қоса алғанда), сонымен қатар ~/.env және shell rc файлдары және баламасы AppData Windows жүйесіндегі орындар. Ол Ethereum құпия кілттерін, Bitcoin WIF кілттерін, BIP-39 бастапқы сөз тіркестерін, Solana перне жұптарын, Ethereum кілт қоймасы JSON, SSH кілттерін және құпиялы орта айнымалыларын нысанаға алады. Үлкенірек нұсқасы (in) abi-encode, base58-utils, eth-dev) толық 2048 сөзден тұратын BIP-39 сөздігін қамтиды және тұрақты өрнектерді пайдаланады сіріндісі оқылатын кез келген мәтіннен жеке кілттер мен тексерілген бастапқы сөз тіркестері; екі кішірек нұсқа файлдарды кілт сөз бойынша сәйкестендіреді (ұрық, мнемикалық, әмияныңызда, metamask, Phantom, есепке алу кітабы, трез, …) және тұтас файлдарды жүктеңіз.
  • 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 жүйесінде launchd тапсырмасы және жоспарланған тапсырма деп аталады WindowsNodeSync Windows жүйесінде — әрбір 12 сағат сайын қайта іске қосылатындай етіп орнатылған. Назар аударыңыз, бұл әр түрлі Dropper орнатқан Windows тапсырмасының атауы (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Барлық сегіз пакет белгіленіп, талданды; әрбір пакет әлі де тізілімнен орнатылуы мүмкін

Жалпы алғанда, баспагердің тізілімдегі беделі кластердің басындағы шамамен бейтараптан анықталған деректер жиналған сайын қатты теріске ауысты — бұл пакеттердің белгіленуінің байқалатын жанама әсері, бұл арнайы жасалған мүмкіндік емес.

Келісім көрсеткіштері

Төмендегі барлық көрсеткіштер талдау кезінде расталды — «Екінші кезең» кестелеріндегілер декодтау арқылы сынақ/арматура/перне жұптары.dat және қалпына келтірілгенді оқу syncd.js.

Файлдар мен жолдар

Индикаторрөлі
~/.cache-db/.node-sync/syncd.js0o700 режимінде жазылған екінші кезеңнің декодталған нұсқасы
~/.cache-db/.node-sync/.slЖергілікті эксфильтрация журналы (уақыт белгісі | кілт түрі | IPFS хэш)
test/fixtures/keypairs.datBase64-кодталған пайдалы жүктеме тарболдың ішінде «сынақ құрылғысы» ретінде орналастырылған

Екінші деңгейлі желілік инфрақұрылым (syncd.js файлынан қалпына келтірілген)

Индикаторрөлі
gist.githubusercontent.com/juang55/b298754cb72942b1cdcf02ccd45cde2f/raw/cfg.txtБелсендіру тоқтатылды; скрипт тек конфигурация оқылған кезде ғана орындалады active=1
Qmcqz3w8j4qFQXDAXAxnrdc2oSX3nzBT4NqtpTqL8mr1gaIPFS конфигурациясының резервтік көшірмесі (CID)
QmdTXoqVmTHY1i4ZWLdLkoQ9YChp5TXPh5cWXwnAYZt5iFIPFS конфигурациясының резервтік көшірмесі (CID)
QmfJkLU5gdCpqbbqEjWYC2anXW9FmuEeSLLeLiHVJKYUjpIPFS конфигурациясының резервтік көшірмесі (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\keystoreWindows эквиваленттері ізделді
Жиналған артефакт түрлеріETH құпия кілттері, Bitcoin WIF, BIP-39 бастапқы сөз тіркестері, Solana пернелер жұптары, Ethereum кілт қоймасы JSON, SSH кілттері, құпия қоршаған орта айнымалылары

Тұрақтылық артефактілері

платформаИндикатор
Linuxcron жазбасын іске қосу syncd.jscrontab арқылы орнатылған, сүзгіден өткізілген grep -v syncd
Windowsжоспарланған тапсырма WinNodeSync (тамшылатқыш) және WindowsNodeSync (екінші кезең)
MacOSіске қосу белгісі com.apple.syncd
БарлықЕкінші кезең 12 сағаттық циклде қайталанады

Мінез-құлық

  • Өзін-өзі шақыратын функция кейін қосылды модуль экспорты, жоспарлау а уақытты орнату импорттау кезінде ~37,000 мс.
  • бала_процесс spawn(“түйін”, ) бөлек опция жиынтығымен.
  • Екінші кезеңде бос тұрған режимде белсендіру (xprintide / иорег HIDIdleTime / PowerShell бос уақыты; ~15 минуттық шегі).
  • Әрбір RSA-4096 шифрлауын, содан кейін HTTPS-ті табу POST жалпыға қолжетімді IPFS бекіту API-іне.

Пакеттер мен нұсқалар (npm, баспагер solbuilder_io)

пакетНұсқаулар
base58-utils1.0.0, 1.0.1, 1.0.3
abi-encode1.0.0, 1.0.1, 1.0.2
eth-dev1.0.0, 1.0.1, 1.0.2
arb-kit1.0.0, 1.0.1
layer2-sdk1.0.0, 1.0.1
solana-key-utils1.0.0
eth-wallet-helpers1.0.0
crypto-validate-lib1.0.0

баспагер

  • solbuilder_io - angel_lopez89[@]proton[.]me, электрондық пошта тексерілмеген, тексерілген бастапқы кодты басқару тіркелгісі жоқ, байланыстырылған репозиторий жоқ.

Атрибуция және байқалған мінез-құлық

Сегіз пакет бір баспагер тіркелгісін және бір пайдалы жүктемені ортақ пайдаланады. Әрқайсысы тривиальды пакет — бірнеше килобайт нақты утилита коды, сол дроппер қосылған — сілтеме жасалған репозиторийсіз және тексерілмеген бір реттік электрондық пошта арқылы жарияланған. Біркелкілік, ортақ дроп жолы, ортақ тұрақтылық белгілері және ортақ перне жұптары.dat staging файлы кластерді біріктіреді.

Пакеттер өздерінің мінез-құлқы туралы әдеттен тыс ашық айтады. solana-key-utils қосылған блокты қарапайым түрде сипаттайтын жол ішіндегі түсініктемелерді қамтиды — біреуі оны белгілейді ЕЛЕС: көрінбейтін табандылық, тағы біреуі (испан тілінде) оқиды Фондық топографияны шығарыңыз, «көріністі фонда іске қосу». Бұл кодтың өзінің аннотациялары; осы жазбадағы науқан атауы сол бірінші белгіден және жалған «синхрондау демоны» түйінінен алынған (синхрондалған) табандылық механизмі имитациялайды.

Біз тек кодтың байқалатын әрекетін сипаттаймыз. Пакеттердің атаулары – барлығы крипто, әмиян және блокчейн құралдарының терминдері – әзірлеуші ​​аудиториясының оларды атымен атауға бейім екенін көрсетеді; ол баспагердің кім екенін өзі анықтамайды. Екінші кезең base64 құрылғысын декодтау арқылы толығымен қалпына келтірілді және оның әрекеті жоғарыда сипатталған: ол әмиян кілттерін, бастапқы сөз тіркестерін және құпияларды жинайды және оларды RSA-шифрланған түрде Pinata арқылы қоғамдық IPFS қоймасына шығарады. Дизайнның ерекше таңдауы – жеке C2 серверінің болмауы – конфигурация GitHub gist және IPFS арқылы келеді, ал ұрланған деректер мазмұн хэшімен кілттелген қоғамдық орталықсыздандырылған қоймада сақталады, екеуін де бір шабуылдаушы басқаратын хостқа қарағанда алу қиынырақ. Жазу кезінде осы кластерге сәйкес келетін бұрынғы қоғамдық есеп табылған жоқ.

Қорғаушыларға әсер, үрдістер және нұсқаулық

Кімге әсер етеді. Осы пакеттердің бірін Node жобасына қосып, содан кейін оны импорттайтын кодты іске қосқан кез келген адам. Детонация орнату уақыты емес, импорттау уақыты болғандықтан, пакеттің болуы жеткіліксіз - бірақ модульді жүктейтін кез келген қалыпты пайдалану пайдалы жүктемеге жетеді. Ethereum, Solana, Arbitrum, Layer-2 және жалпы әмиян/кодтау құралдарын құратын мақсатты әзірлеушілердің атаулары - екінші кезең іздейтін активтерге ие болуы мүмкін популяция. Әмиян кілттерін, тұқымдық сөз тіркестерін, кілт қоймаларын, SSH кілттерін немесе .env құпиялар бұл тіркелгі деректерін бұзған деп санап, оларды айналдыруы керек.

Ішке сіңіруге тұрарлық екі үлгі. Біріншіден, пайдалы жүктеме бекіткіш ретінде: екінші кезеңді base64 ретінде ықтимал атаумен берілген деректер файлының ішінде жіберу (сынақ/арматура/перне жұптары.dat) пакеттің көрінетін көзін таза ұстайды және зиянды мазмұнды құралдарды қарап шығатын файлға жібереді және адам сканерлеген деректер көбінесе инертті деректер ретінде қарастырылады. Екіншіден, платформааралық тұрақтылықпен импорттау уақытының кешіктірілген орындауы: триггерді орнату ілмегінен шығару, таймер қосу, содан кейін cron, жоспарланған тапсырмалар және launchd арасында сақтау - автоматтандырылған тізілімді сканерлеу ең мұқият бақылайтын шулы орнату сценарийі әдістерінен әдейі жасалған қадам.

Қорғаушылар мен қолдаушыларға арналған нұсқаулық:

  • Қосылған кодты кейін өңдеу модуль экспорты шолу басымдығы ретінде — дроппер логикасы көбінесе «нақты» модуль бетінің астында жасырылады.
  • Деректер файлдары инертті деп есептемеңіз. base64 blob астында сынақ/кешендері/ орындалу уақытында оқылатын және декодталған файл орындалатын файлмен көршілес; орындалу уақытын белгілейтін бекіту файлдарын оқиды функция/бағалау/жазыңыз-содан кейін-уылдырық шашу шынжыр.
  • Түсу жолын іздеңіз ~/.cache-db/.node-sync/ және тұрақтылық бірліктері үшін WinNodeSync (жоспарланған тапсырма) және com.apple.syncd (launchd) осы атауларды шығарған әзірлеуші ​​​​машиналарында.
  • Cron жазбаларын, жоспарланған тапсырмаларды немесе іске қосу тапсырмаларын жасайтын Node процестері туралы ескерту — заңды кітапханалар импорттау кезінде мұны сирек жасайды.
  • Құлыпталған файлдар мен бекітілген нұсқаларды артық көріңіз және кез келген жаңа шағын «пайдалы» тәуелділіктің айырмашылығын, әсіресе, қарап шығыңыз. нөлдік тәуелділік пакеттері жарияланды сілтеме жасалған репозиторийі жоқ расталмаған тіркелгілер арқылы.

Тізілім қорғаушылары үшін негізгі ой - орнату ілмегін бақылау қажет, бірақ жеткіліксіз: деректер файлының ішінде орналасқан импорттау уақытын, таймерді кешіктіретін дроппер тек орнату уақытын тексеруден өтеді, ал тұрақтылық қадамы көбінесе ұстап алуға болатын ең қатты байқалатын сигнал болып табылады.

sca-құралдары-бағдарламалық жасақтама-композиция-талдау-құралдары
Бағдарламалық жасақтама тәуекелдеріне басымдық беріңіз, оларды жойыңыз және қауіпсіз етіңіз
Тегін аккаунтыңызды алыңыз.
Несие картасы қажет емес.

Бағдарламалық жасақтаманы әзірлеу және жеткізуді қауіпсіз етіңіз

Xygeni өнім жиынтығымен бірге