TL; DR
Ein PyPI-Paket namens gcli-control Es wurde ein komplettes Windows-Fernzugriffstool ausgeliefert: Tastaturprotokollierung, Webcam- und Mikrofonaufzeichnung, Überwachung der Zwischenablage, Zugriff auf Browser-Anmeldeinformationen, Bildschirmsteuerung, Persistenz, Rechteausweitung und – wie selbst beworben – „über 140 Befehle“. Es machte keinen Hehl daraus, was es war: Die PyPI-Zusammenfassung des Pakets beschrieb es als „Fernzugriffstool via …“. npoint.io".
Das Detail, das es wert ist, genauer betrachtet zu werden, ist diese Formulierung. "via npoint.io." Anstatt eine Verbindung zu einem dedizierten Server herzustellen, nutzte das Implantat Folgendes: npoint[.]io (Ein kostenloser, legitimer Dienst zum Hosten kleiner JSON-Dokumente) dient als Command-and-Control-Relay. Der Betreiber schreibt Befehle in ein JSON-Bin; das Implantat fragt dieses Bin ab, führt die Befehle aus und schreibt die Ergebnisse zurück. Keine Angreifer-Domain, die blockiert werden müsste, keine neue IP-Adresse, die markiert werden müsste: Der Datenverkehr läuft über einen Dienst, den Entwickler täglich nutzen.
In etwa dreizehneinhalb Stunden wurden sechs Fassungen veröffentlicht, jede besser als die vorherige. Jede einzelne wurde vertont. ml_predicted_safe durch einen automatisierten Klassifikator, bevor eine manuelle Überprüfung die Familie als bösartig neu einstufte.
Angriffsanatomie
gcli-control installiert das Importpaket gcli, eine Python-Codebasis mit 35 Modulen. Es gibt keine Installationszeit. hooks — währenddessen läuft nichts. pip installierenDie Funktionalität ist in den Modulen selbst verankert und wird beim Start des Tools aufgerufen. Das Modullayout liest sich wie ein Produktdatenblatt:
| Fähigkeitsbereich | Module |
|---|---|
| Wirtsüberwachung | keylog, webcam, audio, clipboard, desktop, monitoring |
| Zugangsdaten und Datenzugriff | browser, forensics, fileops, transfer, users |
| Einstieg und Eskalation | persistence, elevator, registry, security |
| Host- und Netzwerk-Recon | system, processes, network_config, wifi, bluetooth, netutils |
| Befehl & Kontrolle | client, host, session, protocol, npoint, crypto, encrypt |
Der Befehlskanal ist der interessante Teil. Die meisten Fernzugriffstools erreichen einen Server, den der Bediener kontrolliert – eine IP-Adresse, eine Domain, einen Hosting-Anbieter, der gemeldet und offline genommen werden kann. gcli-control stattdessen behandelt ein kostenloser JSON-bin-Dienst als Dead-Drop. Der npoint Das Modul liest und schreibt kleine JSON-Dokumente auf npoint[.]io über normales HTTPS; die Krypto/verschlüsseln Die Module verschlüsseln die ausgetauschten Nutzdaten, sodass der Binärinhalt keine Klartextbefehle enthält. Der Effekt ist eine vermittelte, verschlüsselte Weiterleitung:
- Der Operator legt eine (verschlüsselte) Anweisung in einen JSON-Speicherbereich ab.
- Das Implantat, das auf dem Zielrechner läuft, fragt den Binärordner ab, entschlüsselt ihn, führt einen seiner Befehlshandler aus und schreibt das (verschlüsselte) Ergebnis zurück.
- Für einen Netzwerkmonitor kommuniziert das Opfer einfach nur mit npoint[.]io — ein Dienst, der aus legitimen Gründen im Entwickler-Traffic erscheint.
Es gibt hier keinen Download in einer zweiten Stufe und keinen verschleierten Loader: Die Funktionalität wird vollständig in lesbarem Python ausgeliefert, und die einzige „Versteckung“ besteht in der Wahl des Relays und der Verschlüsselung der weitergeleiteten Nutzdaten.
Warum ein JSON-bin-Deaddrop aus operativer Sicht attraktiv ist, muss genauer erläutert werden, denn dies erklärt, warum wir erwarten, dieses Muster wiederzusehen:
- Kein vom Betreiber betriebener Endpunkt. Es gibt keine C2-Domain zu registrieren, keinen VPS zu mieten und nichts, was ein Domain-Verteidiger oder Registrar beschlagnahmen könnte. Abschaltung der Paket berührt den Kanal nicht; Entfernung des Kanal bedeutet, eine allgemeine SaaS-Lösung mit der Überwachung eines einzigen Dokuments unter Millionen zu beauftragen.
- Reputationswäsche. Ausgehende HTTPS-Verbindungen zu einem bekannten Entwicklerdienst ziehen keine der Reputationsverluste nach sich, die bei einer neuen Domain oder einer unstrukturierten IP-Adresse auftreten würden. Viele Konfigurationen zur ausgehenden Filterung erlauben dies implizit.
- Asynchronität und Abstreitbarkeit. Ein Polling-Modell – das Implantat ruft in regelmäßigen Abständen ein Dokument ab, anstatt eine offene Socket-Verbindung zu halten – erzeugt Datenverkehr, der wie periodisches API-Polling aussieht, nicht wie eine interaktive Sitzung. Durch die Verschlüsselung des Dokumentinhalts sieht selbst ein Analyst, der den Papierkorb findet, verschlüsselten Text und keine Befehlsliste.
- Triviale RotationDer Wechsel zu einem anderen Speicherort oder einem anderen Notiz-/Einfügedienst erfordert vom Betreiber lediglich eine Konfigurationsänderung mit nur einer Zeile. Jede für das jeweilige Relay festgelegte Sperrliste ist ab dem Zeitpunkt ihrer Veröffentlichung veraltet.
Der Betreiber muss einen Kompromiss zwischen Durchsatz und Latenz eingehen: Ein Dead-Drop-Relay ist langsamer und bietet eine geringere Bandbreite als eine direkte Verbindung. Für ein Überwachungs- und Steuerungssystem, das hauptsächlich kurze Befehle ausführt und die Ergebnisse über einen bestimmten Zeitraum erfasst, ist dieser Kompromiss leicht zu akzeptieren.
Geschichte
Die Situation eskalierte schnell. Die Zeitstempel der Ticket-Erstellung für die markierten Versionen datieren den gesamten beobachteten Ablauf auf etwa dreizehneinhalb Stunden, und die Anzahl der vom Scanner selbst erfassten Beweise wuchs parallel zum Code – von einigen markierten Stellen in der ersten Version auf vierzehn in der neuesten.
| Version | Erstmals gesehen (UTC) | Hinweis |
|---|---|---|
0.1.0 | 2026-07-21 12:59 | Erster Upload; minimal markierte Oberfläche |
0.5.0 | 2026-07-21 18:01 | Die Fähigkeiten werden erweitert |
0.2.0 | 2026-07-21 18:03 | (Versionsnummerierung nicht monoton in Bezug auf die Upload-Reihenfolge) |
0.6.0 | 2026-07-22 00:44 | Erweiterter Modulsatz |
0.7.0 | 2026-07-22 01:58 | Nahezu vollständiges Werkzeugset |
0.7.1 | 2026-07-22 02:28 | Neueste Version; 35 Module, volle Funktionalität |
Die Versionsnummern wurden nicht in strikter Reihenfolge veröffentlicht, aber die Richtung ist klar: ein kleiner erster Entwurf, dann rasche Weiterentwicklung hin zur voll ausgestatteten Version 0.7.1. Dies ist die Vorgehensweise eines Projekts in aktiver Entwicklung, das im Laufe seiner Entwicklung in ein öffentliches Repository eingebracht wird, und keine einmalige Veröffentlichung.
Kompromissindikatoren
Alle unten aufgeführten Indikatoren wurden anhand des Paketinhalts auf der Festplatte und eines deterministischen Indikatorscans der Version 0.7.1 bestätigt; keiner ist spekulativ.
| Typ | Indikator |
|---|---|
| Paket (PyPI) | gcli-control, Versionen 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1 |
| Paket importieren | gcli |
| C2-Relais | npoint[.]io (JSON-bin-Deaddrop; verschlüsselte Nutzdaten) |
| Angegebenes Repository | github[.]com/gcli-control/gcli |
| Verhaltensfingerabdruck | Gemeinsam genutzte Überwachungsmodule: keylog, webcam, audio, clipboard, browserplus Persistenz, Elevator und eine Client/Host/Protokoll-Befehlsschicht in einem Paket |
| Installieren hooks | Keine: Die Funktion wird zur Laufzeit des Tools ausgeführt, nicht während der Installation. |
Anmerkung des Verteidigers: Das stärkste dauerhafte Signal ist nicht die Domäne (ein Relais-Host rotiert trivial), sondern die gestalten: ein einzelnes Paket, das drei oder mehr verschiedene Wirtsüberwachungsprimitive bündelt und Leitet eine Befehls-/Antwortschleife über einen öffentlichen Content-Hosting-Dienst. Blockieren npoint[.]io Eine vollständige Abschaltung ist für die meisten Shops unpraktisch; eine Warnung bei einem unerwarteten Prozess, der sowohl Eingabegeräte erfasst als auch mit einem JSON-bin-Dienst kommuniziert, ist weitaus robuster.
Beobachtetes Verhalten & Framing
Zwei Dinge machen dieses Beispiel ungewöhnlich, und beides sind beobachtbare Tatsachen und keine Schlussfolgerungen über das Motiv.
Es warb für sich selbst. Die auf PyPI veröffentlichte Paketzusammenfassung listete die Funktionen in Klartext auf: Fernzugriff, Desktop-Steuerung, Benutzerverwaltung, Webcam, Audio, Keylogger, Persistenz, Browserdaten, WLAN, Registry und „über 140 Befehle“. Es wurde nicht versucht, den Code als Build-Helfer, CLI-Wrapper oder KI-Agenten-Utility auszugeben, wie es in öffentlichen Registries häufig der Fall ist. Ob diese Offenheit auf ein Red-Team-Tool ohne Zugriffskontrollen oder etwas anderes hindeutet, lässt sich anhand des Paketinhalts allein nicht beantworten. Sicher ist jedoch, dass ein funktionierendes, universelles Fernzugriffs- und Überwachungstoolkit von jedem installiert werden konnte. Pip.
Es beruhte auf dem Vertrauen in einen wohlwollenden Dienst. Die Verwendung von npoint[.]io Da die Weiterleitung die entscheidende Technik darstellt, ist sie ein Beispiel für ein umfassenderes Muster – das Routing von C2 über eine legitime SaaS-Plattform (z. B. Paste-Sites, JSON-Bins, Chat-Web).hooks(Cloud-Dokumentation), sodass der schädliche Datenverkehr in die normale Entwickleraktivität eingebettet wird und kein vom Betreiber kontrollierter Endpunkt zur Verfügung steht. Die Nutzdaten auf dem Relay wurden verschlüsselt, sodass der Binärinhalt für einen unbeteiligten Beobachter nicht als Befehle erkennbar ist.
Die Signale des Herausgebers sind schwach und allgemein gehalten. Das Paket deklarierte ein Autorin von „gcli contributors“ und einer MIT-Lizenz, und verwies seine Homepage- und Repository-Felder auf github[.]com/gcli-control/gcliNichts davon ist eine Verifizierung: Die Autorenangabe ist Freitext, ein MIT-Lizenz-Header kostet nichts, und eine Repository-URL in den Paketmetadaten ist eine Behauptung, kein Herkunftsnachweis. Das Muster – ein brandneuer Name, ein generischer Kollektivautor und eine selbstreferenzielle Organisation/ein Repository, das um das Paket herum erstellt wird – entspricht dem Aussehen eines Projekts, das speziell für die Verbreitung des Codes ins Leben gerufen wurde, und nicht einem etablierten Tool, das zufällig eine Fernsteuerungsfunktion erhalten hat. Wir vermerken dies als Beobachtungen; sie sind zwar mit einer zweckgebundenen Distribution vereinbar, begründen diese aber nicht per se.
Wir bezeichnen die Bereitstellung aufgrund ihrer Fähigkeiten und ihrer Verbreitung als bösartig: Es handelt sich um ein vollständiges, ausführbares Fernzugriffs- und Überwachungsimplantat, das über ein öffentliches Paketverzeichnis mit einem verdeckten Relay verbreitet wird. Wir nennen kein Ziel und kein Motiv.
Auswirkungen, Trends und was Verteidiger tun können
Ein blinder Fleck bei der auf Verkleidung ausgerichteten Triage. Viele automatisierte Paket-Triage-Schlüssel auf der Verkleidung Signale von typische Registry-Malware — verschleierte Datenblöcke, Installationszeit hooksEinzeiler zum Sammeln von Anmeldeinformationen. Ein Paket, das einfach offen eine RATTEMit sauberem, lesbarem Code und ohne Installations-Hook liefert diese Klasse keine dieser verräterischen Hinweise und kann Heuristiken, die auf Verschleierung setzen, umgehen. Die Signale, die diese Klasse zuverlässig erkennen, sind struktureller Natur und nicht auf Tarnung basierend: eine Fähigkeitsanalyse (wie viele verschiedene Host-Überwachungsprimitive in einem Paket vorhanden sind) und eine C2-Shape-Analyse (eine Befehls-/Antwortschleife, die über einen allgemeinen Content-Hosting-Dienst geleitet wird). Diese Prüfungen werden unabhängig davon ausgelöst, wie ehrlich oder verschleiert Die Verpackung ist.
Der SaaS-als-C2-Trend. Der Missbrauch legitimer Hosting-Dienste als tote Postfächer ist nicht neu, funktioniert aber weiterhin, weil die Kosten für die Blockierung des Dienstes hoch und die Kosten für einen Wechsel des Dienstes nahezu null sind. Es ist mit einem Anstieg solcher Fälle zu rechnen. Netzwerkverteidigungen, die auf bestimmte schädliche Domains abzielen, verlieren schnell ihre Gültigkeit; Verhaltensregeln (z. B. „Dieser Prozess liest die Zwischenablage und die Webcam und kommuniziert dann mit einer Notiz-Hosting-API“) hingegen nicht.
Eine konkrete Detektionsskizze. Die dauerhafte Regel benennt nicht npoint[.]io überhaupt nicht. Es kombiniert zwei Beobachtungen, die einzeln häufig vorkommen, aber gemeinsam auf einem normalen Entwickler- oder CI-Host selten sind:
Warnung, wenn ein einzelner Prozess innerhalb einer Sitzung beides erreicht:
(A) greift auf eine Überwachungsfunktion des Wirts zu – Eingabegerät (Tastatur/Maus), Kamera, Mikrofon, Bildschirmaufnahme, Zwischenablage-Leseschleife oder Browser-Anmeldeinformationsspeicher ("Login Daten" / "Lokaler Status" / DPAPI); UND
(B) stellt ausgehende Anfragen an einen öffentlichen Content-Hosting-/Paste-/JSON-Bin-/Chat-Webhook-Dienst und leitet diese zur Überprüfung weiter, unabhängig vom spezifischen Dienst in (B).
Keine der beiden Komponenten ist für sich genommen verdächtig: Zahlreiche legitime Tools erstellen Screenshots, und viele senden JSON-Daten an eine Hosting-API. Das Zusammentreffen innerhalb eines kurzlebigen Prozesses ist das Signal, und es übersteht jede Weiterleitung.
Praktische Schritte für Teams:
- Behandeln Sie öffentliche Paketinstallationen auf Entwickler- und CI-Hosts als Ausführungsgrenze, nicht als Komfortfunktion – ein RAT auf einem Build-Agenten ist ein RAT mit Ihren Geheimnissen.
- Bevorzugen Sie interne Spiegelserver auf der Zulassungsliste; ein Paket, das buchstäblich nach Fernsteuerung benannt ist und einen Keylogger beschreibt, sollte niemals auf einem Unternehmensindex aufgelöst werden.
- Alarm auf der Kombination — Eingabegerät oder Bildschirmaufnahme plus ausgehender Datenverkehr zu einem Content-/Paste-/JSON-Bin-Dienst — anstatt auf einem einzelnen Primitiv zu basieren, das isoliert betrachtet harmlose Verwendungsmöglichkeiten bietet.
- Verlassen Sie sich bei Paketen mit umfassenden Host-Zugriffsmöglichkeiten nicht auf eine automatisierte „Sicherheits“-Bewertung als endgültiges Urteil; leiten Sie diese zur manuellen Überprüfung weiter.
Die Paketfamilie wurde als schädlich eingestuft und zur Entfernung aus der Registry gemeldet. Da ein Relay-basierter C2-Server keine vom Betreiber kontrollierten Hosts für ein Sinkhole zurücklässt, liegt der dauerhafte Schutzwert im oben beschriebenen Verhaltensmuster und nicht in einem einzelnen Eintrag in der Sperrliste.





