著者: Santiago Pontiroli, Gabor Molnar, Kirill Antonenko
サマリー
- Acronis TRU (脅威リサーチユニット)は、最近発生した Linux および Windows への攻撃の中で、既知のマルウェアファミリーである Chaos RAT の新たな亜種を発見しました。
- Chaos RAT は、2022 年に初めて登場したオープンソースのリモート管理ツール(RAT)です。2024 年に進化し、2025 年に TRU によって新たなサンプルが発見されました。
- TRU のリサーチャーは、Chaos RAT の Web パネルに、攻撃者がサーバー上でリモートコードを実行できる重大な脆弱性を発見しました。今回確認された Chaos RAT のサンプルは、被害者に Linux 環境向けのネットワークトラブルシューティングツールをダウンロードさせようとしていた形跡が示されています。
- Go 言語(Golang)で開発された Chaos RAT は、Windows と Linux システムとのクロスプラットフォーム互換性を提供します。これは、いかに便利な正規ツールであっても脆弱性を抱えることで、サイバー犯罪に転用されるリスクがあることを改めて示しています。
- 全体として利用は限定的であるものの、最近のサンプルからChaos RATが依然として活発であることが確認されています。検出率が低いため、スパイ活動、データ窃取、ランサムウェアなどの侵入後の活動のための足掛かりを築く機会が生まれます。
- この技術分析では、アクロニスの TRU チームが Linux の亜種に焦点を当て、YARA ルール、侵害の指標、および EDR を使用した脅威ハンティングのヒントなど、防御側のための実践的な検出戦略を紹介します。
はじめに
Chaos RAT は Go言語で書かれたオープンソースの RAT(リモートアクセス型トロイの木馬)で、Windows と Linux の両方に対応するクロスプラットフォーム型の脅威です。Cobalt Strike や Sliver のような人気のあるフレームワークに着想を得た Chaos RAT には、ユーザーがペイロードをビルドし、セッションを確立し、侵害されたマシンを制御できる管理パネルが備わっています。Go言語ベースのマルウェアは、C++ や他の一般的な言語で書かれたものに比べて動作が遅く、サイズも大きくなる傾向がありますが、Go言語のクロスコンパイル機能のおかげで、開発時間を短縮でき、柔軟性も向上しています。

元々はリモート管理のための合法的なツールとして設計された Chaos RAT ですが、オープンソースの性質上、脅威アクターにより悪用されています。Chaos RAT は 2017 年に開発が始まりましたが、実際に攻撃に悪用されていることが初めて確認されたのは 2022 年 11 月でした。それ以来、Linux 版の亜種が次々に登場しており、その多くが暗号資産マイニングキャンペーンで悪用されています。本分析では、Chaos RAT のアーキテクチャ、実際の攻撃での使用状況、検出と緩和の手法について深く掘り下げます。
Chaos RAT の解析: コード、機能、通信
デリバリー
通常、Chaos RAT は悪意のあるリンクや添付ファイルを含むフィッシングメールを介して被害者に感染します。初期のサンプルでは、RAT とは無関係の悪意あるスクリプトを展開し、脅威アクターが永続化目的で悪用することの多いタスクスケジューラ /etc/crontab ファイルの改変が行われました。この仕組みにより、攻撃者はターゲットシステムに再度アクセスすることなく、実際のペイロードを更新・変更することができます。これは、cron ジョブが実行されるたびにペイロードがリモートから取得されるためです。初期のキャンペーンでは、この手法を用いて暗号通貨マイナーと Chaos RAT を別々に配信していたことから、Chaos RAT は主に侵害されたデバイス上での偵察や情報収集のために使用されていたことが分かります。

Virus Total で発見され、インドから提出されたこの最新のサンプルでは、NetworkAnalyzer.tar.gz という名前の tar.gz 圧縮アーカイブファイルに、最終的な Chaos RAT ペイロードが含まれていました。被害者がどのようにしてこのパッケージを受け取ったかについての追加情報はありませんが、入手できた情報によると、Linux 環境向けのネットワークトラブルシューティングユーティリティをダウンロードするように誘導していると考えられます。

概要
Chaos RAT の現在も活発にメンテナンスされている最新版ソースコードは、GitHub 上で公開されており、最終更新日は 2024 年 10 月です。このバージョンは、Windows および Linux の両プラットフォームを対象とした 64 ビットクライアントの構築専用に設計されています。その開発が継続していることから、互換性の拡大、ペイロード生成機能の改良、通信プロトコルの強化などを目的とした機能向上が継続していることを示唆しています。
管理パネル
Chaos RAT の管理パネルは、ペイロードの構築、管理、制御のための集中管理インターフェイスとして機能します。ブラウザ経由で分かりやすいダッシュボードを備えており、攻撃者やリサーチャーはこの豊富な機能を使いながら、侵害されたシステムとやり取りできます。検出された管理者パネルの数は少ないものの、VirusTotal の新たなサンプルが確認されていることや検出率の低さから、Chaos RAT が依然として現実の攻撃に使用されていることが考えられます。

管理パネルは、以下のコマンドを実行することで、ローカルで起動できます。
PORT=8080 SQLITE_DATABASE=chaos go run cmd/chaos/main.go
サービスが開始されると、パネルには任意のWebブラウザを用いて http://localhost:8080 からアクセスでき、デフォルトのログイン資格情報は admin:admin です。
管理パネルには、クライアントの管理、ペイロードの生成、キャンペーンの監視を行うためのタブがあります.ダッシュボードには 、クライアント ID、IP、OS の詳細、接続統計が表示されます。ペイロードジェネレーターは、Windows 用と Linux 用の 64 ビットペイロードを作成することができ、Windows 用には「Run Hidden」などのオプションが用意されています。


[ クライアント管理 ]タブは、ID、オペレーティングシステム、IP、最後に見たタイムスタンプなどの詳細情報とともに接続されたクライアントを表示します。個別または一括でのコマンド実行をサポートしています。[ ファイルエクスプローラー ]タブは、ファイルの閲覧、アップロード、ダウンロード、削除、実行の各操作が可能で、ディレクトリ階層を再帰的にたどることができます。

[ リモートシェル ]タブは、Windows または Linux システム上でコマンドをリアルタイムで実行できます。[ 設定 ] タブは、資格情報、ポート、データベースパスなどの設定を変更できます。

実行
Windows 版には、ビルドのステップでコンソール出力を非表示にする「Run Hidden」オプションがありますが、Linux にはありません。実行すると、サーバーアドレスと接続状況が表示されます。

Linux システムでは、この出力を「/dev/null」デバイスにリダイレクトすることで、非表示にできます。
Chaos RAT の古いバージョンと新しいサンプルの主な違いは、古いもの(下図左側)では、IP アドレス、ポート、その他のデータをエンコードせずにプレーンテキストとして格納されることです。ただし、トークン値はどちらのバージョンも、Base64 でエンコードされています。最新の亜種(下図右側)では、すべてのデータがエンコードされた 1 つの Base64 文字列として格納され、それを読み取るための追加関数が実装されています。

私たちは最近、ChaosRAT プロジェクトの最新版を使ってコンパイルされた、2 つの新たに確認されたバイナリを解析しました。そのうちの 1 つ(サンプル 2 )は、さらに UPX ユーティリティでパックされていました。
デコードされたコンフィギュレーションデータ
各サンプルには、フィールド名がランダム化された Base64 エンコード済みの設定オブジェクトが含まれています。デコードすると、これらのフィールドは C2 サーバーのポート番号、IP アドレス、認証に使用される JWT トークンといった主要の値に割り当てられていることが確認できます。
サンプル 1
SHA256:1e074d9dca6ef0edd24afb2d13cafc5486cd4170c989ef60efd0bbb0
{
"86pYnySllR": "5223",
"S7mOecuru0": "176.65.141.63",
"vu2Yr4lh2E": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3Njk1ODEyMzQsInVzZXIiOiJkZWZhdWx0In0.gQ7sfb0DF74yrFsdCO1dy1Vb3YBhEv2utn7PdcB4kC4"
}
サンプル 2
SHA256:a51416ea472658b5530a92163e64cfa51f983dfabe3da38e0646e92fb14de191
{
"Svy1ITNLYV": "7419",
"WiBZgQLch7": "91.208.197.40",
"bIffmObdNe": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE3NzI0NTg2NTYsInVzZXIiOiJkZWZhdWx0In0.5crbatKoe-6CogXJwgzOl_RSBnydG5l_Lf-ahO2HAu0"
}
図示されているように、フィールド名は単純なパターン検出を回避するためにランダム化されていますが、その構造と目的は一貫しています。
JWT の内訳
埋め込まれた JSON Web トークン( JWT )は標準フォーマットに従い、有効期限のタイムスタンプ( exp フィールド)のみが異なります。
サンプル 1
{
"alg":"HS256",
"typ":"JWT"
}
{
"authorized":true,
"exp":1769581234,
"user":"default"
}
サンプル 2
{
"alg":"HS256",
"typ":"JWT"
}
{
"authorized":true,
"exp":1772458656,
"user":"default"
}
このトークンは、コマンド & コントロールインフラストラクチャーとのクライアント/サーバー通信における認証と認可に使用されます。
構成後の動作
構成情報が解析されると、マルウェアは情報収集ルーチンへと進みます。この機能は、システムのメタデータ、ネットワークの詳細、およびオペレータが感染したマシンをプロファイリングするのに役立つ潜在的な識別子を含む詳細なホストデータを収集します。
- ホスト名
- 現在の名前
- MAC アドレス
- IP アドレス
- 現在の時刻
- OS 名
- OS アーキテクチャ
システムが OS 名を取得すると、各 OS に特有の関数実行パスを決定するために、グローバル変数が割り当てられます。Windows システムでは「1」、Linux では「0」に設定されます。この変数を設定すると、RAT はコンパイルされたクライアントがサポートする追加サービスを初期化し、検出された OS に基づいて機能を調整します。

その後、RAT は無限ループに入り、サーバーの稼働状況を継続的に監視します。サーバーに到達できなかった場合は、30 秒ごとに再試行されます。接続が確立されると、RAT は収集したシステムデータをサーバーに送信し、30 秒間隔でコマンドの受信をチェックします。

サーバーと通信するために、クライアントはリクエストを送信する前に、IP アドレスとポートに次のいずれかの文字列を付加します。
- /client - 新しい接続を初期化する
- /health - サーバーが利用可能かどうかをチェックする
- /device - デバイス情報を送信する
クライアントがサーバーへの接続に失敗した場合、以下のメッセージが出力されます。

サーバーからコマンドを取得するには、確立された接続から最後に取得したメッセージを読み込みます。サーバーからの各メッセージは JSON 形式で送信されるため、Chaos RAT クライアントはまずそれを逆シリアル化します。

次に、コマンド値を取得し、事前定義された文字列のセット(使用可能なコマンド)をロードします。これらの文字列は、取得した値と比較され、実行すべき操作が決定されます。

コマンドセットと機能
- getos- OS 名、バージョン、アーキテクチャ、ユーザー名、MAC アドレス、IP アドレス、現在の日時などのシステム情報を収集します。
- screenshot-kbinani/screenshot ライブラリを使用してスクリーンショットをキャプチャし、PNG 形式でエンコードした後、Base64 エンコードを施してサーバーに送信します。
- restart - システムを再起動します。Windows ではshutdown -r -t 00 を、 Linux では reboot を使用します。
- shutdown - システムをシャットダウンします。Windows では shutdown -s -t 00 を、 Linux では poweroff を使用します 。
- lock- user32.dll のLockWorkStation 関数を使用して Windows システムをロックします。Linux ではサポートされていません。
- sign-out - ユーザーをログアウトします。Windows では shutdown -L コマンドを使用します。Linux ではサポートされていません。
- explore - 指定したパスからファイルとディレクトリを一覧表示します。ファイル名とその更新日時を提供します。ディレクトリを再帰的にたどることができます。
- download- 指定したファイルをクライアントからサーバーにアップロードします。Base64 エンコーディングなしの POST リクエストによって開始されます。
- upload-GET リクエストで指定されたファイルをサーバーからクライアントにダウンロードし、データをローカルファイルに書き込みます。
- delete- クライアントのファイルシステムから指定されたファイルを削除します。
- open-url - デフォルトのブラウザで URL を開きます。Windows では start コマンドを、Linux では xdb ユーティリティを使用します。
コマンド機能の詳細
GetOS
このコマンドは、OS 名、バージョン、アーキテクチャ、ユーザー名、MAC アドレス、IP アドレス、現在の日時などのシステム情報を取得します。

Screenshot
この機能は、別のオープンソースプロジェクトから流用されたものです。スクリーンショットを撮ったら、エンコード関数に渡して PNG 形式に変換します。サーバーに送信する前に、Base64 でエンコードします。サーバー上では、この画像はダウンロードフォルダに保存されます。

Reboot と shutdown
これらのコマンドの実行はオペレーティングシステムによって異なります。Windows の場合、再起動には「shutdown -r -t 00」コマンドを使用し、システムのシャットダウンには「shutdown -s -t 00」コマンドを使用します。Linux の場合は「reboot」と「poweroff」コマンドを使用します。

Lock と sign out
これらのコマンドは Windows 版でのみサポートされています。「lock」操作では、「user32.dll」の「LockWorkStation」関数を使用します。
Rundll32.exe user32.dll, LockWorkStation
「sign-out」コマンドは「shutdown -L」コマンドを使って実行します。

File explorer
この関数は、システム上のファイルを一覧表示するために使用されます。ホームディレクトリから開始し、「ReadDir」関数を実行します。そして、見つかったファイルの種類をチェックします。ファイルがディレクトリの場合は、その名前だけを取得してリストに追加します。
{
"path":"/home/dev/go",
"files":null,
"directories":[
"bin",
"pkg"
]
}
リストされたディレクトリにファイルが含まれている場合は、ファイル名の他に最終更新日も返します。
{
"path":"/home/dev",
"files":[
{
"filename":".bash_history",
"mod_time":"2025-03-06T10:28:28.788848322Z"
},
{
"filename":".bash_logout",
"mod_time":"2024-03-31T08:41:03Z"
},
{
"filename":".bashrc",
"mod_time":"2024-03-31T08:41:03Z"
}
]
}
Download と upload
download コマンドがクライアントに届いたら、それをサーバーにアップロードする必要があります。コマンドには、パラメータとして完全なファイルパスが含まれています。

まず、クライアントはファイル内容を読み取り、POSTリクエストを作成し、そこにファイルデータも書き込みます。続いて、構成情報から取得したトークンを含む Cookie とコンテンツタイプを設定します。このリクエストは、Base64 エンコーディングなしで送信されます。

アップロードファイルがクライアントに送信されると、クライアントは、引数で指定されたファイルをローカルシステム上にダウンロードします。これを行うには、サーバーに「GET」リクエストを送信し、取得したデータをファイルに書き込みます。

いずれの場合も、ファイルをダウンロードまたはアップロードした後、処理が正常に完了したことを示すために、ファイルのフルパスを含む追加パケットを送信します。失敗した場合は、結果として「0」を含むパケットを送信します。
Open URL
Windows システムでは、「start」コマンドを使用して、システムのデフォルトブラウザで URL を強制的に開かせます。Linux システムでは、この目的のために「xdb」ユーティリティを使用します。

Command execution
Chaos RAT は、リクエスト内の「command」フィールドに端末コマンドを格納します。クライアント側で既存のコマンドと一致しない場合、そのコマンドは端末に渡されます。実行されたコマンドの出力結果はサーバーに返送されます。

コマンドが実行されると、結果が Base64 でエンコードされ、JSON 形式でサーバーに送信されます。各クライアントは、ホストの MAC アドレスを自分の ID として使用します。


Chaos RAT は攻撃者にコントロールパネルの制御権を与えます。
Chaos RAT は、その手口の受け皿になりました。その Web パネルに重大な脆弱性があり、攻撃者はサーバー上でリモートコードを実行することができました。本来は他者を制御するためのツールが、今度は制御される側へと立場が逆転したのです。
脆弱性: CVE-2024-30850
問題の核心は、Chaos RAT のバックエンドにある BuildClient 関数でした。この関数は、サーバーアドレス、ポート、ファイル名などのユーザー入力を受け取り、エージェントバイナリを構築するためのシェルコマンドを生成していました。一部の入力検証は行われていたものの、exec.Command("sh", "-c", buildCmd)が使われていたことで、悪意ある入力によって任意のコマンドが挿入される恐れがありました。こうして、認証されたユーザーが、RAT をホスティングするサーバー上でコードを実行できるようになりました。

エクスプロイト:CVE-2024-31839
攻撃者は、管理パネルの XSS 脆弱性を悪用して、偽装したエージェントのコールバックを作成することができました。エージェントのデータに悪意のあるスクリプトを埋め込むことで、管理者のブラウザセッションのコンテキストで、JavaScript を実行することができました。このサーバー側のコマンドインジェクションと、クライアント側の XSS が組み合わさることで、強力な攻撃ベクトルが生み出されました。
予想外の結末:リックロールされる
例えば、セキュリティ研究者でリックロールの専門家としても知られる Chebuya 氏は、この脆弱性を利用し、Chaos RAT の管理パネルに Rick Astley の「Never Gonna Give You Up」を再生させることで、その危険性を実証しました。詳細については、Chebuya 氏の記事をご覧ください:偽装エージェントによる CHAOS RAT のリモートコード実行。

影響
このマルウェアは、ファイル管理、リバースシェルアクセス、ネットワークトラフィックのプロキシ機能を備えています。これらの機能は、スパイ活動やデータ窃取を容易にしたり、ランサムウェアなどの侵入後の攻撃活動の足掛かりとして利用されたりする可能性があります。
オープンソースのため脅威アクターは容易に改変・転用することができ、シグネチャベースの検出を回避できる新たな亜種を作成できます。また、複数のアクターが明確な繋がりなく同様のツールを使用できるため、アトリビューションの特定が複雑になり、サイバー犯罪と国家支援活動の境界が曖昧になります。
実例
複数のAPT(高度な持続的脅威)グループが、オープンソースのリモートアクセス型トロイの木馬(RAT)を活動に使用していることが確認されています。APT41とAPT36はどちらもNjRATを使用し、APT10はQuasarRATを使用しています。Blind Eagle(APT-C-36)はAsyncRATを利用することが知られています。さらに、APT34とAPT35はどちらも、キャンペーンにPupy RATを利用しています。
Chaos RATをはじめとするオープンソースマルウェアを使用する理由
1. 紛れ込める:公開されているマルウェアを使用することで、APTグループは日常的なサイバー犯罪の喧騒に紛れ込むことができます。低レベルの攻撃者がRATを広く使用している場合、特定のキャンペーンを実行しているのが高度な攻撃者なのか、それともスクリプトキディなのかを判断することが難しくなります。
2. スピードとコスト:十分なリソースを持つAPTであっても、迅速に行動するか、複数の標的にまたがって作戦を展開する必要があります。オープンソースマルウェアは、「十分に機能する」ツールキットを提供し、迅速にカスタマイズして展開できます。
3. 帰属の回避:複数の攻撃者が同じオープンソースマルウェアを使用すると、帰属の特定が困難になります。マルウェアだけに基づいて特定のグループへの活動を容易に結び付けることはできず、高度な脅威アクターが機密性の高い作戦を隠れ蓑にしてしまう可能性があります。
結論
最初は開発者向けのツールであったものが、瞬く間に脅威アクターの格好の武器へと変わることがあります。この Go言語 ベースの RAT は、シンプルな Web インターフェイスと、強力なシステムコントロールを Windows と Linux に提供し、侵害されたシステム上でリバースシェル、ファイル操作、リモートコマンドの実行が可能です。
Chaos は実際に確認されており、サイバーセキュリティにおける重大な問題である「オープンソースソフトウェアの武器化」を象徴しています。迅速なデプロイ機能、Linux を標的にしたステルス性、柔軟な構成など、オープンソースは諸刃の剣であり、悪の手に渡れば深刻な被害をもたらすことを思い知らされます。
アクロニスによる検出
Acronis Cyber Protect Cloud は、ChaosRAT のさまざまなコンポーネントを「Trojan.Linux.ChaosRAT.A」として正常に検出します。以下のスクリーンショットでご確認ください。



アクロニスは最近、Acronis EDR の Linux サポートを発表しました。この機能強化により、EDR のカバレッジが複合環境に広がり、Windows、macOS、そして新たに Linux ワークロードに対して万全の保護が可能になりました。Acronis EDR が Linux システム上で不審なファイルや悪意のあるプロセスを検出すると、これらの検出結果は自動的に MITRE ATT&CK フレームワークにマッピングされ、潜在的な脅威に対するより深い洞察を提供します。
このアップデートにより、Linux デバイスに対していくつかの是正措置が実行可能になりました。これには、悪意のあるプロセスの停止、ファイルの検疫、許可またはブロックリストへの項目の追加、影響を受けたシステムのバックアップからのリカバリなどが含まれます。
この新機能は、Ubuntu 22.04 および CentOS 7.x オペレーティングシステムをサポートし、Acronis XDR でも利用できます。
侵害の指標
ファイル

YARA

参考資料および関連サイト(年代順)
- Chaos RAT に関するツイート(by Cyberteam008) 2025 年 4 月 15 日。 https://x.com/Cyberteam008/status/1889516549129802007
- GitHub アドバイザリーデータベース。 tiagorlampert CHAOS にクロスサイトスクリプティングの脆弱性 (CVE-2024-31839) 2024 年 4月 12 日。 https://github.com/advisories/GHSA-c5rv-hjjc-jv7m
- 偽装エージェントを介した CHAOS RAT でのリモートコード実行(by Chebuya) 2024 年 4 月 5 日。 https://blog.chebuya.com/p osts/remote-code-execution-on-chaos-rat-via-spoofed-agents/
- CVE-2024-30850(by Chebuya)に関するツイート 2024 年 4 月 5 日。 https://x.com/_chebuya/status/1776371049095192847
- MAL_LNX_Chaos_Rat_Dec22(Nextron-Systems による Valhalla ルール) 2022 年 12 月 14 日。 https://valhalla.nextron-systems.com/info/rule/MAL_LNX_Chaos_Rat_Dec22
- Chaos は、Go ベースのスイスアーミーナイフのようなマルウェア(Lumen ブログ) 2022 年 9 月 28 日。 https://blog.lumen.com/chaos-is-a-go-based-swiss-army -knife-of-malware/
- CHAOS: リモート管理ツール(GitHub リポジトリ) https://github.com/tiagorlampert/CHAOS