Подробная архитектура
ПО Логикор представляет собой систему долговременного хранения и фильтрации событий информационной безопасности (далее — СДХ). Основное предназначение Системы — получение, обработка, сохранение и передача событий информационной безопасности. Далее будет рассмотрена архитектура решения.
Слои системы
Система Логикор логически разделена на пять слоев:
- Слой сбора и обработки событий — отвечает за получение событий из различных источников, обработку (нормализацию, фильтрацию), сохранение и последующую отправку событий во внешние системы;
- Слой сервисов — отвечает за основной функционал Системы, обеспечивает работу по анализу событий, настройку Системы и правил обработки событий, а также интеграцию с внешними системами;
- Слой хранения данных — отвечает за хранение событий, настроек правил их обработки, а также всех необходимых данных для работы Системы в целом;
- Слой мониторинга — отвечает за сбор, хранение, обработку и предоставление всех необходимых метрик;
- Слой установки — отвечает за развертывание продукта Логикор в инфраструктуре.
Схема укрупненная: блок может обозначать один сервис, например 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-haproxy | HAProxy для балансировки подключений и доступа к базам данных PostgreSQL |
postgres-patroni | PostgreSQL и Patroni для хранения и обслуживания баз данных. Patroni используется для организации репликации и отказоустойчивости |
postgres-etcd | ETCD для координации кластера Postgres Patroni |
В продуктивной среде рекомендуется не менее 3 узлов postgres-patroni и не менее 3 узлов postgres-etcd.
S3
Модуль S3 на базе Minio S3 обеспечивает распределенное файловое хранение. В нем находятся, в частности, конфигурационные файлы и правила обработки событий для Saturn.
| Сервис | Назначение |
|---|---|
s3-nginx | Nginx для балансировки и доступа к сервисам 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.