Восстановление удалённых файлов и файловый карвинг для извлечения утерянной информации
Удаление файла с носителя не всегда означает, что данные исчезли. Содержимое остаётся на носителе до тех пор, пока не будет перезаписано. Операционная система просто помечает место, как свободное, и не ссылается на прежний файл. Это создаёт возможность для восстановления, если знать, как устроена файловая система и что именно происходит в момент удаления.
Навык восстановления нужен не только в форензике или OSINT. Он пригодится администратору, который удалил не тот каталог, аналитику, потерявшему дамп, или инженеру, анализирующему сбой.
Что происходит при удалении файла?
Операционная система не удаляет файл физически, она просто меняет указатели в таблицах. Поэтому файл пропадает из списка, но данные остаются в блоках. Время между удалением и перезаписью определяет, можно ли их восстановить.
Файловые системы — это то, что управляет этими указателями. От их типа зависит, что именно стирается, а что остаётся. Они делятся на две группы: обычные и журналируемые.
Обычные (FAT, exFAT, ext2) не фиксируют изменения в отдельной области. При удалении метаданные чаще всего остаются, поэтому восстановление возможно даже без специального оборудования.
Журналируемые (NTFS, ext3/ext4, XFS, Btrfs, ZFS) используют журнал — отдельную структуру для отслеживания операций. Это повышает надёжность, но может затирать данные сразу после удаления, особенно на активных системах.
Как удаляется файл в разных ФС:
FAT. Меняется первый байт имени в каталоге, цепочка кластеров обнуляется. Данные лежат на месте, пока не перезаписаны.
NTFS. Удаляется запись из MFT. Если файл небольшой, он может целиком храниться в самой MFT, тогда восстановить его проще.
ext3/ext4. Inode и битмапы сбрасываются. В ext4 часто используется нулевая очистка блоков, что делает восстановление невозможным.
XFS. Структуры удаляются быстро. Перезапись происходит активно. Без снапшотов шанс на восстановление минимален.
Btrfs и ZFS. Применяется Copy-on-Write. После удаления создаётся новая версия дерева. Старая может сохраняться, но доступ к ней возможен только через специальные средства, такие как zdb или btrfs restore.
Знание структуры ФС — основа восстановления. Именно она определяет, в каком порядке пробовать методы: через метаданные, карвинг или разбор дампа.
Восстановление через метаданные
Метаданные — это служебная информация, которую файловая система хранит отдельно от самого содержимого. Это имя файла, размер, время создания и изменения, принадлежность, права доступа, список блоков, где лежат данные. Если метаданные не уничтожены, файл можно восстановить с привязкой к его оригинальному имени и структуре.
На уровне ФС метаданные — это записи в системных таблицах:
В NTFS это строки в MFT.
В ext3/ext4 — inode и таблицы блоков.
В FAT — структура каталогов и таблица FAT.
Есть и вторичные метаданные — встроенные в сам файл. Например, EXIF в JPEG или ID3 в MP3. Они могут остаться даже при частичной потере основного содержимого.
Если метаданные не перезаписаны, восстановление проходит быстрее и точнее, чем при карвинге. Сохраняется дерево каталогов, имена, временные метки, кроме этого можно восстановить целую структуру, а не набор безымянных бинарников.
Какие инструменты могут подойти:
TestDisk — ищет удалённые записи в таблицах, восстанавливает разделы и файлы. Поддерживает NTFS, FAT, ext и другие.
extundelete — для ext3/ext4. Работает только с разделами в read-only. Позволяет восстановить каталоги, имена, и, если повезёт, файл целиком.
R-Studio, ReclaiMe, UFS Explorer — коммерческие решения с глубоким анализом метаданных, фильтрацией, экспортом в образы.
Результат зависит от состояния носителя. Если после удаления на диск не записывали новую информацию, данные лежат на месте. Но если началась активная фаза записи, особенно на SSD, шансы резко падают. Отдельный риск представляют фоновые задачи ОС, например, индексация, обновления, или кэширование. А вот в том случае, если метаданные утеряны или затираны, тогда переходят к карвингу.
Файловый карвинг
Если метаданные уничтожены, остаётся карвинг - это метод восстановления данных без опоры на файловую систему. Вы работаете напрямую с образами дисков или физических устройств, обсуществляя поиск по сигнатурам — уникальным последовательностям байтов, которые есть у большинства форматов.
Например, JPEG-файл начинается с FF D8 и заканчивается на FF D9. Когда в дампе видна эта последовательность, можно извлечь файл даже в том случае, если у него нет имени, даты и пути. Так работает большинство утилит для карвинга: они идут по сектору, сканируют сигнатуры, копируют блоки в новый файл.
Карвинг полезен, если:
диск отформатирован;
метаданные повреждены или перезаписаны;
файловая система не распознаётся;
нужно восстановить частичные данные с повреждённого носителя.
Что карвинг не может:
восстановить имена файлов;
вернуть структуру каталогов;
понять, к какому пользователю относился файл;
собрать фрагментированные файлы, если их части не лежат подряд.
Инструменты:
PhotoRec — один из самых известных. Идёт в комплекте с TestDisk. Автоматически сканирует образ и вытаскивает известные форматы.
Scalpel — позволяет задавать сигнатуры вручную. Работает быстрее PhotoRec, но требует конфигурации.
Foremost — аналог Scalpel, используется в криминалистике. Прост, но гибок.
Карвинг — это всегда работа с копией. Перед началом создают образ через ddrescue, dcfldd или guymager. Иначе любой доступ к устройству рискует перезаписать нужные блоки.
Практика восстановления
Работа по восстановлению всегда начинается с создания образа. Оперировать нужно не с оригинальным устройством, а с его копией. Это минимизирует риск перезаписи и позволяет вернуться к исходному состоянию.
Для создания образа используют ddrescue. В отличие от dd, он не залипает на битых секторах, ведёт лог и позволяет повторно проходить проблемные области.
Пример создания образа:
Первый проход (-n) собирает всё, что читается без ошибок. Затем можно запустить дополнительный проход с попытками восстановления сбойных секторов:
После получения образа работа ведётся только с ним. Не с оригиналом.
Дальнейшие шаги:
Поиск метаданных. Для чтения системы запускается TestDisk или extundelete. Восстановление выполняется из таблиц файлов, если они целы.
Карвинг. Метаданные могут отсутствовать, тогда используется PhotoRec, Scalpel, Foremost. В этом случае надо будет указать путь к образу, и инструмент вытащит всё, что похоже на файл. Часто данные могут сопровождаться шумом, особенно если носитель содержал кэш, миниатюры и временные файлы.
Фильтрация и проверка. Восстановленные данные проверяются вручную или через хэши. При работе с изображениями, аудио, документами будет полезна предварительная фильтрация по заголовкам и размерам, чтобы избежать лишней работы.
В результате вы получите набор данных, часть из которых может быть неполной или без имён, но всё ещё ценной. Дальнейшая работа зависит от того, что вам нужно от данных: проанализировать их, извлечь артефакты или вернуть утраченную информацию.
Ограничения восстановления с флеш-накопителей и SSD
С жёсткого диска данные можно восстановить даже через недели, но с SSD и флешками так не работает. В основном это связано с поведением контроллера и поддержкой команды TRIM.
После удаления файла операционная система отправляет контроллеру команду TRIM. Это не просто пометка блока как свободного — это прямое указание на физическое уничтожение содержимого. Устройства с TRIM, как правило, очищают указанные блоки немедленно или в течение нескольких минут.
На уровне восстановления это означает следующее:
если TRIM включён (а он включён почти всегда), содержимое удалённого файла будет уничтожено вне зависимости от того, производилась ли запись после удаления;
команды TRIM могут запускаться автоматически при простое, при монтировании, при запуске задач очистки;
контроллеры SSD выполняют garbage collection в фоне, независимо от ОС, и могут стереть блоки спустя время после удаления.
Второй фактор — wear leveling. Чтобы продлить срок службы памяти, SSD и флешки записывают данные не в те же блоки, где были старые, а в новые. Логическая адресация в этом случае не соответствует физической. Это делает невозможным восстановление «по следу», как на HDD.
Еще одним важным моментов является прошивка контроллера. Она полностью определяет, как работает запись, TRIM, резервные области и сборка мусора. Ее поведение закрыто, недокументировано и разное у разных производителей, поэтому восстановление может усложниться так называемым «обскурити».
Практически это значит:
- после удаления с SSD восстановить файл почти невозможно, если TRIM был активен;
на USB-флешках шанс чуть выше, но всё зависит от времени, прошивки и поведения ОС;
даже создание образа с помощью ddrescue не поможет, если блоки уже уничтожены на контроллере.
Исключения — отключённый TRIM, отключённая фоновая сборка мусора (редкость), моментальная реакция до активации фоновых процессов.
Если данные действительно важны, а носителем выступает флешка или SSD, правильная тактика:
Шаг 1. Немедленно отключить питание;
Шаг 2. Извлечь устройство и изолировать от перезаписи;
Шаг 3. Работать с побайтовым дампом, но без надежд на успех, если TRIM применился.
При расследованиях это критично. А SSD часто не оставляет следов. Поэтому дополнительно анализируют дампы RAM, shadow copies, кэши и временные файлы на других устройствах.
Восстановление нестандартных или проприетарных форматов
Когда файл не имеет известной сигнатуры или его структура является нестандартной, традиционные средства карвинга оказываются бессильны. Большинство утилит работают по строгим шаблонам, опираясь на поиск характерного начала и конца файла, известных магических байтов в заголовке или определённого расширения. В ситуации, когда эти опознавательные признаки отсутствуют, файл становится практически невидимым для автоматического анализа.
Такая проблема регулярно возникает при работе с бинарными логами бизнес-софта, например, файлами *.lgx или *.dat из кассовых систем, которые используют собственные, закрытые форматы. Аналогичные сложности представляют дампы проприетарных баз данных, таких как Interbase, Firebird или устаревшие Paradox, где данные организованы особым образом. Не менее требовательны к экспертизе файлы телеметрии с SCADA и других промышленных систем, протоколы которых зачастую уникальны для конкретного производителя. Отдельный вызов — это данные из нестандартных контейнеров: будь то зашифрованные образы, архивы с кастомной обвязкой или мультимедийные сборки, где полезная информация надёжно скрыта под слоем неизвестной структуры, не оставляющей следов для стандартного сканирования.
Работа в этом случае требует точного определения сигнатур. Делается это вручную.
Определение сигнатуры
1. Берётся минимум два файла нужного формата, желательно разных размеров.
2. Открываются в hex-редакторе — 010 Editor, HxD, bless.
3. Сравниваются начала (magic header) и окончания, фиксируются повторяющиеся участки.
4. Выделяются характерные последовательности — 4–8 байт, которые совпадают на всех файлах. Это может быть заголовок, флаг версии, фиксированный маркер, padding.
Пример: бинарные файлы логов проприетарной SCADA-системы начинаются с 53 43 44 4C (SCDL), а заканчиваются FF FF. По этим признакам можно вытащить их из диска даже после форматирования.
Scalpel
Scalpel — форк Foremost, работает быстрее, гибче, поддерживает настройку шаблонов в scalpel.conf. Конфигурация строится по схеме:
Пример для описанного выше формата:
Это правило извлечёт файлы с сигнатурой SCDL, не длиннее 500 КБ, заканчивающиеся FF FF. Можно использовать только начало:
Если конец не фиксирован, Scalpel просто будет резать по размеру.
Foremost
Более старый, менее гибкий, но простой в использовании. Работает по шаблонам из /etc/foremost.conf.
Пример секции:
После настройки запускается:
Foremost извлечёт всё, что подходит под шаблоны, и сохранит по типам в каталоге.
Проверка и фильтрация
После карвинга получаются десятки, иногда сотни файлов. Их нужно проверять:
по контрольной структуре (если известна, например, CRC в конце);
по содержимому (например, должен быть читаемый заголовок);
по фиксированным смещениям (например, номер версии на 0x10).
Если файл бинарный, но содержит текст — можно фильтровать strings, xxd, grep, чтобы исключить мусор.
Писать парсер вручную следует в следующих случаях:
формат структурно известен, но сигнатуры не стабильны;
нужно вытащить вложенные данные (например, JPEG в кастомном контейнере);
карвинг не даёт результата, но структура повторяется.
Можно использовать Python (модуль construct, bitstring), binwalk для автодетекта, или Ghidra/IDA, если есть бинарь, который пишет эти файлы.
Работа с повреждёнными или нестабильными носителями
Когда носитель начинает сыпаться, считывание начинает происходить нестабильно, возникают ошибки чтения, появляются плохие сектора, поэтому восстановление данных требует другой тактики. Стандартные средства на такие диски лучше не запускать. Любая попытка “просто скопировать” может добить устройство окончательно. В этом случае правильный подход — это работа с образом, снятым в щадящем режиме. Для этого используют ddrescue.
Этот инструмент:
повторяет попытки чтения сбойных секторов;
не зависает на ошибках;
пишет лог-файл, по которому можно продолжать восстановление с места сбоя;
сначала снимает всё читаемое, потом — проблемные участки.
Команды:
1. Первый проход, без повторов:
2. Повторный проход с восстановлением сбойных блоков:
Если диск физически умирает (кликает, пропадает), желательно:
- использовать напрямую SATA-подключение, а не через USB-кейс;
отключить автоматическое монтирование в системе;
работать в live-среде, где ничего не пишет в фоновом режиме;
снижать скорость чтения через hdparm, если поддерживается контроллером.
После снятия образа работа продолжается с файлом image.dd, а не с оригинальным диском. Что можно сделать дальше:
- анализировать структуру разделов (parted, gparted, testdisk);
восстанавливать по метаданным (extundelete, R-Studio, ReclaiMe);
запускать карвинг (PhotoRec, Scalpel), если раздел не читается или удалён.
Даже если часть образа не читается, ddrescue позволяет достать максимум. В лог-файле видно, сколько байт восстановлено, сколько потеряно, где повреждения. В том случае, если ни одна программа не видит файлов — есть смысл запускать поблочный просмотр (hexdump, bless, wxHexEditor) и искать фрагменты вручную.
Анализ больших объёмов и автоматизация
Когда речь идёт не об одном документе, а о терабайтах данных — вручную не справиться. Особенно если задача не просто восстановить файл, а найти в образе артефакты: логины, переписку, номера карт, email-адреса. Для таких задач используются инструменты, которые разбирают образ побайтно и вытаскивают данные по шаблонам.
Один из ключевых — bulk_extractor.
Эта утилита:
не зависит от файловой системы;
идёт по всему образу;
ищет email, URL, номера карт, телефонные номера, координаты GPS;
поддерживает декодирование сжатых данных (gzip, bzip2, zip);
сохраняет смещения — можно сопоставить артефакт с конкретным местом на диске.
Пример запуска:
Ключи -x отключают модули, если они не нужны. Это ускоряет обработку.
На выходе — десятки файлов: email.txt, url.txt, ccn.txt и др. Внутри — найденные строки и их смещения. Можно автоматически парсить, фильтровать, сопоставлять с другими источниками.
Если нужно распараллеливание — bulk_extractor поддерживает BEViewer, а также может запускаться через GNU Parallel по частям образа, нарезанного секторовыми смещениями. Дополнительно применяются следующие инструменты:
- для массовой фильтрации данных в папках — fdfind, ripgrep, grep -r по ключевым словам;
для поиска ZIP, RAR, 7Z внутри дампов — binwalk -e disk_image.dd;
для индексации содержимого — recoll, apache tika, yara.
В некоторых случаях формат окажется нестандартным, и для его анализа подойдут шаблоны под yara, чтобы отсеивать мусор и выделять только нужные бинарные структуры.
Но надо понимать, что автоматизация важна не только из-за объёма. Такой подход снижает вероятность пропустить артефакт, который мог бы быть критичен, например, уязвимость в логах, пароль в дампе RAM, или запись сеанса в temp-файле.
Риски и меры предосторожности
Восстановление данных — это деятельность, сопряжённая с высокими рисками, где любое неосторожное действие способно безвозвратно уничтожить то, что ещё можно было вернуть. Прежде чем приступить к первому байту работы, необходимо осознавать ключевые угрозы.
Главная опасность заключается в перезаписи данных. После удаления файла операционная система помечает занимаемое им пространство как свободное, и любая последующая запись может безвозвратно стереть нужные блоки. Это касается и созданяе нового документа или даже фонового обновления системного лога. Эта угроза особенно актуальна для SSD-накопителей, где механизм выравнивания износа распределяет данные произвольно, что может привести к физическому очищению ячеек.
Не менее критично правильно монтировать разделы. Подключение тома в режиме записи может спровоцировать фоновые процессы ОС (например, журналирование, индексацию или обновление метаданных), что способно инициировать разрушительную запись. Работа должна вестись исключительно в режиме read-only, предпочтительно через live-систему или заранее созданный образ носителя.
Современные SSD-накопители, поддерживающие команду TRIM, представляют отдельную проблему: удалённые данные могут быть физически очищены контроллером практически мгновенно, и этот процесс необратим. Отключение TRIM постфактум не имеет смысла — защита от такого сценария возможна только при заблаговременной настройке, что редко достижимо в реальности.
Особая осторожность требуется при работе с повреждёнными носителями. Попытка обратиться к деградирующему HDD через стандартный интерфейс может окончательно вывести его из строя из-за усугубления механических дефектов. Единственно допустимый метод — создание посекторной копии с помощью инструментов вроде ddrescue в пассивном режиме.
Шифрование данных сводит на нет все усилия по восстановлению, если ключ утрачен. Даже при успешном извлечении всех битов с носителя, без криптографического ключа информация останется недоступной. Единственная надежда в такой ситуации — поиск ключа в дампах оперативной памяти, теневых копиях или резервных конфигурациях.
Следует помнить, что так называемое «безопасное удаление» с помощью многократной перезаписи не гарантирует результата на SSD-накопителях из-за особенностей работы контроллера. Надёжным методом защиты конфиденциальности является предварительное шифрование всего тома: уничтожение ключа делает данные невосстановимыми даже при физической сохранности носителя.
Наконец, аппаратные RAID-массивы требуют особого подхода. Снятие образа с отдельного диска такого массива бессмысленно — без учёта конфигурации контроллера данные будут нечитаемы. В первую очередь необходимо восстановить логическую структуру всего массива, и только затем приступать к извлечению файлов.
Восстановление — не момент «после». Это часть процесса, которая начинается сразу после инцидента. Чем быстрее отключено питание, извлечён диск, создан образ — тем выше шанс получить нужные данные.
Помните, что удаление файла — не конец. Если знать, как работает файловая система, какие данные остаются на носителе и что делает контроллер, можно восстановить многое, но не всё.
Метаданные дают шанс восстановить файл с именем и структурой. Если они уничтожены, то остаётся карвинг. Если накопителем является SSD с TRIM, или файл был зашифрован, то восстановление становится невозможным. Если диск умирает, но образ снят через ddrescue, данные ещё можно вытащить. Если вы сначала монтируете его в rw — нет.
Понимание поведения ОС, носителей, форматов и утилит важнее, чем кнопка “восстановить”. Нельзя полагаться на волю случая. Успех процесса зависит от точных действий, последовательной работы с копией и анализа в глубину.
И главное — восстановление не заменяет резервное копирование. Ни TestDisk, ни Scalpel, ни bulk_extractor не дадут гарантию. Не забывайте про регулярные бэкапы, зашифрованное хранение и отказ от флешек как основного носителя.