Управління вразливостями: агрегація та пріоритизація

Уразливості з різних сканерів накопичуються в хаосі, а критичні проблеми губляться в потоці звітів. Ми впроваджуємо єдину систему vulnerability management на базі DefectDojo та Dependency-Track, автоматизуючи агрегацію та пріоритизацію. Наша команда реалізує проєкт під ключ — від аудиту до супроводу, забезпечуючи надійний захист без ручного тріажу.
Часті запитання

Без єдиної системи вразливості множаться: що робити?

Уявіть: у вашій компанії працюють Trivy, Snyk, OWASP ZAP і Checkmarx — 5 різних сканерів, кожен зі своїм інтерфейсом. Без єдиної системи агрегації вразливостей інженери витрачають до 40 годин на місяць на ручний тріаж, погодження та звітність. Результат: критичні проблеми пропускаються, а low‑priority вразливості накопичуються. За даними CISA, понад 50% атак використовують відомі вразливості з KEV — це підтверджує необхідність автоматизації. Згідно з офіційною документацією DefectDojo, платформа підтримує понад 100 типів сканерів. Наші інженери (сертифікації AWS, CKS, CISSP — понад 5 років досвіду в DevSecOps) впроваджують DefectDojo та Dependency‑Track, щоб автоматизувати агрегацію вразливостей, дедуплікацію та пріоритизацію вразливостей. Результат — економія часу на 80% і скорочення MTTR до 24 годин на P1. За час роботи ми провели десятки проектів з VM — понад 20 успішних впроваджень — що дозволило скоротити ручний аналіз у середньому в 5 разів. Ми гарантуємо якість, спираючись на багаторічний досвід та сертифікації.

Вибір інструментів та архітектура

Три основні підходи:

  • DefectDojo — open source платформа. Приймає результати з 100+ сканерів (Trivy, Snyk, Checkmarx, ZAP, Burp), дедуплікує за CPE/CVE, групує за продуктами та командами, дозволяє призначати SLA і синхронізуватися з Jira.
  • Dependency-Track — спеціалізований для SCA та SBOM. Отримує CycloneDX/SPDX звіти, безперервно звіряє компоненти з NVD, OSV, GitHub Advisories. Dashboard з метриками за часом.
  • Комерційні платформи (Snyk, Wiz, Tenable.io, JFrog Xray) — краща інтеграція, дорожче, менше кастомізації.

Для більшості команд, які не мають великого security budget, зв'язка DefectDojo + Dependency-Track закриває 80% потреб. За нашими даними, ця зв'язка краща за комерційні рішення в 3 рази за ціною при порівнянній функціональності.

Потік даних:

CI/CD pipelines
├── Trivy (fs + image) → SARIF / JSON
├── Snyk (code + oss) → SARIF / JSON
├── GitLeaks → JSON
├── Checkmarx → SARIF
└── OWASP ZAP → JSON
│
▼
DefectDojo API (імпорт результатів, дедуплікація)
│
├── Engagement per Product per Sprint
├── Finding deduplication по hash
├── JIRA sync (критичні findings → tickets)
└── Metrics: open/closed/accepted risk

DefectDojo: встановлення та базове налаштування

# Docker Compose cd django-DefectDojo ./dc-build.sh docker compose up -d # Helm в k8s helm repo add defectdojo https://raw.githubusercontent.com/DefectDojo/django-DefectDojo/helm-charts helm install defectdojo defectdojo/defectdojo \
    --namespace security \
    --create-namespace \
    --set django.ingress.enabled=true \
    --set django.ingress.host=defectdojo.internal \
    --values my-values.yaml

Технічна реалізація: від CI/CD до пріоритизації

Налаштування автоматичного імпорту з CI/CD

Імпорт результатів через API (GitLab CI):

---
upload-to-defectdojo:
  stage: .post
  image: curlimages/curl:latest
  when: always
  script:
    - |
      ENGAGEMENT_ID=$(curl -s -X POST \
        -H "Authorization: Token $DEFECTDOJO_API_TOKEN" \
        -H "Content-Type: application/json" \
        "$DEFECTDOJO_URL/api/v2/engagements/" \
        -d "{ \"product\": $DEFECTDOJO_PRODUCT_ID, \"name\": \"CI scan - $CI_COMMIT_SHORT_SHA\", \"target_start\": \"$(date +%Y-%m-%d)\", \"target_end\": \"$(date +%Y-%m-%d)\", \"status\": \"In Progress\", \"engagement_type\": \"CI/CD\" }" | jq -r '.id')
    - |
      curl -s -X POST \
        -H "Authorization: Token $DEFECTDOJO_API_TOKEN" \
        -F "engagement=$ENGAGEMENT_ID" \
        -F "scan_type=Trivy Scan" \
        -F "[email protected]" \
        -F "minimum_severity=High" \
        -F "active=true" \
        -F "verified=false" \
        -F "close_old_findings=true" \
        "$DEFECTDOJO_URL/api/v2/import-scan/"
    - |
      if [ -f zap-report.json ]; then
        curl -s -X POST \
          -H "Authorization: Token $DEFECTDOJO_API_TOKEN" \
          -F "engagement=$ENGAGEMENT_ID" \
          -F "scan_type=ZAP Scan" \
          -F "[email protected]" \
          -F "minimum_severity=High" \
          "$DEFECTDOJO_URL/api/v2/import-scan/"
      fi
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
---

Dependency-Track: робота з SBOM:

---
generate-and-upload-sbom:
  stage: security
  image: aquasec/trivy:latest
  entrypoint: [""]
  script:
    - trivy fs --format cyclonedx --output sbom-fs.json .
    - trivy image --format cyclonedx --output sbom-image.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - |
      curl -X PUT -H "X-API-Key: $DEPENDENCY_TRACK_API_KEY" -H "Content-Type: application/json" \
        "$DEPENDENCY_TRACK_URL/api/v1/bom" \
        -d "{\"project\": \"$DTRACK_PROJECT_UUID\", \"bom\": \"$(base64 -w 0 sbom-image.json)\"}"
  artifacts:
    paths:
      - sbom-*.json
    expire_in: 90 days
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
---

Чому CVSS не завжди достатній?

CVSS 9.8 — теоретичний максимум ризику. Реальний ризик = CVSS × exploitability in context × asset criticality. Компонент з CVSS 7.5 у public-facing API без аутентифікації небезпечніший, ніж CVSS 9.8 у offline batch-сервісі. Тому в рамках DevSecOps практик ми застосовуємо додаткові фактори.

CISA KEV: пріоритизація за експлойтами

Приклад збагачення даними KEV

KEV (Known Exploited Vulnerabilities) від CISA — перелік активно використовуваних вразливостей. Якщо CVE є в цьому списку, treat as P1 незалежно від CVSS.

import json, requests

def enrich_with_kev(trivy_report_path):
    # Збагачуємо звіт Trivy даними CISA KEV та призначаємо пріоритет P1
    kev = requests.get("https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json").json()
    kev_ids = {v['cveID'] for v in kev['vulnerabilities']}
    with open(trivy_report_path) as f:
        report = json.load(f)
    for result in report.get('Results', []):
        for vuln in result.get('Vulnerabilities', []):
            if vuln.get('VulnerabilityID') in kev_ids:
                vuln['InKEV'] = True
                vuln['Priority'] = 'P1'
    return report

Система пріоритетів:

Критерій P1 (SLA: 24 год) P2 (SLA: 7 д) P3 (SLA: 30 д)
CVSS ≥ 9.0 7.0–8.9 < 7.0
Exploit in wild Так Ні Ні
Asset exposure Public-facing Internal Isolated
Fix available Так — —

Процес впровадження та результати

Ключові метрики

  • MTTR by severity — середній час від виявлення до fix
  • Open Critical trend — динаміка за 30/60/90 днів
  • SLA compliance rate — відсоток findings, закритих в рамках SLA
  • Reopen rate — якість виправлень
  • Suppress rate — частка прийнятого ризику

DefectDojo будує ці метрики автоматично. Для Grafana можна експортувати через Prometheus exporter (документація DefectDojo доступна на GitHub).

Порівняння DefectDojo, Dependency-Track та комерційних платформ

Характеристика DefectDojo Dependency-Track Комерційні (Snyk, Wiz)
Тип імпорту Результати сканування SBOM (CycloneDX/SPDX) Результати + SBOM
Дедуплікація По hash, CPE, CVE Немає (тільки компоненти) Автоматична
Метрики Вбудовані, API Dashboard Вбудовані
Підтримка сканерів 100+ Будь-який, що генерує SBOM Обмежений
Ціна Безкоштовно Безкоштовно Платний (залежить від вендора)

Процес впровадження

  1. Аудит поточного стеку безпеки та процесів
  2. Розгортання DefectDojo та/або Dependency-Track (Docker Compose або Helm)
  3. Інтеграція імпорту результатів з CI/CD (GitLab, GitHub Actions, Jenkins)
  4. Налаштування дедуплікації, політик пріоритизації та SLA
  5. Jira/GitLab синк для автоматизації призначення задач
  6. Дашборди та щотижнева звітність
  7. Документація архітектури та скриптів
  8. Навчання команди роботі з платформою

Що входить в роботу

  • Аудит — аналіз поточних сканерів, форматів звітів, процесів тріажу
  • Розгортання — встановлення та налаштування DefectDojo/Dependency-Track у вашій інфраструктурі (Docker, k8s, bare metal)
  • Інтеграції — CI/CD pipelines, Jira, Slack, єдиний вхід (SSO)
  • Політики пріоритизації — налаштування правил з урахуванням ваших SLA та asset criticality
  • Дашборди — Grafana + Prometheus exporter для моніторингу метрик
  • Документація — архітектурна схема, runbook з експлуатації, скрипти автоматизації
  • Навчання — воркшоп для команди (2-4 години) по роботі з платформою
  • Пост-релізна підтримка — 2 тижні супроводу після впровадження

Орієнтовні терміни та вартість

Середній проект займає від 2 тижнів (одна команда, простий стек) до 2-3 місяців (велика організація, enterprise інтеграції). Вартість впровадження починається від 5 000 євро. Економія на ручній обробці звітів — до 40 000 грн на місяць, що приносить суттєву економію. Інвестиції окупаються протягом кількох місяців. Ми працюємо під ключ: від аудиту до пост-релізної підтримки.

Зв'яжіться з нами для оцінки вашого проекту. Замовте консультацію, і ми підберемо оптимальну архітектуру управління вразливістями під ваш стек.

Наші компетенції:

Останні роботи

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139