※本記事にはアフィリエイトリンクが含まれます。詳しくはプライバシーポリシー・広告掲載についてをご覧ください。
Visual Basic(VBA/VBScript)は、Officeマクロやシステム管理スクリプトとして広く使われてきた技術ですが、サイバー攻撃の初期侵入手段としても長年悪用され続けています。MITRE ATT&CKではT1059.005 Visual Basicとして分類されており、APT28(Fancy Bear)やGamaredon、Emotetなど多数の攻撃グループ・マルウェアによる利用が確認されています。本記事では、Visual Basicが攻撃に悪用される理由、実際の攻撃事例、検出方法、そして実務で使える緩和策を日本語で詳しく解説します。
※本サイトはMITRE ATT&CK®の非公式日本語解説サイトです。Based on MITRE ATT&CK® v16。
T1059.005 Visual Basicの概要
T1059.005は、T1059 Command and Scripting InterpreterのSub-techniqueであり、Execution(実行 / TA0002)タクティクスに属します。攻撃者はVisual Basic for Applications(VBA)マクロ、VBScript、HTML Application(HTA)などを使用して、悪意あるコードの実行、ファイルのダウンロード、追加マルウェアの展開、システム情報の収集など多岐にわたる攻撃活動を行います。
Visual Basicの攻撃は主に3つの形態に分類されます:
- VBA(Visual Basic for Applications)マクロ:Word、Excel等のOffice文書に埋め込まれたマクロコード
- VBScript:wscript.exe / cscript.exe で実行されるスクリプトファイル(.vbs、.vbe)
- HTA(HTML Application):mshta.exe で実行される、VBScriptを含むHTMLアプリケーション(.hta)
Visual Basicが攻撃に悪用される理由
- Office文書への埋め込み:ビジネスメールに添付されるWord・Excelファイルに自然に仕込むことができ、フィッシングの成功率が高い
- OS標準のスクリプトエンジン:VBScriptはWindowsに標準搭載されたwscript.exe / cscript.exeで実行でき、追加ツールが不要
- WMI・COMオブジェクトへのアクセス:VBAやVBScriptからWMIやCOMオブジェクトに直接アクセスでき、システムの深部を操作可能
- 難読化の容易さ:文字列連結、Chr()関数、変数置換などで検出回避が比較的容易
- 他の攻撃手法との連鎖:マクロからPowerShellやcmd.exeを起動する「ドロッパー」として機能し、多段攻撃の起点となる
- ユーザーの信頼:「コンテンツの有効化」をクリックさせるソーシャルエンジニアリングが長年にわたり有効
攻撃シナリオ例
APT28(Fancy Bear)— VBAマクロによるスピアフィッシング
ロシアの軍事情報機関GRUに関連するAPT28は、標的型フィッシングメールにVBAマクロ入りのOffice文書を添付する手法を多用します。典型的な攻撃フローは以下の通りです:
T1566(フィッシング)→ T1204.002(悪意あるファイルの実行) → T1059.005(VBAマクロ実行)→ T1059.001(PowerShell実行)
- 政府機関・防衛関連組織の職員に対し、業務関連を装ったWord文書を送付
- ユーザーが「コンテンツの有効化」をクリックすると、AutoOpen/Document_Openマクロが起動
- VBAマクロがPowerShellコマンドを生成し、バックグラウンドで実行
- C2サーバーからSednitやZebrocyなどのマルウェアをダウンロード・実行
Gamaredon — VBAマクロの大量展開による持続的攻撃
ウクライナを主な標的とするロシア系グループGamaredon(Primitive Bear)は、VBAマクロを攻撃の中核技術として極めて頻繁に使用します。
- 感染した文書が開かれると、VBAマクロがNormal.dotm(グローバルテンプレート)を改変し、以後作成・編集する全Word文書にマクロを自動注入
- VBScriptファイル(.vbs)をスタートアップフォルダやスケジュールタスクに配置して永続化を確保
- VBScriptでC2通信を行い、新しいペイロードのダウンロードや窃取データのアップロードを実行
- 難読化にはChr()関数と文字列連結を多用し、シグネチャベースの検知を回避
Emotet — マクロベースの大規模初期感染チェーン
Emotetは世界最大級のマルウェア配布基盤として知られ、VBAマクロを初期感染の主要経路として活用してきました。
- 大量のスパムメールにVBAマクロ入りのWord/Excel文書を添付して配布
- 「請求書」「配送通知」「給与明細」など業務文書を装い、マクロの有効化を誘導
- VBAマクロがPowerShellまたはcmd.exeを起動し、複数のC2サーバーURLに対してペイロードのダウンロードを試行
- ダウンロードされたEmotet本体がさらにTrickBot、QakBot、Ryukランサムウェアなどの追加マルウェアを展開
検出方法
Officeアプリケーションからのプロセス生成監視
VBAマクロ攻撃の最も確実な検出ポイントは、Officeプロセスからの不審な子プロセスの生成です。以下のパターンはほぼ確実に攻撃活動を示します:
- winword.exe / excel.exe → powershell.exe:マクロからPowerShellを起動するEmotet等の典型パターン
- winword.exe / excel.exe → cmd.exe:コマンドシェル経由でのペイロード実行
- winword.exe / excel.exe → mshta.exe:HTA経由でのスクリプト実行
- winword.exe / excel.exe → wscript.exe / cscript.exe:VBScriptの外部実行
- winword.exe / excel.exe → certutil.exe / bitsadmin.exe:ファイルダウンロード
Sysmon Event ID 1(プロセス作成)やWindowsイベントID 4688で、ParentImageフィールドがOfficeアプリケーションのプロセスを指しているかを監視します。
AMSI(Antimalware Scan Interface)によるVBAスキャン
Office 365およびOffice 2019以降では、AMSIがVBAマクロの実行時にスクリプトの内容をリアルタイムでスキャンします。これにより、ファイル上では難読化されていたコードも、実行時に展開された状態で検査されます。
- AMSIはVBAマクロの実行前に難読化を解除した状態のコードをセキュリティソフトに渡す
- AMSI対応のエンドポイント保護ソフトがスキャン結果に基づいてブロック判定を行う
- Chr()関数や文字列連結による難読化を突破して検出可能
VBScript実行ログの監視
wscript.exe / cscript.exe によるVBScript実行を監視することで、マクロ外のVBScript攻撃も検出できます。
- Sysmon Event ID 1:wscript.exe / cscript.exe のプロセス作成を記録し、コマンドラインから実行されたスクリプトのパスを確認
- 不審な実行パス:%TEMP%、%APPDATA%、ダウンロードフォルダからの.vbs/.vbe実行は要注意
- Windowsイベントログ:Microsoft-Windows-Sysmon/Operationalログに加え、Microsoft-Windows-WMI-Activity/Operationalログでスクリプト実行を追跡
- mshta.exe の監視:HTAファイル(.hta)の実行はほぼ全てが不審。mshta.exe のプロセス作成自体をアラート対象にすることを推奨
緩和策(Mitigations)
| ID | 緩和策名 | 概要 |
|---|---|---|
| M1042 | 機能の無効化・削除 | Officeマクロをデフォルトで無効化。グループポリシーで「通知を表示せずにすべてのマクロを無効にする」を設定。VBScript/wscript.exeの無効化も検討 |
| M1054 | MOTW(Mark of the Web)の適用 | インターネットからダウンロードしたファイルのマクロ実行をブロック。Office 2022以降は既定でMOTW付きファイルのマクロを無効化 |
| M1040 | ASR(攻撃面の縮小)ルール | Microsoft Defenderの攻撃面縮小ルールで「Officeアプリケーションによる子プロセス作成をブロック」「マクロからのWin32 APIコールをブロック」を有効化 |
| M1038 | 実行防止 | AppLocker/WDACでwscript.exe、cscript.exe、mshta.exeの実行を制限。業務上必要な場合のみホワイトリストで許可 |
| M1049 | ウイルス対策/マルウェア対策 | AMSI連携によるVBAマクロのリアルタイムスキャン。メールゲートウェイでのマクロ付きOfficeファイルのフィルタリング |
| M1045 | コード署名 | 信頼できる発行元が署名したマクロのみ実行を許可するポリシーを適用 |
実装チェックリスト
- ☐ グループポリシーでOfficeマクロをデフォルト無効に設定(「通知を表示せずにすべてのマクロを無効にする」)
- ☐ MOTW(Mark of the Web)によるインターネットファイルのマクロブロックを有効化
- ☐ Microsoft DefenderのASRルール「Officeアプリケーションによる子プロセス作成をブロック」を有効化
- ☐ ASRルール「Officeマクロからの Win32 API コールをブロック」を有効化
- ☐ AppLocker/WDACでwscript.exe、cscript.exe、mshta.exeの実行を制限
- ☐ AMSI対応のエンドポイント保護ソフトを導入
- ☐ メールゲートウェイでマクロ付きOffice文書(.docm、.xlsm)のフィルタリングを設定
- ☐ Sysmonを導入し、Officeプロセスからの子プロセス生成を監視
- ☐ 署名済みマクロのみ許可するポリシーを適用

おすすめセキュリティ対策ツール
VBAマクロやVBScriptベースの攻撃を検出・防御するためには、AMSI連携に対応したエンドポイント保護とメールセキュリティが重要です。
🛡️ まず今日から始めるなら:Officeマクロの無効化 + AMSI対応セキュリティソフトの導入
マクロをデフォルト無効にするだけで、VBAベースの攻撃の大部分を防げます。加えてAMSI連携のセキュリティソフトで、難読化されたマクロコードも実行時に検出可能になります。
- ESET(イーセット) — 誤検知が少なく軽量。AMSI連携でマクロ型マルウェアもリアルタイム検出
- ウイルスバスター — 日本語サポートが充実。メール添付ファイルのスキャンに強い国産セキュリティソフト
- Norton(ノートン) — 世界最大手のセキュリティベンダー。多層防御でマクロ攻撃からの保護を実現
※ 上記はアフィリエイトリンクです。料金・機能は各公式サイトで必ずご確認ください。
まとめ:Visual Basic攻撃対策の要点
- マクロを無効化する:グループポリシーでOfficeマクロをデフォルト無効に設定し、MOTW付きファイルのマクロ実行をブロックする
- 子プロセス生成を監視する:Officeアプリケーション(winword.exe、excel.exe)からpowershell.exe、cmd.exe、wscript.exeなどが起動するパターンは高い確率で攻撃活動
- AMSIで検出する:AMSI対応のセキュリティソフトにより、難読化されたVBAマクロでも実行時に検出可能
- ASRルールで攻撃面を縮小する:Microsoft Defenderの攻撃面縮小ルールで、マクロからの不審なプロセス作成やAPI呼び出しをブロック
- スクリプトホストを制限する:wscript.exe、cscript.exe、mshta.exeの実行をAppLocker/WDACで業務上必要なケースのみに制限する
参考資料:MITRE ATT&CK T1059.005 – Visual Basic / 情報セキュリティ10大脅威 2026(IPA) / JPCERT/CC
Based on MITRE ATT&CK®, © The MITRE Corporation. Licensed under Apache License 2.0. 本記事は非公式の日本語解説です。

コメント