PointBlank: PyPI RAT skjuler C2 i en JSON-Bin-tjeneste

PointBlank: en fuldt udstyret Python RAT, der kørte sin kommandokanal gennem en gratis note-hostingtjeneste

TL; DR

En PyPI-pakke med navnet gcli-kontrol leverede et komplet Windows-værktøj til fjernadgang: tastetryklogning, webcam- og mikrofonoptagelse, overvågning af udklipsholder, adgang til browserlegitimationsoplysninger, skærmkontrol, persistens, rettighedsudvidelse og selvannoncerede "140+ kommandoer". Det skjulte ikke, hvad det var: pakkens eget PyPI-resumé beskrev det som et "værktøj til fjernadgang via npoint.io".

Den detalje, der er værd at stoppe op ved, er den sætning "via npoint.io." I stedet for at ringe hjem til en dedikeret server, blev implantatet brugt npoint[.]io (en gratis, legitim tjeneste til hosting af små JSON-dokumenter) som dens kommando-og-kontrol-relæ. Operatøren skriver kommandoer i en JSON-bin; implantatet poller den bin, udfører den og skriver resultaterne tilbage. Intet angriber-ejet domæne at blokere, ingen ny IP at markere: trafikken går til en tjeneste, som udviklere bruger hver dag.

Seks versioner blev udgivet på cirka tretten en halv time, hver især mere dygtig end den forrige. Hver og en af ​​dem blev scoret. ml_forudsagt_sikker af en automatiseret klassificering, før manuel gennemgang omklassificerede familien som ondsindet.

Angrebsanatomi

gcli-kontrol installerer importpakken gcli, en Python-kodebase med 35 moduler. Der er ingen installationstid. hooks — intet kører under pip installationFunktionen findes i selve modulerne, der aktiveres, når værktøjet kører, og modullayoutet lyder som et produktspecifikationsark:

KompetenceområdeModuler
Værtsovervågningkeylog, webcam, audio, clipboard, desktop, monitoring
Legitimationsoplysninger og dataadgangbrowser, forensics, fileops, transfer, users
Fodfæste og eskaleringpersistence, elevator, registry, security
Vært- og netværksgenkendelsesystem, processes, network_config, wifi, bluetooth, netutils
Kommando og kontrolclient, host, session, protocol, npoint, crypto, encrypt

Kommandokanalen er den interessante del. De fleste fjernadgangsværktøjer når en server, som operatøren kontrollerer – en IP-adresse, et domæne, en hostingudbyder, der kan rapporteres og tages offline. gcli-kontrol behandler i stedet en gratis JSON-bin-tjeneste som en dead-drop. Det npoint modul læser og skriver små JSON-dokumenter på npoint[.]io over almindelig HTTPS; krypto/kryptere Modulerne omslutter de udvekslede nyttelaster, så indholdet af bin'en ikke er klartekstkommandoer. Effekten er et medieret, krypteret relæ:

  • Operatoren placerer en (krypteret) instruktion i en JSON-bin.
  • Implantatet, der kører på offerets vært, afspørger den bin, dekrypterer, udfører en af ​​sine kommandohåndterere og skriver det (krypterede) resultat tilbage.
  • Til en netværksmonitor taler offeret blot til npoint[.]io — en tjeneste med en legitim grund til at blive vist i udviklertrafik.

Der er ingen download i andet trin og ingen obfuskeret loader her: funktionen leveres hel, i læsbar Python, og det eneste "skjul" er valget af relæ og krypteringen af ​​de relayerede nyttelaster.

Hvorfor en JSON-bin dead-drop er operationelt attraktiv, er værd at uddybe, fordi det forklarer, hvorfor vi forventer at se mønsteret igen:

  • Intet operatørejet slutpunkt. Der er intet C2-domæne at registrere, ingen VPS at leje, og intet som en forsvarer eller registrator kan beslaglægge. Fjernelse af pakke rører ikke kanalen; nedtagning af kanal betyder at bede en generel SaaS om at overvåge ét dokument blandt millioner.
  • Hvidvaskning af omdømme. Udgående HTTPS til en velkendt udviklertjeneste medfører ingen af ​​de omdømmemæssige konsekvenser, som et nyt domæne eller en rå IP ville have. Mange udgående filtreringsopsætninger tillader det implicit.
  • Asynkroni og benægtelse. En pollingmodel – implantatet henter et dokument med et interval i stedet for at holde en åben socket – producerer trafik, der ligner periodisk API-polling, ikke en interaktiv session. Kryptering af dokumentindholdet betyder, at selv en analytiker, der finder bin'en, ser krypteret tekst, ikke en kommandoliste.
  • Trivial rotationAt skifte til en anden beholder eller en helt anden note/indsæt-tjeneste er en ændring af konfigurationen på én linje for operatøren. Enhver blokliste, der er knyttet til det specifikke relæ, er forældet i det øjeblik, den afsendes.

Den afvejning, som operatøren accepterer, er gennemløbshastighed og latenstid: et dead-drop-relæ er langsommere og har lavere båndbredde end en direkte forbindelse. For et overvågnings- og kontrolimplantat, der primært udsteder korte kommandoer og indsamler resultater over tid, er denne afvejning nem at foretage.

Tidslinje

Familien eskalerede hurtigt. Tidsstempler for oprettelse af sager for de markerede versioner placerer hele den observerede bue inden for omkring tretten en halv time, og scannerens eget bevisantal voksede i takt med koden – fra et par markerede steder i den første version til fjorten i den seneste.

VersionFørst set (UTC)Bemærk
0.1.02026-07-21 12:59Første upload; minimal markeret overflade
0.5.02026-07-21 18:01Kapaciteten udvides
0.2.02026-07-21 18:03(versionsnummerering ikke monoton med uploadrækkefølge)
0.6.02026-07-22 00:44Bredere modulsæt
0.7.02026-07-22 01:58Næsten komplet værktøjssæt
0.7.12026-07-22 02:28Seneste; 35 moduler, fuld kapacitet

Versionsnumrene blev ikke offentliggjort i præcis rækkefølge, men retningen er klar: en lille første version, derefter en hurtig iteration mod den fuldt funktionelle 0.7.1. Dette er formen på et projekt under aktiv udvikling, der skubbes til et offentligt register, efterhånden som det vokser, ikke et engangsdrop.

Indikatorer for kompromis

Alle nedenstående indikatorer blev bekræftet i forhold til indholdet af pakken på disken og en deterministisk indikatorscanning af version 0.7.1; ingen er spekulative.

TypeIndikator
Pakke (PyPI)gcli-control, versioner 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1
Importér pakkegcli
C2-relænpoint[.]io (JSON-bin dead-drop; krypterede nyttelaster)
Angivet arkivgithub[.]com/gcli-control/gcli
Adfærdsmæssigt fingeraftrykSamlokaliserede overvågningsmoduler: keylog, webcam, audio, clipboard, browser, plus persistens, elevator og et klient/vært/protokol-kommandolag i én pakke
Installer hooksIngen: Funktionen kører under værktøjets kørselstid, ikke under installationen

Forsvarerens bemærkning: Det stærkeste, holdbare signal er ikke domænet (en relævært roterer trivielt), men formeen enkelt pakke, der samler tre eller flere forskellige værtsovervågningsprimitiver og ruter en kommando-/svarløkke gennem en offentlig indholdshostingtjeneste. Blokering npoint[.]io er direkte upraktisk for de fleste butikker; det er langt mere robust at advare om en uventet proces, der både registrerer inputenheder og kommunikerer med en JSON-bin-tjeneste.

Observeret adfærd og indramning

To ting gør denne stikprøve usædvanlig, og begge er observerbare fakta snarere end slutninger om motiv.

Den reklamerede for sig selv. Pakkeoversigten, der blev distribueret på PyPI, opregnede funktionerne i et letforståeligt sprog - fjernadgang, desktopkontrol, brugeradministration, webcam, lyd, keylogger, persistens, browserdata, WiFi, registreringsdatabase, "140+ kommandoer". Der blev ikke gjort forsøg på at udgive koden for at være en build-hjælper, en CLI-wrapper eller et AI-agent-værktøj, hvilket er den mere almindelige forklædning, vi ser på offentlige registre. Om denne åbenhed afspejler et red-team-værktøj udgivet uden adgangskontrol eller noget andet, er et spørgsmål, som pakkeindholdet alene ikke afgør; hvad der er sikkert, er, at et fungerende, generel fjernadgangs- og overvågningsværktøjssæt kunne installeres af alle med ... pip.

Det byggede på tillid til en godartet tjeneste. Ved brug af npoint[.]io da relæet er den definerende teknik. Det er et eksempel på et bredere mønster — routing af C2 gennem et legitimt SaaS (indsæt websteder, JSON-bins, chatwebhooks, cloud-dokumenter) så den ondsindede trafik blandes med normal udvikleraktivitet, og der ikke er noget operatørejet endpoint at beslaglægge. Nyttelasterne på relæet var krypteret, så indholdet af bin'en ville ikke blive læst som kommandoer for en tilfældig observatør.

Udgiversignalerne er tynde og generiske. Pakken erklærede en Forfatter af "gcli-bidragydere" og en MIT-licens, og pegede dens hjemmeside og arkivfelter på github[.]com/gcli-control/gcliIntet af dette er verifikation: en forfatterstreng er fri tekst, en MIT-licensheader koster ingenting, og en repository-URL i pakkemetadata er en påstand, ikke et bevis på proveniens. Mønsteret - et helt nyt navn, en generisk kollektiv forfatter og en selvrefererende organisation/repository oprettet omkring pakken - er, hvordan et projekt ser ud, når det er oprettet specifikt til at bære koden, snarere end et etableret værktøj, der tilfældigvis har udviklet en fjernbetjeningsfunktion. Vi bemærker disse som observationer; de er i overensstemmelse med, men etablerer ikke i sig selv, en formålsbygget distribution.

Vi beskriver dispositionen som ondsindet på baggrund af kapacitet og levering: et komplet, kørebart fjernadgangs- og overvågningsimplantat, distribueret på et offentligt pakkeindeks med et hemmeligt relæ. Vi tildeler ikke et mål eller et motiv.

Indvirkning, tendenser og hvad forsvarere kan gøre

En blind vinkel for forklædningsorienteret triage. Meget automatiserede pakkesorteringsnøgler på forklædning signaler af typisk malware i registreringsdatabasen — obfuskerede blobs, installationstid hooks, korte bemærkninger om indsamling af legitimationsoplysninger. En pakke, der simpelthen er åbenlyst en ROTTE, med ren læsbar kode og ingen installationshook, præsenterer ingen af ​​disse fortællinger og kan slippe forbi heuristikker, der forventer skjulning. Signalerne, der pålideligt fanger denne klasse, er strukturelle snarere end forklædningsbaserede: en kapacitetsoptælling (hvor mange forskellige værtovervågningsprimitiver der sameksisterer i én pakke) og C2-formanalyse (en kommando/svar-løkke, der dirigeres gennem en generel indholdshostingtjeneste). Disse kontroller udløses uanset hvor ærlige eller korrumperet emballagen er.

SaaS-som-C2-trenden. Det er ikke nyt at misbruge en legitim hostingtjeneste som en dead-drop, men det fortsætter med at virke, fordi de defensive omkostninger ved at blokere tjenesten er høje, og de offensive omkostninger ved at skifte tjeneste er tæt på nul. Forvent mere af det. Netværksforsvar, der er rettet mod specifikke, dårlige domæner, ældes øjeblikkeligt; adfærdsregler ("denne proces læser udklipsholderen og webcammet og kommunikerer derefter med en note-hosting API") gør det ikke.

En skitse til detektion af beton. Den varige regel nævner ikke npoint[.]io overhovedet. Den kombinerer to observationer, der individuelt er almindelige, men i fællesskab sjældne på en normal udvikler- eller CI-vært:

alarm når en enkelt proces, inden for én session, begge:
(A) tilgår en værtsovervågningsprimitiv — inputenhed (tastatur-/musekrog), kamera, mikrofon, skærmbillede, udklipsholderlæsningsløkke eller et browserlegitimationslager ("Login Data" / "Lokal tilstand" / DPAPI); OG
(B) foretager udgående anmodninger til en offentlig indholdshosting- / indsæt- / JSON-bin- / chat-webhook-tjeneste og sender derefter anmodningen til gennemgang, uanset den specifikke tjeneste i (B).

Ingen af ​​delene er mistænkelige alene: masser af skærmbilleder af legitime værktøjer, og masser af poster JSON til en hosting-API. Konjunktionen i en kortlivet proces er signalet, og den overlever enhver relærotation.

Praktiske trin for teams:

  • Behandl offentlige pakkeinstallationer på udvikler- og CI-værter som en udførelsesgrænse, ikke en bekvemmelighed — en RAT på en build-agent er en RAT med dine hemmeligheder.
  • Foretræk interne filspejle på tilladelseslisten; en pakke, der bogstaveligt talt hedder fjernbetjening og beskriver en keylogger, bør aldrig løses på et virksomhedsindeks.
  • Advarsel på kombination — input-enhed eller skærmbillede plus udgående trafik til en content/paste/JSON-bin-tjeneste — i stedet for på en enkelt primitiv, som har godartede anvendelser i sig selv.
  • Stol ikke på en automatiseret "sikker" score som en terminalvurdering for pakker med bred værtsadgangskapacitet; send dem til menneskelig gennemgang.

Pakkefamilien er blevet klassificeret som skadelig og henvist til fjernelse i registreringsdatabasen. Da en relæbaseret C2 ikke efterlader nogen operatørejet vært i et jordfald, ligger den varige defensive værdi i ovenstående adfærdsmæssige fingeraftryk, ikke i nogen enkelt blokeringslistepost.

sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite