Инструментальные средства обеспечения безопасности

Некоммерческие наборы инструментов, предназначенные для судебного дублирования

Разбить на страницы
Показывать лекцию целиком

В лекции "Коммерческие наборы инструментов для судебного дублирования" было рассмотрено несколько наборов инструментов, выполняющих судебное дублирование, которые распространяются на коммерческой основе. Набор инструментов, обсуждаемый в этой лекции, может быть собран бесплатно. За короткое время вы можете легко им овладеть.

В связи с быстрым распространением операционных систем с открытым исходным кодом, типа Linux, OpenBSD, NetBSD и FreeBSD, широкой публике стал доступен целый набор инструментальных средств (и исходных текстов), которого прежде никогда не было. Многие из общих системных инструментальных средств администрирования типа dd, losetup, vnconfig и md5sum могут использоваться для расследования инцидентов так же эффективно, как их коммерческие аналоги.

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

Аналогично обсуждавшейся в предыдущей лекции необходимости в надежной загрузочной дискете (или компакт-диске), судебное дублирование с некоммерческим программным обеспечением предъявляет те же самые требования. Поскольку Linux - операционная система с открытым исходным кодом, было создано много успешных разработок, заставивших Linux выполняться с компакт-дисков или дискет без обращения к жесткому диску. Мы предлагаем вам испробовать систему Trinux, которая распространяется как система Linux, предназначенная для работы с компакт-диска. Операционную систему Trinux можно исследовать на сайте http://trinux.sourceforge.net. Кроме того, аналогичный вариант системы FreeBSD предлагается на сайте http://sourceforge.net/projects/freebsdtogo/ и имеет подходящее название: FreeBSD To Go (передвижная FreeBSD).

На приведенной схеме этапов расследования мы все еще находимся на стадии судебного дублирования.

dd: инструмент судебного дублирования

Инструмент dd используется для побитного копирования одного файла в другой. Копирование битов таким способом является основой всех инструментальных средств судебного дублирования. Инструмент dd универсален, а его исходный текст доступен публике. Кроме того, dd может компилироваться на почти любой платформе Unix. В этом разделе обсуждаются методы, которые может реализовать инструмент dd для выполнения судебного дублирования.

Инструмент .

Реализация

Опции командной строки утилиты dd, подходящие для судебного дублирования, следующие.

  • if. Указывает входной файл, который нужно читать.
  • of. Указывает выходной файл, в который будет сделан вывод.
  • bs. Указывает размер блока в байтах, для чтения и записи.
  • count. Указывает число блоков, предназначенных для копирования из входного файла в файл вывода.
  • skip. Указывает число блоков от начала, которые должны быть пропущены, перед чтением из входного файла.
  • conv. Позволяет задавать дополнительные параметры, некоторые из которых следующие:
  • notrunc. Не позволит оборвать вывод в случае ошибки;
  • noerror. Не будет прекращать чтение входного файла в случае ошибки (то есть, если были считаны запорченные блоки, процесс будет продолжаться).
  • sync. Заполнит соответствующие биты вывода нулями, если возникнет ошибка ввода. Это происходит только в том случае, если опция используется вместе с опцией notrunc.
  • Очевидно, что dd работает с файлами, а не непосредственно на физических устройствах. Однако операционные системы Unix с открытыми исходными кодами, типа Linux и FreeBSD, реализуют устройства, как файлы. Эти специальные файлы, расположенные в каталоге /dev, разрешают прямой доступ к устройствам через операционную систему. Следовательно, входными файлами в dd могут быть целые жесткие диски, разделы жестких дисков или другие устройства. При создании судебной копии жесткого диска входным файлом будет файл устройства жесткого диска (то есть, /dev/hdb в Linux или /dev/ad1 в FreeBSD). При создании судебной копии отдельного раздела, входной файл будет файлом устройства раздела (то есть, /dev/hdb1 в Linux или /dev/ad1s1 в FreeBSD).

    Естественно, далее надо рассмотреть адресата для дублирования. Адресатом может быть другой жесткий диск (с использованием упомянутых файловых устройств), который называется побитовой копией исходного жесткого диска. Можно расширить эту идею за пределы использования жестких дисков в качестве носителя информации адресата и использовать вместо дисков накопитель на магнитной ленте, хотя это и более медленный метод. Адресатом может быть также обычный файл (обозначаемый так же, как файл улик), сохраненный в любой файловой системе, как логический файл. Это обычный способ хранения наиболее современных судебных копий, из-за легкости манипуляций при перемещении файла улик между устройствами памяти. Наконец, адресатом может быть стандартный вывод (то есть вывод на дисплей). Хотя здесь мы не можем ничего делать с данными, выводимыми непосредственно на экран (стандартная команда out), далее в этом разделе мы исследуем метод дублирования, который полагается на стандартный вывод.

    Все три из этих адресатов вывода успешно использовались в прошлом по той или иной причине при создании судебной копии. Тип (также известный как метод) дублирования обычно диктуется проблемами, с которыми сталкиваются в процессе попытки дублирования, и которые часто не зависят от следователя. Например, если невозможно удалить жесткий диск из исходного компьютера во время дублирования, и не доступны никакие другие соединители для подключения дополнительного жесткого диска, было бы трудно скопировать содержание жесткого диска непосредственно на другой жесткий диск. Точно так же вы не могли бы сохранить копию в обычном файле, потому что это означало бы копирование на средства информации, уже находящиеся в исходном компьютере, то есть запись поверх потенциальных улик. Единственным вариантом в таком случае стало бы отображение по сети, что будет рассмотрено в следующих разделах.

    Множество опций утилиты dd помогут сделать судебное дублирование более эффективным. Например, вы можете управлять размером блока, который будет копироваться, чтобы ускорить процесс для хоста, на котором выполняется dd ; ключ bs обычно устанавливается на 1Кб или 1Мб. Другая опция, которую вы должны использовать - это ключ conv, позволяющий дополнительным (необязательным) параметрам управлять процессом копирования. Параметры noerror и notrunc представляют две особо рекомендуемые опции. Эти ключи позволят игнорировать случаи чтения плохих блоков с исходных носителей, так что копирование продолжится, не обрывая вывод улик. Дополнительная опция sync, используемая с noerror, будет вызывать преобразование плохих блоков из ввода в нули в выводе.

    Примечание. При дублировании компакт-диска убедитесь, что использованный размер блока кратен 2048 байтам.

    Хорошей практикой при выполнении судебного дублирования является создание файла регистрации, чтобы вы могли обращаться к нему в будущем или сделать его доступным для судебных слушаний. Команда script системы Unix позволит перехватить ввод и вывод на консоль Unix или в сеансе xterm и сохранить его в файле. Также желательно выполнение следующей команды перед запуском дублирования. После окончания дублирования наберите exit.

    forensic# script /root/disk.bin.duplication
    Внимание. В следующих разделах будет продемонстрировано выполнение судебного дублирования как на судебном компьютере (компьютер адресата) так и исходной машине (компьютере-жертве), а также дублирование по сети. При сохранении файла сценария не сохраняйте его на том носителе, который вы дублируете, так как это уничтожит часть улик. Поскольку этот файл не велик, лучше сохранить его на гибком диске, если его нельзя сохранить в логической файловой системе на жестком диске адресата.

    Судебное дублирование #1: точное двоичное дублирование жестких дисков

    Чтобы создать зеркальную копию изображения жесткого диска, используя dd, вы должны сообщить утилите, какой исходный жесткий диск будет входным файлом, а какой - выходным (файл улик), на котором вы будете хранить изображение.

    Вы можете определить, какой жесткий диск является источником, а какой адресатом, изучая вывод команды dmesg. И в системе Linux и в FreeBSD команда dmesg выводит информацию на консоль во время загрузки машины (и любые другие сообщения консоли, которые появляются после загрузки). Определить, "кто есть кто" среди жестких дисков не сложно; скорее, вы захотите подключиться к жесткому диску-хранилищу, созданному другим изготовителем, нежели к исходному жесткому диску, и тогда станет очевидно, какой из дисков является источником, а какой адресатом. После того как вы очистили жесткий диск адресата в /dev/hdd (это обсуждается позже в разделе "dd: инструмент очистки жесткого диска"), можно использовать следующий синтаксис для создания судебной копии исходного жесткого диска, подключенного к /dev/hdc в Linux.

    forensic# dd, if =/dev/hdc =/dev/hdd bs=1024 conv=noerror, notrunc, sync
    Внимание. Этот процесс способен удалять все данные, структуры файловых систем и не распределенное пространство с вашего исходного диска. Будьте очень осторожны при назначении источника и адресатов в команде dd.

    Судебное дублирование #2: создание локального файла улик

    В первом методе мы обработали побитовую копию с исходного жесткого диска и расположили ее поверх жесткого диска адресата. Используя этот метод, мы не можем просто скопировать улики с одного носителя на другой. Метод, который способствует более простому управлению уликами, заключается в создании логического файла, который является побитовым представлением исходного жесткого диска. Очевидно, что никогда не следует сохранять файл улик на исходном жестком диске, так как мы можем уничтожить улики. Следующая команда демонстрирует создание судебной копии исходного жесткого диска, подключенного к /dev/hdc, в обыкновенный файл, расположенный в каталоге /mnt/storage/disk.bin в системе Linux.

    Внимание. Этот процесс способен удалять все данные, структуры файловых систем и не распределенное пространство с вашего исходного диска. Будьте очень осторожны при назначении источника и адресата в команде dd.
    forensic# dd, if =/dev/hdc =/mnt/storage/disk.bin bs=1024 
      conv=noerror,notrunc,sync

    Процесс создания копии в других разновидностях операционных систем Unix подобен показанному выше. Единственное различие состоит в указании правильного имени файла устройства для ввода. Следующая команда демонстрирует дублирование исходного жесткого диска системы Windows 98 в системе FreeBSD. Исходный диск связан с /dev/ad0, а результатом является файл улик, расположенный в каталоге /mnt/storage/disk.bin.

    forensic# dd if=/dev/ad0 of=/mnt/storage/disk.bin bs=1024 
      conv=notrunc,noerror,sync
    
    
    20044080+0 records in
    20044080+0 records out
    20525137920 bytes transferred in 5665.925325 secs 
      (3622557 bytes/sec)
    
    forensic# cd /mnt/storage
    
    forensic# ls -al
    total 20048997
    drwxr-xr-x      2   root    wheel           512 Jan 15 13:30    .   
    drwxr-xr-x      7   root    wheel           512 Jan 15 11:58    ..  
    -rw-r--r--      1   root    wheel       20525237920 Jan 15 13:30    disk.bin
    Внимание. У некоторых файловых систем есть ограничения на размер файла. Например, более старые файловые системы способны поддерживать только 2-гигабайтные файлы, тогда как файлы в более новых файловых системах могут быть больше. Не забудьте проверить ограничения файловой системы вашего адресата прежде, чем начать отображение.

    В предыдущем примере, если бы в процессе дублирования произошла ошибка, число входящих записей ( in ) не соответствовало бы числу выходящих записей ( out ). Например, если бы существовал один плохой блок, вывод команды dd выглядел бы так:

    forensic# dd if=/dev/ad0 of =/mnt/storage/disk.bin bs=1024 
      conv=notrunc, noerror
    
    20044079+1 records in
    20044080+0 records out

    Здесь поле +1 указывает количество записей, которые читались, но имели ошибки. Поскольку мы задали параметры conv=notrunc, noerror, sync, в случае ошибки утилита dd дополнит соответствующий блок в выводе нулями. Так как размер блока равен 1024 бита (указан с помощью параметра bs), это значит, что в нашей судебной копии 1024 байта данных не надежны. Если бы мы вычислили контрольную сумму MD5 для /dev/ad0 и /mnt/storage/disk.bin, весьма вероятно, что эти два файла не соответствовали бы друг другу. Короче говоря, такой вывод является причиной того, что нам требуется выполнить команду script, чтобы задокументировать эту ошибку в своем отчете о расследовании.

    Иногда следователь создает много файлов улик для единственного исходного жесткого диска или раздела. Обычно это происходит тогда, когда следователь хочет, чтобы файлы улик были достаточно маленькими и могли поместиться на архивном компакт-диске, или когда файловая система хоста не поддерживает файлы большого размера. Такого рода проблема может быть решена с помощью комбинации ключей skip и count. Ключ skip задает позицию во входном файле, с которой утилита dd начнет копирование. Ключ count задает количество блоков, обозначенных ключом bs, которые утилита dd будет читать из исходного входного файла. Поэтому, при выполнении комбинации команд dd с увеличивающимся значением ключей skip и count будет создано несколько выходных файлов вывода, как можно видеть ниже.

    forensic# dd if=/dev/hdc of=/mnt/storage/disk.1.bin 
      bs=1M skip=0 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.2.bin 
      bs=1M skip=621 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.3.bin 
      bs=1M skip=1241 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.4.bin 
      bs=1M skip=1861 count=620 ¬ 
    conv=noerror,notrunc,sync
    Внимание. Если вы используете эти команды, то, вероятно, делите большую копию на несколько меньших частей для архивирования (на компакт-диске или другом носителе). Не забудьте проверить с помощью контрольной суммы MD5 (обсуждаемой ниже в этой лекции) комбинацию отдельных файлов после передачи их с одного носителя информации на другой.

    Когда вам требуется снова собрать отдельные части копий, которые представляют исходный жесткий диск, для их анализа, используйте следующую команду.

    forensic# cat disk.1.bin disk.2.bin disk.3.bin disk.4.bin 
      disk.whole.bin

    И, наконец, вы можете ускорить процесс дублирования, изменяя размер блока. Поскольку секторы на диске занимают 512 байтов, то вы можете ускорить время чтения и записи, увеличив размер блока с помощью ключа bs. Следующая команда демонстрирует, как был ускорен процесс дублирования части внешнего жесткого диска в системе FreeBSD.

    freebsd# /usr/bin/time -h dd if=/dev/ad0 of=test.bin bs=512 count=200000 ¬ conv=notrunc,noerror,sync

    200000+0 records in
    200000+0 records out
    102400000 bytes transferred in 69.452716 secs (1474384 bytes/sec)
            1m9.51s real        0.28s user      8.46s sys

    forensic# /usr/bin/time -h dd if=/dev/ad0 of=test.bin bs=1024 count=100000 ¬ conv=notrunc,noerror,sync

    100000+0 records in
    100000+0 records out
    102400000 bytes transferred in 41.785020 secs (2450639 bytes/sec)
            41.79s real     0.20s user      4.42s sys

    Возможно, вы не знакомы с командой time, которая просто помещает в вашу команду секундомер. В этом примере, команда time фиксирует продолжительность процесса дублирования от начала до конца и выдает реальное пользовательское и системное время. Заметьте, что реальное время уменьшилось, когда мы увеличили размер блока с 512 до 1024. Это произошло потому, что компьютер более эффективно читает (и пишет) за раз 1024 байта, чем 512 (для файла одного и того же размера). Предыдущими командами было скопировано только около 100Мб информации. Представьте себе эффективность копирования 80-гигабайтного жесткого диска при увеличении размера блока! Конечно, в какой-то момент вы почувствуете уменьшение отдачи и, возможно, захотите поэкспериментировать со своей аппаратурой и определить, что больше подходит для вашего конкретного случая.

    Судебное дублирование #3: создание файла улик на удаленной системе

    Если других вариантов нет, судебная копия может быть передана на отдельный компьютер целиком. Это можно сделать, переадресовывая стандартный вывод команды dd через Netcat (или Cryptcat) на другую машину, связанную TCP/IP-сетью. (Обсуждения Netcat или Cryptcat см. в лекции "NETCAT и CRYPTCAT").

    Исходная машина, содержащая отображаемый носитель информации, должна быть загружена с надежной дискеты или компакт-диска системой Linux или FreeBSD. Создание надежной дискеты или компакт-диска не должно отнять у вас много времени и сил, поскольку выполнению такой задачи были посвящены целые проекты. Один из примеров - система Trinux, которую вы можете найти на сайте http://trinux.sourceforge.net и решить, подходит ли она вам. Чтобы все было согласовано, компьютер адресата должен быть загружен системой Unix. После этого судебное дублирование по сети может быть выполнено простыми командами.

    Примечание. На судебный компьютер операционную систему Unix загружать не обязательно. Компьютер адресата может иметь операционную систему Windows.

    На рабочей станции адресата выполните следующую команду:

    forensic# nc-l-p 2222 > /mnt/storage/disk.bin

    Для передачи судебной копии используйте утилиту Cryptcat. У Cryptcat есть два преимущества по сравнению с утилитой Netcat: проверка правильности и секретность. Поскольку данные на исходной машине зашифрованы, расшифровка их на компьютере адресата должна давать побитовую копию ввода. Если бы взломщик изменил поток битов в сети, после расшифровки вывод был бы значительно изменен. Кроме того, нападавший не мог перехватить точную копию жесткого диска исходной машины по сети с помощью анализатора сетевого потока (sniffer) типа tcpdump или Ethereal (см. лекцию "Анализаторы сетевых потоков"). Если бы он мог получить копию, то смог бы обойти и любые локальные меры защиты и исследовать все файлы так же, как судебный аналитик!

    На исходной машине выполните следующую команду (судебный компьютер использует IP-адрес 192.168.1.1):

    source# dd if=/dev/hdc bs=1024 conv=noerror,notrunc,sync | 
      nc 192.168.1.1 2222

    dd: инструмент очистки жесткого диска

    Иногда по финансовым соображениям вам может потребоваться повторно использовать жесткие диски для сбора улик с других исходных носителей из других инцидентов. Поэтому жесткий диск-хранилище должен быть свободен от артефактов, оставшихся от предыдущих копий. Наихудший сценарий, с которым может столкнуться следователь, состоит в доказательстве виновности невинного индивидуума на основе артефактов, оставшихся от предыдущего расследования! Это - то место, где утилита dd опять может спасти положение, очистив носитель с уликами перед его повторным использованием.

    Реализация

    В операционной системе Unix с открытым исходным кодом, типа Linux и FreeBSD, есть специальный файл, названный подходящим именем /dev/zero, который при его прочтении возвращает неограниченное количество нулей. Если вы используете этот файл как ввод, а носитель информации с уликами, как вывод, то вы запишете нули на носитель с уликами. Когда на весь диск с уликами записаны нули, он считается очищенным перед его последующим использованием.

    Внимание. Этот процесс удаляет все данные, структуры файловых систем и не распределенное пространство диска. Будьте очень осторожны при назначении источника и адресата, используя команду dd.

    Следующая команда демонстрирует, как бы вы чистили диск с уликами, подключенный к логическому устройству /dev/hdb в системе Linux.

    forensic# dd if=/dev/zero of =/dev/hdb

    Чтобы выполнить такую же очистку на платформе FreeBSD, вам надо изменить of или выходящий файл на правильное имя устройства жесткого диска, как показано ниже.

    forensic# dd if=/dev/zero of =/dev/ad1

    Если вы сомневаетесь, что эта команда обнулит жесткий диск адресата, используйте средства просмотра файлов в шестнадцатеричном формате, которые будут обсуждаться в "Средства просмотра файлов и редакторы общего назначения" (hexdump, hexedit, xvi32:), чтобы просмотреть жесткий диск и убедиться, что он содержит нули. Дополнительно можно использовать флаги grep и -v с критериями поиска 0. По флагу -v при просмотре соответствующего жесткого диска будет идти поиск всего ненулевого, и выдаваться сообщение об этом. Если вы не получите соответствующих сообщений, следовательно жесткий диск содержит одни нули.

    losetup: преобразование обыкновенного файла в устройство в системе Linux

    Как правило, следователь предпочитает создание обычного файла, который содержит судебную копию, выполненную с помощью утилиты dd. С помощью только этого файла трудно просматривать логические файлы, которые существовали на первоначальном исходном жестком диске. Поэтому, этот обычный файл должен быть преобразован в специальный файл устройства, который эмулирует жесткий диск. Как только обычный файл преобразован в устройство, следователь может анализировать исходную файловую систему точно так же, как оригинальный жесткий диск. Инструмент losetup выполняет это преобразование в системе Linux. ("lo" в названии losetup означает local loopback (локальное закольцовывание) и, следовательно, монтирует обычный файл, так же как это делается с любым жестким диском.)

    Примечание. Монтирование файловой системы обеспечивает только логическое представление исходной файловой системы. Хотя каждый бит все еще доступен через устройство loopback, в базовой инсталляции операционной системы Unix нет никаких инструментальных средств, позволяющих быстро просматривать файлы, удаленные из исходной файловой системы.

    Реализация

    С утилитой losetup используются следующие опции:

    forensic# losetup
    
    Использование:
    losetup loop_device                     # дать информацию
    losetup -d loop_device                  # удалить
    losetup [ -e encryption ] [ -o offset ] loop_device file # установка

    Поскольку в процессе судебного анализа мы не будем использовать никакого кодирования, опции кодирования игнорируются. Это упрощает использование инструмента. Сначала мы определяем файл устройства, который будет связан с файлом улик при судебном дублировании. В системе Linux используются файлы устройств /dev/loop#, где # - число от 0 до 9. (Выбор числа произволен и определяется пользователем.) Чтобы сделать первое loopback -устройство, связанное с файлом улик, лучше всего подойдет следующая командная строка.

    forensic# losetup/dev/loop0/mnt/storage/disk.bin

    Следующая команда демонстрирует команду losetup в действии. Для отображения жесткого диска была использована утилита dd с исходного диска, присоединенного к файлу устройства /dev/hdb, а файл улик был сохранен в каталоге /mnt/storage/disk.bin. Файл был связан с файлом устройства /dev/loop0, используя losetup с нулевым смещением. При анализе диска с помощью утилиты fdisk, получено сообщение, что раздел Windows 98, которым мы интересуемся в расследовании, начинается в логическом секторе 64.

    forensic# if=/dev/hdb of=/mnt/storage/disk.bin conv=notrunc,
      noerror,sync bs=1024
    
    20043922+0 records in
    20043922+0 records out
    
    forensic# losetup /dev/loop0 /mnt/storage/disk.bin
    
    forensic# fdisk -l /dev/loop0
    
    Disk /dev/loop0: 1 heads, 40087844 sectors, 1 cylinders
    Units = cylinders of 40087844 * 512 bytes
    
        Device      Boot        Start   End Blocks  Id  System  
    /dev/loop0p1        *   1   1   20041056    c   Win95 FAT32 (LBA)
    Partition 1 has different physical/logical beginnings (non-Linux?):
        phys=(0, 1, 1) logical=(0, 0, 64)
    Partition 1 has different physical/logical endings:
        phys=(1023, 254, 63) logical=(0, 0, 40082175)
    Partition 1 does not end on cylinder boundary:
        phys=(1023, 254, 63) should be (1023, 0, 40087844)

    Чтобы смонтировать раздел Windows, мы должны использовать смещение, равное 32256, которое получается в результате умножения 63 секторов на 512 байтов, содержащихся в каждом секторе. При выполнении команды losetup смещение указывается опцией -o. Следующая запись демонстрирует задание правильного смещения, а затем монтирование и просмотр содержимого файла улик /mnt/storage/disk.bin в каталоге

    /mnt/evidence (конечно, вначале должен быть создан каталог /
      mnt/evidence!).
    forensic# losetup -o 32256 /dev/loop0 /mnt/storage/disk.bin
    forensic# mount -o ro /dev/loop0 /mnt/evidence
    forensic# ls /mnt/evidence

    После того, как изображение улик было смонтировано в состояние, предназначенное только для чтения, его можно проанализировать так же, как если бы был вставлен оригинальный исходный носитель без возможности разрушения свидетельской ценности оригинала. В сценарии, который рассмотрен в предыдущем выводе, доступ к файлу /mnt/storage/disk.bin был изменен на доступ, предназначенный только для чтения с помощью команды chmod с разрешениями 400. Кроме того, еще один метод оградить файл от изменения во время монтирования состоит в использовании с командой mount опции "только чтение" -o ro.

    Примечание. В данном случае мы смонтировали содержимое, как обыкновенную файловую систему. После того, как обычный файл связан с устройством loopback, все команды, оперирующие с файлами и устройствами, будут работать на специальном устройстве (/dev/loop0), которое связано с изображением.

    Усовершенствованное устройство loopback в системе Linux

    В последней секции, чтобы получить доступ к разделу, мы должны были изменить смещение с помощью losetup, потому что устройства loopback не распознают таблиц разделов. При монтировании файловой системы на устройствах loopback процесс угадывания, где начинается раздел, может оказаться утомительным и ненужным. К счастью, NASA разработало новое усовершенствованное loopback -устройство для решения проблемы смещения, и это значительно облегчает процесс судебного анализа.

    На момент написания этой книги усовершенствованное устройство loopback не было связано с каким-либо дистрибутивом Linux, но его можно было найти на общедоступном FTP-сервере, расположенном на ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loo pback/. Необходимо выполнить две установки, чтобы получить усовершенствованные функциональные возможности. Одна установка обновит ядро на модифицированное, а другая добавит инструментальные средства, необходимые для использования дополнительных возможностей, которые может предоставить новое ядро.

    Реализация

    Сначала отредактируйте свой файл lilo.conf, который определяет, что будет загружено после запуска системы. Отредактируйте текущий файл lilo.conf, подражая следующему файлу, полученному из системы RedHat Linux 7.2.

    Примечание. Возможно, что к моменту издания этой книги NASA выпустит более новую версию своего усовершенствованного устройства loopback. Если это так, то вы должны изменить соответствующим образом номера версий в этом примере, чтобы заставить его работать в вашем конкретном случае.
    prompt
    timeout=50
    default=linux
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    message=/boot/message
    linear
    
    image=  /boot/vmlinuz-2.4.7-10
            label=linux
            initrd=/boot/initrd-2.4.7-10.imp
            read-only
            root=/dev/hda2
    
    image=  /boot/vmlinuz-2.4.17-xfs-enhanced_loop
            label=linux_enhanced
            root=/dev/hda2
    Примечание. Выражения, записанные жирным шрифтом, должны быть изменены в зависимости от дистрибутива Linux, который вы используете. В данном случае корневой раздел был присоединен к устройству

    /dev/hda2, но оно может быть иным для вашего конкретного судебного компьютера. Кроме того, описываемый здесь процесс работает в системе RedHat Linux 7.2. Установка нового ядра может происходить по разному для разных дистрибутивов Linux, поэтому вам, вероятно, придется почитать документацию, сопровождающую ваш конкретный дистрибутив системы Linux.

    Чтобы установить усовершенствованное ядро loopback, загрузите и извлеките его в каталог, используя утилиту tar. Следующая командная строка извлекает исходный код ядра системы.

    forensic# tar xzvf linux-2.4.17-xfs-enhanced.tar.gz-C/usr/src

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

    forensic# cd /usr/src/inux-2.4.17-xfs-enhanced_loop
    forensic# make menuconfig
    forensic# make dep
    forensic# make clean
    forensic# make bzImage
    forensic# make modules
    forensic# make modules_install
    forensic# cd arch/i386/boot
    forensic# cp bzImage /boot/vmlinuz-2.4.17-xfs-enhanced_loop
    forensic# lilo -v

    После установки ядра необходимо установить двоичные файлы набора инструментов loopback, используя следующую командную строку:

    forensic# rpm -ivh --force loop-utils-0.0.1-1.i386.rpm

    Теперь перезагрузите систему и не забудьте выбрать новое ядро, набрав linux_enhanced в строке приглашения начальной загрузки LILO, иначе вы перезагрузите ваше старое ядро. Когда машина перезагрузится, войдите в систему с привилегированными правами (root). Теперь вы запустите усовершенствованное ядро (что вы, вероятно, наблюдали во время входа в систему).

    После установки комплекта инструментальных средств loopback начинается реальное волшебство. С тем же самым файлом улик, который использовался в предыдущем разделе (disk.bin), вы можете смонтировать исходные данные, найденные в разделе Windows 98, используя утилиту losetup тем же самым способом, но без смещения. Дополнительный флаг -r к утилите losetup позволяет сделать файл улик доступным только для чтения, что всегда является хорошей мерой безопасности. После того как файл улик был связан с файлом устройства /dev/loop0, наберите в командном приглашении dmesg, чтобы отобразить разделы, найденные в файле улик. Просто смонтируйте раздел так, как бы вы сделали это на любом физическом жестком диске. В этом сценарии разделы начинают заполнять другие зацикленные ( loop ) устройства с увеличивающимися второстепенными номерами файлов устройств. Например, первый раздел теперь будет называться /dev/loop1, второй -/dev/loop2, и так далее. Процесс показан ниже.

    forensic# losetup /dev/loop0 /mnt/storage/disk.bin
    forensic# mount -o ro /dev/loop0 /mnt/evidence
    forensic# ls /mnt/evidence

    Следующие команды нарушат связи, созданные предыдущими командами:

    forensic# cd /mnt/storage
    forensic# umount/mnt/evidence
    forensic# losetup-d /dev/loop0
    Внимание. Добавим одно пояснение к использованию команды losetup -d. Работать необходимо в том же самом каталоге, где находится файл disk.bin, иначе произойдет ошибка.

    vnode: преобразование обычного файла в устройство системы FreeBSD

    Так же, как утилита losetup позволяет преобразовывать файл улик, созданный в результате судебного дублирования, в устройство, приспособленное для анализа, так и функция vnode системы FreeBSD позволяет выполнить ту же самую задачу. Устройство vnode в системе FreeBSD связывает обыкновенный файл с абстрактным устройством, обозначенным, как /dev/vn#, где # означает номер устройства, которое является произвольным и определяется пользователем. После того, как вы свяжите файл улик с устройством vnode, используя утилиту vnconfig, можете монтировать или анализировать вновь созданный специальный файл так, как это делаете с реальным жестким диском.

    Примечание. Монтирование файловой системы обеспечивает только логическое представление исходной файловой системы. Хотя каждый бит и доступен через устройство loopback, базовая инсталляция операционных систем Unix не имеет никаких инструментальных средств для быстрого просмотра файлов, удаленных из файловой системы.

    Реализация

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

    pseudo-device vn

    Затем ядро должно быть повторно скомпилировано, а машина перезагружена. Вы также можете выполнить команду ./MAKEDEV all в каталоге /dev, чтобы создать файлы устройств.

    Далее показаны опции командной строки для утилиты vnconfig:

    forensic# vnconfig
    usage: vnconfig [-cdeguv] [-s option] [-r option] [-S value] special_file ¬
    [regular_file] [feature]
                vnconfig -a [-cdeguv] [-s option] [-r option] [-f config_file]

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

    forensic# vnconfig /dev/vn0 /mnt/storage/disk.bin
    
    forensic# fdisk /dev/vn0
    
    ******* Working on device /dev/vn0 *******
    parameters extracted from in-core disklabel are:
    cylinders=2495 heads=255 sectors/track=63 (16065 blks/cyl)
    
    Figures below won"t work with BIOS for partitions not in cyl 1
    parameters to be used for BIOS calculations are:
    cylinders=2495 heads=255 sectors/track=63 (16065 blks/cyl)
    
    Media sector size is 512
    Warning: BIOS sector numbering starts with sector 1
    Information from DOS superblock is:
    The data for partition 1 is:
    sysid 12,(DOS or Windows 95 with 32 bit FAT, LBA)
        start 63, size 40082112 (19571 Meg), flag 0
            beg: cyl 0/ head 1/ sector 1;
            end: cyl 1023/ head 254/ sector 63
    The data for partition 2 is:
    <UNUSED>
    The data for partition 3 is:
    <UNUSED>
    The data for partition 4 is:
    <UNUSED>

    После того как файл улик был связан с виртуальным узлом, можно использовать все команды, которые управляют файлами на устройстве. Конечно, вы должны установить профилактические меры для защиты файла улик от модификации. Самая простая мера заключается в изменении доступа к файлу улик на статус "только чтение", с помощью команды chmod 400 <имя файла> перед тем, как он будет связан с виртуальным узлом.

    Следующая команда демонстрирует монтирование копии исходного носителя, управляемого системой Window, в системе FreeBSD:

    forensic# mount -t msdos -o ro /dev/vn0s1 /mnt/evidence
    forensic# ls /mnt/evidence

    md5sum и md5: ратификация собранных улик

    После того как вы собрали улики, используя любое из средств, предложенных в этой лекции, необходимо предусмотреть механизм проверки их законности, действующий в любое время. Если законность улик не заслуживает доверия, все усилия по их анализу и сбору могут рассматриваться как пустые траты. Поэтому, применяя принятую в промышленности контрольную сумму MD5 в качестве инструмента для снятия цифровых "отпечатков пальцев" для собранных улик, вы можете гарантировать, что данные, собранные несколько лет назад, в точности совпадают с версией, представленной в суде.

    Инструмент md5sumMD5 ) поставляется с большинством операционных систем Unix, имеющих открытые исходные коды. Для системы Windows набор инструментальных средств Cygwin содержит исполняемый файл md5sum (см. лекцию "Cygwin").

    Реализация

    Инструмент, предназначенный для вычисления контрольной суммы MD5 файла в системе Linux, называется md5sum и обычно поставляется с большинством дистрибутивов Linux. Опции для утилиты md5sum таковы:

    forensic# md5sum -справка
    
    Использование: md5sum [ОПЦИЯ] [ФАЙЛ]...
                Или: md5sum [ОПЦИЯ] --проверка [ФАЙЛ]
    Напечатать или проверить контрольные суммы MD5 (128 битовые).
    Если ФАЙЛ отсутствует, или если ФАЙЛ задан как "-", следует стандартный ввод.
        -b, --binary    читает файлы в двоичном режиме (в системах DOS/Windows
    	                задано по умолчанию)
        -c, --check     проверяет суммы MD5 в соответствии с заданным списком
        -t, --text      читает файлы в текстовом режиме 
                        (задано по умолчанию)
    Следующий две опции полезны только при проверке контрольных сумм:
        --status        ничего не выводится, код состояния показывает success (успех)
        -w, --warn      предупреждает о неверно отформатированных строках 
                        контрольной суммы
    
        --help          отображает эту справку и выходит
        --version       выводит информацию о версии и выходит

    Вы вызываете инструмент, задавая один параметр - файл, контрольная сумма которого будет рассчитана. Для судебных целей, все контрольные суммы MD5 будут рассчитываться в двоичном режиме. Следовательно, вы всегда должны использовать ключ -b.

    Ниже продемонстрировано вычисление контрольной суммы MD5 для нескольких файлов улик, которые мы скопировали:

    forensic# ls
    disk.1.bin disk.2.bin disk.3.bin disk.4.bin
    
    forensic# md5sum -b * md5sums.txt

    После получения списка файлов из файла контрольной суммы MD5, ратификация их проста. Ее можно выполнить, указав ключ -c и файл контрольной суммы MD5.

    forensic# md5sum -c md5sums.txt
    disk.1.bin: OK
    disk.2.bin: OK
    disk.3.bin: OK
    disk.4.bin: OK

    Если хотя бы 1 бит файла улик изменен, будет выведено сообщение о несовпадении контрольных сумм. Мы открыли двоичный редактор и заменили первый бит с 1 на 0 в файле disk.4.bin. Если мы сравним контрольные суммы MD5 с помощью утилиты md5sum, то получим следующие результаты:

    forensic# md5sum -c md5sums.txt
    disk.1.bin: OK
    disk.2.bin: OK
    disk.3.bin: OK
    disk.4.bin: FAILED
    md5sum: WARNING: 1 of 4 computed checksums did NOT match

    Инструмент md5sum может вычислять контрольную сумму MD5 целых жестких дисков в операционных системах Unix. Это возможно благодаря тому, что система Unix обрабатывает жесткие диски, как специальные файлы, и утилита md5sum не замечает никаких различий. Вскоре мы продемонстрируем, как сравнить контрольную сумму MD5 исходного жесткого диска с контрольной суммой файла улик, полученного в результате судебного дублирования.

    Примечание. Важно отметить, что утилита md5sum была перенесена на операционную систему Windows. md5sum является частью расширенного дистрибутива Cygwin, который вы изучили в лекции "Cygwin". В Windows-версии все опции и ключи точно такие же, как и в версии Linux. Единственное различие, которое мы заметили при выполнении, состоит в том, что версия Windows не всегда подразумевает ключ -b, и именно поэтому мы рекомендуем, чтобы вы привыкли указывать его явно.

    В системе FreeBSD инструмент расчета контрольной суммы MD5 называется MD5. Он является частью базовой операционной системы и работает подобно своим аналогам для Windows и Linux. Применение MD5 следующее:

    forensic# md5 <имя файла>

    Обратите внимание, что инструмент MD5 намного проще, чем его аналог для системы Linux, и вы не должны явно указывать использование двоичного режима. Следующая команда демонстрирует использование утилиты MD5 с файлом улик, собранном в процессе судебного дублирования. Кроме того, контрольная сумма MD5 скопированного исходного жесткого диска совпадает с созданным файлом улик.

    forensic# md5 /dev/ad0
    MD5 (/dev/ad0) = aa935fb10922184c9c2a8423a1f4e56c
    
    forensic# md5/mnt/storage/disk.bin
    MD5 (/mnt/storage/disk.bin) = aa935fb10922184c9c2a8423a1f4e56c

    Пример из жизни. Похищение секретов

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

    Охранник на первом этаже производил обычный обыск служащих, входящих в здание и покидающих его. Доктор Стив Хансен скрыл стандартную дискету внутри полого отделения своей обуви в надежде, что охрана его не поймает. Чиновники вашей компании поручают вам выполнить начальное расследование этого инцидента, и просят проявить большую осторожность, чтобы собрать данные в юридически значимой манере на случай, если они решат преследовать доктора Хансена по закону. Вооружившись инструментальными средствами, рассмотренными в этом разделе, вы имеете достаточно ресурсов для определения того, были ли данные, находящиеся на диске доктора Хансена, специально запрещены для распространения политикой вашей компании, и надо ли квалифицировать в соответствии с американскими законами вынос этих данных, как воровство торговых секретов.

    dd. Первое, что вы должны сделать, - это перекинуть защелку на дискете в положение "только для чтения". Это предотвратит, на некотором уровне, изменение содержания диска. Затем вы включаете свой компьютер, чтобы выполнить судебное дублирование исходного носителя информации (дискета). Чтобы запросить дисковод для гибких дисков, вы набираете в командной строке следующую команду.

    forensic# dd if=/dev/fd0 of=/mnt/storage/dr_hansen_floppy.bin ¬
    conv=notrunc,noerror,sync
    2880+0 records in
    2880+0 records out

    Вы не столкнулись ни с какими ошибками в своем судебном дублировании, потому что количество записей ввода и вывода одинаковы.

    Затем вам нужно смонтировать эту копию в среде Linux и рассмотреть ее содержимое. Вы не можете смонтировать ее непосредственно в виде файла, но можете использовать локальную функцию loopback в пределах Linux, чтобы преобразовать копию в специальный файл устройства. После того как копия преобразована в файл устройства, вы можете монтировать ее и рассматривать логические, восстановленные файлы. Зная, что доктор Хансен - не самый находчивый в мире пользователь, вы полагаетесь на то, что он вряд ли скрыл данные таким сложным способом, что вам потребуется выполнять анализ данных на физическом уровне. Чтобы анализировать логические данные, наберите следующие команды:

    forensic# losetup /dev/loop0 /mnt/storage/dr_hansen_floppy.bin
    
    forensic# mount -r /dev/loop0 /mnt/evidence
    
    forensic# ls -al /mnt/evidence
    total 30
    
    drwxr-xr-x      2   root    root    7168    Dec 31  1969    .   
    drwxr-xr-x      4   root    root    4096    Apr 9   09:52   ..  
    -rwxr-xr-x      1   root    root    19456   Apr 25  2002    Secret Formula.doc

    После открытия файла Secret Formula.doc в своем любимом редакторе вы обнаруживаете, что там действительно находится формула нового лекарства от мужского облысения, которое только что разработала ваша компания. Боссы были поражены вашими способностями криминалиста и подарили вам пожизненное право на бесплатное приобретение любого разработанного ими лекарства. Прекрасный финал!

    md5sum и md5. Вы помните, что после создания судебной копии необходимо сгенерировать контрольную сумму MD5 и для содержимого дискеты и для файла улик:

    forensic# md5sum -b /dev/fd0
    e9a4ee253a4537886a59a7973241bf20    */dev/fd0
    
    forensic# md5sum -b floppy.bin
    e9a4ee253a4537886a59a7973241bf20    *dr_hansen_floppy.bin

    Замечательно! Полученное вами изображение является точной побитовой копией исходного гибкого диска.

    Эта команда дана последней, чтобы печатная версия данной истории отражала последовательность обсуждения инструментальных средств, приводящуюся в этой лекции. Однако, на самом деле, вам следует выполнить первую команду md5sum непосредственно перед тем, как выполнять дублирование дискеты, а вторую команду md5sum сразу же после окончания дублирования.

    Страницы:

    В лекции "Коммерческие наборы инструментов для судебного дублирования" было рассмотрено несколько наборов инструментов, выполняющих судебное дублирование, которые распространяются на коммерческой основе. Набор инструментов, обсуждаемый в этой лекции, может быть собран бесплатно. За короткое время вы можете легко им овладеть.

    В связи с быстрым распространением операционных систем с открытым исходным кодом, типа Linux, OpenBSD, NetBSD и FreeBSD, широкой публике стал доступен целый набор инструментальных средств (и исходных текстов), которого прежде никогда не было. Многие из общих системных инструментальных средств администрирования типа dd, losetup, vnconfig и md5sum могут использоваться для расследования инцидентов так же эффективно, как их коммерческие аналоги.

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

    Аналогично обсуждавшейся в предыдущей лекции необходимости в надежной загрузочной дискете (или компакт-диске), судебное дублирование с некоммерческим программным обеспечением предъявляет те же самые требования. Поскольку Linux - операционная система с открытым исходным кодом, было создано много успешных разработок, заставивших Linux выполняться с компакт-дисков или дискет без обращения к жесткому диску. Мы предлагаем вам испробовать систему Trinux, которая распространяется как система Linux, предназначенная для работы с компакт-диска. Операционную систему Trinux можно исследовать на сайте http://trinux.sourceforge.net. Кроме того, аналогичный вариант системы FreeBSD предлагается на сайте http://sourceforge.net/projects/freebsdtogo/ и имеет подходящее название: FreeBSD To Go (передвижная FreeBSD).

    На приведенной схеме этапов расследования мы все еще находимся на стадии судебного дублирования.

    dd: инструмент судебного дублирования

    Инструмент dd используется для побитного копирования одного файла в другой. Копирование битов таким способом является основой всех инструментальных средств судебного дублирования. Инструмент dd универсален, а его исходный текст доступен публике. Кроме того, dd может компилироваться на почти любой платформе Unix. В этом разделе обсуждаются методы, которые может реализовать инструмент dd для выполнения судебного дублирования.

    Инструмент .

    Реализация

    Опции командной строки утилиты dd, подходящие для судебного дублирования, следующие.

  • if. Указывает входной файл, который нужно читать.
  • of. Указывает выходной файл, в который будет сделан вывод.
  • bs. Указывает размер блока в байтах, для чтения и записи.
  • count. Указывает число блоков, предназначенных для копирования из входного файла в файл вывода.
  • skip. Указывает число блоков от начала, которые должны быть пропущены, перед чтением из входного файла.
  • conv. Позволяет задавать дополнительные параметры, некоторые из которых следующие:
  • notrunc. Не позволит оборвать вывод в случае ошибки;
  • noerror. Не будет прекращать чтение входного файла в случае ошибки (то есть, если были считаны запорченные блоки, процесс будет продолжаться).
  • sync. Заполнит соответствующие биты вывода нулями, если возникнет ошибка ввода. Это происходит только в том случае, если опция используется вместе с опцией notrunc.
  • Очевидно, что dd работает с файлами, а не непосредственно на физических устройствах. Однако операционные системы Unix с открытыми исходными кодами, типа Linux и FreeBSD, реализуют устройства, как файлы. Эти специальные файлы, расположенные в каталоге /dev, разрешают прямой доступ к устройствам через операционную систему. Следовательно, входными файлами в dd могут быть целые жесткие диски, разделы жестких дисков или другие устройства. При создании судебной копии жесткого диска входным файлом будет файл устройства жесткого диска (то есть, /dev/hdb в Linux или /dev/ad1 в FreeBSD). При создании судебной копии отдельного раздела, входной файл будет файлом устройства раздела (то есть, /dev/hdb1 в Linux или /dev/ad1s1 в FreeBSD).

    Естественно, далее надо рассмотреть адресата для дублирования. Адресатом может быть другой жесткий диск (с использованием упомянутых файловых устройств), который называется побитовой копией исходного жесткого диска. Можно расширить эту идею за пределы использования жестких дисков в качестве носителя информации адресата и использовать вместо дисков накопитель на магнитной ленте, хотя это и более медленный метод. Адресатом может быть также обычный файл (обозначаемый так же, как файл улик), сохраненный в любой файловой системе, как логический файл. Это обычный способ хранения наиболее современных судебных копий, из-за легкости манипуляций при перемещении файла улик между устройствами памяти. Наконец, адресатом может быть стандартный вывод (то есть вывод на дисплей). Хотя здесь мы не можем ничего делать с данными, выводимыми непосредственно на экран (стандартная команда out), далее в этом разделе мы исследуем метод дублирования, который полагается на стандартный вывод.

    Все три из этих адресатов вывода успешно использовались в прошлом по той или иной причине при создании судебной копии. Тип (также известный как метод) дублирования обычно диктуется проблемами, с которыми сталкиваются в процессе попытки дублирования, и которые часто не зависят от следователя. Например, если невозможно удалить жесткий диск из исходного компьютера во время дублирования, и не доступны никакие другие соединители для подключения дополнительного жесткого диска, было бы трудно скопировать содержание жесткого диска непосредственно на другой жесткий диск. Точно так же вы не могли бы сохранить копию в обычном файле, потому что это означало бы копирование на средства информации, уже находящиеся в исходном компьютере, то есть запись поверх потенциальных улик. Единственным вариантом в таком случае стало бы отображение по сети, что будет рассмотрено в следующих разделах.

    Множество опций утилиты dd помогут сделать судебное дублирование более эффективным. Например, вы можете управлять размером блока, который будет копироваться, чтобы ускорить процесс для хоста, на котором выполняется dd ; ключ bs обычно устанавливается на 1Кб или 1Мб. Другая опция, которую вы должны использовать - это ключ conv, позволяющий дополнительным (необязательным) параметрам управлять процессом копирования. Параметры noerror и notrunc представляют две особо рекомендуемые опции. Эти ключи позволят игнорировать случаи чтения плохих блоков с исходных носителей, так что копирование продолжится, не обрывая вывод улик. Дополнительная опция sync, используемая с noerror, будет вызывать преобразование плохих блоков из ввода в нули в выводе.

    Примечание. При дублировании компакт-диска убедитесь, что использованный размер блока кратен 2048 байтам.

    Хорошей практикой при выполнении судебного дублирования является создание файла регистрации, чтобы вы могли обращаться к нему в будущем или сделать его доступным для судебных слушаний. Команда script системы Unix позволит перехватить ввод и вывод на консоль Unix или в сеансе xterm и сохранить его в файле. Также желательно выполнение следующей команды перед запуском дублирования. После окончания дублирования наберите exit.

    forensic# script /root/disk.bin.duplication
    Внимание. В следующих разделах будет продемонстрировано выполнение судебного дублирования как на судебном компьютере (компьютер адресата) так и исходной машине (компьютере-жертве), а также дублирование по сети. При сохранении файла сценария не сохраняйте его на том носителе, который вы дублируете, так как это уничтожит часть улик. Поскольку этот файл не велик, лучше сохранить его на гибком диске, если его нельзя сохранить в логической файловой системе на жестком диске адресата.

    Судебное дублирование #1: точное двоичное дублирование жестких дисков

    Чтобы создать зеркальную копию изображения жесткого диска, используя dd, вы должны сообщить утилите, какой исходный жесткий диск будет входным файлом, а какой - выходным (файл улик), на котором вы будете хранить изображение.

    Вы можете определить, какой жесткий диск является источником, а какой адресатом, изучая вывод команды dmesg. И в системе Linux и в FreeBSD команда dmesg выводит информацию на консоль во время загрузки машины (и любые другие сообщения консоли, которые появляются после загрузки). Определить, "кто есть кто" среди жестких дисков не сложно; скорее, вы захотите подключиться к жесткому диску-хранилищу, созданному другим изготовителем, нежели к исходному жесткому диску, и тогда станет очевидно, какой из дисков является источником, а какой адресатом. После того как вы очистили жесткий диск адресата в /dev/hdd (это обсуждается позже в разделе "dd: инструмент очистки жесткого диска"), можно использовать следующий синтаксис для создания судебной копии исходного жесткого диска, подключенного к /dev/hdc в Linux.

    forensic# dd, if =/dev/hdc =/dev/hdd bs=1024 conv=noerror, notrunc, sync
    Внимание. Этот процесс способен удалять все данные, структуры файловых систем и не распределенное пространство с вашего исходного диска. Будьте очень осторожны при назначении источника и адресатов в команде dd.

    Судебное дублирование #2: создание локального файла улик

    В первом методе мы обработали побитовую копию с исходного жесткого диска и расположили ее поверх жесткого диска адресата. Используя этот метод, мы не можем просто скопировать улики с одного носителя на другой. Метод, который способствует более простому управлению уликами, заключается в создании логического файла, который является побитовым представлением исходного жесткого диска. Очевидно, что никогда не следует сохранять файл улик на исходном жестком диске, так как мы можем уничтожить улики. Следующая команда демонстрирует создание судебной копии исходного жесткого диска, подключенного к /dev/hdc, в обыкновенный файл, расположенный в каталоге /mnt/storage/disk.bin в системе Linux.

    Внимание. Этот процесс способен удалять все данные, структуры файловых систем и не распределенное пространство с вашего исходного диска. Будьте очень осторожны при назначении источника и адресата в команде dd.
    forensic# dd, if =/dev/hdc =/mnt/storage/disk.bin bs=1024 
      conv=noerror,notrunc,sync

    Процесс создания копии в других разновидностях операционных систем Unix подобен показанному выше. Единственное различие состоит в указании правильного имени файла устройства для ввода. Следующая команда демонстрирует дублирование исходного жесткого диска системы Windows 98 в системе FreeBSD. Исходный диск связан с /dev/ad0, а результатом является файл улик, расположенный в каталоге /mnt/storage/disk.bin.

    forensic# dd if=/dev/ad0 of=/mnt/storage/disk.bin bs=1024 
      conv=notrunc,noerror,sync
    
    
    20044080+0 records in
    20044080+0 records out
    20525137920 bytes transferred in 5665.925325 secs 
      (3622557 bytes/sec)
    
    forensic# cd /mnt/storage
    
    forensic# ls -al
    total 20048997
    drwxr-xr-x      2   root    wheel           512 Jan 15 13:30    .   
    drwxr-xr-x      7   root    wheel           512 Jan 15 11:58    ..  
    -rw-r--r--      1   root    wheel       20525237920 Jan 15 13:30    disk.bin
    Внимание. У некоторых файловых систем есть ограничения на размер файла. Например, более старые файловые системы способны поддерживать только 2-гигабайтные файлы, тогда как файлы в более новых файловых системах могут быть больше. Не забудьте проверить ограничения файловой системы вашего адресата прежде, чем начать отображение.

    В предыдущем примере, если бы в процессе дублирования произошла ошибка, число входящих записей ( in ) не соответствовало бы числу выходящих записей ( out ). Например, если бы существовал один плохой блок, вывод команды dd выглядел бы так:

    forensic# dd if=/dev/ad0 of =/mnt/storage/disk.bin bs=1024 
      conv=notrunc, noerror
    
    20044079+1 records in
    20044080+0 records out

    Здесь поле +1 указывает количество записей, которые читались, но имели ошибки. Поскольку мы задали параметры conv=notrunc, noerror, sync, в случае ошибки утилита dd дополнит соответствующий блок в выводе нулями. Так как размер блока равен 1024 бита (указан с помощью параметра bs), это значит, что в нашей судебной копии 1024 байта данных не надежны. Если бы мы вычислили контрольную сумму MD5 для /dev/ad0 и /mnt/storage/disk.bin, весьма вероятно, что эти два файла не соответствовали бы друг другу. Короче говоря, такой вывод является причиной того, что нам требуется выполнить команду script, чтобы задокументировать эту ошибку в своем отчете о расследовании.

    Иногда следователь создает много файлов улик для единственного исходного жесткого диска или раздела. Обычно это происходит тогда, когда следователь хочет, чтобы файлы улик были достаточно маленькими и могли поместиться на архивном компакт-диске, или когда файловая система хоста не поддерживает файлы большого размера. Такого рода проблема может быть решена с помощью комбинации ключей skip и count. Ключ skip задает позицию во входном файле, с которой утилита dd начнет копирование. Ключ count задает количество блоков, обозначенных ключом bs, которые утилита dd будет читать из исходного входного файла. Поэтому, при выполнении комбинации команд dd с увеличивающимся значением ключей skip и count будет создано несколько выходных файлов вывода, как можно видеть ниже.

    forensic# dd if=/dev/hdc of=/mnt/storage/disk.1.bin 
      bs=1M skip=0 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.2.bin 
      bs=1M skip=621 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.3.bin 
      bs=1M skip=1241 count=620 ¬ 
    conv=noerror,notrunc,sync
    forensic# dd if=/dev/hdc of=/mnt/storage/disk.4.bin 
      bs=1M skip=1861 count=620 ¬ 
    conv=noerror,notrunc,sync
    Внимание. Если вы используете эти команды, то, вероятно, делите большую копию на несколько меньших частей для архивирования (на компакт-диске или другом носителе). Не забудьте проверить с помощью контрольной суммы MD5 (обсуждаемой ниже в этой лекции) комбинацию отдельных файлов после передачи их с одного носителя информации на другой.

    Когда вам требуется снова собрать отдельные части копий, которые представляют исходный жесткий диск, для их анализа, используйте следующую команду.

    forensic# cat disk.1.bin disk.2.bin disk.3.bin disk.4.bin 
      disk.whole.bin

    И, наконец, вы можете ускорить процесс дублирования, изменяя размер блока. Поскольку секторы на диске занимают 512 байтов, то вы можете ускорить время чтения и записи, увеличив размер блока с помощью ключа bs. Следующая команда демонстрирует, как был ускорен процесс дублирования части внешнего жесткого диска в системе FreeBSD.

    freebsd# /usr/bin/time -h dd if=/dev/ad0 of=test.bin bs=512 count=200000 ¬ conv=notrunc,noerror,sync

    200000+0 records in
    200000+0 records out
    102400000 bytes transferred in 69.452716 secs (1474384 bytes/sec)
            1m9.51s real        0.28s user      8.46s sys

    forensic# /usr/bin/time -h dd if=/dev/ad0 of=test.bin bs=1024 count=100000 ¬ conv=notrunc,noerror,sync

    100000+0 records in
    100000+0 records out
    102400000 bytes transferred in 41.785020 secs (2450639 bytes/sec)
            41.79s real     0.20s user      4.42s sys

    Возможно, вы не знакомы с командой time, которая просто помещает в вашу команду секундомер. В этом примере, команда time фиксирует продолжительность процесса дублирования от начала до конца и выдает реальное пользовательское и системное время. Заметьте, что реальное время уменьшилось, когда мы увеличили размер блока с 512 до 1024. Это произошло потому, что компьютер более эффективно читает (и пишет) за раз 1024 байта, чем 512 (для файла одного и того же размера). Предыдущими командами было скопировано только около 100Мб информации. Представьте себе эффективность копирования 80-гигабайтного жесткого диска при увеличении размера блока! Конечно, в какой-то момент вы почувствуете уменьшение отдачи и, возможно, захотите поэкспериментировать со своей аппаратурой и определить, что больше подходит для вашего конкретного случая.

    Судебное дублирование #3: создание файла улик на удаленной системе

    Если других вариантов нет, судебная копия может быть передана на отдельный компьютер целиком. Это можно сделать, переадресовывая стандартный вывод команды dd через Netcat (или Cryptcat) на другую машину, связанную TCP/IP-сетью. (Обсуждения Netcat или Cryptcat см. в лекции "NETCAT и CRYPTCAT").

    Исходная машина, содержащая отображаемый носитель информации, должна быть загружена с надежной дискеты или компакт-диска системой Linux или FreeBSD. Создание надежной дискеты или компакт-диска не должно отнять у вас много времени и сил, поскольку выполнению такой задачи были посвящены целые проекты. Один из примеров - система Trinux, которую вы можете найти на сайте http://trinux.sourceforge.net и решить, подходит ли она вам. Чтобы все было согласовано, компьютер адресата должен быть загружен системой Unix. После этого судебное дублирование по сети может быть выполнено простыми командами.

    Примечание. На судебный компьютер операционную систему Unix загружать не обязательно. Компьютер адресата может иметь операционную систему Windows.

    На рабочей станции адресата выполните следующую команду:

    forensic# nc-l-p 2222 > /mnt/storage/disk.bin

    Для передачи судебной копии используйте утилиту Cryptcat. У Cryptcat есть два преимущества по сравнению с утилитой Netcat: проверка правильности и секретность. Поскольку данные на исходной машине зашифрованы, расшифровка их на компьютере адресата должна давать побитовую копию ввода. Если бы взломщик изменил поток битов в сети, после расшифровки вывод был бы значительно изменен. Кроме того, нападавший не мог перехватить точную копию жесткого диска исходной машины по сети с помощью анализатора сетевого потока (sniffer) типа tcpdump или Ethereal (см. лекцию "Анализаторы сетевых потоков"). Если бы он мог получить копию, то смог бы обойти и любые локальные меры защиты и исследовать все файлы так же, как судебный аналитик!

    На исходной машине выполните следующую команду (судебный компьютер использует IP-адрес 192.168.1.1):

    source# dd if=/dev/hdc bs=1024 conv=noerror,notrunc,sync | 
      nc 192.168.1.1 2222

    dd: инструмент очистки жесткого диска

    Иногда по финансовым соображениям вам может потребоваться повторно использовать жесткие диски для сбора улик с других исходных носителей из других инцидентов. Поэтому жесткий диск-хранилище должен быть свободен от артефактов, оставшихся от предыдущих копий. Наихудший сценарий, с которым может столкнуться следователь, состоит в доказательстве виновности невинного индивидуума на основе артефактов, оставшихся от предыдущего расследования! Это - то место, где утилита dd опять может спасти положение, очистив носитель с уликами перед его повторным использованием.

    Реализация

    В операционной системе Unix с открытым исходным кодом, типа Linux и FreeBSD, есть специальный файл, названный подходящим именем /dev/zero, который при его прочтении возвращает неограниченное количество нулей. Если вы используете этот файл как ввод, а носитель информации с уликами, как вывод, то вы запишете нули на носитель с уликами. Когда на весь диск с уликами записаны нули, он считается очищенным перед его последующим использованием.

    Внимание. Этот процесс удаляет все данные, структуры файловых систем и не распределенное пространство диска. Будьте очень осторожны при назначении источника и адресата, используя команду dd.

    Следующая команда демонстрирует, как бы вы чистили диск с уликами, подключенный к логическому устройству /dev/hdb в системе Linux.

    forensic# dd if=/dev/zero of =/dev/hdb

    Чтобы выполнить такую же очистку на платформе FreeBSD, вам надо изменить of или выходящий файл на правильное имя устройства жесткого диска, как показано ниже.

    forensic# dd if=/dev/zero of =/dev/ad1

    Если вы сомневаетесь, что эта команда обнулит жесткий диск адресата, используйте средства просмотра файлов в шестнадцатеричном формате, которые будут обсуждаться в "Средства просмотра файлов и редакторы общего назначения" (hexdump, hexedit, xvi32:), чтобы просмотреть жесткий диск и убедиться, что он содержит нули. Дополнительно можно использовать флаги grep и -v с критериями поиска 0. По флагу -v при просмотре соответствующего жесткого диска будет идти поиск всего ненулевого, и выдаваться сообщение об этом. Если вы не получите соответствующих сообщений, следовательно жесткий диск содержит одни нули.

    losetup: преобразование обыкновенного файла в устройство в системе Linux

    Как правило, следователь предпочитает создание обычного файла, который содержит судебную копию, выполненную с помощью утилиты dd. С помощью только этого файла трудно просматривать логические файлы, которые существовали на первоначальном исходном жестком диске. Поэтому, этот обычный файл должен быть преобразован в специальный файл устройства, который эмулирует жесткий диск. Как только обычный файл преобразован в устройство, следователь может анализировать исходную файловую систему точно так же, как оригинальный жесткий диск. Инструмент losetup выполняет это преобразование в системе Linux. ("lo" в названии losetup означает local loopback (локальное закольцовывание) и, следовательно, монтирует обычный файл, так же как это делается с любым жестким диском.)

    Примечание. Монтирование файловой системы обеспечивает только логическое представление исходной файловой системы. Хотя каждый бит все еще доступен через устройство loopback, в базовой инсталляции операционной системы Unix нет никаких инструментальных средств, позволяющих быстро просматривать файлы, удаленные из исходной файловой системы.

    Реализация

    С утилитой losetup используются следующие опции:

    forensic# losetup
    
    Использование:
    losetup loop_device                     # дать информацию
    losetup -d loop_device                  # удалить
    losetup [ -e encryption ] [ -o offset ] loop_device file # установка

    Поскольку в процессе судебного анализа мы не будем использовать никакого кодирования, опции кодирования игнорируются. Это упрощает использование инструмента. Сначала мы определяем файл устройства, который будет связан с файлом улик при судебном дублировании. В системе Linux используются файлы устройств /dev/loop#, где # - число от 0 до 9. (Выбор числа произволен и определяется пользователем.) Чтобы сделать первое loopback -устройство, связанное с файлом улик, лучше всего подойдет следующая командная строка.

    forensic# losetup/dev/loop0/mnt/storage/disk.bin

    Следующая команда демонстрирует команду losetup в действии. Для отображения жесткого диска была использована утилита dd с исходного диска, присоединенного к файлу устройства /dev/hdb, а файл улик был сохранен в каталоге /mnt/storage/disk.bin. Файл был связан с файлом устройства /dev/loop0, используя losetup с нулевым смещением. При анализе диска с помощью утилиты fdisk, получено сообщение, что раздел Windows 98, которым мы интересуемся в расследовании, начинается в логическом секторе 64.

    forensic# if=/dev/hdb of=/mnt/storage/disk.bin conv=notrunc,
      noerror,sync bs=1024
    
    20043922+0 records in
    20043922+0 records out
    
    forensic# losetup /dev/loop0 /mnt/storage/disk.bin
    
    forensic# fdisk -l /dev/loop0
    
    Disk /dev/loop0: 1 heads, 40087844 sectors, 1 cylinders
    Units = cylinders of 40087844 * 512 bytes
    
        Device      Boot        Start   End Blocks  Id  System  
    /dev/loop0p1        *   1   1   20041056    c   Win95 FAT32 (LBA)
    Partition 1 has different physical/logical beginnings (non-Linux?):
        phys=(0, 1, 1) logical=(0, 0, 64)
    Partition 1 has different physical/logical endings:
        phys=(1023, 254, 63) logical=(0, 0, 40082175)
    Partition 1 does not end on cylinder boundary:
        phys=(1023, 254, 63) should be (1023, 0, 40087844)

    Чтобы смонтировать раздел Windows, мы должны использовать смещение, равное 32256, которое получается в результате умножения 63 секторов на 512 байтов, содержащихся в каждом секторе. При выполнении команды losetup смещение указывается опцией -o. Следующая запись демонстрирует задание правильного смещения, а затем монтирование и просмотр содержимого файла улик /mnt/storage/disk.bin в каталоге

    /mnt/evidence (конечно, вначале должен быть создан каталог /
      mnt/evidence!).
    forensic# losetup -o 32256 /dev/loop0 /mnt/storage/disk.bin
    forensic# mount -o ro /dev/loop0 /mnt/evidence
    forensic# ls /mnt/evidence

    После того, как изображение улик было смонтировано в состояние, предназначенное только для чтения, его можно проанализировать так же, как если бы был вставлен оригинальный исходный носитель без возможности разрушения свидетельской ценности оригинала. В сценарии, который рассмотрен в предыдущем выводе, доступ к файлу /mnt/storage/disk.bin был изменен на доступ, предназначенный только для чтения с помощью команды chmod с разрешениями 400. Кроме того, еще один метод оградить файл от изменения во время монтирования состоит в использовании с командой mount опции "только чтение" -o ro.

    Примечание. В данном случае мы смонтировали содержимое, как обыкновенную файловую систему. После того, как обычный файл связан с устройством loopback, все команды, оперирующие с файлами и устройствами, будут работать на специальном устройстве (/dev/loop0), которое связано с изображением.

    Усовершенствованное устройство loopback в системе Linux

    В последней секции, чтобы получить доступ к разделу, мы должны были изменить смещение с помощью losetup, потому что устройства loopback не распознают таблиц разделов. При монтировании файловой системы на устройствах loopback процесс угадывания, где начинается раздел, может оказаться утомительным и ненужным. К счастью, NASA разработало новое усовершенствованное loopback -устройство для решения проблемы смещения, и это значительно облегчает процесс судебного анализа.

    На момент написания этой книги усовершенствованное устройство loopback не было связано с каким-либо дистрибутивом Linux, но его можно было найти на общедоступном FTP-сервере, расположенном на ftp://ftp.hq.nasa.gov/pub/ig/ccd/enhanced_loo pback/. Необходимо выполнить две установки, чтобы получить усовершенствованные функциональные возможности. Одна установка обновит ядро на модифицированное, а другая добавит инструментальные средства, необходимые для использования дополнительных возможностей, которые может предоставить новое ядро.

    Реализация

    Сначала отредактируйте свой файл lilo.conf, который определяет, что будет загружено после запуска системы. Отредактируйте текущий файл lilo.conf, подражая следующему файлу, полученному из системы RedHat Linux 7.2.

    Примечание. Возможно, что к моменту издания этой книги NASA выпустит более новую версию своего усовершенствованного устройства loopback. Если это так, то вы должны изменить соответствующим образом номера версий в этом примере, чтобы заставить его работать в вашем конкретном случае.
    prompt
    timeout=50
    default=linux
    boot=/dev/hda
    map=/boot/map
    install=/boot/boot.b
    message=/boot/message
    linear
    
    image=  /boot/vmlinuz-2.4.7-10
            label=linux
            initrd=/boot/initrd-2.4.7-10.imp
            read-only
            root=/dev/hda2
    
    image=  /boot/vmlinuz-2.4.17-xfs-enhanced_loop
            label=linux_enhanced
            root=/dev/hda2
    Примечание. Выражения, записанные жирным шрифтом, должны быть изменены в зависимости от дистрибутива Linux, который вы используете. В данном случае корневой раздел был присоединен к устройству

    /dev/hda2, но оно может быть иным для вашего конкретного судебного компьютера. Кроме того, описываемый здесь процесс работает в системе RedHat Linux 7.2. Установка нового ядра может происходить по разному для разных дистрибутивов Linux, поэтому вам, вероятно, придется почитать документацию, сопровождающую ваш конкретный дистрибутив системы Linux.

    Чтобы установить усовершенствованное ядро loopback, загрузите и извлеките его в каталог, используя утилиту tar. Следующая командная строка извлекает исходный код ядра системы.

    forensic# tar xzvf linux-2.4.17-xfs-enhanced.tar.gz-C/usr/src

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

    forensic# cd /usr/src/inux-2.4.17-xfs-enhanced_loop
    forensic# make menuconfig
    forensic# make dep
    forensic# make clean
    forensic# make bzImage
    forensic# make modules
    forensic# make modules_install
    forensic# cd arch/i386/boot
    forensic# cp bzImage /boot/vmlinuz-2.4.17-xfs-enhanced_loop
    forensic# lilo -v

    После установки ядра необходимо установить двоичные файлы набора инструментов loopback, используя следующую командную строку:

    forensic# rpm -ivh --force loop-utils-0.0.1-1.i386.rpm

    Теперь перезагрузите систему и не забудьте выбрать новое ядро, набрав linux_enhanced в строке приглашения начальной загрузки LILO, иначе вы перезагрузите ваше старое ядро. Когда машина перезагрузится, войдите в систему с привилегированными правами (root). Теперь вы запустите усовершенствованное ядро (что вы, вероятно, наблюдали во время входа в систему).

    После установки комплекта инструментальных средств loopback начинается реальное волшебство. С тем же самым файлом улик, который использовался в предыдущем разделе (disk.bin), вы можете смонтировать исходные данные, найденные в разделе Windows 98, используя утилиту losetup тем же самым способом, но без смещения. Дополнительный флаг -r к утилите losetup позволяет сделать файл улик доступным только для чтения, что всегда является хорошей мерой безопасности. После того как файл улик был связан с файлом устройства /dev/loop0, наберите в командном приглашении dmesg, чтобы отобразить разделы, найденные в файле улик. Просто смонтируйте раздел так, как бы вы сделали это на любом физическом жестком диске. В этом сценарии разделы начинают заполнять другие зацикленные ( loop ) устройства с увеличивающимися второстепенными номерами файлов устройств. Например, первый раздел теперь будет называться /dev/loop1, второй -/dev/loop2, и так далее. Процесс показан ниже.

    forensic# losetup /dev/loop0 /mnt/storage/disk.bin
    forensic# mount -o ro /dev/loop0 /mnt/evidence
    forensic# ls /mnt/evidence

    Следующие команды нарушат связи, созданные предыдущими командами:

    forensic# cd /mnt/storage
    forensic# umount/mnt/evidence
    forensic# losetup-d /dev/loop0
    Внимание. Добавим одно пояснение к использованию команды losetup -d. Работать необходимо в том же самом каталоге, где находится файл disk.bin, иначе произойдет ошибка.

    vnode: преобразование обычного файла в устройство системы FreeBSD

    Так же, как утилита losetup позволяет преобразовывать файл улик, созданный в результате судебного дублирования, в устройство, приспособленное для анализа, так и функция vnode системы FreeBSD позволяет выполнить ту же самую задачу. Устройство vnode в системе FreeBSD связывает обыкновенный файл с абстрактным устройством, обозначенным, как /dev/vn#, где # означает номер устройства, которое является произвольным и определяется пользователем. После того, как вы свяжите файл улик с устройством vnode, используя утилиту vnconfig, можете монтировать или анализировать вновь созданный специальный файл так, как это делаете с реальным жестким диском.

    Примечание. Монтирование файловой системы обеспечивает только логическое представление исходной файловой системы. Хотя каждый бит и доступен через устройство loopback, базовая инсталляция операционных систем Unix не имеет никаких инструментальных средств для быстрого просмотра файлов, удаленных из файловой системы.

    Реализация

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

    pseudo-device vn

    Затем ядро должно быть повторно скомпилировано, а машина перезагружена. Вы также можете выполнить команду ./MAKEDEV all в каталоге /dev, чтобы создать файлы устройств.

    Далее показаны опции командной строки для утилиты vnconfig:

    forensic# vnconfig
    usage: vnconfig [-cdeguv] [-s option] [-r option] [-S value] special_file ¬
    [regular_file] [feature]
                vnconfig -a [-cdeguv] [-s option] [-r option] [-f config_file]

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

    forensic# vnconfig /dev/vn0 /mnt/storage/disk.bin
    
    forensic# fdisk /dev/vn0
    
    ******* Working on device /dev/vn0 *******
    parameters extracted from in-core disklabel are:
    cylinders=2495 heads=255 sectors/track=63 (16065 blks/cyl)
    
    Figures below won"t work with BIOS for partitions not in cyl 1
    parameters to be used for BIOS calculations are:
    cylinders=2495 heads=255 sectors/track=63 (16065 blks/cyl)
    
    Media sector size is 512
    Warning: BIOS sector numbering starts with sector 1
    Information from DOS superblock is:
    The data for partition 1 is:
    sysid 12,(DOS or Windows 95 with 32 bit FAT, LBA)
        start 63, size 40082112 (19571 Meg), flag 0
            beg: cyl 0/ head 1/ sector 1;
            end: cyl 1023/ head 254/ sector 63
    The data for partition 2 is:
    <UNUSED>
    The data for partition 3 is:
    <UNUSED>
    The data for partition 4 is:
    <UNUSED>

    После того как файл улик был связан с виртуальным узлом, можно использовать все команды, которые управляют файлами на устройстве. Конечно, вы должны установить профилактические меры для защиты файла улик от модификации. Самая простая мера заключается в изменении доступа к файлу улик на статус "только чтение", с помощью команды chmod 400 <имя файла> перед тем, как он будет связан с виртуальным узлом.

    Следующая команда демонстрирует монтирование копии исходного носителя, управляемого системой Window, в системе FreeBSD:

    forensic# mount -t msdos -o ro /dev/vn0s1 /mnt/evidence
    forensic# ls /mnt/evidence

    md5sum и md5: ратификация собранных улик

    После того как вы собрали улики, используя любое из средств, предложенных в этой лекции, необходимо предусмотреть механизм проверки их законности, действующий в любое время. Если законность улик не заслуживает доверия, все усилия по их анализу и сбору могут рассматриваться как пустые траты. Поэтому, применяя принятую в промышленности контрольную сумму MD5 в качестве инструмента для снятия цифровых "отпечатков пальцев" для собранных улик, вы можете гарантировать, что данные, собранные несколько лет назад, в точности совпадают с версией, представленной в суде.

    Инструмент md5sumMD5 ) поставляется с большинством операционных систем Unix, имеющих открытые исходные коды. Для системы Windows набор инструментальных средств Cygwin содержит исполняемый файл md5sum (см. лекцию "Cygwin").

    Реализация

    Инструмент, предназначенный для вычисления контрольной суммы MD5 файла в системе Linux, называется md5sum и обычно поставляется с большинством дистрибутивов Linux. Опции для утилиты md5sum таковы:

    forensic# md5sum -справка
    
    Использование: md5sum [ОПЦИЯ] [ФАЙЛ]...
                Или: md5sum [ОПЦИЯ] --проверка [ФАЙЛ]
    Напечатать или проверить контрольные суммы MD5 (128 битовые).
    Если ФАЙЛ отсутствует, или если ФАЙЛ задан как "-", следует стандартный ввод.
        -b, --binary    читает файлы в двоичном режиме (в системах DOS/Windows
    	                задано по умолчанию)
        -c, --check     проверяет суммы MD5 в соответствии с заданным списком
        -t, --text      читает файлы в текстовом режиме 
                        (задано по умолчанию)
    Следующий две опции полезны только при проверке контрольных сумм:
        --status        ничего не выводится, код состояния показывает success (успех)
        -w, --warn      предупреждает о неверно отформатированных строках 
                        контрольной суммы
    
        --help          отображает эту справку и выходит
        --version       выводит информацию о версии и выходит

    Вы вызываете инструмент, задавая один параметр - файл, контрольная сумма которого будет рассчитана. Для судебных целей, все контрольные суммы MD5 будут рассчитываться в двоичном режиме. Следовательно, вы всегда должны использовать ключ -b.

    Ниже продемонстрировано вычисление контрольной суммы MD5 для нескольких файлов улик, которые мы скопировали:

    forensic# ls
    disk.1.bin disk.2.bin disk.3.bin disk.4.bin
    
    forensic# md5sum -b * md5sums.txt

    После получения списка файлов из файла контрольной суммы MD5, ратификация их проста. Ее можно выполнить, указав ключ -c и файл контрольной суммы MD5.

    forensic# md5sum -c md5sums.txt
    disk.1.bin: OK
    disk.2.bin: OK
    disk.3.bin: OK
    disk.4.bin: OK

    Если хотя бы 1 бит файла улик изменен, будет выведено сообщение о несовпадении контрольных сумм. Мы открыли двоичный редактор и заменили первый бит с 1 на 0 в файле disk.4.bin. Если мы сравним контрольные суммы MD5 с помощью утилиты md5sum, то получим следующие результаты:

    forensic# md5sum -c md5sums.txt
    disk.1.bin: OK
    disk.2.bin: OK
    disk.3.bin: OK
    disk.4.bin: FAILED
    md5sum: WARNING: 1 of 4 computed checksums did NOT match

    Инструмент md5sum может вычислять контрольную сумму MD5 целых жестких дисков в операционных системах Unix. Это возможно благодаря тому, что система Unix обрабатывает жесткие диски, как специальные файлы, и утилита md5sum не замечает никаких различий. Вскоре мы продемонстрируем, как сравнить контрольную сумму MD5 исходного жесткого диска с контрольной суммой файла улик, полученного в результате судебного дублирования.

    Примечание. Важно отметить, что утилита md5sum была перенесена на операционную систему Windows. md5sum является частью расширенного дистрибутива Cygwin, который вы изучили в лекции "Cygwin". В Windows-версии все опции и ключи точно такие же, как и в версии Linux. Единственное различие, которое мы заметили при выполнении, состоит в том, что версия Windows не всегда подразумевает ключ -b, и именно поэтому мы рекомендуем, чтобы вы привыкли указывать его явно.

    В системе FreeBSD инструмент расчета контрольной суммы MD5 называется MD5. Он является частью базовой операционной системы и работает подобно своим аналогам для Windows и Linux. Применение MD5 следующее:

    forensic# md5 <имя файла>

    Обратите внимание, что инструмент MD5 намного проще, чем его аналог для системы Linux, и вы не должны явно указывать использование двоичного режима. Следующая команда демонстрирует использование утилиты MD5 с файлом улик, собранном в процессе судебного дублирования. Кроме того, контрольная сумма MD5 скопированного исходного жесткого диска совпадает с созданным файлом улик.

    forensic# md5 /dev/ad0
    MD5 (/dev/ad0) = aa935fb10922184c9c2a8423a1f4e56c
    
    forensic# md5/mnt/storage/disk.bin
    MD5 (/mnt/storage/disk.bin) = aa935fb10922184c9c2a8423a1f4e56c

    Пример из жизни. Похищение секретов

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

    Охранник на первом этаже производил обычный обыск служащих, входящих в здание и покидающих его. Доктор Стив Хансен скрыл стандартную дискету внутри полого отделения своей обуви в надежде, что охрана его не поймает. Чиновники вашей компании поручают вам выполнить начальное расследование этого инцидента, и просят проявить большую осторожность, чтобы собрать данные в юридически значимой манере на случай, если они решат преследовать доктора Хансена по закону. Вооружившись инструментальными средствами, рассмотренными в этом разделе, вы имеете достаточно ресурсов для определения того, были ли данные, находящиеся на диске доктора Хансена, специально запрещены для распространения политикой вашей компании, и надо ли квалифицировать в соответствии с американскими законами вынос этих данных, как воровство торговых секретов.

    dd. Первое, что вы должны сделать, - это перекинуть защелку на дискете в положение "только для чтения". Это предотвратит, на некотором уровне, изменение содержания диска. Затем вы включаете свой компьютер, чтобы выполнить судебное дублирование исходного носителя информации (дискета). Чтобы запросить дисковод для гибких дисков, вы набираете в командной строке следующую команду.

    forensic# dd if=/dev/fd0 of=/mnt/storage/dr_hansen_floppy.bin ¬
    conv=notrunc,noerror,sync
    2880+0 records in
    2880+0 records out

    Вы не столкнулись ни с какими ошибками в своем судебном дублировании, потому что количество записей ввода и вывода одинаковы.

    Затем вам нужно смонтировать эту копию в среде Linux и рассмотреть ее содержимое. Вы не можете смонтировать ее непосредственно в виде файла, но можете использовать локальную функцию loopback в пределах Linux, чтобы преобразовать копию в специальный файл устройства. После того как копия преобразована в файл устройства, вы можете монтировать ее и рассматривать логические, восстановленные файлы. Зная, что доктор Хансен - не самый находчивый в мире пользователь, вы полагаетесь на то, что он вряд ли скрыл данные таким сложным способом, что вам потребуется выполнять анализ данных на физическом уровне. Чтобы анализировать логические данные, наберите следующие команды:

    forensic# losetup /dev/loop0 /mnt/storage/dr_hansen_floppy.bin
    
    forensic# mount -r /dev/loop0 /mnt/evidence
    
    forensic# ls -al /mnt/evidence
    total 30
    
    drwxr-xr-x      2   root    root    7168    Dec 31  1969    .   
    drwxr-xr-x      4   root    root    4096    Apr 9   09:52   ..  
    -rwxr-xr-x      1   root    root    19456   Apr 25  2002    Secret Formula.doc

    После открытия файла Secret Formula.doc в своем любимом редакторе вы обнаруживаете, что там действительно находится формула нового лекарства от мужского облысения, которое только что разработала ваша компания. Боссы были поражены вашими способностями криминалиста и подарили вам пожизненное право на бесплатное приобретение любого разработанного ими лекарства. Прекрасный финал!

    md5sum и md5. Вы помните, что после создания судебной копии необходимо сгенерировать контрольную сумму MD5 и для содержимого дискеты и для файла улик:

    forensic# md5sum -b /dev/fd0
    e9a4ee253a4537886a59a7973241bf20    */dev/fd0
    
    forensic# md5sum -b floppy.bin
    e9a4ee253a4537886a59a7973241bf20    *dr_hansen_floppy.bin

    Замечательно! Полученное вами изображение является точной побитовой копией исходного гибкого диска.

    Эта команда дана последней, чтобы печатная версия данной истории отражала последовательность обсуждения инструментальных средств, приводящуюся в этой лекции. Однако, на самом деле, вам следует выполнить первую команду md5sum непосредственно перед тем, как выполнять дублирование дискеты, а вторую команду md5sum сразу же после окончания дублирования.

    Вернуться к учебному плану