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

Судебное дублирование #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-гигабайтного жесткого диска при увеличении размера блока! Конечно, в какой-то момент вы почувствуете уменьшение отдачи и, возможно, захотите поэкспериментировать со своей аппаратурой и определить, что больше подходит для вашего конкретного случая.


Содержание раздела