Большая охота. Практикуемся в Threat Hunting
Первый этап реагирования на ИБ‑инцидент — это обработка событий и поиск в них артефактов. Затем специалист строит таймлайны и определяет вектор и время атаки. В этой статье мы поговорим об инструментах, которые облегчают этот труд и помогают в расследовании, в особенности когда данных очень много.
Иногда быстро отделить зерна от плевел просто. Достаточно воспользоваться подручными средствами или утилитами вроде EvtxECmd и Timeline Explorer.
Но бывает, что задача серьезнее: событий на входе много, и обработать такой объем данных быстро или найти вектор (и, что часто сложнее, определить время инцидента) довольно трудно. Больно смотреть на ИБ‑специалистов, которые используют для таких задач нативные инструменты, например предустановленный журнал просмотра событий Windows.
Вместо этого стоит вооружиться чуть более продвинутыми инструментами. Давай разберем несколько утилит и их особенности, а заодно посмотрим на них в действии — на примерах событий журналов Windows версий старше 7.
Знакомиться будем со следующими утилитами для Threat Hunting и Incident Response:
SIGMA
О Sigma-правилах и их структуре уже написана не одна статья, поэтому очень коротко: Sigma — опенсорсный проект, который ведется с 2017 года и позволяет писать правила (сигнатуры) для обнаружения вредоносной активности. Сейчас общедоступные правила покрывают более 3 тысяч техник и тактик атакующих. Обнаружение вредоносной активности в инструментах, о которых мы будем говорить (кроме DeepBlueCLI), тоже основано на Sigma-правилах. Они позволяют быстро находить аномалии и вредоносную активность в большом количестве событий. Прежде чем приступать к утилитам, скачаем Sigma-правила:
git clone https://github.com/SigmaHQ/sigma
DEEPBLUECLI
Начнем, пожалуй, с самого простого из выбранных инструментов. DeepBlueСLI — модуль PowerShell, разработанный Эриком Конрадом для поиска угроз в журналах событий Windows. В отличие от других инструментов в этой статье, механизм обнаружения здесь основан не на Sigma-правилах, а на обычных проверках наличия тех или иных артефактов и количестве срабатываний для определенных событий (например, попыток неуспешного входа).
На основе этих данных можно обнаруживать, например, подозрительные манипуляции с учетной записью (создание, добавление в группы, password spraying и прочее).
.\DeepBlue.ps1 .\evtx\password-spray.evtx
Здесь заметно, что были попытки войти в 41 уникальную учетную запись с одним паролем. И заодно мы видим подробное описание результата.
Еще можем глянуть активность в командной строке и оболочке PowerShell (есть поиск обфусцированных скриптблоков, запусков через PsExec и другие возможности).
.\DeepBlue.ps1 .\evtx\psattack-security.evtx | Out-GridView
Также DeepBlue позволяет проводить аудит служб, то есть искать попытки создания служб и другие подозрительные события.
Полученные после обработки данные можно вывести в разных удобных форматах для дальнейшего анализа: CSV, Out-GridView, Format-Table, HTML, JSON, XML.
Кроме того, утилита позволяет проводить исследование на работающей системе, без экспорта журналов событий.
Среди достоинств DeepBlue — возможность добавлять новые проверки непосредственно в код сценария на PowerShell. К примеру, можно с легкостью дописать детект password spraying в Active Directory (события 4771 и 4768).
Но из недостатков я бы выделил отсутствие возможности указать в качестве аргумента путь к директории с журналами. Это значит, что таким инструментом будет сложно пользоваться, если объем логов занимает несколько гигабайтов. Зато следующая утилита нам в этом поможет.
CHAINSAW
Chainsaw — инструмент для первичного реагирования на инциденты и поиска артефактов в журналах событий Windows, таблицах Master File Table и System Resource Utilization Monitor. Для автоматизации поиска угроз используются Sigma-правила, но этим дело не ограничивается. Можно искать отдельные слова, используя регулярные выражения, прочесывать события при помощи кастомных правил, использовать кастомные правила для агрегации полученных записей о срабатывании. Есть другие интересные фичи, которые я покажу дальше.
Попробуем возможности на практике. Представь, что в рамках реагирования на инцидент нам отгрузили события в количестве 333 штук (131 Мбайт). Изучать журналы по отдельности имеет смысл, только если мы уже знаем, какой вектор атаки и когда она была совершена. Это не наш случай. Сейчас необходимо взглянуть на ситуацию с высоты птичьего полета, поэтому воспользуемся утилитой Chainsaw в режиме охоты на подозрительные активности.
Чтобы включить режим охоты на угрозы, зададим аргумент hunt, укажем правила Sigma (флаг -s) и каталог с правилами (можно использовать как директорию, так и репозиторий на GitHub). Также нужно задать каталог с данными об инциденте (журналы событий Windows) и путь к файлу YAML для маппинга правил Sigma и событий (он нужен для сопоставления полей из сырых событий и Sigma-правил):
.\chainsaw.exe hunt CyberPolygon_Forensic_Artifacts\winevt\Logs/ -s ..\..\..\sigma\ --mapping ..\..\mappings\sigma-event-logs-all.yml
Видим в консоли PowerShell приветствие Chainsaw и сообщение об успешной загрузке журналов событий и Sigma-правил. Утилита работает быстро и выдает таблицу с такими столбцами:
Самое интересное здесь — это детект на основе Sigma-правил.
Например, на рисунке выше видно время, сработавшие правила детекта — Sigma Rules для событий PowerShell с EID 4104, а также путь, из которого был запущен сценарий PowerShell, и его начальное содержимое.
Важно помнить, что аудит PowerShell (события 4103 и 4104) по умолчанию отключен, рекомендуется его включать. Как это сделать, можно почитать в документации.
В конце таблицы получим список детектов по Sigma-правилам и количество проанализированных журналов (пустые журналы были отброшены).
Если мы знаем, что подозрительная активность (судя по детекту) была связана со сценариями PowerShell, а именно с событиями с EID 4104, мы с легкостью можем взглянуть на сырые события и их скриптблоки, воспользовавшись вот такой командой:
.\chainsaw.exe search -t 'Event.System.EventID: =4104' CyberPolygon_Forensic_Artifacts\winevt\Logs/
Поищем также события с EID 4103:
.\chainsaw.exe search -t 'Event.System.EventID: =4103' CyberPolygon_Forensic_Artifacts\winevt\Logs/
Получаем три совпадения и узнаём, с какими аргументами запускались сценарии.
А также наблюдаем начало тела скриптблока tmpA7Z2.ps1.
Кроме поиска по EID, можно использовать регулярные выражения. Давай попробуем найти все события, связанные с запуском найденного сценария:
.\chainsaw.exe search -e 'tmpA7Z2.ps1' c56-CyberCorp\Downloads\CyberPolygon_Forensic_Artifacts\winevt\Logs
Видим первое событие, связанное с запуском tmpA7Z2.ps1.
Давай посмотрим на весь сценарий, для этого служит флаг --full. Для удобства работы выведем содержимое в формате CSV.
.\chainsaw.exe hunt CyberPolygon_Forensic_Artifacts\winevt\Logs/ -s ..\..\..\sigma\ --mapping ..\..\mappings\sigma-event-logs-all.yml --full --csv -o c56-CyberCorp.csv
Полученный файл открываем в Timeline Explorer.
Здесь видим информацию о запуске сценария, а также текст скриптблоков.
Еще одна фича Chainsaw — возможность использовать кастомные правила для агрегации и группировки найденных артефактов. С утилитой в наборе уже идут некоторые кастомные правила (ищи их в каталоге rules): поиск срабатываний антивирусного ПО (Kaspersky, MS Defender, Sophos и прочие), хакерских техник вроде lateral movement, затирания и искажения событий и другие.
Чтобы воспользоваться этими правилами, применим дополнительный флаг -r и укажем директорию с правилами /rules:
chainsaw.exe hunt -r rules/ Lateral Movement/ -s sigma/rules --mapping mappings/sigma-event-logs-all.yml
После обработки событий получаем отдельную таблицу с событиями, свидетельствующими о горизонтальном перемещении (или подозрениях на него).
Также получили таблицу с событиями, связанными с очисткой журнала Security.
Далее видим обнаружения исключительно по общим Sigma-правилам, где в том числе нашлась служба Cobalt Srike Beacon.
На этом возможности Chainsaw не заканчиваются. Еще можно работать с Master File Table (MFT), System Resource Utilization Monitor (SRUM), выводить таймлайны событий, а после их визуализировать. Но эти функции я предлагаю тебе изучить самостоятельно. А мы тем временем познакомимся с настоящим комбайном для обработки большого количества событий — от десятков до сотен гигабайт.
YAMATO SECURITY TOOLS
Правильно и вовремя настроенная политика аудита позволяет получить много полезной информации, сократить время реагирования на инцидент и время расследования. О том, какие события необходимо собирать и какой аудит включить, можно прочитать, например, в репозитории Yamato Security. Там же ты найдешь bat-файл для активации политик аудита.
HAYABUSA
Hayabusa — утилита для быстрой генерации таймлайнов и поиска угроз в событиях.
Еще Hayabusa умеет определять геопозицию по IP, для этого добавь флаг -G (--GeoIP), но прежде необходимо создать аккаунт сервиса MaxMind. Такая возможность особенно полезна при определении нестандартных подключений. Утилита также способна анализировать систему в live-режиме.
Как и Chainsaw, Hayabusa использует Sigma-правила (с ней идет более 3500 правил), а также использует для детектирования собственные правила, написанные в виде YAML. Это почти то же самое, что и Sigma-правила, но с доработками, которые не поддерживаются Sigma. Как писать свои правила, подробно описано в документации.
Еще один плюс утилиты — вывод обработанных событий в формате, который прекрасно понимает утилита визуализации Timesketch (о том, что это за утилита и как ее развернуть, можно почитать на сайте разработчика.
Чтобы получить такой вывод, используй флаг --RFC-3339, задающий формат вывода временных меток, а также укажи профиль (-p timesketch-verbose) и вывод времени в формате UTC (флаг -U):
.\hayabusa-2.9.0-win-x64.exe csv-timeline -d E:\CyberDefenders\c56-CyberCorp\Downloads\CyberPolygon_Forensic_Artifacts\winevt\Logs --RFC-3339 -o timesketch-import_c56.csv -p timesketch-verbose -U -C -F
На выходе, кроме сработавших кастомных правил (Rule Authors), получаем имена компьютеров и оценку критичности событий.
Если событий много, их можно разделить по компьютерам и уровню критичности событий, а также тегам (теги здесь — тактики по MITRE в духе attack.<tech_name>, например attack.persistence). Таким образом работу легко распределить между членами команды реагирования.
Информация о срабатываниях агрегируется в таблицу с уровнями критичности и видом детекта, по которому удобно искать в Timesketch.
Загрузим получившийся отчет в Timesketch. Здесь можно искать по техникам и примененным утилитам, к примеру попробуем найти «PsExec Lateral Movement» (наименование было взято из таблицы после обработки событий в Hayabusa).
Видно таймлайн для событий и сами события. Заглянем внутрь любого из них и увидим скомпрометированный хост, EID, MitreTags и MitreTactics — что очень удобно, к тому же по всем полям можно искать в Timesketch.
Чтобы сократить время поиска вредоносной активности в большом количестве событий, можно воспользоваться флагами --proven-rules, --EID-filter, --enable-unsupported-rules. Флаг --remove-duplicate-data поменяет поля дублирующихся событий на DUP. При этом они будут учитываться, но в вывод не попадут.
Давай выведем в консоли таймлайн с частотой детекта, используя перечисленные флаги:
.\hayabusa-2.9.0-win-x64.exe csv-timeline -d Y:\Ransomware31012023\KapeEvidences\C\Windows\System32\winevt\logs --proven-rules --EID-filter --enable-unsupported-rules --visualize-timeline --remove-duplicate-data
Подпавшие под правила события окрашиваются в разные цвета из таблицы Results, а их детали можно найти над графиком.
С таким инструментом скорость обработки событий увеличивается в разы, но не стоит забывать, что выходные данные дают лишь первоначальную картину случившегося и механизм может не обнаруживать некоторые события, оставляя им уровень low.
Поэтому на основе общих правил необходимо писать свои правила детектирования и переходить к более тщательному анализу, сужая временную зону поиска. Для этого используй флаги --timeline-start, --timeline-end, --timeline-offset.
Давай сделаем это и оставим только детекты уровня critical:
.\hayabusa-2.9.0-win-x64.exe csv-timeline -d Y:\Ransomware31012023\KapeEvidences\C\Windows\System32\winevt\logs --proven-rules --EID-filter --enable-unsupported-rules --visualize-timeline --remove-duplicate-data --timeline-start "2023-02-08 00:00:00 +03:00" --timeline-end "2023-02-08 16:58:51 +03:00" -m critical
Утилита отработала в разы быстрее (на малом объеме событий будет не слишком заметно) и выдала частотный график за указанный промежуток времени, а из событий остались только те, что помечены как критичные.
Для сужения области поиска можно использовать и другие флаги, например исключить хосты или оставить только один целевой хост (для этого есть флаги --include-computer и --exclude-computer). То же самое можно проделывать и с событиями по их Event ID.
Еще один хороший прием при поиске артефактов в событиях — использовать pivot-keywords-list. На выходе получим список уникальных данных для детектирования подозрительной активности. Поля, которые будут извлекаться при поиске, можно найти по такому пути:
Hayabusa_dir\rules\config\pivot_keywords.txt
Среди полей при настройках по умолчанию будут имена пользователей, хостов, IP-адреса, процессы (LOLBINS и так далее) и другие артефакты:
.\hayabusa-2.9.0-win-x64.exe pivot-keywords-list -d Y:\Ransomware31012023\KapeEvidences\C\Windows\System32\winevt\logs
На рисунке выше выведен список процессов, которые запускались на хосте.
Еще одна фишка Hayabusa — это наличие интеграции с Velociraptor, что позволяет собирать и сразу анализировать артефакты.
Также есть возможность работать не только с файлами с расширением .evtx, но и с файлами в формате JSON и JSONL. Чтобы найти другие интересные возможности Hayabusa, рекомендую заглянуть в ее богатую документацию. Мы же перейдем к следующему инструменту, созданному в Yamato Security.
TAKAJO
Прежде чем использовать Takajo, нужно подготовить таймлайны при помощи Hayabusa:
.\hayabusa-2.9.0-win-x64.exe json-timeline -d KapeEvidences\C\Windows\System32\winevt\logs -L -o ramsomware_timeline.jsonl
Теперь можно анализировать события входа в Takajo:
./takajo.exe timeline-logon -t .\ramsomware_timeline.jsonl -o ransomware_logon.csv
Забираем все IP-адреса из обработанных Hayabusa данных:
./takajo.exe list-ip-addresses -t ..\hayabusa-2.9.0-win-64-bit\cybercorp.jsonl -o cybercorp_ipaddr.txt
По умолчанию берутся только публичные IP-адреса, для включения приватных нужно использовать флаг -p.
Потом можно будет проверить эти IP на VirusTotal:
./takajo.exe vt-ip-lookup -a <YOUR_API_KEY> -I .\cybercorp_ipaddr.txt -o vt-ip-lookup.csv -r 1000 -j vt-ip-lookup.json
То же можно сделать и с другими индикаторами компрометации: доменами и хеш‑суммами исполняемых файлов (если событие было получено от Sysmon).
Takajo умеет выводить таймлайны подозрительных процессов (timeline-suspicious-processes) и строить дерево процессов на основе событий Sysmon (необходимо указать processGuid).
ВЫВОДЫ
Описанные в статье утилиты при умелом использовании позволяют существенно сократить время, нужное на реагирование и поиск угроз. Однако нельзя полагаться только на инструментарий и забывать, что техники атакующих постоянно совершенствуются, поэтому для успешного расследования правила обнаружения тоже нужно улучшать. В идеале специалист по реагированию должен уметь сам готовить и дорабатывать такие правила, а также быть в курсе новейших техник и инструментов, которые применяются атакующими.