
Графовая платформа для обнаружения и реагирования
Grapl — это SIEM-платформа на основе графов, созданная инженерами по реагированию на инциденты и для них.
Компания Grapl прекратила свою деятельность. В связи с этим данный код больше не разрабатывается активно, но останется доступным в архивированном состоянии.
Grapl использует структуры данных графов в своей основе, чтобы вы могли эффективно запрашивать и связывать данные, моделировать сложное поведение атакующих для обнаружения и легко погружаться в подозрительные действия, чтобы понять полный масштаб текущего вторжения.
Для более подробного обзора Grapl прочитайте эту статью.
По сути, Grapl берет необработанные логи, преобразует их в графы и объединяет эти графы в Мастер-граф. Затем он оркестрирует выполнение ваших сигнатур атак и предоставляет инструменты для проведения расследований.
Вы можете посмотреть некоторые наши выступления на BSidesLV или на BSides San Francisco.
Grapl изначально поддерживает узлы для:
Grapl изначально поддерживает следующие форматы входных данных для генерации графов:
Grapl разрабатывается с учетом плагинов — операторы могут легко добавлять поддержку новых форматов входных логов и новых типов узлов.
Имейте в виду, что Grapl еще не достиг стабильного состояния версии 1.0 и является быстро развивающимся проектом. Ожидайте небольших ошибок и критических изменений!
Вопросы? Попробуйте открыть issue в этом репозитории или присоединиться к каналу Grapl в Slack (нажмите для приглашения).
Идентичность
Если вы знакомы с источниками логов, такими как Sysmon, одна из лучших особенностей — это то, что процессам присваиваются идентификаторы. Grapl применяет ту же концепцию для любого поддерживаемого типа логов, принимая псевдоидентификаторы, такие как идентификаторы процессов, и определяя канонические идентификаторы.
Затем Grapl объединяет эту концепцию идентичности с графовым подходом, что позволяет легко анализировать сущности и их поведение. Кроме того, это свойство идентичности означает, что Grapl хранит только уникальную информацию из ваших логов, а это значит, что объем хранимых данных растет сублинейно по отношению к объему логов.
Это снижает затраты на хранение и предоставляет централизованные точки для просмотра данных, вместо того чтобы они были разбросаны по тысячам логов. Например, имея канонический идентификатор процесса, вы можете просмотреть всю информацию о нем, выбрав узел.
Анализаторы https://grapl.readthedocs.io/en/latest/analyzers/implementing.html
Анализаторы — это ваши сигнатуры атак. Это Python-модули, развертываемые в S3-бакете Grapl, которые оркестрируются для выполнения при изменениях в Мастер-графе Grapl.
Вместо того чтобы пытаться определить бинарное значение "Хорошо" или "Плохо" для поведения атаки, Grapl использует концепцию риска, а затем автоматически коррелирует риски, чтобы выявить наиболее рискованные части вашей среды.
Анализаторы выполняются в реальном времени по мере обновления мастер-графа, используя операции с постоянным временем выполнения. Инфраструктура анализаторов Grapl автоматически группирует, распараллеливает и оптимизирует ваши запросы. Используя операции с постоянным временем и сублинейные операции, Grapl гарантирует, что по мере роста вашей организации и объема данных вы по-прежнему можете рассчитывать на эффективное выполнение запросов.
Grapl предоставляет библиотеку анализаторов, так что вы можете писать сигнатуры атак на чистом Python. Смотрите этот репозиторий с примерами.
Вот краткий пример обнаружения подозрительного выполнения svchost.exe:
class SuspiciousSvchost(Analyzer):
def get_queries(self) -> OneOrMany[ProcessQuery]:
invalid_parents = [
Not("services.exe"),
Not("smss.exe"),
Not("ngentask.exe"),
Not("userinit.exe"),
Not("GoogleUpdate.exe"),
Not("conhost.exe"),
Not("MpCmdRun.exe"),
]
return (
ProcessQuery()
.with_process_name(eq=invalid_parents)
.with_children(
ProcessQuery().with_process_name(eq="svchost.exe")
)
)
def on_response(self, response: ProcessView, output: Any):
output.send(
ExecutionHit(
analyzer_name="Suspicious svchost",
node_view=response,
risk_score=75,
)
)
Хранение анализаторов в коде позволяет:
Ознакомьтесь с плагином развертывания анализаторов Grapl, чтобы узнать, как хранить анализаторы в git-репозитории, который автоматически развертывает их при пуше в master.
Расследования (Engagements)
Grapl предоставляет инструмент для расследований, называемый Engagement. Engagement — это изолированный граф, представляющий подграф, который ваши анализаторы сочли подозрительным.
Используя Jupyter Notebooks, размещенные на AWS Sagemaker, и предоставляемую Grapl библиотеку Python, вы можете расширить любой подозрительный подграф, чтобы охватить полный масштаб атаки. По мере расширения масштаба атаки с помощью Jupyter-ноутбука график Engagement будет обновляться, визуально представляя масштаб атаки.

Событийно-ориентированный и расширяемый
Grapl создан для расширения — ни один сервис не может удовлетворить потребности каждой организации. Каждый нативный сервис Grapl работает путем отправки и получения событий, что означает, что для расширения Grapl вам нужно только начать подписываться на сообщения.
Это делает Grapl тривиально расширяемым или интегрируемым в ваши существующие сервисы.
Grapl также предоставляет систему плагинов (сейчас в бета-версии), которая позволяет расширять возможности платформы — добавлять пользовательские узлы и возможности запросов.