Удаление, slack space и восстановление данных (carving)
Этот урок объясняет, почему «удалить» не значит «стереть», и как восстанавливают удалённые данные.
File carving — восстановление файлов по их сигнатурам (заголовкам и структуре) напрямую из «сырых» данных, без опоры на метаданные файловой системы.
Главный «секрет» дисковой форензики: удаление файла обычно лишь помечает его место как свободное, а сами данные остаются на диске до тех пор, пока их не перезапишут. Поэтому удалённое часто можно восстановить — это основа множества расследований. Понимание этого механизма напрямую следует из устройства файловых систем из предыдущего урока: раз метаданные и данные разделены, удаление может затронуть только метаданные, оставив байты содержимого нетронутыми.
Почему удаление ≠ стирание
При удалении файла система, как правило, делает быстрые вещи: убирает запись из каталога и/или помечает inode/кластеры как свободные. Сами байты в блоках остаются нетронутыми. Файл «исчезает» из проводника, но физически он на месте, пока новые данные не займут эти блоки.
Почему система не стирает данные сразу? Из соображений скорости. Обнулить пометку «занято» в таблице — операция в доли миллисекунды; физически перезаписать гигабайты — долго и бессмысленно, ведь место всё равно освобождается. Тот же принцип объясняет, почему «надёжное удаление» (wipe) — отдельная медленная операция, которая специально записывает поверх данных мусор. Для криминалиста же отсюда следует практический вывод: чем меньше система работала после удаления, тем выше шанс восстановления, потому что нужные блоки могли ещё не быть заняты новыми файлами. Время играет против восстановления.
До удаления: Каталог -> inode 1287 -> блоки [502,503,871] (данные)
После delete: Каталог: запись убрана
inode/блоки: помечены свободными
блоки 502,503,871: ДАННЫЕ ВСЁ ЕЩЁ ТАМ
Пока не перезаписано -> можно восстановитьДва пути восстановления
- По метаданным (undelete). Если запись inode/MFT ещё цела, можно восстановить файл со структурой и именем.
- Carving по сигнатурам. Если метаданные утеряны, ищут в «сыром» потоке байтов известные сигнатуры начала и конца файлов и вырезают их. Например, JPEG начинается с байтов
FF D8 FF, PDF — с%PDF, PNG — с89 50 4E 47.
Эти два пути дополняют друг друга. Undelete по метаданным — точнее и сохраняет имя, времена, размер файла: вы получаете не просто содержимое, но и контекст. Но он работает лишь пока метаданные не перезаписаны и не переиспользованы под новый файл. Carving же не зависит от метаданных вовсе и потому выручает там, где FS повреждена, отформатирована или метаданные затёрты, — но взамен теряет имя и время и может ошибаться на границах файлов. На практике пробуют оба и сопоставляют результаты.
# Найти сигнатуры JPEG в образе по hex-смещениям
xxd evidence.img | grep -i "ffd8 ff"
# Автоматический carving утилитами:
foremost -t jpg,pdf,png -i evidence.img -o carved/
scalpel evidence.img -o carved/Slack space как источник улик
Поскольку файл занимает целые блоки, в «хвосте» последнего блока (slack) могут лежать обрывки прежде удалённых файлов. Криминалистические инструменты умеют отдельно извлекать содержимое slack space и искать там фрагменты документов, паролей, переписки.
Помимо slack space, аналитик исследует и неразмеченное пространство (unallocated space) — блоки, которые файловая система считает свободными, но в которые ещё не записаны новые данные. Именно здесь живёт основная масса восстановимого удалённого: целые файлы и их фрагменты, оставшиеся от прежних сессий. Поскольку криминалистический образ копирует диск целиком, и slack, и unallocated попадают в него полностью, и оба становятся полем для восстановления и поиска по ключевым словам. На больших дисках это огромный объём «невидимых» данных, который при обычном просмотре файлов остаётся за кадром.
Как работает под капотом
Carving не знает про файловую систему — он смотрит на образ как на длинную ленту байтов и ищет шаблоны. Поэтому он работает даже на повреждённой или отформатированной FS, но имеет ограничения: фрагментированные файлы (разбросанные по несмежным блокам) восстановить сложнее, а часть результатов может быть «мусором». Простая идея поиска сигнатуры:
# Имитация carving: ищем сигнатуру JPEG в потоке байтов
raw = bytes([0x00, 0x11, 0xFF, 0xD8, 0xFF, 0xE0, 0x41, 0x42])
sig = bytes([0xFF, 0xD8, 0xFF])
idx = raw.find(sig)
print("JPEG-сигнатура найдена на смещении:", idx)Вывод:
JPEG-сигнатура найдена на смещении: 2
Реальные carving-утилиты делают то же самое, но масштабнее: они знают сигнатуры заголовков и (для многих форматов) «хвостов» десятков типов файлов, сканируют весь образ и вырезают всё между началом и концом. Отсюда два характерных ограничения. Во-первых, фрагментация: если файл разбит на несмежные блоки, простой «вырез от заголовка до конца» захватит чужие куски, и результат будет битым. Во-вторых, ложные срабатывания: байты FF D8 FF могут случайно встретиться внутри другого файла, и carver вырежет «псевдо-JPEG», который не откроется. Поэтому результаты carving всегда проверяют — пытаются открыть файлы, оценивают их осмысленность — и не считают каждый «вырезанный» объект готовой уликой.
Этическая и правовая рамка
Восстановление удалённого — мощный приём, и применять его нужно строго в рамках полномочий. Carving и undelete уместны на своих системах, на корпоративных носителях с санкции владельца, на учебных и CTF-образах. Вытаскивать удалённые данные с чужих устройств без правовых оснований — это вторжение в частную жизнь и тайну переписки (137/138 УК РФ) и нарушение режима персональных данных (152-ФЗ). Цель курса — методология законного расследования, а не обход чужой приватности.
Из этого механизма вытекает и зеркальный практический навык — надёжное уничтожение данных. Раз обычное удаление оставляет байты на месте, то для гарантированного стирания (например, при списании корпоративного носителя с конфиденциальной информацией) нужна перезапись всего пространства, включая slack и unallocated, специальными инструментами. Криминалист и специалист по защите данных смотрят на один и тот же факт с двух сторон: один знает, как восстановить недостаточно стёртое, другой — что нужно сделать, чтобы восстановить было нельзя. Понимание carving полезно обоим.
Частые ошибки
- Считать удалённое потерянным. До перезаписи его часто можно восстановить.
- Записывать на исследуемый носитель. Любая запись может перезаписать удалённые данные — поэтому работают с образом.
- Игнорировать slack space. Там бывают важные обрывки.
- Доверять carving вслепую. Среди вырезанного бывает мусор; результаты проверяют.
- Восстанавливать данные без полномочий. Это законно только в рамках своего/корпоративного/учебного материала.
Итоги
- Удаление обычно помечает место свободным, не стирая данные; до перезаписи их можно восстановить.
- Восстановление идёт по метаданным (undelete) или carving по сигнатурам.
- Slack space — отдельный источник обрывков; всё восстановление ведут на образе, не на оригинале, и в рамках закона.