監査ポリシーを使用してWindows Server2016からファイル/フォルダを削除したユーザーを追跡する

まだ、監査ポリシーを使用してwindows server2016からファイル/フォルダを削除したユーザーを追跡する方法がわかりませんか? このブログを見てみましょう。

Bobcaresでは、webホストやオンラインサービスプロバイダのサーバー管理サービスの一部として、このようなWindows関連のエラーがいくつか見られました。

今日は、削除されたファイル/フォルダのWindowsを追跡する方法を見ていきます。

監査ポリシーを使用してWindows Server2016からファイル/フォルダを削除したユーザーを追跡する方法

ここで、サポートエンジニアがサーバーからファイル/フォルダを削除したユーザーをどのように見つけるかを見てみましょう。

特定のファイルを作成、削除、または変更した特定のユーザーを識別するために、ファイルシステムオブジェクトアクセスイベント監査を利用します。

ここでは、Windows Server2016の共有ネットワークフォルダ上のファイルのイベント監査を構成する方法について説明します。 監査を構成した後、イベントビューアーからの情報を使用して、ファイルサーバー上の特定のファイルを削除したユーザーを検索します。

ただし、共有ネットワークフォルダからファイルを削除すると、ユーザーのごみ箱に送信されるのではなく、すぐに削除されます。

Windowsでファイルおよびフォルダアクセス監査ポリシーを有効にする方法

デフォルトでは、ファイルシステムオブジェクトアクセス監査はWindows Serverで有効 グループポリシーを使用して監査設定を有効にして構成できます。 ローカルグループポリシーエディターを使用して、あるサーバーで監査を構成する手順を次に示します。

    • まず、ローカルグループポリシーエディターコンソールgpeditを開きます。msc
    • 次に、高度な監査ポリシーを持つGPOセクションに移動します: Windows Settings>>Security Settings>>Advanced Audit Policy Configuration>>Object Access
    • その後、Audit File System policyを開き、ファイルシステムオブジェクトに成功したアクセスイベントのみをログに記録するように指定します(次のaudit events>>Successを設定します)
      windows serverからファイル/フォルダを削除したユーザーを追跡する方法2016With Audit Policy
    • 最後に、以下のコマンドを使用して変更を保存し、ローカルグループポリシー設定を更新します。
      gpupdate /force

共有フォルダ

のファイル削除された監査設定の構成ここで、アクセスを追跡する共有ネットワークフォルダのプロパティで監査を構成します。

1. まず、ファイルエクスプローラを実行し、フォルダプロパティを開きます。 [セキュリティ]タブに移動し、[詳細設定]ボタンをクリックします。 次に、監査タブに移動します。

2. 以下のメッセージが表示された場合は、続行ボタンをクリックします。

You must be an administrator or have been given the appropriate privileges to view the audit properties of this object

3. 次に、[追加]ボタンをクリックして、監査イベントをキャプチャするユーザーまたはグループを指定します。 すべてのユーザーのアクセスイベントを追跡する場合は、Everyoneグループを指定します。

4. その後、オブジェクトへのアクセスに使用されるアクセス許可をログに記録することも指定します。 ファイル削除イベントのみをイベントログに保存するには、[詳細権限の表示]ボタンをクリックします。 イベントリストでは、フォルダとファイルの削除イベント(サブフォルダとファイルの削除と削除)のみの監査を残します。

ユーザーは、共有ネットワークフォルダ内のファイルまたはフォルダを削除します。 次に、ファイルシステム->監査成功ファイル削除イベントが、Microsoft Windowsセキュリティ監査ソースのイベントID4663でセキュリティログに表示されます。

次に、イベントビューアMMCコンソール(eventvwr.msc)を展開し、Windowsログ->セキュリティセクションを展開します。 EventID4663でイベントログフィルタを有効にします。

その後、残りのイベントをイベントビューアで開きます。 削除されたファイルの名前、ファイルを削除したユーザーのアカウント、およびプロセス名に関する情報が含まれていることがわかります。

An attempt was made to access an object.Subject:Security ID: CORP\jonAccount Name: jonAccount Domain: CORPLogon ID: 0x32B12627Object:Object Server: SecurityObject Type: FileObject Name: E:\Distr\Backup.rarHandle ID: 0x7bc4Resource Attributes: S:AIProcess Information:Process ID: 0x4Process Name:Access Request Information:Accesses: DELETEAccess Mask: 0x10000

ファイルアクセス監査ポリシーを有効にした後、セキュリティログに以下の詳細を見つけることができます:

  • 誰が共有ネットワークフォルダからファイルを削除したのか、いつ起こったのか
  • ファイルを削除するためにどのアプリケーション(プロセス)を使用したのか
  • 復元するバックアップの日付は何ですか

SQLデータベース(MySQL/MSSQL)にファイル削除イベントを書き込む方法

しかし、削除されたファイルの監査が有効になっていても、ログに何かを見つけるのは面倒です….. 第一に、何千ものイベントの中で特定のエントリを見つけるのは非常に難しいです。 第二に、ファイルが長い時間前に削除された場合、このイベントは新しいイベントによって上書きされたため、ログに存在しない可能性があります。

すべてのファイル削除イベントをSQLデータベースに保存します。 そのためには、Microsoft SQL Server、Elasticsearch、またはMySQL/MariaDBデータベースを使用してイベントを保存します。

たとえば、監査イベントをMySQLの別のデータベーステーブルにログに記録する方法を見てみましょう。 次の表形式を使用できます:

  • サーバー名
  • 削除されたファイルの名前
  • 日付と時刻
  • ファイルを削除したユーザーの名前

このテーブルを作成するMySQLクエリは次のようになります:

CREATE TABLE deleted_items (id INT NOT NULL AUTO_INCREMENT, server VARCHAR(100), file_name VARCHAR(255), dt_time DATETIME, user_name VARCHAR(100), PRIMARY KEY (ID));

現在の日のセキュリティログからEventID4663を使用してイベントを取得するには、次のPowerShellスクリプトを使用します:

$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {$event = $_.ToXml()if($event){$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"$File = $event.Event.EventData.Data."#text"$User = $event.Event.EventData.Data."#text"$Computer = $event.Event.System.computer}}

次のPowerShellスクリプトは、取得したデータをリモートサーバー上のMySQLデータベース(IPアドレス)に書き込みます10.1.1.13):

Add-Type –Path 'C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'$Connection = @{ConnectionString='server=10.1.1.13;uid=posh;;database=aduser'}$Connection.Open()$sql = New-Object MySql.Data.MySqlClient.MySqlCommand$sql.Connection = $Connection$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {$event = $_.ToXml()if($event){$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"$File = $event.Event.EventData.Data."#text"$File = $File.Replace('\','|')$User = $event.Event.EventData.Data."#text"$Computer = $event.Event.System.computer$sql.CommandText = "INSERT INTO deleted_items (server,file_name,dt_time,user_name ) VALUES ('$Computer','$File','$Time','$User')"$sql.ExecuteNonQuery()}}$Reader.Close()$Connection.Close()

イベントを外部データベースに保存した後、このイベントログを消去できます。

さて、誰がファイルを削除したかを調べるために”AnnualReport.DOC”では、PowerShellコンソールで以下のスクリプトを実行します。

$DeletedFile = "%AnnualReport.DOC%"Set-ExecutionPolicy RemoteSignedAdd-Type –Path 'C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5\MySql.Data.dll'$Connection = @{ConnectionString='server=10.1.1.13;uid=posh;;database=aduser'}$Connection.Open()$MYSQLCommand = New-Object MySql.Data.MySqlClient.MySqlCommand$MYSQLDataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter$MYSQLDataSet = New-Object System.Data.DataSet$MYSQLCommand.Connection=$Connection$MYSQLCommand.CommandText="SELECT user_name,dt_time from deleted_items where file_name LIKE '$DeletedFile'"$MYSQLDataAdapter.SelectCommand=$MYSQLCommand$NumberOfDataSets=$MYSQLDataAdapter.Fill($MYSQLDataSet, "data")foreach($DataSet in $MYSQLDataSet.tables){write-host "User:" $DataSet.user_name "at:" $DataSet.dt_time}$Connection.Close()

最後に、psコンソールでユーザー名とファイルが削除された時刻が表示されます。

ログファイル監査イベントをテキストファイルに削除

別のデータベースサーバーを使用したくない場合は、ファイル削除監査イベントをプレーンテキスト そのために、次のPowerShellスクリプトを使用して、出力をテキストファイルに保存します。

$Outfile = "C:\Logs\Deleted-file-history-log.txt"$today = get-date -DisplayHint date -UFormat %Y-%m-%dGet-WinEvent -FilterHashTable @{LogName="Security";starttime="$today";id=4663} | Foreach {$event = $_.ToXml()if($event){$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"$File = $event.Event.EventData.Data."#text"$User = $event.Event.EventData.Data."#text"$strLog = $Computer + " " + $File + " " + $Time + " " + $User$strLog | out-file $Outfile –append}}

コメントを残す

メールアドレスが公開されることはありません。