
かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ メモ. VBScript廃止に備えるのはまだ早い? 使用状況を把握する2つの方法
2025年06月10日配信
2025年06月10日更新
執筆者:山内 和朗
2024年05月24日配信の以下のメモにもリンクを追加しましたが、Microsoftは5月中頃にVBScriptの次の廃止フェーズ(フェーズ2)に進む前に、組織内でVBScriptの使用を検出する方法を紹介するブログを公開しました。このMicrosoftのブログですが、いくつか突っ込みどころがあったので、このブログで紹介されている検出方法について補足します。
VBScript deprecation: Detection strategies for Windows (May 17, 2025)|Windows IT Pro Blog(Tech Community)
ITニュース. VBScript廃止までのタイムライン発表、ただし廃止時期は未定 (2024年05月24日配信)
Microsoftのブログでは、最初にWindows SysinternalsのSystem Monitor(Sysmon)を使用した、VBScriptの使用を監視する方法について紹介されています。
Sysmon|Sysinternals(Microsoft Learn)
Sysmonは、個々のコンピューターやネットワーク上の、潜在的で悪質な活動を追跡することを目的に開発されたユーティリティであり、プロセスの作成、終了、ドライバーのロード、実行可能イメージのロード、ファイル作成タイムスタンプの変更、ネットワーク接続、リモートスレッドの作成、ディスクへのRAWアクセスなどを監視し、イベントログに記録します。
Sysmonは、インストールなしで利用できるほとんどのWindows Sysinternalsのユーティリティとは異なり、インストールが必要なユーティリティです。管理者として開いたコマンドプロンプトで次のように実行すると、Sysmonがドライバーとしてインストールされ、監視がスタートします(画面1)。
sysmon -i
画面1 Sysmonをインストールする
ブログに示されている構成ファイルは、VBScript実行時にロードされるDLLイメージ「vbscript.dll」を検出するためのものです。なお、インストールしたsysmonバージョンのスキーマバージョン、スキーマバージョンで利用できる構成、および構成ファイルの記述例は、sysmon -? configコマンドで確認することができます。
構成ファイルを使用してSysmonを構成するには、次のように実行します(画面2)。構成ファイルの指定なしでもう一度、sysmon -cコマンドを実行すると、構成内容を確認することができます。
sysmon -c <構成ファイル(XML)のパス>
画面2 構成ファイル(XML)を使用して、Sysmonの動作を構成する
Sysmonで監視中(アンインストールされるまで監視を続けます)にVBScriptを実行すると、イベントログの「アプリケーションとサービスログ」の下にある「Microsoft-Windows-Sysmon/Operational」に、イベントID「7」のイベントが記録されるようになります。それ以外のイベント(プロセスの作成や終了など)も多数記録されるため、イベントIDでフィルターすると簡単に見つかります。ただし、イベントID「7」のイベントだけでは何も判断できません(画面3)。フィルターを解除して直前のイベントを調べることで、呼び出し元のスクリプトを特定することができます(画面4)。
画面3 Sysmonにより記録されたVBScript使用の痕跡
画面4 直前のイベントを調べて、VBScriptのDLLを呼び出したスクリプト(この例ではslmgr.vbs)を特定する
Sysmonは、sysmon -uコマンドでアンインストールすることができます。ただし、Sysmonをアンインストールすると、イベントを解析するためのイベントマニフェストも削除されるため、記録されたイベントログを参照できなくなるので注意してください。sysmon -mコマンドを実行すると、Sysmonのドライバーをインストールすることなく、イベントマニフェストだけをインストールすることができ、再びイベントログを参照できるようになります。
Sysmonの動作はコマンドラインパラメーターを使用して、インストール時またはインストール後に変更することができます。詳細なフィルター規則を記述した構成ファイル(XML)を作成して、Sysmonを構成することもできます。
ブログでは、指定したフォルダーを再帰的に検索し、拡張子.vbsのファイルの一覧をCSVに出力するPoerShellのサンプルコードが示されています(画面5)。
画面5 同じコードブロックが繰り返されているこのサンプルコード、なんか変
しかし、同じコードブロックが2回繰り返されていて、明らかにおかしなサンプルコードです。必要なのは前半だけで、コピー&ペーストする際に次のような1行が抜けてしまってしまったのだと想像しました。
$results |Export-Csv -Path $logPath
より適切なコードに書き換えてみましょう。ログファイルのパスは、専用のサブディレクトリが作成されてしまうのが個人的に嫌なので、$env:TEMPに変更しました。また、VBScriptのスクリプトを含むファイルの拡張子としては、.vbs以外にも.vbe(VBScript Encoded Scriptファイル)や.wsf(Windows Scriptファイル)もあります。それらの拡張子も検索するようにしました。また、CSVに出力する際に、ファイル名に日本語が含まれている場合の文字化け防止措置を講じました。このスクリプトは、拡張子.vbs、.vbe、.wsfのファイルを検索しますが、もっと言えば、.hta(HTMLアプリケーション)や.asp(クラシックASP)にもVBScriptが含まれる可能性があることを付け加えておきます。
検索対象としてC:¥Windowsを指定すると、多数のVBScriptのスクリプトが見つかることに驚くでしょう(画面6)。Windows自身がVBScriptにまだまだ依存している状況です。VBScriptが削除されるその日は当面こないのではないでしょうか。
画面6 スクリプトを訂正、改良して実行。C:¥Windowsの下には大量のVBScriptのスクリプトが見つかる
お勧めの一冊Windows Sysinternalsユーティリティの日本語解説については、少し古い書籍ですが、こちらをお勧めします。System Monitor(Sysmon)については、「第9章 セキュリティのユーティリティ」で詳細な使い方が説明されています。
著者 : Mark E. Russinovich、Aaron Margosis 著 ※書籍の正誤情報、およびユーティリティのこれまでの更新情報については、旧ブログサイトをご覧ください。 |