🛠 Checkov SAST для IAC
Салют,
Давай продолжим с тобой смотреть дальше в сторону инструментов и сегодня мы поговорим про Антона Павл.. Checkov (doc):
Это инструмент для статического анализа (SAST) инфраструктуры как кода (IaC), который сканирует конфигурации на предмет ошибок безопасности и соответствия стандартам до их развертывания. Open-source (Apache 2.0). Форматы отчетов: CLI, JSON, JUnit XML, GitHub Failed Only, GitLab SAST, SARIF, CSV, CycloneDX.
Фишки
• Анализирует Terraform, CloudFormation, Kubernetes‑манифесты, Dockerfile и другие инфраструктурные файлы на ошибки конфигурации
• Подходит для автоматической проверки Docker/IaC в пайплайнах, чтобы не пропускать небезопасные настройки в образах и инфраструктуре
• Может использоваться для быстрой проверки конфигураций перед коммитом, чтобы исключить базовые misconfiguration
• SARIF → GitHub Security, GitLab SAST
• JSON → DefectDojo, Jira
• Поддержка как атрибутных (на Python), так и графовых (на YAML) политик для анализа взаимосвязей ресурсов
Команды
pip install checkov
# Сканирование директории
checkov -d /path/to/terraform/code
# Запуск только определенных проверок (по ID или severity)
checkov -d . --check CKV_AWS_20,CKV_AWS_57
checkov -d . --check HIGH
# Пропуск определенных проверок
checkov -d . --skip-check CKV_AWS_20
# Вывод в формате JUnit XML (для CI/CD)
checkov -d . -o junitxml > checkov.xml
# Сканирование с загрузкой внешних Terraform модулей
checkov -d . --download-external-modules true
# Подавление конкретной проверки в коде (inline comment) checkov:skip=CKV_AWS_20
resource "aws_s3_bucket" "example" {
bucket = "my-bucket"
acl = "private"
}
Встраивание
stage('Checkov') {
steps {
script {
docker.image('bridgecrew/checkov:latest').inside("--entrypoint=''") {
unstash 'terragoat'
try {
sh '''
checkov -d . --use-enforcement-rules -o cli -o junitxml \
--output-file-path console,results.xml \
--repo-id example/terragoat --branch master
'''
junit skipPublishingChecks: true, testResults: 'results.xml'
} catch (err) {
junit skipPublishingChecks: true, testResults: 'results.xml'
throw err
}
}
}
}
options {
preserveStashes()
timestamps()
}
}
Пример политик
enforcement_rules:
- name: "prod-enforcement"
description: "Строгие политики для прод-веток: блокируем Critical/High, предупреждаем по Medium."
is_default: true
criteria:
provider: "terraform" # к каким сканам применяем
filter:
# пример — применять к репо terragoat в ветке master/main
repo_id: "example/terragoat"
branches:
- "master"
- "main"
rules:
- rule_id: "CKV_AWS_*" # все AWS-политики
soft_fail_threshold: "MEDIUM"
hard_fail_threshold: "HIGH"
- rule_id: "CKV_K8S_*" # все политики по Kubernetes
soft_fail_threshold: "MEDIUM"
hard_fail_threshold: "HIGH"
- rule_id: "CKV_SECRET_*" # поиск секретов
soft_fail_threshold: "LOW"
hard_fail_threshold: "MEDIUM"
- name: "dev-relaxed"
description: "Более мягкие политики для dev/feature-веток."
is_default: false
criteria:
provider: "terraform"
filter:
branches:
- "develop"
- "feature/*"
rules:
- rule_id: "CKV_AWS_*"
soft_fail_threshold: "HIGH" # Medium только как инфо
hard_fail_threshold: "CRITICAL"
- rule_id: "CKV_K8S_*"
soft_fail_threshold: "HIGH"
hard_fail_threshold: "CRITICAL"
- rule_id: "CKV_SECRET_*"
soft_fail_threshold: "MEDIUM"
hard_fail_threshold: "HIGH"
Итого: что бы тебе самому окунуться в него будет круто потыкать вот эту лабку, там ты сразу потыкаешь в Semgrep, который описывал вот тут и SCA Dependency Check.
#toolchain #sast #appsec #course #sca #sbom #containersecurity #reco #techsolution
