Экспорт данных

Экспорт данных

Система Пуаро предоставляет возможность экспорта данных для интеграции с внешними системами, такими как SIEM, системы аналитики и другие инструменты мониторинга безопасности.

Обзор

Данные хранятся в двух базах данных:

  • PostgreSQL — события центра управления, конфигурация, метаданные
  • ClickHouse — данные аудита, профилирования, поведенческая аналитика

Это позволяет:

  • Интегрировать данные аудита с SIEM-системами (Splunk, QRadar, ArcSight и др.)
  • Строить собственные аналитические отчёты
  • Экспортировать данные для архивного хранения
  • Создавать кастомные дашборды

Подключение к базам данных

Подключение к PostgreSQL

Для подключения к базе данных PostgreSQL используйте следующие параметры:

ПараметрОписание
ХостIP-адрес или DNS-имя сервера PostgreSQL
Порт5432 (по умолчанию)
База данныхlector
ПользовательУчётная запись для подключения
ПарольПароль учётной записи

Подключение к ClickHouse

Для подключения к базе данных ClickHouse используйте следующие параметры:

ПараметрОписание
ХостIP-адрес или DNS-имя сервера ClickHouse
Порт8123 (HTTP) или 9000 (Native)
База данныхlector / lector_ai
ПользовательУчётная запись для подключения
ПарольПароль учётной записи

Поддерживаемые протоколы

PostgreSQL:

  • TCP/IP — стандартное подключение через порт 5432
  • JDBC/ODBC — через соответствующие драйверы

ClickHouse:

  • HTTP/HTTPS — порт 8123, подходит для большинства интеграций
  • Native — порт 9000, оптимальная производительность
  • JDBC/ODBC — через соответствующие драйверы

Таблицы PostgreSQL

Таблица событий центра управления (pu_main_center)

Основная таблица событий и инцидентов системы. Содержит информацию о всех зарегистрированных событиях безопасности.

База данных: PostgreSQL Таблица: pu_main_center

ПолеНазваниеТип данныхОписание
event_numНомер событияInteger (PK)Уникальный идентификатор события
event_typeТип событияStringТип события (сервер, база данных, учетная запись, события lector, сетевой трафик)
event_nameНазвание событияStringОписательное название события
event_critКритичностьStringУровень критичности (критический, высокий, средний, низкий)
pu_db_nameЭкземпляр БДStringИмя экземпляра базы данных
pu_ipIP-адресStringIP-адрес источника
pu_db_hostnameСервер БДStringИмя хоста сервера БД
pu_db_portПортIntegerПорт подключения
event_start_datetimeДата/время событияDateTimeВремя возникновения события
event_statusСтатусStringСтатус обработки (новый, взят в работу, закрыт)
event_personalОтветственныйInteger (FK)Пользователь, взявший событие в работу
event_status_datetimeДата изменения статусаDateTimeВремя последнего изменения статуса
event_infoИнформацияTextДетальное описание события
pu_isДомен ИСStringИнформационная система
is_event_groupГрупповое событиеBooleanПризнак группового события
event_group_countКоличество в группеIntegerКоличество событий в группе
pu_db_usernameПользователь БДStringУчётная запись пользователя
pu_db_appnameПриложениеStringКлиентское приложение
pu_clienthostnameРабочая станцияStringХост клиента

Типы событий:

ЗначениеОписание
серверСобытия сервера БД
база данныхСобытия базы данных
учетная записьСобытия учётных записей
события lectorСистемные события Пуаро
сетевой трафикСобытия сетевого мониторинга

Уровни критичности:

ЗначениеОписание
критическийТребует немедленного реагирования
высокийВысокий приоритет обработки
среднийСтандартный приоритет
низкийИнформационное событие

Пример запроса:

SELECT
    event_num,
    event_type,
    event_name,
    event_crit,
    pu_db_hostname,
    event_start_datetime,
    event_status
FROM pu_main_center
WHERE event_status = 'новый'
  AND event_start_datetime >= NOW() - INTERVAL '1 day'
ORDER BY event_start_datetime DESC
LIMIT 100

Таблица отчётов о событиях (pu_mc_report)

Детализированные отчёты по событиям центра управления. Содержит логи и дополнительную информацию о событиях.

База данных: PostgreSQL Таблица: pu_mc_report

ПолеНазваниеТип данныхОписание
event_numНомер записиInteger (PK)Уникальный идентификатор записи отчёта
event_idID событияInteger (FK)Ссылка на событие в pu_main_center
pu_db_nameЭкземпляр БДStringИмя экземпляра базы данных
pu_ipIP-адресStringIP-адрес источника
pu_db_hostnameСервер БДStringИмя хоста сервера
pu_db_portПортIntegerПорт подключения
event_report_timeВремя в логеDateTimeВременная метка из лога
event_logs_typeТип логаStringТип записи лога
event_logs_textТекст логаTextСодержимое записи лога
pu_isДомен ИСStringИнформационная система
pu_db_usernameПользователь БДStringУчётная запись пользователя
pu_db_appnameПриложениеStringКлиентское приложение
pu_clienthostnameРабочая станцияStringХост клиента

Пример запроса:

SELECT
    r.event_num,
    e.event_name,
    r.event_report_time,
    r.event_logs_type,
    r.event_logs_text
FROM pu_mc_report r
JOIN pu_main_center e ON r.event_id = e.event_num
WHERE e.event_crit = 'критический'
ORDER BY r.event_report_time DESC
LIMIT 50

Таблицы ClickHouse

Таблица косвенных улик (pu_raw_data)

Основная таблица с данными аудита SQL-запросов. Содержит информацию о всех отслеживаемых событиях в базах данных.

База данных: ClickHouse Схема: lector Таблица: pu_raw_data

ПолеНазваниеТип данныхОписание
pu_db_hostnameСервер БДStringIP-адрес или имя сервера базы данных
pu_db_nameЭкземпляр БДStringИмя экземпляра (SID) базы данных
pu_db_portПортUInt64Порт подключения к БД
pu_db_usernameПользователь БДStringИмя учётной записи пользователя
os_usernameПользователь ОСStringИмя пользователя операционной системы
pu_clienthostnameРабочая станцияStringХост, с которого выполнено подключение
pu_db_appnameПриложениеStringИмя клиентского приложения
object_nameОбъект БДStringИмя объекта базы данных
pu_sqlparametersУликаStringПараметры SQL-запроса
pu_sqltextSQL текстStringПолный текст SQL-запроса
pu_logtimeДата / время событияDateTimeВременная метка события
pu_isДомен ИСStringИнформационная система
audit_typeТип аудитаStringТип аудита события
pu_db_typeТип СУБДStringТип базы данных (Oracle, PostgreSQL и др.)

Пример запроса:

SELECT
    pu_logtime,
    pu_db_hostname,
    pu_db_username,
    pu_sqltext
FROM lector.pu_raw_data
WHERE pu_logtime >= now() - INTERVAL 1 DAY
ORDER BY pu_logtime DESC
LIMIT 1000

Таблица учётных записей (pu_db_users)

Справочник учётных записей баз данных с информацией о статусе и метаданных.

База данных: ClickHouse Схема: lector Таблица: pu_db_users

ПолеНазваниеТип данныхОписание
pu_db_hostnameСервер БДStringIP-адрес сервера базы данных
pu_db_nameЭкземпляр БДStringИмя экземпляра базы данных
pu_db_portПортUInt64Порт подключения
pu_db_usernameПользователь БДStringИмя учётной записи
pu_user_rankТип УЗStringКлассификация учётной записи
account_statusСтатус УЗStringТекущий статус (Open, Locked и др.)
lock_dateДата блокировки УЗDateTimeДата блокировки учётной записи
createdДата создания УЗDateTimeДата создания учётной записи
last_loginДата последнего входа УЗDateTimeВремя последней аутентификации
password_change_dateДата смены пароля УЗDateTimeДата последней смены пароля
pu_user_infoОписание УЗStringОписание учётной записи
pu_date_insДата в реестреDateTimeДата добавления в реестр
pu_isДомен ИСStringИнформационная система
pu_db_typeТип СУБДStringТип базы данных
pu_user_idIDUInt64Уникальный идентификатор записи

Пример запроса:

SELECT
    pu_db_hostname,
    pu_db_username,
    account_status,
    last_login
FROM lector.pu_db_users
WHERE account_status = 'OPEN'
ORDER BY last_login DESC

Таблица системных привилегий (pu_catalog_privs)

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

База данных: ClickHouse Схема: lector Таблица: pu_catalog_privs

ПолеНазваниеТип данныхОписание
priv_db_typeТип СУБДStringТип базы данных
pu_db_hostnameСервер БДStringIP-адрес сервера
pu_db_nameЭкземпляр БДStringИмя экземпляра
pu_db_portПортUInt64Порт подключения
pu_priv_nameНазвание привилегииStringИмя системной привилегии
priv_tabОбъект привилегииStringОбъект, к которому применяется привилегия
priv_data_createdДата созданияDateTimeДата назначения привилегии
priv_rankТип УЗStringКлассификация учётной записи
privs_infoОписаниеStringОписание привилегии
pu_priv_idIDUInt64Уникальный идентификатор

Пример запроса:

SELECT
    pu_db_hostname,
    pu_priv_name,
    priv_tab,
    priv_data_created
FROM lector.pu_catalog_privs
WHERE priv_db_type = 'Oracle'
ORDER BY priv_data_created DESC

Таблица объектов БД (pu_db_object)

Справочник объектов баз данных (таблицы, представления, процедуры и др.).

База данных: ClickHouse Схема: lector Таблица: pu_db_object

ПолеНазваниеТип данныхОписание
pu_db_hostnameСервер БДStringIP-адрес сервера
pu_db_nameЭкземпляр БДStringИмя экземпляра
pu_db_portПортUInt64Порт подключения
pu_object_schemaСхема БДStringСхема объекта
pu_object_nameОбъект БДStringИмя объекта
object_typeТип объектаStringТип объекта (TABLE, VIEW, PROCEDURE и др.)
createdДата созданияDateTimeДата создания объекта
object_change_dateДата модификацииDateTimeДата последнего изменения
pu_object_rankТип содержимогоStringКлассификация данных (ПДн, критичные и др.)
pu_object_profile_dateДата проверки на ПДнDateTimeДата последней проверки классификации
pu_object_infoОписание объектаStringОписание объекта
pu_isДомен ИСStringИнформационная система
pu_db_typeТип СУБДStringТип базы данных
pu_object_idIDUInt64Уникальный идентификатор

Пример запроса:

SELECT
    pu_db_hostname,
    pu_object_schema,
    pu_object_name,
    pu_object_rank
FROM lector.pu_db_object
WHERE pu_object_rank = 'СОДЕРЖИТ ПДН'
ORDER BY created DESC

Таблица объектных привилегий (pu_catalog_object_privs)

Справочник привилегий на объекты баз данных.

База данных: ClickHouse Схема: lector Таблица: pu_catalog_object_privs

ПолеНазваниеТип данныхОписание
pu_db_hostnameСервер БДStringIP-адрес сервера
pu_db_nameЭкземпляр БДStringИмя экземпляра
pu_db_portПортUInt64Порт подключения
privelegeТип привилегииStringТип привилегии (SELECT, INSERT, UPDATE и др.)
pu_object_schemaСхема объекта БДStringСхема объекта
pu_object_nameИмя объекта БДStringИмя объекта
pu_username_grantedКому выданаStringПолучатель привилегии
pu_user_rankТип УЗStringКлассификация учётной записи
priv_data_updДата модификацииDateTimeДата последнего изменения
priv_data_createdДата созданияDateTimeДата назначения привилегии
privs_infoОписаниеStringОписание привилегии
priv_db_typeТип СУБДStringТип базы данных
pu_priv_idIDUInt64Уникальный идентификатор

Пример запроса:

SELECT
    pu_db_hostname,
    pu_object_name,
    privelege,
    pu_username_granted
FROM lector.pu_catalog_object_privs
WHERE privelege IN ('SELECT', 'INSERT', 'UPDATE', 'DELETE')
ORDER BY priv_data_created DESC

Таблица профилированных объектов (pu_profiled_object)

Результаты профилирования объектов баз данных на наличие персональных данных (ПДн).

База данных: ClickHouse Схема: lector_ai Таблица: pu_profiled_object

ПолеНазваниеТип данныхОписание
profile_idID профиляUInt64Идентификатор профиля профилирования
pu_object_idID объектаUInt64Идентификатор объекта БД
task_idID задачиUInt64Идентификатор задачи профилирования
object_name_scoreОценка имениFloat64Оценка на основе анализа имени объекта
metainfo_scoreОценка метаинфоFloat64Оценка на основе метаданных
query_scoreОценка запросовFloat64Оценка на основе анализа запросов
sample_scoreОценка выборкиFloat64Оценка на основе анализа данных
final_scoreИтоговая оценкаFloat64Финальная оценка вероятности ПДн
is_checkedПровереноBooleanПризнак ручной проверки
weights_detailsДетали весовString (JSON)Детализация категорий ПДн
updated_atДата обновленияDateTimeВремя последнего обновления

Категории ПДн в weights_details:

КатегорияОписание
is_fioФ.И.О.
is_birth_dateДата и место рождения
is_genderПол
is_citizenshipГражданство
is_familyСемья
is_addressАдрес
is_contactКонтактные данные
is_documentДокументы
is_identifierГосударственные идентификаторы
is_biometricБиометрические данные
is_medicalМедицинские данные
is_private_lifeЛичная жизнь
is_beliefsВзгляды и убеждения
is_workРабота
is_educationОбразование
is_financeФинансовые данные
is_resultsРезультаты тестов/экзаменов
is_locationГеолокация
is_videoНаблюдение
is_indirectКосвенные идентификаторы

Уровни критичности по итоговой оценке:

ДиапазонУровень
< 5Низкий
5 - 15Средний
15 - 30Высокий
> 30Критический

Пример запроса:

SELECT
    o.pu_object_name,
    o.pu_object_schema,
    o.pu_db_hostname,
    p.final_score,
    p.weights_details
FROM lector_ai.pu_profiled_object p
LEFT JOIN lector.pu_db_object o ON p.pu_object_id = o.pu_object_id
WHERE p.final_score > 15
ORDER BY p.final_score DESC
LIMIT 100

Таблица алертов поведенческой модели (pu_ueba_alerts)

Алерты системы поведенческого анализа (UEBA). Содержит информацию об аномальном поведении пользователей.

База данных: ClickHouse Схема: lector_ai Таблица: pu_ueba_alerts

ПолеНазваниеТип данныхОписание
pu_db_hostnameСервер БДStringIP-адрес сервера базы данных
pu_db_nameЭкземпляр БДStringИмя экземпляра базы данных
pu_db_portПортUInt64Порт подключения
userПользователь БДStringУчётная запись пользователя
ruleСобытиеStringНазвание сработавшего правила
tsДата событияDateTimeВременная метка алерта
valueКоличествоUInt64Числовое значение метрики
evidencesУликиStringДополнительная информация о событии

Пример запроса:

SELECT
    pu_db_hostname,
    pu_db_name,
    user,
    rule,
    ts,
    value,
    evidences
FROM lector_ai.pu_ueba_alerts
WHERE ts >= now() - INTERVAL 1 DAY
ORDER BY ts DESC
LIMIT 100

Таблица профилей пользователей (pu_ueba_30d_dynamic_profiles)

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

База данных: ClickHouse Схема: lector_ai Таблица: pu_ueba_30d_dynamic_profiles

ПолеНазваниеТип данныхОписание
userПользователь БДStringУчётная запись пользователя
pu_db_hostnameСервер БДStringIP-адрес сервера
pu_db_nameЭкземпляр БДStringИмя экземпляра
pu_db_portПортUInt64Порт подключения
work_start_hourНачало рабочего дняUInt8Типичный час начала работы
work_end_hourКонец рабочего дняUInt8Типичный час окончания работы
avg_req_per_hourСреднее запросов/часFloat64Среднее количество запросов в час
known_hostsИзвестные хостыArray(String)Список хостов, с которых работает пользователь
top_appsТоп приложенийArray(String)Наиболее используемые приложения
pii_objects_statsСтатистика ПДнString (JSON)Статистика обращений к объектам с ПДн
pii_normal_objectsОбычные объекты ПДнArray(String)Объекты ПДн, к которым обычно обращается
pct_failed_logins% неудачных входовFloat64Процент неудачных попыток аутентификации
avg_pii_per_dayСреднее ПДн/деньFloat64Среднее обращений к ПДн в день
last_updatedДата обновленияDateTimeВремя последнего обновления профиля

Пример запроса:

SELECT
    user,
    pu_db_hostname,
    pu_db_name,
    work_start_hour,
    work_end_hour,
    avg_req_per_hour,
    pct_failed_logins
FROM lector_ai.pu_ueba_30d_dynamic_profiles
WHERE pct_failed_logins > 10
ORDER BY pct_failed_logins DESC

Интеграция с SIEM

Рекомендации по интеграции

  1. Периодический экспорт — настройте регулярную выгрузку данных из таблицы pu_raw_data с фильтрацией по времени
  2. Инкрементальная загрузка — используйте поле pu_logtime для получения только новых записей
  3. Фильтрация событий — экспортируйте только релевантные события для снижения нагрузки на SIEM

Пример инкрементальной выгрузки

SELECT *
FROM lector.pu_raw_data
WHERE pu_logtime > '{last_export_time}'
ORDER BY pu_logtime ASC

Форматы экспорта

ClickHouse поддерживает экспорт в различных форматах:

ФорматОписание
JSONEachRowJSON-строки, удобно для потоковой обработки
CSVТабличный формат для импорта в другие системы
TabSeparatedTSV-формат
NativeБинарный формат ClickHouse

Пример экспорта в JSON:

curl -X POST 'http://clickhouse:8123/?query=SELECT * FROM lector.pu_raw_data FORMAT JSONEachRow'

Безопасность

При настройке экспорта данных соблюдайте следующие требования безопасности:

  • Используйте отдельную учётную запись с минимальными правами (только SELECT)
  • Настройте сетевую изоляцию для подключений к ClickHouse
  • Включите шифрование соединений (HTTPS/TLS)
  • Ведите журнал экспортных операций
  • Ограничьте объём выгружаемых данных по времени