Lt; DR
PyPI paketas, pavadintas gcli-valdiklis išleido pilną „Windows“ nuotolinės prieigos įrankį: klavišų paspaudimų registravimą, internetinės kameros ir mikrofono fiksavimą, iškarpinės stebėjimą, prieigą prie naršyklės kredencialų, ekrano valdymą, privilegijų išsaugojimą, privilegijų didinimą ir savarankiškai reklamuojamą „daugiau nei 140 komandų“. Jis neslėpė, kas tai yra: paties paketo „PyPI“ santraukoje jis aprašytas kaip „nuotolinės prieigos įrankis per“ npoint.io".
Verta sustoti ties ta fraze „per npoint.io“. Užuot skambinęs į dedikuotą serverį, implantas naudojo ntaškas[.]io (nemokama, legali paslauga, skirta mažiems JSON dokumentams talpinti) kaip jos komandų ir valdymo relė. Operatorius rašo komandas į JSON dėžę; implantas apklausia tą dėžę, vykdo ir įrašo rezultatus atgal. Nereikia blokuoti užpuoliko valdomo domeno, nereikia žymėti naujo IP adreso: srautas nukreipiamas į paslaugą, kurią kūrėjai naudoja kiekvieną dieną.
Šešios versijos buvo išleistos maždaug per trylika su puse valandos, kiekviena iš jų buvo galingesnė už ankstesnę. Kiekviena iš jų buvo parašyta ml_prognozuojamas_saugus automatinio klasifikatoriaus prieš rankinę peržiūrą perkvalifikuojant šeimą kaip kenkėjišką.
Atakos anatomija
gcli-valdiklis įdiegia importavimo paketą gcli, 35 modulių „Python“ kodo bazė. Nėra diegimo laiko. hooks — niekas nevyksta tuo metu pip diegimasŠi funkcija yra pačiuose moduliuose ir aktyvuojama paleidus įrankį, o modulio išdėstymas atrodo kaip produkto specifikacijų lapas:
| Pajėgumų sritis | moduliai |
|---|---|
| Šeimininko priežiūra | keylog, webcam, audio, clipboard, desktop, monitoring |
| Prisijungimo duomenys ir prieiga prie duomenų | browser, forensics, fileops, transfer, users |
| Įsitvirtinimas ir eskalacija | persistence, elevator, registry, security |
| Pagrindinio kompiuterio ir tinklo žvalgyba | system, processes, network_config, wifi, bluetooth, netutils |
| Valdymas ir kontrolė | client, host, session, protocol, npoint, crypto, encrypt |
Įdomioji dalis yra komandų kanalas. Dauguma nuotolinės prieigos įrankių pasiekia serverį, kurį valdo operatorius – IP adresą, domeną, prieglobos paslaugų teikėją, apie kurį galima pranešti ir atjungti nuo tinklo. gcli-valdiklis vietoj to gydo nemokama JSON-bin paslauga kaip negyvas objektas, n taškas modulis skaito ir rašo mažus JSON dokumentus ntaškas[.]io per įprastą HTTPS; Crypto/šifruoti Moduliai apgaubia apsikeičiamus naudinguosius duomenis, kad dėžės turinys nebūtų paprasto teksto komandos. Poveikis yra tarpininkaujamas, užšifruotas perdavimas:
- Operatorius į JSON dėžę įdeda (užšifruotą) instrukciją.
- Implantas, veikiantis aukos kompiuteryje, atlieka duomenų rinkimo apklausą, iššifruoja, vykdo vieną iš savo komandų tvarkytojų ir įrašo (užšifruotą) rezultatą atgal.
- Tinklo monitoriui auka tiesiog kalbasi su ntaškas[.]io — paslauga, turinti teisėtą priežastį pasirodyti kūrėjų sraute.
Čia nėra antro etapo atsisiuntimo ir užmaskuoto įkroviklio: galimybė pateikiama visa, skaitomame Python formate, o vienintelis „paslėptas“ aspektas yra perdavimo pasirinkimas ir perduodamų naudingųjų apkrovų šifravimas.
Verta paaiškinti, kodėl JSON-bin dead-drop yra patrauklus operaciniu požiūriu, nes tai paaiškina, kodėl tikimės vėl pamatyti tą patį modelį:
- Nėra operatoriui priklausančio galinio taško. Nereikia registruoti C2 domeno, nuomotis VPS ir nėra nieko, ką gynėjas ar registratorius galėtų konfiskuoti. paketas neliečia kanalo; nuimamas kanalas reiškia paprašyti bendrosios paskirties SaaS prižiūrėti vieną dokumentą tarp milijonų.
- Reputacijos plovimas. Išeinantis HTTPS ryšys su gerai žinoma kūrėjo paslauga neturi jokių reputacijos nuostolių, kuriuos sukeltų naujas domenas ar neapdorotas IP adresas. Daugelis išeinančio srauto filtravimo nustatymų tai leidžia netiesiogiai.
- Asinchronija ir neigimas. Apklausos modelis – implantas nuskaito dokumentą tam tikru intervalu, o ne laiko atvirą lizdą – sukuria srautą, kuris atrodo kaip periodinė API apklausa, o ne interaktyvi sesija. Dokumento turinio užšifravimas reiškia, kad net analitikas, radęs šiukšliadėžę, mato šifruotą tekstą, o ne komandų sąrašą.
- Triviali rotacijaPerkėlimas į kitą dėžę arba visiškai kitą užrašų / įklijavimo paslaugą operatoriui yra vienos eilutės konfigūracijos pakeitimas. Bet koks konkrečiai relei priskirtas blokavimo sąrašas yra pasenęs nuo pat išsiuntimo momento.
Operatorius priima kompromisą dėl pralaidumo ir delsos: tiesioginio ryšio relė yra lėtesnė ir jos pralaidumas mažesnis nei tiesioginio ryšio. Stebėjimo ir valdymo įrenginiui, kuris dažniausiai siunčia trumpas komandas ir laikui bėgant renka rezultatus, šį kompromisą lengva atlikti.
Chronologija
Šeimos reikalai sparčiai eskalavosi. Pažymėtų versijų bilietų kūrimo laiko žymos visą stebimą lanką perkelia į maždaug trylika su puse valandos, o paties skaitytuvo įrodymų skaičius augo kartu su kodu – nuo kelių pažymėtų svetainių pirmojoje versijoje iki keturiolikos naujausioje versijoje.
| versija | Pirmą kartą matytas (UTC) | pastabos |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Pradinis įkėlimas; minimalus pažymėtas paviršius |
0.5.0 | 2026-07-21 18:01 | Galimybės plečiasi |
0.2.0 | 2026-07-21 18:03 | (versijų numeravimas nėra monotoniškas su įkėlimo tvarka) |
0.6.0 | 2026-07-22 00:44 | Platesnis modulių rinkinys |
0.7.0 | 2026-07-22 01:58 | Beveik pilnas įrankių rinkinys |
0.7.1 | 2026-07-22 02:28 | Naujausias; 35 moduliai, visos galimybės |
Versijų numeriai nebuvo skelbiami griežta tvarka, tačiau kryptis aiški: mažas pirmasis leidimas, tada greitas iteravimas link pilnai funkcionalios 0.7.1 versijos. Tai yra aktyviai kuriamo projekto, kuris augant perkeliamas į viešąjį registrą, forma, o ne vienkartinis pašalinimas.
Kompromiso rodikliai
Visi toliau nurodyti indikatoriai buvo patvirtinti pagal diske esantį paketo turinį ir deterministinį 0.7.1 versijos indikatorių nuskaitymą; nė vienas nėra spekuliatyvus.
| Tipas | rodiklis |
|---|---|
| Paketas (PyPI) | gcli-control, 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 versijos |
| Importuoti paketą | gcli |
| C2 relė | npoint[.]io (JSON-bin dead-drop; užšifruoti naudingieji duomenys) |
| Nurodyta saugykla | github[.]com/gcli-control/gcli |
| Elgesio pirštų atspaudai | Kartu išdėstyti stebėjimo moduliai: keylog, webcam, audio, clipboard, browser, plius persistencija, liftas ir kliento/pagrindinio kompiuterio/protokolo komandų sluoksnis viename pakete |
| įrengti hooks | Nėra: funkcija paleidžiama įrankio vykdymo metu, o ne diegimo metu |
Gynėjo pastaba: stipriausias patvarus signalas yra ne domenas (relės mazgas trivialiai keičiasi), o figūravienas paketas, kuriame sujungti trys ar daugiau skirtingų pagrindinio kompiuterio stebėjimo primityvų bei nukreipia komandų / atsakymų ciklą per viešąją turinio talpinimo paslaugą. Blokavimas ntaškas[.]io Iš karto tai nepraktiška daugumai parduotuvių; įspėjimas apie netikėtą procesą, kuris ir fiksuoja įvesties įrenginius, ir bendrauja su JSON-bin paslauga, yra daug patikimesnis.
Stebimas elgesys ir įrėminimas
Šį pavyzdį neįprastu daro du dalykai: abu yra stebimi faktai, o ne išvados apie motyvą.
Tai reklamavo save. „PyPI“ platinamoje paketo santraukoje galimybės buvo išvardytos paprastais žodžiais – nuotolinė prieiga, darbalaukio valdymas, vartotojų valdymas, internetinė kamera, garsas, klavišų registravimas, išsaugojimas, naršyklės duomenys, „Wi-Fi“, registras, „daugiau nei 140 komandų“. Nebuvo bandoma kodo pateikti kaip kūrimo pagalbininko, CLI apvalkalo ar dirbtinio intelekto agento įrankio, kuris yra dažnesnis viešuosiuose registruose matomas užmaskavimas. Ar šis atvirumas atspindi raudonosios komandos įrankį, paskelbtą be prieigos kontrolės, ar ką nors kita, yra klausimas, vien paketo turinys neišsprendžia; neabejotina tai, kad veikiantį, universalų nuotolinės prieigos ir stebėjimo įrankių rinkinį galėjo įdiegti kiekvienas, turintis... pieputis.
Tai rėmėsi pasitikėjimu gerybine paslauga. Naudojant ntaškas[.]io nes relė yra apibrėžianti technika. Tai platesnio modelio pavyzdys – C2 nukreipimas per teisėtą SaaS (įklijavimo svetaines, JSON dėžes, pokalbių svetainę)hooks, debesies dokumentai), kad kenkėjiškas srautas įsilietų į įprastą kūrėjo veiklą ir nebūtų operatoriaus valdomo galinio taško, kurį būtų galima užgrobti. Relės naudingoji apkrova buvo užšifruota, todėl atsitiktinis stebėtojas dėžės turinio negalėtų perskaityti kaip komandų.
Leidėjo signalai yra silpni ir bendro pobūdžio. Paketas buvo paskelbtas autorius „gcli contributors“ ir MIT licenciją, o savo pagrindinio puslapio ir saugyklos laukus nukreipė į github[.]com/gcli-control/gcliVisa tai nėra patvirtinimas: autoriaus eilutė yra laisvas tekstas, MIT licencijos antraštė nieko nekainuoja, o saugyklos URL paketo metaduomenyse yra teiginys, o ne kilmės įrodymas. Šablonas – visiškai naujas pavadinimas, bendras kolektyvinis autorius ir save nurodanti organizacija/saugykla, sukurta aplink paketą – yra tai, kaip atrodo projektas, kai jis yra specialiai sukurtas kodui nešti, o ne kaip nusistovėjusi priemonė, kuri atsitiktinai įgijo nuotolinio valdymo funkciją. Mes tai laikome pastebėjimais; jie atitinka, bet patys savaime nesukuria tikslinio platinimo.
Šį disponavimą apibūdiname kaip kenkėjišką, remdamiesi jo pajėgumais ir pateikimu: tai pilnas, veikiantis nuotolinės prieigos ir stebėjimo implantas, platinamas viešame paketų indekse su slapta perdavimo sistema. Mes nenurodome tikslo ar motyvo.
Poveikis, tendencijos ir ką gali padaryti gynėjai
Akloji zona, skirta maskavimu pagrįstam triažui. Daug automatizuotų paketų triažo raktų užmaskuoti signalai tipinė registro kenkėjiška programa — užmaskuoti „blobs“, diegimo laikas hooks, vieno sakinio tekstai, kuriais siekiama surinkti įgaliojimus. Paketas, kuris yra tiesiog atvirai žiurkė, su švariu, lengvai skaitomu kodu ir be diegimo užklausos, nepateikia jokių šių požymių ir gali praslysti pro euristikos priemones, kurios tikisi slėpimo. Signalai, kurie patikimai aptinka šią klasę, yra struktūriniai, o ne pagrįsti slėpimu: galimybių surašymas (kiek skirtingų pagrindinio kompiuterio stebėjimo primityvų egzistuoja viename pakete) ir C2 formos analizė (komandų / atsakymų ciklas, nukreiptas per bendrosios paskirties turinio talpinimo paslaugą). Šie patikrinimai suveikia neatsižvelgiant į tai, kiek sąžiningas ar užsikimšęs pakuotė yra.
SaaS kaip C2 tendencija. Piktnaudžiavimas teisėta prieglobos paslauga kaip aklavietės nėra naujiena, tačiau tai veikia, nes gynybinės paslaugos blokavimo išlaidos yra didelės, o paslaugų perjungimo puolimo išlaidos beveik nulinės. Tikėkitės daugiau tokių atvejų. Tinklo apsauga, skirta konkretiems blogiems domenams, iš karto nustoja galioti; elgesio taisyklės („šis procesas nuskaito iškarpinę ir internetinę kamerą, o tada susisiekia su užrašų prieglobos API“) – ne.
Betono aptikimo eskizas. Patvari taisyklė neįvardija ntaškas[.]io visai. Tai apjungia du pastebėjimus, kurie atskirai yra dažni, bet kartu reti įprastame kūrėjo arba CI pagrindiniame kompiuteryje:
įspėti, kai vienas procesas, vieno seanso metu, atlieka abu šiuos veiksmus:
(A) pasiekia pagrindinio kompiuterio stebėjimo primityvą – įvesties įrenginį (klaviatūrą / pelės kablį), kamerą, mikrofoną, ekrano kopiją, iškarpinės skaitymo ciklą arba naršyklės kredencialų saugyklą („Login „Duomenys“ / „Vietinė būsena“ / DPAPI); IR
(B) teikia išorines užklausas viešajai turinio talpinimo / įklijavimo / JSON-bin / chat-webhook paslaugai, o tada pateikia jas peržiūrai, neatsižvelgiant į konkrečią (B) punkte nurodytą paslaugą.
Nei viena pusė nėra įtartina pati savaime: daugybė teisėtų įrankių, ekrano kopijų, ir daugybė JSON kodo siuntimo į prieglobos API. Jungtis viename trumpalaikiame procese yra signalas, ir ji išgyvena bet kokį perdavimo rotaciją.
Praktiniai žingsniai komandoms:
- Viešų paketų diegimą kūrėjo ir CI pagrindiniuose kompiuteriuose traktuokite kaip vykdymo ribą, o ne kaip patogumą – RAT kūrimo agente yra RAT su jūsų paslaptimis.
- Pirmenybė teikiama leidžiamųjų sąrašų vidiniams veidrodžiams; paketas, pažodžiui pavadintas nuotolinio valdymo pulto vardu ir apibūdinantis klavišų registravimo įrankį, niekada neturėtų būti naudojamas įmonės indekse.
- Įspėjimas dėl derinys — įvesties įrenginys arba ekrano kopija plius išeinantis srautas į turinio / įklijavimo / JSON-bin paslaugą, — o ne bet kuris vienas primityvas, kuris atskirai gali būti naudojamas gerybiškai.
- Nepasikliaukite automatizuotu „saugumo“ balu kaip terminalo verdiktu paketams, turintiems plačias pagrindinio kompiuterio prieigos galimybes; nukreipkite juos žmogaus peržiūrai.
Paketų šeima buvo klasifikuota kaip kenkėjiška ir perduota pašalinti iš registro. Kadangi retransliacijos pagrindu veikiantis C2 nepalieka operatoriaus valdomo mazgo be rizikos, ilgalaikė gynybinė vertė slypi aukščiau pateiktame elgesio pirštų atspaude, o ne kuriame nors atskirame blokuojamojo sąrašo įraše.







