脅威リサーチ

ウクライナ軍関連のExcelファイルによる多段階型Cobalt Strikeローダーの配信

投稿者 FortiGuard Labs | 2022年12月27日

FortiGuard Labsは、現在も続いているロシア・クライナ戦争のいずれか一方の陣営を標的にしたサイバー攻撃が増加していることを確認しました。これらの攻撃は、この戦争のサイバー戦略の一環かもしれませんし、日和見主義の脅威アクターが悪質な目的をさらに推し進めるために、戦争を利用しているだけかもしれません。

FortiGuard Labsは先日、ウクライナ軍人向けの給与計算ツールを偽装した不正なExcel文書を発見しました。本ブログでは、この文書の技術的な詳細を検証します。このExcel文書は、トリガーされると検知回避型の多段階ローダーを実行し、最終的には被害者のデバイスにCobalt Strike Beaconマルウェアを読み込みます(図1)。

図1:感染チェーンの概要

初期攻撃ベクトル:マクロが含まれたExcel

この攻撃は、不正なマクロコードが含まれたExcelファイル(XLSM)が読み込まれるところから始まります。ファイルはウクライナ軍人の給与を計算するスプレッドシートツールに偽装されています(図2)。例によって、文書はユーザーを騙してマクロの実行を有効にさせようとします。これはおそらく、セルのコンテンツを自動入力するためです。マクロはsumpropuaとして参照されます。これは、ウクライナ語の「сума прописом UA」のラテン語訳であるSuma Propisom UAの省略形です。これは計算書類を表す古い用語で、その書類には支払合計金額を文字で記入する必要があります。Excelでは金額から文字への変換は簡単ではないため、このタスクにはマクロを使用するのが一般的です。

図2:不正なXLSMファイルのビュー

VBAの分析

VBAコードを開いてまず気づくのは、実際のコードが始まる前に大量の空白が挿入されており、一見すると空の文書のように見える点です。下方向にスクロールすると、不正な関数であるSUMMPROPIS2(図3)が現れます。この関数は、Workbook_Open()関数を介してファイルが開かれると自動的に実行されます。さらにこの文書は、複数のセルからこの関数を参照して実行しようとします(図2の数式バーを参照)。この場合も、ファイルが開かれると関数がトリガーされます。したがって、ファイルを開いたあと、マルウェアが複数回実行されることになります。

図3:金額を文字に変換するコードに隠された不正な関数呼び出し(赤い矢印)

このVBAコードには単純な難読化技術が使用されています。例えば、静的分析を遅らせるために、関数や変数名が判読しにくくなっています。また、埋め込みの不正バイナリなどの重要なデータは、16進数文字列としてエンコードされています。

主要な不正関数であるOpenModuleは、以下の機能を実行します。

  1. 16進数文字列から不正バイナリをデコードし、%AppData%\Microsoft\fhasbqwn.dllに保存する。
  2. %Temp%\jdbsabdqbsmnqwdssad.lnkという名前のWindowsショートカット(.LNK)ファイルを作成する。.LNKファイルの目的は、不正なDLLのエクスポート関数DllUnregisterServerを実行することです。一般に、この関数はシステムからDLLの登録を解除するために使用されます。しかしこの場合は、DLLの不正な関数が実行されることになります(図4)。
図4:不正なDLLを実行するショートカットファイル

3. 以下を使用してショートカットを実行する。

RunDLL32.EXE shell32.dll,ShellExec_RunDLL  %Temp%\jdbsabdqbsmnqwdssad.lnk(図5の黄色で表示された部分)。これはWindowsショートカットの手動でのダブルクリックに相当します。これにより、第1段階のローダーが実行されます。

図5:部分的に難読化解除されたVBA関数。ショートカットを作成、実行する。

コーディングエラーによる実行回数の増加

前述したように、Excelファイルに埋め込まれたペイロードは複数回実行されていました。通常、脅威アクターが同じペイロードを何度も配信することはありません。システムで不要なノイズが発生する可能性があるからです。そこで、私たちはさらに分析を進め、複数回実行の理由を探りました。

5280行にあるOpenModule関数(図6)のコードスニペットをよく見ると、Dir関数が呼び出されており、最初の引数にはIEHistoryフォルダへのフルパスが指定されています。このDir関数を使用して、2番目の引数で指定された属性と一致するフォルダが存在するかどうかがチェックされます。一般的に、感染時にマルウェアが作成したファイルまたはディレクトリのチェックは、再感染や複数回の実行を防ぐために行われます。これはマルウェア開発者の意図であると考えられます。

図6:OpenModule関数の奇妙なコード

しかし、ここでは2番目の引数が未初期化変数であるため、Dir(PathName, vbNormal)と同じ意味を持ちます。この関数は、IEHistoryがディレクトリではなくファイルとして存在する場合にのみ、空白以外の文字列を返し、それによってマルウェアの完全なルーチンが複数回実行されます。代わりにvbDirectoryが使用されていれば、チェック後にIEHistoryディレクトリが作成され、後続のチェックでルーチンが繰り返し実行されることはなかったでしょう。

第1段階のダウンローダー

第1段階のローダーは、シェルコマンドC:\Windows\System32\regsvr32.exe /u /s “\%AppData%\Microsoft\fhasbqwn.dll"によって実行されます。/sオプション指定すると、サイレント実行が可能になり、コードの実行後にWindowsメッセージボックスが表示されなくなります。/uオプションを指定すると、DLLのエクスポート関数DllUnregisterServer(図7)が実行されます。

図7:第1段階のダウンローダー用にエクスポートされた関数

分析を妨害するために、このDLLはConfuserEx,で保護されています。ConfuserExは.NETバイナリ専用で、オープンソースの難読化ツールです(図8)。

図8:難読化されたDLLの関数(dnSpyで表示)

次に、ローダーは自身を%Temp%\kbdlisus.dllに移動し、シェルコマンド「C:\Windows\System32\rundll32.exe %Temp%\kbdlisus.dll,DllCanUnloadNow」を実行して、2番目にエクスポートされたDllCanUnloadNow関数を実行します。エクスポート関数DllCanUnloadNowは、特定のHTTPヘッダーを使用して、hxxps://ellechina[.]online/01_logo_HLW-300x168[.]jpgから一見無害なJPEG画像ファイル(図9)をダウンロードします。

図9:ダウンロードされたJPG(画像ビューアで表示)

しかし詳しく調べてみると、オフセット0x16D23で、画像の終了を示すJPEGトレーラーの直後に余分なバイナリデータ(ファイルオーバーレイと呼ばれる)が見つかりました(図10を参照)。このオーバーレイには、暗号化され圧縮された第2段階のローダーが含まれています。

図10:JPEG画像トレーラー(赤)の後ろにあるオーバーレイの抜粋(緑)。第2段階のローダーが含まれている。

このマルウェアは、AES(Advanced Encryption Standard)のCBCモードを使用し、ハードコードされた鍵と初期化ベクトル(IV)を指定してオーバーレイを復号します。得られたデータはDEFLATEアルゴリズムを使用して解凍されます。こうしてsdafsfdpieowrfb.exeという内部名を持つもう一つの.NETバイナリ(exe)が取得されます。このバイナリもConfuserExで保護されています。

この実行ファイルは、Assembly.Load()を使用して新規モジュールとして読み込まれ、文字列配列引数に「1ffawf」と「afgawkgo」を指定したAssembly.EntryPoint.Invoke()を使用してメモリ内で直接実行されます。

第2段階のローダー

このサンプルは、ブラックリストに登録された名前を格納しており、そのいずれかのプロセスが実行されている場合は処理を終了します。チェック対象のプロセスは、Avast Antivirusに関連するプロセスと、Process ExplorerやProcess Hackerなどの一般的なマルウェア分析ツールです。ローダーは、第1段階と同じくAESで暗号化されDEFLATEで圧縮された第3段階のローダーのDLLを自身から抽出し、%AppData%内にあるいずれかのディレクトリにドロップします。ローダーはこのDLLに、%AppData%から無作為に選んだサブディレクトリの名前を付けます(Adobe.dll、Microsoft.dllなど)。

次に、スケジュール済みタスクを作成します。このとき、名前に「Scheduled」、説明に「NTFS Volume Health Scan」、作成者に「Microsoft Corporation」を指定し、正規のタスクを偽装します。

現在のユーザーがWindowsにログインすると、このタスクはドロップされたDLLをC:\Windows\System32\rundll32.exe %AppData\[RANDOM_DIRECTORY]\[RANDOM_NAME],UiaPatternReleasコマンドを介して実行し、永続性を確保します。

このマルウェアは、スケジュール済みタスクの作成で一般的に使用されるschtasks.exeではなく、タスクスケジューラーのITaskFolder::RegisterTaskDefinition COM関数を使用します。これは、EDRなどのセキュリティ製品からタスクの作成を隠すことを目的としている可能性もあります。EDRは、コマンドライン引数に基づいて、不審な使われ方をしているschtasks.exeを検知することができます。

スケジュール済みタスクの構成を図11に示します。[Hidden(非表示)] のタスク設定では、([View(表示)]メニューから [Show Hidden Tasks(非表示になっているタスクを表示)] を有効にしない限り、タスクスケジューラーのタスクは表示されません。

図11:スケジュール済みタスクの構成

マルウェアは新規作成されたタスクを実行し、第3段階のローダーを起動します。第2段階のローダーを使用せずに、スケジュール済みタスクを介して第3段階のDLLを間接的に実行することで、攻撃チェーンの再構成はさらに難しくなっています。なぜなら、どのプロセスで第3段階のローダーが起動したかがすぐにはわからないからです。

プロセスインジェクターとCobalt Strikeローダー

前述した2つのローダーと異なり、このDLLはCobalt Strike Beacon用の多段階ローダーであり、C / C++で記述されています。Cobalt Strike Beaconは、他のマルウェアを配信する前に被害者のシステムで足掛かりを作るため、攻撃者が好んで使用するツールです。

DLLは、AESで暗号化された別のローダーを自身から抽出して復号し、休止状態のSearchIndexer.exe(Windows Search用の正規の実行ファイル)のインスタンスを起動します。次に、リモートスレッドのインジェクションを介してローダーをインジェクションし、実行します。

SearchIndexer.exeの内部では、ローダーが継続的に次の段階のDLLをメモリから直接抽出して実行したのち、最終的なCobalt Strike Beaconペイロードを実行します。

FortiGuard Labsがメモリダンプから構成を抽出して解析した結果、以下に示すBeaconのCobalt Strike Team Server(C2)のURLが判明しました。

 hxxps://pedaily[.]link/daashbooard/managgemment/oknz05PqOlqLtMGB/tzJGhpVp and hxxps://pedaily[.]link/daashbooard/managgemment/GCLwJmax/KFKcpjlf.

結論

このマルウェア攻撃は、脅威アクターがどのように現実の出来事を利用し、ユーザーを騙してセキュリティを低下させ、被害者のシステムにマルウェアを配信し実行し続けているかを示しています。この攻撃は、多段階ローダーに複数の一般的な難読化および検知回避の技術を組み合わせることで、検知を妨害し、分析を複雑にしています。

注目すべき点は、FortiGuard Labsがオーバーレイを調査する中で、さまざまな暗号化ペイロードが含まれたJPEGファイルを収集したことです。これは、脅威アクターが潜在的被害者に特定のペイロードを配信している可能性を示唆しています。その場合、被害者のシステムで足場を確保することを目的としたCobalt Strike Beaconが配信されます。これにより、脅威アクターはマルウェアを自由に選択して配信することが可能になります。

FortiGuard Labsは、今後もこの攻撃のさらなる進捗を監視し続けます。

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

FortiGuard Labsは、この攻撃に使用されるファイルに以下のアンチウイルスで対応します。

  • VBA/Agent.CSW!tr
  • MSIL/Agent.FGLT!tr.dldr
  • MSIL/Agent.FGLT!tr
  • W32/Cobalt.FGLT!tr
  • Data/Agent.FGLT!tr

FortiGuardアンチウイルスサービスは、FortiGateFortiMailFortiClient、およびFortiEDRでサポートされています。これらの各ソリューションには、Fortinetアンチウイルスエンジンが含まれています。したがって、これらの製品をお使いのお客様は最新の機能で保護されています。

FortiGuardコンテンツ無害化(CDR)サービスを使用して、不正なExcel文書を無害化できます。

Webフィルタリングのクライアントは、この攻撃における既知のネットワークIOCをすべてブロックします。

FortiGuard Labsは、Cobalt Strikeに対応したBackdoor.Cobalt.Strike.Beacon IPSシグネチャを提供します。

FortiGuard IPレピュテーションおよびアンチボットネットセキュリティサービスは、フォーティネット分散ネットワークからの不正送信元IPデータを集約し、これらの攻撃をブロックします。この分散ネットワークでは、脅威センサー、CERT、MITER、協力関係にあるセキュリティ企業、その他のグローバルソースが連携し、悪意ある送信元に関する最新の脅威インテリジェンスを提供します。

頻繁なシステム停止、日常業務への損害、組織の評判への影響、個人情報の望ましくない紛失や公表などを考えると、すべてのアンチウイルスおよびIPSシグネチャを最新の状態で維持することが重要です。

組織においては、フォーティネットが無償で提供しているNSEトレーニング:NSE 1 – 情報セキュリティ意識向上の受講をエンドユーザーに推奨することもお勧めします。このトレーニングには、インターネットの脅威に関するモジュールが含まれ、エンドユーザーはさまざまなタイプのフィッシング攻撃を識別して自身を防御する方法を学習できます。

IOC(Indicators of Compromise:侵害指標)

ファイル

4cedec3e1a2f72a917ad9a59ebe116ed50c3268567946d1e493c8163486b888b (XLSM)

c0c455cd3e18be14d2e34cf4e3fb98e7ab0a75ef04b6049ff9f7b306d62704b8 (1st stage downloader - fhasbqwn.dll)

2927794d7c550c07303199752b8226f197d7ef497d04cf038859f95b60edc9ce (JPEG with encrypted payload overlay)

b03c9f7823810e3eeef3c0b1d6c00da4f16fdc2ced92f97f78e5676d0989d9b3 (2nd stage loader - sdafsfdpieowrfb.exe)

de8c789ef2e1da81182a7529e7b42adf2984cd6e70b02e60fd770ebe658086ae (Cobalt Strike loader)

ファイル名

%Temp%\jdbsabdqbsmnqwdssad.lnk
%AppData%\Microsoft\fhasbqwn.dll
%Temp%\kbdlisus.dll

ネットワーク

hxxps://ellechina[.]online/01_logo_HLW-300x168[.]jpg
hxxps://pedaily[.]link/daashbooard/managgemment/GCLwJmax/KFKcpjlf
hxxps://pedaily[.]link/daashbooard/managgemment/oknz05PqOlqLtMGB/tzJGhpVp