PointBlank: PyPI RAT ferberget C2 yn in JSON-Bin-tsjinst

PointBlank: in folslein funksjonele Python RAT dy't syn kommandokanaal fia in fergese notysjehostingtsjinst rûn

TL; DR

In PyPI-pakket mei de namme gcli-kontrôle in folsleine Windows-ark foar tagong op ôfstân ferstjoerd: toetsoanslaggenregistraasje, webcam- en mikrofoanopname, klamboerdmonitoring, tagong ta browsergegevens, skermkontrôle, persistinsje, privileezjeferheging, en in sels-advertearre "140+ kommando's." It ferburgen net wat it wie: de eigen PyPI-gearfetting fan it pakket beskreau it as in "ark foar tagong op ôfstân fia npoint.io".

It detail dat it wurdich is om by stil te stean is dy sin "fia npoint.io." Ynstee fan nei hûs te skiljen nei in tawijde server, brûkte it ymplantaat npunt[.]io (in fergese, legitime tsjinst foar it hosten fan lytse JSON-dokuminten) as syn kommando-en-kontrôle-relay. De operator skriuwt kommando's yn in JSON-bin; it ymplantaat pollt dy bin, fiert út en skriuwt resultaten werom. Gjin domein fan 'e oanfaller om te blokkearjen, gjin nij IP-adres om te markearjen: it ferkear giet nei in tsjinst dy't ûntwikkelders alle dagen brûke.

Seis ferzjes waarden publisearre yn sawat trettjin en in heal oere, elk bekwamer as de foarige. Elk fan harren waard bewurke. ml_foarsein_feilich troch in automatisearre klassifikator foardat hânmjittige resinsje de famylje as kwea-aardich opnij klassifisearre.

Oanfalsanatomy

gcli-kontrôle ynstallearret it ymportpakket gcli, in Python-koadebasis mei 35 modules. Der binne gjin ynstallaasjetiidslinen. hooks — neat rint tidens pip ynstallearjeDe mooglikheid sit yn 'e modules sels, dy't oanroppen wurde as de ark rint, en de module-yndieling lêst as in produktspesifikaasjeblêd:

Kapasiteitsgebietmodules
Host tafersjochkeylog, webcam, audio, clipboard, desktop, monitoring
Tagong ta ynloggegevens en gegevensbrowser, forensics, fileops, transfer, users
Foet oan 'e grûn en eskalaasjepersistence, elevator, registry, security
Host & netwurk rekonstruksjesystem, processes, network_config, wifi, bluetooth, netutils
Kommando en kontrôleclient, host, session, protocol, npoint, crypto, encrypt

It kommandokanaal is it nijsgjirrige diel. De measte ark foar tagong op ôfstân berikke in server dy't de operator kontrolearret - in IP, in domein, in hostingprovider dy't rapportearre en offline nommen wurde kin. gcli-kontrôle behannelet ynstee in fergese JSON-bin-tsjinst as in dead-drop. De npunt module lêst en skriuwt lytse JSON-dokuminten op npunt[.]io oer gewoane HTTPS; de Krypto/kodearje modules wikkelje de útwiksele payloads sadat de ynhâld fan 'e bin gjin platte tekstkommando's binne. It effekt is in bemiddelde, fersifere relay:

  • De operator lit in (fersifere) ynstruksje falle yn in JSON-bin.
  • It ymplantaat, dat rint op 'e host fan it slachtoffer, pollt dy bin, ûntsiferet, fiert ien fan syn kommando-handlers út en skriuwt it (fersifere) resultaat werom.
  • Tsjin in netwurkmonitor praat it slachtoffer gewoan mei npunt[.]io — in tsjinst mei in legitime reden om te ferskinen yn ûntwikkeldersferkear.

Der is hjir gjin download yn 'e twadde faze en gjin ferburgen lader: de mooglikheid wurdt folslein ferstjoerd, yn lêsbere Python, en it ienige "ferbergjen" is de kar fan relay en de fersifering fan 'e relay-laden.

Wêrom in JSON-bin dead-drop operasjoneel oantreklik is, is it wurdich om út te lizzen, om't it ferklearret wêrom't wy ferwachtsje it patroan wer te sjen:

  • Gjin einpunt yn eigendom fan 'e operator. Der is gjin C2-domein om te registrearjen, gjin VPS om te hieren, en neat foar in ferdigener of registrator om yn beslach te nimmen. Ferwidering fan 'e pakket rekket it kanaal net oan; ôfnimmen fan 'e kanaal betsjut in algemiene SaaS freegje om ien dokumint út miljoenen te kontrolearjen.
  • Reputaasjewitwaskjen. Utgeande HTTPS nei in bekende ûntwikkelderstsjinst hat gjin fan 'e reputaasjestraffen dy't in nij domein of in rûge IP soe hawwe. In protte útgeande filterynstellingen tastean it ymplisyt ta.
  • Asynchrony en ûntkenning. In pollingmodel - it ymplantaat hellet in dokumint op mei in ynterval ynstee fan in iepen socket te hâlden - produseart ferkear dat liket op periodike API-polling, net op in ynteraktive sesje. It fersiferjen fan de ynhâld fan it dokumint betsjut dat sels in analist dy't de bin fynt, fersifere tekst sjocht, net in kommandolist.
  • Triviale rotaasjeFerhúzjen nei in oare bak, of in folslein oare notysje/plaktsjinst, is in konfiguraasjeferoaring fan ien rigel foar de operator. Elke blokkearlist dy't tawiisd is oan de spesifike relay is ferâldere op it momint dat it ferstjoerd wurdt.

De ôfwaging dy't de operator akseptearret is trochput en latency: in dead-drop relay is stadiger en hat in legere bânbreedte as in direkte ferbining. Foar in tafersjoch-en-kontrôle-ymplantaat dat meast koarte kommando's útjout en resultaten oer tiid sammelt, is dy ôfwaging maklik te meitsjen.

Timeline

De famylje eskalearre rap. Tiidstempels foar it oanmeitsjen fan kaartsjes foar de markearre ferzjes pleatse de hiele waarnommen bôge binnen sawat trettjin en in heal oere, en it oantal bewiis fan 'e scanner groeide mei de koade - fan in pear markearre siden yn 'e earste ferzje nei fjirtjin yn 'e lêste.

FerzjeEarst sjoen (UTC)Noat
0.1.02026-07-21 12:59Inisjele upload; minimaal markearre oerflak
0.5.02026-07-21 18:01Mooglikheid wreidet út
0.2.02026-07-21 18:03(ferzjenûmering net monoton mei uploadfolchoarder)
0.6.02026-07-22 00:44Bredere moduleset
0.7.02026-07-22 01:58Hast folsleine arkset
0.7.12026-07-22 02:28Nijste; 35 modules, folsleine kapasiteit

De ferzjenûmers waarden net yn strikte folchoarder publisearre, mar de rjochting is dúdlik: in lytse earste fernijing, dan in rappe iteraasje nei de folslein funksjonele 0.7.1. Dit is de foarm fan in projekt yn aktive ûntwikkeling dat nei in iepenbier register skood wurdt as it groeit, net in ienmalige delgong.

Yndikatoaren fan kompromis

Alle yndikatoaren hjirûnder waarden befêstige tsjin de ynhâld fan it pakket op skiif en in deterministyske yndikatorscan fan ferzje 0.7.1; gjinien is spekulatyf.

Typeindicator
Pakket (PyPI)gcli-control, ferzjes 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1
Pakket ymportearjegcli
C2-relaisnpoint[.]io (JSON-bin dead-drop; fersifere payloads)
Oanjûne repositorygithub[.]com/gcli-control/gcli
GedrachsfingerprintMei-inoar pleatste tafersjochmodules: keylog, webcam, audio, clipboard, browser, plus persistinsje, elevator, en in kliïnt/host/protokol-kommandolaach yn ien pakket
Ynstallearje hooksGjin: de mooglikheid rint by it útfieren fan it ark, net tidens de ynstallaasje

Notysje fan ferdigener: it sterkste duorsume sinjaal is net it domein (in relayhost rotearret triviaal) mar de foarmin inkele pakket dy't trije of mear ûnderskate host-surveillance primitiven bondelt en rûteart in kommando-/antwurdlus fia in iepenbiere ynhâldhostingtsjinst. Blokkearjen npunt[.]io gewoan is net praktysk foar de measte winkels; warskôgings jaan oer in ûnferwachte proses dat sawol ynfierapparaten fêstleit as mei in JSON-bin-tsjinst praat, is folle robúster.

Waarnommen gedrach en framing

Twa dingen meitsje dit stekproef ûngewoan, en beide binne waarnimbere feiten ynstee fan konklúzjes oer motyf.

It advertearre himsels. De pakketoersjoch dy't ferspraat waard op PyPI neamde de mooglikheden yn gewoane taal - tagong op ôfstân, buroblêdkontrôle, brûkersbehear, webcam, audio, keylogger, persistinsje, browsergegevens, WiFi, register, "140+ kommando's." Der wie gjin poging om de koade troch te jaan as in buildhelper, in CLI-wrapper, of in AI-agent-hulpprogramma, wat de meast foarkommende ferklaaiïng is dy't wy sjogge op iepenbiere registers. Oft dy iepenheid in read-team-ark reflektearret dat publisearre is sûnder tagongskontrôles of wat oars, is in fraach dy't de ynhâld fan it pakket allinich net beslist; wat wis is, is dat in wurkjende, algemiene toolkit foar tagong op ôfstân en tafersjoch troch elkenien ynstalleare koe wurde mei pip.

It stipe op fertrouwen yn in goedwillige tsjinst. Mei help fan npunt[.]io om't de relay de definiearjende technyk is. It is in foarbyld fan in breder patroan - it routearjen fan C2 fia in legitime SaaS (plak-siden, JSON-bins, chatwebhooks, wolkdokuminten) sadat it kweade ferkear oergiet yn 'e normale aktiviteit fan ûntwikkelders en der gjin einpunt fan 'e operator is om te beslach te lizzen. De payloads op 'e relay wiene fersifere, sadat de ynhâld fan 'e bin net as kommando's lêzen wurde soe foar in tafallige waarnimmer.

De sinjalen fan 'e útjouwer binne tin en generyk. It pakket ferklearre in Skriuwer fan "gcli-bydragers" en in MIT-lisinsje, en wiisde syn thússide en repositoryfjilden nei github[.]com/gcli-control/gcliNeat dêrfan is ferifikaasje: in auteurstring is frije tekst, in MIT-lisinsjekoptekst kostet neat, en in repository-URL yn pakketmetadata is in claim, gjin bewiis fan komôf. It patroan - in gloednije namme, in generike kollektive auteur, en in selsreferinsjele org/repo makke om it pakket hinne - is hoe't in projekt derút sjocht as it spesifyk oprjochte is om de koade te dragen, ynstee fan in fêststeld ark dat tafallich in funksje foar ôfstânsbetsjinning ûntwikkele hat. Wy notearje dit as observaasjes; se binne yn oerienstimming mei, mar stelle op harsels gjin doelbewust boude distribúsje fêst.

Wy beskriuwe de disposysje as kwea-aardich op basis fan kapasiteit en levering: in folsleine, útfierbere ymplantaat foar tagong op ôfstân en tafersjoch, ferspraat op in iepenbiere pakketyndeks mei in geheime relay. Wy jouwe gjin doelwyt of motyf ta.

Ynfloed, trends en wat ferdigeners kinne dwaan

In bline flek foar ferklaaiïng-oriïntearre triage. In protte automatisearre pakkettriagekaaien op 'e disguise sinjalen fan typyske registermalware — ferburgen blobs, ynstallaasjetiid hooks, ienliners foar it rispjen fan kwalifikaasjes. In pakket dat gewoan is iepenlik in RAT, mei skjinne lêsbere koade en gjin ynstallaasjehook, presintearret gjin fan dy ferteltekens en kin foarby heuristiken glide dy't ferbergjen ferwachtsje. De sinjalen dy't dizze klasse betrouber fange binne struktureel ynstee fan ferklaaiïng-basearre: in kapasiteitstelling (hoefolle ûnderskate host-surveillance primitiven besteane yn ien pakket) en C2-foarmanalyse (in kommando/antwurdlus dy't troch in algemiene ynhâldhostingtsjinst rûteare wurdt). Dy kontrôles wurde aktivearre, nettsjinsteande hoe earlik of fersmoarge de ferpakking is.

De SaaS-as-C2-trend. Misbrûk meitsje fan in legitime hostingtsjinst as in dead-drop is net nij, mar it bliuwt wurkje, om't de ferdigeningskosten fan it blokkearjen fan 'e tsjinst heech binne en de offensive kosten fan it wikseljen fan tsjinsten hast nul binne. Ferwachtsje der mear fan. Netwurkferdigeningen dy't rjochte binne op spesifike minne domeinen ferâldere fuortendaliks; gedrachsregels ("dit proses lêst it klamboerd en de webcam en praat dan mei in notysje-hosting API") dogge dat net.

In skets foar it opspoaren fan beton. De duorsume regel neamt gjin namme npunt[.]io hielendal net. It kombinearret twa observaasjes dy't yndividueel gewoan binne, mar mienskiplik seldsum op in normale ûntwikkelder of CI-host:

warskôging as in inkele proses, binnen ien sesje, beide:
(A) hat tagong ta in host-surveillance primitive - ynfierapparaat (toetseboerd/mûshook), kamera, mikrofoan, skermôfbylding, klamboerdlêslus, of in browser-gegevensopslach ("Login "Gegevens" / "Lokale steat" / DPAPI); EN
(B) docht útgeande oanfragen oan in iepenbiere ynhâld-hosting / plakke / JSON-bin / chat-webhook-tsjinst en bringt dy dan oan foar resinsje, nettsjinsteande de spesifike tsjinst yn (B).

Gjin fan beiden is allinnich fertocht: in protte legitime ark skermôfbyldings, en in protte pleatse JSON nei in hosting-API. De konjunksje binnen ien koart proses is it sinjaal, en it oerlibet elke relayrotaasje.

Praktyske stappen foar teams:

  • Behannelje iepenbiere pakketynstallaasjes op ûntwikkelder- en CI-hosts as in útfieringsgrins, net as gemak - in RAT op in build-agent is in RAT mei jo geheimen.
  • Foarkar foar ynterne spegels op in tastiene list; in pakket dat letterlik neamd wurdt foar ôfstânsbetsjinning en in keylogger beskriuwt, moat nea oplosse op in bedriuwsyndeks.
  • Warskôging op de kombinaasje — ynfierapparaat of skermôfbylding plus útgeande ferkear nei in ynhâld/plakke/JSON-bin-tsjinst — ynstee fan op ien of oare primitive, dy't isolearre goedaardige gebrûken hat.
  • Fertrou net op in automatisearre "feilige" skoare as in terminaloardiel foar pakketten mei brede host-tagongsmooglikheid; stjoer se nei minsklike resinsje.

De pakketfamylje is as kwea-aardich klassifisearre en ferwiisd foar ferwidering fan it register. Omdat in relay-basearre C2 gjin host fan 'e operator yn in sinkhole lit, leit de duorsume ferdigeningswearde yn 'e gedrachsfingerprint hjirboppe, net yn ien inkele blokkearlistyngong.

sca-tools-software-komposysje-analyse-ark
Prioritearje, ferhelpe en befeiligje jo softwarerisiko's
Krij jo fergese akkount.
Gjin kredytkaart nedich.

Befeiligje jo softwareûntwikkeling en levering

mei Xygeni Produkt Suite