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の感染チェーンは、感染ベクターの新たなトレンドとなるものと考えられます。
改めてXLLとは?
XLLはExcelアドイン用の拡張機能で、その実体は通常のPE(DLLファイル)です。XLLファイルの拡張子にはExcelでサポートされているほかの拡張子とよく似たアイコンが紐づけられていることから、一般ユーザーはXLLとほかのExcelファイル形式との違いに気づかず、うっかり開いてしまいかねません。意外かもしれませんが、XLLファイルをダブルクリックすると、Excelはあっさりこれを読み込んで実行してしまいます。
XLLがExcelに読み込まれると、定義されたXLLインターフェースに基づいて、XLLファイルのエクスポート機能が呼び出されます。これらインターフェイス関数のなかで目を引くのがxlAutoOpenとxlAutoCloseの2つです。これらの関数はそれぞれアドインがアクティブになったり非アクティブになったりしたときに呼び出されます。これらの関数は、従来のVBAマクロのAuto_OpenメソッドやAuto_Closeメソッドのように、悪意のあるコードのロードに使えます。
1つXLLファイルの欠点は、対応するビット数のExcelでしか読み込めないことです。たとえば64ビット用のXLLは64ビット版のExcelでしか読み込めません。32ビット版も同様です。このためマルウェア作成者は被害環境にインストールされているExcelのバージョンにかけるしかありません。
VBAマクロと同様、Excelはアドイン実行によるセキュリティ上の問題をユーザーに警告しますので、この面では、VBAのマクロと比べたマルウェア側のメリットはありません。
前述の理由により、XLLファイルは被害マシンに最初の足場を得ようとする攻撃者にとっては良い選択となる可能性があります。DLLにパッケージ化したコードをExcelに読み込ませられれば、こうしたシナリオへの対応準備ができていないセキュリティ製品を誤認させられる可能性があります。
図4は、PEエディタによるXLLファイルの表示例です。エクスポートされた関数の中にxlAutoOpen関数とxlAutoClose関数が確認できます。
悪意のある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アドインからこのようなアセンブリを抽出するためのPythonコードを作成しました。このスクリプトは Unit 42のGitHub リポジトリから利用できます。
JACKリソース
読み込まれたモジュールはシンプルなドロッパです。モジュールをロードするとAutoOpenメソッドが呼び出されます。この方法での悪意のあるコードは、最終的なペイロードの実行ファイルを%AppData%\service.exeにドロップして実行します(図6参照)。JACKに含まれるモジュールは設定変更が可能です。つまり、ほかのバージョンではペイロードをドロップする代わりにダウンロードしたり、本物のExcelテンプレートをドロップして実行したりできる、ということになります。
設定内容を図7に示します。設定には以下のオプションがあります。
- bDown- ペイロードをダウンロードします。
- templateEnabled- Excelテンプレートをドロップして開きます。
- payload- ドロップされるペイロードが格納されます。
最終ペイロード - Agent Tesla
SHA256: AB5444F001B8F9E06EBF12BC8FDC200EE5F4185EE52666D69F7D996317EA38F3
最終ペイロードは難読化されたAgent Teslaサンプルで、その機能についてはさまざまな文書ですでにまとめられています([1][2])。私たちのサンプルでは、SMTPプロトコルを使ってphantom1248@yandex[.]comというメールアドレス宛に窃取したデータを漏出させています。図8は、逆コンパイルしたこのAgent Teslaサンプルのエントリポイントで、その構造はほかの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バイトをアサインしています。
復号された文字列配列を調べると、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から難読化をすべて解除したメソッドを確認してください。
以下は、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ペイロード |
追加リソース
- Agent Tesla Infostealer - ThreatVector Blog, BlackBerry
- Agent Tesla amps up information stealing attacks - Sophos
付録A: Windows Vaultを読み取る関数コード、難読化解除済み
詳しい情報はGitHubでご覧ください。