Как сократить мартышкин труд в повседневной работе аналитика SOC
Я не встречал людей, которые любят делать одну и ту же рутинную работу. Большинству из нас хочется автоматизировать подобную деятельность, чтобы скучные и повторяющиеся операции выполняла бездушная машина. В центрах мониторинга информационной безопасности немало таких задач, особенно на первой линии. В этой статье я, Константин Грищенко, руководитель отдела мониторинга безопасности в Positive Technologies и участник открытого сообщества Security Experts Community, расскажу о том, как мы в отделе упрощаем свою работу с помощью инструмента SiemMonkey. Любой желающий может скачать его и установить в браузере.
Security Experts Community (SEC) — это открытое сообщество специалистов по ИБ, которые хотят делать мир безопаснее и помогать друг другу обеспечивать защищенность инфраструктуры. Его главная цель — развитие идеи экспертной открытости и свободная публикация знаний в сфере defensive cybersecurity. Любой желающий может стать участником сообщества. Для этого достаточно поделиться своими знаниями, наработками или улучшить один из уже существующих проектов комьюнити.
Для автоматизации задач SOC придумано много решений. Одним из основных являются системы класса SIEM. Наш SOC не исключение, тем более что у Positive Technologies есть свой продукт этого класса — MaxPatrol SIEM.
Но в любой, даже самой здоровской SIEM-системе, иногда не хватает функций, которые нужны аналитикам ИБ прямо сейчас. Самый правильный путь — пойти в R&D-департамент и предложить свои улучшения. Но внедрение функций в большой продукт не происходит мгновенно. Это проработанная дорожная карта, коллегиальное обсуждение, расстановка приоритетов и множество других этапов.
Если вам срочно нужна какая-то функция, можно пойти другим путем. Интерфейс пользователя почти всех современных программных продуктов работает в браузере. Немного «подкрутить» там код — вполне реальная задача. Почему бы не сделать расширение для того же Chrome, чтобы оно взяло на себя часть рутины? Если вы умеете программировать хотя бы чуть-чуть, то мой опыт, возможно, вам пригодится.
Почему именно расширение для браузера
Не нужно заниматься аутентификацией. Интерфейсная часть веб-приложения SIEM-системы уже работает и прошла проверку подлинности. Если я сделаю расширение для браузера таким образом, чтобы оно работало в контексте страницы, тогда необходимые мне запросы на бэкенд SIEM-системы будут выполняться автоматически. Тем самым снимается часть работы.
Не надо думать, куда выводить результат. Если вместо браузерного расширения будет внешнее средство, например скрипт на Python, то надо придумать, куда этот результат вывести: в консоль, в отчет или рисовать окошки с помощью WinForms. Когда у тебя браузер, то все понятно. Есть страница, в ней работает веб-приложение SIEM, разобраться с HTML и CSS и вывести результат в интерфейс SIEM не кажется сложной задачей. Даже если не получится красиво, главное, чтобы было функционально. У каждого пользователя SIEM-решений, то есть у человека, который потенциально будет пользоваться плагином, браузер точно есть.
Независимость от операционной системы. Здесь пояснения не нужны.
Примеры #1 и #2. Проверка хеша и IP-адресов
Типичная ситуация в SOC — аналитик видит в SIEM-системе алерт (подозрение на инцидент) и старается понять, действительно ли он столкнулся с реальным киберинцидентом. Надо или реагировать, блокировать, отключать, форматировать, спасать важные данные, или — определить алерт как ложное срабатывание.
Способов проверки алертов много, их выбор зависит от ситуации. Когда в информации о подозрительной активности встречается хеш-сумма файла, по ней довольно часто можно узнать репутацию файла. Самым известным примером ресурса для такой проверки является VirusTotal. На этот сайт не обязательно загружать файлы — если вы предполагаете, что кто-то другой это уже сделал, получить вердикт можно по хешу.
Последовательность примитивных действий аналитика в такой ситуации можно описать так:
выделение хеша мышью (или другим способом),
копирование хеша в буфер обмена,
открытие новой вкладки в браузере, чтобы не потерять контекст,
переход по адресу VirusTotal,
переход на страницу поиска на VirusTotal и поиск по идентификатору,
изучение результатов.
Много ли тут интеллектуальной работы? Нет, только решение о необходимости провести проверку и последний пункт, касающийся анализа результатов. Все остальные действия можно автоматизировать.
Аналогичная история с IP-адресами. Предположим, аналитик наблюдает странное входящее или исходящее соединение. При подозрении на рассылку спама или сканирование можно проверить IP-адрес на сайте AbuseIPDB. При анализе вердикта может быть принято решение ничего не предпринимать — если сервер сканирует много лет всех подряд, то вряд ли это целевая атака.
С помощью расширения дорабатываем UI таким образом, чтобы в стандартном интерфейсе SIEM-системы, там, где отображаются IP-адреса источника и получателя, добавлялось раскрывающееся меню со ссылками на ресурсы проверки репутации IP-адреса. Если аналитик кликает по ссылке, то в соседней вкладке у него открывается интерфейс того сервиса, который может выдать репутацию по ресурсу. Кроме популярных ресурсов для проверки мы реализовали в расширении возможность задать ссылку на любой подобный сервис, позволяющий передать запрос на проверку адреса в URL.
Вы можете возразить: неужели такой крутой продукт, как система класса SIEM, во время сбора событий не может заодно их обогатить полезными данными из внешних систем? Может, но это не всегда разумно. Основная задача SIEM-системы — собирать большое число событий из журналов аудита, нормализовывать их и с помощью правил корреляции выявлять признаки вредоносной активности.
Проблема в том, что исходных событий в крупной инфраструктуре очень много. Обогащение каждого из них информацией о репутации IP-адресов может повлиять на загрузку вычислительных ресурсов. Мощности может не хватить на коррелятор, который на потоке должен проводить более «умную» работу — сопоставлять события и выявлять инциденты.
Для снижения нагрузки во многих SIEM-системах обычно реализовано обогащение событий только тогда, когда случается срабатывание правила корреляции и регистрация инцидента. Корреляционный движок может куда-то «сходить» за дополнительной информацией и обогатить эту сработку (подозрение на инцидент). Но иногда аналитик проводит threat hunting: копается в невообразимых событиях, проверяет гипотезу проникновения неведомой APT_XX — и тогда ему поможет SiemMonkey.
Пример #3. «Интеграция»
Почему в кавычках? Как правило, интеграция в продуктах уже есть — например, через стандартный API. Но в редких частных случаях не хватает возможностей по интеграции даже между решениями одного производителя.
Представьте, что SIEM-система выявила подозрительную активность процесса, связанную с сетевым взаимодействием. Бывает, что угроза очевидна уже по параметрам выявленной активности, как в примере на скриншоте. Но что делать, если встретится не такой однозначный случай? Как проверить, что передавалось по сети, и исследовать другие необходимые подробности? Если в вашем SOC есть не только SIEM-решение, но и система анализа трафика (network traffic analysis, NTA), детали можно поискать в ней. В SIEM-системе в параметрах события упоминаются адреса источника и получателя, номера портов, время события. Этих данных обычно достаточно, чтобы в NTA-системе написать фильтр, который покажет информацию именно об этой сетевой активности, связанной с подозрительным процессом из SIEM.
В прошлых примерах я признал скучными и неинтересными, по сути, два действия — скопировать хеш и поискать информацию по нему на сайте VirusTotal. А здесь их будет три, потому что нужно скопировать IP-адрес источника, порт источника, IP-адрес получателя, порт получателя. Затем надо открыть окно NTA-системы и ввести эти значения в фильтр.
В расширении SiemMonkey реализована специальная функция, которая позволяет аналитику в два клика получить открытое окно NTA-системы (в моем примере я использую PT Network Attack Discovery, PT NAD) с уже примененным фильтром по событиям за определенное время. Необходимые данные о соединении и времени берутся автоматически и передаются в NTA-систему в параметрах запроса.
Подобная «интеграция» может быть востребована и в обратном направлении. Это пригодится, если аналитик в ходе своей работы сначала обратил внимание на подозрительную сетевую сессию в NTA-системе, и ему интересно узнать, что это за узел, откуда взялся процесс, кто его запустил, что процесс там еще натворил и т. д. В общем, надо зайти в SIEM-систему и поискать подробности про этот процесс. Скорее всего, в качестве отправной точки для поиска будут использованы все те же параметры — IP-адреса и номера портов. И это тоже можно автоматизировать.
Таким образом, SiemMonkey позволяет аналитику SOC, у которого есть SIEM- и NTA-системы, быстрее переходить от одной системы к другой для анализа взаимосвязанных данных.
Пример #4. Дерево
Во многих SIEM-системах есть табличный интерфейс, куда выводятся данные. Таблицы — один из любимых инструментов аналитиков. Но не всю информацию удобно исследовать в таком виде. Например, вы изучаете список запущенных процессов на узле и видите среди них подозрительные процессы. После этого вам наверняка будет интересно, какой процесс и в каком порядке что «породил»: кто был «родитель», «ребенок», какие еще были «дети». Такая информация в некоторых случаях может сильно упростить работу аналитика SOC. Например, когда выявлен процесс, реализующий удаленный шелл, и надо понять, какие еще процессы злоумышленники запускали с его помощью.
Расширение SiemMonkey добавляет в интерфейс три иконки — три «обезьянки». Они позволяют получить информацию о процессах в иерархическом виде, но немного по-разному, в зависимости от задачи.
Средняя «обезьянка» позволяет получить для текущего процесса данные обо всех его прямых «предках». Допустим, аналитик обратил внимание на подозрительный процесс с именем m.exe (реальный пример, который одна из красных команд реализовала на кибербитве Standoff в мае 2023 года). После нажатия на среднюю «обезьянку» надо немного подождать и получить результат — иерархическое представление информации о прямых «предках» текущего процесса. «Обезьянка» опять сделала простую механическую работу за аналитика. Затем его задача — проанализировать полученный результат и принять решение, что с этим делать дальше.
«Обезьянка» справа позволяет построить дерево всех «потомков». Например, аналитик видит подозрительный запуск текстового процессора WinWord, в котором открывается сомнительный документ. Если этот документ содержит вредоносное ПО, вероятно, среди «потомков» этого процесса могут встретиться подозрительные процессы. На рисунке видно, что WinWord запустил исполняемый файл, лежащий в папке AppData, и породил процесс SharpHound. Многим читателям знакома эта утилита: она используется для разведки в сетях на базе Active Directory.
Аналитик наверняка обратил бы внимание на эти подозрительные процессы и без иерархического представления — благодаря опыту и правилам корреляции, которые сработали бы при запуске подобных утилит. Но подобное представление дает возможность быстрее разобраться в происходящем и правильно отреагировать на такую активность.
Наконец, «обезьянка» слева строит дерево всех процессов в текущей сессии. Это дает возможность оценить всю картину происходящего. На рисунке приведена часть такого дерева, построенная для процессов, запущенных на одном из узлов в инфраструктуре Standoff. Можно заметить, как много красных команд в рамках майского Standoff присылали фишинговые сообщения, и все они приходили на одну бедную рабочую станцию, где все это запускалось. По сценарию кибербитвы пользователь этой станции был не очень внимательным, раз за разом становился жертвой фишинга и угрозой безопасности для своей компании в виртуальном Государстве F.
Пример #5. Параметризованные фильтры
Во многих системах класса SIEM есть возможность сохранять фильтры, которыми часто пользуется аналитик, когда ищет признаки подозрительной или вредоносной активности. Но если эти фильтры не зависят от текущего контекста, это не всегда удобно. Нередко бывает, что, изучая одно событие, можно взять из него какие-то значения, подставить их в фильтр и найти другое связанное событие. Так появилась идея реализовать это в SiemMonkey.
При нажатии на иконку плагина появляется окно (в этот момент парсится текущая страница, на которую «смотрит» аналитик, и собираются все параметры текущего события). Во всплывающем окне на вкладке «Полезные фильтры» оператору предлагают подходящие под текущий контекст фильтры, по которым можно поискать что-то интересное. Набор фильтров задается простым JSON-файлом — в нем можно указать описание и фильтр, выбрав в качестве параметров подстановки названия полей событий.
Это не все функции, которые есть в SiemMonkey. Большая их часть реализована одним из описанных выше способов:
при открытии всплывающего окна плагина получаем значения всех заполненных полей и на их основе предлагаем пользователю набор полезных действий;
по клику на поле получаем значение, генерируем ссылку и открываем ее в новой вкладке;
по клику на поле достаем из SIEM-системы полезные данные и отображаем их.
Не буду углубляться в тонкости реализации: это всего лишь расширение для браузера, парсинг страницы, добавление дополнительных элементов в DOM и прикрепление дополнительных обработчиков кликов.
Со временем оказалось, что расширением SiemMonkey стал пользоваться не только я, но и мои коллеги из отдела мониторинга безопасности. В начале этого года мы решили выложить его в общий доступ. Тот фидбэк, который мы получили, свидетельствует о том, что плагин пришелся по душе не только нашей команде.
Пришло несколько запросов на доработку, в том числе от коллег из других организаций. К примеру, при совместной работе нескольких сотрудников над расследованием одной активности оказалась востребована функция, позволяющая получить прямую ссылку на конкретное событие. Этой ссылкой теперь можно делиться. А для тех коллег, которые часто пишут правила, оказалась полезной функция выгрузки определенных событий в виде, пригодном для использования в тестах.
Если вы пользуетесь SIEM-системой, в частности MaxPatrol SIEM, пробуйте плагин, предлагайте идеи, дописывайте код.
Основная идея моей статьи состоит в том, что каждый может сделать свою (и не только свою) работу проще, приложив немного усилий. Нужно всего лишь найти немного времени и попытаться что-то улучшить. Своими наработками и идеями здорово и правильно делиться с коллегами по цеху (к чему я вас и призываю 😉). Например, это можно сделать, присоединившись к сообществу Security Experts Community. Там же можно получить ценную обратную связь от единомышленников.