Причины:
1. Ротация журналов Event Log — записи о доступе к файлам (Event ID 4663) могут быть перезаписаны.
2. Очистка списка Recent ($Recycle.Bin, папка `%AppData%\Microsoft\Windows\Recent`) по политикам очистки или вручную.
3. Отсутствие включенного аудита — без политики аудита доступа к объектам события не генерируются.
Решение:
Только легальные методы (средства Windows, встроенная утилита `wevtutil`, PowerShell).
1. Через список последних файлов (Recent Items)
Применимо, если не выполнялась очистка. Данные хранятся в `%AppData%\Microsoft\Windows\Recent`. Для просмотра вчерашней активности:
powershell
Get-ChildItem "$env:APPDATA\Microsoft\Windows\Recent" | Where-Object { $_.LastWriteTime -ge (Get-Date).AddDays(-1).Date -and $_.LastWriteTime -lt (Get-Date).Date }Результат: файлы, изменённые (открытые) между 00:00 вчера и 00:00 сегодня. Учитывает только LNK-ярлыки.
2. Анализ Prefetch (для .exe, .dll)
Windows сохраняет пути запуска программ в `C:\Windows\Prefetch`. Не показывает открытые файлы данных (docx, xlsx), только исполняемые. Команда (требует прав администратора):
powershell
Get-ChildItem "$env:SystemRoot\Prefetch" -Filter ".pf" | ForEach-Object { (Get-ItemProperty -Path $_.FullName).LastWriteTime } | Where-Object { $_ -ge (Get-Date).AddDays(-1).Date -and $_ -lt (Get-Date).Date }Ограничение: фиксирует только запуск программ, не открытие конкретного документа.
3. Аудит доступа к файлам (Event ID 4663)
Требуется предварительное включение (через GPO или `auditpol`). Если аудит был активен:
powershell
$yesterday = (Get-Date).AddDays(-1).Date
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4663; StartTime=$yesterday; EndTime=$yesterday.AddDays(1)} | ForEach-Object {
if ($_.Properties[6].Value -like ".docx" -or $_.Properties[6].Value -like ".xlsx") { $_.Properties[6].Value }
} | Sort-Object -UniqueФильтр файлов по расширению. Если аудит не включали — события отсутствуют.
4. Использование утилиты `wevtutil` (экспорт журнала)
```cmd
wevtutil epl Security C:\temp\security_evtx.evtx /q:"[System[EventID=4663 and TimeCreated[timediff(@SystemTime)