Aller au contenu

Checkov vérifie votre code d'infrastructure

Mise à jour :

logo checkov

Dans un contexte où les attaques et les vulnérabilités sont de plus en plus fréquentes, il est essentiel de garantir que notre code d’infra est sécurisé dès le départ. Lorsque nous utilisons l’Infrastructure as Code (IaC) pour déployer des ressources cloud, les erreurs de configuration peuvent mener à des failles importantes. C’est là qu’intervient Checkov. Cet outil open-source scanne les fichiers IaC pour détecter des vulnérabilités et assurer que les déploiements respectent les bonnes pratiques de sécurité, tout en s’intégrant facilement dans nos flux de travail existants.

Fonctionnalités

Checkov propose plus de 1000 politiques intégrées couvrant les meilleures pratiques de sécurité et de conformité pour AWS, Azure et Google Cloud. Il analyse divers formats comme Terraform, CloudFormation, Kubernetes, Dockerfiles, et bien plus encore. Checkov scanne également les fichiers de workflows CI/CD tels que GitHub Actions, GitLab CI, et Circle CI.

Il prend en charge les politiques basées sur la conscience contextuelle, grâce à une analyse en mémoire basée sur des graphes. Vous pouvez créer des politiques en Python ou YAML, et identifier des secrets et des AWS credentials dans des environnements sensibles. Les résultats sont exportables en JSON, SARIF, JUnit XML, ou CSV, et accompagnés de guides de remédiation.

Checkov permet également la gestion des faux positifs avec des suppressions inline ou via CLI, ainsi que l’évaluation des paramètres des fournisseurs Terraform pour réguler les ressources IaaS, PaaS ou SaaS.

Installation

L’installation de Checkov est simple et rapide. Il peut être installé directement depuis pip, le gestionnaire de paquets Python, avec la commande suivante :

Terminal window
pip install checkov

Pour les utilisateurs de macOS, il est également possible de l’installer via Homebrew en utilisant la commande :

Terminal window
brew install checkov

Utilisation

L’utilisation de Checkov en ligne de commande est à la fois simple et flexible, permettant de vérifier rapidement vos fichiers d’Infrastructure as Code (IaC).

Analyses

Après l’installation, vous pouvez lancer des analyses sur différents types de fichiers et dossiers.

Pour analyser un répertoire Terraform :

Terminal window
checkov -d ./chemin_du_projet

Pour vérifier un fichier Kubernetes :

Terminal window
checkov -f chemin_vers_votre_fichier.yaml

Checkov prend également en charge d’autres formats comme les templates CloudFormation ou les Dockerfiles, et permet d’analyser simultanément plusieurs fichiers dans un même projet.

Lors de l’utilisation en ligne de commande, vous pouvez également exclure certains fichiers ou désactiver des politiques de sécurité spécifiques. Par exemple, pour exclure un fichier particulier :

Terminal window
checkov -d ./chemin_du_projet --skip-path chemin_du_fichier

Il est aussi possible d’exclure des règles précises en utilisant l’option --skip-check. Cela permet de personnaliser les analyses en fo nction de vos besoins sans affecter l’intégralité du projet. Par exemple :

Terminal window
checkov -d ./chemin_du_projet --skip-check CKV_AWS_20

Voici un exemple d’analyse :

Terminal window
$ checkov --no-cert-verify --directory .
[ kubernetes framework ]: 100%|████████████████████|[20/20], Current File Scanned=files/crictl.yaml
[ secrets framework ]: 100%|████████████████████|[20/20], Current File Scanned=./files/crictl.yaml
[ ansible framework ]: 100%|████████████████████|[17/17], Current File Scanned=restart_traefik.ymll
[ ansible framework ]: 47%|█████████▍ |[8/17], Current File Scanned=update_vm.yml
_ _ ████████▊ |[16/17], Current File Scanned=restart_traefik.yml
___| |__ ___ ___| | _______ __
/ __| '_ \ / _ \/ __| |/ / _ \ \ / /
| (__| | | | __/ (__| < (_) \ V /
\___|_| |_|\___|\___|_|\_\___/ \_/
By Prisma Cloud | version: 3.2.256
secrets scan results:
Passed checks: 0, Failed checks: 1, Skipped checks: 0
Check: CKV_SECRET_6: "Base64 High Entropy String"
FAILED for resource: 83dd4cd3a875934f827b7569dd1eacd3b6b46e06
File: /pacemaker.yml:28-29
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/secrets-policies/secrets-policy-index/git-secrets-6
28 | password: "ha**********" # mettre dans un vault ansible
ansible scan results:
Passed checks: 28, Failed checks: 1, Skipped checks: 0
Check: CKV_ANSIBLE_6: "Ensure that the force parameter is not used, as it disables signature validation and allows packages to be downgraded which can leave the system in a broken or inconsistent state"
PASSED for resource: tasks.ansible.builtin.apt.Install packages
File: /pacemaker.yml:13-24
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/ansible-policies/ansible-compute-policies/ansible-6

Comme vous le voyez, pour mauvaise pratique détectée, checkov indique comment la corriger et fourni un lien contenant plus de d’explications.

checkov recomendation

Génération de Rapports

Une fois l’analyse effectuée avec Checkov, les résultats sont présentés sous forme de rapports détaillés. Ces rapports identifient les mauvaises configurations et les vulnérabilités dans votre code IaC. Par défaut, les résultats apparaissent dans la console avec une explication pour chaque règle violée, comprenant un identifiant de la règle, une description du problème, et le fichier ou la ressource affectée.

Formats de Sortie Disponibles

Pour des intégrations automatisées ou des suivis plus précis, Checkov permet d’exporter les rapports dans différents formats :

  1. JSON : Utilisé pour des analyses approfondies ou pour intégrer avec d’autres outils. Par exemple :

    Terminal window
    checkov -d ./chemin_du_projet -o json > rapport_checkov.json
  2. SARIF : Format standardisé pour les rapports de vulnérabilités, souvent utilisé avec des outils de sécurité et de développement tels que GitHub ou Azure DevOps.

  3. JUnit XML : Ce format est utile pour intégrer les résultats dans des systèmes de test comme Jenkins.

Interprétation des Résultats

{
"passed": 0,
"failed": 0,
"skipped": 0,
"parsing_errors": 0,
"resource_count": 0,
"checkov_version": "3.2.256"
}

Le rapport distingue trois types de résultats :

  • Passé (PASSED) : Les ressources qui respectent les politiques de sécurité.
  • Échoué (FAILED) : Les ressources où une mauvaise configuration a été détectée.
  • Ignoré (SKIPPED) : Les ressources ou règles ignorées via des commentaires inline ou des exclusions spécifiques.

Checkov permet également d’ajouter des annotations inline dans votre code pour marquer des règles comme ignorées lorsqu’une exception est justifiée. Cela aide à éviter les faux positifs, tout en gardant une documentation claire de la raison pour laquelle certaines règles ont été ignorées.

Gestion des Faux Positifs

Dans certains cas, il peut arriver que Checkov identifie des problèmes qui ne sont pas pertinents pour votre environnement. Pour ces situations, Checkov offre la possibilité de marquer des règles spécifiques comme ignorées au sein du fichier source, en utilisant des commentaires spéciaux. Par exemple, pour ignorer la règle CKV_AWS_20 dans un fichier Terraform :

# checkov:skip=CKV_AWS_20 raison
resource "aws_s3_bucket" "example" {
# configuration
}

En résumé, la flexibilité des rapports de Checkov permet de s’adapter aux exigences de sécurité de votre projet, en fournissant des rapports détaillés tout en offrant des options d’exportation pour des analyses automatisées.

Configuration avec un fichier YAML

Checkov permet de se configurer via un fichier de configuration YAML. Par défaut, il recherche un fichier .checkov.yaml ou .checkov.yml dans plusieurs emplacements, comme le répertoire de travail actuel ou le répertoire utilisateur. Pour spécifier un fichier de configuration personnalisé, vous pouvez utiliser l’option suivante en ligne de commande :

Terminal window
checkov --config-file chemin/vers/config.yaml

Checkov peut aussi générer un fichier de configuration avec la commande --create-config, ce qui permet de sauvegarder les arguments utilisés lors d’une exécution.

Voici un exemple de fichier généré :

block-list-secret-scan: []
branch: master
custom-tool-name: Checkov
download-external-modules: false
evaluate-variables: true
external-modules-download-path: .external_modules
mask: []
secrets-history-timeout: 12h
secrets-scan-file-type: []
summary-position: top

Pour visualiser toutes les options et savoir d’où elles proviennent (commande, fichier de configuration ou variable d’environnement), vous pouvez utiliser :

Terminal window
checkov --show-config

Cela permet d’afficher les arguments, les variables d’environnement et les valeurs par défaut utilisées lors de l’exécution de Checkov, ce qui est utile pour s’assurer que la configuration est bien chargée et appliquée.

Création de Politiques Personnalisées

Checkov vous permet de créer et d’intégrer vos propres politiques de sécurité personnalisées, ce qui est essentiel pour répondre à des besoins spécifiques que les règles prédéfinies ne couvrent pas. Cela est particulièrement utile lorsque vous avez des normes internes ou des exigences particulières à respecter dans vos infrastructures cloud.

Structure des Politiques

Les politiques personnalisées peuvent être écrites en Python ou définies en YAML. Elles suivent une structure simple : une règle identifie une mauvaise configuration, et Checkov l’applique ensuite à vos fichiers Infrastructure as Code (IaC).

Exemple de Politique en Python

Voici un exemple simple de règle en Python. Imaginons que vous vouliez vérifier que toutes les instances AWS EC2 utilisent un type spécifique de machine.

  • Créez un fichier Python pour définir la règle :
from checkov.common.models.enums import CheckResult
from checkov.terraform.checks.resource.base_resource_check import BaseResourceCheck
class CustomEC2InstanceTypeCheck(BaseResourceCheck):
def __init__(self):
name = "Ensure EC2 instance types are t2.micro"
id = "CKV_CUSTOM_01"
supported_resources = ['aws_instance']
super().__init__(name=name, id=id, categories=["custom"], supported_resources=supported_resources)
def scan_resource_conf(self, conf):
if 'instance_type' in conf and conf['instance_type'][0] != 't2.micro':
return CheckResult.FAILED
return CheckResult.PASSED
scanner = CustomEC2InstanceTypeCheck()

Dans cet exemple, la règle vérifie que le type de machine d’instance AWS est bien t2.micro. Si ce n’est pas le cas, elle échoue.

Pour utiliser cette règle, exécutez Checkov avec l’option --external-checks-dir en pointant vers le répertoire contenant votre règle personnalisée :

Terminal window
checkov -d ./chemin_du_projet --external-checks-dir chemin_vers_les_regles_perso

Exemple de Politique en YAML

Si vous préférez écrire des politiques en YAML, Checkov supporte également ce format pour définir des règles simples. Par exemple, vous pouvez créer une règle YAML pour vérifier que toutes les ressources S3 dans un fichier Terraform sont configurées avec un cryptage.

Créez un fichier YAML avec une structure de règle de sécurité :

checks:
- id: "CKV_CUSTOM_02"
name: "Ensure S3 buckets are encrypted"
categories:
- "custom"
supported_resources:
- "aws_s3_bucket"
conditions:
- key: "server_side_encryption_configuration"
operator: "exists"
value: true

Cette règle vérifie l’existence de la configuration de cryptage côté serveur sur les buckets S3.

Gestion des Politiques Personnalisées

Après avoir défini vos règles, elles s’intègrent parfaitement aux analyses standards de Checkov. Vous pouvez les combiner avec les politiques prédéfinies et ajuster la configuration pour choisir les règles à activer ou désactiver, en fonction des exigences du projet. Les politiques personnalisées vous permettent de contrôler précisément ce qui est vérifié lors de l’analyse et d’adapter Checkov à votre environnement spécifique.

Cela vous donne la flexibilité nécessaire pour assurer la conformité aux normes internes et renforcer la sécurité de vos infrastructures, sans dépendre uniquement des règles par défaut.

Checkov vous permet donc de surveiller efficacement vos configurations et d’automatiser la sécurité tout au long du développement, en s’adaptant à vos besoins spécifiques via la ligne de commande.

Conclusion

L’utilisation de Checkov dans vos projets d’Infrastructure as Code permet de renforcer la sécurité dès les premières étapes du développement, en identifiant et en corrigeant automatiquement les mauvaises configurations avant leur déploiement. Grâce à son intégration fluide dans les pipelines CI/CD, ses politiques de sécurité personnalisables et ses analyses approfondies, Checkov devient un outil incontournable pour les équipes DevOps souhaitant améliorer la sécurité sans ajouter de complexité. En automatisant ces vérifications, il permet de garantir des déploiements sécurisés et conformes aux bonnes pratiques.

En résumé, Checkov offre une solution complète et flexible pour sécuriser vos infrastructures cloud, tout en s’adaptant aux besoins spécifiques de chaque projet.

Plus d’infos

  • Site officiel de Checkov : Retrouvez toutes les informations sur l’outil et ses fonctionnalités. checkov.io
  • Documentation officielle : Guide complet pour l’installation, l’utilisation et la création de politiques personnalisées. Documentation Checkov
  • Projet GitHub : Accédez au dépôt officiel pour consulter le code source, les mises à jour, et contribuer au projet. GitHub Checkov