
こんにちはHabr! 管理者権限なしでWindowsセキュリティログにアクセスする方法をcatで読んでください。 これは、Windowsログに関連するHabréの最初の記事ではなく、おそらく最も独創的な記事ではありませんが、私の意見では、一般ユーザーとしてログを読み取るための簡単なソリューションの検索に時間を費やしすぎたため、「私の成功事例」を共有することにしました。
また、 Powershellの速度をGet-WinEventおよびGet-EventLogコマンドレットと比較する必要がありました。
カットされているものはすべてWindows Server 2008R2 / 2012R2、Windows 10 Pro(1809)に関連しています。他のバージョンではチェックしませんでした。状況は2016年と2019年の製品と同様だと思います。
そのため、デフォルトでは、平均的なユーザーにはセキュリティログを読み取る権限がありません。
ログを取得しようとすると、エラーが発生します。

また、 イベントビューアーからのアクセスも拒否されます。

ショータイム
ユーザーをローカルイベントログリーダーグループに追加します。

次に、 MACHINE \ System \ CurrentControlSet \ Services \ Eventlog \ Securityレジストリブランチに読み取り権限を付与します。

このレジストリブランチの権限を変更しないと、セキュリティログのパラメーターを読み取ることができないため、ログファイルの場所と名前を見つけることはできません。 セキュリティ 、これは、ルートからアクセス権を継承しないEventlogサービスの唯一のセクションです。
これは、 MACHINE \ System \ CurrentControlSet \ Services \ Eventlogの権限がどのように見えるかです。

Get-WinEventコマンドレットとGet-EventLogコマンドレットの両方が機能することを確認してください!
後で、これらのコマンドレットの比較に戻ります...

監査とセキュリティログを管理する
ユーザーにログをクリアする権限を付与する必要がある場合は、グループポリシーを編集する必要があります。 ユーザーまたはユーザーのグループは、 監査とセキュリティログの管理アクセス許可を追加する必要があります 。
このグループは、 コンピューターの構成\ Windowsの設定\セキュリティの設定\ローカルポリシー\ユーザー権利の割り当てにあります。

監査とセキュリティログの管理について詳しくは、 こちらをご覧ください。
このポリシー設定は、ファイル、Active Directoryオブジェクト、レジストリキーなどの個々のリソースに対してオブジェクトアクセス監査オプションを指定できるユーザーを決定します。 これらのオブジェクトは、システムアクセス制御リスト(SACL)を指定します。 このユーザー権利が割り当てられているユーザーは、イベントビューアーでセキュリティログを表示およびクリアすることもできます。 オブジェクトアクセス監査ポリシーの詳細については、「オブジェクトアクセスの監査」を参照してください。
私たちはチェックし、すべてが約束どおりに機能し、ログがきれいになった...

権利をきれいにする他のロジックはありません。

正直なところ、ユーザーにセキュリティログをクリーンアップする権限を付与する必要があるシナリオは思いつきませんが、そのような機会があります。
Get-WinEvent VS Get-EventLog
これら2つのコマンドレットを比較します
イベントログを取得
説明:
Get-EventLogコマンドレットは、ローカルコンピューターとリモートコンピューターのイベントとイベントログを取得します。
コマンドレットのパラメーターとプロパティ値を使用して、イベントを検索できます。 このコマンドレットは、指定されたプロパティ値に一致するイベントを取得します。
EventLog名詞を含むコマンドレットは、従来のイベントログでのみ機能します。 Windows Vista以降のWindowsバージョンでWindowsイベントログテクノロジを使用するログからイベントを取得するには、Get-WinEventを使用します。
Get-WinEvent
説明:
Get-WinEventコマンドレットは、システムログやアプリケーションログなどのクラシックログや、Windows Vistaで導入されたWindowsイベントログテクノロジによって生成されたイベントログなど、イベントログからイベントを取得します。 また、Windowsのイベントトレース(ETW)によって生成されたログファイルでイベントを取得します。
パラメーターを指定しない場合、Get-WinEventコマンドはコンピューター上のすべてのイベントログからすべてのイベントを取得します。 コマンドを中断するには、CTRL + Cを押します。
Get-WinEventは、イベントログとイベントログプロバイダーも一覧表示します。 選択したログまたは選択したイベントプロバイダーによって生成されたログからイベントを取得できます。 また、単一のコマンドで複数のソースからのイベントを組み合わせることができます。 このコマンドレットを使用すると、XPathクエリ、構造化されたXMLクエリ、および単純化されたハッシュテーブルクエリを使用してイベントをフィルター処理できます。
説明によれば、 Get-WinEventはWIndows Vistaに登場した多数のログを処理できます 。
明確にするために、これらのコマンドレットが機能するリストを以下に示します; Get-WinEventの出力を停止しました 。

ただし、パフォーマンスの問題、クエリ実行時間の比較という1つのことがあります。

Get-WinEventの実行時間は驚くばかりです。Applocationand Securityログのエントリ数に注意してください。イベントの数はほぼ同じ3400〜3600ですが、実行時の差はほぼ20倍です。
Get-WinEventは、 アプリケーションイベントを読み取るのに52秒のGet-EventLogに対して127秒かかります。
そして、チェックメイト、 Get-WinEventは、 セキュリティイベントを読み取るために45秒のGet-EventLogに対して2020秒かかります。
同じコマンドをローカルで実行する場合、すべてがそれほど悪くはありませんが、ローカルでGet-EventLogはGet-WinEventの 50倍のセキュリティログで動作します

コード4624でイベントを受信するもう少し意味のあるもう1つの例アカウントが正常にログオンしました 。

私が言えることは、数字は嘘をつかないことです...
DCイベントログへの管理者以外のアクセス
結論として、ドメインコントローラーのセキュリティログにアクセスするというトピックは残しました。
上記のすべては、いくつかの修正を加えたドメインコントローラーにも関連しています。
1- イベントログリーダーグループは、 ビルトインセキュリティプリンシパルオブジェクトにあります。

このグループにユーザーを追加することにより、ドメインコントローラーに読み取りアクセス許可のみを付与します。
また、各ドメインコントローラで、レジストリブランチMACHINE \ System \ CurrentControlSet \ Services \ Eventlog \ Securityを読み取るためのアクセス許可を与える必要があることを忘れないでください。
以下に例を示します。メンバーサーバーのログを読み取る権限がありません。ドメイン内の他のマシンからログを読み取る必要がある場合、グループポリシーを使用してユーザーまたはユーザーグループをローカルイベントログリーダーグループに追加します。

2-ログをクリアする権限を追加するには、 デフォルトドメインコントローラポリシーを編集する必要があります。
3-ドメインコントローラー上のユーザーに代わってタスクを起動できるようにするには、 既定のドメインコントローラーポリシーを編集し、ユーザーにバッチジョブとしてログオンする権限を与える必要もあります。
4-デフォルトのドメインポリシーを編集するときは、十分に注意してください!
PS
私を助けたリソースの短いリスト:- 非管理者にイベントログWindows 2003およびWindows 2008を読み取る許可を与える
- イベントログのセキュリティをローカルで設定する方法、またはグループポリシーを使用して設定する方法
- DCセキュリティ-セキュリティイベントログの読み取り
- 非管理ユーザーでのGet-WinEvent
- ドメインコントローラーセキュリティログ-ドメイン管理者でなくてもそれらにアクセスする方法
私の意見では、トピックがWindowsログに関連するHabrに関する有用な出版物:
- Powershellは、変更アラートでActive Directoryを監査します。 パート1
- Active Ditectoryでユーザーロックソースを見つける
- Windowsログのイベントの監視とアラート:Windows Server 2012 R2の電子メール
- サーバーのセキュリティ監査。 セキュリティジャーナルを検索します。 パワーシェル