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

 

Компьютерные расследования

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

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

Процесс расследования (digital/computer forensics) хорошо описан в книге
Уоррена Круза (Warren G. Kruse II) и Джея Хэйзера (Jay G. Heiser) "Computer
Forensics: Incident Response Essentials", которая является своего рода библией
для тех, кто занимается подобными исследованиями. К сожалению, в русском
переводе ее нет, в интернете можно найти отдельные главы и выдержки из
оригинала. Само исследование состоит из 5 этапов — подготовка (исследователя),
оценка ситуации, сбор данных, анализ и отчет. Стандартные инструменты, входящие
в состав ОС, в большинстве случаев могут быть использованы лишь как
вспомогательные. Злоумышленник в первую очередь сделает все возможное, чтобы
скрыть от них свои следы (например, время последнего обращения к файлу очень
просто изменить, в итоге это может помешать исследованию, а полученный результат
нельзя будет использовать как доказательство). Первое время поиск следов
проводился на "выключенном компьютере", т.е. создавался образ и, используя
инструментарий, о котором пойдет речь далее, исследователь пытался найти следы
взлома. Такой метод получил название "Dead analysis".

Сегодня ситуация несколько другая. Известно, что некоторые современные вирусы
не оставляют следов на жестком диске, яркий пример — червь "SQL slammer",
который работает только в ОЗУ, и засечь его можно лишь по сетевой активности
(порт 1434, UDP пакет ~400 байт). Еще один момент: в настоящее время повсеместно
внедряются криптографические средства защиты (например в Windows — BitLocker,
EFS), и без ключей, хранящихся в ОЗУ, получить доступ к защищенной информации
нет никакой возможности. Поэтому сегодня чаще используется анализ на рабочей
системе — "Live analysis", когда собирается полная инфа о сетевой активности,
приложениях и процессах. Как ты понимаешь, единой процедуры, подходящей для всех
случаев, не существует, в каждой конкретной ситуации подход сугубо
индивидуальный.

Далее посмотрим, при помощи каких инструментов и как можно собрать и
проанализировать данные на скомпрометированном хосте. В список первоочередных
инструментов должны входить:

  • утилиты, позволяющие сохранить посекторную копию разделов диска;
  • утилиты создания контрольных сумм и цифровых подписей файлов;
  • перехватчики сетевых пакетов, утилиты анализа сетевой активности и сетевых
    настроек системы;
  • средства анализа состояния системы (процессы, библиотеки и т.п.)

В зависимости от ситуации состав приложений может меняться и подбирается
индивидуально. Нужно отметить, что в настоящее время существует совсем немного
специализированных программ проведения расследований. Из коммерческих продуктов
популярны ProDiscover от Technology Pathways,
EnCase Forensic от Guidance Software
и The Forensic Toolkit.
Некоторые проекты предлагают демки ограниченных версий. Например, ProDiscover
Basic Edition Freeware, которая доступна для закачки на сайте Technology
Pathways, не имеет сетевых функций. Но, тем не менее, есть ряд продуктов,
распространяемых под Freeware-лицензией, возможностей которых вполне достаточно
для проведения полного анализа. Более того, существуют специализированные
дистрибутивы Linux, где все нужные утилиты уже собраны и настроены. Например,
DEFT Linux,
FCCU GNU/Linux Forensic Boot CD,
Helix3 и
другие.

Кстати, коммерческий вариант
Helix3
в своем роде уникальный дистрибутив, так как содержит утилиты для Linux, Windows
и Mac OS X.

 

Набор Sleuth Kit

Самой первой и поэтому известной утилитой, написанной для Unixсистем,
является TCT (The Coroner’s Toolkit). TCT разработан двумя авторами SATAN —
Dan Farmer и Wietse Venema — и представляет собой набор утилит, при помощи
которых можно произвести как Dead, так и Live анализ Unixсистемы. Некоторое
время проект практически не развивался, поэтому в специализированных
дистрибутивах его заменил
The Sleuth Kit
.
TSK разработан экспертом по безопасности Brian Carrier и основан на исходном
коде проектов TCT и TCTUtils. Сырцы серьезно переписаны, что позволяет собрать и
использовать утилиты в Linux, Mac OS X, Cygwin, FreeBSD, OpenBSD и Solaris. При
помощи TSK можно проанализировать данные, находящиеся на разделах NTFS, FAT,
Ext2, Ext3, UFS1 и UFS2, а также в образах, созданных командами dd и dd_rescue.
В состав включены 24 утилиты, большинство из них для удобства пользователя
разбиты на группы, и имя начинается с определенной буквы:

  • File System Layer (начинаются с f*) — работа с файловой системой;
  • Meta Data Layer (i*) — описывает файл или каталог, т.е. все, что можно
    извлечь из inode;
  • Data Unit Layer (blk*) — фактическое содержание блоков, кластеров,
    фрагментов;
  • File System Journal (j*) — журналы файловой системы;
  • Volume System (mm*) — анализ разделов, дисковые утилиты (disk_*).

Попробуем найти удаленный файл. Для начала запустим утилиту fls, чтобы
получить имена файлов и каталогов, в том числе и удаленных. Утилита имеет
несколько дополнительных параметров, из них стоит отметить:

-a — вывод имен файлов, начинающихся с точки (. и ..), их очень любят
использовать взломщики для маскировки;
-d — вывод только удаленных файлов;
-u — вывод только не удаленных файлов;
-l — вывод подробной информации о файле;
-r — рекурсивный обход каталогов.

# fls -rd /dev/sda1

Первая буква показывает тип файла, т.е. r-egular, d-irectory, l-ink, s-ocket
или не определен (?). Знак "*" на второй позиции показывает, что файл не
распределен (удален). Теперь запросим больше информации о конкретном inode:

# ffind -a /dev/sda1 111
/windows/system32/cmd.exe
# istat /dev/sda1 111
inode: 111
Not Allocated
uid / gid: 0 / 0
mode: rwxr-xr-x
size: 0
num of links: 0
# fsstat /dev/sda1

Чтобы просмотреть данные, соответствующие inode, используем icat:

# icat /dev/sda1 1234 | less

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

# blkcat -h /dev/sda1 111 | less
# blkcat 111-120 > output.blk

В сформированном образе адрес блока будет отличаться от исходного, поэтому
вручную найти его непросто. Но это и не требуется, чтобы упросить поиск, можно
воспользоваться специальным калькулятором — blkcalc. Еще одна полезная команда
"blkls /dev/sda1" позволит просмотреть содержимое блоков выбранного раздела
диска в удобочитаемом виде. По умолчанию выводятся только нераспределенные блоки
данных (соответствует ключу ‘-A’). Сохранив вывод blkls в файл, затем можно
использовать утилиты strings и grep для поиска нужных фрагментов.

# blkls sda1.dd > sda1.blkls
# strings -t d sda1.blkls > sda1.str

Теперь в sda1.str находятся все текстовые строки из образа/раздела вместе с
данными, указывающими на смещение относительно начала блока.

В Sleuth Kit v1.63 появилась утилита mmls. Примечательна она тем, что выводит
таблицу разделов и показывает, какие сектора не используются. Таким образом
можно увидеть "спрятанные" данные:

# mmls -t dos /dev/sda

Описание утилит можно продолжать долго, лучше один раз запустить и увидеть
результат. Но все, о чем говорилось, позволяет лишь собрать данные, а их анализ
целиком возлагается на плечи исследователя. Для того чтобы найти в нескольких
гигабайтах информации инструменты взломщика, потребуется немало времени и опыта.
Здесь на помощь приходит утилита hfind из комплекта TSK, которая умеет
рассчитывать хеш-функции файлов и сравнивать результат с заранее созданной
базой. База может формироваться как самостоятельно при помощи md5sum, так и на
основе библиотеки NSRL (National Software Reference Library). Проект NSRL
поддерживается рядом солидных организаций, среди которых — Национальный Институт
Американского Министерства юстиции (NIJ), Национальный Институт Стандартов и
Технологии (NIST) и так далее. В NSRL собраны в справочный информационный набор
RDS (Reference Data Set, полный комплект занимает 4 CD по 300 Мб каждый) профили
различного ПО — хеш-функции (MD5 и SHA-1), данные о файле (происхождение, имя,
размер и т.п.), что позволяет однозначно идентифицировать файл, даже если он был
переименован. Кстати, одной из основных задач этой библиотеки является поиск
программ при расследовании преступлений, направленных против интеллектуальной
собственности.

Утилита hfind проверяет значения хеш-функции в базе данных, используя
двоичный алгоритм поиска, поэтому она работает быстрее, чем штатный grep, но
вначале следует создать индексный файл (ключ ‘-i’):

# hfind -i nsrl-sha1 /usr/local/hash/nsrl/
NSRLFile.txt
Index Created

В результате в текущем каталоге появится NSRLFile.txtsha1.idx. Теперь можно
пробить любой файл по базе:

# md5sum /bin/ls
f58860f27dd2673111083670c9445099
# hfind /usr/local/hash/nsrl/NSRLFile.txt f58
860f27dd2673111083670c9445099
f58860f27dd2673111083670c9445099 Hash
Not Found

Для примера создадим md5-сумму важных системных файлов:

# md5sum /bin/* /sbin/* /usr/bin/* /usr/bin/*
> system.md5

Проверяем результат командой "cat system.md5", генерируем индексный файл:

# hfind -i md5sum system.md5

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

# md5sum /bin/* > bin.md5
# hfind -f bin.md5 system.md5
3ed2e316bbbdb94cacdf9a7c9d83f213a /bin/bash
Invalid Hash Value

Как видишь, /bin/bash изменился со времени создания базы, его контрольная
сумма не совпадает.

И, наконец, скрипт sorter. Он умеет анализировать образ (для этого запускает
fls и icat), а также находит и распознает файлы (при помощи file). Если
задействована база NSRL, сортировщик может определить сразу и характер файла
(опасный или нет). Опасные файлы автоматически заносятся в отдельный файл —
alert.txt (если использован параметр ‘-s’, то будет сохранено и содержимое
файла). Создаем каталог, куда будет сохраняться результат, и запускаем анализ
раздела или dd-образа:

# mkdir data
# sorter -d data -f ntfs /dev/sda1

По окончании работы в подкаталоге data появится несколько файлов с
расширением txt:

# ls data

archive.txt documents.txt disk.txt sorter.sum

Имя соответствует категориям найденных файлов:

# cat data/documents.txt
Documents and Settings/All Users/Главное меню/Программы/
Стандартные/desktop.ini
ISO-8859 text, with CRLF line terminators
Image: /dev/sda1 Inode: 5805-128-1

В sorter.sum найдем общий итог по поиску.

 

Веб-интерфейс Autopsy

Утилит в составе Sleuth Kit более чем предостаточно, и это вызывает некоторые
затруднения не только в их изучении, но и использовании даже у бывалых спецов.
Но не беда, так как в дополнение к TSK был создан инструмент визуализации —
Autopsy Forensic Browser,
поддерживаемый тем же автором. Autopsy для своей работы требует наличия TSK и
желательно NSRL. После запуска в командной строке копируем выданный URL в
веб-браузер (http://localhost:9999).

Первым делом следует создать базу данных dd-образов, предварительно взятых с
различных дисков и систем. Для этого нужно нажать ссылку "New Case" и заполнить
название и описание (можно указать несколько вариантов, чтобы упростить поиск).
Далее нужно добавить сведения об узле, с которого снят образ. Жмем "Adding a New
Host" и заполняем данные — имя компьютера, описание, временной пояс, путь к
базам NSRL. И, наконец, через "Adding a New Image" подключаем образ — задаем
путь к файлу, тип (диск, раздел). После этого можно выбрать: копирование образа,
перемещение образа, создание симлинка. В следующем окне указываем файловую
систему и точку монтирования. По окончании можно начинать работу. Например,
извлечь строковые данные, отдельные блоки или удаленные файлы  можно в
"Image Details". Здесь же получаем всю необходимую информацию о данных,
содержащихся в тех или иных блоках (ASCII, Hex, String). При необходимости
добавляем комментарий к нужному участку. Аналогично можно вывести список файлов,
данные о состоянии inode и прочую информацию. Сторонними разработчиками создана
альтернатива Autopsy — PTK,
обладающая большим удобством в использовании и расширенными возможностями.

 

В мире окон

Утилиты
Windows Sysinternals,
созданные известным программистом
Марком Руссиновичем,
должны быть обязательно включены в набор инструментов исследователя. Чтобы не
скачивать их по отдельности, лучше забрать все одним пакетом — Sysinternals
Suite. Утилит в составе довольно много, часть из них запускается из командной
строки, часть имеет GUI. Полное описание Sysinternals можно найти на сайте по
адресу, указанному выше. Остановлюсь лишь на некоторых из них. Так, Autoruns
позволяет получить исчерпывающую информацию по всему, что загружается вместе с
системой или при входе пользователя. Программы и библиотеки отображаются именно
в том порядке, в котором будут запускаться. Дополнительно показываются все
разделы реестра, которые могут быть использованы для автоматического запуска, в
отдельных окнах показываются драйвера, DLL, кодеки и все остальное, что имеет
какое-либо отношение к автозапуску. Результат можно сохранить в файл .arn и
сравнить с аналогичным файлом, созданным ранее или полученным с другой подобной
системы. Утилиты PsInfo, PsLogList и ProcessExplorer позволяют получить полную
информацию по системе и запущенным процессам. Список DLL с номерами их версий, а
также откуда они были запущены, смотрим при помощи ListDLLs. Утилита Handle
показывает список открытых файлов с указанием, какие процессы их открыли. Введя
в командной строке

> AccessChk -a *

узнаем об обращениях пользователя к реестру, файлам и службам Windows. Чтобы
получить полную информацию о состоянии системы, следует сохранить вывод утилит
LogonSessions, PendMoves, PSFile, PsLoggedOn, TCPVcon, TCPView, а также
стандартных — ipconfig, netstat, arp, openfiles, systeminfo.

Кроме Sysinternals, доступен ряд других полезных утилит, распространяемых под
Freeware лицензией. Например, сохранить состояние памяти в двоичный файл можно
при помощи утилиты MDD (ManTech dd или Memory dd,
www.mantech.com/msma/MDD.asp),
которая поддерживает все популярные на сегодня версии OC Windows: 2k, XP, Vista,
2k3 и 2k8. Программа работает как с 32, так и с 64-битными версиями ОС, она
очень проста в использовании и позволяет сохранить до 4 Гб в указанный файл.

> mdd.exe -o sysmem.dmp
512886 map operations succeeded (0.98)
11269 map operations failed
took 63 seconds to write
MD5 is: 7c21f2533d90cb5bdf110d001498f970

Полученный файл формата dd проверяется затем при помощи MD5. Собранные данные
можно проанализировать при помощи любой утилиты, работающей с двоичными данными.
Подобной функцией обладает и EnCase, но он, как мы помним, не бесплатен.
Запускать MDD следует с правами администратора. MDD — не единственная утилита с
подобной функциональностью, немного погуглив, можно найти еще с десяток решений,
например, win32dd,

PTFinder
, Volatility Framework.
Последняя написана на Python и может быть запущена на все платформах, на которых
поддерживается этот язык — Linux, xBSD, Windows, Mac OS X. После запуска
Volatility Framework соберет данные о модулях ядра, запущенных процессах,
открытых сетевых соединениях и сокетах, файлах и DLL, используемых процессами.
Утилита командной строки Windows
Forensic Toolches
позволяет упорядочить и автоматизировать процесс сбора
данных, а также выдачу отчета. В своей работе WFT использует другие утилиты:
системные и дополнительные от Microsoft, Sysinternals,
Forensic Acquisition Utilities,
diamondcs и так далее. Все настройки
сохраняются в файле wft.cfg. Утилита работает в интерактивном режиме, задавая
последовательно ряд вопросов, на выходе исследователь получает отчет в виде
текстового или HTML файла. В незарегистрированной версии отключены многие
удобства, например, не работает параметр ‘-fetchtools’, который позволяет быстро
сформировать рабочую среду, автоматически скачав нужные файлы. Хотя при наличии
диска Helix все недостающие инструменты можно взять с него (лежат в подкаталоге
IR).

 

INFO

Статью "LiveCD:
мощное оружие профи
" читай в
январском номере Х за
2009 год
. Информацию о наборе Sleuth Kit также можно почерпнуть из статьи
"Свой среди чужих", опубликованной в
ноябрьском номере Х за
2009 год
.

 

WWW

RFC3227 "Guidelines for Evidence Collection and Archiving" —

ftp.rfc-editor.org/innotes/rfc3227.txt
.

Документ, подготовленный Национальным институтом юстиции США (National
Institute of Justice) "Forensic Examination of Digital Evidence: A Guide for Law
Enforcement" —
www.ncjrs.gov/txtfiles1/nij/199408.txt
.

Оставить мнение

Check Also

Злой дебаг. Исследуем и взламываем приложения для Android при помощи отладчика

Мы уже неоднократно рассказывали о взломе приложений для Android. Несколько раз мы вскрыва…