マルウェア

Excelアドインの兵器化[前編]: 悪意のあるXLLファイルとAgent Teslaのケーススタディ

Clock Icon 3 min read

This post is also available in: English (英語)

概要

2021年7月27日から12月1日にかけ、Unit 42のリサーチャーはExcelのアドイン(XLL)やOffice 4.0のマクロがドロップしたAgent TeslaやDridexマルウェアサンプルの新たな急増を確認しました。Excel 4.0のマクロドロッパは主にDridexをドロップするのに使われ、XLLのドロッパはAgent TeslaとDridexの両方をドロップするのに使われることがわかりました。悪意のあるXLLファイルはかなり以前から知られていましたが、脅威状況への再登場は新たな傾向で、同感染ベクターへのシフトを示すものである可能性があります。

今回確認されたXLLファイルは主に、「INQUIRY」という件名で、abcovid[.]techのメールアドレスから送られた、価格の見積に見せかける内容のメールとして配布されていました。これらのメールのターゲットは、製造業、小売業、連邦政府、州政府、地方政府、金融、製薬、輸送、教育など、米国、欧州、東南アジアのさまざまなセクタにまたがる組織でした。さらに、悪意のあるXLLファイルの中には、「Excel-DNA」という正当なオープンソースExcelアドインフレームワークを悪用したものも見られました。

本稿は前編・後編に分けてお送りするブログの前編です。前編では、XLLファイルの属性、悪用された正当なオープンソースフレームワーク、Agent Teslaの最終ペイロードを扱い、後編ではもう1つの感染フローであるDridexサンプルを配布するXLLとExcel 4(XLM)のドロッパを扱います。

パロアルトネットワークスのお客様は、Cortex XDRまたは次世代ファイアウォール用のWildFireクラウド配信セキュリティサブスクリプションにより、本稿で取り上げた攻撃から保護されています。

本稿で取り上げた攻撃 Malware, Agent Tesla
Unit 42の関連トピック Dridex, Macros

目次

感染チェーン
改めてXLLとは?
悪意のあるExcelアドイン(XLL)のドロッパ
- Excel-DNA
-Jackのリソース
最終ペイロード - Agent Tesla
-文字列の復号
- Windows Vault
結論
IoC
追加リソース
付録A: Windows Vaultを読み取る関数コード、難読化解除済み

感染チェーン

図1のフローチャートは、今回の調査で観測された、ありうる2つのイベントチェーンを示したものです。

  • 被害者は、悪意のある添付ファイルが付いたメールを受け取ります。
  • この添付ファイルは悪意のあるXLLファイルかXLMファイルです。
  • XLLの場合、実行すると次のいずれかを行います。
    • 中間ドロッパをドロップし、その中間ドロッパがさらにAgent Teslaのペイロードをドロップします。
    • DiscordからAgent Teslaのペイロードをダウンロードします。
    • DiscordからDridexのペイロードをダウンロードします。
  • XLMの場合は実行するとVBSダウンローダがドロップされ、このVBSダウンローダがDiscordからDridexのサンプルをダウンロードして実行します。

必ずしも同じアクターによって配布されているとはいえないものの、Agent TeslaとDridexの感染チェーンは、感染ベクターの新たなトレンドとなるものと考えられます。

このフローチャートは、今回の調査で観測された、ありうる2つのイベントチェーンを示したものです。フロー1は、XLLファイルをドロップするマルスパムに関するものです。そこからAgent Teslaペイロードをドロップしたり、DiscordからAgent TeslaやDridexペイロードをダウンロードしたりします。フロー2は、XLMファイルに関するものです。実行するとVBSダウンローダがドロップされ、このVBSダウンローダがDiscordからDridexのサンプルをダウンロードして実行します。
図1 感染チェーン

改めてXLLとは?

XLLはExcelアドイン用の拡張機能で、その実体は通常のPE(DLLファイル)です。XLLファイルの拡張子にはExcelでサポートされているほかの拡張子とよく似たアイコンが紐づけられていることから、一般ユーザーはXLLとほかのExcelファイル形式との違いに気づかず、うっかり開いてしまいかねません。意外かもしれませんが、XLLファイルをダブルクリックすると、Excelはあっさりこれを読み込んで実行してしまいます。

ユーザーに表示されるXLLアイコン
図2 XLLアイコン

XLLがExcelに読み込まれると、定義されたXLLインターフェースに基づいて、XLLファイルのエクスポート機能が呼び出されます。これらインターフェイス関数のなかで目を引くのがxlAutoOpenxlAutoCloseの2つです。これらの関数はそれぞれアドインがアクティブになったり非アクティブになったりしたときに呼び出されます。これらの関数は、従来のVBAマクロのAuto_OpenメソッドやAuto_Closeメソッドのように、悪意のあるコードのロードに使えます。

1つXLLファイルの欠点は、対応するビット数のExcelでしか読み込めないことです。たとえば64ビット用のXLLは64ビット版のExcelでしか読み込めません。32ビット版も同様です。このためマルウェア作成者は被害環境にインストールされているExcelのバージョンにかけるしかありません。

VBAマクロと同様、Excelはアドイン実行によるセキュリティ上の問題をユーザーに警告しますので、この面では、VBAのマクロと比べたマルウェア側のメリットはありません。

このスクリーンショットはXLLファイルを実行しようとしたときのExcelの警告の例を示しています。アラートには「Microsoft Office has identified a potential security concern. Warning: There is no digital signature available」と続き、[Enable this add-in for this session only]と[Leave this add-in disabled]の2つのボタンが表示されています。
図3 XLLファイルを実行しようとしたさいExcelに表示される警告
前述の理由により、XLLファイルは被害マシンに最初の足場を得ようとする攻撃者にとっては良い選択となる可能性があります。DLLにパッケージ化したコードをExcelに読み込ませられれば、こうしたシナリオへの対応準備ができていないセキュリティ製品を誤認させられる可能性があります。

図4は、PEエディタによるXLLファイルの表示例です。エクスポートされた関数の中にxlAutoOpen関数とxlAutoClose関数が確認できます。

このスクリーンショットはPEエディタによるXLLファイルの表示例です。エクスポートされた関数の中にxlAutoOpen関数とxlAutoClose関数が確認できます。
図4 PEヘッダ用エディタのCFF Explorerで表示したExcelアドインのエクスポート内容

悪意のあるExcelアドイン(XLL)のドロッパ

以下のXLLサンプルが添付された悪意のあるメールが確認されています。

SHA256: 7a6f8590d4be989faccb34cd393e713fd80fa17e92d7613f33061d647d0e6d12
SHA256: fbc94ba5952a58e9dfa6b74fc59c21d830ed4e021d47559040926b8b96a937d0

Excel-DNA

今回のXLLサンプルは、Excel-DNAと呼ばれる正当なオープンソースExcelアドイン開発用フレームワークを利用しています。このフレームワークにはマルウェアの作者にも適した機能があります。1つは、PEリソース内にパッケージ化した圧縮.NETアセンブリをディスクに「触れる」ことなく直接メモリにロードする機能です。つまり、まっとうなフレームワークではあるのの、Excel-DNAは悪意のあるローダーに似た機能を持っており、ローダーとして悪用される可能性があります。

またExcel-DNAにはYaraによる対策の障害になりかねない別の特性があり、これはマルウェアの作者でも知らないかもしれません。Excel-DNAサンプルのなかには、なぜかエクスポートされる関数の数が1万をすこし超えるものが多数あり、それらの関数のほとんどは、意味のある機能を持っていません。そして、YaraのPEモジュールのエクスポート関数解析の上限はたった8,192個です。このため、Yaraルールの対象のエクスポート名が、8192より高いインデックスにある場合、サンプルにはマッチしなくなります。

Excel-DNA XLLのリソースを見てみると、__MAIN__という名前のXMLリソースが確認できます。このリソースには、Excel-DNAで読み込まれるモジュールに関する情報が含まれています。私たちのケースでは、この指定モジュールがJACKという名前のリソースから展開されていました。

このリソースは、LZMAアルゴリズムで展開され、その後、メモリにロードされます。

Excel-DNA XLLのリソースを見てみると、__MAIN__という名前のXMLリソースが確認できます。このリソースには、Excel-DNAで読み込まれるモジュールに関する情報が含まれています。私たちのケースでは、この指定モジュールがJACKという名前のリソースから展開されていました。
図5 Excel-DNAのリソース

私たちは、Excel-DNAアドインからこのようなアセンブリを抽出するためのPythonコードを作成しました。このスクリプトは Unit 42のGitHub リポジトリから利用できます。

JACKリソース

読み込まれたモジュールはシンプルなドロッパです。モジュールをロードするとAutoOpenメソッドが呼び出されます。この方法での悪意のあるコードは、最終的なペイロードの実行ファイルを%AppData%\service.exeにドロップして実行します(図6参照)。JACKに含まれるモジュールは設定変更が可能です。つまり、ほかのバージョンではペイロードをドロップする代わりにダウンロードしたり、本物のExcelテンプレートをドロップして実行したりできる、ということになります。

設定内容を図7に示します。設定には以下のオプションがあります。

  • bDown- ペイロードをダウンロードします。
  • templateEnabled- Excelテンプレートをドロップして開きます。
  • payload- ドロップされるペイロードが格納されます。
読み込まれたモジュールはシンプルなドロッパです。モジュールをロードするとAutoOpenメソッドが呼び出されます。この方法での悪意のあるコードは、最終的なペイロードの実行ファイルを%AppData%\service.exeにドロップして実行します。
図6 AutoOpenメソッドを含むJACKドロッパモジュールのコードをdnSpyで逆コンパイルしたもの
bDown - ペイロードをダウンロードする、templateEnabled - Excelのテンプレートをドロップして開く、payload - ドロップするペイロードを格納する、というオプションを含む設定が表示されています。
図7 ドロッパの設定用変数とバイト配列に含まれる最終ペイロード

最終ペイロード - Agent Tesla

SHA256: AB5444F001B8F9E06EBF12BC8FDC200EE5F4185EE52666D69F7D996317EA38F3

最終ペイロードは難読化されたAgent Teslaサンプルで、その機能についてはさまざまな文書ですでにまとめられています([1][2])。私たちのサンプルでは、SMTPプロトコルを使ってphantom1248@yandex[.]comというメールアドレス宛に窃取したデータを漏出させています。図8は、逆コンパイルしたこのAgent Teslaサンプルのエントリポイントで、その構造はほかのAgent Teslaのサンプルと似ています。

この図は逆コンパイルしたこのAgent Teslaサンプルのエントリポイントで、構成はほかのAgent Teslaのサンプルと似ています。
図8 逆コンパイルしたAgent Teslaのエントリポイントの関数

文字列の復号

このAgent Teslaサンプルは、文字列をすべて、ある「(文字を格納した)大きなバイト配列」に暗号化して保存しています。

初期化時、このサンプルは「大きなバイト配列」の各バイトを、ハードコードされたバイト170と「大きなバイト配列」内の文字のインデックス(バイトサイズにトリミングされたもの)とでXORします。次にこのサンプルは、復号した配列を既知のオフセットと対応する長さにスプライシングし、全ての文字列を格納する配列を埋めます。例として、オフセット665の8バイトを調べてみましょう。

実行前(暗号化された状態) 28, 92, 94, 81, 25, 64, 88, 122
初期化時 

(インデックスと 170とXORした復号後の状態)

47, 108, 111, 103, 46, 116, 109, 112
復号後のASCII形式 /log.tmp

以下のコードでは、文字列の配列の53番目の項目に、復号されたバイト配列のオフセット665の8バイトをアサインしています。

ここに示すコードは文字列の53番目の項目をアサインしています。
図9 文字列をアサインするコード

復号された文字列配列を調べると、Agent Teslaが狙っているさまざまなターゲットが見えてきます。

  • 機微なブラウザ情報、cookie
  • メール、FTP、VPNのクライアント情報
  • Windows Vaultからのクレデンシャル(認証情報)
  • 記録されたキーストロークやスクリーンショット
  • クリップボードの情報

Windows Vault

Windows Vaultから情報を盗むため、Agent Teslaの作者はPowerSploitのスクリプトをC#に変換して .NETアセンブリをビルドしたようです。

これはP/Invokeを使ってvaultcli.dllライブラリからAPI関数を呼び出します。最初にVaultEnumerateItemsが呼び出され、利用可能なすべてのVaultが取得されます。次に、VaultOpenVaultを使って各Vaultが開かれます。Vaultが開かれると、VaultEnumerateItemsにより、中にあるアイテムが列挙されます。最後に、VaultGetItemでアイテムの属性が読み取られます。Agent Teslaは、自身のリストにクエリをアイテムとして記録します(手動で難読化を解除したコードを図10に示す)。興味のある方は、付録Aから難読化をすべて解除したメソッドを確認してください。

抽出されたWindows Vaultのアイテムを記録するAgent Teslaのコード(難読化解除済み)
図10. 抽出されたWindows Vaultのアイテムを記録するAgent Teslaのコード(難読化解除済み)

以下は、Agent Teslaが情報窃取に使用するWindows VaultのGUID(とそれぞれの説明)のリストです。

GUID 説明
2F1A6504-0641-44CF-8BB5-3612D865F2E5 Windows Secure Note
3CCD5499-87A8-4B10-A215-608888DD3B55 Windows Web Password Credential
154E23D0-C644-4E6F-8CE6-5069272F999F Windows Credential Picker Protector
4BF4C442-9B8A-41A0-B380-DD4A704DDB28 Web Credentials
77BC582B-F0A6-4E15-4E80-61736B6F3B29 Windows Credentials
E69D7838-91B5-4FC9-89D5-230D4D4CC2BC Windows Domain Certificate Credential
3E0E35BE-1B77-43E7-B873-AED901B6275B Windows Domain Password Credential
3C886FF3-2669-4AA2-A8FB-3F6759A77548 Windows Extended Credential

結論

最近観測されたマルウェアの急増を受け、Excelアドイン(XLL)を利用する感染チェーンを分析しました。またマルウェア作者が、正当なExcel-DNAフレームワークを悪用し、こうした悪意のあるXLLを作成する手口についても解説しました。最後に、最終的なAgent Teslaペイロードと、被害システムからの窃取が試みられる情報の種類について、Windows Vaultデータを中心に簡単に説明しました。最近の攻撃で見られるExcelアドインの利用は脅威状況の新たなトレンドを示しているのかもしれません。

後編ではExcel4.0のマクロを使ってDridexを配信する、もう1つの感染チェーンを解説します。

パロアルトネットワークスのお客様は、Cortex XDRまたは次世代ファイアウォール用のWildFireクラウド配信セキュリティサブスクリプションにより、本稿で取り上げた攻撃から保護されています。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、infojapan@paloaltonetworks.com まで電子メールにてご連絡ください(ご相談は弊社製品のお客様には限定されません)。

パロアルトネットワークスはファイルサンプルや侵害の兆候などをふくむこれらの調査結果をCyber Threat Alliance (CTA サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使用して、お客様に保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害することができます。詳細についてはCyber Threat Allianceにてご確認ください。

IoC

サンプルのハッシュ値(SHA256) 説明 
7a6f8590d4be989faccb34cd393e713fd80fa17e92d7613f33061d647d0e6d12 XLLドロッパ
fbc94ba5952a58e9dfa6b74fc59c21d830ed4e021d47559040926b8b96a937d0 XLLドロッパ
bfc32aab4f7ec31e03a723e0efd839afc2f861cc615a889561b38430c396dcfe 中間ドロッパ(JACK)
AB5444F001B8F9E06EBF12BC8FDC200EE5F4185EE52666D69F7D996317EA38F3 最終的なAgent Teslaペイロード

追加リソース

付録A: Windows Vaultを読み取る関数コード、難読化解除済み

詳しい情報はGitHubでご覧ください。

Enlarged Image