Часть 1. Сбор данных о пораженной машине

С нарушениями системы безопасности компьютера (обычно это несанкционированный доступ) приходится сталкиваться многим системным администраторам. Угроза может исходить от злоумышленника, самораспространяющегося «червя» или доверенного пользователя, действующего внутри предприятия, но в любом случае крайне важно, чтобы реакция была незамедлительной. Решающее значение имеет тщательный анализ состояния пораженной машины после нападения.

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

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

Каждый открытый файл, запущенный процесс или обращение к сегменту памяти изменяет состояние машины и может помешать исследованию. Возможные способы сведения изменений к минимуму — тема постоянных споров, и единственно верного решения не существует. Оптимальное решение зависит от обстоятельств: можно немедленно завершить работу с компьютером («чистое» отключение — clean shutdown), можно просто выдернуть вилку питания («грязное» отключение — dirty shutdown), можно отключиться от сети или вообще ничего не делать. Но во всех случаях какая-то важная информация будет потеряна.

Лучший метод — тот, который позволяет сохранить максимум информации с минимальным риском. Как правило, следует отключить компьютер от сети, создать образ энергозависимой памяти, а затем отключить систему. В организации могут действовать инструкции, как поступить в этом случае. Например, согласно инструкции Министерства обороны США, пользователь должен немедленно выключить питание компьютера. В данной статье речь пойдет о том, как исследовать работающую систему.

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

Собираем инструментальный набор

В аварийный набор входят многочисленные инструменты из множества источников. Все инструменты можно загрузить из сети бесплатно или взять из состава Windows. Весь набор инструментов легко размещается на компакт-диске (обычном или размером с визитную карточку) или другом сменном диске. На обычном 3,5-дюймовом диске вряд ли найдется достаточно места, но если файлы записаны на 3,5-дюймовый гибкий диск, следует обязательно защитить его от записи. Все инструменты нужно разместить непосредственно в корневом каталоге компакт-диска. Перечислим этапы подготовки инструментального набора.

  1. Следует выбрать надежный компьютер с Windows. Многие инструменты поставляются вместе с Windows, но очень важно иметь их отдельные экземпляры, чтобы исключить порчу двоичных файлов. Поэтому нужно отыскать дистрибутив (или обратиться к проверенной системе), перейти в каталог %windowsroot%system32 и скопировать двоичные файлы arp.exe, at.exe, cmd.exe, dir.exe, doskey.exe, edit.exe, find.exe, findstr.exe, hostname.exe, ipconfig.exe, nbtstat.exe, net.exe, netstat.exe, nslookup.exe, notepad.exe, ping.exe, regedt32.exe, route.exe, share.exe и tracert.exe.

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

  2. Необходимое дополнение — программа Md5sum компании ActiveState, которую можно получить по адресу http://downloads.activestate.com/

    contrib/md5sum/Windows
    . Md5sum вычисляет уникальную зашифрованную контрольную сумму для каждого файла. Например, зашифрованная контрольная сумма для файла md5sum.exe может иметь вид b574b236133e60c989c6f472f07827b md5sum.exe. Следует получить контрольные суммы для каждого файла в инструментальном наборе и сохранить их отдельно на надежном носителе. Еще один полезный прием — создать две контрольные суммы для всех файлов, содержащих данные с пораженного компьютера. Первую контрольную сумму нужно вычислить немедленно после создания файла, а вторую — после анализа его содержимого. Сравнивая две зашифрованные величины, можно обнаружить, был ли файл изменен, даже если изменился всего один байт.
  3. Требуется добавить в набор Netcat (сетевую утилиту) или Cryptcat (усовершенствованную версию Netcat). Netcat часто называют «армейским ножом» системного администратора. Например, с ее помощью можно открыть порт для прослушивания или послать в порт данные. Еще одно распространенное применение утилиты (рассматриваемое в данной статье) — передача данных по сети защищенной машине, на которой Netcat записывает данные на диск. Cryptcat выполняет те же функции, что и Netcat, но шифрует данные с использованием алгоритма Twofish, чтобы скрыть информацию от посторонних глаз. Взломщик может разместить в сети анализатор пакетов, и я рекомендую применять вместо Netcat более безопасную утилиту Cryptcat.

    Netcat можно получить по адресу http://ftp.uni-kl.de/pub/windows/cygwin/release/netcat или http://netcat.sourceforge.net. Для корректной работы инструмента необходим Cygwin (программный набор эмуляции Linux). Двоичный файл Cryptcat предназначен для Windows, поэтому эмулятор не требуется. Cryptcat можно найти по адресу http://farm9.org/Cryptcat/GetCryptcat.php или http://sourceforge.net/projects/cryptcat.

  4. Набор следует дополнить несколькими аналитическими инструментами — Fport, BinText и Forensic Toolkit — компании Foundstone, которые можно получить по адресу http://www.foundstone.com/resources/freetools.htm. Fport сообщает обо всех открытых для прослушивания UDP- и TCP-портов и определяет идентификатор процесса (process identifier, PID), а также имя и путь процессов, которые используют эти порты. С помощью Fport можно быстро обнаружить на машине подозрительные программы. BinText отыскивает последовательности ASCII и Unicode символов, характерные для двоичных файлов, пораженных «троянским конем». Forensic Toolkit содержит полезный инструмент для работы с NTFS.
  5. Несколько утилит компании SysInternals. По адресу http://www.sysinternals.com/sitemap.shtml можно найти ссылки на следующие утилиты:
    • AccessEnum (генерирует список разрешений доступа к каталогу);
    • Autoruns (выдает список программ, запускаемых при начальной загрузке);
    • Handle (составляет список открытых файлов, к которым обращаются активные процессы);
    • ListDLLs (составляет список DLL, используемых активными процессами);
    • PsFile (генерирует список файлов, совместно используемых или доступных через сеть);
    • PsInfo (предоставляет информацию о локальной системе или указанной удаленной машине);
    • PsList (генерирует список активных процессов);
    • PsLoggedOn (составляет список пользователей, зарегистрированных в данный момент);
    • PsService (выдает список служб с PID);
    • Strings (переносит команду Strings из системы UNIX для поиска строк внутри файлов).
  6. На Web-сайте ntsecurity.nu можно получить несколько инструментов безопасности для Windows. По адресу http://www.ntsecurity.nu/toolbox можно загрузить следующие инструменты:
    • MACMatch (выясняет время последней операции записи, последнего сеанса доступа и создания файлов, не изменяя этих величин);
    • PMDump (создает дамп памяти активного процесса по его PID, не разрушая информации; полезен для анализа подозрительных процессов);
    • PromiscDetect (выполняет локальный поиск сетевых адаптеров, работающих в режиме приема всех сетевых пакетов, это может свидетельствовать о наличии на компьютере анализатора пакетов).
  7. Следует добавить в набор утилиту LADS, находящуюся по адресу http://www.heysoft.de/frames/f_sw_la_en.htm. С помощью этого инструмента можно обнаружить скрытые потоки данных в разделах NTFS.
  8. Необходимо загрузить пакет Forensic Acquisition Utilities по адресу http://users.erols.com/gmgarner/ forensics и добавить в свой набор утилиту dd.exe. В состав пакета входят также программы Md5sum и Netcat, но эти инструменты уже есть в нашем наборе. Можно игнорировать рекомендации по размещению Forensic Acquisition Utilities и записать dd.exe в корневой каталог инструментального набора. В противном случае могут возникнуть осложнения при работе с инструментальным набором. Изначально dd.exe предназначалась для UNIX и позволяет получить двоичные копии файлов. С ее помощью можно записать в файл образ физической памяти пораженного компьютера для последующего анализа.
  9. Пакет следует дополнить утилитой pclip.exe, загрузив файл UnxUtils.zip из http://unxutils.sourceforge.net. Pclip.exe запускается из командной строки и копирует данные буфера обмена. Первоначально эта программа была разработана для UNIX, а потом перенесена в Windows. Эти полезные инструменты обеспечивают функции, которых нет в Windows.

Выбор носителя

Собрав инструментальный набор, необходимо выбрать носитель для записи данных, полученных с помощью этих утилит. Возможные варианты: накопители USB, 3,5-дюймовые диски, Cryptcat или Netcat. У каждого носителя есть свои достоинства и недостатки.

Например, накопители USB и 3,5-дюймовые диски просты в эксплуатации. Однако, когда диск USB или 3,5-дюймовый вставляется в накопитель, в системе происходят изменения (в большей степени при использовании диска USB, чем 3,5-дюймового диска). Кроме того, емкость USB и 3,5-дюймовых дисков может быть недостаточна для записи всей информации, особенно для сохранения образа памяти. При использовании Netcat и Cryptcat проблем с емкостью памяти не возникает. Однако для Netcat и Cryptcat необходимо сетевое соединение с другим компьютером, что нежелательно, если нужно изолировать пораженный компьютер от сети.

Подготовив инструментальный набор и выбрав безопасный носитель для хранения данных, можно приступать к использованию инструментов. Если безопасность компьютера нарушена, следует вставить в систему инструментальный диск. Затем нужно запустить экземпляр cmd.exe из инструментального набора, щелкнув на пункте Run в меню Start и указав полный путь к этому экземпляру утилиты. Предположим, что инструментальный набор находится на CD-ROM в накопителе D. В этом случае путь будет выглядеть так:

D:cmd.exe

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

Для исследования полезно документировать каждую команду, запускаемую в D:cmd.exe, а затем хешировать команды и их результаты, чтобы избежать обвинений в подделке. Поэтому необходимо сохранить результаты выполнения каждой команды в одном или нескольких файлах на безопасном носителе.

Если результаты команды нужно сохранить в файле на USB или 3,5-дюймовом диске, достаточно вставить диск в соответствующий накопитель на пораженной машине. После каждой команды следует указать символ перенаправления >> и имя файла, в котором будут храниться результаты. Например, чтобы записать результат команды Date в файл с именем command_output.txt на диске USB в накопителе J, нужно ввести с клавиатуры

date /t >> J:command_output.txt

Следующая команда записывает результат команды Date на 3,5-дюймовом диске в накопителе A:

date /t >> A:command_output.txt

Необходимо всегда использовать символ перенаправления >> (который присоединяет данные), а не символ > (который перезаписывает данные). Иначе можно потерять собранные ранее сведения.

Экран 1. Образец вывода команды PromiscDetect

Если для хранения данных на сервере сбора информации используется Netcat, нужно применить другую процедуру. Чтобы настроить Netcat для записи результатов команды в файл с именем command_output.dat, следует выполнить на сервере команду

nc -L -p 5000
>> command_output.dat

Команда напечатана на двух строках, но в D:cmd.exe ее нужно вводить в одной строке. То же относится к другим многострочным командам в данной статье. В этой команде -p 5000 указывает порт, по которому ведется прослушивание, а параметр -L заставляет Netcat продолжать прослушивание до тех пор, пока прослушивающая команда не будет отменена (закрыт сокет) нажатием на клавиши Ctrl+C. После того как Netcat будет настроен в качестве прослушивающего сервера, можно посылать данные с пораженной машины на прослушивающий сервер с помощью такой команды, как

date /t | nc 192.168.1.100 5000

Символ | указывает, что результаты команды Date нужно послать на прослушивающий сервер с заданным IP-адресом (в данном случае 192.168.1.100 5000). Чтобы закрыть сокет, следует нажать клавиши Ctrl+C. Команда

nc -e «date /t» 192.168.1.100 5000

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

Команды Cryptcat аналогичны командам Netcat, но с Cryptcat следует использовать параметр -k, чтобы изменить ключ шифрования. По умолчанию ключ — metallica. На пораженной машине вводится команда

date /t | cryptcat
192.168.1.100 5000
-k «our_little_secret»

Из-за ошибки в Windows NT параметр -e команды Cryptcat работает некорректно, поэтому не следует автоматически закрывать сокет на машинах NT. На прослушивающем сервере используется такая команда, как

cryptcat -L -p 5000
-k «our_little_secret»
>> command_output.dat

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

Экран 2. Образец вывода команды Fport
  1. Ввод текущей даты и времени в целях документирования.
    date /t
    time /t
    
  2. Команда PsInfo вводит информацию о локальной системе, в частности о версии операционной системы и времени работы, в целях документирования.
    psinfo.exe
  3. Команда ipconfig.exe позволяет получить IP-адрес и сетевые данные для разнообразных целей документирования.
    ipconfig /all
  4. С использованием команды PromiscDetect следует отыскать в машине сетевые адаптеры, работающие в режиме приема всех пакетов.
    promiscdetect.exe

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

  5. Утилита arp.exe выдает список компьютеров, которые в последнее время обменивались данными с пораженной машиной.

    Несколько слов о том, как компьютеры обмениваются данными в среде Ethernet. Когда одна машина обращается к другой по протоколу TCP/IP, компьютер, инициирующий связь, должен получить адрес MAC или адрес Ethernet, целевого компьютера. Для этого первый компьютер запрашивает адрес целевой машины через протокол ARP (Address Resolution Protocol). Целевой компьютер на короткое время сохраняет запросы в кэше, чтобы снизить нагрузку на канал связи. Таким образом, в кэше ARP хранятся сведения о машинах, с которыми целевой компьютер связывался в последние несколько минут, в том числе IP-адрес и MAC-адрес компьютеров, но нет никаких данных о переданной информации. Операционная система очищает кэш ARP примерно через каждые две минуты и при перезагрузке компьютера, но по свежим следам в кэше можно найти полезную информацию. Для запуска arp.exe следует ввести команду

    arp.exe -a
  6. Проверка таблицы маршрутизации с использованием netstat.exe. Взломщик, овладевший машиной, мог принудительно направлять пакеты с других компьютеров через пораженный компьютер для анализа. Для запуска netstat.exe следует выполнить команду
    netstat.exe -r

    Для анализа результатов команды необходимо иметь статистику работы сети. Лишь зная нормальное состояние сети, можно заметить что-то необычное. Кроме того, нужно учитывать, что и сама машина могла транслировать пакеты.

  7. Проверка NetBIOS с помощью команды nbstat.exe. Команду nbstat.exe следует запустить трижды, каждый раз с новым ключом: -c (выводит содержимое кэша имен NetBIOS), -s (показывает сеансы клиента и сервера) и -n (выводит список локальных имен NetBIOS). Например, команда для считывания содержимого кэша выглядит следующим образом:
    nbtstat.exe -c

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

  8. Поиск открытых файлов в сети с помощью команды PsFile.
    psfile.exe

    Распечатайте список открытых файлов.

  9. Поиск подозрительных портов с использованием команды Fport.
    fport.exe

    На экране 2 показаны результаты выполнения команды Fport на моей рабочей станции. Для анализа результатов Fport важно хорошо знать сеть. Fport составляет список портов прослушивания каждого процесса, но эта информация бесполезна, если администратор не знает обычной картины. Как правило, рабочая станция прослушивает порты 135, 137, 138, 139 и 445. Мой браузер Mozilla работает с портами 1034 и 1035, а AOL Instant Messenger (AIM) — через порт 5180.

    Список портов и их назначений находится в каталоге %systemroot%system32driversetcservices. Однако сам факт присутствия порта в файле services не означает, что он используется легальной программой. «Троянские кони» могут замаскироваться под легальные программы. Список «троянских коней» и их портов можно найти по адресу http://www.simovits.com/trojans/trojans.html. Щелкнув на имени «троянского коня», можно получить подробную информацию о нем, в том числе об именах файлов, а также о выполняемых им действиях и разделах, в которых он скрывается в реестре.

  10. Если с помощью Fport был обнаружен подозрительный порт и нужно проанализировать программу, которая открыла его, можно воспользоваться утилитой PMDump. Вместе с командой PMDump вводится два аргумента: PID исследуемого процесса и имя файла, в котором будут сохранены данные из памяти процесса. Например, чтобы скопировать информацию из памяти процесса AIM (экран 2) в файл с именем aim_binary.img, следует ввести команду
    pmdump.exe 1156 aim_binary.img

    Простого способа напрямую получить эти данные и передать их в Netcat или Crypcat не существует.

  11. Для более глубокого исследования памяти можно создать образ всей физической памяти машины с помощью команды dd.exe. Пространство, занимаемое образом, равно размеру памяти. Утилита dd.exe в инструментальном наборе настроена на работу с физической памятью машин Windows. В команде dd.exe используются два аргумента: if=filename (filename — имя входного файла) и of=filename (filename — имя выходного файла). Чтобы получить только образ памяти, следует указать .PhysicalMemory вместо имени входного файла. Например, команда
    dd.exe if=.PhysicalMemory
    of=J:output.img
    

    записывает образ физической памяти пораженной машины в файл с именем output.img.

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

    md5sum.exe output.img

    Чтобы исследовать содержимое памяти в выходном файле, можно задействовать утилиту Strings

    strings.exe output.img
    или
    bintext.exe

    для вывода всех ASCII-строк. BinText — программа с графическим интерфейсом. На начальном экране следует выбрать Browse, затем Go, чтобы увидеть строки. Как показано на экране 3, с помощью BinText можно отыскать конкретную строку. Поиск в памяти занимает некоторое время, но помогает в диагностике. Взломщики часто пользуются стандартными инструментами, которые не скрывают следов своей деятельности. Поэтому нередко удается обнаружить такие строки, как rootkit, указывающие на присутствие копии системного двоичного файла, сделанной «троянским конем».

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

  12. Программа PsLoggedOn выдает список всех пользователей, зарегистрированных в данный момент на пораженном компьютере. Команда имеет вид
    psloggedon.exe

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

  13. Команда PsList позволяет получить список всех активных в данный момент процессов.
    pslist.exe

    Представляет интерес второй столбец результатов команды, в котором указан PID каждого процесса. Если обнаружен подозрительный PID, следует получить образ памяти процесса с помощью утилиты PMDump, а затем проанализировать его. Утилита ListDLLs полезна для проверки подозрительного процесса, так как ее можно задействовать для показа DLL, загружаемых подозрительным процессом. В качестве аргумента для команды listdlls.exe можно использовать PID или имя (даже неполное имя) процесса. Например, показать DLL, загруженные процессом AIM, можно с помощью команды

    listdlls.exe 1156

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

    listdlls.exe -d msdll.dll

    С помощью утилиты Handle, похожей на команду lsof из Unix, можно определить файлы, открытые подозрительным процессом. В качестве аргумента для команды handle.exe используется имя процесса, например

    handle.exe -p AIM

    Разрешается применять неполное имя, но не PID. Если не указать аргумент, то Handle выдает информацию обо всех процессах.

  14. Команда Autoruns выдает список всех программ и DLL, запускаемых при начальной загрузке. Эта информация полезна для поиска программ, открывающих «заднюю дверь».
    autoruns.exe
  15. С помощью утилиты PsService можно получить список всех активных служб и информацию об их состоянии. Иногда таким образом удается найти следы «троянского коня» или нарушения политики безопасности. Инструмент также помогает определить причину несанкционированного проникновения, например уязвимую службу.
    psservice.exe
  16. Если в буфере обмена содержится полезная информация, то извлечь ее можно с помощью утилиты pcclip.exe. Для этого нужно ввести команду
    pclip.exe
  17. На данном этапе собраны все данные, необходимые для начала анализа пораженной машины. Теперь необходимо составить список всех использованных команд. Сделать это можно с помощью утилиты doskey.exe. Команда выглядит следующим образом
    doskey /history
  18. . Следует повторить команды, выполненные на этапе 1, чтобы записать текущие дату и время.
  19. С помощью утилиты Md5sum нужно получить контрольные суммы всех файлов, в которых были сохранены результаты выполнения команд. Для некоторых файлов контрольные суммы уже вычислены. Контрольные суммы следует сохранить в отдельном файле и распечатать его копию, чтобы впоследствии доказать, что собранные данные не были подтасованы.
Экран 3. Поиск последовательностей символов в утилите BinText

Продолжение процесса сбора информации

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

Матт Леско (matt@advancedatatools.com) — системный администратор компании Advanced DataTools в Аннадейле, шт. Вирджиния