追加費用なしでActive DirectoryとPowerShellでIE利用者を探す
Internet Explorer(IE)のサポート終了まで1週間を切った今日この頃、今更ではありますがIEをいまだに起動しているPCを探し出す方法をまとめました。
資産管理ソフトやログ管理サーバを導入済みの環境であれば、そこから特定ができると思います。
しかしながらそのような製品を持っていないという方向けにIEの起動ログを収集する方法をご紹介します。
前提条件
- Active Directoryドメイン環境導入済み
- クライアントPCはWindows 10(32bit, 64btどちらでも可)
- クライアントPCから読み書き可能な共有フォルダ
利用するコンポーネント
- PowerShell
- コマンドプロンプトバッチ
- イベントログ
- Active Directory
事前準備
下記のGitHubリポジトリからソースファイル(バッチファイルとPowerShellスクリプト)をダウンロードして任意の場所に展開してください。
https://github.com/adomini-github/FindIE
展開するとバッチファイルとPowerShellスクリプトがありますので、今回ログを収集したいクライアントPCから読み込み可能な共有フォルダに保存します。
保存したらFindIE-execute.batをメモ帳で開いて、最終行のpowershellコマンドにある下記の引数を環境に合わせて変更します(省略不可)。
・-hour
スクリプト実行時から指定した時間分の過去イベントを抽出します。既定ではユーザーは1日1回ログオンすることを想定して、24時間としています。長ければ長いほど過去にさかのぼってログを収集できますが、処理に時間がかかるようになるのとイベントログの記録数も上限があるので限界はあります。
・-path
調査の結果を保存するログの保存場所を指定します。基本的にはクライアントPCから編集可能な共有フォルダを指定するとよいでしょう。
・-nolog
数値の1を指定すると、仮にIE実行のイベントログが無かった場合でも”なにもありませんでした”というログを保存します。1以外を指定するとイベントログが無い場合は何も保存しません。1にするとスクリプトが実行されていることを把握できますが、たくさんのログファイルが記録されるのでその後の対応がやや大変になります。ここはお好みで設定して下さい。
監査ポリシー変更グループポリシーの設定
今回はIEのプロセスが作成されたかどうかのイベントログをチェックして収集しますが、既定ではプロセスの作成はイベントログに記録されません。
よって、まずはプロセスの作成がイベントログに記録されるようにActive Directoryのグループポリシーで対象PCの設定を変更します。
Active Directoryサーバにログインし、グループポリシーの管理から新しいGPOを作成します。
GPOの設定編集を開き、コンピュータの構成⇒ポリシー⇒Windowsの設定⇒監査ポリシーの詳細な構成⇒監査ポリシー と進みます。
下記の2か所を変更します。
・詳細追跡⇒プロセス作成の監査⇒次の監査イベントを構成する⇒成功のみチェック
・ポリシーの変更⇒承認ポリシーの変更の監査⇒次の監査イベントを構成する⇒成功も失敗もチェックなし(記録しない)
※今回作成したPowerShellスクリプトを実行すると大量の承認ポリシーの変更イベントが記録されてしまい、すぐにセキュリティイベントログの記録上限である約3万件に到達してしまいます。
そのため、ここで承認ポリシーの変更の監査を記録しないように変更しておきます。ただし、イベントとしては記録しておいた方がよいものなので、本件の対応が終わり次第このポリシーは解除してください。
ログオンスクリプト実行ポリシーの構成
続いて、ダウンロードしたバッチファイルとPowerShellスクリプトをユーザログオン時に実行するためのログオンスクリプトを構成します。
同様に新しいGPOを作成します。
GPOの編集を開き、ユーザー⇒ポリシー⇒Windowsの設定⇒スクリプト(ログオン/ログオフ)⇒ログオン とすすみます。
スクリプトの追加ボタンをクリックして、事前に共有フォルダに保存しておいたFindIE-execute.batを指定します(PowerShellスクリプトではないので注意!)。
グループポリシーのリンク
2つのGPOが準備出来たらリンクします。
下記画像ではドメイン全体にリンクしていますが、この設定ではドメイン参加済みサーバーOS含めて展開されるので、適宜OUや条件を指定してください。
動作確認
ポリシーの適用されたPCでログインすると、ログインしてから60秒後にPowerShellスクリプトが実行されイベントログの収集が始まります。
ログ収集の結果、IEを起動したというイベントログがみつかった場合はバッチファイルに指定した場所(-path引数)にログファイルが保存されます。
イベントログが一切見つからなかった場合でも、-nologに1を指定していれば下記画像のような結果が保存されます。1以外を指定している場合は何も保存されません。
補足:プログラム仕様
ログオンスクリプトが実行されると、共有フォルダに保存しているPowerShellスクリプトをローカルのCドライブ直下にFindIEというフォルダを作成してダウンロードします。
その後、ダウンロードしたPowerShellスクリプトをバッチファイルが実行してイベントログの調査を開始します。
調査するイベントログはWindowsログ⇒セキュリティに記録されるイベントID 4688のログです。
このログには”どのプロセスがどのプロセスを生成したか”という内容が記録されます。
通常、ユーザーがスタートメニューやショートカットからIEを起動した場合、下記画像のように生成元がexplorer.exe、新しいプロセスがiexplore.exeというログが記録されます。
デスクトップやスタートメニューもプロセスとしてはexplorer.exeが実行していますので、エクスプローラからIEを起動してもスタートメニューからIEを起動しても同じようなログが記録されます。
一方、EdgeのIEモードを起動した場合は作成元がmsedge.exe、新しいプロセスがiexplorer.exeになるので、EdgeのIEモードによるものなのか、ユーザーの操作によるものなのかが判定できるようになっています。
(なので、今回作成したプログラムはEdgeのIEモードは検知しません)
このように、基本的にはイベントログをPowerShellスクリプトで収集するだけで、IEを利用しているかどうかを判定しています。
なお、内部プログラムやユーザーがエクスプローラで直接開かない(スタートアップ等)場合は今回の方法では検知ができませんのでご注意ください。
まとめ
- イベントログを使えばIE起動を調査できる(ただし有効化は必要)
- Active Directoryは必要
- EdgeのIEモードは検知しないようになっている
- 検知できないパターンもあるので要注意