Die kontinuierliche Überwachung von FamousSparrow durch ESET Research hat erneut Früchte getragen. Unser vorheriger öffentlicher Bericht über FamousSparrow hatte gezeigt, dass diese mit China verbundene APT-Gruppe zwei neue Versionen ihrer maßgeschneiderten Backdoor namens „SparrowDoor“ entwickelt hatte. Diesmal haben wir festgestellt, dass FamousSparrow auf eine neue Backdoor namens „SparroWocky“ umgestiegen ist und diese seit mindestens August 2025 in mehreren Ländern Lateinamerikas einsetzt.
Wahrscheinlich als Reaktion Chinas auf das wachsende Interesse der USA an Lateinamerika verstärkte FamousSparrow im Juli 2025 seine Aktivitäten in der Region, sodass diese im Juli 2025 fast ausschließlich ins Visier genommen wurde. Einen Monat später stellten wir fest, dass die Gruppe begonnen hatte, die neue Backdoor „SparroWocky“ einzusetzen, die dann schnell „SparrowDoor“ als Hauptimplantat von FamousSparrow ablöste.
SparroWocky ist eine modulare Backdoor in C++. Ihre Architektur und die von ihren Autoren verwendeten Techniken zeugen von fundierten Kenntnissen über Anti-Analyse-Tricks und die Interna von Windows. Wir haben uns dafür entschieden, die Backdoor „SparroWocky“ zu nennen, da die ersten von uns gesammelten Samples alle die erste Strophe von „Jabberwocky“ enthalten, einem Nonsens-Gedicht von Lewis Carroll. Glücklicherweise ist die Funktionsweise von SparroWocky – obwohl hochentwickelt – weitaus weniger undurchschaubar.
Kernpunkte des Blogbeitrags:
- FamousSparrow zielt in großem Umfang auf Regierungsorganisationen in Lateinamerika ab.
- Seit August 2025 scheint die Gruppe SparrowDoor zugunsten von SparroWocky aufzugeben, einer neuen, maßgeschneiderten C++-Backdoor.
- Mit dem Wechsel zu SparroWocky begann FamousSparrow, Code aus Open-Source-Projekten direkt in seine Malware zu integrieren.
- SparroWocky ist eine voll funktionsfähige Backdoor, die Low-Level-Strukturen im Speicher manipuliert und Code zur Laufzeit patcht, um einer Erkennung zu entgehen.
- SparroWocky ist in der Lage, „Beacon Object Files“ zu laden und auszuführen – eine spezielle Art von ausführbaren Dateien, die von vielen Red-Team- und Penetrationstest-Tools unterstützt wird.
FamousSparrow ist eine mit China verbundene Cyberspionagegruppe, die vermutlich seit mindestens 2019 aktiv ist. Wir haben die Gruppe erstmals in einem Blogbeitrag vom September 2021 öffentlich dokumentiert, als wir beobachteten, wie sie die ProxyLogon-Sicherheitslücke ausnutzte. Die Gruppe war ursprünglich dafür bekannt, Hotels auf der ganzen Welt ins Visier zu nehmen, hat aber auch Regierungen, internationale Organisationen, Handelsverbände, Ingenieurbüros und Anwaltskanzleien angegriffen. FamousSparrow ist der einzige bekannte Nutzer der SparrowDoor-Backdoor.
In einem Blogbeitrag aus dem Jahr 2025 haben wir zwei Versionen von „SparrowDoor“ analysiert und dabei auch die Zuschreibungsbehauptungen bezüglich der Gruppe erörtert. Wie von Trend Micro erwähnt, steht FamousSparrow in Verbindung mit Earth Estries. Die genaue Art dieser Verbindung ist jedoch nicht vollständig bekannt. FamousSparrow wurde zudem öffentlich mit Salt Typhoon in Verbindung gebracht, doch da technische Indikatoren fehlen, verfolgen wir diese Gruppen getrennt voneinander.
Aufgrund unserer Untersuchungen schreiben wir die jüngste Kampagne und die „SparroWocky“-Backdoor mit hoher Sicherheit FamousSparrow zu, da bei einigen der ersten Angriffe mit dieser Backdoor „SparroWocky“ über die ausschließlich von FamousSparrow genutzte „SparrowDoor“ eingesetzt wurde. Darüber hinaus stimmt nicht nur die Opferauswahl mit den früheren Angriffszielen von FamousSparrow überein, sondern wir haben auch Versuche dokumentiert, SparroWocky bei vielen derselben Organisationen einzusetzen, die zuvor bereits mit SparrowDoor angegriffen worden waren.
Lateinamerika im Visier
Wie bereits erwähnt, scheint sich FamousSparrow derzeit auf hochkarätige Ziele in Lateinamerika zu konzentrieren. Dieser Trend setzte spätestens im Juli 2025 ein und hat sich mit der Einführung von SparroWocky fortgesetzt. Tatsächlich befanden sich von Mitte 2025 bis ins Jahr 2026 90 % der in unserer Telemetrie erfassten Ziele der Gruppe in dieser Region. Wie in Abbildung 1 dargestellt, wurde die neue Backdoor gegen staatliche Stellen in Argentinien, Ecuador, Guatemala, Honduras, Panama, Peru, Puerto Rico und Venezuela eingesetzt. Dies ist ein seltenes Phänomen unter den von uns derzeit verfolgten, mit China verbündeten APT-Gruppen, die in der Regel über einen so langen Zeitraum hinweg in verschiedenen Regionen der Welt aktiv sind.
Wir glauben, dass dieser Fokus kein Zufall ist und wahrscheinlich Chinas Reaktion auf verschiedene jüngste US-Initiativen in der Region widerspiegelt. Tatsächlich hat Donald Trumps zweite Amtszeit als Präsident zu einer aggressiven Bekräftigung der US-Interessen in Lateinamerika geführt, was verschiedene langfristige Investitionen bedroht, die China im letzten Jahrzehnt auf dem gesamten Kontinent in Bereichen wie Energie, Bergbau und Telekommunikation aufgebaut hat. Wir vermuten, dass die Aktivitäten von FamousSparrow darauf abzielen, China dabei zu unterstützen, die Reaktionen lokaler Regierungen auf den aktuellen Druck seitens der USA besser zu überwachen und vorherzusehen.
In einigen Fällen haben wir Anhaltspunkte beobachtet, die diese Hypothese eindeutig zu bestätigen scheinen. So ist beispielsweise eines der panamaischen Unternehmen, die wir als Ziel identifiziert haben, direkt in den laufenden Handelsstreit um zwei große Häfen im Kanalgebiet verwickelt, die bis vor kurzem von einem in China ansässigen Unternehmen betrieben wurden. Da die diesem Unternehmen erteilte Konzession Anfang 2025 von der panamaischen Regierung rechtlich angefochten wurde, scheint es sehr wahrscheinlich, dass die Operation von FamousSparrow darauf abzielte, frühzeitig privilegierte Einblicke in die Absichten der lokalen Behörden in dieser Angelegenheit zu gewinnen.
Es ist unklar, ob der offensichtliche Fokus der Gruppe auf Lateinamerika ein formelles, geografisches Mandat widerspiegelt oder ob dieser Fokus nur vorübergehend ist und durch die aktuellen geopolitischen Umstände bedingt wird.
Eine Untersuchung von SparroWocky
SparroWocky ist eine voll funktionsfähige, modulare C++-Backdoor, die unter Berücksichtigung von Modularität und Tarnung entwickelt wurde. Sie tauchte kurz nachdem FamousSparrow begann, sich auf Lateinamerika zu konzentrieren, auf und wurde schnell zum neuen Flaggschiff-Implantat der Gruppe, das SparrowDoor ablöste. Es ist anzumerken, dass SparroWocky keine Variante von SparrowDoor ist, sondern vielmehr eine eigenständige Malware-Familie darstellt. Der Übergang zu dieser neuen Backdoor ging auch mit einer stärkeren Integration von Open-Source-Tools in den Arbeitsablauf von FamousSparrow einher: Während zuvor eigenständige Versionen dieser Tools parallel zu SparrowDoor eingesetzt wurden, wurden bei SparroWocky einige davon direkt in die Malware integriert.
Zu den bemerkenswerten Funktionen von SparroWocky gehören die Fähigkeit, beliebige Dateien auszuführen, als TCP-Proxy zu fungieren und Befehle auszuführen. Die Backdoor sammelt zudem allgemeine Informationen über den kompromittierten Rechner, wie beispielsweise den Computernamen, den Benutzernamen, den Domänennamen, die Windows-Version und die IP-Adressen seiner Netzwerkschnittstellen. SparroWocky ist außerdem in der Lage, Dateien zu exfiltrieren und in regelmäßigen Abständen Screenshots zu erstellen. Die exfiltrierten Informationen werden mit RC4 verschlüsselt und über das TLS-Protokoll übertragen.
Je nach Konfiguration kann SparroWocky Persistenz herstellen, indem es entweder einen eigenen Dienst erstellt oder einen Eintrag im Run-Schlüssel der Registrierung anlegt.
Loader
SparroWocky wird mithilfe des gängigen Trident-Loader-Schemas bereitgestellt, das aus einer legitimen ausführbaren Datei, einer bösartigen DLL, die anstelle einer von dieser ausführbaren Datei benötigten DLL eingesetzt wird, und einer Datei mit einer verschlüsselten Nutzlast besteht (siehe Abbildung 2). Der Loader befindet sich in der oben genannten DLL und wird über DLL-Side-Loading ausgeführt. Wir haben beobachtet, dass FamousSparrow eine Vielzahl von Side-Loading-Zielen nutzt; in den meisten Fällen handelt es sich dabei um eine manipulierte Version der legitimen DLL, die die ausführbare Datei eigentlich laden soll. Während der Großteil der Datei unverändert bleibt, wird ein beliebiger Teil des .text-Abschnitts durch den Schadcode ersetzt, und der Header des Einstiegspunkts wird so geändert, dass er auf diesen gepatchten Bereich verweist.
Dies weist einige Eigenschaften zur Umgehung von Abwehrmechanismen auf: Da die Metadaten und die Liste der exportierten Funktionen der schädlichen DLL mit denen der legitimen Version übereinstimmen, kann sie sich leichter tarnen. Da der Code im gepatchten Bereich nicht mit den exportierten Funktionen und Aufrufen im unveränderten Teil übereinstimmt, können automatisierte Analyse-Tools Schwierigkeiten haben, Funktionsgrenzen zu erkennen.
Die Hauptaufgabe des Loaders besteht darin, seine Payload aus einer Datei zu extrahieren und zu entschlüsseln. Diese Dateien, die in der Regel denselben Namen wie die ausführbare Datei tragen, jedoch die Erweiterung .dat haben, weisen eine spezifische Struktur auf, die in Abbildung 3 detailliert dargestellt ist. Die Datei verfügt über einen benutzerdefinierten Header, der mit einem vier Byte langen Magic-Wert von 0x11328712 beginnt, gefolgt von der Größe der Konfigurationsdaten, der Größe der Nutzlast und einem 16 Byte langen RC4-Schlüssel. Dieser RC4-Schlüssel wird verwendet, um den Rest der Datei zu entschlüsseln, der die Konfiguration für SparroWocky (ausführlich im Abschnitt „Konfiguration“ beschrieben) und die Backdoor selbst enthält. In unserem GitHub-Repository stellen wir ein Skript zur Entschlüsselung der SparroWocky-Nutzlastdateien zur Verfügung.
Die Klartext-Backdoor-Nutzlast ist als Portable Executable (PE)-Datei formatiert, wobei die MZ- und PE -Magic-Werte entfernt wurden. Diese ausführbare Nutzlast wird direkt in den Speicher reflektiert, ohne auf die Festplatte geschrieben zu werden. Wir gehen daher davon aus, dass das Entfernen dieser Magic-Werte möglicherweise ein Versuch ist, In-Memory-Abwehrmechanismen zu umgehen, die einfache Mustererkennung nutzen, um verdächtige Speicherbereiche zu identifizieren oder auszulesen.
SparroWocky
Unsere Analyse von SparroWocky basiert hauptsächlich auf einem Sample, das laut seinem PE-Zeitstempel am 17. November 2025 kompiliert wurde (SHA-1: 44F0A22B143B79FA760BF31E14C8FFF714C8A2A1). Die Version dieser Backdoor scheint 1.8 zu sein, basierend auf den Informationen, die durch ihren in Tabelle 3 erläuterten „Fingerprint“-Befehl gesammelt wurden.
Wie bereits erwähnt, haben wir den Namen „SparroWocky“ gewählt, da wir in mehreren von uns gesammelten Samples die erste Strophe aus Lewis Carrolls „Jabberwocky“ gefunden haben. Wir gehen davon aus, dass diese Strophe aus den Testvektoren in RFC 7539 stammt, der den Verschlüsselungsalgorithmus ChaCha20-Poly1305 definiert. Die Proben von SparroWocky enthalten auch andere Zeichenfolgen, die in diesem RFC als Testvektoren verwendet werden. SparroWocky verwendet jedoch nicht ChaCha20-Poly1305. Wir kennen zwar die genaue Version von Mbed TLS, die in der Hintertür verwendet wird, nicht, doch die Testvektoren waren bereits vor Version 4.0.0 in dieser Bibliothek vorhanden.
Insbesondere stützt sich SparroWocky zumindest auf die folgenden öffentlichen Projekte:
- Mbed TLS, eine C-Bibliothek, die es zum Aufbau eines sicheren Kommunikationskanals mit seinem C&C-Server verwendet,
- MinHook, eine Windows-API-Hooking-Bibliothek, die dazu dient, die Startadresse neu erstellter Threads vor Sicherheitsprodukten zu verbergen, und
- COFF Loader (oder ein ähnliches Projekt), das es nutzt, um das dynamische Laden und Ausführen von In-Memory-Plugins in Form von COFF -Objekten zu ermöglichen.
Darüber hinaus ergab unsere Analyse, dass die Entwickler verschiedene Techniken implementiert haben, um Überwachungstools zu umgehen. Dazu gehört eine Variante einer Technik namens „SilentMoonwalk“ (oder „StackMoonwalk“), die es SparroWocky ermöglicht, die von MinHook-Routinen stammenden Aufrufstapel zu fälschen. Die Backdoor verwendet zudem einen benutzerdefinierten API-Hashing-Algorithmus, um Windows-API-Funktionen dynamisch aufzulösen. Diese werden im Abschnitt „Anti-Analyse-Techniken“ ausführlicher erläutert.
Konfiguration
Der SparroWocky-Loader extrahiert und entschlüsselt seine Konfiguration aus der .dat -Payload-Datei, die sich im selben Verzeichnis befindet, wie im Abschnitt „Loader“ erläutert. Der im Header der Payload gespeicherte RC4-Schlüssel wird zur Entschlüsselung der Konfiguration verwendet, die in Form einer durch Tabulatoren getrennten Zeichenkette vorliegt, die anschließend geparst und in einer Struktur gespeichert wird. Die Felder und ihre Werte sind in Tabelle 1 in der Reihenfolge ihres Auftretens beschrieben.
Tabelle 1. SparroWocky-Konfiguration
| Field | Value | Additional details |
| C&C IP address | 216.238.110[.]120 | |
| C&C port number | 443 | |
| Connection retry delay (in seconds) | 10 | After the first retry, the value is randomized. |
| Proxy connection type | 0 | 0: If enabled, use the proxy configured on the system; otherwise, connect directly. 1: HTTP proxy via Negotiate or Basic authentication. 2: SOCKS5 proxy via Basic authentication or without authentication. |
| Proxy IP address | N/A | |
| Proxy port number | N/A | |
| Proxy username | N/A | |
| Proxy password | N/A | |
| Persistence method | 1 | 1: Service persistence. 2: Registry persistence. |
| Service persistence: service name | ProcAuditManager | In the configurations we have extracted, the display name is always the same as the service name. These usually match the filename of the payload file. |
| Service persistence: display name | ProcAuditManager | |
| Service persistence: service description | Tracks process creation, |
|
| Registry persistence: registry value | SnapCart | |
| Registry persistence: registry key | SOFTWARE\Microsoft\Windo |
Uses HKLM or HKCU depending on privileges. |
Funktionen
Durch Argumente gesteuertes Verhalten
Nach dem Parsen ihrer Konfiguration überprüft die Backdoor die Befehlszeile des Prozesses, in dem sie ausgeführt wird, und verhält sich je nach Anzahl und Wert der übergebenen Argumente unterschiedlich. Sind keine Argumente vorhanden, richtet SparroWocky lediglich die Persistenz ein und führt die Kernlogik der Backdoor aus. Andernfalls weist der Wert des ersten Arguments die Malware an, bestimmte Anweisungen zu befolgen, wie in Tabelle 2 beschrieben.
Tabelle 2. SparroWocky-Befehlszeilenargumente und ihre Bedeutung
| Argument | Behavior | Description |
| c | Load and execute a PE file in memory for a specified amount of time before termination. | Used in tandem with command 0x16*, SparroWocky reads a command string, an execution timeout delay, and the body of a PE file from standard input (stdin). It then loads the specified executable into memory and executes it with the given command. |
| p | Sleep for five seconds, set up persistence, and run the core logic of the backdoor. | |
| s | Run the core logic of the backdoor without establishing persistence. | Used in tandem with command 0x2F*, this argument also means the backdoor was run as a specific user (via CreateProcessAsUser), identified by a session ID that was retrieved by command 0x2E*. |
| s2 | Start a new instance of the backdoor with argument p and terminate. | This argument indicates that the backdoor was started via the service persistence. |
| t | Set the process working directory to the backdoor location and run the core logic of the backdoor. |
* Erläutert im Abschnitt „Backdoor-Befehle “.
Wenn SparroWocky mit der Option „c“ ausgeführt wird, liest es eine zusätzliche, durch Kommas getrennte Liste von Parametern aus der Standardeingabe (stdin) ein:
- eine Befehlszeichenfolge,
- eine Zeitüberschreitungsverzögerung (in Sekunden) und
- optional den Hauptteil einer PE-Datei.
Fehlt dieser letzte Parameter, liest die Backdoor die in der Befehlszeichenfolge angegebene ausführbare Datei aus dem Verzeichnis „C:\Windows\System32\“ und lädt die zugehörige englische MUI-Datei (Multilingual User Interface) (aus „C:\Windows\System32\en-US\“). Dieser Vorgang wird im Abschnitt „Tarnung als Host-Prozess für dynamisch geladene PE-Dateien “ beschrieben. Andernfalls wird die PE-Datei vom reflektiven Loader von SparroWocky ausgeführt, und die Befehlszeichenfolge wird als Befehlszeile übergeben. Diese Funktionalität dient wahrscheinlich dazu, der Backdoor die einfache Ausführung von Systemdienstprogrammen zu ermöglichen.
SparroWocky lädt die angegebene ausführbare Datei in den Speicher und führt sie mit dem angegebenen Befehl aus. Gleichzeitig erstellt die Backdoor einen neuen Thread, der „ExitProcess“ aufruft, um den Prozess zu beenden, sobald die Zeitüberschreitung abgelaufen ist. Der Ladevorgang umfasst das Einrichten von Hooks und das Fälschen von Strukturen im Speicher, um den Host-Prozess zu tarnen, bevor die Ziel-Executable ausgeführt wird. Diese Anti-Analyse-Tricks werden im Abschnitt „Tarnen des Host-Prozesses für dynamisch geladene PEs“ ausführlicher erläutert.
Wird die Malware zudem ohne Argumente oder mit der Option „p“ ausgeführt, wird ein Mechanismus zur Instanzsynchronisation gestartet. Diese Funktion verhindert die gleichzeitige Ausführung mehrerer Instanzen der Backdoor, indem sie einen benutzerdefinierten Mechanismus zur Interprozesskommunikation (IPC) nutzt. Wenn eine neue Instanz gestartet wird, wird die aktuell laufende Instanz angehalten, und falls die neue Instanz von einem anderen Speicherort als die aktuelle gestartet wird, werden die von der aktuell laufenden Instanz festgelegten Dateien und Persistenzkonfigurationen gelöscht. Dies wird durch die Verwendung von drei Arten globaler Objekte erreicht: einem Mutex, einem Ereignis und einem gemeinsam genutzten Speicherblock mit den Namen „MyMutexName“, „MyEventName“ bzw. „MySharedMemName“.
Backdoor-Befehle
Die Backdoor stellt zunächst eine Verbindung zu ihrem C&C-Server her und führt anschließend ihre Kernlogik in einer Endlosschleife aus, in der sie empfangene Befehle verarbeitet. Diese werden von einer benutzerdefinierten Klasse namens „WinHandler“ (abgeleitet von der benutzerdefinierten Klasse „ServerHandler“ ) entsprechend den in der Malware vorhandenen Laufzeit-Typinformationen (RTTI) verarbeitet. Handler für einen minimalen Befehlssatz sind fest in der Befehlsschleife selbst hinterlegt. „ServerHandler“ verfügt über eine eigene virtuelle Methode zur Verarbeitung weiterer Befehle. Diese Methode ist in „WinHandler“ implementiert. Obwohl wir keine weiteren Implementierungen dieser Methode beobachtet haben, würde diese Architektur es den Entwicklern leicht machen, den Satz der Befehle zu ändern, die die Backdoor verarbeiten kann. Die Liste der unterstützten Befehle ist in Tabelle 3 aufgeführt.
Tabelle 3. SparroWocky-Befehle
| ID | Arguments | Description |
| 0x10 | N/A | Collects and sends the following system information: · MD5 hash of the machine GUID, · SparroWocky PID, · hostname, · IP addresses of all network interfaces, · username, · Windows product name, · backdoor version (1.8), · x64 (likely backdoor architecture), · domain name, · SparroWocky’s host file path, · connection retry delay, and · self-deletion enable state (0 or 1). |
| 0x11* | N/A | Starts a new interactive session. Establishes a new connection to the C&C server, sends an initial packet containing the byte sequence 44 33 22 11 (hex), and then starts processing received commands in a separate thread. |
| 0x12 | N/A | Terminates by calling ExitProcess. |
| 0x13 | N/A | Removes persistence then terminates by calling ExitProcess. |
| 0x14 | <function_name> <BOF_object> <function_arguments> |
Loads a Beacon Object File in memory and calls <function_name> with <function_arguments> as parameters, then sends the completion status. See below for additional details. |
| 0x16 | <command_line> <execution_timeout> <PE_file> |
Executes the provided PE file by spawning a new SparroWocky process with the c parameter and standard I/O and error streams redirected to the pipe \\.\pipe\ccpipe. The arguments are written to the new process’s stdin, then the output of the new process is read and sent to the C&C server. |
| 0x17 | <command> | Executes <command> by spawning cmd.exe with standard I/O and error streams redirected to two dedicated anonymous pipes. |
| 0x1A* | <IP_address> <port> |
Connects to the provided IP address (via TCP/IP) and creates a thread to forward the traffic between the remote machine and the C&C server. The completion status is sent to the C&C server. |
| 0x1B | String of semicolon-separated values starting with two unknown values followed by the IP address and port number on which to listen | Internally named PortmapReverseServer, it accepts TCP connections and forwards traffic to the C&C server. For each accepted connection, a new connection to the C&C server is established and a first packet is sent containing the byte sequence 13 12 11 09 (hex). The listener code then sends the machine GUID followed by the received arguments and the list of connections opened so far. The code proceeds to handle the forwarding of the traffic between the distant machine and the C&C server. |
| 0x1C | Same as 0x1B | Closes the PortmapReverseServer connection specified by the provided IP address and port. The list of remaining open connections is sent to the C&C server. |
| 0x1D | N/A | Returns a list of all PortmapReverseServer connections to the C&C server. |
| 0x1E | Path to the new working directory | Sets the specified current working directory and returns the CWD to the C&C server. |
| 0x1F | N/A | Returns the current working directory to the C&C server. |
| 0x20 | Path to the target directory | Creates the specified directory, sending the completion status to the C&C server. |
| 0x21 | N/A | Returns the list of logical drives and their type to the C&C server. |
| 0x22 | Path to the target directory | Returns a list of the contents of the specified directory, their sizes and last-write times, collected via FindFirstFileW. |
| 0x23 | Path of the file to delete | Deletes the specified file and returns the completion status. |
| 0x24 | Source and destination paths | Copies the specified file to the specified location and returns the completion status. |
| 0x25 | Source and destination paths | Moves the specified file to the specified location and returns the completion status. |
| 0x26 | Path of the file to rename and the desired new name | Renames the specified file to the specified new name and returns the completion status. |
| 0x27* | File offset and target file path | Sends the file size, creation, last access, and last write timestamps, and the contents of the specified file, read from the specified offset in chunks of 4,096 bytes. |
| 0x28* | Target file path to write to | Sends the current size of the specified file then receives the additional file contents in 4,096-byte chunks, appending them to the target file in a loop. |
| 0x29 | N/A | Enumerates display devices and associated settings, returning for each active display device: · device name, · whether it is the main display, · width (pixels), and · height (pixels). |
| 0x2A | Display device name | Takes a screenshot periodically by sending an initial JPG screenshot with its dimensions (width and height) via command ID 0x2C. Every 500 ms, if no new commands are received, a new screenshot is taken, and the difference from the previous screenshot is sent to the C&C server. Changed blocks of pixels in these subsequent screenshots are sent along with coordinates (x, y) and dimensions via command ID 0x2D. |
| 0x2E | N/A | Returns session IDs and usernames of enumerated remote sessions on the system, collected via WTSEnumerateSessionsW. |
| 0x2F | Session ID of the target user session (retrieved via command 0x2E) | Spawns a new instance of SparroWocky (with option s) by duplicating the token associated with the specified session ID and calling CreateProcessAsUserW. |
| 0x30 0x31 |
N/A | Echoes the command ID back to the C&C server. |
| 0x33 | <command> | Executes <command> in the current directory by calling CreateProcess with lpCommandLine set to <command> and lpCurrentDirectory set to the CWD. The PID of the newly created process is returned to the C&C server. |
* Fest programmierter Befehl.
Der Befehl 0x14 verwendet eine leicht modifizierte Version von RunCOFF aus dem Open-Source-Projekt „COFF Loader“, um eine Beacon Object File (BOF) zu laden und auszuführen. Eine BOF ist eine positionsunabhängige ausführbare Datei im Common Object File Format (COFF), die dafür vorgesehen ist, im Speicher eines Implantats ausgeführt zu werden. BOFs wurden erstmals in Cobalt Strike eingeführt und werden seitdem von anderen beliebten Red-Teaming-Frameworks wie Brute Ratel, Metasploit und Sliver verwendet. Die Änderung an RunCOFF betrifft die Auflösung importierter Symbole. SparroWocky leitet Aufrufe an externe Bibliotheken in der BOF an eine Stack-Spoofing-Subroutine um. Dadurch werden die vom BOF-Objekt ausgeführten Aufrufe effektiv verborgen und umgeleitet. Sobald das Objekt geladen ist, findet der BOF-Loader die Funktion „function_name“ und führt sie aus, wobei er die in „function_arguments“ angegebenen Argumente übergibt. Die Möglichkeit, BOFs zu laden, ermöglicht es FamousSparrow, vorhandene Module und Tools zu nutzen, die für die Arbeit mit diesem Dateityp entwickelt wurden.
Selbstlöschung
Wie im Abschnitt „Argumentgesteuertes Verhalten“ beschrieben, kann sich SparroWocky vollständig aus dem System löschen. Dies kann vom C&C-Server aus über den Befehl 0x13 erfolgen. Zunächst wird der zuvor eingerichtete Persistenzmechanismus entfernt, anschließend wird die in Abbildung 4 gezeigte Batch-Datei erstellt und ausgeführt.
@echo off
timeout /t 2
del "<legitimate_executable>" /f /q
del "<loader_library>" /f /q
del "<payload_filepath>" /f /q
del "%%0" /f /q\n
Abbildung 4. Batch-Datei zur Selbstlöschung
Dadurch werden die von der Backdoor verwendeten Dateien gelöscht: die legitime ausführbare Datei, die Side-Loading-Bibliothek und die Payload-Datei. Die Batch-Datei löscht sich am Ende des Skripts selbst.
>Techniken zur Umgehung der Analyse
SparroWocky nutzt verschiedene Techniken, um die Analyse zu erschweren und installierte Sicherheitssoftware zu umgehen. Eine gängige Technik, die die Backdoor einsetzt, ist die dynamische API-Auflösung mittels API-Hashing, doch die Backdoor nutzt auch interessantere Methoden, die im Folgenden beschrieben werden.
SilentMoonwalk
Die erste nennenswerte Technik heißt „SilentMoonwalk“ und bietet im Wesentlichen eine Möglichkeit, gefälschte Aufrufstapel zu erzeugen. Ihr Zweck besteht darin, Analysewerkzeuge und -produkte daran zu hindern, den tatsächlichen Aufrufer bestimmter Funktionen zu ermitteln, die häufig überwacht werden, wie beispielsweise Windows-API-Funktionen. Diese Methode erfordert einige Initialisierungsschritte:
- Ermittlung des Offsets von „RtlUserThreadStart“ und „BaseThreadInitThunk“, zwei Funktionen, die sich in der Regel am Anfang (oder am Ende) eines jeden Aufrufstapels befinden.
- Das Auffinden eines JOP- (Jump-Oriented Programming) und eines ROP- (Return-Oriented Programming) Gadgets in der legitimen Bibliothek „kernel32.dll“, um den ursprünglichen Aufrufstapel wiederherzustellen.
Sind diese Voraussetzungen erfüllt, speichert SparroWocky, wenn es einen verschleierten Aufruf einer Windows-API-Funktion ausführt, zunächst den aktuellen Kontext (Register); anschließend fälscht es mithilfe der zuvor gefundenen Gadgets einen gefälschten Stack und fügt dann die Adresse einer Routine zur Wiederherstellung des Stacks und des Kontexts ein. Dadurch sieht es so aus, als ob die Aufrufe der Windows-API-Funktionen von „RtlUserThreadStart“ und „BaseThreadInitThunk“ stammen würden. Abbildung 5 zeigt die Aufrufstapelansicht aus einer Debugging-Sitzung mit WinDbg.
Im Fall von SparroWocky wird diese Technik verwendet, um Aufrufe zu verschleiern, die von BOF-formatierten Plugins (Befehl 0x14) oder von der statisch verknüpften Hooking-Bibliothek „MinHook“ getätigt werden.
Verbergen der Thread-Startadresse
SparroWocky nutzt die MinHook-Bibliothek, um die Funktion `CreateThread` zu hooken und so den ursprünglichen Parameter `lpStartAddress` vor Sicherheitsprodukten zu verbergen. Im Wesentlichen hätte jeder von SparroWocky erstellte Thread `AnimateWindow` als Startadresse, was von einem Sicherheitsprodukt wahrscheinlich als legitim angesehen würde. Der auf „AnimateWindow“ angewendete Patch verwandelt es in ein Trampolin, das lediglich die ursprüngliche Startadresse ausführt, wie in Abbildung 6 dargestellt.
Tarnung durch den Host-Prozess für dynamisch geladene PE-Dateien
Der letzte bemerkenswerte Codeabschnitt von SparroWocky ist sein benutzerdefinierter PE-Loader, der bei Ausführung mit der Option c zum Einsatz kommt. Während die Implementierung von PE-Loadern für Malware-Autoren zwar fast schon Routine ist, gingen die Autoren von SparroWocky noch einen Schritt weiter und integrierten eine Tarnung durch den Host-Prozess.
Wie in Tabelle 2 beschrieben, lädt SparroWocky bei Ausführung mit der Option „c“ eine PE-Datei in den Speicher und führt sie aus. Wird die Datei nicht als Argument übergeben, analysiert der PE-Loader die angegebene Befehlszeile, um den Dateinamen zu extrahieren. Er sucht im Verzeichnis „C:\Windows\System32\“ nach diesem Dateinamen, ruft aber vor allem die englische Lokalisierungs-MUI-Datei ab, die der Ziel-PE-Datei zugeordnet ist (gespeichert unter „C:\Windows\System32\en-US\<exe_name>.mui“). In diesem Fall wird die PE-Datei in den Arbeitsspeicher geladen, und es werden einige Hooks gesetzt, um sicherzustellen, dass alle Aufrufe der geladenen PE-Datei zum Abrufen von Ressourcendaten – wie beispielsweise RtlLoadString oder RtlFindMessage – auf die .mui-Daten umgeleitet werden. Dieser Vorgang entspricht dem normalen Verhalten von Windows beim Laden von PE-Dateien und verringert das Risiko unerwarteter Fehler.
Die aus Stdin abgerufene Befehlszeile wird analysiert, und SparroWocky fügt Hooks in die folgenden Funktionen ein, die zum Abrufen von Informationen über Befehlszeilenargumente verwendet werden, damit diese auf diese Befehlszeile verweisen:
- GetCommandline[AW]
- __{w}getmainargs
- __p___argc
- __p___{w}argv
Der PE-Loader ist zudem in der Lage, die Ausnahmebehandler der neu geladenen ausführbaren Datei zu registrieren – eine ungewöhnliche, aber entscheidende Ergänzung –, da dadurch Ausnahmen korrekt behandelt werden können.
Schließlich fälscht SparroWocky vor dem Aufruf des Einstiegspunkts der geladenen PE-Datei eine gefälschte LDR_DATA_TABLE_ENTRY-Struktur und fügt sie in die doppelt verkettete Liste der PEB_LDR_DATA-Struktur ein. Diese doppelt verkettete Liste wird von Windows verwendet, um geladene Module zu verfolgen, und wird in der Regel von Sicherheitsprodukten überwacht. Abbildung 7 zeigt einen Ausschnitt aus dem Code, der zum Setzen einiger ihrer Felder verwendet wird.
Diese letzte Technik zeigt, dass die Autoren von SparroWocky über ein tiefgreifendes Verständnis des Windows-PE-Lademechanismus verfügen und bereit sind, keine Mühen zu scheuen, um den Host-Prozess zu tarnen und Überwachungssoftware zu verwirren.
Netzwerkprotokoll
Zur Kommunikation mit seinem C&C-Server nutzt SparroWocky das TLS-Verschlüsselungsprotokoll. Im Hintergrund verwendet die Backdoor die Mbed-TLS-Bibliothek; erwähnenswert ist lediglich, dass sie bei der Initialisierung des deterministischen Zufallsbitgenerators die Personalisierungszeichenfolge „acdbenus“ verwendet, wie in Abbildung 8 zu sehen ist.
Vor dem ersten TLS-Handshake wird eine TCP-Verbindung zum C&C-Server unter Verwendung eines von drei Verbindungsmodi hergestellt:
Ein Verbindungsmodus von 0 bedeutet, dass SparroWocky den aktuell auf dem Rechner konfigurierten Proxy verwendet oder eine direkte TCP-Verbindung herstellt, falls kein Systemproxy konfiguriert ist. Diese Konfiguration wird durch Abfrage des Registrierungswerts „ProxyServer“ unter dem Registrierungsschlüssel „HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings“ ermittelt. Wenn die Verbindung zum Proxy-Server nicht erfolgreich ist, versucht SparroWocky, eine Verbindung zunächst im Modus 1 und anschließend im Modus 2 herzustellen.
Verbindungsmodus 1 steht für eine Verbindung über einen HTTP-Proxy. Diese Verbindung nutzt entweder das „Negotiate“- (Kerberos oder NTLM) oder das „Basic“-Authentifizierungsverfahren mit dem in der Konfiguration angegebenen Benutzernamen und Passwort. Beide Authentifizierungsmethoden verwenden generische HTTP-Header, wobei die User-Agent-Zeichenkette auf „Mozilla/5.0“ gesetzt ist.
Verbindungsmodus 2 nutzt einen SOCKS5-Proxy ohne Authentifizierung (AUTH-Feld auf 0x00 gesetzt) oder mit Benutzername und Passwort (AUTH-Feld auf 0x02 gesetzt). Die für Letzteres verwendeten Werte werden in der Konfiguration angegeben.
Befehlsmeldungen
Sobald der TLS-Handshake abgeschlossen ist, sendet SparroWocky die Bytes 0x11223344 (Big-Endian), um anzuzeigen, dass es bereit ist, Befehle in der Hauptsitzung zu empfangen. Die Backdoor verwendet ein einfaches Format zum Empfangen von Befehlen und zum Senden von Ergebnissen, wie in Abbildung 9 dargestellt.
Ist der Wert des Feldes „command_arg_size“ ungleich 0, müssen nach dem Header zusätzliche Daten empfangen oder gesendet werden. In diesem Fall werden die Daten (Befehlsargumente oder Ergebnisse) mit RC4 verschlüsselt, wobei jede Befehlsnachricht einen neu generierten 8-Byte-Schlüssel verwendet, der im Header gesendet wird.
Netzwerkinfrastruktur
SparroWocky nutzt die IP-Adresse seiner C&C-Server, die in der Regel auf Port 443 laufen, um eine direkte Verbindung herzustellen. In einigen Fällen haben wir auch beobachtet, dass der Port 8080 verwendet wird. Zwar haben wir festgestellt, dass einige selbstsignierte Zertifikate auf mehreren Servern wiederverwendet werden, doch verfügen wir nicht über einen zuverlässigen generischen Fingerabdruck.
Fazit
In der zweiten Hälfte des Jahres 2025 und der ersten Hälfte des Jahres 2026 hatte sich FamousSparrow auf Ziele in Lateinamerika konzentriert. Dies stellt eine Abkehr von der bisherigen globalen Zielausrichtung dar. Im Zuge dieser Veränderung hat die Gruppe SparroWocky entwickelt, das SparrowDoor als Hauptimplantat abgelöst hat. Auch wenn es offenbar nicht auf derselben Codebasis basiert, lässt sich feststellen, dass SparroWocky dennoch einige der Funktionen und Konzepte aufweist, die bereits in der früheren Backdoor der Gruppe vorhanden waren, die wir in unserem vorherigen Blogbeitrag analysiert haben. SparroWocky nutzt komplexere Techniken zur Umgehung von Abwehrmaßnahmen, um unentdeckt zu bleiben.
FamousSparrow nutzt nach wie vor Open-Source-Tools für offensive Zwecke zu ihren eigenen böswilligen Zwecken. Bislang wurden diese Tools hauptsächlich parallel zur Backdoor der Gruppe eingesetzt. Bei SparroWocky lässt sich beobachten, dass die Gruppe über die Entwicklungsfähigkeiten verfügt, Open-Source-Code direkt in ihre eigene maßgeschneiderte Backdoor zu integrieren.
IoCs
Eine umfassende Liste von Indikatoren für Kompromittierung (IoCs) sowie Beispielen finden Sie in unserem GitHub-Repository.
Dateien
| SHA-1 | Filename | Detection | Description |
| 3209689E509205CCDB7E |
winfsp-x64.dll | Win64/Agent.HUP | SparroWocky loader. |
| 52C6646759CF6037BB17 |
winfsp-x64.dll | Win64/Agent.HUP | SparroWocky loader. |
| 99E7070B5AF24A0FE1E6 |
DukeQt.dll | Win64/Agent.ISF | SparroWocky loader. |
| 44F0A22B143B79FA760B |
N/A (in-memory) | Win64/Agent.ASW | SparroWocky backdoor. |
| 9AA9FF61BC63CCAB907 |
N/A (in-memory) | Win64/Agent.ASW | SparroWocky backdoor. |
Netzwerk
| IP | Domain | Hosting provider | First seen | Details |
| 38.54.57[.]17 | N/A | LightNode‑BR | 2026‑02‑25 | SparroWocky C&C server. |
| 38.60.197[.]55 | N/A | Kaopu Cloud HK Limited | 2026‑03‑16 | SparroWocky C&C server. |
| 38.60.209[.]106 | N/A | Kaopu Cloud HK Limited | 2026‑02‑26 | SparroWocky C&C server. |
| 38.60.224[.]51 | N/A | Kaopu Cloud HK Limited | 2026‑02‑25 | SparroWocky C&C server. |
| 38.60.224[.]235 | N/A | Kaopu Cloud HK Limited | 2026‑02‑24 | SparroWocky C&C server. |
| 38.60.241[.]65 | N/A | Cogent Communications | 2026‑03‑10 | SparroWocky C&C server. |
| 38.60.241[.]127 | N/A | Cogent Communications | 2026‑03‑04 | SparroWocky C&C server. |
| 38.60.241[.]193 | N/A | KaopuCloud‑BR | 2026‑01‑22 | SparroWocky C&C server. |
| 77.111.101[.]40 | N/A | Latitude.sh | 2026‑05‑20 | SparroWocky C&C server. |
| 91.148.134[.]115 | N/A | Charles‑R Paquet | 2026‑06‑17 | SparroWocky C&C server. |
| 130.94.101[.]82 | N/A | NTT America, Inc. | 2026‑02‑26 | SparroWocky C&C server. |
| 140.99.164[.]199 | N/A | Private Customer | 2026‑02‑26 | SparroWocky C&C server. |
| 149.104.87[.]228 | N/A | Lightnode‑MX | 2026‑02‑24 | SparroWocky C&C server. |
| 149.104.90[.]203 | N/A | BEDGE CO LIMITED | 2026‑01‑22 | SparroWocky C&C server. |
| 216.238.92[.]2 | N/A | The Constant Company, LLC | 2026‑02‑25 | SparroWocky C&C server. |
| 216.238.105[.]53 | N/A | The Constant Company, LLC | 2026‑01‑22 | SparroWocky C&C server. |
| 216.238.110[.]120 | N/A | The Constant Company, LLC | 2025‑12‑11 | SparroWocky C&C server. |
| 216.238.121[.]164 | N/A | The Constant Company, LLC | 2026‑03‑16 | SparroWocky C&C server. |
MITRE ATT&CK-Techniken
Diese Tabelle wurde unter Verwendung der Version 19 des MITRE ATT&CK-Frameworks erstellt.
| Tactic | ID | Name | Description |
| Resource Development | T1583.003 | Acquire Infrastructure: Virtual Private Server | FamousSparrow has acquired servers to use for C&C and delivery servers for SparroWocky. |
| T1587.001 | Develop Capabilities: Malware | FamousSparrow has developed SparroWocky and its loader. | |
| T1608.001 | Stage Capabilities: Upload Malware | FamousSparrow has uploaded the SparroWocky trident loader to attacker-controlled delivery servers. | |
| Initial Access | T1190 | Exploit Public-Facing Application | FamousSparrow gained access to targets’ networks by exploiting publicly reachable Exchange servers. |
| Execution | T1059.003 | Command and Scripting Interpreter: Windows Command Shell | SparroWocky has functionality to run commands via the Windows command shell. |
| T1569.002 | System Services: Service Execution | When establishing persistence via a service, SparroWocky starts the service directly. | |
| T1106 | Native API | SparroWocky uses the native Windows API. | |
| T1559 | Inter-Process Communication | SparroWocky uses an interprocess communication mechanism to synchronize instances when a new one is launched. | |
| T1574.001 | Hijack Execution Flow: DLL | The SparroWocky loader is executed via DLL side-loading. | |
| Persistence | T1547.001 | Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder | SparroWocky can persist via a registry Run key. |
| T1543.003 | Create or Modify System Process: Windows Service | SparroWocky can persist via a Windows service. | |
| Stealth | T1134.002 | Access Token Manipulation: Create Process with Token | SparroWocky can create processes using a token obtained from any existing user session. |
| T1140 | Deobfuscate/Decode Files or Information | SparroWocky’s loader retrieves the configuration and payload via RC4 decryption of the content of a file with a custom format. | |
| T1480.002 | Execution Guardrails: Mutual Exclusion | SparroWocky uses a mutex to prevent multiple instances from running concurrently. | |
| T1564.010 | Hide Artifacts: Process Argument Spoofing | When loading an external PE file, SparroWocky hooks functions to retrieve its command line arguments from stdin. | |
| T1027.007 | Obfuscated Files or Information: Dynamic API Resolution | SparroWocky uses a custom API hashing algorithm to dynamically resolve API functions at runtime. | |
| T1620 | Reflective Code Loading | The SparroWocky reflectively loads its payload into memory. SparroWocky can reflectively load and execute PE and BOF objects. | |
| T1070.004 | Indicator Removal: File Deletion | SparroWocky can delete itself from the compromised machine. | |
| T1070.009 | Indicator Removal: Clear Persistence | SparroWocky can remove its persistence mechanism from the compromised machine. | |
| T1036.001 | Masquerading: Invalid Code Signature | The SparroWocky loader keeps the now invalid signature of the legitimate module it is impersonating. | |
| T1036.004 | Masquerading: Masquerade Task or Service | SparroWocky uses legitimate or generic names and descriptions for its persistence service. | |
| Discovery | T1083 | File and Directory Discovery | SparroWocky can list files and directories on mapped drives. |
| T1680 | Local Storage Discovery | SparroWocky can retrieve information about mapped storage devices. | |
| T1082 | System Information Discovery | SparroWocky can collect information about the system it is running on, such as the Windows version, hostname, and the IP addresses of network interfaces. | |
| T1033 | System Owner/User Discovery | SparroWocky can retrieve the username of the current user and of any user with an active session. | |
| T1120 | Peripheral Device Discovery | SparroWocky can retrieve information about connected display devices. | |
| Collection | T1005 | Data from Local System | SparroWocky can exfiltrate files from mapped storage. |
| T1113 | Screen Capture | SparroWocky can periodically capture screenshots. | |
| Command and Control | T1573.002 | Encrypted Channel: Asymmetric Cryptography | SparroWocky uses TLS, which uses asymmetric cryptography in its handshake. |
| T1573.001 | Encrypted Channel: Symmetric Cryptography | SparroWocky uses RC4 to encrypt the information it exfiltrates. | |
| T1090.001 | Proxy: Internal Proxy | SparroWocky can proxy connections between the C&C server and another remote machine. | |
| T1090.002 | Proxy: External Proxy | SparroWocky can use an HTTP or SOCKS5 proxy to connect to its C&C server. | |
| T1095 | Non-Application Layer Protocol | SparroWocky uses TLS over TCP to communicate with its C&C server. | |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | SparroWocky exfiltrates data through the same connection used to receive commands from the C&C server. |




