TL; DR
PyPI-paketti nimeltä gcli-ohjaus toimitti täydellisen Windows-etäkäyttötyökalun: näppäinpainallusten lokitiedot, web-kameran ja mikrofonin kaappauksen, leikepöydän valvonnan, selaimen tunnistetietojen käytön, näytön hallinnan, pysyvyyden hallinnan, oikeuksien laajentamisen ja itse mainostetun "yli 140 komennon". Se ei peitellyt, mitä se oli: paketin oma PyPI-yhteenveto kuvaili sitä "etäkäyttötyökaluksi" npoint.io".
Pysähtymisen arvoinen yksityiskohta on tuo lause "npoint.io:n kautta." Sen sijaan, että soittaisi kotiin erilliselle palvelimelle, implantti käytti npoint[.]io (ilmainen ja laillinen palvelu pienten JSON-dokumenttien ylläpitoon) komento- ja ohjausvälittäjänä. Operaattori kirjoittaa komentoja JSON-säiliöön; implantti kyselee kyseisen säiliön, suorittaa sen ja kirjoittaa tulokset takaisin. Ei hyökkääjän omistamaa verkkotunnusta estettävänä, ei uutta IP-osoitetta merkittävänä: liikenne menee palveluun, jota kehittäjät käyttävät päivittäin.
Kuusi versiota julkaistiin noin kolmessatoista ja puolessa tunnissa, jokainen edellistä kyvykkäämpi. Jokainen niistä sävellettiin ml_ennustettu_turvallinen automaattisen luokittelijan toimesta ennen manuaalista tarkistusta, joka luokitteli perheen uudelleen haitalliseksi.
Hyökkäyksen anatomia
gcli-ohjaus asentaa tuontipaketin gcli, 35-moduulinen Python-koodikanta. Asennusaikaa ei ole. hooks — mikään ei liiku aikana pip asennusOminaisuus sijaitsee itse moduuleissa, ja se aktivoidaan työkalun suorittamisen jälkeen, ja moduulin asettelu on kuin tuotteen erittelylomake:
| Valmiusalue | Moduulit |
|---|---|
| Isännän valvonta | keylog, webcam, audio, clipboard, desktop, monitoring |
| Tunnistetiedot ja datan käyttöoikeus | browser, forensics, fileops, transfer, users |
| Jalansija ja eskalaatio | persistence, elevator, registry, security |
| Isännän ja verkon tiedustelu | system, processes, network_config, wifi, bluetooth, netutils |
| Komento ja hallinta | client, host, session, protocol, npoint, crypto, encrypt |
Komentokanava on mielenkiintoinen osa. Useimmat etäkäyttötyökalut saavuttavat operaattorin hallinnoiman palvelimen – IP-osoitteen, verkkotunnuksen, hosting-palveluntarjoajan, joka voidaan raportoida ja ottaa offline-tilaan. gcli-ohjaus sen sijaan kohtelee ilmainen JSON-bin-palvelu dead-drop-tiedostona. n-piste moduuli lukee ja kirjoittaa pieniä JSON-dokumentteja npoint[.]io tavallisen HTTPS:n kautta; Crypto/Salaa moduulit käärivät vaihdetut hyötykuormat niin, että roskakorin sisältö ei ole selkokielistä komentoa. Vaikutus on välitetty, salattu välitys:
- Operaattori pudottaa (salatun) käskyn JSON-säiliöön.
- Uhrikoneella suoritettava implantti kyselee kyseisen bin-tiedoston, purkaa salauksen, suorittaa yhden komentojen käsittelijöistään ja kirjoittaa (salatun) tuloksen takaisin.
- Verkkomonitorille uhri yksinkertaisesti puhuu npoint[.]io — palvelu, jolla on perusteltu syy näkyä kehittäjäliikenteessä.
Tässä ei ole toisen vaiheen latausta eikä hämärrettyä lataajaa: ominaisuus toimitetaan kokonaisuudessaan luettavassa Pythonissa, ja ainoa "piilotettu" asia on välityksen valinta ja välitettyjen hyötykuormien salaus.
On syytä selittää, miksi JSON-binin deaddrop-tilanne on toiminnallisesti houkutteleva, koska se selittää, miksi odotamme näkevämme saman kuvion uudelleen:
- Ei operaattorin omistamaa päätepistettä. Ei ole rekisteröitävää C2-verkkotunnusta, vuokrattavaa VPS:ää eikä puolustajalla tai rekisterinpitäjällä ole takavarikoitavaa. paketti ei kosketa kanavaa; poistaminen kanava tarkoittaa yleiskäyttöisen SaaS-palvelun pyytämistä valvomaan yhtä dokumenttia miljoonien joukossa.
- Maineenpesu. Tunnetulle kehittäjäpalvelulle suunnattu lähtevä HTTPS-liikenne ei aiheuta samoja mainehaitoja kuin uusi verkkotunnus tai raaka IP-osoite. Monet lähtevän liikenteen suodatusasetukset sallivat sen implisiittisesti.
- Asynkronia ja kiistämättömyys. Kyselymalli – jossa implantti hakee dokumentin tietyin väliajoin avoimen soketin pitämisen sijaan – tuottaa liikennettä, joka näyttää säännölliseltä API-kyselyltä, ei interaktiiviselta istunnolta. Dokumentin sisällön salaaminen tarkoittaa, että jopa roskakorin löytävä analyytikko näkee salatun tekstin, ei komentoluetteloa.
- Triviaali kiertoSiirtyminen eri roskakoriin tai kokonaan eri muistiinpano-/liitämispalveluun on operaattorille yhden rivin määritysmuutos. Kaikki tiettyyn releeseen kohdistetut estolistat ovat vanhentuneita toimitushetkellä.
Operaattorin hyväksymä kompromissi on läpimenoaika ja latenssi: dead-drop-rele on hitaampi ja kaistanleveydeltään pienempi kuin suora yhteys. Valvonta- ja ohjausjärjestelmälle, joka antaa enimmäkseen lyhyitä komentoja ja kerää tuloksia ajan kuluessa, tämä kompromissi on helppo tehdä.
Aikajana
Perheen tilanne kärjistyi nopeasti. Merkittyjen versioiden tikettien luontiaikaleimat sijoittavat koko havaitun kaaren noin kolmeentoista ja puoleen tuntiin, ja skannerin oma todistusaineisto kasvoi koodin mukana – ensimmäisessä versiossa oli muutama merkitty sivusto neljääntoista viimeisimmässä.
| Versio | Ensimmäinen kerta (UTC) | Huomautuksia |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Alkuperäinen lataus; minimaalinen merkitty pinta |
0.5.0 | 2026-07-21 18:01 | Kyky laajenee |
0.2.0 | 2026-07-21 18:03 | (versionumerointi ei ole monotoninen latausjärjestyksen kanssa) |
0.6.0 | 2026-07-22 00:44 | Laajempi moduulisarja |
0.7.0 | 2026-07-22 01:58 | Lähes täydellinen työkalupakki |
0.7.1 | 2026-07-22 02:28 | Uusin; 35 moduulia, täysi kapasiteetti |
Versionumeroita ei julkaistu tarkasti järjestyksessä, mutta suunta on selvä: pieni ensin tehty versio, sitten nopea iteraatio kohti täysimittaista versiota 0.7.1. Tämä kuvaa aktiivisesti kehitteillä olevan projektin muotoa, joka siirretään julkiseen rekisteriin sen kasvaessa, eikä sitä pudoteta kerralla.
Kompromissin indikaattorit
Kaikki alla olevat indikaattorit vahvistettiin levyllä olevan paketin sisällön ja version 0.7.1 deterministisen indikaattoriskannauksen avulla; mikään niistä ei ole spekulatiivinen.
| Tyyppi | Osoitin |
|---|---|
| Paketti (PyPI) | gcli-control, versiot 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Tuo paketti | gcli |
| C2-rele | npoint[.]io (JSON-bin dead-drop; salatut hyötykuormat) |
| Ilmoitettu arkisto | github[.]com/gcli-control/gcli |
| Käyttäytymisen sormenjälki | Samanaikaisesti sijaitsevat valvontamoduulit: keylog, webcam, audio, clipboard, browsersekä pysyvyys, hissi ja asiakas-/isäntä-/protokolla-komentotaso yhdessä paketissa |
| install hooks | Ei mitään: ominaisuus toimii työkalun suorituksen aikana, ei asennuksen aikana |
Puolustajan huomautus: Vahvin kestävä signaali ei ole alue (välityspalvelin vaihtuu triviaalisti), vaan muoto: yksi paketti, joka niputtaa kolme tai useampia erillisiä isäntävalvontaprimitiivejä ja reitittää komento/vastaus-silmukan julkisen sisällön isännöintipalvelun kautta. Esto npoint[.]io Suoraan sanottuna se on epäkäytännöllistä useimmille kaupoille; hälyttäminen odottamattomasta prosessista, joka sekä tallentaa syöttölaitteita että kommunikoi JSON-bin-palvelun kanssa, on paljon vankempaa.
Havaittu käyttäytyminen ja rajaaminen
Kaksi asiaa tekee tästä otoksesta epätavallisen, ja molemmat ovat havaittavissa olevia faktoja eivätkä päätelmiä motiivista.
Se mainosti itseään. PyPI:ssä jaetussa paketin yhteenvedossa lueteltiin ominaisuudet selkokielellä – etäkäyttö, työpöydän hallinta, käyttäjähallinta, web-kamera, ääni, näppäinpainallusten tallentaminen, pysyvyys, selaintiedot, WiFi, rekisteri, ”yli 140 komentoa”. Koodia ei yritetty esittää rakennusapuna, komentoriviliittymän kääreenä tai tekoälyagenttina, mikä on yleisempi julkisissa rekistereissä näkemämme peite. Pelkkä paketin sisältö ei ratkaise kysymystä siitä, heijastaako tämä avoimuus Red Team -työkalua, joka on julkaistu ilman käyttöoikeuksia, vai jotain muuta. Varmaa on, että kuka tahansa pystyi asentamaan toimivan, yleiskäyttöisen etäkäyttö- ja valvontatyökalupakin. pIP.
Se perustui luottamukseen hyvänlaatuiseen palveluun. Käyttäminen npoint[.]io koska välitys on määrittävä tekniikka. Se on esimerkki laajemmasta mallista — C2:n reitittäminen laillisen SaaS-palvelun kautta (liitä sivustot, JSON-roska-astiat, chat-verkkohooks, pilvidokumentit), jotta haitallinen liikenne sulautuu normaaliin kehittäjän toimintaan eikä ole olemassa operaattorin omistamaa päätepistettä, jota takavarikoida. Releen hyötykuormat salattiin, joten roskakorin sisältö ei lukenut komentoina satunnaiselle tarkkailijalle.
Julkaisijan signaalit ovat ohuita ja yleisluontoisia. Paketti ilmoitti, että kirjailija ”gcli-avustajista” ja MIT-lisenssillä, ja osoitti kotisivunsa ja arkistokentänsä osoitteeseen github[.]com/gcli-control/gcliMikään tästä ei ole varmennusta: tekijämerkkijono on vapaata tekstiä, MIT-lisenssin otsikko ei maksa mitään, ja paketin metatiedoissa oleva repositorion URL-osoite on väite, ei todiste alkuperästä. Kaava – upouusi nimi, geneerinen kollektiivinen tekijä ja paketin ympärille luotu itseensä viittaava org/repo – on se, miltä projekti näyttää, kun se on pystytetty erityisesti koodin siirtämistä varten, eikä vakiintunut työkalu, jolle on sattunut kehittymään etäohjausominaisuus. Mainitsemme nämä havainnoina; ne ovat yhdenmukaisia tarkoitukseen rakennetun jakelun kanssa, mutta eivät itsessään muodosta sitä.
Kuvailemme operaatiota haitalliseksi sen ominaisuuksien ja toimituksen perusteella: se on täydellinen, suoritettava etäkäyttö- ja valvontajärjestelmä, joka on jaettu julkisessa pakettihakemistossa peitetyllä välityspalvelimella. Emme ilmoita kohdetta tai motiivia.
Vaikutus, trendit ja mitä puolustajat voivat tehdä
Sokea piste naamiointiin keskittyvälle triagelle. Paljon automatisoituja pakettien triage-avaimia peittää signaaleja tyypillinen rekisterihaittaohjelma — hämärretyt läiskät, asennusaika hooks, valtakirjojen keräämiseen keskittyviä yhden rivin iskulauseita. Paketti, joka on yksinkertaisesti avoimesti ROTTA, jossa on siististi luettava koodi ja ilman asennuskoukkua, ei esitä mitään näistä merkeistä ja voi ohittaa heuristiikkaa, joka odottaa peittämistä. Signaalit, jotka luotettavasti havaitsevat tämän luokan, ovat rakenteellisia pikemminkin kuin peittelyyn perustuvia: kykylaskenta (kuinka monta erillistä isäntävalvontaprimitiiviä esiintyy yhdessä paketissa) ja C2-muodon analyysi (komento/vastaus-silmukka, joka reititetään yleiskäyttöisen sisällön isännöintipalvelun kautta). Nämä tarkistukset käynnistyvät riippumatta siitä, kuinka rehellinen tai sotkettu pakkaus on.
SaaS-as-C2-trendi. Laillisen hosting-palvelun väärinkäyttö estämisenä ei ole uusi ilmiö, mutta se toimii edelleen, koska palvelun estämisen puolustuskustannukset ovat korkeat ja palvelun vaihtamisen hyökkäyskustannukset ovat lähes nolla. Odota lisää tällaista. Tiettyihin haitallisiin verkkotunnuksiin kohdistetut verkon puolustusmekanismit vanhenevat välittömästi; käyttäytymissäännöt ("tämä prosessi lukee leikepöydän ja web-kameran ja kommunikoi sitten muistiinpanojen ylläpito-API:n kanssa") eivät.
Betonin havaitsemisluonnos. Kestävä sääntö ei nimeä npoint[.]io ollenkaan. Se yhdistää kaksi havaintoa, jotka ovat erikseen yleisiä, mutta yhdessä harvinaisia tavallisella kehittäjällä tai CI-isännällä:
hälyttää, kun yksittäinen prosessi yhden istunnon aikana sekä:
(A) käyttää isäntävalvontaprimitiiviä — syöttölaitetta (näppäimistö/hiirikoukku), kameraa, mikrofonia, näytönkaappausta, leikepöydän lukusilmukkaa tai selaimen tunnistetietovarastoa ("Login "Data" / "Paikallinen osavaltio" / DPAPI); JA
(B) tekee lähteviä pyyntöjä julkiseen sisällön ylläpito- / liittämis- / JSON-bin- / chat-webhook-palveluun ja nostaa ne sitten tarkistettavaksi riippumatta kohdassa (B) mainitusta palvelusta.
Kumpikaan puoli ei ole epäilyttävä yksinään: paljon laillisia työkaluja ottaa kuvakaappauksia ja paljon lähettää JSON-tiedostoa hosting-API:in. Yhden lyhytikäisen prosessin sisällä oleva kytkentä on signaali, ja se selviää kaikista välityskierroksista.
Käytännön vinkkejä tiimeille:
- Käsittele julkisia pakettiasennuksia kehittäjä- ja CI-isäntäkoneilla suoritusrajana, älä mukavuussyistä – RAT rakennusagentilla on RAT, jolla on sinun salaisuutesi.
- Suosi sallittuja sisäisiä peilejä; etäkäyttöä varten kirjaimellisesti nimetty ja näppäinpainallusten tallentajaa kuvaava paketti ei saisi koskaan ratkaista yrityshakemistoa.
- Hälytys yhdistelmä — syöttölaite tai näyttökuvakaappaus sekä lähtevä liikenne content/paste/JSON-bin-palveluun — yksittäisen primitiivin sijaan, jolla on yksinään hyvänlaatuisia käyttötarkoituksia.
- Älä luota automaattiseen "turvallisuus"-pisteytykseen terminaalin arvioinnissa paketeille, joilla on laaja isäntäkäyttöoikeus, vaan ohjaa ne ihmisen tarkistettavaksi.
Pakettiperhe on luokiteltu haitalliseksi ja lähetetty rekisterinpitäjän poistamista varten. Koska välityspohjainen C2 ei jätä operaattorin omistamaa isäntäkonetta vajoamaan, kestävä puolustava arvo on yllä olevassa käyttäytymissormenjäljessä, ei missään yksittäisessä estolistamerkinnässä.





