По скрытым следам. Расследование инцидентов в Unix и WindowsВ случае успешного взлома сервер может быть использован для рассылки спама, распространения вареза, организации атак на другие хосты, кроме того, могут быть украдены или уничтожены важные корпоративные данные. Конечно, своевременный бэкап позволит восстановить все в первоначальное состояние, но не факт, что через некоторое время инцидент не повторится вновь. Поэтому важно научиться проводить компьютерные расследования и определять, что же в действительности произошло. Компьютерные расследованияНемедленное восстановление системы из резервных архивов для продолжения нормальной работы сервера — это самая распространенная ошибка. Даже если начальник грозно нависает над головой, а телефон ломится от звонков возмущенных клиентов, следует на некоторое время остановить сервер, сохранить его состояние на другой носитель, чтобы затем можно было спокойно произвести расследование всех обстоятельств. Зачем это нужно? Во-первых, чтобы ситуация не повторилась, ведь обновление ПО, антивирусных баз и т.д. отнюдь не гарантирует того, что хакер не использует свой способ для повторного проникновения. Во-вторых, нельзя четко сказать, когда произошел взлом, поэтому, казалось бы, «нормальная» архивная копия уже может содержать «черный ход». И, наконец, собранная инфа поможет узнать, был ли это взлом вообще: может, это системная или человеческая ошибка, а может, происки инсайдера. Процесс расследования (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 (www.techpathways.com), EnCase Forensic от Guidance Software (www.guidancesoftware.com) и The Forensic Toolkit (www.accessdata.com/forensictoolkit.html). Некоторые проекты предлагают демки ограниченных версий. Например, ProDiscover Basic Edition Freeware, которая доступна для закачки на сайте Technology Pathways, не имеет сетевых функций. Но, тем не менее, есть ряд продуктов, распространяемых под Freeware-лицензией, возможностей которых вполне достаточно для проведения полного анализа. Более того, существуют специализированные дистрибутивы Linux, где все нужные утилиты уже собраны и настроены. Например, DEFT Linux (deftlinux.net), FCCU GNU/Linux Forensic Boot CD (lnx4n6.be), Helix3 (www.e-fense.com/helix) и другие. Кстати, коммерческий вариант Helix3 (www.e-fense.com/helix3pro.php) в своем роде уникальный дистрибутив, так как содержит утилиты для Linux, Windows и Mac OS X. Набор Sleuth KITСамой первой и поэтому известной утилитой, написанной для Unixсистем, является TCT (The Coroner's Toolkit, www.porcupine.org/forensics/tct.html). TCT разработан двумя авторами SATAN — Dan Farmer и Wietse Venema — и представляет собой набор утилит, при помощи которых можно произвести как Dead, так и Live анализ Unixсистемы. Некоторое время проект практически не развивался, поэтому в специализированных дистрибутивах его заменил The Sleuth Kit (sleuthkit.org). 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*) — работа с файловой системой; Попробуем найти удаленный файл. Для начала запустим утилиту fls, чтобы получить имена файлов и каталогов, в том числе и удаленных. Утилита имеет несколько дополнительных параметров, из них стоит отметить: -a — вывод имен файлов, начинающихся с точки (. и ..), их очень любят использовать взломщики для маскировки;
Первая буква показывает тип файла, т.е. r-egular, d-irectory, l-ink, s-ocket или не определен (?). Знак «*» на второй позиции показывает, что файл не распределен (удален). Теперь запросим больше информации о конкретном inode:
Чтобы просмотреть данные, соответствующие inode, используем icat:
Аналогично за вывод данных в конкретном блоке отвечает утилита blkcat. Для примера просмотрим один блок и сохраним несколько блоков, принадлежащих файлу:
В сформированном образе адрес блока будет отличаться от исходного, поэтому вручную найти его непросто. Но это и не требуется, чтобы упросить поиск, можно воспользоваться специальным калькулятором — blkcalc. Еще одна полезная команда «blkls /dev/sda1» позволит просмотреть содержимое блоков выбранного раздела диска в удобочитаемом виде. По умолчанию выводятся только нераспределенные блоки данных (соответствует ключу '-A'). Сохранив вывод blkls в файл, затем можно использовать утилиты strings и grep для поиска нужных фрагментов.
Теперь в sda1.str находятся все текстовые строки из образа/ раздела вместе с данными, указывающими на смещение относительно начала блока. В Sleuth Kit v1.63 появилась утилита mmls. Примечательна она тем, что выводит таблицу разделов и показывает, какие сектора не используются. Таким образом можно увидеть «спрятанные» данные:
Описание утилит можно продолжать долго, лучше один раз запустить и увидеть результат. Но все, о чем говорилось, позволяет лишь собрать данные, а их анализ целиком возлагается на плечи исследователя. Для того чтобы найти в нескольких гигабайтах информации инструменты взломщика, потребуется немало времени и опыта. Здесь на помощь приходит утилита hfind из комплекта TSK, которая умеет рассчитывать хеш-функции файлов и сравнивать результат с заранее созданной базой. База может формироваться как самостоятельно при помощи md5sum, так и на основе библиотеки NSRL (National Software Reference Library, www.nsrl.nist.gov). Проект NSRL поддерживается рядом солидных организаций, среди которых — Национальный Институт Американского Министерства юстиции (NIJ), Национальный Институт Стандартов и Технологии (NIST) и так далее. В NSRL собраны в справочный информационный набор RDS (Reference Data Set, полный комплект занимает 4 CD по 300 Мб каждый) профили различного ПО — хеш-функции (MD5 и SHA-1), данные о файле (происхождение, имя, размер и т.п.), что позволяет однозначно идентифицировать файл, даже если он был переименован. Кстати, одной из основных задач этой библиотеки является поиск программ при расследовании преступлений, направленных против интеллектуальной собственности. Утилита hfind проверяет значения хеш-функции в базе данных, используя двоичный алгоритм поиска, поэтому она работает быстрее, чем штатный grep, но вначале следует создать индексный файл (ключ '-i'):
В результате в текущем каталоге появится NSRLFile.txtsha1. idx. Теперь можно пробить любой файл по базе:
Для примера создадим md5-сумму важных системных файлов:
Проверяем результат командой «cat system.md5», генерируем индексный файл:
Теперь можно периодически проверять наличие измененных файлов в контролируемых каталогах:
Как видишь, /bin/bash изменился со времени создания базы, его контрольная сумма не совпадает. И, наконец, скрипт sorter. Он умеет анализировать образ (для этого запускает fls и icat), а также находит и распознает файлы (при помощи file). Если задействована база NSRL, сортировщик может определить сразу и характер файла (опасный или нет). Опасные файлы автоматически заносятся в отдельный файл — alert.txt (если использован параметр '-s', то будет сохранено и содержимое файла). Создаем каталог, куда будет сохраняться результат, и запускаем анализ раздела или dd-образа:
По окончании работы в подкаталоге data появится несколько файлов с расширением txt:
Имя соответствует категориям найденных файлов:
В sorter.sum найдем общий итог по поиску. Веб-интерфейс AutopsyУтилит в составе Sleuth Kit более чем предостаточно, и это вызывает некоторые затруднения не только в их изучении, но и использовании даже у бывалых спецов. Но не беда, так как в дополнение к TSK был создан инструмент визуализации — Autopsy Forensic Browser (www.sleuthkit.org/autopsy), поддерживаемый тем же автором. Autopsy для своей работы требует наличия TSK и желательно NSRL. После запуска в командной строке копируем выданный URL в веб-браузер ( Первым делом следует создать базу данных dd-образов, предварительно взятых с различных дисков и систем. Для этого нужно нажать ссылку «New Case» и заполнить название и описание (можно указать несколько вариантов, чтобы упростить поиск). Далее нужно добавить сведения об узле, с которого снят образ. Жмем «Adding a New Host» и заполняем данные — имя компьютера, описание, временной пояс, путь к базам NSRL. И, наконец, через «Adding a New Image» подключаем образ — задаем путь к файлу, тип (диск, раздел). После этого можно выбрать: копирование образа, перемещение образа, создание симлинка. В следующем окне указываем файловую систему и точку монтирования. По окончании можно начинать работу. Например, извлечь строковые данные, отдельные блоки или удаленные файлы можно в «Image Details». Здесь же получаем всю необходимую информацию о данных, содержащихся в тех или иных блоках (ASCII, Hex, String). При необходимости добавляем комментарий к нужному участку. Аналогично можно вывести список файлов, данные о состоянии inode и прочую информацию. Сторонними разработчиками создана альтернатива Autopsy — PTK (ptk.dflabs.com), обладающая большим удобством в использовании и расширенными возможностями. В мире оконУтилиты Windows Sysinternals (go.microsoft.com/?linkId=6013253), созданные известным программистом Марком Руссиновичем, должны быть обязательно включены в набор инструментов исследователя. Чтобы не скачивать их по отдельности, лучше забрать все одним пакетом — 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 Гб в указанный файл.
Полученный файл формата dd проверяется затем при помощи MD5. Собранные данные можно проанализировать при помощи любой утилиты, работающей с двоичными данными. Подобной функцией обладает и EnCase, но он, как мы помним, не бесплатен. Запускать MDD следует с правами администратора. MDD — не единственная утилита с подобной функциональностью, немного погуглив, можно найти еще с десяток решений, например, win32dd (win32dd.msuiche.net), PTFinder (computer.forensikblog.de/en/topics/windows/memory_analysis), Volatility Framework (www.volatilesystems.com). Последняя написана на Python и может быть запущена на все платформах, на которых поддерживается этот язык — Linux, xBSD, Windows, Mac OS X. После запуска Volatility Framework соберет данные о модулях ядра, запущенных процессах, открытых сетевых соединениях и сокетах, файлах и DLL, используемых процессами. Утилита командной строки Windows Forensic Toolches (www.foolmoon.net/security/wft) позволяет упорядочить и автоматизировать процесс сбора данных, а также выдачу отчета. В своей работе WFT использует другие утилиты: системные и дополнительные от Microsoft, Sysinternals, Forensic Acquisition Utilities (www.gmgsystemsinc.com/fau), diamondcs (www.diamondcs.com.au) и так далее. Все настройки сохраняются в файле wft.cfg. Утилита работает в интерактивном режиме, задавая последовательно ряд вопросов, на выходе исследователь получает отчет в виде текстового или HTML файла. В незарегистрированной версии отключены многие удобства, например, не работает параметр '-fetchtools', который позволяет быстро сформировать рабочую среду, автоматически скачав нужные файлы. Хотя при наличии диска Helix все недостающие инструменты можно взять с него (лежат в подкаталоге IR). Links• 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. |