解析メモ

マルウェア解析してみたり解析に役に立ちそうと思ったことをメモする場所。このサイトはGoogle Analyticsを利用しています。

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

www.anomali.com

全体の俯瞰

今回のフィッシング攻撃は以下の流れで進行します。

  1. 既感染端末からフィッシングメールを送信
  2. 添付の xls ファイルを実行、MS Excel 起動
  3. マクロの有効化、同時にマクロの自動実行
  4. VBAスプレッドシート上のデータ(バイナリの文字列)を読み取り
  5. VBA がバイナリに変換し2つのファイル (exe, dll) を配置
  6. 同時にスタートアップにショートカット作成
  7. 再起動するとスタートアップにより exe が実行
  8. exe が dll をサイドローディング
  9. dll が UUID 取得と C2 サーバとの通信

本レポートではこの攻撃の流れの内、1~6 を説明します。

メールヘッダの分析

Anomali の報告に書かれている IoC を元に eml ファイルを VirusTotal から取得しました。テキストエディタでメールヘッダを確認します。

f:id:k1z3:20200507005812p:plain

From と To ヘッダは共に danang.gov.vn ですが、全ての Received ヘッダが dsp-int.vn ドメインであり、IP アドレスは 10.x.x.x なプライベート IP アドレスです。この 2 つのドメインの関係について Google で検索してみたところ、次のようなドキュメントが見つかりました。

f:id:k1z3:20200507005905p:plain https://pdfslide.net/documents/su-dung-email.html

これはダナン市の電子メールシステムのセットアップに関する資料のと考えられます。メールアドレスとして danang.gov.vn、Exchange で使用するドメイン名として dsp-int.vn が使われています。Received ヘッダは他になく、Anomali が分析している通り、同市の他職員から直接送られてきたメールと考えられます。つまり、既にほかに何らかの侵害された端末もしくはアカウントが存在する可能性があります。

f:id:k1z3:20200507010013p:plain

添付の MS Excel ファイルの分析

MS Excel ファイルの特徴

メールには xls ファイルが添付されています。このファイルには VBA のマクロが実装されており、マクロを有効にした時 (ファイルを開いたとき) に発生する Workbook_Open イベントをトリガーに処理が実行されます。また、ソースコードは難読化されています。

f:id:k1z3:20200507010049p:plain

f:id:k1z3:20200507010058p:plain

また、このファイルは Sheet1 しか見えませんが、Sheet2 と Sheet3 が非表示になっています。

f:id:k1z3:20200507010122p:plain

Sheet3 では A, B 列が非表示となっており、これを表示させると 4D 5A (MZヘッダ) から始まるバイトコードの文字列が 2 列 (2ファイル分) 隠されています。

f:id:k1z3:20200507010135p:plain

f:id:k1z3:20200507010143p:plain

VBA マクロの分析

難読化されている VBA マクロですが、比較的単純な難読化でありコード量も多くないことからデバッグで処理の内容や代入される値を追いかけていくことで処理を理解することができます。以降で説明する変数名や関数名は、処理内容から便宜的に名付けたものです。

まず、ファイルを開いたときに発生するイベントは 3 つのファイル名 (Utilman.exe, mpsvc.dll, ProgramDataUpdaterB.lnk) を生成します。

f:id:k1z3:20200507010210p:plain

続いて呼ばれる deploy 関数では Sheet3 に書かれていたバイトコードの文字列を読み取り (readWorksheet 関数)、バイナリに変換してファイルに書き込む処理 (writePayload 関数) を実行します。これにより、Utilman.exe, mpsvc.dll が生成されます。また、createStartup 関数により、Utilman.exe を実行するためのショートカットをスタートアップに書き込みます。

f:id:k1z3:20200507010225p:plain

f:id:k1z3:20200507010231p:plain

最後に showDummyWorksheet 関数にて Sheet1 を非表示にし、Sheet2 を表示します。

f:id:k1z3:20200507012349p:plain

ドロップされたファイルの分析

f:id:k1z3:20200507010521p:plain

Utilman.exe

正規の署名付き Windows プログラム (MsMpEng.exe) です。

f:id:k1z3:20200507010537p:plain

f:id:k1z3:20200507010547p:plain

Anomali の記事が参照している様に、DLL サイドローディングの脆弱性を抱えている実行ファイルです。Export 関数 ServiceCrtMain を呼び出しますのでこの Export 関数が実装された悪意のある DLL が同じフォルダに配置されていると、読み込まれて実行されます。

www.a12d404.net

ProgramDataUpdaterB.lnk

Utilman.exe を実行するためのショートカットファイルです。スタートアップに配置されていますので端末の再起動後に Utilman.exe を実行します。同じフォルダに mpsvc.dll が配置されていますので、これを DLL サイドローディングの脆弱性を利用して読み込みます。

mpsvc.dll

Export 関数に ServiceCrtMain を持つ DLL です。Utilman.exe が実行される時にこの関数が呼ばれます。

f:id:k1z3:20200507010630p:plain

DLL の特定の関数をデバッグする方法は以下をご参照ください。以降の説明で使用するアドレスはベースアドレス 6EC90000 で実行された時のものです。

x64dbg と IDA を使った DLL デバッグ方法 - 解析メモ

デバッグを進めていくと、6EC91B82 で呼んでいる 6EC91290 の関数が通信を行うための関数ということが分かります。最初に dns.google の名前解決を行います。OCSP (資格ではなくプロトコルの方です。) により証明書の失効を確認します。

f:id:k1z3:20200507010729p:plain

次いで 6EC91C37 では cmd /c wmic csproduct get uuid を実行します。これは Windows OS のシリアルナンバーを取得するためのコマンドです。

f:id:k1z3:20200507010748p:plain

通信を行うための関数は 6EC91D98 でも再度呼ばれます。ここでは C2 サーバとみられる skypechatvideo[.]online の title.php に GET 通信を行います。

f:id:k1z3:20200507010806p:plain

f:id:k1z3:20200507010823p:plain

f:id:k1z3:20200507011454p:plain

調査時点では 404 エラーが返ってきます。レスポンスメッセージに 「1-」が含まれるかどうかをチェックし、含まれていた場合は処理を続けます。含まれていない場合は 0x018A88 ミリ秒 (101秒) の Sleep が発生し、再度 GET 通信を行います。

レスポンスメッセージに「1-」が含まれていた場合は再度シリアルナンバーの取得を試み、watch.php に POST 通信を行います。

f:id:k1z3:20200507010841p:plain

その後、101秒の Sleep の後、title.php への GET 通信からの処理を繰り返します。

まとめ

今回の攻撃に使われたファイルは Excelスプレッドシート内に隠されたバイトコードからファイルを生成し、正規の Windows プログラムのコピーとそこに含まれる既知の脆弱性を利用した悪意のある DLL ファイルのロードを行うものでした。マクロを含む Excel ファイルは処理に必要なシートやセルをあらかじめ隠した巧妙なものでした。正規の Windows プログラムを利用しているので検知されづらいという特徴もあります。

最後に、本解析で難読化解除を行った VB スクリプトGitHub に公開しています。解析の参考にしてください。

更新履歴

2020/05/08 PM Pirate Panda の別名を追記。