ナビゲーションをスキップする
BlackBerry ThreatVector ブログ

ウクライナを標的とする、マルチステージ型ワイパーマルウェア WhisperGate

本ブログ記事は、2022年2月3日に米国で公開されたBlackBerryのブログ記事の抄訳版です。原文はこちらからご覧頂けます。

 

ウクライナ地域で収まることなく続く緊張状態を考えると、同国の政府、非営利組織、IT 組織を標的にしようとする悪意の脅威アクターが現れてもだれも驚かないでしょう。ランサムウェアを装った、悪意のあるマルチステージ型ワイパーである WhisperGate の発見報告が2月初旬の時点で急速に増加していました。

前回のブログでは、この脅威全体の概要を紹介しましたが、今回の記事では、このマルウェアのステージ 3 とステージ 4 について詳しく説明します。このマルウェアの開発者は、リバースエンジニアリングの妨害と静的解析ツールの効果的な動作の阻止のために、想定外でおそらくは無計画な措置をとっています。ここでは、この措置を重点的に取り上げます。この措置の最終的な目的は、解析を遅らせ、より広い範囲に被害を及ぼすための時間を攻撃者が稼げるようにすることにあります。

 

デモ動画:BlackBerry vs WhisperGate

 

WhisperGate:ステージ 3 とステージ 4 の詳しい調査

前回の投稿で取り上げたように、WhisperGate のステージ 3 は、入念に難読化された C# バイナリであり、ウイルス対策ソフトウェアを無効化し、最終ステージであるステージ 4 のペイロードを開始します。その DLL には、次の 3 点のリソースが埋め込まれています。

  • 78c855a088924e92a7f60d661c3d1845
  • 7c8cb5598e724d34384cee7402b11f0e
  • Unicode<'\u2005\u2005\u2009\u2008\u2001\u2007\u2009\u200b\u200a\u2005'>

この 1 番目のリソースは、最終ステージ 4 のワイパーペイロードを収めてエンコードされた .NET.DLL です。2 番目のリソースはコードフローの制御に使用され、DLL ローダーの目的をさらにわかりにくくしています。当社の解析では、このリソースは 256 バイトの配列であることのほか、難読化を解除された関数で "getter" 関数を上書きしたカスタムストリームオブジェクトとして初期化されていることがわかっています。

3 番目のリソースは当初、名前がないように見えましたが、解析後、Unicode 文字を使用して自身を難読化していることが明らかになっています。この点は、他のバイナリに対する処理とまったく同様です。

このリソース自体は、難読化ツール Eazfuscator によって文字列のエンコードの過程で使用されます。各文字列は以下に示す getter 関数を使用して解決されます。この関数は、このデコードされた文字列がディレクトリにあれば、その文字列を返します。その文字列がディレクトリになければ、リソースの文字列をデコードし、後で取得できるようにディレクトリに保存します。

図 1 - Eazfuscator の文字列取得関数

ステージ 3 の DLL ローダーは、自身に管理者権限があることを確認すると起動します。管理者権限がない場合は、次のコマンドを実行することで自身の昇格を試みます。このコマンドによってユーザーアカウント制御(UAC)ダイアログが開きます。標的となったマシンを使用しているユーザーには、プログラムによる変更が発生すること、この変更はプログラムを実行するうえで必要であることが、この警告によって通知されます。

C:\Windows\System32\cmd.exe /K Start <filePath> & EXIT

管理者権限で実行されているこの DLL によって、VBScript である "Nmddfrqqrbyjeygggda.vbs" が Temp ディレクトリに置かれ、実行されます。次のように、このスクリプトによって、標的とする論理ドライブが Windows Defender の除外リストに追加されます。

Powershell - CreateObject(""WScript.Shell"").Run ""powershell Set-MpPreference -ExclusionPath 'C:\'"", 0, False

リソース 78c855a088924e92a7f60d661c3d1845 には、念入りにエンコードされたアセンブリが収められています。このデコード関数は、次のように RC4 と簡単な XOR ループの組み合わせを使用している点が異例です。

図 2 - リソースのデコード関数

この関数では、まず Eazfuscator を使用して次の base64 が解決されます。

"LKf/VjV6KlpzXaFkzHOLvld5ylJ0zPjQTgiWG1o9rCJ5kQ465LHVFLsit0agXgkz11QXK84TPX621d95bON1QtpnAFEoPgSEag=="

Base64 デコードで得られたバイト配列は、別のカスタムエンコード関数に渡され、そこで 8 バイトキーを使用して XOR デコードされます。このキーは、TinyCrypt を使用して定数を復号する "GetPemBaseLong" 関数の内部で解決されます。

この関数を以下に示します。

図 3 - カスタム配列を並べ替える関数

この関数によって入力配列に得られる結果を以下に示します。この結果は RC4 キー初期化プロセスに渡されます。

図 4 - RC4 関数に渡される最終的なバイト配列

 

カスタムエンコードループ

このマルウェアの開発者は、リソースの暗号化に RC4 のみを使用するのではなく、独自のカスタムエンコードループを作成する方法をとっています。このループでは、開発者独自の 8 バイトキーの組み合わせが使用され、入力の 32 バイトごとに、1 バイトの RC4 疑似乱数を生成するアルゴリズムが使用されています。この措置は、復号ルーチンを過剰に複雑化することによってリバースエンジニアリングを妨害すること、または静的解析ツールで標準の暗号化関数が特定されないようにすることを目的としたものと考えられます。

すでに触れたように、この復号アセンブリは動的にロードされ、いずれも GZip 圧縮された 2 つの補足リソースである "AdvancedRun" と "Waqybg" を含んでいます。この DLL ローダーでは、まず AdvancedRun リソースが圧縮解除され、得られたファイルが同じ名前の実行可能ファイルとして Temp ディレクトリに保存されます。

AdvanceRun.exe は、さまざまな設定でプログラムを実行できるようにするツールであり、Nirsoft から無料で入手できます。ここでは、コマンドラインインターフェイスで 2 つのコマンドが実行されます。具体的には、"/RunAs 8" フラグを使用して、TrustedInstaller グループでこれらのコマンドが実行されます。

1 番目のコマンドが実行されると、Windows Defender でサービスコントロールツールが使用されなくなります。このツールは System32 ディレクトリにあります。

/EXEFilename ""C:\Windows\System32\sc.exe"" /WindowState 0 /CommandLine ""stop WinDefend""  /StartDirectory """" /RunAs 8 /Run

2 番目のコマンドで PowerShell が使用され、"rmdir" コマンドによってすべての Windows Defender ファイルが再帰的に削除されます。

/EXEFilename ""C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"" /WindowState 0 /CommandLine ""rmdir 'C:\ProgramData\Microsoft\Windows Defender' -Recurse"" /StartDirectory """" /RunAs 8 /Run

Windows Defender が削除されると、DLL ローダーは最後のステージであるステージ 4 のペイロードの実行に移ります。このペイロードは、"Waqybg" リソースの内部に保存されていて、GZip エンコードされているほか、逆のバイト順で記述されています。

この 4 番目のステージのペイロードはディスクに書き込まれません。代わりに、DLL ローダーによって正規のアプリケーションである InstallUtill.exe が Temp ディレクトリにコピーされ、一時停止状態でプロセスが開始されます。ここで、悪意のあるコードが再起動の前に正規のプロセスに注入されます。

第 4 ステージのワイパー

前回のブログで取り上げたように、この第 4 ステージは、ハードコードされたリストにある拡張子に一致するすべてのファイルを上書きするように設計されています。この機能の中核は破壊的なワイパー機能です。このワイパーによって、0xCC バイトを書き込んだ 1 MB のバッファが作成され、各ファイルに書き込まれます。

一方、各ファイルは wfopen() 関数の "wb" モードを使用して開かれているので、そのファイルの既存のコンテンツは破棄されます。これによって、標的となったファイルは 0xCC バイトが書き込まれた 1 MB のファイルに置き換えられます。この結果が、マルウェア開発者が意図したものなのか、設計上の単なる手違いなのかははっきりしません。いずれにしても、標的となったファイルをワイプする処理は効果的に機能しています。

図 5 - ワイパー 関数

 

まとめ

WhisperGate ワイパーマルウェアの開発者は、その作成に当たって、異例でいくぶん想定外の設計を選択しています。標準的なライブラリと実績のあるライブラリを基本として作成した独自の暗号化機能を実装しています。奇妙でずさんとも思える方法でファイルをワイプしようとしていますが、それが意図されたものかどうかは不明です。

この点に関係なく(また、それが原因といえなくもないのですが)、WhisperGate ワイパーマルウェアには、一般的な犯罪には見られない高度な複雑さが存在しています。このマルウェア作成の第 4 ステージを難読化するために開発者が採用した処理の長さから、この点が特に明らかです。

前回のブログで述べたように、またウクライナとその周辺地域でエスカレートしている地政学的な事件を考慮すると、リスクプロファイルが高い組織では、このブログで紹介した情報を使用して、このグループからの悪意のあるあらゆる活動に対し、積極的な防御態勢をとることを強くお勧めします。

 

・お問い合わせ:https://www.blackberry.com/ja/jp/forms/enterprise/contact-us

・イベント/セミナー情報:https://www.blackberry.com/ja/jp/events/jp-events-tradeshows

・サイバーセキュリティチームによるコンサルティング: https://www.blackberry.com/ja/jp/services/blackberry-cybersecurity-consulting/overview

・BlackBerry Japan:https://www.blackberry.com/ja/jp

The BlackBerry Research and Intelligence Team

About The BlackBerry Research and Intelligence Team

BlackBerry の Research and Intelligence Team は、新たに生じている脅威と持続的な脅威を検証し、セキュリティ担当者とその所属企業のために、インテリジェンス解析を提供しています。