Глубокий анализ данных, Эпизод 1: foremost
Есть ситуации: ваша флешка начинает помирать, диск плохо читается и на
нём   важные   данные,   или  вы  пришли  к  какому-нибудь  недругу  и
подозреваете, что у него на винчестере есть данные, которые вам нужны,
а  он  их  показывать  не хочет. В общем, вопрос: как выдрать файлы из
труднодоступных носителей?
Решение:  имеется  класс программ «судебного анализа данных» (forensic
analisys),  позволяющих  без  шума  и  пыли  (и ректальной имплантации
горячих паяльников) выудить данные, даже если они хитро записаны. 
Лирическое отступление
Всё  началось  с того, что ко мне пришёл один пользователь виндовс, и,
гордо  размахивая  флешкой,  сказал, что у него есть вордовский файл с
паролями,  но  на  этой  флешке его никто никогда не отыщет. Мне стало
интересно, и я, отвлекая его внимание запущенным на ноутбуке Kororaa с
XGL,  по-тихому  перегнал всю гиговую флешку к себе с помощью dd… На
следующий  день  он  очень удивился, увидев в своём почтовом ящике все
свои  пароли.  Ниже  рассказывается,  как  мне  это  удалось  сделать,
используя Дебиан и программы, имеющиеся в нём. 
Что есть для этого в Дебиан?
Чего  только  не найдёшь в Дебиановском репозитории! Например, очень и
очень  интересная  программа  foremost.  Она позволяет искать файлы на
сменных  носителях  / внутри образов дисков по hex-данным, характерным
заголовкам  и  окончаниям.  В  Sarge  версия  довольно  старая,  но  с
сайта  можно  скачать  тарболл  и  скомпилировать  его. После чего
foremost  можно  запустить  и прочитать мануал, который, надо сказать,
весьма примечателен:
Выделенные курсивом строки, надеюсь, в переводе не нуждаются?
Как это работает?
Программа прочёсывает файлы на предмет совпадения заранее определённых
hex-кодов,  соответствующих наиболее распространённым форматам файлов.
После  чего  экстрагирует их из диска / образа и складывает в каталог,
вместе с подробным отчётом о том, чего, сколько и откуда было выдрано.
Мануал  к  программе написан очень подробный, с возможностью добавлять
свои  форматы,  о  которых  программа  не знает. Заголовки и окончания
декодируются перед использованием из шестнадцатеричного формата:
А вот и пример того, как выглядят для foremost файлы:
Так  что  если есть желание и необходимость, можно добавить информацию
для  поиска  шифрованный  файлов  и  прочих  наводящих  на размышления
данных. 
Foremost в действии
Отлично, программа собрана и установлена, с требуемого носителя содран
образ при помощи dd, теперь осталось поискать там файлы.
Попробуем поискать файлы, замаскированные под другой формат.
Берём  флешку,  втыкаем  и не монтируем — пробуем выдрать оттуда файлы
типа doc, один из которых переименован в jpg (наивный юноша…):
После чего идём в подкаталог ../output и наблюдаем радостную картину —
файлик обнаружился. А вот и отчёт программы:
Имя  не  сохранено,  но содержимое в порядке. Нагретый паяльник и утюг
можно отложить в сторону. :-)
Другой  пример. Пусть хакер Нео хочет скрытно передать товарищу Морфею
диск  с  изображением кодов к Матрице (фотографией голой Тринити). Для
этого   можно  схитрить:  приказывать  писать  программе  cdrecord  не
iso-образ, а просто файл:
На другом конце Морфей делает
Но  вот  всех  застукал  агент  Смит,  приволок  в отделение и ласково
спрашивает,  что на болванке. Хакер Нео с ясными глазами говорит почти
правду  —  ничего,  болванка  пустая  (ясное  дело,  что «в лоб» такая
болванка не читается). Агент Смит знает Линукс и поэтому он набирает в
консоли:
И  выуживает  из  диска  крамольные  данные:  в  подкаталоге ..output/
появляется файл audit.txt следующего содержания:
и каталог ..output/jpg/ с этим файлом…
Ситуацию  можно  усложнить:  дописать  в  конец диска этот файл тем же
способом,  после  записи  липовых  файлов,  или записать так архив — в
общем, есть где фантазии развернуться. 
Ещё  немного поигравшись с программой, можно сказать следующее. Сразу,
без  дополнительных  танцев,  находит  foremost графические файлы tif,
jpg,  png,  bmp,  звуковые  файлы wav, виндовые exe-шники, все офисные
форматы  (мелкоОфиса  и  ОпенОфиса), архивы rar и zip и многое другое.
Линуксовые  архивы  типа  bzip2 и p7zip «в лоб» программа не берёт, но
это  дело  не  сильно  облегчает, так как, задавшись целью, можно и их
выдрать с диска. 
Заключение
На  простых  примерах была показана мощь программы foremost, которая в
умелых   руках   и  при  знании  простых  UNIX-программ  типа  dd  или
recoverdm  способна выуживать из носителей информации данные, даже
весьма хитро спрятанные и записанные нестандартным образом.
Аналогичные программы
Такие  программы  особенно не афишируются, и крайне неохотно раздаются
за просто так. Или надо оставлять свои паспортные данные и доказывать,
что  вы  работаете в полиции, в суде или в КГБ :-) Но всё-таки кое-что
имеется.  Это  проприетарные  Safeback, Encase, safecopy, dvdisaster и
некоторые другие. Особые параноики полагают, что старый-добрый dd тоже
является программой из этой же серии.
Глубокий анализ данных, Эпизод 2: The Sleuth Kit
Продолжая тему о программах анализа данных, в этом посте пойдёт речь о
семействе утилит судебного анализа (forensic analys) The Sleuth Kit. В
дистрибутив Debian оно пока не входит (в Sarge v3.1r1 во всяком
случае), но это не мешает скачать сырцы с сайта проекта и собрать
самостоятельно.
Установка
Для того, чтобы начать использовать The Sleuth Kit, требуется
распаковать тарбол в любую директорию и просто набрать в ней make. Для
сборки программы нужны библиотеки SSL, которые нужно предварительно
поставить, как и говорилось в файле README. В дистрибутив они входят:
Так что это потребует около 7Мб дискового пространства. Если нам его не
жалко, ставим:
После того, как всё настроится и установится, можно приступать к
сборке:
В результате должно всё собраться, а утилиты появятся в подкаталоге
../bin, который до сборки был пуст. После сборки там появится много
утилит, часть которых будет описываться далее.
Если у вас библиотки ssl не установлены, при компиляции вы получите
ошибку такого вида:
Это значит, что упомянутые выше библиотеки у вас не установлены и вам
их нужно поставить.
Ищем и находим данные
После установки в вашем распоряжении окажется почти три десятка утилит,
способных дать исчерпывающую информацию и том, что и как записано на
носителе. Разумеется, утилиты прекрасно работают с raw-данными,
полученными dd или recoverdm, о которой уже было написано.
Следует отметить, что если программа foremost предназначена скорее для
экспресс-анализа и представляет собой утилиту вида «всё в одном
флаконе», то The Sleuth Kit это набор утилит для более глубокого
исследования данных. Но это лучше показать на примере, в котором
используется версия 2.07.
Пример
Пусть имеется образ флешки в файле 1.img, и на ней есть данные, которые
нужно извлечь без монтирования. Для этого сначала смотрим, какие
структуры данных вообше присутствуют на диске — это делает утилита mmls
— media management lister. Она показывает разметку диски, в том числе
пустые области (unallocated spaces), а так же адреса начала и окончания
партиций.
Поддерживаются следующие типы партиций:
Так, применяем mmls для того, чтобы узнать, какое расположение и тип
партиций:
Всё верно, досовская файловая система на флешке (выделение полужирным —
моё). Теперь известно, откуда она начинается и где заканчивается — эта
информация нужна для работы других утилит.
Отлично, теперь мы знаем тип файловой системы и где она располагается.
Посмотрим, как много данных на ней есть и что мы может оттуда выдрать —
в этом деле нам поможет другая утилита, fsstat. Вызываем её, сообщая
сведения, полученные от mmls:
# Non-clustered: 31321 — 31327 METADATA INFORMATION ——————————————— Range: 2 — 500226 Root Directory: 2 CONTENT INFORMATION ——————————————— Sector Size: 512 Cluster Size: 4096 Total Cluster Range: 2 — 3909 FAT CONTENTS (in sectors) ——————————————— 57-64 (8) -> EOF 65-80 (16) -> EOF 81-88 (8) -> EOF 89-96 (8) -> EOF 97-408 (312) -> EOF 409-688 (280) -> EOF 689-696 (8) -> EOF 697-1000 (304) -> EOF Отлично, теперь мы знаем, сколько файлов записано и где они расположены. Самое время посмотреть на структуру каталогов и файлов, начиная с корневого каталога. Для этого воспользуемся утилитой fls, которая показывает не только записанные, но и удалённые файлы. Посмотрим, что есть в корневом каталоге: $ fls -f fat -o 0000000032 1.img d/d 3: DCIM d/d 4: SCENE r/r * 6: raw1.bz2 r/r 8: cdpocket.pdf r/r 10: raw1 Чудесно, знаем не только имена файлов, но и их смещения, которые нам потребуются, чтобы прочесть файлы. Звёздочка означает, что файл удалён: но его можно попробовать восстановить, если после удаления не проводилось интенсивного перезаписывания файлов. Если файлов много, или они в каталогах, и требуется найти смещение файла, имя которого известно, следует воспользоваться утилитой ifind. $ ifind -a -n cdpocket.pdf -f fat -i raw -o 0000000032 1.img 8 Результатом является смещение файла, которое требуется для его извлечения. Всё, в наших руках вся информация о файлах — осталось их извлечь. Посмотрим, например, на файл cdpocket.pdf, для извлечения которого используем утилиту icat: $ icat -f fat -i raw -o 0000000032 1.img 8 > cdpocket.pdf В текущем каталоге после выполнения этой команды появляется файл cdpocket.pdf — читается и просматривается соответствующей программой. Заключение Комплект утилит The Sleuth Kit даёт пользователям *nix-систем огромные возможности по восстановлению повреждённых или скрытых данных, и в приведённом выше примере освещается лишь некоторые программы. Больше информации о судебном анализе данных можно найти в прекрасных мануалах, идущих с утилитами, и на сайте авторов.