Перейти к основному содержимому
Версия: v2.8.x

Подробная архитектура

ПО Логикор представляет собой систему долговременного хранения и фильтрации событий информационной безопасности (далее — СДХ). Основное предназначение Системы — получение, обработка, сохранение и передача событий информационной безопасности. Далее будет рассмотрена архитектура решения.

Слои системы​

Система Логикор логически разделена на пять слоев:

  1. Слой сбора и обработки событий — отвечает за получение событий из различных источников, обработку (нормализацию, фильтрацию), сохранение и последующую отправку событий во внешние системы;
  2. Слой сервисов — отвечает за основной функционал Системы, обеспечивает работу по анализу событий, настройку Системы и правил обработки событий, а также интеграцию с внешними системами;
  3. Слой хранения данных — отвечает за хранение событий, настроек правил их обработки, а также всех необходимых данных для работы Системы в целом;
  4. Слой мониторинга — отвечает за сбор, хранение, обработку и предоставление всех необходимых метрик;
  5. Слой установки — отвечает за развертывание продукта Логикор в инфраструктуре.

Схема укрупненная: блок может обозначать один сервис, например Grafana или APIGW, либо модуль из нескольких сервисов, например Earth. Общее назначение компонентов описано в общей архитектуре.

Слой сбора и обработки событий​

Hyperion​

Hyperion собирает события из источников, предварительно обрабатывает и передает их в Saturn. В Linux агент работает как служба systemd.

Агент поддерживает активный сбор, например из Kafka, и пассивный прием, например по TCP и UDP. Список поддерживаемых типов источников расширяется по мере развития продукта.

Для предварительной обработки используются как встроенные плагины, так и произвольные настройки в формате VRL.

Передачу в Saturn можно организовать по модели pull, когда к агенту подключается Saturn.

Подробное описание агента Hyperion приведено в статье Агент «Hyperion»

Пример предварительной обработки​

Пример настройки приема событий UDP и TCP для Hyperion с последующей агрегацией событий auditd и обработкой на VRL:

collectors:
syslog:
inputs:
udp:
type: udp
listen: 0.0.0.0:5140
recv_buffer_bytes: 126214400
add_tag: hyperion_udp
decoding:
codec: bytes
encoding_option: encode_utf8
tcp:
type: tcp
listen: 0.0.0.0:5140
proxy_protocol:
trusted:
- 192.168.1.0/8
add_tag: hyperion_tcp
decoding:
codec: bytes
encoding_option: encode_utf8

processors:
- type: auditd_aggregator
add_tag: _aggregated
force_binary_event_content: true
aggregation_duration_sec: 6

- type: vrl
source: |
.message = string!(.)

if %content_type == "auditd_binary" {
.mime = "JSON"
} else {
.mime = "TEXT"
}

Saturn​

Saturn — модуль приема, обработки, фильтрации, сохранения, анализа и передачи событий во внешние системы. Он включает сервис обработки saturn и сервис миграций saturn-migrator.

Подробное описание сервиса Saturn приведено в статье Сервис «Saturn»

Сервис saturn​

Основной сервис по приему, обработке, фильтрации, сохранению и передаче событий во внешние системы. В основе лежит переработанный и оптимизированный Logstash, что позволяет использовать как готовые плагины, так и специализированные плагины, разработанные для Логикор.

Самостоятельный прием событий​

Saturn может использоваться в качестве самостоятельного сборщика событий. При таком приеме обычно используются пассивные методы, например TCP и UDP. Перед несколькими узлами Saturn необходимо настроить балансировщик, который сохраняет адрес исходного отправителя и направляет события одного отправителя на один узел. Такая привязка нужна для корректной группировки событий, например auditd.

Пример настройки входящих событий syslog по TCP и UDP для Saturn:

input {
syslog_parallel {
id => "syslog_parallel_5140"
port => 5140
type => "syslog"
grok_pattern => "^<(?<priority>\d+)\>"
proxy_protocol => true
workers => 2
try_encodings => ["Windows-1251", "KOI8-R"]
use_labels => false
add_field => {
"mime" => "TEXT"
}
}
}

Прием событий из агента Hyperion​

При использовании сервиса Hyperion в качестве источника обеспечена максимальная производительность Системы, а также гарантирована равномерная нагрузка на узлы Saturn и сохранение адреса отправителя.

Пример настройки приема событий из агента Hyperion для Saturn:

input {
hyperion {
id => "hyperion-agent-1"
host => "127.0.0.1"
port => 3214
connections => 2
tags => ["hyperion"]
}
}

Правила обработки событий​

Правила обработки хранятся в хранилище S3 в виде конфигурационных файлов. Конфигурация может использовать форматы Logstash, Ruby и VRL.

При настроенной синхронизации с MP SIEM файлы обработки событий автоматически обновляются по мере обновления правил в MP SIEM.

Отправка событий​

Для передачи в MP SIEM используется специализированный плагин Логикор. Он отправляет исходные события в RabbitMQ в формате, необходимом MP SIEM. Для других получателей могут использоваться другие плагины.

Сохранение событий в ClickHouse​

При записи в ClickHouse применяется механизм повторных попыток (retry), позволяющий сохранять данные в любой работающий узел кластера.

Сервис saturn-migrator​

Сервис saturn-migrator используется для выполнения миграций базы данных ClickHouse в соответствии с настроенной схемой. Он запускается однократно при развертывании или обновлении Системы Логикор, чтобы привести схему к актуальному состоянию.

В Логикор поддерживается несколько схем данных. По умолчанию преднастроена схема mpsiem, соответствующая таксономии MP SIEM. Она позволяет нормализовать, просматривать и анализировать события в этой системе полей.

Последовательность обработки и настройки пайплайнов приведены в статье Saturn.

Слой сервисов​

APIGW​

APIGW представляет собой обратный прокси-сервер для доступа к внутренним сервисам Mercury, Earth, Mars и Docs. В некоторых вариантах развертывания, например в k8s, вместо отдельного APIGW используется механизм Ingress. Поэтому данный сервис не является обязательным.

Docs​

Docs предоставляет документацию по продукту Логикор.

Mercury​

Mercury предоставляет веб-интерфейс Логикор. Сервис взаимодействует с API Системы.

Mars​

Модуль Mars обеспечивает доступ к событиям, хранящимся в Системе Логикор, и выполнение задач, связанных с событиями и правилами их обработки другими.

Модуль Mars состоит из следующих сервисов:

mars-web​

API-сервис для работы с событиями, дашбордами и другим функционалом модуля, реализованный на Golang и используемый в веб-интерфейсе Системы.

mars-worker​

Сервис для выполнения различных асинхронных задач в Системе, связанных с событиями и правилами их обработки. В том числе используется для обновления и конвертации правил нормализации и корреляции при интеграции с MP SIEM. Сконвертированные правила сохраняются в хранилище S3 для дальнейшей передачи в сервис Saturn.

mars-migrator​

Сервис, предназначенный для выполнения миграций, необходимых для функционирования модуля Mars. Сервис отрабатывает один раз при развертывании или обновлении Системы Логикор, поддерживая схему базы данных в актуальном состоянии.

mars-initdb​

Сервис предназначен для создания пользователя и необходимой базы данных сервисов mars. Данный сервис не является обязательным и при определенных настройках развертывания Системы Логикор может отсутствовать.

Earth​

Модуль Earth обеспечивает управление пользователями и ролями, авторизацию, настройки Системы, доступ к хранилищу S3, редактирование правил обработки событий, аудит и мониторинг.

Модуль Earth состоит из следующих сервисов:

earth​

Бэкенд API-сервис, реализованный на PHP с использованием nginx и PHP-FPM и используемый в веб-интерфейсе Системы.

earth-worker​

Сервис выполнения различных фоновых задач (supervisord) в Системе, таких как мониторинг, запуск задач по расписанию и прочее.

Данный сервис отправляет уведомления мониторинга о найденных событиях во внешние системы.

earth-reverb​

WebSocket-сервер (Laravel Reverb) для обеспечения непрерывного взаимодействия с веб-интерфейсом пользователя Mercury.

Используется для таких задач, как отображение временной шкалы событий.

earth-migrator​

Сервис, предназначенный для выполнения миграций, необходимых для функционирования модуля Earth. Он отрабатывает один раз при развертывании или обновлении Системы Логикор, поддерживая схему базы данных в актуальном состоянии.

earth-initdb​

Сервис предназначен для создания пользователя и необходимой базы данных сервисов earth. Данный сервис не является обязательным и при определенных настройках развертывания Системы Логикор может отсутствовать.

Слой хранения данных​

ClickHouse​

Модуль ClickHouse состоит, как правило, из нескольких сервисов баз данных ClickHouse и нескольких сервисов координации ClickHouse-Keeper. Их количество зависит от потребностей установки и нагрузки, выраженной в событиях в секунду (EPS). Предустановленные настройки можно изменять с учетом конкретной среды.

Подробное описание ClickHouse приведено в статье Модуль «ClickHouse»

clickhouse​

Сервис clickhouse предоставляет СУБД с открытым исходным кодом. Для событий используются реплицируемые таблицы. Шардирование и репликация позволяют горизонтально масштабировать хранилище и обеспечивать его отказоустойчивость.

clickhouse-keeper​

Сервис clickhouse-keeper обеспечивает координацию кластера ClickHouse. Подробнее об архитектуре хранилища можно прочитать в статье о ClickHouse.

Как правило, для отказоустойчивой работы кластера необходимо использовать нечетное количество сервисов clickhouse-keeper. В продуктивной среде рекомендуется не менее 3 узлов.

Postgres​

Модуль Postgres хранит служебные данные Логикор в PostgreSQL.

СервисНазначение
postgres-haproxyHAProxy для балансировки подключений и доступа к базам данных PostgreSQL
postgres-patroniPostgreSQL и Patroni для хранения и обслуживания баз данных. Patroni используется для организации репликации и отказоустойчивости
postgres-etcdETCD для координации кластера Postgres Patroni

В продуктивной среде рекомендуется не менее 3 узлов postgres-patroni и не менее 3 узлов postgres-etcd.

S3​

Модуль S3 на базе Minio S3 обеспечивает распределенное файловое хранение. В нем находятся, в частности, конфигурационные файлы и правила обработки событий для Saturn.

СервисНазначение
s3-nginxNginx для балансировки и доступа к сервисам Minio S3
s3Хранение файлов на базе Minio S3, в том числе правил обработки событий
s3-create-bucketПервичное заполнение хранилища конфигурационными файлами по умолчанию. Выполняется однократно при развертывании Логикор

Конфигурация после установки зависит от конкретной среды. Предустановленные пайплайны не заменяются при обновлении продукта; при этом другие сервисы и пользователи могут изменять правила. Такое разделение описано в статье о Saturn.

Слой мониторинга​

Сервисы этого слоя собирают, обрабатывают и отображают метрики Логикор.

Grafana​

Сервис grafana отображает метрики на панелях мониторинга, объединяющих данные нескольких источников.

Сервис grafana-initdb создает пользователя и базу данных для grafana. Его наличие зависит от настроек развертывания: сервис необязателен.

Блок сервисов Prometheus / VictoriaMetrics​

Блок сервисов Prometheus / VictoriaMetrics состоит из нескольких сервисов.

Prometheus / VictoriaMetrics​

Сервис Prometheus или VictoriaMetrics отвечает за сбор и хранение метрик компонентов. При развертывании через Ansible используется Prometheus. В других средах, например в k8s «Штурвал», может использоваться VictoriaMetrics.

script-exporter​

Сервис мониторинга, который запускает различные shell-скрипты для получения метрик и отдает их в формате Prometheus.

В системе мониторинга используется для получения следующих метрик: лимиты CPU/RAM для контейнеров, healthcheck, метрики Postgres Patroni, включая размеры дисков, баз данных, состояние HAProxy.

php-fpm-exporter​

Сервис для экспорта метрик PHP-FPM для Prometheus. Он мониторит только метрики сервиса Earth (основной PHP-бэкенд Логикор).

cadvisor​

Сервис CAdvisor собирает метрики использования процессора, оперативной памяти, сети и других ресурсов контейнеров.

saturn-metrics-exporter​

Сервис по сбору и экспорту метрик сервиса Saturn (Logstash).

traefik​

Сервис, предназначенный для маршрутизации запросов Prometheus к различным экземплярам сервисов для корректного сбора метрик.

docket​

Сервис предоставляет traefik, cadvisor и script-exporter ограниченный и изолированный доступ к API Docker.

Слой установки​

Registry​

Локальный Docker Registry, который разворачивается первым при установке Логикор и хранит образы продукта. Для автономной установки без доступа к сети образы загружаются из архива. Реестр используется для запуска контейнеров сервисов продукта.

Vault​

HashiCorp Vault централизованно хранит секреты, включая пароли PostgreSQL, ClickHouse, S3, LDAP и RabbitMQ. Учетные данные для баз данных и других зависимостей передаются сервисам через vault-secrets-webhook.