より脅威が増して復活した「Chaosランサムウェア」

文●フォーティネットジャパン 編集●ASCII

提供: フォーティネットジャパン

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はフォーティネットジャパンが提供する「FORTINETブログ」に掲載された「Chaosランサムウェアの進化:より速く、より賢く、そしてより危険に」を再編集したものです。

影響を受けるプラットフォーム:Microsoft Windows
影響を受けるユーザー    :Microsoft Windows
影響            :侵害を受けたマシンの大半のファイルが暗号化される
深刻度           :高

 2025年、ChaosランサムウェアはC++亜種の登場により復活しました。これは、.NETで記述されていない初めての亜種だと思われます。この亜種は、暗号化や身代金の要求に加えて、破壊的な恐喝戦術やクリップボードハイジャックが追加されており、暗号通貨の盗難も実行します。この進化により、Chaosの窃取方法がより積極的になっていることが浮き彫りになり、運用上の影響および被害者が受ける金銭的なリスクの両方が増大しています。

 本ブログでは、Chaos-C++の実行フロー、暗号化プロセス、およびクリップボードハイジャックの仕組みなど、Chaos-C++に関する包括的な技術的分析について説明します。また、Chaosの以前の亜種間の動作の違いを比較します。

ダウンロードおよび実行

 Chaos-C++ランサムウェアのダウンローダー(SHA256: 2fb01284cb8496ce32e57d921070acd54c64cab5bb3e37fa5750ece54f88b2a4)は、偽のユーティリティであるSystem Optimizer v2.1に偽装します。信頼性を構築するために、コンソールが開き、偽の最適化メッセージが表示されている間、バックグランドでランサムウェアのペイロードが秘密裏に展開されます。(Chaos-C++_type3 - SHA256: 19f5999948a4dcc9b5956e797d1194f9498b214479d2a6da8cb8d5a1c0ce3267)

図1:Chaos-C++ダウンローダー – 偽のシステム最適化ツール

 この亜種は活動の一環として、ペイロードのダウンロードと実行プロセスの詳細を記録するために、非表示のログファイル「sysopt.log」を%TMP%ディレクトリ内に生成します。
ペイロード自体は、「%TMP%\\\\svc[XXXX].tmp」に記述されます。この[XXXX]は、ランダムに生成された4つの文字を表し、ダウンローダー内に埋め込まれたハードコードされた文字列と組み合わされます。

 Chaos-C++ダウンローダーは、ペイロードを起動して表示ウインドウなしで実行できるように、まず、CREATE_NO_WINDOW (0x08000000)フラグを付けてCreateProcessA()の呼び出しを試みます。このアプローチに失敗した場合、「cmd.exe /c start /b "%TMP%\\\\svc[XXXX].tmp"」を使用してコマンドラインからペイロードを実行する方法に切り替え、ステルス性の高いサイレント実行を再度優先します。

初期化

 Chaosランサムウェアのすべての亜種と同様に、この亜種はまず、自身を正規のWindowsプロセスに偽装してコンソールウィンドウを作成し、タイトルをsvchost.exeに設定します。また、ログファイルが、「%TMP%\svchost_debug.log」に作成され、内部のデバッグや実行を追跡する目的で使用されると思われます。

 Chaos-C++は、同時に1つのインスタンスのみを実行するために、SvcHost_Mutex_7z459ajrkという名前のミューテックスも作成します。

図2:Chaos-C++で作成されるミューテックス

 暗号化に進む前に、Chaos-C++は、ファイル「%APPDATA%\READ_IT.txt」が存在しないかチェックします。このファイルが存在する場合、同ランサムウェアがすでに実行されていることを意味します。この場合、Chaos-C++は暗号化を再開せず、代わりに監視モードに入り、システムクリップボードの観察を開始します。

 Chaos-C++は、管理者特権が必要な場所である「C:\WINDOWS\test.tmp」に、ファイルを作成することを試みます。作成に失敗した場合、ランサムウェアは、権限を昇格した状態で実行されていないことを意味します。ただし、ファイルが正常に作成された場合、Chaos-C++はそのファイルを削除し、設計された一連のコマンドを実行してバックアップやリカバリー機能を無効化するなど、システムリカバリーを妨害します。

 vssadmin delete shadows /all /quiet >nul 2>&1
 wmic shadowcopy delete >nul 2>&1
 bcdedit /set {default} bootstatuspolicy ignoreallfailures >nul 2>&1
 bcdedit /set {default} recoveryenabled no >nul 2>&1
 wbadmin delete catalog -quiet >nul 2>&1

 このような活動は、Chaosファミリーのさまざまな亜種で、記述言語やトリガー条件は異なりますが、幅広く観察されています。

図3:管理者権限をチェックして、システムの破壊的な暗号化コマンドを実行

 暗号化フェーズ時、Chaos-C++は2つの主な関数を実行して、対象ファイルを識別し、AES-256-CFB暗号化か単純なXORアルゴリズムのいずれかを使用して対象ファイルを暗号化します。また、AESの代わりにRSAを使用する類似の亜種(Chaos-C++_type1)も確認されています。さらに、影響を受けた各ディレクトリにランサムノートをドロップし、被害者に攻撃を通知します。

ファイルの走査

 Chaos-C++は、最初の15秒間の遅延の後、対象ファイルの列挙を開始します。この遅延は、サンドボックスの自動分析を回避するために実装された可能性があります。このプロセスはまず、DesktopDocuments、およびDownloadsなどのユーザーディレクトリから検索を開始した後、利用可能な他のディレクトリに検索を拡大します。

 潜在的なターゲットが特定されると、Chaos-C++は、ファイルサイズに基づいて各ファイルを評価し、適切なアクションを以下のように決定します。

≤ 50MB:ファイルは完全に暗号化されます。
50MB~1.3GB:ファイルはスキップされ、そのまま残りますが、これは、暗号化時間を短縮する、またはバックアップに通常含まれる大型ファイルの検知を回避するためだと思われます。
> 1.3GB内容が削除され、暗号化されません。この独自の戦術により、影響を受けるアーカイブ、データベース、バックアップを中心に、不可逆的なデータ喪失が発生します。

図4:Chaos-C++は大型ファイルのすべての内容を消去

 ファイルの内容を削除するとファイルの復元可能性が排除されるため、マルウェアファミリーの中でも珍しい動作です。サイズに基づく暗号化戦略は他の亜種でも確認されていますが、それについては、「ファイルの走査戦略の比較」セクションで紹介します。

 また、Chaos-C++は感染したホストの不安定化を避けるために、拡張子に基づいてファイルを選択的に対象にしており、重要なシステムパスを意図的に除外しています。この戦略により、ユーザーデータの破壊を最大化しながら、被害者に身代金の支払いを迫る十分な期間、システムの運用可能性を確実に維持します。

対象のファイル拡張子には以下のもの含まれます
 .txt, .jar, .dat, .contact, .settings, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .odt, .jpg, .jpeg, .png, .csv, .py, .sql, .mdb, .php, .asp, .aspx, .html, .htm, .xml, .psd, .pdf, .mp3, .mp4, .avi, .mov, .zip, .rar, .7z, .tar, .gz, .bak, .backup, .iso, .vdi, .vmdk, .accdb, .json, .js, .cpp, .java, .cs

除外されるディレクトリおよびファイル
Program Files, Program Files (x86), Windows, $Recycle.Bin, ProgramData, MSOCache, Documents and Settings, System Volume Information

暗号化プロセス

 ファイルが暗号化対象としてマークされると、Chaos-C++はランダムな文字列を生成してハッシュ化し、後でそのハッシュを使用して、AES暗号化キーを取得します。

 文字列が生成された後、Chaos-C++は、Windows CryptoAPI関数にアクセス可能で、メモリに正常にロードされているかどうかをチェックします。これらの関数は、標準的なAES暗号化の実行に必要です。APIが利用不可の場合、Chaosは、大幅に弱いアルゴリズムであるXORを使用した代替の暗号化手法に切り替えます。この代替手段により、同ランサムウェアは、制限的な環境や劣化環境であっても、暗号化品質は低下しますが機能を維持することができます。

AES暗号化

 CryptoAPIにアクセス可能な場合、Chaos-C++は、一連のAPI呼び出しを使用して、AES-256-CFB暗号化を実行します。最初に、CryptAcquireContextA関数を呼び出して、PROV_RSA_AES (0x18)プロバイダで暗号化コンテキストを初期化します。次に、CryptCreateHash関数を呼び出して、SHA-256 (ALG_ID = 0x800C)を使用してハッシュオブジェクトを作成し、CryptHashData関数を使用して、先程生成したランダム文字列を処理し、最終的なSHA-256ハッシュを生成します。次に、CryptDeriveKey関数でハッシュを使用して256ビットAESキー(CALG_AES_256 = 0x6610)を生成します。

 その後、CryptSetKeyParam関数を呼び出して、暗号化モードをCFB(Cipher Feedback, mode = 4)にセットします。Chaosは実際に暗号化を実行する前に、NULLバッファーでCryptEncrypt関数を呼び出し、暗号化に必要なデータサイズを計算します。メモリの割り当てが完了したら、ファイルの内容がこのバッファーにコピーされ、CryptEncrypt関数を再度呼び出して、先程取得したAESキーを使用して、ファイルの内容を適切に暗号化します。

図5:AES-256-CFBを使用したファイル暗号化ルーチン

代替の暗号化

 CryptoAPI関数を利用できない場合、Chaos-C++は、代替策として類似のXORベースの暗号化を採用します。GetTickCount()を呼び出して、システム起動時からのミリ秒数を取得し、この値をXORキーとして使用します。ファイル内容の各バイトは、このミリ秒数から取得したバイトを使用してXOR変換されます。この手法は、AESよりはるかに安全性が低く、リバースエンジニアも容易ですが、平均的な被害者は元の内容が読めなくなるため、ランサムウェアのデータ破壊の目的を達成できます。

図6:XORを使用したファイル暗号化ルーチン

 暗号化プロセスを完了した後、Chaos-C++ランサムウェアは、クリーンアップとファイル置換フェーズを開始し、元のデータを上書きします。最初に、システムリソースを管理するために、暗号化時に割り当てられたヒープメモリを解放して、実行時のメモリフットプリントを削減します。Chaos-C++はまず、元のファイルを削除した後、暗号化されたデータを同じファイルパスに書き戻すことで、直接上書きします。この手法により、追加のコピーの作成を実施しないため、元の内容が確実に失われ復元不可能になります。この実行を容易にするために、ランサムウェア固有の拡張子「.chaos」を元のファイル名に追加します。両者とも、IOC(indicator of compromise:侵害指標)として機能し、被害者がファイルに触れないよう牽制します。

図7:Chaos-C++ランサムウェアの拡張子

 Chaos-C++は、Windows API関数のCreateFileW()とWriteFileW()を使用して、ファイルを再作成し、特定の順序でファイルに書き込みます。最初に、暗号化プロセスで使用される暗号化キーサイズと暗号化キーを埋め込み、その後に、実際の暗号化ファイルの内容を埋め込みます。これにより、ディスク上には、暗号化された使用不可のバージョンのファイルのみ残り、復号化ソフトウェアが提供されない限り、被害者は事実上、自身のデータにアクセスできなくなります。

図8:AESで暗号化されたファイルは、キーサイズが指定された4バイトのヘッダーで開始

図9:XORで暗号化されたファイルは、キーサイズが指定された4バイトのヘッダーで開始

展開後

 暗号化ルーチンが完了した後、Chaos-C++は、コマンドプロンプトにステータスインジケータとしてメッセージ「Encryption complete.Total files:(暗号化が完了しました。合計ファイル数:)」を表示します。次に、ランサムノートを%AppData%ディレクトリにドロップし、その中に支払い手順、攻撃者の連絡先メール、被害者の一意識別子が含まれています。

図10:Chaos-C++のランサムノート

 Chaos-C++は、被害者が身代金の要求に気付くように、MessageBoxWアラートをトリガーし、ユーザーにランサムノートを読むよう指示します。

図11:被害者にランサムノートを読むよう促すメッセージボックス

クリップボードハイジャック

 クリップボードハイジャックは、以前のChaosでは確認されていない新機能です。このランサムウェアは、アドレスの長さ(26~64文字)プレフィックスをチェックして、潜在的なBitcoinアドレスを検証します。アドレスの先頭が1(P2PKH)、3(P2SH)、またはbc1(Bech32)で始まるものは正規のウォレット形式として認識され、Chaos-C++は、暗号通貨のアドレスを確実に検知することが可能です。
 
 有効なアドレスが特定されると、Chaos-C++はそのアドレスを、攻撃者が管理するハードコードされたBech32形式のBitcoinウォレットに置き換えます。これにより、Bitcoinの支払いは、意図した受取人の身元に関係なく、攻撃者に確実に秘密裏にリダイレクトされます。被害者がウォレットの復旧を試みると、トランザクションは誤って攻撃者に送信される可能性があります。

 置換プロセスは、Windows Clipboard APIを介して実装されます。Chaos-C++は、GlobalAlloc()を使用してメモリを割り当て、攻撃者のウォレットの文字列をそのメモリスペースにコピーし、クリップボードを消去して、最終的に、SetClipboardData()を使用して攻撃者のアドレスを注入します。

 Chaosは正規表現の検証をスキップするため、長さが正しく先頭が「bc1」、「1」、または「3」で始まるすべての文字列が、ウォレットのアドレスとして処理され置換されます。

図12:クリップボードハイジャックのプロセス

図13:ハイジャック行動をトリガーする具体的な条件

ファイルの走査戦略の比較

 Chaosランサムウェア亜種の暗号化戦略が進化する中、攻撃者の動機が、効率を優先しているのか、より積極的なデータ破壊のアプローチを優先しているのか、疑問が浮上しています。私たちの分析の結果、さまざまな亜種で攻撃手法が変化していることが明らかになりました。

 初期のバージョンは.NETで記述されており、2021年に発見されたChaos(Chaos_2021と呼ぶ)および2023年の後続の亜種であるBlackSnakeなどは、すべての対象ファイルに対して完全な暗号化戦略を適用します。これは、スピードは遅くなる可能性がありますが、大半のランサムウェアで共有されるシンプルな方法です。

 2025年初頭に確認されたChaos亜種のLucky_Gh0$tは、より破壊的な挙動に顕著に移行していることが明らかになりました。1.3GBを超えるファイルの内容を同一のバイトで置換し、従来の暗号化を迂回する手法を利用することで、迅速かつ不可逆的なデータ破壊を実行します。Lucky_Gh0$tは後続のChaos亜種とは異なり、50MB~1.3GB間のファイルをスキップせず、それらのファイルも暗号化ルーチンに含まれます。これは、スピードを重視するのではなく、幅広い影響を期待していることが示唆されます。

 Lucky_Gh0$tの後、C++で記述された一連の新しいChaos亜種が確認されました。最適化プロセスを継続する目的は、各タイプの違いを比較すると明白です。Chaos-C++_type1は、RSAベースの亜種で、積極性は高いが、効果が低いと思われる戦略が採用されています。この亜種は、効果的かつ破壊的な手法で対象ファイルを完全に暗号化し、1.3GBを超えるすべてのファイルの内容を削除して、ファイルサイズを効率的に0バイトに削減します。

 Chaos-C++_type2は効率性の実証実験であり、50MBを超えるファイルは内容をそのまま残してスキップしており、積極性が低い戦術が採用されています。被害者は、小型のファイルを救出するために身代金を支払うよう促されますが、攻撃者にとっては大型サイズのバックアップファイルが漏れる可能性があります。
本ブログの主なテーマであるChaos-C++_type3は、積極性とファイル暗号化手法の効率性の両方が採用されています。小型ファイルはAESかXORを使用して暗号化し、中型サイズのファイルはスキップし、大型ファイルは内容を削除します。この組み合わせにより、破壊的でありながら速度が約束され、一部のファイルが無傷であることから、被害者に希望を残します。

 このような動作の違いから、Chaosランサムウェアの開発者はさまざまな戦略で実験して、実行スピードと被害範囲のバランスを取っていることが示唆されます。

 Chaosランサムウェアのさまざまな亜種の暗号化戦略の比較を以下のテーブルに示します。

シリーズ 言語 暗号化 ≤ 50MB 50MB~1.3GB 1.3GB
Chaos_2021 .Net Base64 Encoded 暗号化 暗号化 暗号化
BlackSnake .Net AES + RSA 暗号化 暗号化 暗号化
Lucky_Gh0$t .Net AES + RSA 暗号化 暗号化 同一のバイトで置換
Chaos-C++_type1 C++ RSA 暗号化 暗号化 削除
Chaos-C++_type2 C++ XOR 暗号化 スキップ スキップ
Chaos-C++_type3 C++ AES or XOR 暗号化 スキップ 削除

結論

 Chaosランサムウェアの最新の亜種であるChaos-C++は、攻撃戦略の大幅な進化が明らかになっています。Chaos-C++は、完全なファイル暗号化のみを利用するのではなく、同期的または非同期的な暗号化、代替のXORルーチンなどの手法の組み合わせが採用されています。また、ダウンローダーは柔軟性が高く、実行の成功を保証します。これらのアプローチを組み合わせることで、ランサムウェアの実行の堅牢性が高まり、妨害が困難になります。

 Chaos-C++は暗号化だけでなく、非常に大きなファイルを暗号化せずに削除する破壊的な戦略も採用しています。この方法により、処理時間が短縮され、大量のデータに対して迅速に攻撃することが可能になり、効率が向上します。一方で、復元を不可能にするため、被害者が身代金を支払うインセンティブはほとんどなく、金銭的な利益を得る可能性が低くなることが考えられ、攻撃者にとってもリスクをもたらします。

 また、この亜種には巧妙なクリップボードハイジャックのメカニズムも導入されており、コピーされたBitcoinのアドレスを、攻撃者が管理するウォレットに自動的に置き換えます。Chaosは、金銭的な利益を最大化するために、より積極的で多面的な脅威の設計に移行していることが、この破壊的な暗号化と秘密裏の金銭窃取の二重戦略により明らかになりました。

 最後に、進化する暗号化手法の全体を見渡すと、Chaos亜種が、スピードと能力のバランスを模索していることを明確に理解できます。また、Chaos亜種は将来、従来のランサムウェアとは異なり、ワイパー型マルウェアのように動作する可能性も示唆されます。

フォーティネットのソリューション

 FortiGuard Labsは、以下のアンチウイルスシグネチャを使用して、Chaosランサムウェアのサンプルを検知します:

・W64/Filecoder.XM!tr.ransom
・W64/Filecoder.MLKGEBH!tr.ransom  
・W64/Imps.1!tr.ransom

 FortiGate、FortiMail、FortiClient、およびFortiEDRは、FortiGuardアンチウイルスサービスをサポートしています。FortiGuardアンチウイルスエンジンは、これらの各ソリューションに含まれています。その結果、最新の保護機能を備えたこれらの製品を利用するお客様は保護されます。

IOC(Indicators of Compromise:侵害指標)

SHA256
2fb01284cb8496ce32e57d921070acd54c64cab5bb3e37fa5750ece54f88b2a4 Chaosダウンローダー
19f5999948a4dcc9b5956e797d1194f9498b214479d2a6da8cb8d5a1c0ce3267 Chaosランサムウェア
f200ea7ccc5c9b0eaada74046551ed18a3a9d11c9e87999b25e6b8ee55857359 Chaosランサムウェア
f4b5b1166c1267fc5a565a861295a20cf357c17d75418f40b4f14b094409d431 Chaosランサムウェア
9521a154b06743fcb3a24b6b61ae0b4cbd1f1ba74d3d9cd9110042082d0b1d5c Chaosランサムウェア
5d3fcf6532c9ee5778753c3f13e71d1e3b157b49e56133bdff5d04d6e6d6c8be Chaosランサムウェア
fe717bab60f1b03012b1e6287e3f3725f1ad5163897041b824024aedabb7c46d Chaosランサムウェア
76fde847037ca79c8e897fac9d80567efc4ec3a193ec3d8ae9c9fcd9e1ac4939 Chaosランサムウェア
bbf9ebbfd93306108299e54ecbfb59bb9433eeb34f89cef61864f4e87640eaf0 Chaosランサムウェア

■関連サイト