TL; DR
Een PyPI-pakket genaamd gcli-control Het pakket leverde een complete tool voor externe toegang tot Windows: toetsaanslagregistratie, webcam- en microfoonopname, klembordbewaking, toegang tot browsergegevens, schermbesturing, persistentie, privilegeverhoging en naar eigen zeggen "meer dan 140 commando's". Het verhulde niet wat het was: de eigen PyPI-beschrijving van het pakket omschreef het als een "tool voor externe toegang via npoint.io".
Het detail dat de moeite waard is om bij stil te staan, is die zin. "via npoint.io." In plaats van verbinding te maken met een speciale server, gebruikte het implantaat npoint[.]io (een gratis, legitieme dienst voor het hosten van kleine JSON-documenten) als commando- en controlerelais. De operator schrijft commando's naar een JSON-bin; het implantaat leest die bin, voert de commando's uit en schrijft de resultaten terug. Geen domein van de aanvaller om te blokkeren, geen nieuw IP-adres om te markeren: het verkeer gaat naar een dienst die ontwikkelaars dagelijks gebruiken.
In ongeveer dertien en een half uur tijd werden zes versies gepubliceerd, de ene nog beter dan de andere. Elk van deze versies werd beoordeeld. ml_predicted_safe Een geautomatiseerd classificatiesysteem heeft de familie, na handmatige beoordeling, opnieuw geclassificeerd als kwaadaardig.
Aanvalsanatomie
gcli-control installeert het importpakket gcli, een Python-codebasis met 35 modules. Er zijn geen installatie-uren. hooks — niets loopt tijdens pip installerenDe functionaliteit bevindt zich in de modules zelf, die worden aangeroepen zodra de tool wordt uitgevoerd, en de module-indeling leest als een productspecificatieblad:
| Capaciteitsgebied | Modules |
|---|---|
| Hostbewaking | keylog, webcam, audio, clipboard, desktop, monitoring |
| Toegang tot inloggegevens en data | browser, forensics, fileops, transfer, users |
| Voet aan de grond krijgen en escalatie | persistence, elevator, registry, security |
| Host- en netwerkreconfiguratie | system, processes, network_config, wifi, bluetooth, netutils |
| Commando & controle | client, host, session, protocol, npoint, crypto, encrypt |
Het commandokanaal is het interessante onderdeel. De meeste tools voor toegang op afstand maken verbinding met een server die de operator beheert — een IP-adres, een domein, een hostingprovider die kan worden gemeld en offline kan worden gehaald. gcli-control in plaats daarvan behandelt een gratis JSON-bin-service als deaddrop. De npunt De module leest en schrijft kleine JSON-documenten op npoint[.]io via gewone HTTPS; de crypto/encrypt De modules verpakken de uitgewisselde gegevens zodat de inhoud van de binaire bestanden geen onversleutelde commando's bevat. Het effect is een bemiddelde, versleutelde doorgeefluik:
- De operator plaatst een (versleutelde) instructie in een JSON-container.
- Het implantaat, dat op de host van het slachtoffer draait, leest de inhoud van de binaire map, decodeert deze, voert een van de bijbehorende commandohandlers uit en schrijft het (versleutelde) resultaat terug.
- Voor een netwerkmonitor is het slachtoffer simpelweg aan het praten met... npoint[.]io — een dienst die een legitieme reden heeft om in het ontwikkelaarsverkeer te verschijnen.
Er is geen download in een tweede fase en geen versleutelde loader: de functionaliteit wordt in zijn geheel, in leesbare Python, meegeleverd, en het enige dat "verborgen" is, betreft de keuze van de relay en de versleuteling van de doorgestuurde payloads.
Het is de moeite waard om uit te leggen waarom een JSON-bin deaddrop operationeel aantrekkelijk is, omdat het verklaart waarom we verwachten dit patroon opnieuw te zien:
- Geen door de operator beheerd eindpunt. Er is geen C2-domein om te registreren, geen VPS om te huren en niets dat een verdediger of registrar in beslag kan nemen. Verwijdering van de pakket raakt het kanaal niet aan; verwijdering van de kanaal Dit betekent dat je een algemene SaaS-applicatie vraagt om één document uit miljoenen te controleren.
- Reputatieopschoning. Uitgaande HTTPS-verbindingen naar een bekende ontwikkelaarsservice hebben geen negatieve gevolgen voor de reputatie, in tegenstelling tot een nieuw domein of een IP-adres zonder beveiliging. Veel egress-filtersystemen staan dit impliciet toe.
- Asynchronie en ontkenbaarheid. Een pollingmodel – waarbij het implantaat met een bepaald interval een document ophaalt in plaats van een open socket te behouden – genereert verkeer dat lijkt op periodieke API-polling, en niet op een interactieve sessie. Door de inhoud van het document te versleutelen, ziet zelfs een analist die de prullenbak vindt, versleutelde tekst in plaats van een lijst met commando's.
- Triviale rotatieHet overzetten naar een andere map, of een volledig andere notitie-/plakservice, is een configuratiewijziging van slechts één regel voor de operator. Elke blokkeerlijst die is gekoppeld aan de specifieke relay is verouderd zodra deze wordt verzonden.
De afweging die de operator maakt, is doorvoer en latentie: een dead-drop relay is trager en heeft een lagere bandbreedte dan een directe verbinding. Voor een bewakings- en controle-implantaat dat voornamelijk korte commando's verstuurt en de resultaten in de loop van de tijd verzamelt, is die afweging gemakkelijk te maken.
Timeline
De familie escaleerde snel. De tijdstempels voor het aanmaken van de meldingen voor de gemarkeerde versies plaatsen het hele waargenomen traject binnen ongeveer dertien en een half uur, en het aantal bewijsstukken van de scanner zelf groeide parallel met de code — van een paar gemarkeerde locaties in de eerste versie tot veertien in de laatste.
| Versie | Voor het eerst gezien (UTC) | Note |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Eerste upload; minimaal gemarkeerd oppervlak |
0.5.0 | 2026-07-21 18:01 | De mogelijkheden worden uitgebreid. |
0.2.0 | 2026-07-21 18:03 | (versienummering is niet consistent met de uploadvolgorde) |
0.6.0 | 2026-07-22 00:44 | Uitgebreidere moduleset |
0.7.0 | 2026-07-22 01:58 | Vrijwel complete gereedschapskit |
0.7.1 | 2026-07-22 02:28 | Nieuwste versie; 35 modules, volledige functionaliteit |
De versienummers werden niet in strikte volgorde gepubliceerd, maar de richting is duidelijk: een kleine eerste versie, gevolgd door snelle iteraties richting de volledig functionele versie 0.7.1. Dit is de structuur van een project in actieve ontwikkeling dat gaandeweg naar een openbaar register wordt uitgerold, en niet een eenmalige release.
Indicatoren van compromis
Alle onderstaande indicatoren zijn bevestigd aan de hand van de inhoud van het pakket op de schijf en een deterministische indicatorscan van versie 0.7.1; geen ervan is speculatief.
| Type | Indicator |
|---|---|
| Pakket (PyPI) | gcli-control, versies 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Importeer pakket | gcli |
| C2-relais | npoint[.]io (JSON-bin dead-drop; versleutelde payloads) |
| Vermelde opslagplaats | github[.]com/gcli-control/gcli |
| Gedragsvingerafdruk | Gecombineerde bewakingsmodules: keylog, webcam, audio, clipboard, browser, plus persistentie, een lift en een client/host/protocol-commandolaag in één pakket. |
| Install hooks | Geen: de functionaliteit wordt uitgevoerd tijdens de runtime van de tool, niet tijdens de installatie. |
Opmerking van de verdediger: Het sterkste, meest duurzame signaal is niet het domein (een relayhost roteert triviaal), maar het vorm: een enkel pakket dat drie of meer verschillende host-surveillance-primitieven bundelt en Een commando/antwoord-lus wordt via een openbare contenthostingservice geleid. Blokkerend npoint[.]io Een directe waarschuwing is voor de meeste winkels onpraktisch; een waarschuwing bij een onverwacht proces dat zowel invoerapparaten registreert als communiceert met een JSON-bin-service is veel robuuster.
Waargenomen gedrag en framing
Twee dingen maken deze steekproef ongebruikelijk, en beide zijn waarneembare feiten in plaats van conclusies over het motief.
Het maakte reclame voor zichzelf. De pakketbeschrijving die op PyPI werd verspreid, somde de mogelijkheden in duidelijke taal op: toegang op afstand, desktopbesturing, gebruikersbeheer, webcam, audio, keylogger, persistentie, browsergegevens, wifi, register, "meer dan 140 commando's". Er werd geen poging gedaan om de code te presenteren als een build-helper, een CLI-wrapper of een AI-agent-hulpprogramma, wat de meer gebruikelijke vermomming is die we zien bij openbare registers. Of die openheid een red-team-tool weerspiegelt die zonder toegangscontrole is gepubliceerd of iets anders, is een vraag die de inhoud van het pakket alleen niet beantwoordt; wat zeker is, is dat een werkende, algemene toolkit voor toegang op afstand en bewaking door iedereen kon worden geïnstalleerd. pit.
Het berustte op vertrouwen in een welwillende dienstverlening. gebruik npoint[.]io aangezien de relay de bepalende techniek is. Het is een voorbeeld van een breder patroon: het routeren van C2 via een legitieme SaaS-dienst (paste-sites, JSON-containers, chatwebsites).hooks(clouddocumentatie) zodat het kwaadwillige verkeer opgaat in de normale ontwikkelaarsactiviteit en er geen door de operator beheerd eindpunt is dat kan worden overgenomen. De payloads op de relay waren versleuteld, zodat de inhoud van de bin niet als commando's zou worden herkend door een toevallige waarnemer.
De signalen van de uitgever zijn zwak en algemeen. Op het pakket stond vermeld dat Auteur van “gcli contributors” en een MIT-licentie, en verwees de homepage en repository-velden naar github[.]com/gcli-control/gcliNiets daarvan is verificatie: een auteursnaam is vrije tekst, een MIT-licentieheader kost niets en een repository-URL in de pakketmetadata is een bewering, geen bewijs van herkomst. Het patroon – een gloednieuwe naam, een generieke collectieve auteur en een zelfverwijzende organisatie/repository die rond het pakket is gecreëerd – is hoe een project eruitziet wanneer het specifiek is opgezet om de code te verspreiden, in plaats van een bestaande tool waaraan toevallig een functie voor beheer op afstand is toegevoegd. We noteren dit als observaties; ze zijn consistent met, maar bewijzen op zichzelf niet dat er sprake is van een doelgerichte distributie.
We beschrijven de opzet als kwaadaardig op basis van de mogelijkheden en de wijze van verspreiding: een compleet, uitvoerbaar implantaat voor toegang op afstand en bewaking, verspreid via een openbare pakketindex met een verborgen doorgeefluik. We noemen geen specifiek doelwit of motief.
Impact, trends en wat verdedigers kunnen doen
Een blinde vlek bij triage op basis van vermomming. Veel geautomatiseerde pakkettriage is gebaseerd op de vermommen signalen van typische registermalware — versleutelde blobs, installatietijd hooks, korte zinnetjes om inloggegevens te verzamelen. Een pakket dat simpelweg openlijk een verraderMet schone, leesbare code en zonder installatiehook vertoont het geen van die signalen en kan het langs heuristieken glippen die verhulling verwachten. De signalen die deze klasse betrouwbaar ontmaskeren, zijn structureel in plaats van op vermomming gebaseerd: een capaciteitentelling (hoeveel verschillende host-surveillance-primitieven er in één pakket naast elkaar bestaan) en C2-vormanalyse (een commando/antwoord-loop die via een algemene contenthostingservice loopt). Deze controles worden uitgevoerd ongeacht hoe eerlijk of versluierd de verpakking is.
De trend van SaaS als C2-platform. Het misbruiken van een legitieme hostingdienst als depot is niet nieuw, maar het blijft werken omdat de kosten voor het blokkeren van de dienst hoog zijn en de kosten voor het overstappen naar een andere dienst vrijwel nihil. Verwacht dat dit vaker zal voorkomen. Netwerkbeveiligingen die zijn gekoppeld aan specifieke kwaadwillende domeinen verouderen onmiddellijk; gedragsregels ("dit proces leest het klembord en de webcam en communiceert vervolgens met een API voor het hosten van notities") niet.
Een concrete detectieschets. De duurzame regel noemt geen naam. npoint[.]io helemaal niet. Het combineert twee observaties die afzonderlijk veel voorkomen, maar samen zeldzaam zijn op een normale ontwikkelomgeving of CI-host:
Een waarschuwing wordt gegeven wanneer een enkel proces, binnen één sessie, beide:
(A) toegang krijgt tot een primitief apparaat voor hostbewaking — invoerapparaat (toetsenbord/muis-hook), camera, microfoon, schermopname, klembord-leeslus of een opslagplaats voor browserreferenties ("Login Gegevens" / "Lokale staat" / DPAPI); EN
(B) maakt uitgaande verzoeken aan een openbare contenthosting-/paste-/JSON-bin-/chat-webhookservice en stuurt deze vervolgens ter beoordeling door, ongeacht de specifieke service in (B).
Geen van beide helften is op zichzelf verdacht: veel legitieme tools maken screenshots en veel versturen JSON naar een hosting-API. De combinatie binnen een kortstondig proces is het signaal, en dat blijft behouden tijdens elke doorverwijzing.
Praktische stappen voor teams:
- Beschouw openbare pakketinstallaties op ontwikkel- en CI-hosts als een uitvoeringsgrens, niet als een handigheidje — een RAT op een buildagent is een RAT met uw geheimen.
- Geef de voorkeur aan interne mirrors die op de whitelist staan; een pakket dat letterlijk is vernoemd naar afstandsbediening en een keylogger beschrijft, mag nooit op een bedrijfsindex worden gevonden.
- Waarschuwing op de combinatie van — invoerapparaat of schermopname plus uitgaand verkeer naar een content-/plak-/JSON-bin-service — in plaats van op een enkele primitieve functie, die op zichzelf onschadelijk kan zijn.
- Vertrouw niet op een geautomatiseerde "veilige" score als definitief oordeel voor pakketten met brede toegang tot hosts; laat ze door een mens beoordelen.
De pakketfamilie is als kwaadaardig geclassificeerd en is aangemeld voor verwijdering uit het register. Omdat een relay-gebaseerde C2 geen host in handen van de operator achterlaat die kan zinken, ligt de duurzame verdedigingswaarde in de bovenstaande gedragsvingerafdruk, niet in een enkele vermelding op de blokkeerlijst.





