
zabbix-threat-control v3.0.0
Zabbix 취약점 평가 플러그인
Zabbix Threat Control (ztc)
이미 운영 중인 Zabbix를 취약점 관리 콘솔로 만들어 보세요.
ztc는 기본 zabbix-agent2를 통해 각 호스트의 소프트웨어 인벤토리를 읽고(추가 에이전트 배포 불필요), 이를 Vulners에 대조 감사하여 점수화된 호스트별 결과 — 문제, 대시보드 및 CVSS 그래프 — 를 Zabbix로 다시 푸시합니다. 단일 정적 바이너리이며, 단일 명령으로 설치됩니다.

왜 ztc인가
- 새 에이전트 없음, RCE 없음. 호스트는 표준 zabbix-agent2
UserParameter를 통해 인벤토리를 보고합니다. 수정은 단일 허용 키 + 제한된 sudoers를 통해서만 이루어집니다 — 임의의system.run은 절대 사용하지 않습니다. - Linux 및 Windows. Linux 패키지는 Vulners
audit/linux로, Windows 레지스트리 소프트웨어는 Smart Audit으로, 설치된 KB는audit/kb로 감사합니다(CVE별 CVSS 포함). Smart Audit은 Zabbix 버전과 무관합니다. - Zabbix 6.0, 7.0, 7.4 및 8.0. API 버전을 자동 감지하므로 사용자 측에서 유지 관리할 버전별 브랜치가 없습니다.
- 단순 목록이 아닌 실행 가능한 결과. 발견 항목은 CVSS 심각도로 점수가 매겨진 Zabbix 문제가 되며, 호스트별로 필터링할 수 있고, 기본 제공 대시보드에 중앙값 CVSS 및 점수 분포 그래프가 포함됩니다.
- 단일 바이너리. 단일 명령으로 설치되며 자체 업데이트됩니다.
빠른 시작
Zabbix 서버(Zabbix + Vulners에 접근할 수 있는 모든 Linux 호스트)에서:
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, 수동, air-gapped, 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 템플릿, 보고 호스트, 트리거 및 대시보드를 생성합니다.
Zabbix에서 얻을 수 있는 것
- 보고 호스트:
Vulners - Hosts,- Bulletins,- Packages,- Statistics. - 대시보드 — 심각도별 문제 개요, 보고서별 문제 목록, 중앙값 CVSS 점수 추세 및 CVSS 점수 분포 파이 차트.
- 심각도 점수 문제 — 각 발견 항목은 CVSS에 따라 Disaster / High / Average / Warning 수준으로 발생하므로 심각도별 문제(Problems by severity) 보기가 의미 있습니다.
- 호스트별 필터 — 모든 발견 항목에는
vulners.host태그가 포함됩니다. Monitoring → Problems에서Tags: vulners.host Equals <host>로 필터링하면 특정 호스트의 취약점을 확인할 수 있습니다. (발견 항목 하나 = (취약점, 호스트) 쌍 하나.)
플릿 전체의 중앙값 CVSS 추세 및 점수 분포:

심각도 분류 — 회색 "Not classified" 막대 하나가 아닌 실제 Disaster / High / Average / Warning 개수:

특정 호스트의 취약점 — vulners.host 태그 필터 사용:

단일 발견 항목 — CVSS로 점수화되고, 호스트 태그가 지정되며, vulners.com에 연결:

구성
모든 항목에는 기본값이 있으며, 비밀 정보는 환경 변수로 제공하세요(환경 변수가 YAML 파일을 재정의합니다). 전체 예시: config.example.yaml.
| 환경 변수 | 용도 |
|---|---|
VULNERS_API_KEY | Vulners API 키 (필수) |
VULNERS_BASE_URL | 자체 호스팅 / 프록시 Vulners 엔드포인트 (선택 사항) |
ZABBIX_URL | Zabbix 프론트엔드 URL (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 미만의 발견 항목 제외 |
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>] 에이전트 키를 통해 취약한 패키지를 업그레이드합니다 — 임의 명령 실행은 없습니다. 수동으로 실행하거나 scan --daemon --auto-fix를 사용하면 신뢰할 수 있는 사용자가 Zabbix에서 문제를 승인하는 방식으로 구동됩니다. 근거: docs/adr/0001-remediation-mechanism.md.
지원 매트릭스
| Zabbix | 6.0 & 7.0 LTS, 7.4, 8.0 (자동 감지) |
| 감사 대상 OS | Linux (deb/rpm/apk/…), Windows (소프트웨어 + KB) |
| ztc 실행 환경 | Linux amd64 / arm64 |
Python 버전에서의 마이그레이션
원래 Python 구현은 이 저장소의 git 기록(Go 재작성 이전 커밋)과 Go 이전 릴리스 태그에 남아 있습니다. 동일한 Zabbix 측 이름(그룹, 보고 호스트, 대시보드)을 공유하지만, 번들된 report.py 대신 기본 에이전트 키로 수집하고, 템플릿을 두 개로 분할하며, fix 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(빌드/테스트/린트)는 모든 푸시에서 실행되며, v* 커밋에 태그를 지정하면 바이너리와 GHCR 이미지가 게시됩니다.
라이선스
LICENSE를 참조하세요.