README.md

OpenCTI 6.9.29 — Deployment Guide

Для кого этот документ: клиенты, внедряющие OpenCTI с подключением коннекторов Cyber Threat Tech (CTT). Здесь описана готовая конфигурация Docker Compose, порядок запуска и детальные параметры каждого коннектора.


Содержание


Выбор совместимой версии коннекторов

Коннекторы CTT выпускаются двумя линиями образов, которые вместе покрывают весь диапазон OpenCTI 6.4.0 – 6.9.x. Все 7 коннекторов используют одну и ту же схему тегов, поэтому достаточно один раз задать версию в .env — она применится ко всем коннекторам.

Таблица соответствия

Версия вашей платформы OpenCTI Тег образа (CTT_CONNECTOR_VERSION) Линия
6.4.0 – 6.8.13 6.4.0 legacy (до connectors-SDK)
6.8.14 – 6.9.x актуальная версия 6.9.x, напр. 6.9.29 current
latest всегда новейшая выпущенная версия

Граница проходит по 6.8.14: начиная с этой версии OpenCTI ввёл новый механизм конфигурирования коннекторов (connectors-SDK). Legacy-образ (тег 6.4.0) рассчитан на все платформы ниже этой границы; для 6.8.14 и новее берите тег, соответствующий вашей версии.

Как выбрать тег — по шагам

  1. Узнайте версию своей платформы. В интерфейсе OpenCTI: Settings → About, либо из образа в docker-compose: значение opencti/platform:<версия>. В этом стенде версия платформы задаётся переменной OPENCTI_VERSION в .env.
  2. Сопоставьте её с таблицей выше и определите нужный тег.
  3. Пропишите тег в .env:
    • платформа 6.4.0 – 6.8.13CTT_CONNECTOR_VERSION=6.4.0;
    • платформа 6.8.14 – 6.9.xCTT_CONNECTOR_VERSION=6.9.29 (или иной доступный тег линии 6.9.x, ближайший к вашей версии). В этом стенде по умолчанию CTT_CONNECTOR_VERSION=${OPENCTI_VERSION} — то есть тег коннекторов совпадает с версией платформы; для платформ 6.4.0 – 6.8.13 задайте 6.4.0 явно.
  4. Перезапустите коннекторы: docker compose up -d.

Частые вопросы

  • У меня OpenCTI 6.7.x / 6.8.5 — какой тег? 6.4.0 (это весь диапазон 6.4.0 – 6.8.13).
  • У меня 6.8.14 или 6.9.x, но нет тега ровно под мою версию. Возьмите ближайший доступный тег линии 6.9.x (например 6.9.29) — он совместим в пределах текущей линии.
  • Что значит latest? Указывает на новейшую выпущенную линию; переиздание старой линии (6.4.0) его не перетирает. Для воспроизводимости в проде закрепляйте конкретный тег, а не latest.

Та же таблица продублирована в README каждого коннектора.

Архитектура

Данный деплой разворачивает 22 сервиса в одном Docker Compose стеке:

┌─────────────────────────────────────────────────────────────────────┐
│                         ИНФРАСТРУКТУРА                              │
│  Redis 7.4.1 │ Elasticsearch 8.17.1 │ MinIO │ RabbitMQ 4.0          │
├─────────────────────────────────────────────────────────────────────┤
│                      ПЛАТФОРМА OPENCTI                              │
│          opencti/platform:6.9.29  │  opencti/worker:6.9.29 (×3)     │
├───────────────────────┬─────────────────────────────────────────────┤
│  ВСТРОЕННЫЕ           │  ПУБЛИЧНЫЕ              │  CTT (ПЛАТНЫЕ)    │
│  КОННЕКТОРЫ           │  КОННЕКТОРЫ             │  КОННЕКТОРЫ       │
│  ─────────────────    │  ─────────────────────  │  ───────────────  │
│  export-file-stix     │  MITRE ATT&CK           │  ThreatKB         │
│  export-file-csv      │  OpenCTI Datasets       │  Report Hub       │
│  export-file-txt      │  CISA KEV               │  Incident Hub     │
│  import-file-stix     │                         │  Threat Feed      │
│  import-document      │                         │  WHOIS API        │
│  analysis             │                         │  Noise Control    │
│                       │                         │  IoC Lookup       │
└───────────────────────┴─────────────────────────┴───────────────────┘

Тип коннекторов CTT: EXTERNAL_IMPORT (ThreatKB, Report Hub, Incident Hub, Threat Feed) и INTERNAL_ENRICHMENT (WHOIS API, Noise Control, IoC Lookup).


Предварительные требования

Требование Описание
Docker версия 24.x или выше
Docker Compose версия 2.x (docker compose без дефиса)
Оперативная память минимум 16 ГБ (рекомендуется 32 ГБ)
Дисковое пространство минимум 50 ГБ для томов Elasticsearch и MinIO
vm.max_map_count не менее 1 048 575 (требование Elasticsearch)
API-ключи CTT получить у <info@cyberthreattech.ru>

Настройка vm.max_map_count

Linux / WSL2:

sudo sysctl -w vm.max_map_count=1048575
# Чтобы сохранить после перезагрузки:
echo "vm.max_map_count=1048575" | sudo tee -a /etc/sysctl.conf

Windows (WSL2 — через .wslconfig):

# %UserProfile%\.wslconfig
[wsl2]
kernelCommandLine=sysctl.vm.max_map_count=1048575

Быстрый старт

1. Подготовьте файл окружения

Рекомендуемый способ — интерактивный мастер настройки Setup Wizard. Он создаёт или обновляет .env, генерирует секреты, предлагает выбрать CTT-коннекторы чекбоксами, запрашивает API-ключи только для выбранных, валидирует ввод и при необходимости позволяет изменить расширенные параметры.

Linux / WSL2 / macOS:

chmod +x setup.sh
./setup.sh

Windows PowerShell:

.\setup.ps1

Включённые CTT-коннекторы записываются в COMPOSE_PROFILES. После настройки обычный docker compose up -d поднимет инфраструктуру, OpenCTI, стандартные/публичные коннекторы и только выбранные CTT-коннекторы.

Ручной способ всё ещё поддерживается:

cp .env.sample .env

Откройте .env и заполните все значения ChangeMe. Обязательные параметры:

Параметр Что нужно сделать
MINIO_ROOT_USER / MINIO_ROOT_PASSWORD Сгенерировать UUID: python3 -c "import uuid; print(uuid.uuid4())"
OPENCTI_ADMIN_PASSWORD Установить надёжный пароль
OPENCTI_ADMIN_TOKEN Уникальный UUIDv4
OPENCTI_ENCRYPTION_KEY openssl rand -base64 32
CTT_*_API_KEY API-ключи, полученные от CTT

2. Запустите стек

# Если .env подготовлен интерактивным конфигуратором
docker compose up -d

При ручной настройке .env можно запускать сервисы по этапам:

# Запуск инфраструктуры, OpenCTI, worker и стандартных коннекторов
docker compose up -d redis elasticsearch minio rabbitmq opencti worker connector-export-file-stix connector-export-file-csv connector-export-file-txt connector-import-file-stix connector-import-document connector-analysis connector-mitre connector-opencti connector-cisa-known-exploited-vulnerabilities

# После первичного импорта публичных данных — запустите CTT-коннекторы первого этапа:
docker compose up -d connector-ctt-threatkb connector-ctt-report-hub \
  connector-ctt-incident-hub

# После первичного наполнения базы знаний и отчетов — запустите поток IoC и обогащение:
docker compose up -d connector-ctt-threat-feed connector-ctt-ioc-lookup \
  connector-ctt-whois-api connector-ctt-noise-control

Совет: docker compose дождётся healthcheck-зависимостей перед запуском OpenCTI, worker и коннекторов. Проверить готовность сервисов можно командой docker compose ps.

3. Проверьте работу

# Статус всех сервисов
docker compose ps

# Логи конкретного коннектора
docker compose logs -f connector-ctt-threatkb

OpenCTI будет доступен по адресу: http://localhost:8080


Setup Wizard (setup.sh / setup.ps1)

Интерактивный мастер настройки развёртывания. Один скрипт делает всё, что нужно перед первым docker compose up -d:

  • читает .env.sample как baseline и .env как пользовательский слой;
  • генерирует криптостойкие секреты вместо placeholder-ов ChangeMe* (MINIO_ROOT_*, RABBITMQ_DEFAULT_PASS, OPENCTI_SESSION_SECRET, OPENCTI_ADMIN_TOKEN, OPENCTI_HEALTHCHECK_ACCESS_KEY, OPENCTI_ENCRYPTION_KEY);
  • спрашивает базовые параметры платформы (URL, порт, e-mail админа, пароль, память JVM, число worker-ов);
  • предлагает чекбокс-меню для выбора семи CTT-коннекторов;
  • запрашивает API-ключи только для выбранных коннекторов;
  • позволяет настроить общие параметры CTT (дата начала импорта, язык, лог-уровень) и опционально — расширенные параметры каждого коннектора и интервалы публичных коннекторов;
  • валидирует каждое значение (URL, e-mail, порт, число, ISO 8601, YYYYMMDD, размер памяти, score 0–100);
  • показывает итоговую сводку и просит подтвердить запись;
  • пишет .env, всегда используя .env.sample как структурный шаблон — это сохраняет комментарии и подтягивает новые ключи при обновлении репозитория.

Один и тот же data-driven каталог коннекторов используется для всех экранов: меню, API-ключи, расширенные параметры. Добавление нового коннектора правится в одном месте и в setup.sh, и в setup.ps1.

Экраны мастера

 ╔══════════════════════════════════════════════════════════════════╗
 ║                                                                  ║
 ║        CTT × OpenCTI — Setup Wizard                              ║
 ║        Cyber Threat Tech · OpenCTI 6.9.29 · v2.0                 ║
 ║                                                                  ║
 ╚══════════════════════════════════════════════════════════════════╝

 [1/4]  ▸ Основные параметры платформы
 ──────────────────────────────────────────────────────────────────
  Публичный URL OpenCTI [http://localhost:8080]:
  Адрес прослушивания [0.0.0.0]:
  Порт OpenCTI [8080]:
  Email администратора [admin@opencti.io]:
  Пароль администратора:
  …

 [2/4]  ▸ Выбор CTT-коннекторов
 ──────────────────────────────────────────────────────────────────
  ↑/↓ или j/k — навигация · Space — переключить · Enter — далее

   ▸ [✓] ThreatKB        база знаний APT, кампаний и ВПО
     [✓] Report Hub      отчёты, статьи и PDF в STIX
     [✓] Incident Hub    структурированные инциденты ИБ
     [ ] Threat Feed     поток IoC: IP, домены, URL, хэши
     [ ] WHOIS API       обогащение доменов WHOIS/RDAP
     [ ] Noise Control   снижение score шумных IoC
     [ ] IoC Lookup      обогащение IoC оценками и атрибуцией

 [3/4]  ▸ Параметры CTT
 ──────────────────────────────────────────────────────────────────
  ⚙ Общие параметры CTT
  ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
    Дата начала импорта (YYYYMMDD) [20260101]:
    Язык данных (eng,ru) [eng]:
    Уровень логов (debug,info,warn,error) [info]:

  ⚙ API-ключи выбранных коннекторов
  ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
    ThreatKB API key:
    …

  Настроить расширенные параметры выбранных коннекторов? [y/N]:

 [4/4]  ▸ Сводка
 ──────────────────────────────────────────────────────────────────
  ┌─ Платформа
  │  URL           http://localhost:8080
  │  Listen        0.0.0.0:8080
  │  Admin         admin@opencti.io
  │  ES память     4G
  │  Workers       3
  ├─ Общие параметры CTT
  │  Дата импорта  20260101
  │  Язык          eng
  │  Лог-уровень   info
  ├─ Активные CTT-коннекторы
  │  ✓ ThreatKB       ✓ ключ задан
  │  ✓ Report Hub     ✓ ключ задан
  │  ✓ Incident Hub   ✓ ключ задан
  └─ Файл окружения
     /path/to/.env

  Применить настройки и записать .env? [Y/n]:

Флаги командной строки

Флаг (bash) Флаг (PowerShell) Назначение
--defaults -Defaults Применить дефолты из .env.sample, сгенерировать недостающие секреты и выйти. Без интерактива.
--dry-run -DryRun Показать итоговую сводку и/или содержимое .env, но не записывать файл.
-h, --help -Help Показать справку.

Флаги можно сочетать: ./setup.sh --defaults --dry-run покажет, что было бы записано при автоматическом применении дефолтов.

Типовые сценарии:

# Первая установка — интерактивный мастер
./setup.sh

# CI / автоматизация — без вопросов, с дефолтами из .env.sample
./setup.sh --defaults

# Проверка перед записью
./setup.sh --dry-run

Поведение при повторном запуске

  • Уже заданные значения становятся дефолтами в prompts — нажать Enter, чтобы оставить как есть.
  • Сгенерированные секреты не перезаписываются: если значение уже не ChangeMe*, оно сохраняется.
  • Чекбокс-меню коннекторов восстанавливает текущий выбор из COMPOSE_PROFILES. Если вы намеренно сняли коннектор — повторный запуск уважает ваш выбор (дефолты включаются только при полностью пустом COMPOSE_PROFILES, т.е. при самом первом запуске).
  • API-ключи выбранных коннекторов помечены как «уже задан» — Enter, чтобы оставить.

Слой .env.sample + .env

Мастер всегда читает оба файла в таком порядке:

  1. .env.sample — baseline. Все ключи, которые появились в новой версии репозитория, попадают в память.
  2. .env — пользовательский слой. Перетирает значения baseline там, где они уже заданы.

При записи .env мастер всегда берёт за основу .env.sample (с его комментариями и разделителями), затем подставляет значения из памяти. Это значит:

  • При обновлении репозитория git pull принесёт новые ключи в .env.sample, и следующий запуск мастера автоматически добавит их в .env (с дефолтным или интерактивно заданным значением).
  • Комментарии и структура .env всегда соответствуют актуальному .env.sample — устаревшие подсказки не накапливаются.

Валидация значений

Каждый prompt привязан к валидатору:

Поле Формат
OPENCTI_BASE_URL, *_API_BASE_URL http(s)://…
OPENCTI_APP_PORT целое 1–65535
OPENCTI_ADMIN_EMAIL RFC-совместимый e-mail
ELASTIC_MEMORY_SIZE 2G, 4G, 8G, 512M
CTT_*_IMPORT_START_DATE YYYYMMDD или пусто
CONNECTOR_*_DURATION_PERIOD, *_OVERLAP ISO 8601 (PT1H, P1D, …)
CTT_THREAT_FEED_LATEST 1h / 4h / 12h / day
CTT_THREAT_FEED_MIN_SCORE_* 0–100
CTT_IOC_LOOKUP_DETECTION_FLAG_THRESHOLD 0–100
CTT_LANGUAGE eng / ru
CONNECTOR_CTT_LOG_LEVEL debug / info / warn / error

Ввод вне допустимого формата сопровождается понятным сообщением и повторным запросом.

Troubleshooting

  • «Cannot find .env.sample near this script.» — запустите скрипт из корня репозитория или передайте абсолютный путь: /path/to/setup.sh.
  • Меню коннекторов рисуется ломаными символами — терминал не поддерживает UTF-8 или цветовые escape-последовательности. Перейдите на современный эмулятор (iTerm2, Windows Terminal, GNOME Terminal, Alacritty).
  • PowerShell ругается на политику исполнения — однократно: powershell -ExecutionPolicy Bypass -File .\setup.ps1 или глобально Set-ExecutionPolicy -Scope CurrentUser RemoteSigned.
  • Хочу сбросить всё к дефолтам — удалите .env и запустите ./setup.sh --defaults (или --dry-run для preview).
  • Случайно ввёл пароль с пробелом / переносом строки — secure-ввод обрезает CR, но не пробелы; перезапустите prompt (Ctrl-C → повторный запуск мастера; уже заданный пароль покажется как «уже задан, Enter — оставить», просто введите новое значение).

Docker Swarm Stack

Для production-развёртывания в Docker Swarm добавлен файл docker-stack.yml. Он использует overlay-сеть, Swarm configs для rabbitmq.conf, deploy-политики restart/update/rollback, resource reservations/limits, health checks, лог-ротацию и placement constraints для разделения stateful и application-сервисов.

Рекомендуемый способ — скрипт деплоя

./swarm-deploy.sh              # Linux/macOS
.\swarm-deploy.ps1             # Windows (PowerShell)

Скрипт берёт на себя то, об что обычно спотыкаются:

  • грузит .env в окружение и отдаёт docker-stack.yml напрямую в docker stack deploy, который сам разворачивает ${VAR} и дефолты вроде ${CTT_CONNECTOR_VERSION:-${OPENCTI_VERSION}} (через compose-рендер деплой НЕ идёт: его нормализатор типов ломает Swarm-валидатор — cpus must be a string, mode must be a number, published must be an integer);
  • проверяет, что узел в режиме Swarm, и при необходимости предлагает docker swarm init;
  • проверяет node labels из placement constraints (opencti.app, opencti.storage) и в single-node Swarm назначает их автоматически, а в мультинодовом — подсказывает команды;
  • деплоит с --with-registry-auth (нужно для приватного реестра CTT-коннекторов).

Полезные флаги: --dry-run (показать превью стека через compose config без деплоя), --stack NAME (имя стека, по умолчанию ctt-opencti).

На production-кластере stateful-сервисы (redis, elasticsearch, minio, rabbitmq) должны запускаться на нодах с устойчивым диском или shared volume driver — иначе named volumes Docker будут локальными для конкретной ноды. Назначьте opencti.storage=true именно таким нодам вручную.

Ручной деплой (если не использовать скрипт)

docker swarm init
docker node update --label-add opencti.storage=true <node-name>
docker node update --label-add opencti.app=true <node-name>

# docker stack deploy не читает .env — грузим переменные в окружение,
# и docker сам подставит ${VAR} в docker-stack.yml при деплое:
set -a; . ./.env; set +a
docker stack deploy --with-registry-auth -c docker-stack.yml ctt-opencti

Проверка состояния:

docker stack services ctt-opencti
docker stack ps ctt-opencti
docker service logs -f ctt-opencti_opencti

В docker-stack.yml реплики заданы так:

Группа сервисов Поведение по умолчанию
Инфраструктура, OpenCTI replicas=1
Worker ${OPENCTI_WORKER_REPLICAS:-3}
Встроенные и публичные коннекторы replicas=1
CTT-коннекторы ${CONNECTOR_CTT_<NAME>_REPLICAS:-${CONNECTOR_CTT_REPLICAS_DEFAULT:-0}}

Каждый CTT-коннектор управляется своей переменной реплик (CONNECTOR_CTT_THREATKB_REPLICAS, …_REPORTHUB_REPLICAS, …_INCIDENTHUB_REPLICAS, …_THREATFEED_REPLICAS, …_WHOISAPI_REPLICAS, …_NOISECONTROL_REPLICAS, …_IOCLOOKUP_REPLICAS). Эти переменные заполняет setup.sh / setup.ps1 из выбора коннекторов: выбранный → 1, не выбранный → 0. То есть тот же выбор в мастере, что управляет COMPOSE_PROFILES для docker compose, теперь управляет и репликами в Swarm. Если переменная коннектора не задана, применяется общий CONNECTOR_CTT_REPLICAS_DEFAULT (по умолчанию 0).

Стандартные и публичные коннекторы стартуют сразу. Включить/выключить CTT-коннекторы можно тремя способами: (1) перезапустить мастер и заново развернуть стек, (2) вручную выставить нужные CONNECTOR_CTT_<NAME>_REPLICAS в .env и пере-развернуть, либо (3) поэтапно через docker service scale:

docker service scale \
  ctt-opencti_connector-ctt-threatkb=0 \
  ctt-opencti_connector-ctt-report-hub=0 \
  ctt-opencti_connector-ctt-incident-hub=0 \
  ctt-opencti_connector-ctt-threat-feed=0 \
  ctt-opencti_connector-ctt-ioc-lookup=0 \
  ctt-opencti_connector-ctt-whois-api=0 \
  ctt-opencti_connector-ctt-noise-control=0

# Этап 1: база знаний, отчёты и инциденты
docker service scale \
  ctt-opencti_connector-ctt-threatkb=1 \
  ctt-opencti_connector-ctt-report-hub=1 \
  ctt-opencti_connector-ctt-incident-hub=1

# Этап 2: поток IoC и обогащение
docker service scale \
  ctt-opencti_connector-ctt-threat-feed=1 \
  ctt-opencti_connector-ctt-ioc-lookup=1 \
  ctt-opencti_connector-ctt-whois-api=1 \
  ctt-opencti_connector-ctt-noise-control=1

Важно: Swarm игнорирует depends_on, поэтому readiness обеспечивается healthcheck/restart policy и staged rollout. Чтобы включить конкретные CTT-коннекторы при пере-развёртывании, задайте их CONNECTOR_CTT_<NAME>_REPLICAS=1 (это делает мастер setup.sh / setup.ps1 автоматически по вашему выбору) либо включите все разом через CONNECTOR_CTT_REPLICAS_DEFAULT=1, затем повторно запустите ./swarm-deploy.sh (он заново отрендерит стек с актуальным .env и применит изменения). Для первичного импорта MITRE/CISA при большом количестве связей можно временно снизить workers до одного: docker service scale ctt-opencti_worker=1, а после завершения импорта вернуть ctt-opencti_worker=3.


Публичные коннекторы

Публичные коннекторы поставляются от OpenCTI Platform и не требуют дополнительных API-ключей. Они служат базовым наполнением платформы таксономиями и фреймворками — рекомендуется запускать их первыми.

MITRE ATT&CK

Импортирует актуальную базу знаний MITRE ATT&CK: группы угроз, техники и тактики (TTP), инструменты, вредоносное ПО и отношения между ними. Является базовым источником таксономии для всех CTT-коннекторов.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_UPDATE_EXISTING_DATA false Обновлять существующие объекты
MITRE_INTERVAL 7 Интервал обновления в днях

OpenCTI Datasets

Загружает базовые справочные наборы данных платформы: страны, регионы, секторы экономики, стандартные метки TLP, словарь CVE-кластеров и другие общие объекты. Без этого коннектора часть объектов в других коннекторах может не разрешиться корректно.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_UPDATE_EXISTING_DATA false Обновлять существующие объекты
CONFIG_INTERVAL 7 Интервал обновления в днях

CISA Known Exploited Vulnerabilities

Синхронизирует каталог CISA KEV — список уязвимостей, активно эксплуатируемых в реальных атаках, с указанием дедлайна по патчингу для государственных организаций США. Полезен для приоритизации работы с CVE.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_UPDATE_EXISTING_DATA false Обновлять существующие объекты
CISA_CATALOG_URL официальный URL CISA URL JSON-каталога CISA KEV
CISA_CREATE_INFRASTRUCTURES false Создавать объекты Infrastructure
CISA_TLP TLP:CLEAR Уровень TLP для объектов
CISA_INTERVAL 2 Интервал обновления в днях

CTT коннекторы

Коннекторы Cyber Threat Tech предоставляются в виде Docker-образов. Для их использования необходим API-ключ — обратитесь по адресу info@cyberthreattech.ru.

Важно: CTT-коннекторы типа EXTERNAL_IMPORT (ThreatKB, Report Hub, Incident Hub, Threat Feed) наполняют базу знаний. Коннекторы типа INTERNAL_ENRICHMENT (WHOIS API, Noise Control, IoC Lookup) обогащают уже существующие объекты в OpenCTI — их следует запускать после первичного наполнения.


ThreatKB

Тип: EXTERNAL_IMPORT | Образ: registry.gitflic.ru/project/ctt/ctt_threatkb_connector/connector-ctt-threatkb:latest

Автоматически загружает в OpenCTI структурированную базу знаний об угрозах: APT-группировки, кибершпионские кампании, вредоносное ПО и инструменты атакующих. Данные формируются на основе Threat Intelligence отчётов и предоставляются в формате STIX 2.1 на русском и английском языках. При каждом запуске загружаются только объекты, изменившиеся с момента предыдущего импорта.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME ThreatKB Connector Отображаемое имя
CONNECTOR_SCOPE objects Тип импортируемых данных
CONNECTOR_LOG_LEVEL error Уровень логов: debug, info, warn, error
CONNECTOR_DURATION_PERIOD PT1H Интервал между запусками (ISO 8601)
CONNECTOR_UPDATE_EXISTING_DATA false Обновлять существующие объекты
THREATKB_API_BASE_URL https://api.cyberthreattech.ru/v2
THREATKB_API_KEY API-ключ CTT ThreatKB
THREATKB_IMPORT_START_DATE Начальная дата импорта, формат YYYYMMDD
THREATKB_LANGUAGE eng Язык данных: eng или ru
THREATKB_READ_TIMEOUT 60 Таймаут чтения ответа API (сек), мин. 15
THREATKB_RETRY_DELAY 30 Задержка перед повторной попыткой (сек)
THREATKB_RETRY_ATTEMPTS 3 Количество повторных попыток
THREATKB_IMPORT_OVERLAP PT10M Перекрытие временных окон импорта (ISO 8601)
THREATKB_IMPORT_SAFETY_DELAY PT1M Задержка от верхней границы окна (ISO 8601)
THREATKB_LABELS_USE_PREFIX false Добавлять префикс к меткам
THREATKB_LABELS_DISABLED Метки (через запятую); объект с такой меткой не импортируется
THREATKB_LABELS_ADD Метки (через запятую), добавляемые ко всем импортируемым объектам
THREATKB_MAIN_PREFIX ctt Основной префикс меток при THREATKB_LABELS_USE_PREFIX=true (по умолчанию из src/label_prefixes.yml)
THREATKB_PREVENT_USER_DATA_OVERWRITE false Не перезаписывать объекты OpenCTI без маркерной метки коннектора
THREATKB_OWNERSHIP_MARKER_LABEL threatkb Базовая метка владения; действует при THREATKB_PREVENT_USER_DATA_OVERWRITE=true

Продвинутый параметр. THREATKB_PREFIX_CATEGORIES — карта «метка → категория префикса». Обычно загружается из src/label_prefixes.yml внутри образа коннектора; задавать вручную стоит только при необходимости полностью переопределить встроенную карту категорий, поэтому в .env/Compose он не выведен.


Report Hub

Тип: EXTERNAL_IMPORT | Образ: registry.gitflic.ru/project/ctt/ctt_report_hub_connector/connector-ctt-report-hub:latest

Интегрирует в OpenCTI APT-отчёты, блоги и статьи от государственных организаций, компаний в сфере ИБ, исследовательских групп и отдельных авторов. CTT автоматически конвертирует человекочитаемые тексты в STIX 2.1 — с извлечёнными объектами (группировки, кампании, ВПО, TTP, CVE, IoC) и PDF-версией каждого отчёта. Псевдонимы одних и тех же угроз автоматически сопоставляются в единые сущности.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя коннектора
CONNECTOR_SCOPE application/json,application/pdf MIME-типы импортируемых данных
CONNECTOR_LOG_LEVEL info Уровень логов
CONNECTOR_UPDATE_EXISTING_DATA false Обновлять существующие объекты
CTT_REPORT_HUB_BASE_URL https://api.cyberthreattech.ru/v1 Базовый URL API
CTT_REPORT_HUB_API_KEY API-ключ CTT Report Hub
CTT_REPORT_HUB_IMPORT_START_DATE 7 дней назад Начальная дата, формат YYYYMMDD
CTT_REPORT_HUB_LANGUAGE eng Язык данных: eng или ru
CTT_REPORT_HUB_FETCH_INTERVAL 300 Интервал опроса API (сек)
CTT_REPORT_HUB_CONNECTION_TIMEOUT 30 Таймаут подключения к API (сек)
CTT_REPORT_HUB_READ_TIMEOUT 60 Таймаут чтения ответа API (сек)
CTT_REPORT_HUB_RETRY_DELAY 30 Задержка перед повторной попыткой (сек)
CTT_REPORT_HUB_RETRY_ATTEMPTS 5 Количество повторных попыток
CTT_REPORT_HUB_CREATE_OBSERVABLES false Создавать Observables в дополнение к Indicators
CTT_REPORT_HUB_CREATE_RELATED_TO true Создавать связи related-to
CTT_REPORT_HUB_CREATE_CUSTOM_TTPS true Создавать пользовательские Attack Patterns (не из MITRE)
CTT_REPORT_HUB_SET_DETECTION_FLAG false Помечать индикаторы из отчётов как готовые к детектированию
CTT_REPORT_HUB_LABELS_USE_PREFIX false Добавлять префикс к меткам
CTT_REPORT_HUB_REPORT_LABELS_DISABLED Метки (через запятую); отчёт с такой меткой не импортируется

Incident Hub

Тип: EXTERNAL_IMPORT | Образ: registry.gitflic.ru/project/ctt/ctt_incidenthub_connector/connector-ctt-incident-hub:latest

Интегрирует структурированные данные об инцидентах кибербезопасности из множества источников: отчёты об инцидентах, публикации государственных органов, материалы вендоров и исследовательских групп. Создаёт в OpenCTI объекты Incident, Note и Identity с перекрёстными связями. Организации, упомянутые в разных источниках, нормализуются в единые объекты для корреляции.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя
CONNECTOR_SCOPE application/json MIME-тип импортируемых данных
CONNECTOR_LOG_LEVEL info Уровень логов
CONNECTOR_DURATION_PERIOD PT1H Интервал между запусками (ISO 8601)
CONNECTOR_UPDATE_EXISTING_DATA true Обновлять существующие объекты
INCIDENTHUB_API_BASE_URL https://api.cyberthreattech.ru/v1
INCIDENTHUB_API_KEY API-ключ CTT Incident Hub
INCIDENTHUB_IMPORT_START_DATE 7 дней назад Начальная дата, формат YYYYMMDD
INCIDENTHUB_LANGUAGE eng Язык данных: eng или ru
INCIDENTHUB_READ_TIMEOUT 60 Таймаут чтения ответа API (сек)
INCIDENTHUB_RETRY_DELAY 30 Задержка перед повторной попыткой (сек)
INCIDENTHUB_RETRY_ATTEMPTS 5 Количество повторных попыток
INCIDENTHUB_LABELS_USE_PREFIX false Добавлять префикс к меткам
INCIDENTHUB_LABELS_DISABLED Метки (через запятую); объект с такой меткой не импортируется
INCIDENTHUB_LABELS_ADD Метки (через запятую), добавляемые ко всем импортируемым объектам

Threat Feed

Тип: EXTERNAL_IMPORT | Образ: registry.gitflic.ru/project/ctt/ctt_threat_feed_connector/connector-ctt-threat-feed:latest

Импортирует высокоскоростной поток индикаторов компрометации (IP, домены, URL, файловые хеши) с контекстом: категория угрозы, название ВПО, Threat Actor, инструменты, TTP, CVE, отраслевые теги. Лента содержит около 200 000 индикаторов ежедневно с индивидуальным score для каждого. Поддерживает гибкую настройку порогов для детектирования и импорта.

Пороги score: 0–20 — вероятно ложные срабатывания; 45+ — для использования в SIEM; 55+ — для активной блокировки.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя
CONNECTOR_SCOPE application/json MIME-тип импортируемых данных
CONNECTOR_LOG_LEVEL info Уровень логов
CTT_THREAT_FEED_API_KEY API-ключ CTT Threat Feed
CTT_THREAT_FEED_BASEURL https://api.cyberthreattech.ru/v1 Базовый URL API
CTT_THREAT_FEED_SSL_VERIFY true Проверять SSL-сертификат
CTT_THREAT_FEED_IP true Импортировать индикаторы по IP
CTT_THREAT_FEED_DOMAIN true Импортировать индикаторы по доменам
CTT_THREAT_FEED_URL true Импортировать индикаторы по URL
CTT_THREAT_FEED_HASH true Импортировать индикаторы по файловым хешам
CTT_THREAT_FEED_LATEST day Период ленты: 1h, 4h, 12h или day
CTT_THREAT_FEED_MIN_SCORE_IMPORT 20 Минимальный score для импорта
CTT_THREAT_FEED_MIN_SCORE_DETECTION_IP 45 Порог score для флага детектирования — IP
CTT_THREAT_FEED_MIN_SCORE_DETECTION_DOMAIN 45 Порог score для флага детектирования — Domain
CTT_THREAT_FEED_MIN_SCORE_DETECTION_URL 45 Порог score для флага детектирования — URL
CTT_THREAT_FEED_MIN_SCORE_DETECTION_HASH 45 Порог score для флага детектирования — Hash
CTT_THREAT_FEED_ONLY_NEW true Импортировать только новые индикаторы
CTT_THREAT_FEED_ONLY_ATTRIBUTED false Только атрибутированные индикаторы
CTT_THREAT_FEED_CREATE_CUSTOM_TTPS true Создавать пользовательские Attack Patterns
CTT_THREAT_FEED_CREATE_MITRE_TTPS false Создавать связи с MITRE ATT&CK TTP
CTT_THREAT_FEED_KEEP_NAMED_VULNS true Создавать именованные уязвимости отдельно от CVE
CTT_THREAT_FEED_INTERVAL 86400 Интервал опроса (сек); 3600 для ежечасного режима
CTT_THREAT_FEED_CONTIMEOUT 30 Таймаут подключения к API (сек)
CTT_THREAT_FEED_READTIMEOUT 120 Таймаут чтения из S3 (сек), увеличьте при медленном канале
CTT_THREAT_FEED_RETRY 2 Количество попыток загрузки ленты
CTT_THREAT_FEED_MAX_RETRIES 3 Максимум повторов при отправке в OpenCTI
CTT_THREAT_FEED_RETRY_DELAY 10 Начальная задержка перед повтором (сек)
CTT_THREAT_FEED_RETRY_BACKOFF_MULTIPLIER 2.0 Множитель экспоненциального backoff

WHOIS API

Тип: INTERNAL_ENRICHMENT | Образ: registry.gitflic.ru/project/ctt/ctt_whois_api_connector/connector-ctt-whois-api:latest

Обогащает объекты типов Domain-Name, URL и Indicator данными о регистрации доменов через WHOIS/RDAP. Автоматически определяет нужный протокол, обрабатывает поддомены (извлекает эффективный TLD), не создаёт нагрузку на публичные WHOIS-серверы. Результат записывается в описание объекта или в отдельную заметку (Note).

Коннектор работает в режиме on-demand обогащения — запускается вручную через интерфейс OpenCTI, автоматически (при CONNECTOR_AUTO=true) или через Playbooks.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя
CONNECTOR_SCOPE Domain-Name,Url,indicator Типы объектов для обогащения
CONNECTOR_AUTO false Автообогащение при появлении объекта
CONNECTOR_LOG_LEVEL info Уровень логов
CTT_WHOIS_API_API_KEY API-ключ CTT WHOIS
CTT_WHOIS_API_BASE_URL https://api.cyberthreattech.ru/v1 Базовый URL API
CTT_WHOIS_API_MAX_TLP TLP:AMBER+STRICT Максимальный TLP для обогащения
CTT_WHOIS_API_TIMEOUT 10 Таймаут API (сек)
CTT_WHOIS_API_WHOIS_OUTPUT_OBJECT note Куда писать результат: note или description
CTT_WHOIS_API_UPDATE_OUTPUT_ACTION overwrite Режим записи: overwrite или append
CTT_WHOIS_API_OUTPUT_FORMAT standard Формат вывода: standard или extended
CTT_WHOIS_API_OUTPUT_INCLUDE_RAW false Включить сырой WHOIS-ответ

Noise Control

Тип: INTERNAL_ENRICHMENT | Образ: registry.gitflic.ru/project/ctt/ctt_noise_control_connector/connector-ctt-noise-control:latest

Снижает количество ложных срабатываний, выявляя безопасные и «шумные» индикаторы: публичные DNS-серверы, CDN, легитимные домены, общеизвестные хеши. Для каждого объекта принимает одно из трёх решений и корректирует его score и флаг детектирования.

Действие Описание Изменение score
Not Found Объект не является шумовым без изменений
Change Объект может быть шумовым −10 (настраивается)
Drop Объект, вероятно, безопасен −50 (настраивается)
Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя
CONNECTOR_SCOPE IPv4-Addr,Domain-Name,Url,StixFile,indicator Типы объектов
CONNECTOR_AUTO false Автообогащение
CONNECTOR_LOG_LEVEL error Уровень логов
CTT_NOISE_CONTROL_API_KEY API-ключ CTT Noise Control
CTT_NOISE_CONTROL_BASE_URL https://api.cyberthreattech.ru/v1 Базовый URL API
CTT_NOISE_CONTROL_MAX_TLP TLP:AMBER+STRICT Максимальный TLP
CTT_NOISE_CONTROL_UPDATE_CONFIDENCE Обновлять Confidence по результату
CTT_NOISE_CONTROL_UPDATE_SCORE Обновлять Score по результату
CTT_NOISE_CONTROL_CHANGE_ACTION_SCORE_CHANGE 10 Величина снижения score для действия Change
CTT_NOISE_CONTROL_DROP_ACTION_SCORE_CHANGE 50 Величина снижения score для действия Drop
CTT_NOISE_CONTROL_DROP_ACTION_DETECTION_FLAG true Снимать флаг детектирования при Drop

IoC Lookup

Тип: INTERNAL_ENRICHMENT | Образ: registry.gitflic.ru/project/ctt/ctt_ioc_lookup_connector/connector-ctt-ioc_lookup:latest

Обогащает индикаторы (IP, домен, URL, файловые хеши) данными CTT: связанное ВПО, Threat Actors, инструменты, TTP из MITRE ATT&CK, CVE, геолокация и ASN. Обновляет score, confidence и флаг детектирования на основе актуальной threat intelligence. Поддерживает настройку порога для автоматической установки флага детектирования.

Переменная Обязательная По умолчанию Описание
OPENCTI_URL URL платформы OpenCTI
OPENCTI_TOKEN Токен service account коннектора
CONNECTOR_ID из .env Уникальный UUIDv4
CONNECTOR_NAME Отображаемое имя
CONNECTOR_SCOPE IPv4-Addr,Domain-Name,Url,StixFile,indicator Типы объектов
CONNECTOR_AUTO false Автообогащение
CONNECTOR_LOG_LEVEL info Уровень логов
CTT_IOC_LOOKUP_API_KEY API-ключ CTT IoC Lookup
CTT_IOC_LOOKUP_BASE_URL https://api.cyberthreattech.ru/v1/ Базовый URL API
CTT_IOC_LOOKUP_MAX_TLP TLP:AMBER+STRICT Максимальный TLP для обогащения
CTT_IOC_LOOKUP_UPDATE_CONFIDENCE true Обновлять Confidence
CTT_IOC_LOOKUP_UPDATE_SCORE true Обновлять Score
CTT_IOC_LOOKUP_UPDATE_VALID_FROM true Обновлять valid_from на основе last_seen
CTT_IOC_LOOKUP_LABEL_FORMAT short Формат меток: short или long
CTT_IOC_LOOKUP_SCORE_TYPE total Тип score: last (на момент last_seen) или total
CTT_IOC_LOOKUP_UPDATE_DESCRIPTION_ACTION Режим обновления описания: overwrite, append, prepend
CTT_IOC_LOOKUP_DETECTION_FLAG_THRESHOLD 45 Порог score для установки флага детектирования
CTT_IOC_LOOKUP_TIMEOUT 10 Таймаут API (сек)

Управление API-ключами CTT

Все API-ключи CTT хранятся в файле .env и передаются в контейнеры через переменные окружения. Файл .env никогда не коммитится в Git (исключён в .gitignore).

# Структура переменных в .env
CTT_THREATKB_API_KEY=<ключ от CTT>
CTT_INCIDENTHUB_API_KEY=<ключ от CTT>
CTT_REPORT_HUB_API_KEY=<ключ от CTT>
CTT_THREAT_FEED_API_KEY=<ключ от CTT>
CTT_WHOIS_API_KEY=<ключ от CTT>
CTT_NOISE_CONTROL_API_KEY=<ключ от CTT>
CTT_IOC_LOOKUP_API_KEY=<ключ от CTT>

Для получения API-ключей обратитесь: info@cyberthreattech.ru


Рекомендуемый порядок запуска коннекторов

Коннекторы имеют зависимости между собой: CTT-коннекторы сопоставляют объекты с таксономиями MITRE и OpenCTI, поэтому публичные коннекторы необходимо запустить первыми и дождаться завершения первичного импорта.

Шаг 1  →  MITRE ATT&CK        (группы, техники, инструменты)
Шаг 2  →  OpenCTI Datasets    (страны, секторы, TLP, базовые объекты)
Шаг 3  →  CISA KEV            (актуальные уязвимости)
           ↓
Шаг 4  →  ThreatKB            (APT, кампании, ВПО — база знаний CTT)
Шаг 5  →  Report Hub          (отчёты, статьи → STIX-объекты)
Шаг 6  →  Incident Hub        (инциденты → Incident + Note)
Шаг 7  →  Threat Feed         (поток IoC с оценками)
           ↓
Шаг 8  →  IoC Lookup          (обогащение IoC контекстом угроз)
Шаг 9  →  Noise Control       (снижение score шумных IoC)
Шаг 10 →  WHOIS API           (WHOIS-обогащение доменов и URL)

Примечание: Коннекторы обогащения (шаги 8–10) запускаются автоматически при CONNECTOR_AUTO=true или вручную. Рекомендуется включать автообогащение только после первичного заполнения базы, чтобы избежать лишних API-вызовов.


Обслуживание и мониторинг

Полезные команды

# Проверить статус всех сервисов
docker compose ps

# Логи конкретного коннектора (с отслеживанием)
docker compose logs -f connector-ctt-threat-feed

# Перезапустить коннектор
docker compose restart connector-ctt-threatkb

# Обновить образы CTT-коннекторов
docker compose pull connector-ctt-threatkb connector-ctt-report-hub \
  connector-ctt-incident-hub connector-ctt-threat-feed \
  connector-ctt-whois-api connector-ctt-noise-control connector-ctt-ioc-lookup
docker compose up -d connector-ctt-threatkb connector-ctt-report-hub \
  connector-ctt-incident-hub connector-ctt-threat-feed \
  connector-ctt-whois-api connector-ctt-noise-control connector-ctt-ioc-lookup

# Остановить только CTT-коннекторы (не трогая инфраструктуру)
docker compose stop connector-ctt-threatkb connector-ctt-report-hub \
  connector-ctt-incident-hub connector-ctt-threat-feed \
  connector-ctt-whois-api connector-ctt-noise-control connector-ctt-ioc-lookup

Health checks

OpenCTI публикует эндпоинт проверки работоспособности:

curl http://localhost:8080/health?health_access_key=<OPENCTI_HEALTHCHECK_ACCESS_KEY>

Ожидаемый ответ: {"status":"ok"} (HTTP 200).

Резервное копирование

Критичные данные хранятся в Docker-томах. Бэкап через tar работает из коробки только как cold backup, то есть при остановленном стеке. На работающем Elasticsearch Lucene-файлы могут изменяться прямо во время чтения архива, поэтому hot backup через tar может завершиться ошибками или дать неконсистентную копию.

mkdir -p backups
BACKUP_TS=$(date +%Y%m%d-%H%M%S)

# Остановить стек на время файлового бэкапа
docker compose stop

for volume in esdata s3data redisdata amqpdata; do
  docker run --rm \
    -v ctt_opencti_full_setup_${volume}:/data:ro \
    -v "${PWD}/backups":/backup \
    alpine tar czf "/backup/${volume}-${BACKUP_TS}.tar.gz" -C /data .
done

# Вернуть ранее созданные контейнеры в работу
docker compose start

Для проверки имён томов используйте:

docker volume ls | grep ctt_opencti_full_setup

Для production hot backup Elasticsearch нужен snapshot repository (например, S3/MinIO или filesystem repository), а не архивирование live-volume.


Документ подготовлен на основе официальных README репозиториев CTT (GitFlic) и документации OpenCTI Platform.
По вопросам API-ключей и поддержки: info@cyberthreattech.ru

Описание
Демонстрационный репозиторий развертывания OpenCTI с коннекторами сервисов CyberThreatTech
Конвейеры
0 успешных
0 с ошибкой
Разработчики