Сканирование уязвимостей и патчи
Краткое резюме
Управление уязвимостями — это непрерывный цикл: обнаружение → оценка риска → устранение (патч/миграция/конфиг) → проверка → отчетность. Технологии сканирования (SCA/SAST/DAST/IAST/Cloud/Container) дают сигналы, а контекст (экспонированность, привилегии, данные, EPSS, эксплойты) определяет приоритет. Цель — снизить реальный риск без простоя бизнеса, используя автоматизацию, канареечные выкладки и четкие SLO.
Таксономия сканирования
SCA (Software Composition Analysis): анализ зависимостей/лицензий; обнаружение CVE в библиотеках, SBOM.
SAST: статический анализ собственного кода до сборки.
DAST: динамический «черный ящик» против работающего сервиса.
IAST: датчики внутри приложения (во время тестов) — меньше FP, глубже контекст.
Container/OS Scan: образы (base image, пакеты), хосты (ядро/пакеты/конфиги), CIS-бенчмарки.
Cloud/Infra (CSPM/KSPM): мисконфиги облака/K8s (IAM, сети, шифрование, публичные бакеты).
Secrets Scan: утечки ключей/токенов в репозиториях и образах.
Binary/Artifact Scan: проверка собранных артефактов (подписи, уязвимости).
Риск-модель и приоритизация
Оценка = CVSS v3.x (база) × EPSS (вероятность эксплуатации) × контекст (экспонированность, данные, привилегии, компенсирующие меры).
Контекстные факторы:- Экспонированность в Интернет/внутри, наличие WAF/mTLS/изоляции.
- Данные: PII/финансы/секреты.
- Привилегии процесса/узла, lateral movement-потенциал.
- Наличие публичного эксплойта/массовых атак, требования комплаенса.
Пример CVSS-вектора: `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` → критикал; если сервис публичный и без компенсирующих мер — P1.
SLO-пороги (пример):- P1 (критичные, эксплуатируемые): фикс ≤ 48 ч.
- P2 (высокие): фикс ≤ 7 дней.
- P3 (средние): фикс ≤ 30 дней.
- P4 (низкие/информ.): планово/по бэклогу.
Жизненный цикл управления уязвимостями
1. Инвентаризация активов: сервисы, образы, кластеры, ОС, пакеты, зависимости, версии.
2. Сканирование по расписанию и по событию: коммиты, сборки, деплой, ежесуточные/еженедельные окна.
3. Триаж: дедупликация, нормализация (CVE→Ticket), маппинг на владельца.
4. Приоритизация по контексту: CVSS/EPSS + экспонированность/данные.
5. Ремедиация: патч/обновление зависимости/конфиг-хардненинг/виртуальный патч (WAF).
6. Верификация: повторное сканирование, тесты, канарейка.
7. Отчетность: метрики закрытия, возраст уязвимостей, соответствие SLO.
8. Уроки: фикс в шаблонах (base image, Helm chart), политика на будущее.
Интеграция в CI/CD
На этапе PR: SAST + SCA + секрет-скан; «break build» по P1/P2 или требование аппрува.
На этапе build: скан образа, генерация SBOM (CycloneDX/SPDX), подпись артефактов (cosign).
На этапе deploy: политика допуска (Admission) — запрет образов с `critical/high` уязвимостями и без подписи/SBOM.
Постдеплой: DAST/IAST против стейджинга и частично production (безопасные профили).
Пример: Renovate/Dependabot (фрагмент)
json
{
"extends": ["config:recommended"],
"vulnerabilityAlerts": { "enabled": true },
"packageRules": [
{ "matchUpdateTypes": ["minor","patch"], "automerge": true },
{ "matchManagers": ["dockerfile"], "enabled": true }
]
}
Политика допуска (Kubernetes, OPA/Gatekeeper — упрощенно)
rego package policy.vuln
deny[msg] {
input.image.vuln.critical > 0 msg:= sprintf("Image %s has critical vulns", [input.image.name])
}
deny[msg] {
input.image.sbom == false msg:= sprintf("Image %s without SBOM", [input.image.name])
}
Патч-менеджмент (ОС, контейнеры, K8s)
ОС (Linux/Windows)
Patch window: регулярные окна + экстренные внеочередные для P1.
Стратегия: сначала канарейка 5–10% узлов, затем волны.
Авторазвертывание: Ansible/WSUS/Intune/SSM; проверка зависимостей и откаты.
Kernel Live Patching (где возможно) для минимизации простоя.
Рестарт-сервисов: управляемый drain/cordon для K8s нод, graceful shutdown.
Контейнеры
Immutable-подход: не «apt upgrade» в рантайме; пересобрать образ с обновленной базой.
Базовые образы: регулярно обновлять golden images (Alpine/Debian/Distroless), закреплять версии (digest).
Многостадийные сборки: минимизировать поверхность (удалять build-tools).
Проверка перед деплоем: блок образов с критичными CVE.
Kubernetes/Service Mesh
Control Plane: своевременные минорные релизы, закрытие CVE k8s/etcd/containerd.
Node OS/Container runtime: плановые обновления, совместимость версий.
Mesh/Ingress: версии Envoy/Istio/NGINX — критичны (часто CVE в парсерах/HTTP3).
Admission Policies: запрет `:latest`, требование подписи, лимиты на уязвимости.
Виртуальные патчи и компенсирующие меры
Когда патч невозможен быстро:- WAF/WAAP: сигнатура/позитивная модель для конкретного эндпоинта.
- Фичфлаги: отключить уязвимую функциональность.
- Сетевые ACL/мТLS/IP allow-list: ограничить доступ к уязвимому сервису.
- Конфиг-хардненинг: понижение прав, sandbox, read-only FS, отключение опасных модулей.
- Сокращение TTL токенов/ключей, ротация секретов.
Управление исключениями (Risk Acceptance)
Исключение оформляется тикетом с: обоснованием, компенсирующими мерами, SLA на устранение, датой пересмотра.
В отчетности помечать как «временное принятие риска» и включать в ежемесячный обзор.
Наблюдаемость и метрики
Технические:- Mean Time To Patch (MTTP) по P1/P2/P3.
- Доля активов, покрытых сканированием (%).
- Возраст открытых уязвимостей (p50/p90), backlog burn-down.
- Процент образов с SBOM и подписью.
- Выполнение SLO по срокам закрытия (напр., ≥ 95% P1 ≤ 48 ч).
- Влияние на аптайм (кол-во инцидентов при патчах).
- Повторные выявления тех же CVE (качество фикса в шаблонах).
Плейбуки (сокращенно)
P1: Критичная RCE в публичном сервисе
1. Активировать WAF-правило/вирт-патч.
2. Заблокировать доступ неавторизованным источникам (если допустимо).
3. Срочная пересборка образа/патч ОС, канарейка → волны.
4. Повторный DAST/проверка телеметрии, мониторинг ошибок.
5. Пост-инцидент: закрепить фикс в базовом образе/Helm chart, добавить тест в CI.
1. Немедленная ротация секретов/ключей, отзыв токенов.
2. Поиск следов использования, ограничение эндпоинтов.
3. Сканы репо/образов на секреты, внедрение pre-commit сканера.
Примеры артефактов
1) SQL-отчет по «горячим» уязвимостям
sql
SELECT service, cve, cvss, epss, exposed, has_exploit, created_at,
PRIORITY(exposed, has_exploit, cvss, epss) AS prio
FROM vuln_findings
WHERE status = 'open' AND (cvss >= 8.0 OR has_exploit = true)
ORDER BY prio DESC, created_at ASC;
2) Политика Admission (Kyverno, блок critical уязвимостей)
yaml apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata:
name: block-critical-vulns spec:
validationFailureAction: Enforce rules:
- name: image-must-have-no-critical match: { resources: { kinds: ["Pod"] } }
validate:
message: "Image contains critical vulnerabilities"
pattern:
metadata:
annotations:
vuln.scanner/critical: "0"
3) Генерация SBOM и подпись (Makefile фрагмент)
make sbom:
cyclonedx create --output sbom.json sign:
cosign sign --key cosign.key $(IMAGE_DIGEST)
Специфика для iGaming/финтех
Зоны повышенного риска: платежные шлюзы, бэкофис выплат, антифрод, обработка PII/PAN — патчи приоритет P1/P2.
Окна обслуживания: согласование с турнирами/акциями, pre-warm кэшей, канарейки на низконагруженных регионах.
Регуляторика (PCI DSS/GDPR): сроки устранения уязвимостей, доказательства (скриншоты/отчеты), сегментация CHD-зоны, шифрование.
Партнерские интеграции: требовать версионированные SDK/клиенты, мандатный SCA и HMAC/mTLS на вебхуках.
Типичные ошибки
«Сканим все — чиним ничего»: нет владельцев и SLO.
Фокус только на CVSS без контекста (экспонированность, EPSS, данные).
Патч в рантайме контейнера вместо пересборки образа.
Отсутствие канареек/rollback-планов.
Игнор мисконфигов облака/K8s (часто критичнее CVE).
Нет SBOM/подписи — слабая прослеживаемость (supply chain).
Дорожная карта внедрения
1. Инвентаризация активов и владельцев; единый реестр сервисов/образов.
2. Стек сканеров: SCA/SAST/DAST/Container/Cloud + secret-scan; интеграция в CI/CD.
3. Политики SLO и приоритизации: CVSS+EPSS+контекст; шаблоны тикетов.
4. Admission/Policy-as-Code: запрет критичных уязвимостей, требование SBOM/подписей.
5. Патч-процессы: окна, канарейки, откаты; автопилоты для минор/патч-версий.
6. Отчетность и метрики: MTTP, покрытие, возраст; еженедельный обзор риска.
7. Регулярные учения: симуляция критичной CVE, проверка плейбуков и rollback.
Итог
Зрелое управление уязвимостями — это процесс, а не разовая «прочистка»: автоматическое обнаружение, контекстная приоритизация, безпростойные патчи через канарейки/rollback, policy-as-code на входе в прод и прозрачные метрики выполнения. Закрепляя фиксы в базовых образах и шаблонах, вы снижаете риск повторения и держите поверхность атаки под устойчивым контролем.