[注意] 国内企業をターゲットに大量拡散するExcelファイル分析 – AmmyyリモートコントロールバックドアとClopランサムウェアの拡散

最近、国内で最も問題となっているターゲット型の攻撃は、企業をターゲットとして拡散しているAmmyyリモートコントロールバックドアと、これによってインストールされるClopランサムウェアである。バックドアファイルはオンラインで公開されているAmmyyリモートコントロール・プログラムのソースを利用して製作され、これを攻撃対象のPCに埋め込んだ後、リモートでシステムにアクセスする。攻撃者が掌握したシステムにおいて最終的に実行しようとする不正なファイルは、Clopランサムウェアである。


特徴として、この攻撃は拡散過程において攻撃対象のPCがドメインコントローラを利用しているAD(Active Directory)サービス構造のユーザーかどうかを確認する。該当する場合は拡散プロセスを実行するが、これは一般的に、ユーザーをドメインで構成してシステムを運用する企業を攻撃対象とすることを意味している。

企業ユーザーをターゲットにしてインストールされるハッキングツール、Ammyy (CLOPランサムウェア)
ハッキングツール、Ammyyを利用したCLOPランサムウェアの拡散
国内ユーザーをターゲットに拡散している不正Excel文書ファイル


問題は、攻撃の発端となる不正なファイルが非常に巧妙に作られたExcelファイルだということである。Excelファイルは、企業の電子メールアカウントを対象に同時多発的に送信されるが、大量送信と送信された電子メールの内容によって、ユーザーがそれを実行する可能性が非常に高い。今回の記事では、過去から現在までAmmyyリモートコントロールバックドアとClopランサムウェアが含まれているExcelファイルの機能およびその特徴について、変化の順を追って詳細に分析する。そして、この過程で不正なファイルが利用した「Excelマクロ」という過去のExcel 4.0バージョンのマクロ方式のXLMについても説明する。 


[1つ目]

* 時期 – 2018年12月26日、最初に確認
* 主な特徴 – Excel 4.0 (XLM)のマクロシートを利用、マクロシート非表示、msiexec.exeプロセスを利用したファイルのダウンロード

不正Excelファイルを開くと、”文書の内容を表示するには、上部のメッセージバーから[コンテンツの有効化]をクリックしてください”という韓国語または英語メッセージが確認できる。コンテンツの有効化は、マクロコードの動作に対する許可を意味している。メッセージはテキストではなく、攻撃者が意図的に作成した画像になっており、この画像名は図を意味する「Рисунок」となっている。この偽のメッセージ部分は、後に説明する不正Excelファイル全てに共通する特徴である。  

有効化された不正なマクロはXLMマクロで作成されているが、これは従来のVBAとは全く異なる。XLMマクロは、過去のExcel 4.0(1992年リリース)のデフォルトマクロ形式である。以降、1993年に登場したExcel 5.0から現在まではデフォルトマクロコードにVBA言語を使用しているが、現在でも過去のExcel 4.0のXLMマクロ機能をサポートしている。攻撃者はこの点を悪用し、アンチウイルスソフトで比較的に検出されやすいVBA方式を回避した。

現在ExcelプログラムでXLMマクロを利用する方法は、Excel 4.0マクロシート(Excel 4.0 Macro Sheet)が代表的である。これ以外にも、セル(Cell)名の管理者を利用してXLM関数を指定する、あるいはVBAコードでマクロ関数を呼び出せる方法があるが、ここでは不正なファイルが利用していたマクロシートについて説明する。マクロシートは、一般的なワークシートとは異なりセルの数式に入力された値をすぐに計算せず、それぞれをマクロ関数として認識し、セル単位で実行する。シートのため、「非表示」を適用することもできる。次は、拡散されたExcelファイルに隠されていたExcel 4.0マクロシートである。デフォルトで画面に表示されるシート(Лист)を右クリックして[再表示]を選択すると、マクロ(Макрос)シートが確認できる。

A1セルは名前がAuto_Openとして指定され、ドキュメント実行時に自動でA1セルが実行されるようにする。=EXEC( )は個別のプログラムを実行する関数であり、msiexec.exeや/i等の必須引数情報を渡す。=HALT( )は=RETURN( )と類似しているが、RETURNは現在実行中の関数のみを中断するが、HALTはすべてのマクロを以降の段階で中断する。ユーザーのコンテンツ使用許可によってマクロが実行されると、msiexec.exeプロセスが不正なアドレスにアクセスし、updateという名前のmsiファイルをダウンロードして実行する。

マクロ情報を含むすべてのWorkbookシートデータは、BIFF(Binary Interchange File Format)形式で保存される。BiffViewやOledumpのようなツールを利用して不正ExcelファイルのWorkbookストリーム構造を表示すると、各シートの情報が含まれているBOUNDSHEET(85h)は、合計2つある。これは、順番にМакросとЛистシートの情報と連結する。1つ目のシートМакросのBOUNDSHEET情報は長さが22になっており、4番と5番の値がそれぞれ01hである。4番の値はシートの現在の状態で、01hはHiddenを意味する。5番の値はシートのタイプで、01hはExcel 4.0マクロシートを意味する。一方、2つ目のシートЛистはVisibleと同時に一般のワークシートまたはダイアログシートである。セルの数式に入力されたデータもCELL FORMULA(6h)に保存される。このように、Excelファイルを直接実行しなくてもWorkbookシートのデータを構文解析して疑わしいシートの存在有無を確認できる。 


[2つ目]
* 時期 – 2019年2月13日、最初に確認 ~ 5月16日
* 主な特徴 – Excel 4.0 (XLM)マクロコード難読化開始

Excel 4.0マクロコードを利用した不正Excelファイルは、最初に発見されて以降、コードの難読化が徐々に進められていった。VBAを利用したほとんどの不正なOfficeファイルがVBAコードを難読化するのと同じく、Excelマクロも難読化が可能である。マクロシートのセルには1つのセル数式のみ入力可能なため、限られた関数表現内ではこれを難読化するのが困難である。そのため、コードの分岐フロー自体を把握しにくくした。 

基本的にマクロシートはAuto_Open等で名前の指定がない場合は、A1セルの数式を最初に実行する。以降、現在実行中の列(Column)から下方向にコードのフローが実行される。この過程において「Macro1」や「Macro2」のように名前が指定されたセルを呼び出して分岐フローが変更されることがある。分岐すると、これまで実行していたルーチンを保存し、新しいコールスタックを生成してその列から下方向にRETURNされるまで実行する。不正なファイルは、コードのフローをわかりづらくする以外にも、既存の=EXEC関数によって実行されていたmsiexec.exeプロセスと伝達引数の情報を、ひとつのセルではなく複数のセルに分割し、実行途中にデータを組み合わせて実行するようにした。 

下記は、5月16日に大量に拡散された不正Excelファイルである。以前よりも更に複雑な形に難読化されているが、列を越えても分岐している。Auto_OpenやA1ではなく、D2から始まる。このように複雑な形になっている場合、実行フローを目で追っていくのが困難になるが、この時VBAデバッグと同様に、コードをステップ実行する機能を利用すれば、どのようなセルの数式によってフローが移動するのか把握できる。

Excel 4.0 XLMマクロコードの分岐方式を詳細に理解するために、例として作成したマクロシートで説明する。ユーザーの目に見えるマクロ関数は「A1」、「A2」、「B1」のメッセージを表示させるダイアログボックスと、EXECを通して実行される電卓(calc.exe)である。計2つの列にExcelマクロコードが存在し、行の中間には何も数式が入力されていないセルもある。この時、実行フローの順序は次の通りである。 

1) (Auto_Open, A1) ALERT 「A1」メッセージのダイアログボックス 
2) (A2) Macro1 の名前を持つセルを実行 
3) (Macro1, B1) ALERT 「B1」メッセージのダイアログボックス 
4) (B2) RETURN 現在実行しているマクロを終了 
5) (A3) Popup の名前を持つセルを実行 
6) (Popup, B13) EXEC 電卓を実行 
7) (B14) RETURN 現在実行しているマクロを終了 
8) (A4) ALERT 「A3」 メッセージのダイアログボックス 
9) (A5) RETURN 現在実行しているマクロを終了 


[3つ目]

* 時期 – 2019年5月16日、最初に確認
* 主な特徴 – Excel 4.0 (XLM)マクロではなく、VBAマクロ形式に変更、一部ファイルでは非表示シートを発見 

不正Excelファイルが大量に拡散した5月16日、ファイルのマクロ実行方式が、これまでに説明したExcel 4.0(XLM)マクロシート以外に、VBAマクロ方式も存在するという事実が確認された。同じ文書の内容や画像が含まれるファイルだが、ファイルごとにマクロ実行方式2種類のうち、いずれかを使用していた。そして、Excel 4.0(XLM)マクロシートを利用した不正なファイルは、この日の大量拡散を最後に、発見されていない。 

独特なのは、収集されたファイルで、攻撃者がマルウェアの実行方式をExcelマクロからVBAマクロに変更しようとしている様子を見せているという点である。ほとんどのファイルは隠し属性を持つExcel 4.0マクロシートのみが存在するか、VBAコードのみが存在していたが、一部のファイルではVBAコードが存在しながらも隠し属性を持つシートがあった。非表示処理されたシートは、マクロシートではなく通常のワークシートであった。不正なファイルの製作過程においてシートを非表示にしたが、これを使用せずにVBAコードを追加した事例と考えられる。

VBAコードは、ユーザー定義フォーム(Form)を利用していた。Workbook_Open関数を利用してExcel文書のWorkbookシートが開かれた場合、自動でVBA関数が実行されるが、この過程でフォームに使用されたラベル、タグ情報等を組み合わせてデータを構成している。ユーザー定義フォームを利用した不正なマクロは以前にも紹介しているため、詳しい内容は割愛する。msiexec.exeプロセスが不正なアドレスにアクセスし、msiファイルをダウンロードして実行する行為は以前と同じである。 

MS Word文書でフォームエンティティを利用したマルウェア

[4つ目]
* 時期 – 2019年5月21日、最初に確認 ~ 作成日基準の現在
* 主な特徴 – VBAマクロコードにおいてExcel 4.0 (XLM)マクロ関数の利用部分を追加、cmd.exeプロセスによるファイルダウンロードに変更

作成日を基準に現在まで出回っている形式である。Excel 4.0マクロシートを利用する不正なファイルは発見されず、非表示のシートがあるファイルも確認されなかった。VBAマクロコードでのみ作動し、VBAコードでユーザー定義フォームを利用する部分は以前と同じである。VBAマクロコードは、[3つ目]のケースに比べて非常に簡潔になっている。コードをモジュール化せずフォームエンティティにのみアクセスしてWebリソースに接続し、バイナリをオブジェクトとして生成した後に実行する機能だけが存在する。ここで興味深い点があるとすれば、VBAコードでExcel 4.0マクロ関数を使用する部分が追加されたことである。

VBAの「ExcuteExecel4Macro」メソッドは、Excelマクロ関数、ここではMESSAGEやReplace関数を実行させ、その戻り値を受け取っている。ExcelマクロがExcel 4.0マクロシートだけではなく、他の方式でも作動させることが可能であることを意味している。不正ExcelファイルはExcelマクロを通してExcelプログラム下部のステータスバーに表示するメッセージを「Ururu」から「Ururu2」に変更する。これは、ファイルをダウンロードする不正な行為自体には影響を与えない部分であり、なぜこのコードを追加したのかは正確には分からない。ただし、Excelファイルが追加ファイルのダウンロードに失敗した場合エラーが発生するため、「Ururu2」の部分まではフローが移動しない。 

行為の観点からは大きく変化している。従来はmsiexec.exeプロセスでmsiファイルをダウンロードしてデコードし、PEファイルを実行していたが、この時からはcmd.exeプロセスによってダウンロードしたPEファイルのエンティティを直接実行する方式へ変更された。 


ここまで、AmmyyリモートコントロールバックドアとClopランサムウェアが含まれているExcelファイルに対して、その変化と特徴について説明してきた。攻撃主体については明確な確認がなされていない。しかし、継続的にADインフラを使用している国内企業をターゲットに、アンチウイルス製品で検出されにくい手法を見つけてマルウェアを製作している点が興味深い。上記タイプのExcelファイルは、実行することでさらなる不正なファイルの拡散が可能なため、ユーザー(特にドメインコントローラを利用しているユーザー)は特に注意が必要である。疑わしいメールが届いた場合、絶対に開いてはならない。

AhnLab V3では、AmmyyリモートコントロールバックドアとClopランサムウェアを含むExcelファイルを次のように診断している。
– XLS/Downloader
– X97M/Downloader
– MSOffice/Xprocess
– VBA/XLMacro.S1等

0 0 vote
Article Rating
guest
0 Comments
Inline Feedbacks
View all comments