Содержание статьи
- Схема лаборатории и эксперимента
- Тестовый файл
- Запуск через проводник
- Удаляем .exe
- Что в $I
- Убираем очевидные следы
- Что осталось после перезагрузки
- Prefetch
- UserAssist
- PCA
- BAM и Amcache: отрицательный результат
- $UsnJrnl
- $MFT
- Запуск через cmd.exe
- Удаление и Recycle Bin
- Prefetch
- UserAssist, PCA, BAM и Amcache
- $UsnJrnl
- $MFT
- Итог по cmd.exe
- Запуск через PowerShell
- Удаление
- Prefetch
- UserAssist, PCA, BAM и Amcache
- $UsnJrnl
- MFT
- Попробуем поймать удаление
- Итог
Информация о файлах может храниться в разных системных артефактах — их мы и разберем в статье. По этим данным можно восстановить общую картину: одни артефакты подтвердят, что файл существовал, другие — что его запускали, а третьи помогут выяснить, где он находился, когда его удалили и в какой последовательности происходили эти события.
В матрице MITRE ATT&CK у этой техники есть идентификатор — T1070.004 File Deletion: выполнив задачу, атакующий удаляет файл, чтобы оставить меньше следов в системе и затруднить дальнейший анализ.
Эта техника меня зацепила: мне всегда было интересно, как находят удаленные данные и как все это работает с точки зрения DFIR.
Поэтому я выбрал простой сценарий: создать тестовый файл .exe, запустить его в Windows 11, удалить в корзину, очистить ее, перезагрузить систему, а затем поискать следы.
В этом случае я хотел проверить:
- сможем ли мы подтвердить, что файл оставался в системе после очистки корзины;
- сможем ли мы доказать, что файл запускали;
- сможем ли мы хотя бы примерно восстановить хронологию и определить время запуска;
- сохранится ли информация о пути к файлу;
- получится ли доказать, что удалили именно нужный файл;
- будут ли отличаться артефакты запуска через проводник,
cmd.и PowerShell.exe
Обрати внимание: нам нужен не столько сам удаленный файл, сколько хронология действий, которую мы восстановим по оставшимся в Windows следам.
Схема лаборатории и эксперимента
Для опыта я выделил отдельную машину с Windows 11 и сделал снапшот чистой системы, чтобы во время эксперимента файлы не смешивались.
Мы будем проверять три сценария:
- запуск .exe двойным щелчком в проводнике;
- запуск .exe из
cmd.;exe - запуск .exe из PowerShell.
Порядок действий во всех сценариях будет одинаковым: файл появляется на рабочем столе, мы один раз запускаем его, отправляем в корзину, очищаем корзину, перезапускаем систему и анализируем результаты.
Тестовый файл
Я создал простой Test.. После запуска он создавал в той же папке файл marker. и записывал в него время выполнения, имя пользователя, имя компьютера и путь к исполняемому файлу.
Этот маркер будет для нас контрольной точкой: если он появился, значит, запуск прошел успешно.
Содержимое маркера:
TimestampLocal=2026-08-14 13:26:28.457 +03:00Username=dfirlabComputerName=WIN11-T1070-LABExecutablePath=C:\Users\dfirlab\Desktop\T1070_004_Test.exeРазмер исходного .exe — 4608 байт. Его хеш:
CBFCE7E3844A23784E07DC4B4D94813BA2C60933496F80A4CF343E5CD98ED84D
Хеш здесь нужен, чтобы после удаления убедиться: мы нашли именно те следы, которые искали.
Для проверки выполним такую команду:
Get-FileHash ` 'C:\Users\dfirlab\Desktop\T1070_004_Test.exe' ` -Algorithm SHA256Условия для работы готовы. Начнем с самого простого и привычного варианта — запуска двойным кликом через проводник.
Запуск через проводник
Файл готов. Запускаем его двойным щелчком на рабочем столе. На скриншоте видим результат: файл . и marker..

Удаляем .exe
После запуска удаляем клавишей Delete только .exe, тогда как наш текстовый маркер специально оставляем.
На этом этапе файл еще не стерт полностью. При обычном удалении Windows переносит его в корзину — каталог $Recycle.. Там появляются два связанных объекта: $I с метаданными и $R с содержимым удаленного файла.
У нас появились:
$IQ4SOOB.;exe $RQ4SOOB..exe
Размер $R совпадал с размером .exe — 4608 байт. Хеш SHA-256 тоже был одинаковым.
CBFCE7E3844A23784E07DC4B4D94813BA2C60933496F80A4CF343E5CD98ED84D
Для проверки:
Get-FileHash ` 'C:\$Recycle.Bin\<SID>\$RQ4SOOB.exe' ` -Algorithm SHA256
Проверка файлов $I и $R после удаления исполняемого файла: сверяем хеш SHA-256 и временные метки.
Что в $I
После разбора файла IQSOOB. мы получили:
OriginalSize: 4608DeletionTimeLocal: 2026-08-10 14:32:29.124 +03:00
OriginalPath: C:\Users\dfirlab\Desktop\T1070_004_Test.exe
Пока файл хранится в корзине, $I дает нам много информации: исходный путь, размер и время удаления. Вместе с хешем SHA-256 файла $R это позволяет восстановить полную картину: связать исходный .exe с объектом в корзине и определить, когда его удалили.

Убираем очевидные следы
Пока файлы $I и $R лежат в корзине, можно было бы просто исследовать их. Но наша задача — действовать радикальнее, поэтому полностью очищаем корзину и перезагружаем систему.
Перед очисткой я зафиксировал время:
2026-08-10 14:49:05.912 +03:00
Очистка и перезапуск заняли примерно полторы минуты. После этого в корзине остался только служебный файл desktop., а файлов $I и $R уже не было.

Что осталось после перезагрузки
В хронологии уже нет файлов .exe, $I и $R, но проверим, остались ли другие следы их существования и запуска.
Prefetch
Для начала проверим каталог Prefetch в Windows: в нем могут храниться данные о приложениях, которые запускали раньше.
Ищем запись по имени файла:
Get-ChildItem 'C:\Windows\Prefetch' ` -Filter 'T1070_004_TEST.EXE-*.pf' | Select-Object Name, Length, CreationTime, LastWriteTimeВ каталоге нашелся файл:
T1070_004_TEST.EXE-F0FBFC96.pf

Проверяем хеш:
Get-FileHash ` 'C:\Windows\Prefetch\T1070_004_TEST.EXE-F0FBFC96.pf' ` -Algorithm SHA256
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
