マルウェア感染対策を目的としたVBAマクロ実行の無効化

はじめに

IIJでは日々、様々な攻撃を観測しています。wizSafe Security Signal 2020年7月 観測レポートでも触れていますが、2020年7月以降には、過去に2019年9月から2020年2月にも観測していた、マルウェアEmotetに感染させることを目的としたメールを多く観測しています。

観測状況やメールの内容については観測レポートに記載していますが、当該マルウェアはVisual Basic for Applications(VBA)マクロを含むMicrosoft Office形式のファイルを開き、そのマクロが実行されることによってマルウェアに感染する挙動となっています。マルウェア対策ソフトウェアなどで検知出来ることが望ましいですが、残念ながら新しい検体などは検知出来ない場合もあることから、そのようなファイルを攻撃者が意図した形で開けないように対策することが必要です。本記事ではその方法についてご紹介します。

本記事は主にOffice 365 Apps、Office 2019、Office 2016を対象としています。また、動作は2020年9月23日時点のバージョンで確認しています。将来バージョンでは画面のデザインなどが変わる可能性があります。

実行の前に

Microsoft Officeに含まれるVBAは、攻撃者によって悪用されることが多いものの、機能自体が悪いものではありません。業務アプリケーションなどで正しく使用されている例も多くあります。そのため、設定時には影響範囲を意識する必要があります。適用において例えば、小さめの範囲から順次適用していき徐々に対象を広げていくような手法や、業務影響があることが分かっている部門から申告を受け付けて例外化していく手法などをご検討ください。また、検証環境などをお持ちであれば、その環境で設定を試してから本番環境に適用してください。

準備には手間を要しますが、一方で何も対策しなければ、ユーザが誤ってVBAマクロを実行してしまう可能性があります。適切な検証を実施しつつも、適用を延期し続けないようにご注意ください。

設定の方法

本記事では、以下の3パターンについて設定方法をご紹介します。

  1. Microsoft Officeアプリケーションの設定
  2. グループポリシーを用いた設定
  3. Microsoft Endpoint Managerを用いた設定

ご使用の環境に適した方法で適用してください。なお、このほかにもレジストリに値を作成するなど、設定手法は複数あります 1。環境に応じて手法を選択してください。

1. Microsoft Officeアプリケーションの設定

はじめに、Officeアプリケーション自体で設定する手法をご紹介します。まず「ファイル」メニューから「オプション」を選択します。オプションウインドウで「トラスト センター」(Office 2016以前は「セキュリティ センター」です。以降も同様に読み替えてください)を開き、「トラスト センターの設定」を押します。新しいウインドウが開きますので、「マクロの設定」を「警告を表示せずにすべてのマクロを無効にする」に設定します(図-1)。次に「OK」を押してトラスト センターを閉じ、オプションウインドウも「OK」を押して閉じてください。

図-1 トラスト センター内のマクロ設定

初期設定(警告を表示してすべてのマクロを無効にする)の場合は、アプリケーション上部に「コンテンツの有効化」というボタンが表示され、これを押すとマクロが実行されてしまいます(図-2)。「警告を表示せずにすべてのマクロを無効にする」を選択すると、このボタンが表示されなくなります。

図-2 セキュリティの警告表示

この設定はアプリケーション単位ですので、Word、Excelなど個別に設定を変更する必要があります。またこの設定はユーザ単位ですので、複数ユーザが同一端末を使用する場合は、ユーザ毎に設定する必要があります。そのため、業務で使用しているアプリケーションやユーザに対してのみ、設定をしないということも可能です。

ユーザ単位での設定が手間である場合は、次項でご紹介する管理用テンプレートを各端末にインストールし、ローカルグループポリシーとして設定することも可能です。

2. グループポリシーを用いた設定

次に、ドメイン環境においてグループポリシーを用いた設定方法をご紹介します。以下の動作は、Windows Server 2019 Standardで構築したドメイン環境に、Windows 10 Version 2004(May 2020 Update)にOffice 2016をインストールした端末を参加させて確認しています。

グループポリシーを設定する前に、Microsoft Officeの「管理用テンプレート」(admx)ファイルをダウンロードし、インストールする必要があります。次に必要なポリシーを設定することで、複数の端末・ユーザに対して設定を適用することが可能です。

管理用テンプレートのダウンロードとインストール

Microsoft Officeの管理用テンプレートは、Microsoft Download Centerからダウンロードすることが可能です。ダウンロードページやダウンロードされるファイルは英語ですが、その中身は日本語環境でも問題無く動作します。

ファイルには32ビット版(x86)と64ビット版(x64)があります。Office 2016以降用ファイルのダウンロードURLの「Install Instructions」項に、Office Customization Toolを使用する場合は配布するOfficeのバージョンと合わせる必要があるものの、含まれている管理用テンプレートはどちらのバージョンでも同じである旨の記載があります。本記事では管理用テンプレートのみを使用しますので、組織内で使用されているバージョンを意識せず、どちらか1つのファイルをダウンロードすれば問題ありません。

管理用テンプレートは、異なるバージョンのOfficeを対象としたものを並存させることが可能です。そのため、組織内に複数バージョンのOfficeが並存している場合は、各バージョンのファイルをダウンロードしてください。

ダウンロードされた実行(EXE)ファイルはプログラムをインストールするものではなく、圧縮されたファイルを展開するものです。ファイルを実行すると使用許諾契約書が表示されますので、確認の上で同意してください。次にファイルの展開先を指定します。複数のファイルが展開されますので、新規にフォルダを作成するなどして、そのフォルダを指定することをお勧めします(図-3)。場所を指定して「OK」を押すと、ファイルが展開されます。

図-3 展開先の指定

先ほど展開先として指定したフォルダを開くと、フォルダが2つとMicrosoft Excelワークシート(xlsx)ファイルが1つあることが確認出来ます。本記事で使用するのは「admx」フォルダの内容です。この中身を、ドメインコントローラの「C:\Windows\SYSVOL\domain\Policies\PolicyDefinitions」にコピーします(図-4) 2。なお、PolicyDefinitionsフォルダが存在しない場合は、新規に作成してください。

図-4 管理用テンプレートのインストール

コピー後にグループポリシー管理エディターを開くと、「コンピューターの構成」及び「ユーザーの構成」の「ポリシー」配下に、Microsoft Officeの設定が追加されているはずです。表示されていない場合は、管理用テンプレートファイルのコピー先が正しいことを確認してください。

グループポリシーを用いた設定では、全ユーザ・全OfficeアプリケーションにおけるVBAの実行を禁止する設定と、アプリケーションの設定と同様にユーザ単位・アプリケーション単位でVBAの実行を禁止する設定があります。自組織に適した設定を選択してください。なお、グループポリシーは設定するとレジストリ内に値が作成されます。ユーザが端末の管理者権限を有しているような場合においては自身でこれらの値を変更出来てしまうことから、ユーザの操作によって一時的に制限を回避出来てしまいます。そのため、VBAマクロの実行を完全に禁止するものではなく、誤って実行するリスクを低減する設定であるものとお考えください。

端末上の全ユーザ・全OfficeアプリケーションにおけるVBAの実行を禁止する

端末上の全ユーザ・全Officeアプリケーションに対してVBAの実行を禁止したい場合は、「コンピューターの構成」>「ポリシー」>「管理用テンプレート」>「Microsoft Office 2016(マシン)」>「セキュリティ設定」配下にある、「OfficeアプリケーションのVBAを無効にする」(図-5)を「有効」にすることで設定が可能です。なお、ポリシー名には「Office 2016」と記載されていますが、Office 365 Apps及びOffice 2019に対しても本設定は有効です。また、Office 2013以前に対して設定する場合は、それぞれ該当するバージョンを選択してください。

図-5 OfficeアプリケーションのVBAを無効にする

このポリシーを「有効」にした状態で端末にポリシーを適用し、VBAマクロを含むファイルを開くと、Officeアプリケーションを起動した際にメッセージが表示されます。表示内容はアプリケーションやバージョンにより異なります(図-6、図-7)。

図-6 Word 2016におけるVBA無効化時のメッセージ
図-7 Excel 2016におけるVBA無効化時のメッセージ

ユーザ単位・Officeアプリケーション単位でVBAの実行を禁止する

端末全体ではなく、ユーザ単位・Officeアプリケーション単位でVBAの実行を禁止したい場合は、「ユーザーの構成」>「ポリシー」>「管理用テンプレート」から、該当するアプリケーションを選択します(図-8)。

図-8 ユーザポリシーの管理用テンプレート

該当するアプリケーションの配下にある「~のオプション」>「セキュリティ センター」内に必要な設定があります(図-9)。

図-9 セキュリティ センターのポリシー

設定の方法は2通りあります。まず、「VBAマクロ通知設定」ポリシーを「有効」にし、オプションとして「通知せずにすべてを無効にする」とする方法です(図-10)。

図-10 VBAマクロ通知設定

このポリシーを適用すると、ユーザが「トラスト センター」内で任意にVBAマクロの設定を変更することが出来なくなります(図-11)。Office 2013以前においてはUI上では変更が可能ですが、ポリシーで指定した設定が優先されます。

図-11 VBAマクロ通知設定適用時のマクロ設定

警告が表示されず、またVBAマクロを有効化することが出来なくなるため、結果的にVBAマクロを実行出来なくなります。VBAエディタを開くことは可能ですが、実行しようとしてもエラーメッセージが表示されます(図-12)。

図-12 VBAエディタにおけるエラーメッセージ

もう1つは「インターネットから取得したOfficeファイル内のマクロの実行をブロックします」というポリシーを用いる方法です(図-13)。なお、このポリシーはOffice 2010用の管理用テンプレートにはありません。

図-13 インターネットから取得したOfficeファイル内のマクロの実行をブロックします

このポリシーを「有効」とし、適用すると、該当するファイルを開いた際にマクロが無効化されている旨が表示されます(図-14)。

図-14 インターネットから取得したOfficeファイル内のマクロの実行が無効化されている旨の表示

「インターネットから取得した」かどうかの判定は、ファイルのAlternate Data Stream(ADS)に保存されている、Zone.Identifierの設定値が使用されているようです。Zone.Identifierが設定されているファイルは、プロパティを表示した際に「当該ファイルが他のコンピュータから取得された」旨のメッセージが表示されます(図-15)。

図-15 Zone.Identifierが設定されている場合のファイルのプロパティ表示

プロパティからファイルへのアクセスを「許可」した場合には、以降は当該ファイルは「インターネットからダウンロードした」扱いではなくなります。また、メールに添付されたファイルの場合はMUA、ZIPなどで圧縮されたファイルの場合は展開に使用したアーカイバによっては、外部から取得したファイルでもZone.Identifierが設定されない場合があります。そのため、このポリシーは全ての「インターネットからダウンロードしたファイル」におけるVBAマクロの実行を禁止出来るものでは無い点には注意が必要です。

3. Microsoft Endpoint Managerを用いた設定

デバイスをオンプレミスのActive Directoryドメインコントローラではなく、Azure Active Directoryで管理している場合、グループポリシーをそのまま適用することは出来ません。しかし、Azureの契約内でMicrosoft Endpoint Managerを利用している場合は、同様の設定が可能です。

この設定は、Microsoft Endpoint Manager admin centerの「Devices」から「Configuration profiles」を開き、「Administrative Templates」のプロファイルを作成します。次に、オンプレミスのActive Directoryドメインコントローラにおけるグループポリシーと同様に、「Computer Configuration」(図-16)又は「User Configuration」(図-17)を設定します。デバイスへの適用が完了すれば、グループポリシーと同様に端末の設定が可能です。

図-16 Microsoft Endpoint ManagerにおけるComputer Configuration
図-17 Microsoft Endpoint ManagerにおけるUser Configuration

なお、本記事作成時点のMicrosoft Endpoint Manager admin centerには、Office 2016以降用の設定のみが存在していました。そのため、Office 2013以前はこの方法で制御出来ないものと考えられます。

設定を戻す

設定により不具合が生じ、適用した設定を元に戻すには、Officeアプリケーション内で設定した場合はその設定を初期値に戻します。また、グループポリシーやMicrosoft Endpoint Managerを用いた設定の場合は、設定を「未定義」に戻し、ポリシーを端末に適用することで、端末・ユーザの設定が優先されるようになります。

その他の対策

本記事ではVBAの実行を禁止する方法を記載していますが、他にも実行可能な対策はあります。例えば昨今のマルウェアはPowerShellを使用していることが多いため、不要な環境下ではPowerShellの実行を禁止する方法が考えられます。また、マルウェアのダウンロードは実行されてしまいますが、実行可能なアプリケーションを個別に許可するポリシーを定義することで、ダウンロードされたマルウェアの実行を防ぐ方法も考えられます。但し、この方法では正規のアプリケーションを選定する必要があるほか、正規のアプリケーションの脆弱性を用いた攻撃は防げない場合がありますので、注意が必要です。

おわりに

本記事ではVBAマクロの実行を禁止する方法についてご紹介しました。VBA自体は正規の機能であり、正しく利用されていれば有効な機能ですが、残念ながら悪用されることが多いことも事実です。そのため、必要な端末・ユーザのみが実行出来るように設定することをお勧めします。また、設定の可否に関わらず、確実に信頼出来るドキュメントを除いて「コンテンツの有効化」をしないよう組織内のユーザに対して注意喚起するなど、影響を少しでも抑える施策をご検討ください。

参考文献

Notes:

  1. [1] こちらの記事のMethod 5など: Microsoft, How to turn off Visual Basic for Applications when you deploy Office, 2020/01/24
  2. [2] ローカルグループポリシーとして使用する場合は、パスは「C:\Windows\PolicyDefinitions」になります。

執筆者プロフィール

六田 佳祐

セキュリティ本部 セキュリティビジネス推進部 セキュリティオペレーションセンター 副センター長