# Интеграция OpenCTI и KUMA

<p class="callout info">Информация, приведенная на данной странице, является разработкой команды pre-sales и/или community KUMA и **НЕ** является официальной рекомендацией вендора.</p>

<p class="callout info">Ссылка на репозиторий [https://github.com/KUMA-Community/KumaOpenctiLookupProxy](https://github.com/KUMA-Community/KumaOpenctiLookupProxy) </p>

В современных SOC-инфраструктурах эффективность анализа событий безопасности напрямую зависит от актуальных данных Threat Intelligence. Интеграция платформы OpenCTI с SIEM-системой Kaspersky Unified Monitoring and Analysis Platform (KUMA) позволяет использовать данные о киберугрозах для обогащения событий безопасности и ускорения расследования инцидентов.

Основная задача интеграции — автоматическая проверка индикаторов компрометации (IoC), обнаруженных в событиях KUMA, по базе Threat Intelligence OpenCTI. При нахождении совпадений события дополняются контекстной информацией: описанием индикатора, источником, уровнем доверия и связанными аналитическими отчётами.

**Возможности интеграции:**

- автоматическая проверка индикаторов компрометации из событий безопасности;
- обогащение событий данными Threat Intelligence;
- связывание обнаруженных индикаторов с отчётами и аналитикой OpenCTI;
- ускорение анализа и расследования инцидентов в SOC.

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

---

## Архитектура интеграции

Интеграция реализована через промежуточный сервис **OpenCTI-KUMA Lookup Proxy** — HTTP-сервис, принимающий запросы от KUMA и преобразующий их в запросы к API OpenCTI.

**Функции сервиса:**

- приём lookup-запросов от KUMA;
- поиск индикаторов в OpenCTI среди объектов Indicators и Observables;
- формирование ответа в формате CyberTrace HTTP, используемом KUMA для обогащения событий.

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548236979.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548236979.png)

### Компоненты и технический стек

Сервис реализован на **Python** с использованием фреймворка **FastAPI** и развёрнут в Docker-контейнере на сервере OpenCTI в рамках той же Docker-сети.

Для запуска используется **Gunicorn** с Uvicorn workers, что обеспечивает эффективную обработку параллельных запросов. Количество worker-процессов рассчитывается по формуле:

```
workers = 2 × CPU + 1

```

Каждый worker — это отдельный процесс, обслуживающий множество асинхронных HTTP-запросов.

Для доступа к сервису извне используется **Nginx** в роли reverse-proxy: он публикует порт `8000` и обеспечивает доступ по HTTPS. Сост

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548258873.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548258873.png)

### Переменные окружения

<table id="bkmrk-%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-"><thead><tr><th>Переменная</th><th>Описание</th></tr></thead><tbody><tr><td>`LOOKUP_BASIC_USER`</td><td>Имя пользователя для подключения KUMA к сервису</td></tr><tr><td>`LOOKUP_BASIC_PASSWORD`</td><td>Пароль для подключения KUMA к сервису</td></tr><tr><td>`OPENCTI_TOKEN`</td><td>Bearer-токен сервисного пользователя OpenCTI</td></tr></tbody></table>

KUMA обращается к сервису с использованием **Basic Authentication**, а сам сервис выполняет запросы к OpenCTI с **Bearer-токеном** сервисного пользователя.

---

## Настройка пользователя в OpenCTI

Для работы интеграции необходимо создать отдельного сервисного пользователя в OpenCTI.

1. Перейдите в **Settings → Security → Users** и нажмите **Create User**.
2. В окне **New User** укажите **Name** — имя пользователя.
3. Добавьте пользователя в заранее созданную группу **Integration**.
4. Отметьте пользователя как **Service Account**.
5. Откройте профиль пользователя и скопируйте **API Token** — он будет использоваться сервисом для обращения к GraphQL API OpenCTI.

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548326279.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548326279.png)

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548333513.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548333513.png)

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548341220.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548341220.png)

<p class="callout info">**Примечание:** группа Integration должна иметь роль с правами **только на чтение** в соответствии с принципом минимально необходимых привилегий.</p>

---

## API сервиса OpenCTI-KUMA Lookup Proxy

Сервис предоставляет два HTTP endpoint:

<table id="bkmrk-%D0%9C%D0%B5%D1%82%D0%BE%D0%B4-endpoint-%D0%9D%D0%B0%D0%B7%D0%BD%D0%B0"><thead><tr><th>Метод</th><th>Endpoint</th><th>Назначение</th></tr></thead><tbody><tr><td>`POST`</td><td>`/api/1.1/lookup`</td><td>Проверка индикаторов (используется KUMA)</td></tr><tr><td>`GET`</td><td>`/health`</td><td>Мониторинг состояния сервиса</td></tr></tbody></table>

### Обработка запроса

KUMA отправляет список индикаторов в формате JSON. Каждый элемент массива содержит значение индикатора для проверки в OpenCTI.

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548347383.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548347383.png)

Сервис обрабатывает запрос в три этапа:

1. **Аутентификация** — проверка заголовка `Authorization: Basic base64(user:password)`. Значения сравниваются с `LOOKUP_BASIC_USER` и `LOOKUP_BASIC_PASSWORD`. При несоответствии запрос отклоняется.
2. **Нормализация индикаторов** — например, из URL-адреса дополнительно извлекаются доменное имя и IP-адрес для расширения области поиска.
3. **Поиск в OpenCTI через GraphQL API** — сначала среди объектов **Indicators**, затем, при отсутствии совпадений, среди **Observables**. Для авторизации используется API-токен сервисного пользователя.

### Поля обогащения

При обнаружении индикатора в OpenCTI событие KUMA обогащается следующими данными:

<table id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-descri"><thead><tr><th>Поле</th><th>Описание</th></tr></thead><tbody><tr><td>`description` / `x_opencti_description`</td><td>Описание индикатора</td></tr><tr><td>`pattern`</td><td>STIX-паттерн индикатора</td></tr><tr><td>`created_at`</td><td>Дата создания</td></tr><tr><td>`updated_at`</td><td>Дата последнего обновления</td></tr><tr><td>`valid_from`</td><td>Дата начала актуальности индикатора</td></tr><tr><td>`valid_until`</td><td>Дата окончания актуальности индикатора</td></tr><tr><td>`x_opencti_score`</td><td>Степень доверия от 0 до 100</td></tr><tr><td>`objectLabel`</td><td>Теги индикатора / наблюдаемого объекта</td></tr><tr><td>`createdBy`</td><td>Источник информации</td></tr><tr><td>`reports`</td><td>Связанные аналитические отчёты (при наличии)</td></tr></tbody></table>

<table border="1" id="bkmrk--9" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/KUpimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/KUpimage.png)

</td><td>[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/Aubimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/Aubimage.png)

</td></tr></tbody></table>

## Настройка на стороне KUMA

Для интеграции в KUMA используется механизм **cybertrace-http**, обеспечивающий потоковое обогащение событий.

### 1. Создание секрета

Перейдите в **Ресурсы → Секреты → Добавить** и заполните параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9D%D0%B0"><thead><tr><th>Параметр</th><th>Значение</th></tr></thead><tbody><tr><td>Название</td><td>`<название секрета>`</td></tr><tr><td>Тенант</td><td>`<название тенанта, например, Main>`</td></tr><tr><td>Тип</td><td>`credentials`</td></tr><tr><td>Пользователь</td><td>`<LOOKUP_BASIC_USER>`</td></tr><tr><td>Пароль</td><td>`<LOOKUP_BASIC_PASSWORD>`</td></tr><tr><td>Описание</td><td>*(опционально)*</td></tr></tbody></table>

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/image-1775548411657.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/image-1775548411657.png)

### 2. Создание правила обогащения

Перейдите в **Ресурсы → Правила обогащения → Добавить** и заполните параметры:

<table id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9D%D0%B0-1"><thead><tr><th>Параметр</th><th>Значение</th></tr></thead><tbody><tr><td>Название</td><td>`<название правила обогащения>`</td></tr><tr><td>Тенант</td><td>`<название тенанта, например, Main>`</td></tr><tr><td>Исходный тип</td><td>`cybertrace-http`</td></tr><tr><td>URL</td><td>`<IP-адрес/FQDN сервера OpenCTI:порт>`</td></tr><tr><td>Секрет</td><td>`<секрет, созданный на предыдущем шаге>`</td></tr><tr><td>Ключевые поля</td><td>`<поля, значения которых передаются в OpenCTI на анализ>`</td></tr><tr><td>Время ожидания</td><td>`0`</td></tr><tr><td>Макс. кол-во событий в очереди</td><td>`1 000 000`</td></tr><tr><td>Описание</td><td>*(опционально)*</td></tr><tr><td>Параметры фильтра</td><td>`<условия срабатывания правила, например: внутренние IP → внешние IP>`</td></tr></tbody></table>

### 3. Подключение правила к коррелятору

После создания добавьте правило обогащения на нужный коррелятор.

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/I82image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/I82image.png)

## Производительность и рекомендации

Количество запросов к сервису OpenCTI-KUMA Lookup Proxy не ограничено жёстко в коде, однако зависит от:

- производительности сервера;
- параметров Gunicorn;
- производительности базы данных OpenCTI;
- сложности GraphQL-запросов.

OpenCTI хранит данные в **Elasticsearch** в виде графовой модели STIX:

- **SDO** (STIX Domain Objects);
- **SRO** (STIX Relationship Objects).

Сложные графовые запросы могут существенно снижать производительность, поэтому **не рекомендуется** использовать интеграцию для обогащения всего потока событий.

**Рекомендуется применять интеграцию для:**

- корреляционных событий;
- событий, отфильтрованных по узким условиям.

## Пример работы

В качестве примера рассмотрим детектирование обращений к вредоносным IP-адресам из командной строки. Для этого:

1\. В нормализатор событий Windows Event ID 4688 добавьте извлечение IP-адресов из командной строки (\*названия полей могут отличаться с учетом Вашей схемы нормализации).

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/mHwimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/mHwimage.png)

2\. Отредактируйте правило обогащения (названия полей могут отличаться с учетом Вашей схемы нормализации). В разделе «Ключевые поля» укажите поле, в которое записывается IP адрес при его обнаружении в командной строке, тем самым «сужая» фильтр поиска событий для обогащения. Пример настройки правила обогащения ниже:

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/xaDimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/xaDimage.png)

3\. Сохраните и обновите параметры коллектора.

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/RkHimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/RkHimage.png)

4\. Создайте правило корреляции с фильтром:

```bash
DeviceEventClassID = 4688
AND DeviceProduct = 'Windows'
AND DeviceVendor = 'Microsoft'
AND SourceProcessName icontains [
  'cmd.exe',
  'powershell.exe'
]
AND tidetect('', Reason)

```

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/scaled-1680-/nidimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-04/nidimage.png)

5\. Привяжите правило к коррелятору. После выполнения настроек необходимо сохранить и обновить (можно и перезапустить) параметры коррелятора.

Таким образом, KUMA может обнаруживать обращения к вредоносным IP-адресам, выполняемым из командной строки, и автоматически обогащать такие события данными Threat Intelligence.