製品コラム
セイテクエンジニアのブログ 製品コラム 不審なプロセスの監視(簡易版)ーBOM for Windows活用例
2024年07月19日配信
2025年04月25日更新
執筆者:セイ・テクノロジーズ エバンジェリスト
前回は、AppLockerの状況を「BOM for Windows Ver.8.0 SR1(以下、BOM)」で継続的に監視することによって、サーバー上で実行された不審なプロセスの可能性をいち早く察知する方法を紹介しました。今回はその簡易版です。不審なプロセスを検出するスクリプトをBOMで定期的に実行して監視します。BOMの「カスタム監視」でPowerShellスクリプトを定期実行する際のヒントとして紹介します。
前回、Active Directoryの非アクティブユーザー数を監視するカスタム監視の例を紹介しましたが、カスタム監視について他の例も紹介します。カスタム監視を作成する際のポイントが分かれば、さまざまなシナリオをBOMで継続的、かつ効果的に監視できるからです。
「find-susproc.ps1」というPowerShellスクリプトがあるとしましょう。このスクリプトをパラメーターなしで実行すると、事前に定義された規則(・・・の部分)に従って現在のプロセスを評価し、不審なプロセスである可能性のあるプロセス数を返します。また、引数にログファイル名のパスを指定して実行することで、ログファイルに検出された不審なプロセスのプロセス名とパスを出力します。
[find-susproc.ps1]
BOMのカスタム監視で指定可能な実行プログラムは、コンソールアプリケーション(.exe)やバッチファイル(.bat、.cmd)ですが、Windows Script Host(WSH)のCScript.exe(.vbs、.wsf、.js)、PowerShellスクリプト(.ps1)についても、標準出力に監視値を正の数値として出力できれば監視可能です(※1)。
※1 「BOM for Windows Ver.8.0ユーザーズマニュアル」(BOM8-ユーザーズマニュアル.pdf)の「第5章 監視項目¥11. 監視項目の詳細¥(28) カスタム監視」を参照。
PowerShellのWrite-Hostはコンソール画面に文字を表示しますが、ホスト(PowerShell)に対する出力であり、BOMにおける標準出力とは厳密には異なります。そのため、Write-Hostを使用して出力した場合、想定外の監視値が報告されることがあります。
PowerShellスクリプトの場合は、プログラム名に「powershell.exe」と入力するか、「参照」をクリックして「C:¥Windows¥System32¥WindowsPowerShell¥v1.0¥powershell.exe」を選択して指定し、引数にPowerShellスクリプトのファイル(.ps1)のフルパスを渡します。PowerShellスクリプトに渡す引数がある場合は、第2引数として指定します(画面1)。または、引数として「-command <スクリプト名> <スクリプトの引数>」や「-command "& {<スクリプトブロック>}"」のように指定することもできます。このスクリプトは不審なプロセスの数を返すので、0を正常とし、1以上のしきい値を調整して、注意や危険のステータスとします。
画面1 不審なプロセス数を返し、引数に指定されていた場合にログファイルを出力するPowerShellスクリプトのカスタム監視の設定例
注意や危険ステータスのとき、その状況をいち早く知らせる方法は、担当者にメールで通知することです。それには、作成したカスタム監視に「メール送信」アクションを追加します。メール送信アクションでは、「実行条件」タブで「注意」と「危険」を選択して、「設定」タブで宛先メールアドレスを指定し、最後に「添付/埋め込みファイル」タブでPowerShellスクリプトが書き込んだログファイルを指定します。ファイルがJISまたはShift JISのテキストファイルの場合は、ファイルの内容をメール本文に埋め込むことも可能です(画面2)。なお、このPowerShellスクリプトの場合は、UTF-16 LE形式のテキストファイルであるため本文に埋め込むことはできません。シフトJIS(ANSI)コードでログに出力したい場合は、スクリプトの「>> $logfile」の部分を「| Out-File -Encoding default -Append $logfile」のように書き換えてください。
画面2 「注意」または「危険」ステータスの場合、「メール送信」アクションでログファイルを指定したメールアドレスに送信する
このようにカスタム監視を登録し、監視を開始すると、指定した間隔でプロセスの監視が始まります。平常時のステータスは正常(値0)であり、次のカスタム監視の実行時に不審なプロセスが出現すると、注意または危険(値1以上)となり、ログファイルがメールで通知されるようになります(画面3)。
画面3 PowerShellスクリプト「find-susproc.ps1」により検出された不審なプロセスの情報
今回の例では、ログファイルのパスとしてPowerShellスクリプトと同じパス内の「susproc.log」を指定しましたが、画面4のように、BOMの予約済み変数(※2)を使用して指定することも可能です。ただし、実行プログラムの「テスト」ボタンによるテスト実行では、BOMの予約済み変数を使用できないという制限があります。そのため、BOMの予約済み変数を使用せずに、カスタム監視を作成し、テストした上で、BOMの予約済み変数に変更することをお勧めします。
※2 「BOM for Windows Ver.8.0ユーザーズマニュアル」(BOM8-ユーザーズマニュアル.pdf)の「第14章 予約済み変数」を参照。
画面4 ログファイルのパスをBOMの予約済み変数を使用して渡す例
今回のPowerShellスクリプト「find-susproc.ps1」は、前回のAppLockerを使用する方法の簡易版として作成したものですが、その内容までは踏み込んでいません。実はこのスクリプトの作成者は、「かつて山市良と呼ばれていたおじさんのブログ」担当です。まだ作成途中のものを利用しました。近い将来、彼のブログでさらに改良したものを解説してくれるはずです。
追記:
スクリプトの改良版はかつて山市良と呼ばれていたおじさんのブログ「メモ. 依頼品: 不審なプロセスを見つけるスクリプト」をご覧ください。