# Интеграция с Kaspersky MDR

<p class="callout info">Информация, приведённая на данной странице, является разработкой команды pre-sales и/или community KUMA и **НЕ** является официальной рекомендацией вендора.</p>

# Интеграция с Kaspersky MDR

## Описание интеграции

Интеграция с Kaspersky Managed Detection and Response позволяет автоматически импортировать инциденты из консоли MDR в KUMA. Скрипт периодически опрашивает API MDR, получает новые инциденты и создаёт соответствующие инциденты в KUMA через API.

---

## Предварительные требования

### 1. Сетевой доступ

На пограничном межсетевом экране создайте правило, разрешающее доступ к **mdr.kaspersky.com** по порту **TCP/443**.

### 2. Настройка пользователя и токена в KUMA

В KUMA добавьте пользователя с ролью **Младший аналитик**, сгенерируйте токен для взаимодействия по API и разрешите доступ к следующим методам API:

- `POST /events`
- `POST /incidents/create`
- `POST /incidents/comment`
- `POST /incidents/close`

### 3. Генерация токена в консоли MDR

1. Перейдите в **Параметры → API**.
2. Нажмите **Добавить** и укажите **Имя соединения**.


<p class="callout info">Это имя будет отображаться как имя пользователя при создании инцидентов, комментариев и вложений, поскольку токен доступа не привязан к конкретному пользователю.</p>
  
4. В поле **Роль пользователя** выберите роль **Администратор MDR**.
5. В поле **Тенант** выберите тенант, инциденты которого необходимо импортировать в KUMA.  

<p class="callout info">Если для инцидентов, создаваемых в консоли MDR, в поле Тенант отсутствует значение — укажите в поле Тенант значение «Корневой тенант», иначе скрипт не обнаружит эти инциденты.</p>

6. Нажмите **Создать**.

В результате вы получите:

- **JWT Token** (он же `refresh_token`) — это первичный токен со сроком действия 24 часа. Данный токен требуется активировать, чтобы получить новую пару `refresh_token` / `access_token`.
- **ClientID** — идентификатор клиента, который необходимо указывать при каждом запросе к API MDR.

Сохраните оба значения — они потребуются на этапе настройки.

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/scaled-1680-/image-1774360741536.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774360741536.png)
<p align="center">
  <img src="https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774361228938.png" width="300">
</p>

### 4. Загрузка репозитория

[Скачайте](https://github.com/KUMA-Community/MDR-integrations) содержимое репозитория MDR-integrations. В качестве альтернативы можно:

- Загрузить только папку [**mdr\_integration**](https://github.com/KUMA-Community/MDR-integrations/tree/main/mdr_integration) через сервис <https://download-directory.github.io/>
- Клонировать репозиторий напрямую на сервер KUMA:

```bash
git clone https://github.com/KUMA-Community/MDR-integrations.git
```

### 5. Получение цепочки сертификатов

Загрузите актуальную цепочку сертификатов для **mdr.kaspersky.com** в формате PEM. Для этого:

1. Откройте <https://mdr.kaspersky.com> в браузере.
2. Просмотрите информацию о сертификате и экспортируйте все сертификаты цепочки (как правило, 2–3 файла).
<p align="center">
  <img src="https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774361549088.png" width="300">
</p>
4. Объедините их в один файл командой:

```bash
cat "DigiCert Global G2 TLS RSA SHA256 2020 CA1.crt" "DigiCert Global Root G2.crt" "_.mdr.kaspersky.crt" > mdr.pem
```

Полученный файл `mdr.pem` потребуется на этапе настройки.

---

## Настройка

### Шаг 1. Размещение файлов на сервере

Скопируйте архив **MDR-integrations-main.zip** на сервер (при распределённой инсталляции — на сервер Core) и распакуйте его в папку `/opt`:

```bash
unzip MDR-integrations-main.zip -d /opt/
```

Уберите лишний уровень вложенности:

```bash
mv /opt/MDR-integrations-main/mdr_integration /opt/
rm -rf /opt/MDR-integrations-main
```

### Шаг 2. Создание файла конфигурации

Перейдите в папку с конфигурацией и создайте файл `config.yml` из шаблона:

```bash
cd /opt/mdr_integration/conf
cp sample_config.yml config.yml
```

Отредактируйте файл `config.yml`:

- В секции **General settings** укажите `client_id` (значение **ClientID** из консоли MDR).
- В секции **mdr_sync**:
  - в ветке **modules** - **incident** для параметра **enable** введите **true** вместо **false**
  - в этой же ветке для параметра **min_creation_time** укажите время, начиная с которого требуется выполнить импорт инцидентов
- В секции **Modules settings → kuma** укажите:
  - `api_url` — FQDN или IP-адрес с портом API KUMA (по умолчанию порт `7223`).
  - `api_token` — токен, сгенерированный при создании учётной записи пользователя KUMA.
  - `tenant_id` — идентификатор тенанта KUMA, в котором будут создаваться инциденты.

<p class="callout info">tenant_id можно получить из события аудита KUMA.</p>

<p align="center">
  <img src="https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774362388243.png" width="600">
</p>


<p class="callout warning">Закомментируйте всю секцию thehive</p>
- 

<p align="center">
  <img src="https://kb.kuma-community.ru/uploads/images/gallery/2026-08/image-1787158149593.png" width="600">
</p>



### Шаг 3. Настройка токенов

Скрипт использует два файла токенов:

- **`.refresh_token`** — заполняется вручную один раз. Это **JWT Token**, полученный в консоли MDR на этапе предварительных требований.
- **`.access_token`** — заполнять вручную **не нужно**. При запуске скрипт автоматически обменивает `refresh_token` на пару `access_token` + обновлённый `refresh_token` через MDR API и записывает их в файлы. В дальнейшем фоновый процесс `TokenUpdater` проверяет и обновляет токены каждые 10 минут.

Создайте оба файла (`.access_token` должен быть пустым):

```bash
touch /opt/mdr_integration/conf/.refresh_token
touch /opt/mdr_integration/conf/.access_token
```

Запишите JWT Token из консоли MDR в файл `.refresh_token`:

```bash
echo -n 'ВСТАВЬТЕ_ТОКЕН_ЗДЕСЬ' > /opt/mdr_integration/conf/.refresh_token
```

> **Важно:** В конце файла не должно быть символа новой строки (`\n`) — иначе аутентификация завершится ошибкой. Флаг `-n` в команде `echo` предотвращает его добавление. Если вы вставили токен вручную, проверьте и при необходимости удалите символ новой строки:
>
> ```bash
> # Проверяем наличие символа новой строки (результат "1" означает, что он есть)
> wc -l /opt/mdr_integration/conf/.refresh_token
>
> # Если вывод "1 .refresh_token" — удаляем символ
> perl -p -i -e 'chomp if eof' /opt/mdr_integration/conf/.refresh_token
>
> # Проверяем повторно (должен быть вывод "0 .refresh_token")
> wc -l /opt/mdr_integration/conf/.refresh_token
> ```

### Шаг 4. Указание начальной точки сбора инцидентов

В файле `.last_check` укажите момент времени, начиная с которого нужно собирать инциденты. Значение задаётся в миллисекундах (Unix timestamp × 1000, 13 цифр).

Для получения нужного значения используйте команду:

```bash
# Пример: получить timestamp для 1 января 2024 00:00:00
date -d "2024-01-01 00:00:00" +%s000
```

Запишите полученное значение в файл:

```bash
echo -n '1704060000000' > /opt/mdr_integration/conf/.last_check
```

<p class="callout info">Для тестирования укажите время, незадолго до появления последнего инцидента в MDR.</p>

### Шаг 5. Обновление сертификата

Замените файл сертификата по умолчанию на актуальный, подготовленный в разделе **Предварительные требования**:

```bash
cp /path/to/mdr.pem /opt/mdr_integration/conf/mdr.pem
```
### Шаг 6. Редактирование скрипта main.py

Закомментируйте следующие строки в скрипте main.py:


```bash
#from src.integration_thehive import TheHive
```
```bash
#the_hive = TheHive(config)
```
```bash
#process_the_hive = multiprocessing.Process(target = the_hive.run, args=(logging_queue, process_logging_configurer))
```
```bash
#process_the_hive.start()
```
 

### Шаг 7. Проверка работоспособности

Перейдите в папку со скриптом и запустите его:

```bash
cd /opt/mdr_integration
python3 ./main.py
```

Если при запуске скрипта в консоли отсутствую ошибки (кроме предупреждений о невалидном сертификате), значит интеграция работает корректно. Лог работы скрипта записывается в:

```
/opt/mdr_integration/log/app.log
```

Убедитесь, что инциденты из консоли MDR, созданные начиная с момента, указанного в `.last_check`, появились в KUMA.

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/scaled-1680-/image-1774367517939.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774367517939.png)

[![](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/scaled-1680-/image-1774367489591.png)](https://kb.kuma-community.ru/uploads/images/gallery/2026-03/image-1774367489591.png)

После проверки остановите скрипт (`Ctrl+C`).

### Шаг 7. Запуск в фоновом режиме

Запустите скрипт в фоне:

```bash
nohup python3 /opt/mdr_integration/main.py &
```

В качестве альтернативы Вы можете запустить скрипт для интеграции с MDR, как [сервис](https://github.com/KUMA-Community/MDR-integrations#run-util-as-a-service). В таком случае шаг 8 можно пропустить.

### Шаг 8. Автозапуск после перезагрузки

Настройте автоматический запуск скрипта через cron:

```bash
sudo crontab -e
```

Добавьте строку:

```
@reboot sleep 300 && python3 /opt/mdr_integration/main.py &
```

<p class="callout info">Задержка sleep 300 (5 минут) необходима, чтобы сервис kuma-core успел запуститься до начала работы скрипта.</p>