This post is also available in: English (英語)
概要
Pensive Ursa (別名 Turla、Uroburos) の進化を追跡するなかで、Unit 42 のリサーチャーは Kazuar の新しくアップグレードされた亜種を発見しました。Kazuar は大きくて危険なヒクイドリという鳥の別名でもありますが、これはまた、Pensive Ursa が通常第 2 段階のペイロードとして使う高度でステルス性の高い .NET バックドアでもあります。
Pensive Ursa は、少なくとも 2004 年から活動しているロシアを拠点とする脅威グループで、ロシア連邦保安庁 (FSB) と関係があります。
ウクライナ CERT は 2023 年 7 月にこのバージョンの Kazuar がウクライナの防衛セクターを標的にしていることを報告しています。この亜種の背後にいる脅威グループは、Signal のメッセージ、ソース管理、クラウド プラットフォーム データに含まれる機微な資産を狙っていました。
Unit 42 が 2017 年に Kazuar を発見して以来、私たちが実際に Kazuar を目撃したのは数回だけで、その標的は主にヨーロッパの政府や軍事のセクターの組織でした。Sunburst バックドアはそのコードの類似性により Kazuar とリンクされましたが、このバックドアは非常に手の込んだものであることがわかっています。2020 年後半以来、私たちは新たな Kazuar のサンプルを野生では確認していませんでしたが、数々の報告から、Kazuar は継続的に開発中であることが示唆されていました。
Kazuar のアップグレード版のコードからは、この作者らが、Kazuar の動作に高いステルス性、検出回避性、解析耐性をもたせることに、とくに注力していたことがうかがい知れます。この作者らは、高度な分析防止技術の数々と、効果の高い暗号化・難読化手法によるマルウェア コードの保護により、これらの性能を実現していました。
本稿では、Kazuar の機能について詳細な技術分析を提供します。私たちは、この調査を共有し、検出・防止・ハントに関する推奨事項を提供することで、組織の全般的なセキュリティ態勢の強化に貢献できればと考えています。追加のアーティファクト リストは、GitHub ページにリンクされた付録セクションで提供しています。
パロアルトネットワークスのお客様は、次の方法で本稿で解説した脅威からの保護と緩和を受けています。
- Advanced Threat Prevention セキュリティ サブスクリプションを有効にした次世代ファイアウォールは、マルウェアの C2 トラフィック防止に役立ちます。
- Unit 42 インシデント レスポンス チームは、本稿で取り上げた脅威をはじめ、さまざまな脅威への個別対応を提供しています。
- Cortex XDR および XSIAM プラットフォームは、本稿で解説した脅威を検出・防止します。
- Advanced WildFire はこの新たな Kazuar の亜種の発見を受けて機械学習モデルと分析手法の見直しと更新を行いました。
関連する Unit 42 のトピック | Backdoors, Pensive Ursa |
Kazuar の概要
Kazuar は高度でステルス性の高い既知の .NET バックドアです。Pensive Ursa は通常、このバックドアを第 2 段階のペイロードとして使い、ほかに同グループがよく使っているツールとともに配信します。
ウクライナ CERT が報告した最近の攻撃キャンペーンでは、ほかの新たなツール (Capibar という第 1 段階用のバックドアなど) にくわえ、Kazuar の多段階配信メカニズムが明らかになりました。この最近の亜種(数年間の休止期間を経て野生で出現)を技術分析したところ、コードの構造や機能が大幅に改善されていることがわかりました。
本稿では、これまで文書化されていなかった以下の機能について詳しく説明します。
- 包括的なシステム プロファイリング: 広範なデータを収集
- クラウドそのほかの機微なアプリケーションからのクレデンシャル (資格情報) 窃取: クラウド アプリケーション アカウント、ソース管理、Signal メッセージング アプリケーションの窃取
- 拡張コマンド セット: 合計で 45 種類のコマンド実行をサポート。対象コマンドはべつの Kazuar ノードから受け取るか、コマンド & コントロール (C2) サーバーから受け取る
- タスク自動化の強化: 一連の自動タスクを攻撃者がオン/オフ切り替え可能に
- さまざまな暗号化スキーム: さまざまな暗号化アルゴリズムとスキームを実装
- インジェクション モード: 複数のインジェクション モードにより、Kazuar をさまざまなプロセスから実行したり、さまざまな機能を実行したりできる
少なくとも 2018 年以降、Kazuar の亜種は難読化手法を変更し、コンパイルのタイムスタンプを系統的に変更していました。一部の亜種は ConfuserEx 難読化ツールを使って文字列を暗号化し、そのほかの亜種はカスタム メソッドを使っていました。本稿で分析した Kazuar の亜種では、作成者はさらに一歩進んで、文字列暗号化のための複数のカスタム メソッドを実装していました。
以前の亜種とは異なり、作成者は Windows オペレーティング システムをターゲットにすることだけに重点を置いていました。
注: 私たちの Kazuar のコード分析では dnSpy を使ってコードを統合開発環境 (IDE) にエクスポートし、カスタム スクリプトで文字列を復号しました。このツールで個別の .cs ファイルを編集し、一部のメソッド名を意味のある名前に編集してあります。スクリーンショットに登場するメソッド名はその編集後のものです。
最新の Kazuar 亜種の詳細な技術分析
メタデータ
ほかの研究機関からの報告によると、Kazuar の作者は少なくとも 2018 年以降、サンプルのタイムスタンプを操作していることがわかりました。この新たな亜種のコンパイルのタイムスタンプは Thursday, November 20, 2008 10:11:18 AM GMT (2008 年 11 月 20 日木曜日 午前 10 時 11 分 18 秒 (グリニッジ標準時)) です。ほかの公開されている亜種と異なり、この作者がタイムスタンプ偽造のさい 2008 年まで遡ったのはこれが初めてです。
Kazuar はまた、Agent version、BuildID、Agent label 用に、ハードコードされてハッシュ化された識別子を含んでいます。図 1 に示すように、これらは亜種の識別子として使えます。

初期化
アセンブリー チェックの実行
Kazuar は実行のさい、Assembly.Location プロパティを使って、自身のファイル パスを受け取り、その名前を確認します。図 2 に示すように、Kazuar はこの戻り値が空文字列の場合にのみ、実行を継続します。Assembly.Location プロパティは、バイト配列からファイルをロードする場合は空文字列を返します。
このチェックは、マルウェアの実行がほかの手段やソフトウェアではなく、意図されたローダーによって実行されたことを確認するための、単純な形式の解析防止メカニズムであると思われます。
ファイル名が特定のハードコードされたハッシュ名と一致すれば Kazuar は実行されます (これには FNV アルゴリズムが使われます) 。この動作はおそらくデバッグが目的で、作成者がマルウェアのデバッグのたびにローダーを使わずにすむようにしていると思われます。

オペレーション ルート ディレクトリーの作成
Kazuar は、自身の構成とログ データを保存するディレクトリーを新規作成します。Kazuar は %localappdata% をメイン ストレージ パスとして使い、ハードコードされたパスのリストからルート ディレクトリーを決定します (付録参照)。
Kazuar は、マシンの GUID (Globally Unique Identifier: グローバルに一意な識別子) を使って、使うルート ディレクトリー、フォルダー名、ファイル名、ファイル拡張子を決定します (図 3)。これらの名前は一見するとランダムに生成されているように見えますが、GUID を使うと、同一感染マシン上でマルウェアが実行されるつど、同一の名前が維持されることになります。

以前の亜種と同様に、Kazuar は構造化されたディレクトリー スキームを使って、ログ ファイルや個々の構成ファイル、キーロガー データなどのデータを保存しています。ディレクトリーの命名は擬似乱数で、ハッシュに基づいて選択されます。たとえば、以前の亜種で見られた FNV ハッシュ アルゴリズムのカスタム実装や、GUID 値に対するそのほかの操作などです。これらの平文でのディレクトリー名リストは、付録から確認してください。
また、このコード内には wordlist というファイル作成オプション (現時点では参照されていない) があることも特筆に値するでしょう。このファイルは、(おそらくディレクトリーやファイル名、パスワードのブルート フォース用に wordlist を使って) 今後実装されることになる機能に関する手がかりを提供してくれる可能性があります。
構成ファイル
このマルウェアは、以下のようなデータを含む別のメイン構成ファイルを作成します。
- C2 サーバー
- インジェクション モード
- そのほかのオペレーション用の構成データ
下の図 4 はこのファイルからの一部抜粋です。Kazuar の設定ファイルの暗号化手法は付録から確認できます。

ミューテックス名の生成
Kazuar は、別プロセスへのインジェクションのチェックにミューテックスを使っています。Kazuar は、現在のプロセス ID とハードコードされた値 0x4ac882d887106b7d とを XOR 演算してミューテックス名を生成します。次に、それをマシンの GUID と XOR 演算します (図 5)。このことは、同一プロセスにはインジェクトされないものの、複数の Kazuar が同一デバイス上で並行して動作できることを意味します。

アーキテクチャ
Kazuar のインジェクション モードの設定
新バージョンの Kazuar は、構成で「インジェクション モード」と記述されている内容を使います (表 1)。デフォルト モードは inject です。
構成ファイルのモード名 | 説明 | インバウンド トラフィック | アウトバウンド トラフィック | 追加の機能スレッド |
inject |
|
名前付きパイプ | 名前付きパイプ |
|
zombify |
|
名前付きパイプ | HTTP |
|
combined | デフォルトの inject メソッドが失敗した場合、zombify と同じメソッド経由で実行する | (該当なし) | (該当なし) | (該当なし) |
remote | 名前付きパイプ通信チャネルを作成し、ほかの Kazuar インスタンスのプロキシーとして機能する。C2 通信なし | 名前付きパイプ | 名前付きパイプ |
|
single |
|
名前付きパイプまたは HTTP | 名前付きパイプまたは HTTP |
|
Not in User Interactive Mode | Kazuar の実行がユーザー対話モードの場合。Kazuar をサービスとして実行している場合やサーバーなどの GUI を持たないマシン上で実行する場合にこのモードになりうる | 名前付きパイプ | 名前付きパイプ |
|
表 1. Kazuar のインジェクション モードとその説明
zombify モードでは、Kazuar はユーザーのデフォルト ブラウザーにインジェクトされます。このモードには、デフォルトのブラウザーのクエリーが失敗した場合に備え、自分自身を svchost.exe にインジェクトするフォールバック機構があります。図 6 は、 zombify (ゾンビ化する) が、Kazuar の作者によるプロセス インジェクション全般を指す用語であることを示しています。

マルチスレッド モデル
Kazuar はマルチスレッド モデルで動作しますが、Kazuar の主要機能はそれぞれ独自スレッドで動作します。つまり、1 本のスレッドが C2 からのコマンドや tasks の受信を処理し、solver スレッドがこれらのコマンドの実行を処理します。このマルチスレッド モデルにより、Kazuar の作者は非同期のモジュール式フロー制御を確立できます。図 7 は、task solver のフローを示す図です。

タスク ソルバー コンポーネント - Kazuar の黒幕
Kazuar は新しい tasks を受け取ると、それを解決して、結果を result ファイルに書き出します。solver スレッドは、C2サーバーまたはべつの Kazuar ノードから受信した新しい tasks を処理します。task の内容はその後暗号化されて task ファイルとしてディスクに書き込まれます。
それぞれの task ファイルはハイブリッドな暗号化スキームを実装しています。
- RNGCryptoServiceProvider を使って 2 つのバイト配列を生成します。これらのバイト配列にはそれぞれ 16 バイトと 32 バイトの長さの乱数が含まれます。
- 最初のバイト配列は、AES (Rijndael) の初期化ベクトル (IV) として使います。
- 2 つめのバイト配列は AES キーとして使います。
- メモリーからの result の内容に基づいて、HMACMD5 ハッシュを生成した後、それを暗号化してディスクに書き込みます。このさいは上記の最初の箇条書きで説明したバイト配列をキーとして使います。
- HMACMD5 ハッシュ、AES キー、IV をハードコードされた RSA キーで暗号化し、暗号化した BLOB をファイル先頭に書き込みます。高速な AES アルゴリズムを使って resultの内容のような大きなオブジェクトを暗号化し、低速の RSA 暗号化を使って AES キーと IV を隠すことにより、Kazuar のパフォーマンスをあげています。また、対称キーが非対称キーで暗号化されてしまうので、感染ファイルをディスクだけを元に復旧するという選択肢は封じられます。
- AES 暗号を使って result ファイルの内容を暗号化します。
図 8 に示すように、タスクが完了すると、生成された result ファイルはディスクに保存されます。

Kazuar は前述の暗号化したデータに加え、以下のフィールドを result ファイルの先頭に書き込みます。
- 4 つのゼロバイト (これは一種の区切り文字として機能すると考えられます)
- 生成された結果の識別子
- 暗号化された GUID の長さ。これには初期化のときと同じ XOR アルゴリズムを使用する (ここでの暗号化されたメッセージは「System info at [datetime] (-07)」)
- 暗号化された GUID そのもの
- RSA で暗号化した HMACMD5 ハッシュ + IV + AES キー
- AES で暗号化したタスクの内容
図 9 はディスクからの暗号化された result ファイルの内容を示しています。

文字列の暗号化
Kazuar のコードには、その機能とデバッグに関連する大量の文字列が含まれています。平文で表示すれば Kazuar の内部機構や機能が明らかになります。リサーチャーが文字列ベースの指標となる YARA やハンティング ルールを作成するというシナリオを回避するために、Kazuar の文字列は暗号化されています。Kazuar は実行時に各文字列を復号します。
Kazuar は文字列の暗号化/復号アルゴリズムにシーザー暗号の一種を使います。このアルゴリズムでは、Kazuar は各メンバーのキーと値を単純に交換する辞書を実装しています。最近の Kazuar の亜種は、辞書を 1 つだけ実装していましたが、この新しい亜種は複数の辞書を実装しており、それぞれに 80 組の文字が含まれています(図10)。

図 11 は、指定された文字列を反復処理し、指定された文字の序数値が関連クラスの辞書キーにあるかどうかをチェックするループを示しています。あれば Kazuar はキーと値を交換し、それを作成された文字列に追加します。なければ、元の文字が維持されます。
こうした文字列の難読化に加えて、コード内のクラスやメソッドに意味のない名前を付けることで、作者は分析をより困難にしています。

Kazuar が復号した文字列のひとつは、「Invalid pong responce」という値を返します (図 12)。マルウェア開発者の 1 人が、ロシア語の C を英語の S に切り替えるのを忘れたようです。

コアとなる機能
テイクダウンを避けるため、Kazuar はハイジャックした正規 Web サイトを C2 インフラに使っています。これは Pensive Ursa にはよく見られる手口です。さらに、インジェクション モードのセクションでも述べたように、Kazuar は名前付きパイプを使った通信もサポートしています。Kazuar は (コードが説明しているように) これら両方のメカニズムでリモート コマンドやタスクを受信します。
サポートされている C2 コマンド
表 2 に示すように、Kazuar は C2 から受信可能な 45 種類の異なるタスクをサポートしています。以前のリサーチではこれらのタスクの一部は文書化されていないので、これは Kazuar のコードの開発がさらに進んだということを意味します。比べてみると、2017 年に分析された Kazuar の最初の亜種は、26 個の C2 コマンドだけをサポートしていました。
私たちは、Kazuar のコマンドを次のカテゴリーにグループ化しました。
- ホスト データの収集
- 拡張されたフォレンジック データの収集
- ファイルの操作
- 任意のコマンドの実行
- Kazuar の構成とのやりとり
- レジストリーのクエリーと操作
- スクリプトの実行 (VBS、PowerShell、JavaScript)
- カスタム ネットワーク リクエスト
- クレデンシャルと機微情報の窃取
コマンド | 説明 |
sindex | C:\Users\ のパス以下で、.txt, .ini, .config, .vbs, .js, .ps1, .doc, .docx, .xls, .xlsx, .ppt, .pptx の拡張子を持つファイルのプロパティを検索します。 |
scrshot | 指定プロセスのウィンドウのスクリーンショットを撮ります。 |
move | ファイルをソース パスから宛先パスに移動します。 |
info | 1 つまたは複数のフィールドに関するシステム情報を取得します (付録参照)。 |
steal | さまざまなブラウザーやアプリケーションからデータを盗みます (完全な ID 一覧は 付録 を参照)。 |
run | 指定された引数を使って指定された実行可能ファイルを実行し、結果を一時ファイルに保存してからこのファイルを C2 サーバーにアップロードします。 |
schlist | Schedule.Service COM オブジェクトを使ってスケジュールされたタスクに関するデータを取得します。 |
config | Kazuar の構成ファイルを更新します |
netuse | WNetAddConnection2 WinAPI、WNetCancelConnection2 WinAPI を使って、マシンのネットワーク リソースの接続または削除を行います。 |
log | カスタム ログをログ ファイルに追加します。 |
delegate | PIPE を使ってリモート システム上の別の Kazuar インプラントにコマンドを送信します。 |
eventlog | Windows のイベント ログ エントリーを取得します。 |
get | 指定されたディレクトリーからファイルを Kazuar の C2 サーバーにアップロードします。対象ファイルは、変更、最終アクセス、作成のタイムスタンプに基づいて選びます。 |
autoruns | 感染マシン内でソフトウェアを永続化させられるかどうか、さまざまな可能性をチェックします (チェックについては付録で説明)。 |
put | 受信したデータをシステム上の指定されたファイルに書き込みます。 |
regwrite | レジストリー キー/値を設定します。 |
autoslist | Autosの機能の下に作成されたファイル数をリストします。 |
vbs | VBScript を実行します。 |
psh | PowerShell スクリプトを実行します。 |
sleep | Kazuar を指定した時間スリープするように設定します。 |
regdelete | レジストリー キー/値を削除します。 |
timelimit | サーバーからのタスクの時間制限を設定します。 |
dlllist | 指定されたプロセスのロードされたすべてのモジュールを取得します。 |
autosget | Autos の機能で生成されたファイルを C2 に送信します。 |
wmiquery | WMI クエリーを実行します。 |
dotnet | C2 から受信した .NET メソッドを実行します。 |
tasklist | 実行中のプロセス リストを取得します。 |
find | 指定されたディレクトリーを検索し、中のファイルを一覧表示します。攻撃者は、変更、アクセス、作成されたタイムスタンプに基づいてリストするファイルを指定できるようです。 |
peep | 窃視 (Peep) のセクションで解説した窃視機能に関連するコマンドを実行します。 |
forensic | システムに複数のフォレンジック アーティファクトがないかチェックします (付録参照)。 |
kill | 名前またはプロセス識別子 (PID) でプロセスを強制終了します。 |
regquery | レジストリー キーについてのクエリーを実行します。 |
chakra | ChakraCore を使って JavaScript を実行します。 |
http | 細工した HTTP リクエストを作成します。 |
pipelist | 特定マシンのオープン パイプ リストを取得します。 |
jsc | JavaScript を実行します。 |
wmicall | WMI メソッドを呼び出します。 |
autosdel | Autos の機能で作成したファイルを削除します。 |
del | 指定したファイルまたはフォルダーを削除します。この削除ではフラグを 1 つ指定できるようになっています。このフラグにより、ランダム データでファイルを上書きしてからファイルを削除し、攻撃者がファイルを安全に削除できるようにしています。 |
nbts | NetBIOS リクエストを作成します。 |
copy | 指定されたファイルを指定された場所にコピーします。攻撃者は、宛先ファイルが既に存在する場合、それを上書きできます。 |
upgrade | マルウェアのアップグレードをダウンロードします。 |
cmd | cmd.exe 経由でコマンドを実行します。 |
unattend | さまざまな Windows 構成またはクラウド アプリケーションのクレデンシャルに関連するファイルを盗みます (ファイルの全リストは付録を参照)。 |
autosclear | Autos のファイルのログリストをクリアします |
表 2. Kazuar がサポートする C2 コマンド
クラウド、ソース管理、メッセージング アプリのクレデンシャル窃取
Kazuarは、C2 から steal、unattend といったコマンドを受け取ることにより、感染コンピュータ内のさまざまなアーティファクトからのクレデンシャル窃取試行機能を持っています。
これらのアーティファクトには、よく知られたクラウド アプリケーションが複数含まれています。
Kazuar は、これらのアプリケーションのクレデンシャルを含む機微ファイルの窃取を試みる可能性があります。Kazuar が狙うアーティファクトには、図 13 に示す Git SCM (開発者の間で人気のあるソース管理システム) や Signal (プライベート インスタント メッセージング用の暗号化メッセージング サービス) などが含まれます。アーティファクトの完全な説明は付録を参照してください。

包括的なシステム プロファイリング
Kazuar が最初に一意な solver スレッドを生成するさい、これが最初に自動実行するタスクは、対象システムの広範な情報収集とプロファイリングです。Kazuar の作者はこれを first_systeminfo_do と命名していました。このタスクのなかで Kazuar は感染マシンに関する広範な情報を収集して C2 に送ります。この情報には、オペレーティング システム、ハードウェア、ネットワークに関する情報が含まれます。こちらの付録に攻撃者が収集した全内容を含めてあります。
Kazuar はこのデータを info.txt ファイルに保存し、実行ログを logs.txt ファイルに保存します。Task Solver のセクションで述べたように、この結果はメモリー上から確認することができます。このケースではこれはアーカイブです (図 14)。

前述の 2 つのテキスト ファイルに加えて、このタスクの一環として、このマルウェアはユーザーの画面のスクリーンショットを取得します。図 15 は、これらすべてのファイルが 1 つのアーカイブに zip 圧縮されるようすを示したものです。この後で暗号化されて C2 に送信されます。

自動化されたタスク (Autos) の作成
Kazuar には、感染マシンからの情報収集のため、指定間隔で実行される自動タスクを設定する機能があります。図 16 は、Kazuar の構成に記載されているこの機能の例を示したものです。
これらの自動化されたタスクには次のものが含まれています。
- システム情報の収集 (包括的なシステム プロファイリングのセクションで説明)
- スクリーンショットの撮影
- クレデンシャルの窃取 (詳細は付録を参照)
- フォレンジック データの取得 (付録参照)
- autorun (自動実行) データの取得 (付録参照)
- 特定フォルダーからのファイルの取得
- 指定フォルダーからのLNKファイルの一覧取得
- MAPI を利用した電子メールの窃取

アクティブ ウィンドウの監視 (Peeps: 窃視)
Kazuar では攻撃者が「窃視 (peep) ルール」と呼ぶルールを構成内に設定可能です。デフォルトの Kazuar にはこれらのルールは設定されていませんが、マルウェアのコードによれば、この機能により、攻撃者は指定したプロセスのウィンドウを監視できるようです。これにより、攻撃者は侵害したマシン上で関心の対象となるユーザーのアクティビティを追跡できるようになります。
コマンド & コントロールとの通信
HTTP
Kazuar は、前述の分析対策チェックに加え、C2 サーバーとの通信チャネル確立前に構成データの送信時間間隔をチェックしています。このチェックには、週末にデータを送信する必要があるかどうかの決定が含まれます。
最初の通信時に、Kazuar は収集したデータ (「包括的なシステム プロファイリング」のセクションで説明) を XML 形式で送信し、新たなタスクとともに XML で構造化された応答が返されることを期待しています。図 17 にその HTTP リクエストを示します。
Kazuar はハードコードされた値 169739e7-2112-9514-6a61-d300c0fef02d を文字列に型キャストし、Base64 でエンコードしたものをクッキーとして使用します。

Kazuar は XML 用のキー名を生成し、Base64 でコンテンツをエンコードしてから C2 に送ります。この XML の内容には次のものが含まれます。
- result ファイルの内容を暗号化したもの
- 結果の識別子
- 擬似乱数による 4 バイトの数値。おそらくは別の種類の識別子か
- マシンの GUID に基づいて擬似乱数で生成した値を含む配列
- ハードコードされた GUID の接続文字列 169739e7-2112-9514-6a61-d300c0fef02d
- そのマシンの一意な GUID
名前付きパイプを使用した通信
C2 との直接 HTTP 通信に加え、Kazuar はプロキシーとして機能し、感染ネットワーク内にある Kazuar エージェント間でコマンドを送受信する機能を備えています。このプロキシー通信は名前付きパイプ経由で行われています。そのさいは、マシンの GUID に基づいて名前を生成します。
Kazuar はこれらのパイプを使って、さまざまな Kazuar インスタンス間のピア・ツー・ピア通信を確立し、それぞれをサーバーまたはクライアントとして構成します。この名前付きパイプ通信は、表 3 に示すリモート リクエストをサポートしています。
リモート リクエスト | Kazuar のレスポンス | 説明 |
PING | PONG | 現在のインスタンスのプロセス情報を含むメッセージを返す |
TASK | RESULT | 受信したタスクを開始し、結果を返す |
LOGS | ERROR | エラー ログを取得する |
表 3. 名前付きパイプを使う Kazuar のリクエストとレスポンス
解析対策のチェック
Kazuar は一連の入念なチェックに基づく複数の解析対策技術を使い、自身が解析対象になっていないかどうかを確認しています。この作者らは監視の目がなければ続行し、デバッグや解析の対象となっている場合はアイドル状態のまま、全 C2 通信を停止するように Kazaur をプログラムしています。これらのチェックは、3 つの主要カテゴリー、ハニーポット、分析ツール、サンドボックスに分類できます。
ダンプ対策
Kazuar はスタンドアロン プロセスとしての実行を想定せず、別のプロセス内にインジェクトされて動作するようにできています。したがって、インジェクト対象のプロセスのメモリーからはコードをダンプできることになります。これを防ぐため、Kazuar は .NET の強力な機能である System.Reflection 名前空間 を使っています。これにより、Kazuar はアセンブリーやメソッドなどに関するリアルタイムのメタデータを収集できるようになります。
Kazuar は antidump_methods の設定が true に設定されているかどうかをチェックした後、ジェネリックな .NET メソッドを無視してカスタム メソッドへのポインターをオーバーライドすることで、(Kazuar が残すログ メッセージの通り) これらのメソッドを事実上メモリーから消してしまいます。これが最終的にリサーチャーによる完全版マルウェアのダンプを防ぎます。
ハニーポットのチェック
Kazuar がまっさきにすることの 1 つが、マシン上で Kaspersky ハニーポットのアーティファクトの存在を探すことです。これを行うさいは、ハードコードされた特定プロセス名とファイル名のリストが使われます。
Kazuar がこれらのファイルやプロセスを 5 つ以上見つけた場合、Kaspersky ハニーポットを見つけたとログに記録します。図 18 はこれらのファイル名を示しています。

解析ツールのチェック
Kazuar はよく使われるさまざまな解析ツール名をハードコードしたリストを持っています。
- Process Monitor
- X32dbg
- DnSpy
- Wireshark
Kazuar は実行中のプロセス リストを調べ、これらのツールのいずれかが実行されている場合、解析ツールを見つけたとログに記録します (付録参照)。
サンドボックスのチェック
Kazuar は既知のサンドボックス ライブラリー名をハードコードしたリストを持っています。これにより、さまざまなサンドボックス サービスに属する特定 DLL の存在をチェックしています。これらのファイルが見つかった場合、Kazuar は自身がラボで実行されているものと判断します (付録参照)。
イベント ログ モニター
Kazuar は Windows のイベント ログからイベントを収集してパースします。図 19 は、Kazuar が次のウイルス対策/セキュリティ ベンダーからのイベントをとくに検索していることを示しています。
- Kaspersky Endpoint Security
- Symantec Endpoint Protection Client
- Microsoft Windows Defender
- Doctor Web
Kaspersky のハニーポット チェックのときと同じで、これらのセキュリティ製品が被害組織に人気がある、ということで説明がつきそうです。

Kazuar と Pensive Ursa とのつながりの強化
前記の通り、C2 へ最初の HTTP POST リクエストを作成するさい、Kazuar はそのマシンの GUID かハードコードされた GUID の 169739e7-2112-9514-6a61-d300c0fef02d をクッキーとして使い、そのクッキーを文字列に型キャストして Base64 でエンコードしています。
後者の値を文字列の形式 (169739e7211295146a61d300c0fef02d) で検索すると、スイス CERT によるレポート [PDF] がヒットします。このレポートは、Pensive Ursa によって実行された RUAG に対する攻撃を分析したものです。RUAG Holding は、航空宇宙・防衛セクターのスイス企業です。
くわえてハイブリッド AES + RSA 暗号化スキームや、そのほかの機能面での明らかな類似点を含め、Kazuar の tasks や results といったアーキテクチャは、まさに Carbon の手口のイメージそのものです。これはこのスイス CERT のレポートでも別の ESET によるレポートでも言及されています。Carbon もはやり第 2 段階のバックドアで、これまで Pensive Ursa によるものであると何度も指摘されています。そのコードが Snake からのフォークであることは CISA も言及しています。
これらの調査結果は、複数の CERT による報告とともに、Kazuar は Carbon の後継ではないかという以前の Unit 42 の推測をさらに裏付けるものとなっています。最も重要なのはこれらの発見が Kazuar の Pensive Ursa への帰属を強化するものだということです。
結論
私たちは野生で検出された最新の Kazuar マルウェア亜種を調査しました。注目すべき機能は次のとおりです。
- 堅牢なコードと文字列難読化技術
- パフォーマンス向上のためのマルチスレッド モデル
- メモリー内、送信中、ディスク上を問わず、Kazuar コードを解析から保護し、そのデータを隠すために実装された一連の暗号化スキーム
前述の機能はすべて、Kazuar バックドアに高レベルのステルス性を提供するように設計されています。このマルウェアのそのほかの注目すべき特徴は次のとおりです。
- 解析対策機能
- 広範なシステム プロファイリング機能
- クラウド アプリケーションに的を絞ったターゲット設定
このバージョンの Kazuar は 40 を超える一連の個別コマンドもサポートしていましたが、そのうち半分はこれまで文書化されたことがありませんでした。
セキュリティ担当者と防御担当者の皆さまには、本稿をお読みいただき、本稿で提供した情報を利用して現在の検出・防止・ハントの実践を強化し、組織の全般的なセキュリティ態勢強化に努めていただければと思います。
Cortex XDR の検出と防止
図 20 は、Cortex XDR が Kazuar を検出して実行を阻止したようすを示したものです。技術分析セクションで詳細に解説したとおり、Kazuar はデフォルトではコードを explorer.exe に挿入します。検出モードで動作するように構成した場合、Cortex XDR はインジェクトされた explorer.exe からの悪意のあるアクティビティを検出します (図 20)。

Kazuar がプロセス インジェクションや WMI 実行のために行ったネイティブ コードの実行や、explorer.exe が実行したおよそ explorer.exe らしからぬ不審な活動の両方が、複数の警告をトリガーしています。図 20 に示すアラートを含むアラートの詳細を以下の図 21 に示します。

また、図 22 は、Kazuar が設定やログを保存するために作成したディレクトリーやファイルの詳細を示しています。

最後に図 23 は、防止モードにした Cortex XDR が Kazuar マルウェアの実行可能ファイルを防止し、それに応じたアラート ポップアップをトリガーするようすを示したものです。

保護と緩和策
Cortex XDR プラットフォームは、前セクションのスクリーンショットで説明した実行フローを検出・防止します。
従来の検出に加え、独自の SmartScore エンジンが、セキュリティ調査方法や関連データを機械学習によるハイブリッド リスク スコアリング システムへと変換します。図 24 は、Kazuar の亜種と、本稿で詳しく解説した関連インシデントが SmartScore で 100 点中 97 点を獲得したようすを示したものです。

パロアルトネットワークス製品をご利用のお客様は、弊社の製品・サービスにより、本グループに関連する以下の対策が提供されています。
Cortex XDR と XSIAM は以下を含む複数のデータ ソースからユーザー アクティビティを分析することで、ユーザーやクレデンシャルに基づく脅威を検出します。
- エンドポイント
- ネットワーク ファイアウォール
- Active Directory
- ID およびアクセス管理 (IAM) ソリューション
- クラウド ワークロード
Cortex XDR と XSIAM は機械学習を使って長期にわたるユーザー アクティビティ行動プロファイルを構築します。Cortex XDR と XSIAM は、過去のアクティビティやピアー アクティビティ、期待される同者の行動と新しいアクティビティとを比較することにより、クレデンシャル ベースの攻撃を示唆する異常なアクティビティを検出します。
さらに Cortex XDR は本稿で取り上げた攻撃に関連し、以下の保護も提供しています。
- 既知の悪意のあるマルウェアの実行を防止するほか、ローカル分析モジュールにもとづく機械学習と Behavioral Threat Protection によって未知のマルウェアの実行も防止します。
- Cortex XDR 3.4 から利用可能になった新たな Credential Gathering Protection を使い、クレデンシャルを収集するツールや技術から保護します。
- Anti-Exploitation モジュールと Behavioral Threat Protection を使い、 ProxyShell や ProxyLogon 含む、さまざまな脆弱性のエクスプロイトから保護します。
- Cortex XDR Pro と XSIAM は振る舞い分析により、クレデンシャル ベース攻撃を含む、エクスプロイト後のアクティビティを検出します。
- Advanced Threat Prevention セキュリティ サブスクリプションを有効にした次世代ファイアウォール (NGFW) は、Threat Prevention シグネチャー 86805 でマルウェアによる C2 トラフィックのブロックを支援します。
- Advanced WildFire はこの新たな Kazuar の亜種の発見を受けて機械学習モデルと分析手法の見直しと更新を行いました。パロアルトネットワークスのポートフォリオにある複数の製品が、Advanced WildFire を活用して Kazuar の亜種やそのほかの脅威に対するカバレッジを提供します。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらのフォームからご連絡いただくか、infojapan@paloaltonetworks.comまでメールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。
- 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
- EMEA: +31.20.299.3130
- APAC: +65.6983.8730
- 日本: (+81) 50-1790-0200
パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。
IoC (侵害指標)
Kazuar SHA256
- 91dc8593ee573f3a07e9356e65e06aed58d8e74258313e3414a7de278b3b5233
コマンド & コントロール (C2) サーバー
- hxxps://www.pierreagencement[.]fr/wp-content/languages/index.php
- hxxps://sansaispa[.]com/wp-includes/images/gallery/
- hxxps://octoberoctopus.co[.]za/wp-includes/sitemaps/web/
RSA キー
- <RSAKeyValue><Modulus>7ondEZo8ZjYh+FP4h3PgJBU/yTlO+g8ZbCF0wx8eocnqxLS4YWI9hG3SI2hlEBz6J4vvxPCrs/jazekolaZLQnbyOCyH53I+We+x32d2lUlXrtZA/0oJa39tW2t2NsUG/xPqsY3rBCuhi28hl30XH8Arn2/u9Jxl1G9dNxFDdVxk9ePjlHecdAtWCa9vmC4HY0Wlqyhd0+hJfvKCoKLsHuCyl4b/c343VVVTFubYNSFJMQnpIKsYQDRKtRszQuS1Ls+obyOr+0cbAmnKb8twTsq862pA6MzxRr16/4/1nyrNKuDS+OvPfv3tgvssybtGwN8D8Qac7O1FM722Nft16iis9WaoFuXCwP/LCkaetQMjEKN07H6ESHMnUc+JDvINIspAAKK8fRwtTcWKrG2bh/Dwtneq/9L1Pv2cKtpQAUlxVfQX5I/mtATEHIMcPOvNWRUqmSssDHEJiZDFKS45SjoG4qXs536xwbZ4k6lmHUUOVzkmCc71HooxRdSYx1M7Vqvou1Mi39O6vJouL2aTO6ymbGdnerKavDsgBSa2HKRbP2Nym6Ud4WAhiaqnPCWGnJz7l+4Hs++OcG2p+Ct1oXRecLK6Zy/n9moTZeijLdqJwUh90Bht8V8STz/vNtrhz++Do6DsDssENkOHXeUeRCqCmDdS3sqkxQnGAG3tGvc=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
- <RSAKeyValue><Modulus>pyR0/srVS0gOZbNdK3iK+GvekQVkBq8brOVCuN/XcCz4WLJod9GhivDYrDtMXF6ZMGHKa2zAcQ+v2vltYW3X2BYCZ1sblEznfIk+oHs+lesblfHVyPPXDcTLLf5IUuGE/dzeSpLhlWiFT/4MyeMLzU8QexpRkBn0qJkk5xWU0D09DN0SaNzA8E4grU61aaul5iNRYMO+qLXmtIJhrjUrnHNu7ZnZ+AQtc19Dhne1hciH4aj00HRLXsofWGWsELEhZv92cnQ0Rf9n00EGB591zDR8gAt3T5sSTQvjMGWOBHusfGV4ytmchmQWZ8QY7Fp4EPgn8vM48OR2z13qo4YSediAt9Af+YKGoPu2PU3szx08UwBZRz4cyYZB3zcFB8NxCx7Gki2rS5bYx1Z1cG/kU+Ri2gXYoCHgOz8umr+PDB+21V1pnmStxzWAdR7mK0e663LMxxAcZWjEArbt/BcIiZAkFsyoq+NJbuKTR2RYAW+4DXbxFQeGKnFBgle3u9ktcYXWqgJ8/rvs920rGf9k3br3I+2MtzrWglhRi/WkAmTrEIL4i1id0M0askl0YBHlzU9+Bgv2y/VsLH2UKQlp+owxGm1jequxwGpZfwxmWAMATe8L2qctVdXEOfT7Ue67AsVjkP/VmhbhGDO8zt38trylUhWnpUeYdkigg9Nxs1k=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>
追加リソース
- Targeted Turla attacks (UAC-0024, UAC-0003) using CAPIBAR and KAZUAR malware [English version] – CERT-UA (Ukraine)
- Kazuar、APIを使うマルチプラットフォーム対応のスパイ活動型バックドア – パロアルトネットワークス Unit 42
- Researchers Find Links Between Sunburst and Russian Kazuar Malware – The Hacker News
- Nation-state Turla resurfaces with a Sophisticated RAT – Cyberint (PDF)
- Guid Struct (System) – Microsoft Learn
- Technical Report about the Malware used in the Cyberespionage against RUAG – Swiss GovCERT
- Turla renews its arsenal with Topinambour – Securelist, Kaspersky
- Hunting Russian Intelligence “Snake” Malware – Cybersecurity Advisory, CISA
- Indicator Removal: Timestomp, Sub-technique T1070.006 - Enterprise – MITRE ATT&CK
- Swallowing the Snake’s Tail: Tracking Turla Infrastructure – Recorded Future
- Carbon Paper: Peering into Turla’s second stage backdoor – WeLiveSecurity, ESET
- Carbon, Software S0335 – MITRE ATT&CK
- 脅威グループの評価: Turla (別名 Pensive Ursa) – パロアルトネットワークス Unit 42