Dissecando a operação do malware como serviço CastelBot

três monitores digitais em uma mesa exibindo uma mensagem de erro crítico em vermelho

Autora

Golo Mühr

Malware Reverse Engineer

IBM

O IBM X-Force tem investigado um novo framework de malware chamado CastleBot. Acredita-se que o malware faça parte de uma operação de malware como serviço (MaaS) e tenha sido projetado especificamente para implementação flexível de malware. Atualmente, o CastleBot é usado por cibercriminosos para entregar de tudo, desde infostealers até backdoors como NetSupport e WarmCookie, que foram vinculados a ataques de ransomware.

O que torna o CastleBot particularmente preocupante é a forma como ele está sendo distribuído: geralmente por meio de instaladores de software trojanizados baixados de sites falsos, atraindo usuários desavisados para o lançamento da infecção. Essa técnica faz parte de uma tendência crescente que o X-Force está observando. Muitas vezes, é ativado por meio de envenenamento por SEO, o que faz com que páginas maliciosas tenham uma classificação mais alta nos mecanismos de pesquisa do que distribuidores de software legítimos. Uma vez dentro, o CastleBot passa por um processo de três estágios: um stager/downloader, um carregador e um backdoor central, que solicita um conjunto de tarefas do seu servidor de comando e controle (C2). As informações coletadas da máquina infectada permitem que os operadores filtrem facilmente as vítimas, gerenciem infecções em andamento e implementem malware em alvos de alto valor com precisão.

O CastleBot ainda está evoluindo, e nossa pesquisa mostra que provavelmente está apenas começando. Neste relatório, detalhamos como funciona, como se espalha e por que é importante.

Principais descobertas:

  • O CastleBot é um novo malware, provavelmente operado como um malware como serviço, que pode ser usado para enviar uma ampla gama de cargas maliciosas
  • As cargas subsequentes variam de infostealers a backdoors vinculados a ataques de ransomware, como NetSupport e WarmCookie
  • O X-Force observou que instaladores de software trojanizados são o vetor de infecção mais comum para a entrega do CastleBot.
  • O framework CastleBot abrange três componentes: um stager, um carregador e um núcleo, e parece estar em desenvolvimento ativo
  • O malware parece permitir que os operadores filtrem facilmente as vítimas, atualizem cargas e gerenciem várias campanhas ao longo de seu ciclo de vida

Visão geral

O CastleBot apareceu pela primeira vez no início de 2025. O X-Force observou um aumento no volume de amostras e diferentes cargas a partir de maio e, desde então, observou a implementação de várias cargas de backdoor e infostealer. O vetor de infecção mais comum do CastleBot é o software trojanizado, que faz parte de uma tendência que o X-Force continua observando desde 2024. Pacotes e instaladores de software trojanizados são frequentemente distribuídos por meio de sites falsos usando envenenamento por SEO para atrair vítimas. O CastleBot também foi distribuído através dos repositórios do GitHub, se passando por software legítimo e por meio da popular técnica ClickFix.

O X-Force identificou três componentes como parte da estrutura de malware do CastleBot: um stager, um carregador e o núcleo/backdoor do CastleBot.

Um fluxograma demonstrando a cadeia de infecção do CastleBot
Fig. 1: cadeia de infecção do CastleBot

Observe que relatórios públicos anteriores da Prodraft referem-se ao mesmo framework de malware como o “CastleLoader”.

Stager do CastleBot

Na maioria dos casos, o componente central do CastleBot é implementado por meio de um stager do shellcode, que faz parte da mesma família de malware CastleBot. O stager é uma carga do shellcode leve que pode ser injetada por qualquer outro carregador de primeiro estágio. O X-Force observou vários sistemas de criptografia usados com a CastleBot, incluindo o Dave, um sistema de criptografia baseado em AutoIt e sistemas de criptografia simples compilados em C.

O malware utiliza o algoritmo de hashing DJB2 para resolver as APIs necessárias no tempo de execução. Antes de cada chamada de API, ele carrega a DLL correspondente e atravessa a Export Address Table (EAT) procurando a função de API por meio de hashes DJB2 pré-gerados. Caso a exportação seja encaminhada para outra DLL, o stager analisa o nome da DLL, carrega-a e resolve a função via GetProcAddress.

Após a execução, o stager baixa duas cargas via HTTP com o agente do usuário "Googlebot". Os caminhos de URL são semelhantes entre as amostras e endereça o mesmo servidor C2 que o componente central da CastleBot.

Exemplo de URLs de download:

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

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

Captura de tela do stager descompilado do CastleBot
Fig. 2: captura de tela do stager descompilado do CastleBot

Ambas as cargas são descriptografadas por meio de uma string XOR codificada, neste caso "GySDoSGySDoS" (codificado em UTF-16), revelando um PE (núcleo do CastleBot) e um stub de shellcode (carregador do CastleBot).

Em seguida, o stager usa o VirtualProtect para permitir a execução no heap para a região de memória que armazena a segunda carga do shellcode descriptografado. Este último, atuando como um carregador, é executado diretamente na memória e recebe um ponteiro para o PE descriptografado como argumento.

CastleBot Loader

O carregador do CastleBot é um carregador de PE com todos os recursos, que começa mapeando cada seção do PE fornecido em uma nova região de memória alocada usando NtAllocateVirtualMemory. Ele passa a corrigir quaisquer realocações necessárias, resolver importações, definir as opções apropriadas de proteção de memória e executar as funções de retorno de chamada TLS existentes.

Notavelmente, o carregador também configura uma nova estrutura LDR_DATA_TABLE_ENTRY e os LDR_DDAG_NODE correspondentes (estendidos no Windows 8 e posteriores), que são então adicionados às listas duplamente vinculadas PEB_LDR_DATA contendo os módulos carregados para cada processo. Para os agentes de EDR que monitoram o PEB, isso faria com que a carga injetada parecesse mais carregada pelo sistema operacional.

CastleBot Loader configurando estruturas LDR_DATA_TABLE_ENTRY e LDR_DDAG_NODE e inserindo em listas de módulos PEB_LDR_DATA
Fig. 3: CastleBot Loader configurando estruturas LDR_DATA_TABLE_ENTRY e LDR_DDAG_NODE e inserindo em listas de módulos PEB_LDR_DATA

A menos que o arquivo injetado seja uma DLL, o campo ImageBaseAddress do PEB também é definido para o endereço base da carga injetada.

Por fim, para executar a carga, o carregador do CastleBot executa o ponto de entrada ou aloca um novo console para aplicações de console.

código representando a função principal do CastleBot Loader
Fig. 4: função principal do CastleBot Loader

Na amostra analisada acima, a carga injetada é o backdoor x86 CastleBot (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04).

Núcleo do CastleBot

O núcleo do CastleBot usa o mesmo mecanismo de resolução de API que os componentes do stager e do carregador, exceto pelo algoritmo de hash, que é o AP hash, desenvolvido por Arash Partow.

Primeiro, o backdoor começa descriptografando sua configuração. Quase todas as strings em todo o binário, incluindo aquelas que fazem parte da configuração, são armazenadas como UTF-16 e descriptografadas em linha por meio de uma chave XOR exclusiva de 4 bytes para cada string. Durante a descriptografia, a seguinte estrutura de configuração é criada:

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;
};

O malware tenta criar um mutex, usando o nome da configuração, para garantir que apenas uma única instância esteja em execução. Na próxima etapa, ele envia uma solicitação HTTP GET à URL permanente para recuperar suas configurações, usando a ID da campanha no caminho da URL:

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

Em resposta, o CastleBot recebe um bloco de dados criptografados.

Comunicação C2

Toda a comunicação C2 é criptografada por meio do algoritmo ChaCha simétrico, exceto a solicitação GET inicial do malware. Após a descriptografia, o protocolo C2 utiliza uma estrutura de dados serializada personalizada, internamente chamada de contêiner, que pode armazenar valores de diferentes tipos.

Contêineres serializados

Na raiz da estrutura de dados serializados há sempre um campo do tipo ContainerFieldArray. As estruturas abaixo definem ainda mais como os tipos array e bool são configurados:

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;
}

Ao analisar o contêiner descriptografado definindo as configurações solicitadas pela backdoor, os dados começam com o byte 0x0D, indicando o tipo ContainerFieldArray. Esse byte é seguido do nome do campo, que por si só tem o comprimento de 2 bytes seguido do nome codificado em UTF-16. Após o nome, um campo de matriz define um comprimento de 4 bytes de dados, seguido pelos próprios dados, que novamente começa com o primeiro byte definindo o tipo.

Contêiner de configurações do CastleBot

As configurações recebidas pela amostra analisada acima são analisadas da seguinte maneira.

Dados serializados:

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..|

Objeto desserializado:

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

Para cada configuração habilitada, as seguintes ações são executadas pelo CastleBot:

run_as_admin: o malware executará seu pai via "cmd.exe /c <parent_process>" via ShellExecuteW com o verbo "runas" para iniciá-lo como Administrador.

anti_vm: o CastleBot usará a instrução cpuid com a folha 0x40000000 para tentar detectar ambientes de hipervisor. Se o VMware ou o Parallels forem descobertos, o malware será encerrado.

prevent_restart: o CastleBot criará um novo arquivo oculto em %PROGRAMDATA% com o nome correspondente ao nome do mutex incorporado na configuração. Se o arquivo já existir, o malware será encerrado.

show_fake_error: o malware exibe uma caixa de mensagem "System error" com a mensagem "The program can't start because VCRUNTIME140.dll is missing from your computer. Try reinstalling the program to fix this problem."

Enumeração de hosts

Na próxima etapa, o CastleBot reúne informações sobre o host infectado para se registrar no servidor C2 e solicitar tarefas.

  • Nome de usuário via GetUserNameW
  • Nome NetBIOS via GetComputerNameW
  • Arquitetura do sistema via IsWow64Process
  • Nome de domínio DNS local, usando LsaQueryInformationPolicy para recuperar a estrutura PolicyDnsDomainInformation. O valor padrão é "WORKGROUP".
  • Número de série do volume recuperado via GetVolumeInformationW. O CastleBot o utiliza para calcular uma ID de vítima única utilizando um gerador congruente linear (LCG) com um multiplicador de 0x41C64E6D e um adendo de 0x3039.
  • Versão para Windows via RtlGetVersion e GetSystemMetrics(89)

As informações são compiladas no objeto abaixo, seguidas pela serialização e criptografia ChaCha:

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>,
    }
}

Os valores codificados são a chave de acesso (idêntica ao Agente-Usuário da configuração), o identificador da campanha e a versão de compilação do CastleBot, que é "1.0" para a amostra analisada.

O backdoor envia os dados criptografados em uma solicitação HTTP POST para

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

 A resposta é um contêiner criptografado maior, que carrega as tarefas pré-configuradas do CastleBot.

Contêiner de tarefas do CastleBot

O contêiner recebido do servidor C2 pela amostra do CastleBot analisada é descriptografado e desserializado em um objeto com os seguintes campos:

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: {},
        }
    }

}

O campo "tasks" é um tipo personalizado de matriz conforme detalhado acima, contendo pelo menos uma matriz sem nome (nome de comprimento zero), cada uma representando uma tarefa. O CastleBot também pode receber uma matriz com múltiplas tarefas a serem realizadas uma após a outra. Cada tarefa contém uma ID e vários campos detalhando como a tarefa deve ser executada, que são copiados para uma estrutura de tarefa durante a desserialização.

Execução de tarefas

O campo mais importante em cada tarefa é o "launch_method", que determina o tipo de carga a ser tratada pelo CastleBot.

Método de lançamento

Carga

Execução

1

EXE baixado da URL

Via CreateProcessW ou ShellExecuteW 

2

DLL baixada da URL

Via ShellExecuteW e rundll.exe

3

DLL baixada da URL

Via LoadLibraryW

4

PE baixado da URL

Injetado em um novo processo

5

Comando do PowerShell no campo "argument"

Via ShellExecuteW

6

Comando BAT no campo "argument"

Via ShellExecuteW

Os outros campos podem ser utilizados para definir opções específicas para a execução da tarefa:

Nome do campo

Descrição

id

ID de tarefa exclusiva, usado para relatar a execução bem-sucedida ao servidor C2

url

URL para recuperar a carga. As cargas são frequentemente hospedadas no servidor C2 em http://<castlebot_c2>/service/download/<payload_name>

install_path

Caminho de destino para injeção de processo, que pode conter variáveis de ambiente, ou simplesmente ":SELF:" que injeta a carga em uma duplicata do processo pai.

argument

Argumentos para processos em install_path ou comandos para execução do PowerShell/BAT

run_as_admin

Se definido, as execuções via ShellExecuteW usarão o verbo "runas".

startup_method

Se definida como "1", a persistência é criada para a carga por meio de uma tarefa agendada acionada a cada logon. 

is_encrypted_container

Se definido, a carga baixada da URL é descriptografada por RC4 e analisada como outro contêiner para recuperar a carga útil da tarefa.

container_encryption_key  

Chave RC4 utilizada com o contêiner criptografado.

auto_unpack_zip

Se definida, a carga é tratada como um arquivo ZIP e extraída manualmente.

zip_executable_files

Uma lista de arquivos de destino no arquivo ZIP que devem ser executados de acordo com o método de inicialização.

wow64_bypass

Uma opção adicionada recentemente para especificar se os binários do sistema de 32 bits devem ser iniciados.

  

Injeção de processo

O CastleBot é compatível com injeção de processos simples para cargas do PE. Ele começa criando um novo processo suspenso, com base nos campos de caminho de instalação e argumento. Para trabalhar no Windows 11 24H2 e posterior, os desenvolvedores de malware optaram por fisgar a função NtManageHotPatch da NTDLL na memória para ignorar a verificação de memória recém-adicionada. Consulte o post de Hasherezade para mais detalhes, que também fornece a implementação exata de POC usada pelo CastleBot:

código representando o CastleBot fisgando o NtManageHotPatch
Fig 5: CastleBot fisgando o NtManageHotPatch

O restante da injeção do processo segue técnicas comuns de injeção, alocando memória no processo de destino, gravando as seções no buffer e modificando o contexto do thread antes de retomar a execução.

código representando a injeção de processo do CastleBot
Fig. 6: injeção de processo do CastleBot

Persistência

Se o campo do método de inicialização estiver definido como "1", o CastleBot estabelece persistência criando uma tarefa agendada. Para registrar a tarefa, o malware usa a interface ITaskService COM para se conectar ao serviço Task Scheduler. Ele cria uma nova tarefa e uma ação de execução para a carga de destino, que é acionada toda vez que o usuário atual faz login (TASK_TRIGGER_LOGON).

Conclusão da tarefa

Cada tarefa no contêiner "tasks" é tratada de forma iterativa de acordo com seus campos especificados. Após uma tarefa ser concluída sem erros, o malware relata a execução bem-sucedida por meio de uma solicitação HTTP GET para:

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

Atualizações de julho de 2025

O X-Force observou uma variante central do CastleBot atualizada, oferecendo suporte a novos métodos de inicialização e uma opção chamada "wow64_bypass", usada para iniciar especificamente binários de sistema de 32 bits na pasta SysWOW64.

Método de lançamento

Carga

Execução

1

EXE baixado da URL

Via CreateProcessW ou ShellExecuteW 

2

DLL baixada da URL

Via ShellExecuteW e rundll.exe

3

DLL baixada da URL

Via ShellExecuteW e regsrv32.exe

4

DLL baixada da URL

Via LoadLibraryW

5

PE baixado da URL

Injetado em novo processo por meio de mecanismo antigo

6

PE baixado da URL

Injetado em novo processo via carregador do PE

7

Comando do PowerShell no campo "argument"

Via ShellExecuteW

8

Comando BAT no campo "argument"

Via ShellExecuteW

9

MSI baixado da URL

Via ShellExecuteW e msiexec.exe

A implementação adicional de injeção de processo (método de lançamento 6) grava o componente do carregador do CastleBot (consulte a seção de análise acima), bem como a carga do PE no processo de destino. Em seguida, ele usa QueueUserAPC e ResumeThread para transferir a execução para o carregador, que carrega corretamente a carga do PE na memória e a executa.

código que descreve a injeção de processo via QueueUserAPC
Fig. 7: injeção de processo via QueueUserAPC

Essa técnica usa significativamente menos chamadas de API WriteProcessMemory e fornece uma funcionalidade de carregamento mais completa a partir do stub do carregador do CastleBot.

Campanhas e cargas

O principal objetivo do CastleBot é permitir a implementação de cargas secundárias em máquinas vítimas. O X-Force descobriu várias cargas diferentes distribuídas pelo CastleBot, muitas vezes com múltiplas cargas em uma única campanha. As cargas variam em sofisticação, desde infostealers de commodities até backdoors mais capazes, como NetSupport ou WarmCookie, que foram vinculadas a ataques de ransomware.

De acordo com a análise e as capturas de tela da Prodaft, o framework CastleBot MaaS parece permitir que os operadores filtrem máquinas infectadas e atualizem facilmente as cargas para gerenciar várias campanhas ativas com grande flexibilidade, de acordo com a análise e as capturas de tela da Prodaft do painel C2. Com a fluidez das cargas e a capacidade do operador de adicionar várias tarefas e cargas a uma única campanha, as cadeias de infecção do CastleBot são mais complexas em comparação com os estágios de malware tradicionalmente estáticos.

O X-Force não tem nenhuma evidência de um anúncio generalizado de MaaS na dark web, o que pode indicar que o serviço atualmente é vendido apenas para um grupo privado de afiliados.

NetSupport

Sem identificar o malware como seu próprio framework, vários fragmentos das campanhas que levaram ao NetSupport foram relatados publicamente por outros pesquisadores em junho e julho de 2025.

A DomainTools observou páginas DocuSign falsas empregando a técnica ClickFix para executar um script malicioso do PowerShell, que por sua vez faz o download do CastleBot para implementar o NetSupport. IoCs de campanha:

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

A Unit42 da PaloAlto relatou atividades semelhantes com sites que imitavam o DocuSign e Okta, usando o ClickFix para implementar o CastleBot por meio dos componentes do stager e carregador iniciais. Ele contém uma análise parcial de um "carregador do NetSupport RAT", que o X-Force identifica como o framework CastleBot. IoCs de campanha:

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

Uma das cargas mais interessantes do CastleBot é a backdoor do WarmCookie (também conhecido como Quickbind, BadSpace). Provavelmente, faz parte de um ecossistema de crimes cibernéticos maior que permite ataques de ransomware e estava entre as famílias de malware visadas com sucesso pela polícia internacional durante a Operação Endgame em 2024. Anteriormente, o agente da ameaça Hive0137 distribuía o WarmCookie por meio de campanhas maliciosas de e-mail, embora nenhuma atividade significativa tenha sido observada em 2025, de acordo com a visibilidade do X-Force. O WarmCookie está publicamente vinculado às operações do TA866/Asylum Ambuscade.

A campanha que o X-Force observou começou em junho com um arquivo ZIP armamentizado imitando um instalador de um software legítimo SSMS-20.2-enu.zip (4766f5cc6501fc40c7151a0ce1c9d2cc49fca9b0b9cab2a206dd2426947e9afe). Entre os componentes legítimos, ele contém um executável malicioso SSMS_Windows.x64.exe (05ecf871c7382b0c74e5bac267bb5d12446f52368bb1bfe5d2a4200d0f43c1d8), identificado como uma variante do Dave Loader, que descriptografa uma carga armazenada em seus recursos. Após a descriptografia, o Dave Loader injeta o backdoor do CastleBot (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04), que recebe a tarefa de baixar e executar uma carga do WarmCookie (5bca7f1942e07e8c12ecd9c802ececdb96570dfaaa1f44a6753ebb9ffda0604cb4) de

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

O servidor WarmCook C2 está localizado em:

170.130.165[.]112

Uma segunda amostra encontrada no final de junho usou um executável semelhante, imitando um instalador para o software Zscaler Zscaler-Windows-4.4.0.379-instalador-x64.exe (bf21161c808ae74bf08e8d7f83334ba926ffa0bab96ccac42dde418270387890). O binário compilado pelo AutoIt é um carregador de shellcode simples, executando o stager incorporado do CastleBot, que por sua vez, faz o download do mesmo binário backdoor do CastleBot (202f6b6631ade2c41e4762e5877ce0063a3beabce0c3f8564b6499a1164c1e04).

Execuções em área de testes da amostra principal do CastleBot indicam que o mesmo afiliado pode ter descartado uma carga StealC com um servidor C2 em "http://107.158.128[.]105/c91252f9ab114f26.php" durante a campanha; no entanto, o X-Force não conseguiu recuperar uma amostra. 

Ambas as campanhas utilizam a ID de campanha do CastleBot “81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3“.

Infostealers

Além disso, o X-Force está rastreando várias campanhas do CastleBot entregando vários infostealers. O malware é compatível com várias tarefas de download para qualquer campanha, o que resultará na implementação de várias cargas no mesmo cliente. O executável AMD_Chipset_DriverOnly_DCH_AMD_Z_V1.2.0.105_20238.exe (e6aab1b6a150ee3cbc721ac2575c57309f307f69cd1b478d494c25cde0baaf85) carrega a carga do núcleo do CastleBot incorporado (b45cce4ede6ffb7b6f28f75a0cbb60e65592840d98dcb63155b9fa0324a88be2) de seu recurso e a executa. O endpoint de configurações do servidor C2 está localizado em

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

que transmitiu um total de três tarefas separadas em uma única mensagem C2, cada uma implementando uma carga útil diferente:

  • ID da tarefa: 0x16
    • URL de download: https[:]//google.herionhelpline[.]com/app/AcerUSBUpdate.exe
    • Carga: 03122e46a3e48141553e7567c659642b1938b2d3641432f916375c163df819c1 (Rhadamanthys)
    • Caminho de instalação: nenhum
    • Método de lançamento: 6
  • ID da tarefa: 0x17 
    • URL de download: https[:]//google.herionhelpline[.]com/app/light1_v5_signed.html
    • Carga: 12de997634859d1f93273e552dec855bfae440dcf11159ada19ca0ae13d53dff (Remcos)
    • Caminho de instalação: %ProgramData%\AmazonApp\AmazonWebServiceUpdate.exe
    • Método de lançamento: 1
  • ID da tarefa: 0x18
    • https[:]//google.herionhelpline[.]com/app/SlackUpdateWeb.html
    • Carga: c8f95f436c1f618a8ef5c490555c6a1380d018f44e1644837f19cb71f6584a8a (DeerStealer)
    • Caminho de instalação: %AppData%\SlackUpdate\SlackServiceUpdate.exe
    • Método de lançamento: 1

O X-Force descobriu ainda mais campanhas implementando o SecTopRAT (também conhecido como ArechClient), HijackLoader (também conhecido como Shadowladder) e MonsterV2 (também conhecido como Aurotun Stealer)

SecTopRAT e HijackLoader:

  • GlobalProtect-win-6.3.zip com sideloading executável msvcp140.dll (8bf93cef46fda2bdb9d2a426fbcd35ffedea9ed9bd97bf78cc51282bd1fb2095)
  • Servidor C2 do CastleBot: http[:]//107.158.128[.]45/service/settings/81a16c72f9c9f4ea94d68b609c78f72d4a8725e7b8f6949b12d8871b6c6843e3
  • Carga hospedada em http[:]//107.158.128[.]45/service/download/Exchanger32.zip (4834bc71fc5d3729ad5280e44a13e9627e3a82fd4db1bb992fa8ae52602825c6)

MonsterV2:

  • DLL libssl-1_1.dll (53dddae886017fbfbb43ef236996b9a4d9fb670833dfa0c3eac982815dc8d2a5) sideloaded, injeta refletivamente o stager do fora do CastleBot
  • Servidor C2 do CastleBot: http[:]//107.158.128[.]45/service/settings/8306a6b35d4be6de72be58860791e3644468fd67f675e4045a246dd27fa5692c
  • Carga hospedada em http[:]//107.158.128[.]45/service/download/CCver_Setup.exe (ab725f5ab19eec691b66c37c715abd0e9ab44556708094a911b84987d700aa62)

Conclusão

O CastleBot é a evidência mais recente de uma mudança nos vetores iniciais de infecção do cenário de ameaças do crime cibernético. Backdoors e frameworks MaaS são cada vez mais distribuídos por meio de sites falsos como parte de softwares trojanizados ou por meio da técnica ClickFix. Em poucos meses desde a observação de um aumento na atividade do CastleBot, os desenvolvedores já adicionaram várias novas funcionalidades e provavelmente tentarão manter-se atualizados com a adaptação das soluções de EDR e segurança de rede. A atividade atual sugere que várias afiliadas utilizam o CastleBot para implementar tanto infostealers quanto backdoors, o que pode levar a incidentes de ransomware de alto impacto.

Os defensores são aconselhados a permanecer vigilantes com as técnicas mencionadas neste relatório e tomar as medidas apropriadas para mitigar o risco de uma infecção pelo CastleBot.

Recomendações

  • Garanta que o software EDR e os controles de segurança associados estejam atualizados
  • Treine os usuários para terem cuidado extremo ao fazerem download de software e evitarem instalar software não autorizado ou não verificado
  • Implemente autenticação multifatorial e monitore as credenciais corporativas vazadas
  • Configure alertas ou considere bloquear conexões HTTP de saída (não HTTPS) e URLs contendo endereços IP em particular

Indicadores de comprometimento

Indicador

Tipo de indicador

Contexto

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

URL

URL de download do núcleo do CastleBot

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

URL

URL de download do CastleBot Loader

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

URL

Servidor C2 do CastleBot

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

URL

Servidor C2 do CastleBot

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

URL

Servidor C2 do CastleBot

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

URL

Servidor C2 do CastleBot

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

URL

Servidor C2 do CastleBot

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

URL

Servidor C2 do CastleBot

202f6b6631ade2c41e4762e5
877ce0063a3beabce0c3f85
64b6499a1164c1e04

SHA256

Núcleo do CastleBot

a2898897d3ada2990e523b6
1f3efaacf6f67af1a52e0996d3f
9651b41a1c59c9

SHA256

Script do PowerShell baixando e extraindo um arquivo ZIP

d6eea6cf20a744f3394fb0c
1a30431f1ef79d6992b55262
2ad17d86490b7aa7b

SHA256

Stager criptografado do CastleBot

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

URL

URL de download do NetSupport (13 de maio)

2a2cd6377ad69a298af55f2
9359d67e4586ec16e6c02c1
b8ad27c38471145569

SHA256

Carga do ZIP do NetSupport

8b2ebeff16a20cfcf794e8f31
4c37795261619d96d602c8e
e13bc6255e951a43

SHA256

Script do PowerShell baixando e extraindo um arquivo ZIP

cbaf513e7fd4322b14adcc34
b34d793d79076ad31092598
1548e8d3cff886527

SHA256

Stager criptografado do CastleBot

05ecf871c7382b0c74e5bac
267bb5d12446f52368bb1bfe
5d2a4200d0f43c1d8

SHA256

DaveLoader

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

URL

URL de download do WarmCookie (6 de junho)

5bca7f1942e07e8c12ecd9c80
2ecdb96570dfaaa1f44a6753e
bb9ffda0604cb4

SHA256

Carga do WarmCookie

170.130.165[.]112

IPv4

Servidor C2 do WarmCookie

bf21161c808ae74bf08e8d7f83
334ba926ffa0bab96ccac42dd
e418270387890

SHA256

Carregador AutoIt para o stager do CastleBot

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

URL

Servidor C2 do StealC

e6aab1b6a150ee3cbc721ac25
75c57309f307f69cd1b478d49
4c25cde0baaf85

SHA256

Loader contendo o núcleo do CastleBot

b45cce4ede6ffb7b6f28f75a0c
bb60e65592840d98dcb63155
b9fa0324a88be2 

SHA256

Núcleo do CastleBot

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

URL

URL de download do Rhadamanthys (10 de julho)

03122e46a3e48141553e7567
c659642b1938b2d3641432f9
16375c163df819c1 

SHA256

Carga do primeiro estágio do Rhadamanthys

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

URL

URL de download do Remcos (10 de julho)

12de997634859d1f93273e55
2dec855bfae440dcf11159ada19
ca0ae13d53dff 

SHA256

Carga do Remcos

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

 

URL

URL de download do DeerStealer (10 de julho)

c8f95f436c1f618a8ef5c49055
5c6a1380d018f44e1644837f19
cb71f6584a8a 

SHA256

Carga do DeerStealer

8bf93cef46fda2bdb9d2a426
fbcd35ffedea9ed9bd97bf78c
c51282bd1fb2095

SHA256

Stager criptografado do CastleBot

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

URL

URL de download do HijackLoader e SecTopRAT (5 de julho)

4834bc71fc5d3729ad5280e4
4a13e9627e3a82fd4db1bb992
fa8ae52602825c6

SHA256

Carga do HijackLoader e SecTopRAT ZIP

53dddae886017fbfbb43ef2369
96b9a4d9fb670833dfa0c3eac
982815dc8d2a5

SHA256

Stager criptografado do CastleBot

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

URL

URL de download do MonsterV2 (10 de julho)

ab725f5ab19eec691b66c37c715
abd0e9ab44556708094a911b8
4987d700aa62

SHA256

Carga do MonsterV2

O IBM X-Force Premier Threat Intelligence agora está integrado ao OpenCTI pela Filigran, fornecendo inteligência de ameaças praticável sobre essa atividade de ameaças e muito mais. Acesse insights sobre agentes de ameaças, malware e riscos do setor. Instale o X-Force OpenCTI Connector para aprimorar a detecção e a resposta, fortalecendo sua cibersegurança com a experiência do IBM X-Force. Obtenha hoje mesmo uma avaliação de 30 dias do X-Force Premier Threat Intelligence!

Soluções relacionadas
Serviços de gerenciamento de ameaças

Preveja, previna e responda às ameaças modernas aumentando a resiliência dos negócios.

 

Saiba mais sobre os serviços de gerenciamento de ameaças
Soluções de detecção e resposta a ameaças

Use as soluções de detecção e resposta a ameaças da IBM para fortalecer sua segurança e acelerar a detecção de ameaças.

Explore as soluções de detecção de ameaças
Soluções para defesa contra ameaças móveis (MTD)

Proteja seu ambiente móvel com as soluções abrangentes de defesa contra ameaças móveis do IBM MaaS360.

Conheça as soluções de defesa contra ameaças móveis
Dê o próximo passo

Tenha soluções abrangentes de gerenciamento de ameaças, protegendo habilmente a sua empresa contra os ataques cibernéticos.

  1. Saiba mais sobre os serviços de gerenciamento de ameaças
  2. Agende um briefing centrado em ameaças