🛠 Профиль Checkov SAST
Я тут начал пересобирать кастомные профили, да и мне захотелось поделиться с тобой примером под checkov, который рассмотрели. Профиль примера относится к инфра по Docker и Helm.
Цель: минимизировать поверхность атаки контейнеров, исключить хранение секретов в образах и манифестах, а также обеспечить безопасные дефолты для production-сред.
Что делаем?
• Анализируем Dockerfile и Helm-чарты как основной слой упаковки
• Фильтруем предупреждения по enforce/ skip, quiet: false
• Срабатывание в разделе enforce будем считать ошибкой пайплайна
• Для dev-веток переопределяем флагом в CI ошибки как soft-fail: true/ false
• Запрещаем автоматическое скачивание модулей и делаем меньше сетевых зависимостей - download_external_modules: false
• Формируем «белый список» security-политик - run_all_checks: false
Политика
enforce:
docker:
- CKV_DOCKER_2 # Контейнер не должен запускаться под root
- CKV_DOCKER_3 # Минимизировать лишние пакеты и слои
- CKV_DOCKER_5 # Избегать образов с тегом latest без необходимости
- CKV_DOCKER_7 # Не использовать ADD вместо COPY
- CKV_DOCKER_8 # Явно задавать non-root пользователя
- CKV_DOCKER_9 # Удалять временные файлы, кеши, package manager metadata
- CKV_DOCKER_10 # Обязательный healthcheck для оркестраторов (k8s, swarm) и SLA
- CKV_DOCKER_12 # Не хранить секреты в ENV/ ARG/ лейблах образа
- CKV_DOCKER_13 # Запрет запуска контейнера в privileged режиме
- CKV_DOCKER_14 # Ограничить Linux capabilities: drop ALL
- CKV_DOCKER_16 # read-only root filesystem
helm:
- CKV_K8S_11 # networkPolicy для контролируемого трафика между подами
- CKV_K8S_20 # spec.securityContext.privileged: false
- CKV_K8S_37 # runAsNonRoot: true, runAsUser != 0
- CKV_K8S_40 # Не хранить чувствительные данные в явном виде в values/ ConfigMap
- CKV_K8S_14 # hostNetwork/hostPID/hostIPC должны быть false
- CKV_K8S_38 # securityContext.capabilities: drop ALL, запрещены SYS_ADMIN и подобные
- CKV_K8S_22 # readOnlyRootFilesystem: true
- CKV_K8S_8 # Требовать requests/ limits для CPU и памяти
directory:
# Директория анализа
- .
file:
- vulnerable-app/Dockerfile
- docker-compose.yml
# Helm-чарты:
- helm/service/values.yaml
- helm/service/templates/deployment.yaml
# skip_check:
# - CKV_DOCKER_5 # образ тестовой среды жёстко привязан к latest (exmpl)
Пример high-level политики общей
policy:
docker:
require_non_root_user: true # USER != root
require_healthcheck: true # HEALTHCHECK
require_explicit_user: true # Указание USER
forbid_secrets_in_env: true # ENV/ARG != pswrd/ token
forbid_default_credentials: true # Запрет admin/admin и т.д.
drop_all_capabilities_by_default: true # CAP_* по минимуму
forbid_privileged: true # privileged: false
forbid_host_network: true # hostNetwork: false
prefer_read_only_rootfs: true # rootfs read-only
helm:
require_pod_security_context: true # securityContext
require_network_policies: true # networkPolicy
forbid_host_path_mounts: true # hostPath монтируется по approve-list
require_resource_limits: true # requests/limits заданы
forbid_plaintext_secrets: true # секреты не хранятся в values.yaml/ConfigMap
#toolchain #sast #appsec #course #reco #techsolution
