2021/04/01

難読化された ZLoader トロイの木馬の亜種のドロッパー

2021 年 4 月 1 日 Ryan Estes 著

2021 年 3 月 18 日、DNSWatch Tailored Analysis Team は、ウォッチガードの従業員から不審なメールの報告を受けました。メールには、「Attachment_57904」という添付ファイルが含まれていました。DNSWatch のアナリストは初期評価を行って悪意のある指標や動作を探したところ、これが高度に難読化されたビジュアルベーシックスクリプト (.vbs) であることが判明しました。この発見を受け、さらに詳細に分析するためにこのファイルは Panda Attestation Team に安全に引き渡されました。今回のレポートでは、ファイルの分析プロセスと、最終的にファイルが ZLoader の亜種のドロッパーであると判明した経緯について紹介します。

関連情報

ファイルメタデータ

ドロッパー

ファイル名: Attachment_57904.vbs
ファイルサイズ: 1,403,043 バイト
MD5: DE5FD5E5D41D654355B21942E938FFC3
SHA1: B3898BADB33A62F84EBDB5459BDCB8187DDA1867
SHA256: A46AA343E090D3EEC942D0E186AACFC3AE5A4E37FF4DD0A27FA9751961E1524C
ファイルタイプ: Visual Basic Script (.vbs)

マルウェア

ファイル名: Rabin.dmg
ファイルサイズ: 463,360 バイト
MD5: B1FC7DC75445A016588402757FDD6FF6
SHA1: 12AA8A932E6711BECA796F67E717523D6794DE9E
SHA256: 94EB81BC58ADB976F21344D3EB273C9EB833AFBCADD121EB2AD38F1EF07A1F85
ファイルタイプ: 32-bit Dynamic Link Library (.dll)

使用されたツール

  • PowerShell
  • Python
  • CFF Explorer
  • Notepad++

外部リソース

  • https://github.com/ryanestes/MalwareAnalysis
  • https://www.virustotal.com/gui/file/94eb81bc58adb976f21344d3eb273c9eb833afbcadd121eb2ad38f1ef07a1f85/detection
  • https://analyze.intezer.com/files/94eb81bc58adb976f21344d3eb273c9eb833afbcadd121eb2ad38f1ef07a1f85

分析

メールで配信された添付ファイルは (マルウェアの検体)。

このファイルは、変数として宣言されコメントとして入力される意味不明な単語と、整数および整数としてマスキングされた他の単語から構成される大きな配列から構成されています。下記画像は、このファイルを開いたときに表示される内容です。


このスクリプトでは 500 個以上の配列が定義されていますが,そのうち execute 関数で処理される配列はちょうど 16 個あります。各 execute 関数には,スクリプト内で宣言された関数である Ahmedabad721() が引数として渡されます。Ahmedabad721() 関数は、上記の配列を引数として使用します。下の画像でこれを確認できます。

配列やコメントの中には、意味不明な単語も含まれていますが、その中に Ahmedabad721 関数があります。この小さな関数は次のように動作します。

  • for loop を使って、引数として渡された配列を繰り返し処理する
  • 配列のインデックスにある整数から 8 を引く
  • 結果の整数を chrW() で文字に変換する
  • その文字を変数に連結する
  • 連結された文字列全体を返す

下図は、この処理の流れを示したものです。

スクリプトから execute 関数で処理される 16 個の配列を抽出した後、Python スクリプトをハックして Ahmedabad721 の機能を再現しました。以下に、「WuDT」に重点を置いて実行される関数を順に列挙します(詳細は後述)。下記画像の小さなスクリプトは、スクリプト内のすべての関数をプリントします。このスクリプトは、上記リンク先の「外部リソース」にある Malware Analysis GitHub repo にあります。

次の 4 つの画像は、WuDT 配列の難読化が解除されて Visual Basic のコードに変換される様子を示しています。この関数は、別の巨大な単語の配列を使用して別のファイルを構築することがわかっています。この配列内の各辞書単語は、実行されなかったオリジナルの VBS 内の他の配列 (残りの約 500 個) と一致しています。次のステップで、WuDT 配列が、ZLoader トロイの木馬の亜種を含む ZIP フォルダ全体に変換される様子を説明します。

  • オリジナルのスクリプトにある、オリジナルの WuDT 配列の断片。整数のリストに入った単語に注目してください。ここで見られる唯一の単語は「hogging」で、これはスクリプトに埋め込まれた変数で定義された 18 に相当します。
  • Python スクリプトで文字列変数がそれぞれの整数に置き換えられた配列。
  • Ahmedabad721 関数を使って実行された後の WuDT 配列。コメント部分にある単語を利用して、さらに難読化されていることに注目してください。また配列が、別の単語の大きなリストになっており、それぞれがオリジナルのスクリプト内のまったく異なる配列に対応していることにも注目してください。
  • 最終的に使用される関数の難読化を解除したもの。
  • WuDT 関数だけが別のファイルを生成しているため、これが最終的にドロップされる悪意のあるファイルであることが推測できます。この関数はファイルを生成するだけなので、他の execute 関数 (WuDT ではないもの) をコメントアウトし、オリジナルの VBS を実行して、WuDT が最終的に生成するファイルを生成できます。最終的に、「assai.zip」という名前の zip フォルダが生成されました。

    assai.zip フォルダを解凍すると、無数の異なるファイルが生成されます。「Rabin.dmg」という名前のファイルを除いてすべてが 1KB です。1KB のファイルを調べると、それぞれに無意味な任意の文字列が 1 行だけ含まれており、さらにぶ難読化されていることがわかります。

    さらなる難読化といえば、macOS のインストーラとされる Rabin.dmg は、実は元々「us.dll」という名前の 32 ビットの DLL です。

    Rabin.dmg ファイルは、実際には、ZLoader (Ursnif/Gozi) の亜種です。VBS はおおよそ以下のような手順で実行されます。

    対策

    ネットワークをこのマルウェアに感染させないために最初にできる対策は、ドロッパーとマルウェアの亜種のシグネチャをウイルス対策ソフトウェアなどのエンドポイント検出システムに追加することです。また、このファイルが電子メールで送られてきたことを考慮すると、これまでと同じようなフィッシング対策も有効です。

    • 悪意のあるメッセージ本文と添付ファイル、特に添付ファイルに対する電子メールフィルタリングを有効化、または導入してください。
    • 全従業員を対象とした、継続的なフィッシング対策トレーニングを実施してください。
    • フィッシング対策のトレーニングを実施するためのリソースがない場合は、すべてのメールの添付ファイル、ハイパーリンク、クリック可能な画像をよく調べてください。不審なものは絶対にクリックしないように周知してください。
    • 不審なメールは、可能であれば、組織のセキュリティ担当者に転送してください。
    • また、不審なものを誤ってクリック、ダウンロードをしてしまった場合は、セキュリティ担当者に報告してください。うっかりクリックしてしまった場合や、「試しにクリックをしてみた」だけの場合でも同様です。
    • すべてのシステムとエンドポイントにパッチを適用し、可能な限り最新で高度なセキュリティ対策を講ずるようにしてください。