Содержание
Тот, кто занимается форензикой, знаком с тулзой Scalpel, но кроме острого скальпеля могут понадобится и другие инструменты для сбора и анализа системных событий. Таким инструментом является Plaso.
Еще по теме: Лучшие дистрибутивы для криминалистического анализа
Сегодня мы с вами посмотрим на пример использования очень эффективной утилиты, дружба с которой открывает криминалисту широкие возможности: позволяет взять след киберпреступника и описать его приключения в исследуемой системе. Даже если злоумышленник окажется осторожным и попытается замести за собой следы, далеко не всегда это поможет ему.
Сбор и анализ системных событий с помощью Plaso
Plaso — это инструмент форензики для анализа и извлечения временных интервалов (агрегации таймстапов).
Установка Plaso
Для установки Plaso не требуется особых навыков. Можно это сделать клонируя репозиторий или использовать pip.
1 2 |
$ sudo apt-install python3-pip $ pip install plaso elasticsearch |
Теперь установим все необходимые зависимости:
1 |
$ pip install -r requirements.txt |
В файле requirements.txt нет опциональных зависимостей. Исправляем это дело командой:
1 |
$ pip install chardet fakeredis mock |
Установка на Windows требует большей возни потому, что надо дополнительно установить в систему Build Tools for Visual Studio. Но это решается просто, с помощью установочного пакета Visual Studio 2017 (именно с ним лично у меня все завелось).
Начинаем установку и выбираем в разделе Individual components компонент VC++ 2015.3 v14.00 (v140) toolset for desktop. После чего все зависимости установятся через pip.
Набор инструментов
Plaso состоит из несколько полезных утилит, которые можно найти в каталоге tools.
image_export — тулза для извлечения из устройства или его образа файлов по различным критериям: начиная c расширения и путей, заканчивая сигнатурами и временем создания или модификации. Кроме того, эта утилита после извлечения файлов создаст файл hashes.json, в котором будут находится хеш‑значения всех извлеченных файлов для будущей проверки, например на сервисе онлайн проверки на вирусы VirusTotal.
Примеры запуска:
1 |
py image_export.py disk1.dd |
Параметры --names, --extensions и --date-filter не должны вызвать у вас никаких труностей, рассмотрим подробнее только извлечение по сигнатурам.
1 |
py image_export.py --signatures list |
Данная команда выведет все описанные в data\signatures.conf сигнатуры, которые можно найти среди исследуемых файлов для извлечения. Разумеется, в конфиге записаны только базовые сигнатуры на все любой жизненный случай, но вы можете самостоятельно добавить в конфиг строку с необходимой для вас специфической сигнатурой файла, важно при этом — выбрать уникальный идентификатор.
Для извлечения всех файлов Windows PE с использованием готовой сигнатуры exe_mz:
1 |
py image_export.py --signatures exe_mz disk1.dd |
log2timeline — основной инструмент, с которого, собственно, двенадцать лет назад все и началось. Он используется для извлечения разных событий из файлов, каталогов (например, точек монтирования), устройства или его образа. В результате работы утилита формирует файл в формате Plaso, который в дальнейшем будет использоваться для анализа.
Вот как выглядит стандартный запуск:
1 |
py log2timeline.py --storage-file output_file disk1.dd |
Все виды файлов, из которых может быть извлечена полезная для формируемого таймлайна информация, находятся в каталоге test_data, а непосредственно сами парсеры размещены в каталоге plaso/parsers. Так что, если понадобится доработать либо разработать новый парсер для какого‑то особенного формата файла, вы знаете, где начинать копать!
Отдельно стоит отметить использование опции --process-archives. Она может сильно увеличить время работы утилиты, однако, как вы понимаете, в каком‑нибудь архиве может быть случайно обнаружена важная улика, забытая злоумышленником.
Замечательное свойство log2timeline — интеграция с правилами YARA. Чтобы добавить в результаты таймлайна сведения о срабатываниях правил YARA, необходимо запустить инструмент с ключом --yara_rules.
1 |
py log2timeline.py --storage-file output_file --process-archives --yara_rules rules.yar disk1.dd |
где rules.yar — предварительно подготовленный вами файл с правилами YARA.
Если предварительно добыть опенсорсные правила (к примеру, от Clam AV) и сконвертировать их в формат YARA, то в итоге из незамысловатой утилиты log2timeline начинает превращаться в мощный инструмент.
pinfo — утилита для вывода информации о содержимом файла Plaso, например версиях, парсерах, типах событий, попавших в отчет, их количестве и ошибках.
При анализе бывает полезна опция -v, которая дополнительно выведет подробную информацию об имени компьютера, точную версию ОС и информацию о пользователях.
psort — утилита, которая позволит выполнить дополнительную обработку и сконвертировать полученный ранее файл Plaso в формат, в котором будет вестись его дальнейший анализ. При его запуске не забывайте использовать опцию --output-time-zone для того, чтобы потом в ходе анализа к временным меткам (которые по умолчанию в UTC) не прибавлять нужный часовой пояс.
Запуская утилиту с опцией --analysis plugin и на основании обработанных событий вы получите высокоуровневую информацию от плагина, например о наличии среди всех исследуемых файлов вредоносов, когда‑либо загруженных на VirusTotal.
Причем запускать этот плагин можно без боязни слить в облако какую‑то чувствительную для заказчика информацию, поскольку проверка идет исключительно по хеш‑значениям, посчитанным на этапе сбора данных. Понятно, что для работы с этим плагином потребуется API-ключ от сервиса.
Также есть поддержка работы с фреймворком Viper, в котором у вас могут быть собственные накопления малвари.
Опции --slice и --filter позволяют выбрать определенные события в диапазоне нескольких минут от момента интересующего вас события, однако их подробно рассматривать в этой статье не будем.
Конвертировать события можно в разные форматы, в том числе в CSV, XLSX и JSON, для выбора формата используйте опцию -o.
psteal — утилита, объединяющая в себе функции log2timeline и psort. Лично я пользовался ей всего один раз, и то чисто из любопытства. Список опций небольшой. Однако как экспресс‑средство в каких‑то определенных ситуациях вполне может подойти.
Еще по теме: Особенности форензики в Windows 10
Использование Plaso
Теперь, когда примерно понятно, для чего козе все эти музыкальные инструменты, давайте попробуем их в деле.
Для начала запустим сбор логов:
1 |
py log2timeline.py --storage-file "d:\Work\!Статья\test_case_1.plaso" "d:\Work\!Статья\dd\disk1.dd" |
Если Plaso обнаружит теневые копии томов, то он радостно отрапортует о том, что готов выгрести все доступные события в том числе и из них. Соглашаемся со всеми его предложениями и идем пить пиво. Отведенное на это время зависит от ресурсов вашего компьютера и объема данных, которые поступили на вход.
Когда компрометация системы была давно и злодей долго в ней копошился, а в конце почистил за собой логи, из теневых копий иногда все равно можно вытащить много информации, даже без использования Sysmon.
Именно поэтому злодеи очень любят при отходе запускать еще и криптолокер. Однако это в большинстве случаев далеко не так эффективно, как кажется на первый взгляд.
По окончании работы утилиты (в моем случае сбор логов занял примерно час) можно переходить к анализу.
Давайте запустим pinfo и посмотрим, что он скажет нам об исследуемом образе.
1 |
py pinfo.py -v d:\Work\!Статья\test_case_1.plaso |
Кроме параметров, с которыми выполнялся сбор данных из образа, мы видим список всех парсеров и плагинов, которые были применены. Если вдруг какого‑то типа событий в образе обнаружить не удалось, хотя вы уверены, что они там точно должны присутствовать, придется перезапустить log2timeline и принудительно указать интересующий вас парсер (такое, например бывает, если нужно собирать логи из системы в формате evt).
Также pinfo определил версию установленной ОС и ее хостнейм и вывел информацию о пользователях и путях к их домашним каталогам. Эта информация может быть полезна в случаях, если какой‑то домашний каталог хранится на удаленном сервере. Тогда придется дополнительно скармливать Plaso отдельно скопированную с сервера папку с пользовательским каталогом.
Итого за почти что час работы Plaso вытащил из образа 1 116 040 событий. Глядя на вывод pinfo, уже сейчас можно примерно предположить, сколько событий из какой категории нам предстоит проанализировать и какие модули для автоматического анализа дадут наиболее интересный результат.
Для сравнения давайте посмотрим на диаграмму событий, извлеченных из образа, в котором я затирал логи с помощью clearev. Как видите, Plaso смог извлечь всего на три тысячи меньше событий типа winevtx, и если посмотреть разницу в диаграммах, то станет понятно, что картина изменилась не сильно, свидетельств компрометации системы, вероятно, стало даже больше.
Давайте запустим psort и попробуем поработать с результатами его анализа безо всяких расширений.
1 |
py psort.py --output-time-zone Europe/Moscow --output-format l2tcsv -w d:\Work\!Статья\test_case_1.csv d:\Work\\!Статья\test_case_1.plaso |
Один взгляд на CSV объемом более 300 Мбайт вызывает у неискушенного зрителя смертельную тоску. Пока немного попрокрастинируем и посмотрим, что еще можно сделать, прежде чем вставлять себе спички в глаза.
Предположим, что пользователь компьютера внезапно вспомнил, как 25-го числа текущего месяца ему поступило очень заманчивое предложение получить от Илона Маска биткойн, ссылка на который пришла по почте.
Давай посмотрим, чем нам может помочь эта информация и скрипт image_export:
1 |
$ py image_export.py --date-filter "atime,2021-08-25 09:00:00,2021-08-25 18:30:00" --signatures exe_mz -w d:\Work\!Статья\extracted d:\Work\!Статья\dd\disk1.dd |
Внезапно в каталоге Downloads пользователя обнаруживается исполняемый файл с крайне подозрительным названием free_bitcoins_from_Musk.exe. Начнем поиски в нашем таймлайне именно с этого события. Воспользуемся grep.
1 |
$ grep free_bitc test_case_1.csv > free_bitc.csv |
Так уже намного лучше. Я позволил из полученного вывода в 55 событий отобрать шесть наиболее любопытных.
В списке событий перед нами видно, что любопытный пользователь в 16:07:44 с помощью браузера Edge действительно скачал подозрительный файл и спустя пару мгновений запустил его. Следующим событием мы наблюдаем установление сетевого соединения от запущенного процесса на удаленный адрес 192.168.79.131:7788. И буквально через 30 секунд видим взаимодействие приложения с процессом vmtoolsd.exe.
Такая последовательность событий очень характерна и свидетельствует о том, что запущенный в контексте процесса Meterpreter успешно перекочевал в контекст процесса дополнений гостевой ОС. Последняя запись на скрине свидетельствует о том, что в 17:08:59 при очередной попытке входа в систему шелл был заново запущен. То есть, пока пользователь не заподозрил что‑то неладное, наш злодей успел закрепиться в системе одним из известных ему способов.
Для интереса ищем интересующие нас шесть событий в таймлайне с «затертыми следами» и внезапно обнаруживаем, что все шесть из шести событий оказались на месте. It’s a trap!
Как минимум мы получили внятные временные отрезки, в которые шло проникновение в систему, и можем теперь отобрать события за этот период.
Теперь заново запустим psort, только в этот раз добавим фильтром интересующие нас отрезки времени. Не забывайте, что в данном случае мы фильтруем с указанием времени в UTC.
1 |
py psort.py --output-time-zone Europe/Moscow --output-format dynamic -w d:\Work\!Статья\test_case_1_attack_time.csv -q d:\Work\\!Статья\test_case_1.plaso "date < '2021-08-25 14:20:00' and date > '2021-08-25 13:07:00'" |
Ждем пару минут и смотрим на результат.
Неплохо, мы сумели уменьшить физический объем в 16 раз, а смысловой в 20 раз (57 тысяч событий против 1,1 миллиона).
Немного поскроллим этот файл.
Начиная примерно с записи под номером 1500 и до 30 000 мы наблюдаем одни и те же события. Такая картина свидетельствует о том, что наш противник с использованием автоматического инструмента обходил содержимое диска в поисках чего‑то его интересующего (подсказка: файлов с подстрокой passw). Понимая природу этих событий, их можно скрыть из анализа, тем самым снизив нагрузку на себя любимого еще раза в два.
Дальнейший анализ сводится к фильтрации событий по категориям и внимательному анализу их в цепочках.
В качестве домашнего задания можете поиграться с плагином tagging для psort.
Заключение
В следующий раз мы поговорим о более высокоуровневых инструментах анализа таймлайнов, которые генерирует Plaso.