掲載日:2021/01/27

Dridexの一連のトリック:仮装攻撃とコードインジェクション技術の解析

※ 本ブログは、2019年7月29日にBromium Blogにポストされた Dridex’s Bag of Tricks: An Analysis of its Masquerading and Code Injection Techniquesの日本語訳です。

 

  • 2019年7月に観測されたDridexの新しい亜種は、検知を回避するために正規のWindowsシステムプロセスを装っています。 
  • この亜種は、感染のライフサイクル中に5つのコードインジェクション手法を使用します。AtomBombing、DLLオーダー・ハイジャッキング、プロセスハロウイング、PEインジェクション、スレッド実行ハイジャッキングです。
  • これらのコードインジェクション手法は、正規の Windows 実行ファイルに対して使用されています。特定のタスクを実行するために、中断されたプロセスにインクリメンタルな整数値がコマンドラインに供給されます。

 

2019年6月初めのEmotetの活動の小康状態とAZORult以降、Dridexとランサムウェアのキャンペーンが目立つようになりました。2019年7月には、バンキング型トロイの木馬Dridexを配信するフィッシングキャンペーンを観測しました。ペイロードがBromium Secure Platform(現HP Sure Click Enterprise)によって隔離され、マルウェアをキャプチャしたことは、その感染チェーンを分析し、攻撃がどのように機能するかを理解するのに役立ちました。このブログ記事では、検知を回避するために、Dridexが5つのコードインジェクション技術を使用して合法的なWindowsプロセス(MITRE ATT&CKテクニックT1036)として自分自身を偽装する方法を紹介するために、その感染チェーンの各段階を概説します。

ふるまい分析に飛び込む前に、まずマイクロVMの中でこの最新のDridexサンプルを実行し、Bromiumがどのように攻撃を隔離することによってエンドユーザーを保護し、システムの一貫性を維持するのかをデモしてみましょう。

 

DridexをBromiumで実行する

動画は以下の内容を含みます。:

 

  • Bromium Secure Platform(現HP Sure Click Enteprise)は、それぞれのドキュメントを独立したマイクロVMで開きます。
  • Live View(ライブビュー)はアクティブなマイクロVMのリストを表示します。
  • Live View(ライブビュー)でinvoice.docファイルはマイクロVMで開かれているのがわかります。
  • ファイルが閉じられると、マルウェアも含めてマイクロVMが破壊されます。
  • 脅威からあらゆる挙動のフォレンジック情報がキャプチャされ、MITRE ATT&Kフレームワークにマップされます。
  • マイクロVMの中で発生した深刻度の高いアラートの詳細情報が提供されるので、セキュリティチームはマルウェアの行動を調査し、攻撃者の意図を理解することができます。

動画は無音です。

 

ビヘイビア分析

ファイル名:: Invoice.doc  

サイズ:75.5 KB (77312 bytes) 

MD5: 0fe77bc5e76660ad45379204aa4d013c  

SHA1: c338882c64eb012855096e73edfec3c733ea9053 

SHA256: 72da2959520e824a617a5a174b1bc1a8bd6d83daf83eabb5937640f1efa37bcd 

 

2019年7月に観察されたDridex感染ライフサイクル 図1 - 2019年7月に観察されたDridex感染ライフサイクル

 

 

ステージ1 - ダウンローダー

Dridexのダウンローダーは、パスワード123で暗号化されたMicrosoft Word 97-2003のドキュメント(.DOC)として着信しました。これには、2つのVisual Basic for Applications (VBA)マクロサブルーチン、Document_Openとmainが含まれていました。マクロコードの内容を表示するには、Bromium Secure View(現HP Sure Click Secure View)内のMicrosoft WordのVBAエディタで開くことができます。

Document_Openとmainサブルーチン 図2 - Document_Openとmainサブルーチン

 

どちらのサブルーチンも軽度に難読化されていますが、ダウンローダがどのように動作するかを示す多くの文字列は、コードをデバッグしなくても識別できました。図3の左側には、マクロプロジェクトにa0woxmという名前のユーザーフォームが含まれていることがわかります。フォームの内部には、Extensible Stylesheet Language (XSL) スクリプトを含むTextプロパティが埋め込まれています。mainサブルーチンは、フォームからaXtIkNというオブジェクトを作成し、そのTextプロパティを文字列変数aHwPzGに代入します。 その後、aHwPzGを変数agvpxとともにメソッドadWspA8に渡します。文字列変数agvpxは、XSLファイル(C:\\Windows\\Temp\\\aXwZvnt48.xsl)のパスを含みます。メソッドadWspA8は、Scripting.FileSystemObjectからTextStreamオブジェクトを作成し、CreateTextFileメソッドを呼び出して、aHwPzGからファイルaXwZvnt48.xslにデータを書き込みます。

埋め込まれたXSLスクリプトをユーザの%TEMP%ディレクトリ内のファイルに書き込む部分をハイライトしたmainサブルーチン 図3 - 埋め込まれたXSLスクリプトをユーザの%TEMP%ディレクトリ内のファイルに書き込む部分をハイライトしたmainサブルーチン

 

静的検知を回避するために、サブルーチンには、Windows Management Instrumentation Command line(WMIC)コマンドを参照する文字列を反転させたものが含まれていました。StrReverse関数は、マクロの実行中にこれらの文字列を反転させるために使用されます。変数 a5rk9 には値 "wmic os get /format:" が含まれており、これはシェルコマンドを構築するために変数 agvpx と結合されます。

 

  • wmic os get /format: "C:\\Windows\\Temp\\aXwZvnt48.xsl" 
 WMICを使用してXSLファイルを実行するmainマクロのシェルコマンド 図4 - WMICを使用してXSLファイルを実行するmainマクロのシェルコマンド

 

XSLは、XMLドキュメントがどのようにフォーマットされているかを表現するために使用されるCSSに似た機能を持つ言語です。重要なのは、JScriptやVBScriptなどのスクリプト言語をサポートしているため、攻撃者はこの言語を使って悪意のあるコードを実行することができることです。通常、XSLスクリプトはWindows Script Hostを使用して実行されますが、WMICを使用して実行することもできます。

 

ここでは、ダウンローダはWMICを使用して、DridexペイロードをダウンロードするJScriptを含むXSLスクリプトを実行しています。この技術は、ファイルレス脅威のMicrosoftによる分類法のタイプIII攻撃に該当し、MITRE ATT&CKのT1120手法を示しています。WMICは、メモリ内でローカルおよびリモートでホストされたXSLスクリプトを処理して実行することができ、これは一般的にSquiblyTwoとして知られているテクニックです。WMICを使用すると、攻撃者は、システム上でWindows Script Hostが無効になっている場合でも、XSLファイルの内部に埋め込まれたJScriptを実行することができます。

 

XSLスクリプトには2つの関数が含まれています。関数aawg1は、URL hxxps://carmelavalles[.]com/site/wp-admin/chrome.binからDridex実行ファイルをダウンロードするためのHTTP GETリクエストを送信するためのXMLHTTPオブジェクトを作成します。次に、ActiveX Streamオブジェクト(ADODB.Stream)を作成し、バッファを先のHTTPリクエストから受信したレスポンスボディに設定します。 次に、配列の5番目の要素を指定して、関数axas5v9からメソッド名SaveToFileを取得します。その後、ファイル名に "c:\windows\temp\awMiOFl[...]exe "、オプション2に(adSaveCreateOverWrite)を指定して、SaveToFileメソッドを呼び出します。このオプションは、同名のファイルが既に存在する場合に、Streamオブジェクトが保存先のファイルを上書きすることを意味します。ファイルをディスクに保存した後、XSL スクリプトはそれ自身を削除します。

XSL スクリプトの内容 図 5 - XSL スクリプトの内容

 

pestudio を使ってドロップされたペイロードを簡単に分析すると、ブラックリストに登録されたセクション名 .rdata3、.qdata、aei、および CODE2 が使用されているなど、悪意のあるものであることが示されています。 

awMiOFl.exe の初期評価として pestudio によって識別された悪意のインジケーター 図 6 - awMiOFl.exe の初期評価として pestudio によって識別された悪意のインジケーター

 

次に、別の Dridex ペイロードと比較してみたところ、どちらも同じ数のセクションを持っていることがわかりました。.textセクションを除いて、すべてのセクションのファイルサイズは同じです。これは、Dridexの配信にポリモーフィックローダーが使用されている可能性を示しています。

ポリモーフィックローダーの使用の可能性を示す別のDridexサンプルとのファイルセクションの比較 図7 - ポリモーフィックローダーの使用の可能性を示す別のDridexサンプルとのファイルセクションの比較

 

ドロップされたペイロードawMiofl.exe は、実行時に自身をメモリ内にアンパックし、約 9 分間のループに入ります。各ループでは、"Installing... "または "Installed "という文字列と共にOutputDebugStringWを呼び出し、その後10ミリ秒ほどSleep関数を呼び出しています。

Dridex のアンパックルーチン中でキャプチャされた頻繁な OutputDebugStringW API呼び出し 図 8 - Dridex のアンパックルーチン中でキャプチャされた頻繁な OutputDebugStringW API呼び出し

 

ループを抜けると、以下のレジストリキーを列挙し、CurrentBuild, CurrentVersion, InstallTime, InstallDateなどのシステムの基本情報を収集します。

  • \Registry\Machine\Software\Microsoft\Windows\CurrentVersion\Policies\System 
  • \Registry\Machine\Software\Microsoft \Windows NT\CurrentVersion

 

ステージ2 - AtomBombingを使ったプロセスインジェクション

次に、awMiofl.exeは、2016年にenSiloによって発見されたAtomBombingと呼ばれる手法を使用して、explorer.exeを開き、コードを注入します。この手法は、Windowsのグローバル アトム テーブルと非同期プロシージャコール (APC) を悪用してリモート プロセスにコードを注入します。

コードインジェクション手法AtomBombingを使用して、Dridexはexplorer.exeを開き自分自身を注入 図 9 - コードインジェクション手法AtomBombingを使用して、Dridexはexplorer.exeを開き自分自身を注入

 

その後、awMiofl.exeは、C:\Windows\System32ディレクトリに対し、ファイル名C:\Windows\System32\*.exeでFindFirstFileA APIを呼び出す処理を繰り返します。ファイル名は、System32ディレクトリ内のすべての.exeファイルと一致するためにワイルドカードとなっています。一致する度にファイルを開き、依存するダイナミック・リンク・ライブラリ (DLL) を読み取ります。DLL のリストにマッチした場合は、サスペンド・モードのプロセスを生成して終了します。Dridexは、一種のコードインジェクションに備えてこれを行っているのではないかと疑っていますが、我々が分析したサンプルでは、Dridexはプロセスを終了しました。

 

ステージ3 - DLLハイジャッキング

さらにペイロードは、%APPDATA%にランダムに名前を付けられたディレクトリを作成します。ディレクトリが作成されると、C:\Windows\System32からの正規のシステム実行ファイルと、Import Address Table (IAT)の実行ファイルのライブラリ依存性に一致する悪意のある64ビットDLLをフォルダにコピーします。多くのDLLハイジャッキング手法は、WindowのDLLのロード順を悪用します。デフォルトでは、DSafeDllSearchMode が無効になっている場合、DLL のロード順は以下のディレクトリの順番で必要な DLL を探します。

 

  1. ロードされたアプリケーションのディレクトリ パス
  2. カレント ディレクトリ
  3. システム ディレクトリ
  4. 16 ビット システム ディレクトリ 
  5. Windows ディレクトリ
  6. 環境変数PATHにリストされているディレクトリ

 

awMiofl.exeは悪意のあるDLLを正規の実行ファイルと同じディレクトリにコピーするので、実行ファイルを実行すると、System32の正規のものではなく、Roamingフォルダの悪意のあるDLLをロードします。

%APPDATA%\RC17zE への悪意のある DLL と Windows バイナリのファイル書き込みイベント 図 10 - %APPDATA%\RC17zE への悪意のある DLL と Windows バイナリのファイル書き込みイベント
 Dumpbinの出力はEhStorAuthn.exeのUxTheme.dllへの依存関係を示す 図11 - Dumpbinの出力はEhStorAuthn.exeのUxTheme.dllへの依存関係を示す

 

 

ステージ4 - スケジュールされたタスクを使った永続性

その後、awMiofl.exeは、BpnayitifvdwsというC:\Users\[Redacted]AppData\Roaming\RC17zE\EhStorAuthn.exeを毎時実行するスケジュールされたタスクを作成することで永続性を獲得します。

Bpnayitifvdws というスケジュールされたタスクの生成 図 12 - Bpnayitifvdws というスケジュールされたタスクの生成
スケジュールされたタスク Bpnayitifvdws の実行 図 13 - スケジュールされたタスク Bpnayitifvdws の実行

 

 

ステージ5 - さらなるDLLハイジャッキング

Explorer.exeはユーザの%TEMP%ディレクトリにバッチファイルx3un.cmdを作成し、悪意のあるDLL NqE850.tmpをドロップします。その後、cmd.exeを起動し、x3un.cmdを実行します。X3un.cmdには、ドロップしたDLLファイルNqE850.tmpとWindowsの正規のバイナリであるsystemreset.exeをSystem32ディレクトリからユーザのRoamingフォルダに新しく作成されたディレクトリC:\UsersRedacted]App\DataRoaming0l78lにコピーするコマンドが記述されています。

Explorer.exeは悪意のあるDLLとバッチファイルを%TEMP%にドロップしバッチファイルを実行 図14 - Explorer.exeは悪意のあるDLLとバッチファイルを%TEMP%にドロップしバッチファイルを実行
X3un.cmdはDLLハイジャッキングに備えて悪意のあるDLLと正規のWindowsバイナリを%APPDATA%フォルダにコピー 図15 - X3un.cmdはDLLハイジャッキングに備えて悪意のあるDLLと正規のWindowsバイナリを%APPDATA%フォルダにコピー

 

Explorer.exeはこのステップを数回繰り返し、異なる悪意のあるDLLと正規のWindowsバイナリをコピーします。

 各フォルダに悪意のあるDLLと正規のWindowsバイナリが含まれるC:Users\%USERNAME%\AppData\Roaming内のディレクトリ構造 図16 - 各フォルダに悪意のあるDLLと正規のWindowsバイナリが含まれるC:Users\%USERNAME%\AppData\Roaming内のディレクトリ構造

 

DLLハイジャッキングを使い、マルウェアはアンチウイルスやEDRツールを欺くことができます。これは、起動されたプロセスがMicrosoftによって署名されているためです。私たちはVirusTotalをチェックしましたが、これらのドロップされたDLLはどれもポリモーフィズムのためにハッシュが知られていませんでした。DLLロード中のアンチウイルススキャンがクリーンであることが判明した場合、AVはプロセスメモリをスキャンするまでフラグを立てません。 

ドロップされたDLLは64ビットのバイナリで15日後もVirusTotalにハッシュの検知が一つもない 図17 - ドロップされたDLLは64ビットのバイナリで15日後もVirusTotalにハッシュの検知が一つもない

 

Explorer.exeはC:\Users\Redacted]\AppData\Roaming\0l78lsystemreset.exeという値のRunキーの下にFetkovwkmarbxというレジストリキーを作成します。これは、Windowsを起動するたびにDridexが起動し、再起動後もマルウェアが永続化することを意味します。 

再起動ユーザーログイン後に永続化するためエントリFetkovwkmarbxをレジストリのRunキーに追加 図 18 - 再起動ユーザーログイン後に永続化するためエントリFetkovwkmarbxをレジストリのRunキーに追加

 

 

ステージ6 - サスペンド・プロセスの生成

Explorer.exeは、リモート・プロセス・コードインジェクションおよびプロセスハロウイングを実行するために、サスペンド・モードでC:\Windows\System32ディレクトリからいくつかの正規のWindowsバイナリを生成します。

 

 C:\WindowsSystem32 ディレクトリから explorer.exe によって作成されたサスペンド・プロセス 図 19 - C:\WindowsSystem32 ディレクトリから explorer.exe によって作成されたサスペンド・プロセス
Explorer.exeがサスペンドされたプロセスでコードインジェクションを実行 図20 - Explorer.exeがサスペンドされたプロセスでコードインジェクションを実行

 

 

フォルダー名の偽装

Dridexは、最後に空白を含むディレクトリを作成することで、アプリケーションのホワイトリストを回避しようとします("C:\Windows ")。このテクニックは、Windows API が最後の空白を持つ MS-DOS スタイルのパスを処理する方法を悪用しています。MS-DOS スタイルのパスを処理するとき、Windows API は RtlGetFullPathName_U と呼ばれるヘルパー関数を呼び出し、パスから末尾の空白を削除します。

Explorer.exeは、"C:\Windows \System32 "というディレクトリを作成し、Version.dllという悪意のあるDLLと共に、System32ディレクトリから正規のwhoami.exeプログラムをコピーします。そして、コマンドラインで起動します。

 

  • “C:\Windows \system32\whoami.exe” 1188 21993FF418 1 

 

コマンドプロンプトで以下のコマンドを実行すると、C:\にWindowsのディレクトリが作成されますが、最後にスペースがあります:

 

  • md “\\?\C:\Windows ”
  • rd /s /q “\\?\C:\Windows ” (最後の空白に注意)
 “\\?\”という正規表現で最後にスペースを付けてディレクトリを作成するデモンストレーション 図 21 - “\\?\”という正規表現で最後にスペースを付けてディレクトリを作成するデモンストレーション
DridexがWindows API経由でMS-DOSのパス処理を悪用し最後の空白でパスをホワイトリスト化 図22 - DridexがWindows API経由でMS-DOSのパス処理を悪用し最後の空白でパスをホワイトリスト化

 

Dridexをシステム上で動かしたままにしておくと、最終的にC:\Windows\SysWOW64からサスペンドモードでプロセスを起動します。これはコードをインジェクトするために使われます。

プロセスに渡される引数は、特定のタスクを実行することを示すために1つずつ増加されます。また、定期的な間隔で新しいバイナリ・パスでスケジュールされたタスクBpnayitifvdwsを修正し起動します。

引数1でサスペンドモードでC:\Windows\Syswow64 から起動された正規の Windows バイナリ 図 23 - 引数1でサスペンドモードでC:\Windows\Syswow64 から起動された正規の Windows バイナリ
引数2でサスペンドモードでC:\Windows\Syswow64 から起動された正規の Windows バイナリ 図 24 - 引数2でサスペンドモードでC:\Windows\Syswow64 から起動された正規の Windows バイナリ
Dridex の感染ライフサイクル中に産み出されたプロセス 図 25 - Dridex の感染ライフサイクル中に産み出されたプロセス

 

 

結論

micro-VMからキャプチャしたイベントに基づいて、Dridexが少なくとも5種類のコードインジェクションを実行していることがわかります。

 

  • DLLオーダー・ハイジャッキング 
  • プロセスハロウイング  
  • PEインジェクション 
  • スレッド実行ハイジャッキング  
  • AtomBombing

 

侵害の痕跡(IoC)

SHA256(invoice.doc [Document-Word.Trojan.Encdoc] ) 72da2959520e824a617a5a174b1bc1a8bd6d83daf83eabb5937640f1efa37bcd
SHA256( F43A883A.doc [Document-Word.Trojan.Encdoc]) 72da2959520e824a617a5a174b1bc1a8bd6d83daf83eabb5937640f1efa37bcd
SHA256(aXwZvnt48.xsl [Script-JS.Downloader.Dwb]) 6937b640269ab85594954e029f289a6bdee8b7fc2bee6177098efcb5eca7b40f
SHA256(chrome[1].bin[Win32.Trojan.Cridex]) c690c1e72bfe665f364cbb61c363f291f725b469e55a4c0a703cd729a5e29009
SHA256( awMiOFl.exe [Win32.Trojan.Cridex]) c690c1e72bfe665f364cbb61c363f291f725b469e55a4c0a703cd729a5e29009
SHA256( FireFox.exe [Win32.Trojan.Kryptik]) 08a00c9be7dd2e64e9b0f6ea85f159275c913faf0aad51884a1eeab3822af246
SHA256(credui.dll) 085ccc35f1a58e74789a24286d6827914b1887f32abed20a5fa4762a83b18c39
SHA256(UxTheme.dll) ead2d523c00beecc598b496c300fb5aa36424b1fe141c629208bd945bf3b7590
SHA256(VERSION.dll) 8c21e72971b9233d368694697e83d89950b4a63eadb1d76132814caf46f455da
SHA256(VERSION.dll) 9edee5db42c9e5e717484ae8e2fb7518dfdbc171ba10c4e71a2c39efda91dc66
SHA256(XmlLite.dll) 7a15c298817cd26c2078ae3fcec917970fc32d476d07ebc6ef16afd8018895ae
SHA256(DUI70.dll) 880de8b32751c4cc1cd203f40d1019e363095c476003677907dfcd7f62d1b8ef

関連記事