Часть 1
В статье «Подготовка и использование аварийного набора» рассказывается о том, как быстро и грамотно отреагировать на инцидент, связанный с нарушением безопасности компьютера. В этой статье, также состоящей из двух частей, будет подробно рассмотрена область компьютерной криминалистики и показано, как следует выполнять углубленный анализ подвергшейся нападению машины. Для подготовки к анализу необходимо создать загружаемый компакт-диск и резервную копию жесткого диска пораженного компьютера. Анализировать содержимое копии диска можно с помощью нескольких утилит. Но прежде чем начать, вспомним три основных принципа аналитической криминалистики.
- Необходимо избегать изменений любых данных на пораженной машине. Чтобы сохранить данные, следует сделать копию исследуемого жесткого диска, убедиться, что дублированный диск точно соответствует оригиналу, а затем проанализировать этот диск. Большинство аналитических инструментов проектируют в расчете на работу с копиями дисков, чтобы не потерять ценную информацию (например, о времени доступа) на пораженном компьютере.
- Нельзя доверять установленным на пораженном компьютере программам и данным, которые могли быть изменены в результате атаки. Выполнив дублирование и применяя аналитический инструментарий к дублированному диску, можно отказаться от использования потенциально испорченных данных и программ.
- Операции криминалистического копирования и анализа необходимо документировать. Хороший метод документирования — создать цифровые контрольные суммы пораженного диска и исследуемого образа. Совпадение контрольных сумм математически доказывает, что данные не изменились. Следует также документировать программы, которые были использованы, и полученные с их помощью результаты. Если предстоит обращаться в суд, то рекомендуется выполнять дублирование и анализ при двух свидетелях.
Помня об этих трех принципах, рассмотрим, как создать загружаемый компакт-диск и копию пораженного диска. Для этого потребуется выполнить несколько команд Linux, но для целей данной статьи знание Linux не обязательно.
Создание компакт-диска
Основная цель криминалистического анализа — собрать инструменты для копирования пораженного диска и анализа информации на вторичном диске. Я пользуюсь для этого набором Penguin Sleuth Kit, открытой версией дистрибутива Knoppix, модернизированного специально для криминалистики. Knoppix — дистрибутив Linux, который запускается с компакт-диска без предварительной установки. Программа загружается с компакт-диска и загружает всю операционную систему в память. Таким образом, любой компьютер с накопителем CD-ROM незамедлительно готов функционировать в качестве криминалистической рабочей станции на базе Linux. Стандартный дистрибутив Knoppix выполняет запись на диск, чтобы организовать раздел подкачки, но автор Penguin Sleuth Kit Эрнест Бака (Ernest Baca) изменил дистрибутив Knoppix так, чтобы не записывать никакой информации на пораженный жесткий диск.
Существуют и другие инструменты криминалистического дублирования и анализа, такие как EnCase компании Guidance Software и SafeBack от Technologies Incorporated (NTI). Однако в данной статье эти инструменты не рассматриваются, поскольку, заплатив лишь за компакт-диск, можно получить инструмент, функциональность и производительность которого не уступают или превосходят возможности продуктов независимых поставщиков.
В состав Penguin Sleuth Kit входят все стандартные утилиты Linux и десятки криминалистических инструментов, в том числе чрезвычайно полезные Sleuth Kit (в прошлом известный как The @stake Sleuth Kit-TASK) и Autopsy. Кроме того, с помощью Penguin Sleuth Kit можно копировать пораженный диск и даже просматривать его, не повреждая улик.
Penguin Sleuth Kit можно загрузить с Web-узла Linux-Forensics.com. Следует обратиться по адресу http://www.linux-forensics.com/downloads.html и щелкнуть на одной из ссылок Download Penguin Sleuth Mirror. Загружаемый образ формата International Organization for Standardization (ISO) необходимо записать на компакт-диск. Достаточно поместить загружаемый CD-ROM в накопитель любого компьютера, и Penguin Sleuth Kit готов к работе.
Наряду с загружаемым компакт-диском необходимо подготовить носитель для копирования пораженного диска. Емкость носителя должна быть такой же, как у жесткого диска, так как Penguin Sleuth Kit копирует даже пустые участки. Так, для хранения образа диска емкостью 10 Гбайт, из которых 2 Гбайт свободны, требуется носитель не на 8 Гбайт, а 10. Можно использовать внешний жесткий диск, подключенный через порт USB 2.0 или FireWire (IEEE 1394), либо внутренний жесткий диск. Внутренний диск необходимо установить в пораженном компьютере, не удаляя основного жесткого диска и накопителя CD-ROM. Важно обратить внимание на логическое местоположение внутреннего жесткого диска (например, ведомый на второй шине IDE).
Копирование диска
При подозрении на хакерскую атаку необходимо немедленно собрать как можно больше хрупких свидетельств нападения (о том, как это сделать, рассказано в статье «Подготовка и использование аварийного набора»). Затем следует выключить машину, действуя в соответствии с официальной политикой организации (если таковая существует). Например, по инструкции Министерства обороны США пользователь должен немедленно выдернуть шнур питания из розетки, не пытаясь завершить сеанс обычным путем.
После того как пораженный компьютер был отключен, его необходимо заново загрузить с компакт-диска с аварийным набором. Вставив диск, следует включить компьютер и нажать клавишу, которая позволяет изменить параметры BIOS. Информацию об этой клавише можно найти в руководстве. Обычно это клавиши F2 и Delete. Необходимо заменить первоочередное загрузочное устройство с жесткого диска на CD-ROM. Имеет смысл открыть корпус компьютера и отключить жесткий диск, чтобы машина не загрузилась прежде, чем пользователь успеет нажать на клавишу настройки BIOS. Эта предосторожность обеспечит начальную загрузку с накопителя CD-ROM.
После загрузки с компакт-диска на экране появится командная строка. Требуется ввести команду
knoppix lang=us 2
Все символы должны быть в нижнем регистре, потому что команды Penguin Sleuth Kit, как и команды дистрибутива Knoppix, чувствительны к регистру. Команда knoppix запускает стандартный образ ядра. Параметр lang=us настраивает Penguin Sleuth Kit на работу со стандартной раскладкой клавиатуры для США. Для выбора иной раскладки клавиатуры следует заменить us на двухсимвольное обозначение другой страны. Если опустить параметр lang=, то по умолчанию используется немецкая раскладка клавиатуры. Параметр 2 переводит систему в текстовый режим. Если его опустить, Penguin Sleuth Kit будет задействовать графический интерфейс, который занимает много памяти и для криминалистического расследования необязателен. Чтобы изменить или добавить параметры, можно нажать клавишу F2 и перейти к экрану справки. Однако тем пользователям, которые мало знакомы с Linux, я этого делать не рекомендую.
После ввода команды knoppix и нажатия на клавишу Enter компьютер загружается, и на экране появляется базовое командное приглашение Linux:
root@ttyp1[/]#
Команды Linux запускаются тем же способом, что и команды DOS: следует ввести имя команды вместе с любыми аргументами и нажать клавишу Enter. Однако в командном синтаксисе существуют некоторые различия. В структуре каталогов Linux каталоги разделяются прямым слэшем (/), а не обратным (), как каталоги DOS. Поэтому необходимо использовать прямой слэш во всех аргументах, содержащих пути. Кроме того, стандартный метод Linux — использовать дефис (-) вместо прямого слэша перед командными аргументами. И наконец, в отличие от команд DOS, команды Linux чувствительны к регистру символов.
Новичкам Linux может пригодиться команда man (сокращение от manual — руководство). Чтобы вывести на экран информацию (например, о применении или параметрах команды), можно ввести команду man и следом за ней команду, сведения о которой нужно получить. Например, для вывода на экран информации о команде dcfldd (речь о которой пойдет ниже) следует ввести
man dcfldd
и нажать клавишу Enter. Информация на экране называется страницей man. Для прокрутки текста на странице man используются клавиши Up Arrow и Down Arrow. При каждом нажатии на клавишу «пробел» информация перемещается на одну страницу вниз (80 строк).
Самый распространенный метод криминалистического исследования на компьютерах Linux — команда dd, стандартная команда, которая копирует файлы на байтовом уровне. В Linux теоретически все объекты можно отнести к одному файлу, поэтому с помощью dd можно копировать целый диск в один файл, или образ. Сотрудники лаборатории DoD Computer Forensics Laboratory (DCFL) переделали команду dd специально для исследовательской работы. В результате появилась команда dcfldd, которая обеспечивает хеширование копируемых данных через определенные интервалы времени с целью их аутентификации. Кроме того, dcfldd работает значительно быстрее, чем команда dd. Несмотря на высокую эффективность dcfldd, для создания образа целого диска обычно требуется немало времени. В данной статье приведены необходимые сведения о применении и параметрах dcfldd, но я рекомендую прочитать соответствующую страницу man, чтобы побольше узнать о команде. Это мощный инструмент, с помощью которого можно решать те же задачи, что и с использованием дорогостоящих коммерческих программ.
При запуске dcfldd необходимо сначала указать копируемый диск. В Linux диски IDE организованы следующим образом: для обращения к каждому устройству используется запись /dev/hdx, где x — символ диска, соответствующий каждому каналу. Символы дисков возрастают в соответствии с приоритетом канала и статуса ведущий/ведомый. Поэтому на первом канале ведущий диск — /dev/hda, а ведомый — /dev/hdb, на втором канале ведущий диск — /dev/hdc, ведомый — /dev/hdd. Порядок записи дисков SCSI почти такой же, как дисков IDE: /dev/sdx, где x может принимать значения a, b, c и т. д.
Для доступа к разделу диска следует указать номер соответствующего раздела. Например, третий раздел первичного ведущего диска — /dev/hda3, а первый раздел вторичного ведомого диска — /dev/hdd1. Такой же способ используется для доступа к разделам SCSI.
Затем необходимо указать команде dcfldd место для хранения образа. При загрузке с компакт-диска файловая система строится в оперативной памяти, но, как правило, для хранения образа жесткого диска она мала. Чтобы записать когерентные данные как на внешний, так и на внутренний жесткий диск, его необходимо смонтировать. Монтировать диск в Linux — значит привести его в состояние, в котором операционная система распознает его на файловом уровне. Обозначение /dev/hdx обеспечивает доступ к диску на байтовом уровне, а команда mount позволяет работать с разделом диска как с каталогом, в который можно беспрепятственно записывать данные. Команда
mount /dev/hdb1 /mnt
монтирует первый раздел первичного ведомого диска в том /mnt; в результате можно записывать и читать данные из любых файлов на этом томе. Linux распознает FAT32 и NTFS и без труда монтирует диски в этих форматах. Однако я рекомендую задействовать жесткий диск с FAT32, так как слабое описание NTFS (промах Microsoft!) существенно затрудняет запись в разделы NTFS.
При использовании внешних жестких дисков USB и FireWire Linux эмулирует соединение диска с системой SCSI. Если SCSI-накопители отсутствуют, то первый диск USB или FireWire будет иметь обозначение /dev/sda. Если имеются накопители SCSI, то первый диск USB или FireWire будет очередным диском в цепочке SCSI. Linux поддерживает почти все устройства USB и FireWire, но, чтобы убедиться в совместимости операционной системы с конкретным устройством, следует обратиться по адресу http://www.qbik.ch/usb/devices и щелкнуть на Devices (для устройств USB) или http://www.linux1394.org/hcl.php (для устройств FireWire).
После записи диск необходимо размонтировать; в противном случае данные могут быть потеряны. Для этого используется команда umount (не unmount):
umount /dev/sda1
При размонтировании диска обращаться к нему не могут никакие файлы, в том числе интерпретатор команд (оболочка). В рабочем каталоге необходимо использовать команду
cd /
чтобы выйти из каталога перед применением команды umount.
Теперь можно получить образ диска. Предположим, что пораженный диск, образ которого нужно получить, — /dev/hda1, а диск, на который будет произведена запись, обозначен /dev/hdb1 и смонтирован в /mnt. Из-за текущих ограничений в Autopsy приходится получать образ раздела, а не целого диска. Если пораженный диск работает только с Windows, то /dev/hda1, скорее всего, диск C. Если известно, что на диске имеются другие разделы, то следует получить и их образы. Возможно, к моменту публикации данной статьи ограничение будет устранено и можно будет получить образ целого диска. Следует запустить команду
dcfldd if=/dev/hda1 of=/mnt/image.dd bs=4096 hashwindow=732954624 hashlog=/mnt/hashlog conv=noerror,sync
Команда напечатана на нескольких строках, но вводить ее нужно одной строкой. То же самое относится и к другим многострочным командам в данной статье. Параметры данной команды нуждаются в пояснениях. Параметры if= и of= указывают входной файл (в данном случае /dev/hda1) и выходной файл (/mnt/image.dd) соответственно. Параметр bs=4096 задает режим чтения и записи блоками размером по 4096 байт и повышает эффективность пересылки данных. Команда dcfldd не добавляет лишних данных в копируемый файл, если размер блока больше последнего фрагмента данных входного файла. Например, если последний копируемый блок имеет размер всего 2096 байт, то dcfldd лишние 2000 байт не добавляет. Копирование прекращается, когда заканчиваются данные. Этот режим можно изменить, но делать этого при криминалистическом копировании не рекомендуется.
Параметр hashwindow= предназначен специально для криминалистических задач. Он обеспечивает распечатку хеша MD5 (хеша, полученного с использованием алгоритма MD5) данных, скопированных для любого блока указанных данных. В примере команды указано 732 954 624 байт, и dcfldd будет генерировать хеш для каждых 699 Мбайт записанных данных. Чтобы генерировать только один хеш, следует указать hashwindow=0. Хеши отображаются на экране, если с помощью параметра hashlog= не указан файл, в котором их нужно сохранить. В примере команды они записываются в файл /mnt/hashlog. Сохранение этой информации в файле значительно облегчает сравнение и проверку хешей. Кроме того, следует распечатать экземпляр хеш-файла после получения образа и сохранить его в надежном месте. Ниже будет рассказано о том, как прочитать хеш-файл.
Последний параметр задает метод обработки ошибок чтения. По умолчанию в случае ошибки в процессе чтения работа dcfldd прекращается. Если параметру conv= присвоено значение noerror, то dcfldd пропускает ошибочные байты и продолжает читать диск. Флаг sync подставляет нулевое значение вместо каждого непрочитанного байта. В результате окончательный размер файла будет неизменным, независимо от количества ошибок.
Можно пропустить параметр of= и задействовать утилиту Netcat (или Cryptcat) для перенаправления результатов команды на сервер. Например, чтобы перенаправить результаты команды в порт 5000 прослушивающего сервера (с IP-адресом 192.168.1.100), следует ввести команду
dcfldd if=/dev/hda1 bs=4096 hashwindow=732954624 hashlog=/mnt/hashlog conv=noerror,sync | nc -p 5000 192.168.1.100
После завершения выполнения команды dcfldd необходимо обработать выходной файл утилитой Md5sum, чтобы убедиться в его целостности. Более подробно о применении Md5sum, Netcat и Cryptcat рассказано в статье «Подготовка и использование аварийного набора», часть 1.
Увидеть хеши, созданные командой dcfldd, можно с помощью команды less.
less /mnt/hashlog
Для прокрутки результатов команды less на 80 строк вниз (как и страницы man) используется клавиша «пробел». Для медленной прокрутки экрана вверх и вниз можно нажимать клавиши Up Arrow и Down Arrow.
Команда dcfldd генерирует только один файл образа. С помощью команды split можно разбить файл на более мелкие фрагменты (хотя делать это не обязательно). В данном примере можно использовать команду
split —bytes=699m /mnt/image.dd suscomp
Параметр -bytes= указывает, сколько байтов входного файла должно быть передано в выходной файл. В данном случае указано значение 699 Мбайт, совпадающее с числом байтов, использованных для вычисления каждого хеша MD5. Предпоследний параметр — имя файла, разделяемого на более мелкие фрагменты (в данном случае, /mnt/image.dd). Последний параметр — префикс, который присваивается выходным файлам. Формат именования — prefixaa, prefixab, prefixac и т. д. Таким образом, в данном примере выходные файлы получат имена suscompaa, suscompab, suscompac и т. д. При необходимости впоследствии можно объединить группы файлов с помощью команды cat. Например, команда
cat suscompaa suscompab > combo1
объединяет файлы suscompaa и suscompab в файл combo1.
Безупречная копия
Итак, мы получили цифровую копию пораженного жесткого диска. Криминалистический анализ можно выполнить на дублированном диске, чтобы исключить любые изменения данных в пострадавшей машине. Во второй части статьи будет рассказано, как провести исчерпывающий анализ.
Матт Леско (matt@advancedatatools.com) — системный администратор компании Advanced DataTools в Аннандейле, шт. Вирджиния