PointBlank: PyPI RAT fsheh C2 në një shërbim JSON-Bin

PointBlank: një Python RAT me funksione të plota që drejtoi kanalin e tij të komandës përmes një shërbimi falas për pritjen e shënimeve.

TL; DR

Një paketë PyPI e quajtur kontrolli i gcli-së dërgoi një mjet të plotë për qasje në distancë për Windows: regjistrimin e shtypjes së tasteve, regjistrimin e kameras dhe mikrofonit, monitorimin e clipboard-it, qasjen në kredencialet e shfletuesit, kontrollin e ekranit, vazhdimësinë, ngritje të privilegjeve dhe një "140+ komanda" të vetëshpallura. Nuk e fshehu se çfarë ishte: përmbledhja PyPI e vetë paketës e përshkroi atë si një "Mjet qasje në distancë nëpërmjet npoint.io".

Detaji mbi të cilin ia vlen të ndalemi është ajo frazë "përmes npoint.io." Në vend që të telefononte në shtëpi për një server të dedikuar, implanti i përdorur npoint[.]io (një shërbim falas dhe legjitim për strehimin e dokumenteve të vogla JSON) si releja e tij e komandës dhe kontrollit. Operatori shkruan komandat në një kosh JSON; implanti e pyet atë kosh, e ekzekuton dhe i shkruan rezultatet përsëri. Asnjë domen në pronësi të sulmuesit për t'u bllokuar, asnjë IP i ri për t'u sinjalizuar: trafiku shkon në një shërbim që zhvilluesit e përdorin çdo ditë.

Gjashtë versione u botuan në afërsisht trembëdhjetë orë e gjysmë, secili më i aftë se i mëparshmi. Secili prej tyre u shoqërua me muzikë. ml_predicted_safe nga një klasifikues i automatizuar para shqyrtimit manual e riklasifikoi familjen si keqdashëse.

Anatomia e sulmit

kontrolli i gcli-së instalon paketën e importimit gcli, një bazë kodi Python me 35 module. Nuk ka kohë instalimi hooks — asgjë nuk funksionon gjatë instalim pipAftësia ndodhet në vetë modulet, thirret sapo mjeti të ekzekutohet dhe paraqitja e modulit lexohet si një fletë specifikimesh produkti:

Zona e aftësiveModulet
Mbikëqyrja e strehuesitkeylog, webcam, audio, clipboard, desktop, monitoring
Kredencialet dhe qasja në të dhënabrowser, forensics, fileops, transfer, users
Mbështetje dhe përshkallëzimpersistence, elevator, registry, security
Rikonstruksioni i hostit dhe rrjetitsystem, processes, network_config, wifi, bluetooth, netutils
Komandë dhe kontrollclient, host, session, protocol, npoint, crypto, encrypt

Kanali i komandës është pjesa interesante. Shumica e mjeteve të aksesit në distancë arrijnë një server që kontrollon operatori - një IP, një domen, një ofrues hosting që mund të raportohet dhe të hiqet jashtë linje. kontrolli i gcli-së në vend të kësaj trajton një shërbim falas JSON-bin si një dead-drop. pikë n moduli lexon dhe shkruan dokumente të vogla JSON në npoint[.]io mbi HTTPS të zakonshëm; kripto/encrypt Modulet mbështjellin ngarkesat e shkëmbyera në mënyrë që përmbajtja e koshit të mos jetë komanda me tekst të thjeshtë. Efekti është një transmetim i ndërmjetësuar dhe i enkriptuar:

  • Operatori hedh një udhëzim (të enkriptuar) në një kosh JSON.
  • Implanti, që funksionon në hostin viktimë, e pyet atë bin, e deshifron, ekzekuton një nga trajtuesit e komandave të tij dhe e shkruan rezultatin (e enkriptuar) mbrapsht.
  • Për një monitor rrjeti, viktima thjesht po flet me npoint[.]io — një shërbim me një arsye legjitime për t'u shfaqur në trafikun e zhvilluesve.

Nuk ka shkarkim në fazën e dytë dhe as ngarkues të paqartë këtu: aftësia dërgohet e plotë, në Python të lexueshëm, dhe e vetmja "fshehje" është zgjedhja e transmetimit dhe enkriptimi i ngarkesave të transmetimit.

Ia vlen të shpjegohet pse një dead-drop i JSON-bin është tërheqës nga ana operative, sepse shpjegon pse presim ta shohim përsëri modelin:

  • Asnjë pikë fundore në pronësi të operatorit. Nuk ka domen C2 për t'u regjistruar, nuk ka VPS për t'u marrë me qira dhe nuk ka asgjë për një mbrojtës ose regjistrues për të sekuestruar. Heqja e domenit paketë nuk e prek kanalin; heqja e kanal do të thotë t'i kërkosh një SaaS për qëllime të përgjithshme të mbikëqyrë një dokument midis miliona dokumenteve.
  • Pastrimi i reputacionit. HTTPS-ja dalëse drejt një shërbimi zhvilluesi të njohur nuk mbart asnjë nga penalitetet e reputacionit që do të kishte një domen i ri ose një IP i papërpunuar. Shumë konfigurime të filtrimit të daljes e lejojnë këtë në mënyrë implicite.
  • Asinkronia dhe mohueshmëria. Një model anketimi — implanti merr një dokument në një interval në vend që të mbajë një socket të hapur — prodhon trafik që duket si anketim periodik i API-t, jo si një seancë interaktive. Enkriptimi i përmbajtjes së dokumentit do të thotë që edhe një analist që gjen koshin e të dhënave sheh tekstin e koduar, jo një listë komandash.
  • Rrotullim trivialKalimi në një kuti tjetër të dhënash, ose në një shërbim krejtësisht të ndryshëm shënimesh/ngjitjeje, është një ndryshim konfigurimi me një rresht për operatorin. Çdo listë bllokimi e lidhur me relenë specifike është e vjetëruar në momentin që dërgohet.

Kompromisi që pranon operatori është rendimenti dhe vonesa: një rele dead-drop është më i ngadaltë dhe me gjerësi bande më të ulët sesa një lidhje direkte. Për një implant mbikëqyrjeje dhe kontrolli që kryesisht lëshon komanda të shkurtra dhe mbledh rezultate me kalimin e kohës, ky shkëmbim është i lehtë për t'u bërë.

Kohështrirje

Familja u përshkallëzua me shpejtësi. Vulat kohore të krijimit të biletave për versionet e shënuara e vendosin të gjithë harkun e vëzhguar brenda rreth trembëdhjetë orësh e gjysmë, dhe numri i provave të skanerit u rrit bashkë me kodin - nga disa vende të shënuara në versionin e parë në katërmbëdhjetë në të fundit.

VersionParë për herë të parë (UTC)shënim
0.1.02026-07-21 12:59Ngarkimi fillestar; sipërfaqe minimale e shënuar
0.5.02026-07-21 18:01Aftësia zgjerohet
0.2.02026-07-21 18:03(numërimi i versionit nuk është monotonik me rendin e ngarkimit)
0.6.02026-07-22 00:44Set më i gjerë modulesh
0.7.02026-07-22 01:58Seti i mjeteve pothuajse i plotë
0.7.12026-07-22 02:28Më i fundit; 35 module, kapacitet i plotë

Numrat e versioneve nuk u publikuan në një rend të rreptë, por drejtimi është i qartë: një version i vogël i parë, pastaj një përsëritje e shpejtë drejt versionit 0.7.1 me të gjitha funksionet. Ky është forma e një projekti në zhvillim aktiv që po shtyhet në një regjistër publik ndërsa rritet, jo një rënie e menjëhershme.

Treguesit e Kompromisit

Të gjithë treguesit më poshtë u konfirmuan kundrejt përmbajtjes së paketës në disk dhe një skanimi determinist të treguesve të versionit 0.7.1; asnjë nuk është spekulativ.

TipiTregues
Paketa (PyPI)gcli-control, versionet 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1
Importo paketëngcli
Rele C2npoint[.]io (JSON-bin dead-drop; ngarkesa të enkriptuara)
Depozitë e deklaruargithub[.]com/gcli-control/gcli
Gjurmët e gishtave të sjelljesModulet e mbikëqyrjes të vendosura së bashku: keylog, webcam, audio, clipboard, browser, plus persistencë, ashensor dhe një shtresë komande klient/host/protokoll në një paketë të vetme
Instaloj hooksAsnjë: aftësia funksionon gjatë kohës së ekzekutimit të mjetit, jo gjatë instalimit

Shënim i mbrojtësit: Sinjali më i fortë dhe më i qëndrueshëm nuk është domeni (një host rele rrotullohet në mënyrë të parëndësishme) por formë: një paketë e vetme që përfshin tre ose më shumë primitiva të dallueshme të mbikëqyrjes së hostit drejton një cikël komande/përgjigje përmes një shërbimi publik të strehimit të përmbajtjes. Bllokimi npoint[.]io Mënyra outright është jopraktike për shumicën e dyqaneve; njoftimi për një proces të papritur që kap pajisjet hyrëse dhe komunikon me një shërbim JSON-bin është shumë më i fuqishëm.

Sjellje dhe kornizë e vëzhguar

Dy gjëra e bëjnë këtë mostër të pazakontë, dhe të dyja janë fakte të vëzhgueshme dhe jo përfundime rreth motivit.

E reklamoi veten. Përmbledhja e paketës e shpërndarë në PyPI numëronte aftësitë në gjuhë të thjeshtë - qasje në distancë, kontroll i desktopit, menaxhim përdoruesish, kamera në internet, audio, regjistrues çelësash, këmbëngulje, të dhëna shfletuesi, WiFi, regjistër, "mbi 140 komanda". Nuk kishte asnjë përpjekje për ta kaluar kodin si një ndihmës ndërtimi, një mbështjellës CLI ose një mjet agjenti AI, i cili është maskimi më i zakonshëm që shohim në regjistrat publikë. Nëse kjo hapje pasqyron një mjet të ekipit të kuq të publikuar pa kontrolle qasjeje apo diçka tjetër është një çështje që vetëm përmbajtja e paketës nuk e zgjidh; ajo që është e sigurt është se një set mjetesh funksionale, me qëllim të përgjithshëm, për qasje në distancë dhe mbikëqyrje ishte i instalueshëm nga kushdo me... cicërin.

Mbështetej në besimin në një shërbim të mirë. Përdorim npoint[.]io pasi releja është teknika përcaktuese. Është një shembull i një modeli më të gjerë — drejtimi i C2 përmes një SaaS legjitim (faqe ngjitjeje, kuti JSON, chat webhooks, dokumente në cloud) në mënyrë që trafiku keqdashës të përzihet me aktivitetin normal të zhvilluesit dhe të mos ketë asnjë pikë fundore në pronësi të operatorit për t'u sekuestruar. Ngarkesat në rele ishin të enkriptuara, kështu që përmbajtja e koshit të të dhënave nuk do të lexohej si komanda për një vëzhgues të rastësishëm.

Sinjalet e botuesit janë të dobëta dhe të përgjithshme. Paketa deklaroi një autor të “kontribuesve të gcli” dhe një licencë MIT, dhe i drejtoi fushat e faqes kryesore dhe të depozitës në github[.]com/gcli-control/gcliAsnjë nga këto nuk është verifikim: një varg autori është tekst i lirë, një kokë licence MIT nuk kushton asgjë dhe një URL depozite në meta të dhënat e paketës është një pretendim, jo ​​një provë e prejardhjes. Modeli - një emër krejt i ri, një autor kolektiv gjenerik dhe një org/depo vetë-referuese e krijuar rreth paketës - është se si duket një projekt kur është ngritur posaçërisht për të mbajtur kodin, në vend të një mjeti të vendosur që rastësisht ka krijuar një veçori kontrolli në distancë. Ne i shënojmë këto si vëzhgime; ato janë në përputhje me, por nuk krijojnë vetë, një shpërndarje të ndërtuar me qëllim.

Ne e përshkruajmë disponimin si keqdashës në bazë të aftësisë dhe ofrimit: një implant i plotë, i ekzekutueshëm me akses dhe mbikëqyrje nga distanca, i shpërndarë në një indeks pakete publike me një transmetim të fshehtë. Ne nuk i atribuojmë një objektiv ose një motiv.

Ndikimi, trendet dhe çfarë mund të bëjnë mbrojtësit

Një pikë e verbër për triazhin e orientuar drejt maskimit. Shumë çelësa të automatizuar të triazhimit të paketave në fsheh sinjale të malware tipik i regjistrit — pika të turbullta, koha e instalimit hooks, fjalë të shkurtra që mbledhin kredenciale. Një paketë që është thjesht hapur një RAT, me kod të pastër të lexueshëm dhe pa grep instalimi, nuk paraqet asnjë nga ato sinjale dhe mund të kalojë heuristikat që presin fshehje. Sinjalet që kapin me besueshmëri këtë klasë janë strukturore dhe jo të bazuara në maskim: një regjistrim i aftësive (sa primitiva të dallueshme të mbikëqyrjes së hostit bashkëjetojnë në një paketë) dhe analiza e formës C2 (një lak komande/përgjigje i drejtuar përmes një shërbimi të përgjithshëm të strehimit të përmbajtjes). Këto kontrolle aktivizohen pavarësisht se sa të ndershme ose turbullohet paketimi është.

Trendi SaaS-as-C2. Abuzimi i një shërbimi legjitim të hostimit si një platformë pa krye nuk është i ri, por vazhdon të funksionojë sepse kostoja mbrojtëse e bllokimit të shërbimit është e lartë dhe kostoja ofensive e ndërrimit të shërbimeve është afër zeros. Prisni më shumë prej saj. Mbrojtjet e rrjetit të lidhura me domene specifike të këqija plaken menjëherë; rregullat e sjelljes ("ky proces lexon kujtesën dhe kamerën e internetit dhe më pas komunikon me një API të hostimit të shënimeve") nuk e bëjnë këtë.

Një skicë zbulimi betoni. Rregulli i qëndrueshëm nuk emërton npoint[.]io fare. Ai kombinon dy vëzhgime që janë individualisht të zakonshme, por së bashku të rralla në një zhvillues normal ose host CI:

alarm kur një proces i vetëm, brenda një seance, të dy:
(A) qaset në një primitiv mbikëqyrjeje të strehuesit — pajisje hyrëse (grep tastiere/mausi), kamera, mikrofoni, kapja e ekranit, ciklet leximi të clipboard-it ose një depo kredencialesh shfletuesi ("Login "Të dhëna" / "Shteti Lokal" / DPAPI); DHE
(B) bën kërkesa dalëse në një shërbim publik të strehimit të përmbajtjes / paste / JSON-bin / chat-webhook dhe më pas i ngre për shqyrtim, pavarësisht nga shërbimi specifik në (B).

Asnjëra gjysmë nuk është e dyshimtë më vete: shumë mjete legjitime për pamje të ekranit dhe shumë JSON të postuara në një API pritëse. Lidhja brenda një procesi jetëshkurtër është sinjali dhe i mbijeton çdo rrotullimi të stafetës.

Hapat praktikë për ekipet:

  • Trajtojini instalimet e paketave publike në zhvilluesit dhe hostet CI si një kufi ekzekutimi, jo si një lehtësi - një RAT në një agjent ndërtimi është një RAT me sekretet tuaja.
  • Preferoni pasqyra të brendshme të listës së lejuara; një paketë e emërtuar fjalë për fjalë për telekomandë dhe që përshkruan një regjistrues çelësash nuk duhet të zgjidhet kurrë në një indeks të korporatës.
  • Alarm mbi kombinim — pajisja hyrëse ose kapja e ekranit plus trafiku dalës drejt një shërbimi content/paste/JSON-bin — në vend të ndonjë primitive të vetme, e cila ka përdorime të mira në izolim.
  • Mos u mbështetni në një rezultat të automatizuar "të sigurt" si një vendim përfundimtar për paketat me aftësi të gjerë aksesi ndaj hostit; drejtojini ato për shqyrtim njerëzor.

Familja e paketave është klasifikuar si keqdashëse dhe është referuar për heqje nga regjistri. Meqenëse një C2 i bazuar në rele nuk lë asnjë host në pronësi të operatorit në një situatë të vështirë, vlera mbrojtëse e qëndrueshme është në gjurmën e gishtit të sjelljes më sipër, jo në ndonjë hyrje të vetme në listën e bllokimeve.

mjetet-e-për-përbërjes-së-softuerit-sca-tools
Përparësoni, korrigjoni dhe siguroni rreziqet e softuerit tuaj
Merrni Llogarinë tuaj Falas.
Nuk kërkohet kartë krediti.

Siguroni Zhvillimin dhe Ofrimin e Softuerit tuaj

me Xygeni Product Suite