[Из песочницы] Восстановление удаленных данных с помощью Scalpel
У каждого человека в жизни возникает такая ситуация как rm -rf на той папке, где этого не следовало делать. Бекапы это хорошо, но что делать если их нет? Для Linux систем существует утилита Scalpel, которая позволяет восстановить удалённые файлы по заданным паттернам, включая применение регулярных выражений.Scalpel является форком проекта Foremost (с версии 0.69), начавший свою историю с 2005 года. Имеет свой github репозиторий и является более быстрым по скорости восстановления данных, а также эффективности чем Foremost. Говоря о разнице этих двух проектов можно сказать, что вышедшая после версии 0.69 Foremost имеет новые семантические техники восстановления данных. К примеру при восстановлении JPEG файлов используется заголовок этого файла для вычисления соответствующего тела изображения, когда Scalpel просто возьмет данные между заданными сигнатурами завершения и начала файла изображения. Таким образом можно сказать, что Foremost более точно может восстановить потерянные данные, когда Scalpel сделает это значительно быстрее.Возможности которые предоставляет Scalpel:
Восстановление независимо от файловой системы Выставление минимального и максимального размеров восстанавливаемого файла Использование многопоточности на многоядерных системах Асинхронные операции ввода/вывода дающие прирост при поиске по шаблону Использование TRE регулярных выражений для поиска по началу и концу файла Возможность восстановления из вложенных структур данных Для гиков доступна возможность использования GPU, что доступно только для Linux и требует предустановленного NVIDIA CUDA SDK и небольших модификаций исходного кода (поиск c применением регулярных выражений не работает с GPU) Scalpel как правило доступен среди пакетов соответствующего дистрибутива Linux, но также можно собрать его из сырцов забрав с репозитория гитхаба.Настройка приложения осуществляется в файле /etc/scalpel/scalpel.conf, где задаются соответствующие шаблоны поиска файлов. В нём можно увидеть уже готовые пресеты для поиска, к примеру по изображениям или doc файлам. Для восстановления потерянных данных следует раскомментировать соответствующие шаблоны и запустить приложение.
Если в файле отсутствует шаблон нужного файла, или к примеру вы ищете какого-то определенного формата xml то возникает необходимость создания своего шаблона, который описывается подобно правилам представленным ниже
Type Case sensitive Size range Header Footer Search option avi y 50000000 RIFF??? AVI doc y 10000000 \xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00 \xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00 NEXT pdf y 500000 %PDF %EOF\x0d REVERSE pdf y 500000 %PDF %EOF\x0a REVERSE tex y 300:50000 /%.{1,20}\.tex/ /%.{1,20}\.tex\sEnd/ php y 100000 REVERSE Вкратце о колонкахType — имеет значение только в контексте программы, никакого отношения к восстанавливаемым файлам не имеет и будет использовано только при отображении лога и названии директорий в востановленных данных. Можно не указывать, в таком случае просто поставить NONE Case sensitive — учитывать ли регистр при поиске по заданному шаблону Size range — если указано просто число, то максимальный размер искомого файла, если через двоеточие то min: max размер файла Header, Footer — шаблоны поиска начала и конца файла. Допустимо использование TRE регулярных выражений. В качестве пробела используется символ \s, также можно использовать шестнадцатричное и восьмеричное представление искомых данных к примеру \x[0-f][0-f] или \[0–3][0–7][0–7] Важно отметить, что в качестве последнего поля Search option допустимы значения: REVERSE — данный параметр следует использовать если в файле может использоваться несколько завершающих паттернов. К примеру PDF файлы или PHP, в которых может быть несколько скриптов обрамленных в NEXT — применяется когда нужно получить данные между началом и первым завершением файла, если конец файла не обнаружен тогда будет взята область размером указанным в поле size FORWARD_NEXT — является стандартным вариантом поведения и его указание не является обязательным. В этом варианте происходит строгая проверка шаблона, и если найдено начало файла и не найдено его завершение в заданном размере памяти то данный участок исключается из результатов поиска, если только не указана опция -b при запуске программы, тогда будет взят участок указанного размера с соответствующим началом, а в лог работы приложения [audit.txt] будет написано об обрезанном файле (колонка chop) ЗаметкаВ случае если вам нужно использовать знак вопроса »?» как искомую величину в составе заголовка или конца файла, тогда вам нужно переопределить wildcard символ, которым и является знак вопроса. Для этого нужно в начале конфигурационного файла написать wildcard S
Где S новое обозначение wildcard символа в искомом выражении, или же воспользоваться шестнадцатричным представлением данного символа, что эквивалентно \0×3f или \063А теперь практикаПредположим мы удалили файлы которые описываются шаблонами в таблице выше. Запишем эти шаблоны в конфигурационный файл (в качестве разделения колонок используется символ табуляции) /etc/scalpel/scalpel.conf и запустим восстановление (мной был заранее заготовлен образ с данными для восстановления) root# scalpel MyDrive.img -o recover
Written by Golden G. Richard III, based on Foremost 0.69.
Opening target »/home/username/Documents/repair_files/test/MyDrive.img»
Image file pass ½. MyDrive.img: 100.0% |*****************************************************| 500.0 MB 00:00 ETA Allocating work queues… Work queues allocation complete. Building carve lists… Carve lists built. Workload: avi with header »\x52\x49\x46\x46\x3f\x3f\x3f\x3f\x41\x56\x49» and footer » --> 1 files doc with header »\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00» and footer »\xd0\xcf\x11\xe0\xa1\xb1\x1a\xe1\x00\x00» --> 2 files pdf with header »\x25\x50\x44\x46» and footer »\x25\x45\x4f\x46\x0d» --> 33 files pdf with header »\x25\x50\x44\x46» and footer »\x25\x45\x4f\x46\x0a» --> 19 files php with header »\x3c\x3f\x70\x68\x70» and footer »\x3f\x3e» --> 8 files Carving files from image. Image file pass 2/2. MyDrive.img: 100.0% *****************************************************| 500.0 MB 00:00 ETA Processing of image file complete. Cleaning up… Done. Scalpel is done, files carved = 63, elapsed = 6 seconds.
После завершения исполнения в результирующей папке мы обнаружим найденные файлы и audit.txt в котором будет краткая информация о найденных файлах подобно представленному ниже
Scalpel version 1.60 audit file Started at Wed Jan 7 12:50:52 2015 Command line: scalpel MyDrive.img -o recoverOutput directory: /home/username/Documents/repair_files/test/recover Configuration file: /etc/scalpel/scalpel.conf
Opening target »/home/username/Documents/repair_files/test/MyDrive.img»
The following files were carved: File Start Chop Length Extracted From 00000003.pdf 549888 NO 4162 MyDrive.img 00000055.php 1227776 NO 99954 MyDrive.img 00000001.doc 8916992 YES 10000000 MyDrive.img Также обратим внимание на некоторые доступные опции-p при использовании данной опции файлы не будут восстановлены, но будет создан файл аудита, в котором можно будет просмотреть какие файлы будут восстановлены-q с данной опцией scalpel будет сканировать только начало каждого кластера заданного размера и искать соответствующее начало искомого файла-v verbose режим-o указать каталог куда будет положен результат восстановления данныхВсем удачного восстановления данных!
Полезные ссылкиGithub репозиторий Scalpel Scalpel: A Frugal, High Performance File Carver. Golden R. Richard III, Vassil Roussev SANS Institute InfoSec reading room: data carving concepts TRE Regex Syntax