1/19/2007

Глубокий анализ данных, Эпизод 1: foremost

Есть ситуации: ваша флешка начинает помирать, диск плохо читается и на нём важные данные, или вы пришли к какому-нибудь недругу и подозреваете, что у него на винчестере есть данные, которые вам нужны, а он их показывать не хочет. В общем, вопрос: как выдрать файлы из труднодоступных носителей?
Решение: имеется класс программ "судебного анализа данных" (forensic analisys), позволяющих без шума и пыли (и ректальной имплантации горячих паяльников) выудить данные, даже если они хитро записаны.

Лирическое отступление
Всё началось с того, что ко мне пришёл один пользователь виндовс, и, гордо размахивая флешкой, сказал, что у него есть вордовский файл с паролями, но на этой флешке его никто никогда не отыщет. Мне стало интересно, и я, отвлекая его внимание запущенным на ноутбуке Kororaa с XGL, по-тихому перегнал всю гиговую флешку к себе с помощью dd... На следующий день он очень удивился, увидев в своём почтовом ящике все свои пароли. Ниже рассказывается, как мне это удалось сделать, используя Дебиан и программы, имеющиеся в нём.


Что есть для этого в Дебиан?
Чего только не найдёшь в Дебиановском репозитории! Например, очень и очень интересная программа foremost. Она позволяет искать файлы на сменных носителях / внутри образов дисков по hex-данным, характерным заголовкам и окончаниям. В Sarge версия довольно старая, но с сайта можно скачать тарболл и скомпилировать его. После чего foremost можно запустить и прочитать мануал, который, надо сказать, весьма примечателен:
Foremost was written by Special Agent Kris Kendall and Special Agent Jesse
Kornblum of the United States Air Force Office of Special Investigations
starting in March 2001. This program would not be what it is today without
help from (in no particular order): Rob Meekins, Dan Kalil, and Chet
Maciag. This project was inspired by CarvThis, written by the Defense
Computer Forensic Lab
in 1999.
Выделенные курсивом строки, надеюсь, в переводе не нуждаются?

Как это работает?
Программа прочёсывает файлы на предмет совпадения заранее определённых hex-кодов, соответствующих наиболее распространённым форматам файлов. После чего экстрагирует их из диска / образа и складывает в каталог, вместе с подробным отчётом о том, чего, сколько и откуда было выдрано.
Мануал к программе написан очень подробный, с возможностью добавлять свои форматы, о которых программа не знает. Заголовки и окончания декодируются перед использованием из шестнадцатеричного формата:
Headers and footers are decoded before use. To specify a value in
hexadecimal use \x[0-f][0-f], and for octal use \[1-9][1-9][1-9]. Spaces
can be represented by \s. Example: "\x4F\123\I\sCCI" decodes to "OSI CCI".
А вот и пример того, как выглядят для foremost файлы:
# extension case-sens max-size header footer (option)
#
# GIF and JPG files (very common)
gif y 155000 \x47\x49\x46\x38\x37\x61 \x00\x3b
gif y 155000 \x47\x49\x46\x38\x39\x61 \x00\x00\x3b
jpg y 200000 \xff\xd8\xff \xff\xd9

Так что если есть желание и необходимость, можно добавить информацию для поиска шифрованный файлов и прочих наводящих на размышления данных.

Foremost в действии
Отлично, программа собрана и установлена, с требуемого носителя содран образ при помощи dd, теперь осталось поискать там файлы.

Попробуем поискать файлы, замаскированные под другой формат.
Берём флешку, втыкаем и не монтируем - пробуем выдрать оттуда файлы типа doc, один из которых переименован в jpg (наивный юноша...):
./foremost -t doc -o /opt/foremost-1.3/output/ -i /dev/sdf
После чего идём в подкаталог ../output и наблюдаем радостную картину - файлик обнаружился. А вот и отчёт программы:

Foremost version 1.3 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File

Foremost started at Sat Dec 16 21:48:07 2006
Invocation: ./foremost -t doc -o /opt/foremost-1.3/output/ -i /dev/sdf
Output directory: /opt/foremost-1.3/output
Configuration file: /opt/foremost-1.3/foremost.conf
------------------------------------------------------------------
File: /dev/sdf
Start: Sat Dec 16 21:48:07 2006
Length: 15 MB (16121856 bytes)

Num (bs=512) Size Offset

0: 129.jpg 155 KB 66048
Finish: Sat Dec 16 21:48:12 2006

1 FILES EXTRACTED

doc:= 1
------------------------------------------------------------------

Имя не сохранено, но содержимое в порядке. Нагретый паяльник и утюг можно отложить в сторону. :-)

Другой пример. Пусть хакер Нео хочет скрытно передать товарищу Морфею диск с изображением кодов к Матрице (фотографией голой Тринити). Для этого можно схитрить: приказывать писать программе cdrecord не iso-образ, а просто файл:
cdrecord -v speed=0 dev=ATAPI:0,0,0 matrixcodes
На другом конце Морфей делает

dd if=/dev/cdrom bs=2048 of=~/temp/matrix.jpg
Но вот всех застукал агент Смит, приволок в отделение и ласково спрашивает, что на болванке. Хакер Нео с ясными глазами говорит почти правду - ничего, болванка пустая (ясное дело, что "в лоб" такая болванка не читается). Агент Смит знает Линукс и поэтому он набирает в консоли:
# foremost -t all -o ~/output/ -i /dev/hda
И выуживает из диска крамольные данные: в подкаталоге ..output/ появляется файл audit.txt следующего содержания:

Foremost version 1.3 by Jesse Kornblum, Kris Kendall, and Nick Mikus
Audit File

Foremost started at Sat Dec 16 22:15:26 2006
Invocation: ./foremost -t all -o /opt/foremost-1.3/output/ -i /dev/hda
Output directory: /opt/foremost-1.3/output
Configuration file: /opt/foremost-1.3/foremost.conf
------------------------------------------------------------------
File: /dev/hda
Start: Sat Dec 16 22:15:26 2006
Length: 604 KB (618496 bytes)

Num (bs=512) Size Offset

0: 0.jpg 88 KB 0
Finish: Sat Dec 16 22:15:28 2006

1 FILES EXTRACTED

jpg:= 1
------------------------------------------------------------------

Foremost finished at Sat Dec 16 22:15:28 2006
и каталог ..output/jpg/ с этим файлом...

Ситуацию можно усложнить: дописать в конец диска этот файл тем же способом, после записи липовых файлов, или записать так архив - в общем, есть где фантазии развернуться.

Ещё немного поигравшись с программой, можно сказать следующее. Сразу, без дополнительных танцев, находит foremost графические файлы tif, jpg, png, bmp, звуковые файлы wav, виндовые exe-шники, все офисные форматы (мелкоОфиса и ОпенОфиса), архивы rar и zip и многое другое. Линуксовые архивы типа bzip2 и p7zip "в лоб" программа не берёт, но это дело не сильно облегчает, так как, задавшись целью, можно и их выдрать с диска.

Заключение
На простых примерах была показана мощь программы foremost, которая в умелых руках и при знании простых UNIX-программ типа dd или recoverdm способна выуживать из носителей информации данные, даже весьма хитро спрятанные и записанные нестандартным образом.

Аналогичные программы
Такие программы особенно не афишируются, и крайне неохотно раздаются за просто так. Или надо оставлять свои паспортные данные и доказывать, что вы работаете в полиции, в суде или в КГБ :-) Но всё-таки кое-что имеется. Это проприетарные Safeback, Encase, safecopy, dvdisaster и некоторые другие. Особые параноики полагают, что старый-добрый dd тоже является программой из этой же серии.

Ссылки
Есть очень хороший каталог с описаниями таких программ здесь. Вот тут неплохое описание доступных утилит по анализу данных, ссылки есть и здесь, а ещё лучше погуглить со словом forensic.

13 комментариев:

  1. какая глупость, Нео до этого бы не опустился =)
    да любым способом зашифровать и всё.
    рекомендую truecrypt. есть и под винду и под линукс (без гуя правда вроде).
    особенно если сделать скрытый раздел.
    то есть внутри файла контейнера еще один зашифрованый контейнер с другим паролем. если дойдет до пяльника - то можно сказать первый пароль (зарнее положив якобы интересные файлы). и невозможно догадаться что там на самом деле что-то еще есть, просто поток шума.

    ОтветитьУдалить
  2. Спасибо за заметку. Весьма познавательно.

    ОтветитьУдалить
  3. понравилось, может когда нибудь пригодится

    ОтветитьУдалить
  4. Для хранения паролей на флешке есть специальные... флешки :), которые умеют создавать и работать с т.н. security partition. К сожалению, программы (поставляются прямо на флешке), которые позволяют использовать такие возможности, есть только для винды (по крайней мере для patriot x-porter). Что сейчас для меня неприемлимо :) Было бы интересно узнать, настолько ли серьёзное это ограничение (есть ли аналоги таких программ под линукс).

    ОтветитьУдалить
  5. В линуксе можно просто монтировать с прозрачным шифрованием.

    ОтветитьУдалить
  6. 2 abc-online
    Для хранения паролей нДля хранения паролей на флешке есть специальные... флешки :), которые умеют создавать и работать с т.н. security partition.
    Это был всего лишь пример. Утилита foremost может очень пригодиться, когда смонтировать раздел не удаётся и есть только бинарный образ, созданный dd.

    2 GQ
    В линуксе можно просто монтировать с прозрачным шифрованием.
    Можно, никто не спорит. Пост не об этом, а о возможности выдрать данные.

    И вообще, foremost до лампы, скрытый раздел или нет - если только раздел не зашифрован, данные оттуда изымет. Чем и удобна.

    На самом деле применяется мной во вполне мирных целях, для восстановления данных с "дохлых" винчестеров и флешек. И без всяких паяльников :-)

    ОтветитьУдалить
  7. Совершенно недавно, знакомый выдернул из засыпающей на ноуте винды, флешку, забыв ее отмонтировать (или как этот там называется). В результате на флешке слетела таблица разделов. То есть, тулзы типа fatback и sleuth kit мне оказались совершенно бесполезными (не уверен насчет sleuth kit) - они просто не видели никакой валидной разметки на диске. Спас меня magicrescue. Но он "из коробки" не умеет извлекать архивы rar - надо писать рецепт (или найти в инете), но к моему счастью, это оказалось и не надо. Если бы magicrescue не достал нужные файлы, следующим был заготовлен foremost. Но попробовать его мне не довелось :)

    --
    Jay

    ОтветитьУдалить
  8. Пользительно. Спасибо.
    Заодно, вдохновленный идеей войны с КГБ, я два часа читал статьи по надежному удалению данных :)

    ОтветитьУдалить
  9. Отлично! Особенно то, что сие чудо есть в дебиане. Можно использовать для поиска нужной информации не только на компе, но и, к примеру, на загрузочной флэшке с какого-нибудь устройства, а возможность создания своих сигнатур позволит работать с разным порядком байт в самых разных системах.

    ОтветитьУдалить
  10. Если шифровать средствами флэшки,то ненадёжно, так как в любой конторе по восст. данных спокойно извлекут шифрованные данные.(у каждого производителя свой фиксированный алгоритм шифрования данных)

    ОтветитьУдалить
  11. 2 Anonymous said...
    Совершенно недавно, знакомый выдернул из засыпающей на ноуте винды, флешку, забыв ее отмонтировать (или как этот там называется). В результате на флешке слетела таблица разделов.
    Есть Testdisk, он отлично с этим справляется. С виндой надо завязывать. Тут у нас сегодня конференция была - если б не мой линукс с опенофисом - позора не обобрались бы.

    2 libc6
    Заодно, вдохновленный идеей войны с КГБ, я два часа читал статьи по надежному удалению данных :)
    Это shred который? Читал, там говорилось, что хорошо бы писать напрямую, а не кэшем... но идею понял.

    2 Veter said...
    Можно использовать для поиска нужной информации не только на компе
    Именно. На то оно и forensic, чтобы выуживать данные независимо от того, где они.

    2 Anonymous
    Если шифровать средствами флэшки,то ненадёжно, так как в любой конторе по восст. данных спокойно извлекут шифрованные данные.
    Спорить не стану, но сомнительно: шифрованные данные в конторе Дяди Васи выудят вряд ли.

    Всем комментаторам спасибо за ценные советы и слова.

    ОтветитьУдалить
  12. Раз случайно отформатировал флэшку с зашифрованным средствами флэшки разделом.Отнёс в контору спец-ся по восст. информации и через неск. дней мне предоставили данные с флэшки.

    ОтветитьУдалить
  13. Спасибо за статью. Воспользовался программкой, чтобы восстановить удалённые фотографии с флэшки от фотоаппарата. Чуть позже нашёл, что есть основанная на этой же программке другая, только обещают работу быстрее и меньше требований к памяти. Тоже есть в дебиане.
    http://www.digitalforensicssolutions.com/Scalpel/

    ОтветитьУдалить