Pirate Panda による標的型攻撃で使われたメールとファイルの分析
はじめに
ベトナムのダナン市の公務員を標的とした APT グループ Pirate Panda による攻撃について、メールヘッダの分析から検体の解析までを Anomali が報告しています。本レポートでは使われている技術についての理解を深めるために、Anomali と同様の解析をそれぞれのエビデンスを交えて説明ます。
Pirate Panda
別名:APT23, APT 23, KeyBoy, TropicTrooper, Tropic Trooper
https://malpedia.caad.fkie.fraunhofer.de/actor/pirate_panda
全体の俯瞰
今回のフィッシング攻撃は以下の流れで進行します。
- 既感染端末からフィッシングメールを送信
- 添付の xls ファイルを実行、MS Excel 起動
- マクロの有効化、同時にマクロの自動実行
- VBA がスプレッドシート上のデータ(バイナリの文字列)を読み取り
- VBA がバイナリに変換し2つのファイル (exe, dll) を配置
- 同時にスタートアップにショートカット作成
- 再起動するとスタートアップにより exe が実行
- exe が dll をサイドローディング
- dll が UUID 取得と C2 サーバとの通信
本レポートではこの攻撃の流れの内、1~6 を説明します。
メールヘッダの分析
Anomali の報告に書かれている IoC を元に eml ファイルを VirusTotal から取得しました。テキストエディタでメールヘッダを確認します。
From と To ヘッダは共に danang.gov.vn ですが、全ての Received ヘッダが dsp-int.vn ドメインであり、IP アドレスは 10.x.x.x なプライベート IP アドレスです。この 2 つのドメインの関係について Google で検索してみたところ、次のようなドキュメントが見つかりました。
https://pdfslide.net/documents/su-dung-email.html
これはダナン市の電子メールシステムのセットアップに関する資料のと考えられます。メールアドレスとして danang.gov.vn、Exchange で使用するドメイン名として dsp-int.vn が使われています。Received ヘッダは他になく、Anomali が分析している通り、同市の他職員から直接送られてきたメールと考えられます。つまり、既にほかに何らかの侵害された端末もしくはアカウントが存在する可能性があります。
添付の MS Excel ファイルの分析
MS Excel ファイルの特徴
メールには xls ファイルが添付されています。このファイルには VBA のマクロが実装されており、マクロを有効にした時 (ファイルを開いたとき) に発生する Workbook_Open イベントをトリガーに処理が実行されます。また、ソースコードは難読化されています。
また、このファイルは Sheet1 しか見えませんが、Sheet2 と Sheet3 が非表示になっています。
Sheet3 では A, B 列が非表示となっており、これを表示させると 4D 5A (MZヘッダ) から始まるバイトコードの文字列が 2 列 (2ファイル分) 隠されています。
VBA マクロの分析
難読化されている VBA マクロですが、比較的単純な難読化でありコード量も多くないことからデバッグで処理の内容や代入される値を追いかけていくことで処理を理解することができます。以降で説明する変数名や関数名は、処理内容から便宜的に名付けたものです。
まず、ファイルを開いたときに発生するイベントは 3 つのファイル名 (Utilman.exe, mpsvc.dll, ProgramDataUpdaterB.lnk) を生成します。
続いて呼ばれる deploy 関数では Sheet3 に書かれていたバイトコードの文字列を読み取り (readWorksheet 関数)、バイナリに変換してファイルに書き込む処理 (writePayload 関数) を実行します。これにより、Utilman.exe, mpsvc.dll が生成されます。また、createStartup 関数により、Utilman.exe を実行するためのショートカットをスタートアップに書き込みます。
最後に showDummyWorksheet 関数にて Sheet1 を非表示にし、Sheet2 を表示します。
ドロップされたファイルの分析
Utilman.exe
正規の署名付き Windows プログラム (MsMpEng.exe) です。
Anomali の記事が参照している様に、DLL サイドローディングの脆弱性を抱えている実行ファイルです。Export 関数 ServiceCrtMain を呼び出しますのでこの Export 関数が実装された悪意のある DLL が同じフォルダに配置されていると、読み込まれて実行されます。
ProgramDataUpdaterB.lnk
Utilman.exe を実行するためのショートカットファイルです。スタートアップに配置されていますので端末の再起動後に Utilman.exe を実行します。同じフォルダに mpsvc.dll が配置されていますので、これを DLL サイドローディングの脆弱性を利用して読み込みます。
mpsvc.dll
Export 関数に ServiceCrtMain を持つ DLL です。Utilman.exe が実行される時にこの関数が呼ばれます。
DLL の特定の関数をデバッグする方法は以下をご参照ください。以降の説明で使用するアドレスはベースアドレス 6EC90000 で実行された時のものです。
x64dbg と IDA を使った DLL デバッグ方法 - 解析メモ
デバッグを進めていくと、6EC91B82 で呼んでいる 6EC91290 の関数が通信を行うための関数ということが分かります。最初に dns.google の名前解決を行います。OCSP (資格ではなくプロトコルの方です。) により証明書の失効を確認します。
次いで 6EC91C37 では cmd /c wmic csproduct get uuid を実行します。これは Windows OS のシリアルナンバーを取得するためのコマンドです。
通信を行うための関数は 6EC91D98 でも再度呼ばれます。ここでは C2 サーバとみられる skypechatvideo[.]online の title.php に GET 通信を行います。
調査時点では 404 エラーが返ってきます。レスポンスメッセージに 「1-」が含まれるかどうかをチェックし、含まれていた場合は処理を続けます。含まれていない場合は 0x018A88 ミリ秒 (101秒) の Sleep が発生し、再度 GET 通信を行います。
レスポンスメッセージに「1-」が含まれていた場合は再度シリアルナンバーの取得を試み、watch.php に POST 通信を行います。
その後、101秒の Sleep の後、title.php への GET 通信からの処理を繰り返します。
まとめ
今回の攻撃に使われたファイルは Excel のスプレッドシート内に隠されたバイトコードからファイルを生成し、正規の Windows プログラムのコピーとそこに含まれる既知の脆弱性を利用した悪意のある DLL ファイルのロードを行うものでした。マクロを含む Excel ファイルは処理に必要なシートやセルをあらかじめ隠した巧妙なものでした。正規の Windows プログラムを利用しているので検知されづらいという特徴もあります。
最後に、本解析で難読化解除を行った VB スクリプトを GitHub に公開しています。解析の参考にしてください。
更新履歴
2020/05/08 PM Pirate Panda の別名を追記。