Windows Server 2019で「誰がファイルを削除したか」を特定する監査設定と調査手順【イベントID4663完全ガイド】

IIS の本番ディレクトリからファイルが消えた――この“よくあるけれど致命的”なトラブルに、Windows Server 2019 標準機能だけでどう向き合うか。この記事は、過去の削除は追跡できるのかという現実的な問いに答えつつ、明日から確実に「誰が」「どのプロセスで」「どのパスを」削除したのかを特定できるよう、監査の設計・実装・運用までを具体的に解説します。

目次

前提と質問の整理

対象は Windows Server 2019(IIS 運用)の「本番ディレクトリ」。以下の2点が関心事です。

  • 削除したユーザーを特定できるか?
  • 監査ポリシーを設定する前に発生した削除について、後からログを取得できるか?

結論(最速理解)

結論詳細
過去の削除は特定できない監査ポリシーを有効化するに起きた操作は記録されていません。Windows 標準では、既定でファイル削除は監査対象外のため、後追い取得は不可です。
今後は監査を有効化すれば特定可能監査をセットアップすれば、削除操作ごとに イベント ID 4663(File System / DELETE)が「セキュリティ」ログへ記録され、ユーザー名・プロセス名・対象パスなどが確認できます。

なぜ「過去」は追えないのか(仕組みの理解)

Windows のファイル監査は「事前に有効化された SACL(監査用 ACL)」と「詳細監査ポリシー」の両方が整って初めてイベントに残ります。どちらか一方でも欠けていれば、当該操作はログ化されません。ゆえに、ポリシー未設定期間の削除は、OS 標準の仕組みでは後から復元できません(バックアップやシャドウコピーに残っているのは“データ”であって“操作ログ”ではないため)。

削除特定に関係する主なイベント ID

イベント ID意味有効化が必要なポリシー(代表例)活用ポイント
4663オブジェクトへのアクセスが試行/実行された(Accesses: DELETE 等)詳細監査ポリシー「オブジェクト アクセス → ファイル システム(成功)」+対象フォルダの SACL削除対象パス・ユーザー・プロセス名を最短で把握。実務の主役。
4660オブジェクトが削除された同上+「ハンドル操作(成功)「本当に消えた」確証を補強。4663 とセットで見ると堅い。
4656/4658ハンドル要求/クローズハンドル操作一連の操作の時系列把握に有効。
4624サインイン成功ログオン/ログオフ4663 の「ログオン ID」と突合し、元端末や IPを追跡。
4688プロセス作成詳細追跡 → プロセス作成(+可能なら“コマンドラインの記録”)robocopypowershell.exe など削除に関与したコマンドを特定。
5145SMB のアクセス検査(詳細ファイル共有)オブジェクト アクセス → 詳細ファイル共有(成功)共有越しの削除でクライアント側情報を補完。
1102監査ログがクリアされた隠蔽の兆候を検知。運用監視に。

監査設定の手順(最短で確実に動かす)

手順 1. 監査ポリシーを有効化

単体サーバーでは gpedit.mscドメイン配下では GPMC(グループ ポリシー管理)を使います。

  • パス(共通): コンピューターの構成 → Windows の設定 → セキュリティの設定 → 詳細監査ポリシーの構成オブジェクト アクセス
  • 有効化するサブカテゴリ:
    • ファイル システム(成功) … 削除などのファイル操作を 4663 で記録
    • ハンドル操作(成功) … 実削除の 4660 を補足(任意だが推奨)
    • 詳細ファイル共有(成功) … SMB 経由の操作を 5145 で補足(共有で編集される場合に推奨)
    • プロセス作成(成功)(詳細追跡)… 4688 を取得。可能なら「プロセス作成イベントにコマンドラインを含める」を有効化

設定後は gpupdate /force で即時適用します。CLI 派は以下でも可。

auditpol /set /subcategory:"File System" /success:enable
auditpol /set /subcategory:"Handle Manipulation" /success:enable
auditpol /set /subcategory:"Detailed File Share" /success:enable
auditpol /set /subcategory:"Process Creation" /success:enable
auditpol /get /category:"Object Access"

手順 2. 対象フォルダーに監査エントリ(SACL)を追加

GUI での操作:

  1. フォルダーを右クリック → [プロパティ] → [セキュリティ] → [詳細設定] → [監査]
  2. [追加] → 監査する主体(例:Everyone もしくは該当グループ)を指定
  3. [詳細アクセス許可] で DeleteDelete subfolders and files のみにチェック(成功)
  4. [適用先] を「このフォルダー、サブフォルダー、ファイル」に設定 → [OK]

PowerShell で一気に設定する例:

$path = 'C:\inetpub\wwwroot\Production'
$acl  = Get-Acl $path
$rule = New-Object System.Security.AccessControl.FileSystemAuditRule(
    'Everyone',
    'Delete, DeleteSubdirectoriesAndFiles',
    'ContainerInherit, ObjectInherit',
    'None',
    'Success'
)
$acl.AddAuditRule($rule)
Set-Acl $path $acl

ポイントは“Delete 系だけ”を監査すること。これによりノイズ(書き込みや読み取り)を極小化できます。

手順 3. 動作確認(テスト削除 → 4663 を確認)

  1. 対象フォルダにテストファイルを作成 → 削除
  2. イベント ビューアー → [Windows ログ] → [セキュリティ]
  3. ID 4663(タスクのカテゴリ:File System)を開き、以下のような内容を確認
オブジェクト名 : C:\inetpub\wwwroot\Production\index.html
アクセス       : DELETE
アカウント名   : <削除を実行したユーザーまたはサービスアカウント>
プロセス名     : C:\Windows\explorer.exe(例)/ C:\Windows\System32\inetsrv\w3wp.exe など
ログオン ID    : 0x3e7...

手順 4. 調査を速くするフィルタ(カスタムビュー & PowerShell)

イベント ビューアーのカスタムビュー(XML)例。4663 のうち DELETE が含まれるイベントだけに絞ります。

<QueryList>
  <Query Id="0" Path="Security">
    <Select Path="Security">
      *[System[(EventID=4663)]] and
      *[EventData[Data[@Name='Accesses'] and (contains(., 'DELETE'))]]
    </Select>
  </Query>
</QueryList>

PowerShell 派のワンライナー(直近1日の削除ログを一覧表示):

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4663; StartTime=(Get-Date).AddDays(-1)} |
  Where-Object { $_.Message -match 'Accesses:\s+DELETE' } |
  Select-Object TimeCreated, Id, ProviderName, MachineName, Message

「誰が消したのか」を突き止める実戦フロー

  1. 4663(DELETE)を起点に、オブジェクト名(パス)アカウント名プロセス名を確認。
  2. 「アカウント名」が IIS AppPool\<アプリ名> やサービスアカウントの場合、4688(プロセス作成)を併読し、実行ファイルやコマンドラインからジョブ/デプロイ/スクリプトの関与を特定。
  3. 「ログオン ID」をコピーし、4624(サインイン)を同一 ID で検索。ログオンの種類ソース ネットワーク アドレス(IP)により、実行元端末を割り出す。
  4. 共有越しの削除が疑われる場合は、5145(詳細ファイル共有)で共有名とクライアント情報を確認。
  5. 確証を高めたい場合は、4660(オブジェクト削除)の発生有無を確認。発生していれば“消えた”事実がより堅くなります。

この 1→2→3→4→5 の流れをテンプレ化しておけば、トラブルシューティングの初動が劇的に速くなります。

IIS 運用ならではの注意点(本番ディレクトリ特有の落とし穴)

  • アプリケーション プールの ID(既定は ApplicationPoolIdentity)。ログ上の「ユーザー」に IIS APPPOOL\<プール名> が出るのは正常です。背後に本当の操作者がいる場合は、46244688 と突合して絞り込みます。
  • デプロイ方式(例:robocopy /MIR、CI/CD、WebDeploy、タスク スケジューラ)。ミラーリングやクリーンデプロイは「削除」を伴うため、プロセス名コマンドラインが決定的な手がかりになります。
  • ウイルス対策やバックアップエージェントが検疫・ローテーションでファイルを削除するケースがあります。MsMpEng.exe など、“意図的に正しい”削除を誤検知しないよう、運用でラベル付け(コメントや CMDB)を。
  • 共有越しの編集が混在していると、削除の発生はサーバー側に記録されます。詳細ファイル共有(5145)の併用を検討してください。

運用設計(ノイズを抑え、証跡を守る)

テーマ推奨設定/運用狙い
監査範囲監査エントリは Delete / Delete subfolders and files のみログ量とオーバーヘッドを最小化
ログ保管セキュリティログ容量を十分に(例:1GB〜)。Windows Event Forwardingや SIEM で中央収集長期保全・検索性・改ざん耐性
改ざん検知1102(ログ消去)アラート。管理者権限の分離(監査・運用の職務分掌)証跡の信頼性維持
相関強化4688(コマンドライン含む)と 4624 を併用プロセス/端末/操作者の特定精度を上げる
バックアップ定期バックアップ+シャドウコピー(Previous Versions)の併用復旧時間短縮(RTO)と証跡調査の両立

復旧の観点(消えた後にできること)

  • データ復元はバックアップ/シャドウコピーの出番。証跡とは別レイヤーです。監査を整えたうえで、復元→原因究明の順序で対処を。
  • “消した犯人”の推測をデータからは行えません。監査ポリシーを整えた後に再発した場合は、4663/4660 と相関して特定してください。

調査の品質を上げる読み方(実例ベース)

ケース:本番ディレクトリ C:\inetpub\wwwroot\Production の画像が消えた。共有越し編集も一部あり。

  1. 4663オブジェクト名が該当パス、アクセスDELETE のレコードを抽出。
  2. アカウント名IIS APPPOOL\ProductionSite の場合、4688 を同時刻近傍で参照し、w3wp.exe 以外の robocopy.exepowershell.exe の起動を確認。
  3. ログオン IDを 4624 に照合し、ソース ネットワーク アドレスから運用端末を確定。
  4. 共有越しが疑わしければ 5145 で共有名とアクセス要求をチェック。
  5. 最後に 4660 が存在すれば、削除が成立した確度が上がる。

よくあるミスと対処

  • 「4663 が出ない」 → 監査ポリシーは有効か?かつ、対象フォルダに SACL は入っているか? どちらが欠けてもログは出ません。
  • 「ログが多すぎて埋もれる」 → 監査は Delete 系のみに限定。加えてカスタムビューや PowerShell で DELETE を含むものだけを抽出。
  • 「誰の操作か分からない」 → 4663 の「ログオン ID」を 4624 と突合。アプリ プール ID の背後にいる操作者は 4688 や 5145 と合わせて浮かび上がります。
  • 「共有で消えたっぽい」 → 詳細ファイル共有(5145)を有効化。クライアントのマシン名や IP を補完。
  • 「監査を切りたくなった」 → 問題解決後に停止する場合も、証跡保持のため最低限の期間は継続を。再発時の原因究明が困難になります。

セキュリティログの保全テクニック

  • サイズ拡張:セキュリティログは十分に確保(例:1GB〜)。上書きよりも「必要に応じて上書き」設定の見直しを。
  • 中央転送:Windows Event Forwarding(サブスクリプション)で収集サーバーへ転送。改ざんや消去の影響を受けにくくなります。
  • 定期エクスポートwevtutil epl Security "D:\Logs\Security_%date:~0,10%.evtx" などでローテーション。
  • ロール分離:「セキュリティ ログの管理」を運用者から切り離し、内部不正やヒューマンエラーのリスクを下げる。

監査の拡張:必要に応じて有効化したい項目

  • プロセス作成(4688)にコマンドライン:削除を起こしたスクリプトの引数まで追えると、一発で原因にたどり着けます。
  • アカウント管理/権限変更:普段触らないはずの運用アカウントが急に権限を得ている…といった異常の早期検知に。

チェックリスト(導入から運用まで)

項目状態メモ
詳細監査ポリシー:ファイル システム(成功)✅/❌GPO かローカルで有効化
詳細監査ポリシー:ハンドル操作(成功)✅/❌4660 補足用(任意だが推奨)
詳細監査ポリシー:詳細ファイル共有(成功)✅/❌SMB 越しの追跡に
対象フォルダの SACL(Delete 系のみ)✅/❌「このフォルダー、サブフォルダー、ファイル」に適用
テスト削除で 4663(DELETE)が出る✅/❌初期セットアップの最重要確認
セキュリティログ容量・転送✅/❌長期保管と検索性を確保
4688(コマンドライン)・4624 の有効化✅/❌原因究明を強化

トラブル事例で学ぶ(パターン別の読み解き)

デプロイジョブが消していた

  • 4663:Accesses = DELETEProcessName = robocopy.exeAccount = <ビルド/デプロイ用サービスアカウント>
  • 4688:robocopy /MIR のコマンドラインが記録。ミラーリングによる削除が確定。
  • 対処:除外パスや発行手順の見直し。必要なら “/PURGE” や “/MIR” の扱いを再検討。

共有での手作業削除

  • 4663:Subject に一般ユーザー、ProcessName = explorer.exe
  • 5145:共有名、アクセス元クライアントのホスト名/IP を確認
  • 対処:共有の書き込み権限再点検、承認フロー導入、教育。

IIS アプリが生成ファイルをクリーンアップ

  • 4663:Account = IIS APPPOOL\<サイト名>ProcessName = w3wp.exe
  • 4688:バックグラウンドジョブの powershell.exe などが見える場合あり
  • 対処:アプリ側のジョブ設定・ライフサイクルの見直し。ログ連携で相関を容易に。

コマンド & スニペット集(現場で使える最小セット)

詳細監査の有効化(CLI):

auditpol /set /subcategory:"File System" /success:enable
auditpol /set /subcategory:"Handle Manipulation" /success:enable
auditpol /set /subcategory:"Detailed File Share" /success:enable
auditpol /get /category:"Object Access"

Delete だけを拾う PowerShell(直近 24 時間):

$start = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4663; StartTime=$start} |
  Where-Object { $_.Message -match 'Accesses:\s+DELETE' } |
  Select-Object TimeCreated,
                @{n='User';e={($_.Message -split "Account Name:\s+")[1] -split "\r\n" | Select-Object -First 1}},
                @{n='Process';e={($_.Message -split "Process Name:\s+")[1] -split "\r\n" | Select-Object -First 1}},
                @{n='Path';e={($_.Message -split "Object Name:\s+")[1] -split "\r\n" | Select-Object -First 1}}

補足:サードパーティや代替手段

  • 標準機能だけで要件は満たせます。が、GUI レポートやアラート配信を強化したい場合は、ログ可視化ツールや SIEM の導入を検討してください。
  • 高度なファイル監視(リアルタイム・詳細属性)や長期の動的相関が必要なら、専用のファイル監査製品や補助ドライバ系の監視も選択肢です。ただしまずは標準監査+中央収集で十分な結果が得られるケースが大半です。

まとめ(ここだけ読めば十分)

  • 過去の削除は特定不可能。ログは事前の監査設定なしには残りません。
  • 未来は変えられる。「詳細監査ポリシー(ファイル システム / 必要に応じてハンドル操作・詳細ファイル共有)」+「対象フォルダの SACL(Delete 系のみ)」で、ID 4663 を確実に記録。
  • 実調査は 4663 → 4688 → 4624 →(必要に応じ 5145/4660) の順で。プロセス名・ログオン ID・IP を突合すれば、「誰が、どこから、何で消したか」に到達できます。
  • ログの保全(容量/転送/改ざん検知)とバックアップ/シャドウコピーの二本立てで、原因究明と早期復旧を両立させましょう。

参考:最小構成のクイックスタート(貼って動く)

  1. 詳細監査ポリシーで「ファイル システム(成功)」を有効化(必要に応じて「ハンドル操作(成功)」「詳細ファイル共有(成功)」も)。
  2. 本番ディレクトリに SACL を追加(EveryoneDelete / Delete subfolders and files、適用先は このフォルダー、サブフォルダー、ファイル)。
  3. テストファイルを作成→削除し、セキュリティログに 4663(DELETE)が出ることを確認。
  4. カスタムビューまたは PowerShell で DELETE を含むイベントだけを抽出できるようにする。
  5. ログ容量の拡張・中央転送・1102 の監視を設定。

要するに:過去はあきらめ、未来は仕込む。詳細監査ポリシー+フォルダー SACL による 4663(DELETE) の取得こそ、「誰がファイルを削除したか」を特定する最短ルートです。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次