
Плагин Zabbix для оценки уязвимостей
Превратите уже используемый вами Zabbix в консоль управления уязвимостями.
ztc читает инвентаризацию ПО каждого хоста через штатный zabbix-agent2
(без установки дополнительного агента), сверяет её с Vulners и
отправляет обратно в Zabbix оценённые находки по каждому хосту — проблемы,
дашборды и CVSS-графики. Один статический бинарник — устанавливается одной командой.

UserParameters zabbix-agent2. Устранение уязвимостей выполняется через один разрешённый ключ и узкий sudoers — никогда через произвольный system.run.audit/linux; программы из реестра Windows — через Smart Audit, а установленные KB — через audit/kb (с CVSS для каждого CVE). Smart Audit не зависит от версии Zabbix.На вашем сервере Zabbix (или любом Linux-хосте, которому доступны Zabbix и Vulners):
curl -fsSL https://raw.githubusercontent.com/vulnersCom/zabbix-threat-control/master/deploy/install.sh | sudo sh
Установщик запросит ваш Vulners API-ключ и параметры подключения к Zabbix, установит systemd-сервис и предложит создать объекты Zabbix (ztc provision --all). Затем привяжите шаблон сбора данных к хостам, которые нужно сканировать, — см. docs/guide.md.
Прочие варианты (Docker, установка вручную, автономная среда, bootstrap через Zabbix): deploy/README.md.
hosts: zabbix-agent2 UserParameter
Linux → vulners.os / version / arch / packages
Windows → vulners.os / version / win.software / win.kb
│ (polled into Zabbix items)
▼
ztc scan ─► collect (Zabbix API) ─► audit (Vulners) ─► aggregate ─► sender ─► Zabbix
│
problems (CVSS severity) · dashboard · graphs · vulners.host tags ◄┘
ztc scan --daemon запускает цикл по расписанию; ztc provision создаёт шаблон Zabbix, отчётные хосты, триггеры и дашборд.
Vulners - Hosts, - Bulletins, - Packages, - Statistics.vulners.host. В Monitoring → Problems примените фильтр Tags: vulners.host Equals <host>, чтобы увидеть уязвимости конкретного хоста. (Одна находка = одна пара (уязвимость, хост).)Медианный CVSS: тренд и распределение оценок по всему парку:

Разбивка по severity — реальные значения Disaster / High / Average / Warning, а не один серый столбец «Not classified»:

Уязвимости одного хоста с помощью фильтра по тегу vulners.host:

Отдельная находка — с оценкой по CVSS, тегом хоста и ссылкой на vulners.com:

Для всего есть значение по умолчанию; секреты передавайте через переменные окружения (они переопределяют YAML-файл). Полный пример: config.example.yaml.
ztc --help выводит полный список.
ztc scan --daemon # run the scan loop on a schedule
ztc scan --once # a single cycle
ztc provision --all # create/reconcile templates, report hosts, dashboard
ztc fix --host H --package P # remediate a package (whitelisted, opt-in)
ztc upgrade # self-update, then re-run `provision --all`
ztc version --check # print version and check for updates
ztc fix обновляет уязвимый пакет через включённый в белый список ключ агента vulners.fix[<pkg>], который забирает worker на стороне хоста, — без произвольного выполнения команд. Его можно запускать вручную или, с scan --daemon --auto-fix, управлять им через подтверждение проблемы доверенным пользователем в Zabbix. Обоснование: docs/adr/0001-remediation-mechanism.md.
| Zabbix | 6.0 и 7.0 LTS, 7.4, 8.0 (определяется автоматически) |
| Аудируемые ОС | Linux (deb/rpm/apk/…), Windows (ПО + KB) |
| Где запускается ztc | Linux amd64 / arm64 |
Оригинальная Python-реализация осталась в истории git этого репозитория (коммиты до переписывания на Go) и в release-тегах до Go. Она использует те же имена на стороне Zabbix (группу, отчётные хосты, дашборд), но собирает данные через штатные ключи агента вместо поставляемого report.py, разделяет шаблон на две части и убирает Action для исправлений. Пошаговая инструкция (перенос конфигурации, очистка объектов, повторная настройка хостов, переключение механизма исправления): docs/MIGRATION.md.
go build ./... # compile
go test ./... # unit tests (no network)
go vet ./... && gofmt -l .
make build # -> bin/ztc
Тестовый стенд на Docker (Zabbix + agent + ztc) описан в deploy/docker/README.md. CI (сборка/тесты/линтер) запускается при каждом push; коммит с тегом v* публикует бинарники и GHCR-образ.
См. LICENSE.
| Переменная окружения | Назначение |
|---|
VULNERS_API_KEY | Ключ API Vulners (обязательно) |
VULNERS_BASE_URL | эндпоинт self-hosted / прокси для Vulners (необязательно) |
ZABBIX_URL | URL веб-интерфейса Zabbix (JSON-RPC API) |
ZABBIX_TOKEN | API-токен (предпочтительно) … |
ZABBIX_USER / ZABBIX_PASSWORD | … или пользователь + пароль |
ZABBIX_SERVER_FQDN / ZABBIX_SERVER_PORT | адрес назначения zabbix-sender |
ZTC_SCHEDULE | интервал сканирования демона (например, 1h) |
ZTC_MIN_CVSS | не создавать объекты для находок с CVSS ниже этого значения |