Практические способы восстановления данных с файловых систем в Windows, Linux, BSD и других ОС
На форуме pgpru.com, да и в других местах, часто обсуждается задача как надёжного уничтожения данных с файловой системы, так и задача их восстановления в процессе утери. К тому же, в ответ на красивые слова "в принципе восстановить можно" часто подспудно возникает вопрос: а как же реально восстаналивают стёртые файлы эксперты по криминалистике? Известно, что для Windows (NTFS) и DOS (FAT) существуют сравнительно надёжные программы по восстановлению файлов, каковые и используется при надобности обычными пользователями или криминалистами. Сложнее обстоят дела с зоопарком файловых систем Linux, хотя простенькие утилиты восстановления файлов с ext*fs давно известны. Наибольший мрак неизвестности окружает более экзотические файловые системы, в частности, используемые в проприетарных UNIX или в разных *BSD-системах типа UFS1/UFS2, также часто называемые FFS. Некогда у меня самого стояла задача восстановления ошибочно затёртых файлов в FreeBSD, но на тот момент никакой внятной информации в интернете относительно спецификаций по UFS найти не удалось, равно как и утилит, помогающих восстановить данные. В итоге задача свелась к уровню "Use source, Luke!", которую пришлось оставить в покое, а с небольшим куском данных – распрощаться. В среде *BSDшников и поныне бытует мнение[link1] о практической нереальности восстановления файлов, т.е. отсутствии как готовых софтварных решений, так и готовых внятных спецификаций о том, как восстанавливать данные, по которым самому можно было бы написать программу.
Сегодня с большим удивлением для себя случайно наткнулся на книгу "Криминалистический анализ файловых систем" под авторством Брайан Кэрриэ (2007) – переводной вариант "File System Forensic Analysis", Brian Carrier (2005), причём переводной вариант можно без труда найти в сети в электронном виде. В данной книге (почти 500 стр.) детально анализируются структуры файловых систем FAT, NTFS, EXT2, EXT3, UFS1 и UFS2 с приведением почти полной их спецификации. Кроме того, схематически показаны, подробно расписаны и проанализированы процессы преобразования и затирания данных при удалении файлов, включая анализ и схему того, как их восстанавливать, с попутным описанием всех возникающих трудностей. Как интригующий результат книги могу сказать, что сложность восстановления файлов с ФС строго возрастает в ряде FAT, NTFS, EXT2, EXT3, UFS1 и UFS2, причём самой сложной задачей является восстановление файлов в той версии UFS, которая используется (использовалась?) в Sun Solaris. Примеры анализа для UFS1 и UFS2 приведены, соответственно, в виде конкретных команд под OpenBSD и FreeBSD, что позволяет лучше понять их смысл в контексте этих ОС. Наряду с анализом самих ФС приведены аналогичные спецификации (в том числе, с точки зрения полезности их исследования криминалистами) для конвенциональной системы разделов, используемых в ОС (разделы Free/Open/NetBSD и Linux LVM). В частности, обсуждаются вопросы задействования скрытых или неконвенционально созданных разделов, а также подозрительных данных в метаданных к ним или в "обычно не используемых местах", зарезервированных под метаданные.
Для полноты картины в книге кроме того рассмотрено вообще всё, что напрямую относится к жёстким дискам, типа их типов, хардваре, и принятых систем адресации. Описано влияние изменения параметров типа atime, ctime и команды touch с точки зрения того, что они реально меняют в структуре ФС, какие "нестыковки" порождают и как их неаккуратное применение выдаёт себя эксперту при изучении копии диска. В конце книги приводятся конкретные программы, используемые в криминалистике для указанных целей, так что при задаче восстановления стёртых файлов конечному пользователю можно начать поиск софта с изучения представленных программ. Написано понятным простым (даже не для великих гуру – системных программистов) языком, так что полагаю, что если читать с самого начала, то начинающему UNIX'оиду всё будет понятно. Советую всем параноикам обзавестись сей книжкой :-)
PS: попутно наткнулся[link2] на удивительный факт: данные файловой системы NTFS зачем-то содержат MAC-адрес машины... зачем – так и не понял.
В догонку – а вот и софт[link3]:
Допустим "затёртый", "стёртый" и "удалённый" файл тождественны по своим останкам в экзотических fs. Но значит ли это, что "стёртый" файл можно восстановить, как и "удалённый", допустим из ntfs5 или ext3?
В данной книжке рассматривается случай восстановления просто удалённого файла, т.е. без специального затирания места, которое он занимал на диске (типа shred'инга), ну, от силы, может быть, с некоторыми поправками на то, что чать данных уже была перезаписана в процессе естественного использования ФС. Там, кстати, конкретно написано что затирается из метаданных (и что нет) в случае той или иной ФС (см. стр. 436):
Предположим, вам нужно восстановить некоторую базу данных, удаленную на Linux разделе. ext3 является само-дефрагментирующейся ФС, так что с высокой вероятностью, если мы найдем с помощью побайтного сканирования диска заголовок файла бд, то все остальные сектора вмещают данные файла. Даже если файл и фрагментирован, восстанавливающему достаточно написать функцию, которая для каждого сектора на диске вернет результат, соответсвтуют ли данные сектора формату файла бд. После этого нам достаточно перебором цепочек восстановить исходный файл. Вряде случаев это усложнится тем, что некоторые сектора будут содержать разные версии одного и того же файла: до или после изменения. Однако, количество перебора все равно не сравнимо с тем, которое предполагается для взломов существующих шифров.
Да, в книге это перевели как необходимость использования "уровня приложений" при восстановлении файлов. В случае множества данных (улик), оперативно стёртых, типа rm -rf ~/ восстановление будет куда более сложным, хотя и не полный перебор.
И не только у них. Практически восстановить файлы возможно только на ext2, в журналируемых ФС это едва ли решаемая задача. Восстановить же данные, если они не были перезаписаны, можно в любом случае, если их полнота и структурированность не является самоцелью, что и происходит в криминалистике (криминалисту интереснее конкретные данные, которые можно извлечь с диска, чем то, как назывались файлы и в каких директориях они лежали).
Да, но интереснее ответ на вопрос "насколько практически трудоёмко восстановить эти данные" в случае той или иной ФС и ситуаций. Ведь можно себе вообразить ситуацию, когда на восстановление данных (а эта процедура тесно связано с попыткой восстановить файлы) потребуется так много ручной работы и машинного времени, что никто не захочет оплачивать подобную процедуру.
Судебные дистры[link4] Linux.
Гость (16/09/2009 16:38)
Обычный PR
Forensic Discovery[link5] — ещё одна книжка на эту же тему, описание заточено под разные *никсы.