Les audits. Le mot à lui seul peut faire frémir les développeurs. Il évoque des réunions interminables, des questions tatillonnes sur un code écrit il y a plusieurs mois et des demandes de documentation obscure. Mais ce n'est pas forcément si grave.
Se préparer à un audit ne consiste pas seulement à apaiser les auditeurs ; il s'agit de prouver que le travail de sécurité et de conformité que vous avez effectué est réellement efficace. Pour les développeurs, cela signifie savoir quel type de preuve les auditeurs recherchent dans votre flux de travail et comment les présenter sans faire dérailler vos sprints.
A quoi ressemblent les preuves dans les flux de travail des développeurs ?
Les auditeurs ne veulent généralement pas lire votre code source brut (à moins qu'il ne s'agisse d'un audit de code spécifique). Ils veulent des preuves que vos processus et contrôles fonctionnent. Dans un flux de travail de développement typique, les preuves ressemblent à ceci :
- Historique du contrôle des versions :
- Commits liés à des tickets/problèmes : Montre que les changements ont été planifiés et suivis (pertinent pour les contrôles de gestion des changements).
- Enregistrements des demandes d'extraction (PR) : Preuve des revues de code, des approbations requises, des contrôles automatisés (SAST, SCA, tests) réussis avant la fusion. C'est l'or pour démontrer des pratiques de SDLC sécurisées (NIST SSDF, PCI DSS Req 6, ISO 27001 A.14).
- Documentation sur la stratégie de branchement : Montre un processus contrôlé de gestion des modifications du code.
- Journaux du pipeline CI/CD :
- Historique d'exécution : Horodatage indiquant quand les constructions/déploiements ont eu lieu.
- Résultats de l'analyse : Journaux ou artefacts montrant les résultats des analyses SAST, SCA, IaC pour des versions spécifiques (preuves pour la gestion des vulnérabilités).
- Résultats des tests : Rapports des tests automatisés d'unité, d'intégration et de sécurité.
- Approbation des déploiements : Journaux indiquant les portes manuelles ou automatisées franchies pour le déploiement.
- Enregistrements de suivi des problèmes (Jira, etc.) :
- Tickets de vulnérabilité : Suivi de l'identification, de l'affectation, de la correction et de la vérification des résultats de sécurité obtenus lors d'analyses ou de tests. Démontre un processus de gestion des vulnérabilités opérationnel (PCI DSS Req 6/11, ISO 27001 A.12.6, NIST SSDF RV).
- Tickets de demande de changement : Documenter les changements planifiés, les approbations et les liens vers les commits/PR du code correspondant.
- Configurations et sorties d'outils :
- Configurations des scanners : Indique comment les outils SAST/SCA/DAST sont configurés et quelles sont les règles actives.
- Rapports d'analyse de l'IaC : Preuve que le code de l'infrastructure a été vérifié pour détecter les erreurs de configuration.
- Rapports d'analyse des secrets : Preuve que le code est analysé à la recherche d'informations d'identification codées en dur.
- Documentation :
- Normes de codage sécurisé : Les lignes directrices que les développeurs sont censés suivre.
- Modèles de menace : Documents produits pendant la phase de conception.
- Dossiers de formation : Preuve que les développeurs ont suivi une formation de sensibilisation à la sécurité ou de codage sécurisé (souvent gérée par les équipes de RH ou de conformité, mais pertinente).
- Runbooks/Procédures : Documentation relative à la réponse aux incidents ou aux processus de sécurité spécifiques auxquels les développeurs participent.
Les auditeurs veulent des preuves tangibles, de préférence horodatées, qui montrent que les contrôles ne sont pas seulement théoriques, mais qu'ils sont appliqués de manière cohérente.
Automatiser la documentation et le suivi
La collecte manuelle de preuves est pénible et sujette aux erreurs. Automatisez autant que possible :
- Exploiter les outils existants : Vos outils de développement existants génèrent déjà une grande partie des preuves. Veillez à ce qu'ils soient configurés correctement :
- Plateformes Git (GitHub, GitLab, Bitbucket) : Appliquer les exigences des RP (révisions, vérifications de l'état). Utiliser les liens des messages de livraison vers les systèmes de suivi des problèmes.
- Plateformes CI/CD (Jenkins, GitLab CI, GitHub Actions) : S'assurer que la journalisation détaillée est activée. Configurer les pipelines pour stocker les rapports d'analyse et les résultats des tests en tant qu'artefacts. Intégrer des barrières de qualité et de sécurité automatisées.
- Suivi des problèmes (Jira) : Utiliser des flux de travail pour suivre l'état de la remédiation des vulnérabilités. Lier les problèmes aux validations/PR.
- Scanners de sécurité : Configurer les outils pour obtenir des résultats dans des formats standard (SARIF, JSON) qui peuvent être facilement ingérés ou stockés.
- Journalisation centralisée : Envoyer les journaux de CI/CD, des scanners et éventuellement du contrôle de source (si disponible) vers un système central (SIEM, plateforme de gestion des journaux) pour faciliter la recherche et la conservation.
- Plateformes d'automatisation de la conformité : Des outils comme Vanta, Drata, Secureframe, etc., peuvent s'intégrer via une API à de nombreux outils de développement (fournisseurs de cloud, dépôts Git, systèmes de billetterie, scanners) pour extraire automatiquement des preuves, les mettre en correspondance avec les contrôles de conformité et suivre l'état d'avancement. Cela réduit considérablement la collecte manuelle.
- Infrastructure as Code (IaC) et Policy as Code (PaC) : Le stockage de l'infrastructure et des politiques en tant que code dans le contrôle de version fournit une piste d'audit inhérente des changements et des configurations approuvées. Les outils PaC peuvent enregistrer les décisions d'application.
L'objectif est de faire de la production de preuves un résultat naturel du processus de développement, et non une course effrénée et séparée avant un audit.
Audits internes fictifs
N'attendez pas que l'auditeur externe trouve les failles. L'organisation d'audits internes fictifs portant spécifiquement sur les processus de développement peut vous épargner bien des soucis par la suite.
- Étendez-le : Se concentrer sur un domaine spécifique pertinent pour un audit à venir (par exemple, le processus de gestion des changements, la gestion des vulnérabilités dans CI/CD, les pratiques de codage sécurisées pour une application critique).
- Impliquer les développeurs : Demandez aux développeurs de décrire leur flux de travail habituel (soumission de RP, déploiement, correction des vulnérabilités) et d'expliquer comment ils satisfont aux exigences spécifiques en matière de contrôle.
- Demander des preuves : Demandez aux développeurs de rassembler les preuves réelles qu'un auditeur externe demanderait (liens PR, journaux de pipeline, rapports d'analyse, tickets Jira). Peuvent-ils les trouver facilement ? Sont-elles complètes ?
- Simuler les questions de l'auditeur : Posez les questions difficiles qu'un auditeur pourrait poser sur la base des exigences du cadre (voir les sections précédentes pour des exemples).
- Identifier les lacunes : Notez les cas où les processus ne sont pas respectés, où la documentation est manquante, où les preuves sont difficiles à trouver ou où les contrôles ne fonctionnent pas comme prévu.
- Traitez-le avec sérieux : Documentez les résultats et créez des actions (comme pour un véritable audit), désignez des responsables et suivez les mesures correctives.
Les audits fictifs aident les développeurs à comprendre ce que les auditeurs recherchent, à découvrir les faiblesses des processus ou de la collecte de preuves avant l' audit externe à haute pression, et à renforcer la confiance dans l'état de préparation de l'équipe.
Traitement des constatations d'audit les plus courantes
Les auditeurs signalent souvent des problèmes similaires liés aux flux de travail de développement. Préparez-vous à répondre à des constatations telles que :
- Gestion incohérente du changement : Les preuves montrent des PR fusionnés sans les approbations requises, des changements déployés en dehors du processus standard, ou l'absence de liens entre les tickets et les changements de code.
- Correction : Renforcer les règles de protection des branches, mettre en place des portes CI/CD, améliorer l'automatisation/intégration entre Git et les outils de suivi des problèmes, renforcer la discipline du processus.
- Gestion inefficace des vulnérabilités : Les analyses révèlent que des vulnérabilités critiques ne sont pas corrigées dans les délais impartis, qu'il n'y a pas de preuve que les résultats sont suivis ou que les analyses ne sont pas effectuées de manière cohérente.
- Correction : Intégrer l'analyse plus tôt/de manière plus fiable, automatiser la création de tickets pour les résultats, établir des accords de niveau de service clairs et des voies d'escalade, utiliser des tableaux de bord pour suivre les progrès de la remédiation.
- Preuves manquantes/insuffisantes : Impossibilité de produire facilement des journaux, des rapports d'analyse ou des dossiers d'approbation pour la période d'audit.
- Correction : Améliorer la collecte et la centralisation automatisées des preuves (voir 3.4.2), s'assurer que la conservation des journaux est correctement configurée.
- Manque de formation et de sensibilisation au codage sécurisé : Les développeurs commettent des erreurs courantes signalées par les outils SAST ou les auditeurs, ce qui indique un manque de sensibilisation aux pratiques de codage sécurisé.
- Correction : mettre en œuvre une formation pratique et ciblée sur le codage sécurisé (voir 3.3), fournir des listes de contrôle sur le codage sécurisé, renforcer par le biais de revues de code.
- Faiblesse des contrôles d'accès : Développeurs disposant d'autorisations excessives dans des environnements de production ou sensibles, utilisation de comptes partagés.
- Solution : mettre en place un système RBAC rigoureux, appliquer le principe du moindre privilège, effectuer des contrôles d'accès réguliers, supprimer les comptes partagés.
- Exposition aux secrets : Découverte d'informations d'identification codées en dur lors de l'examen du code ou de l'analyse.
- Solution : mettre en œuvre une analyse des secrets à un stade précoce (avant la validation), imposer l'utilisation d'outils de gestion des secrets approuvés, former les développeurs à une gestion appropriée.
L'essentiel est de traiter les résultats des audits non pas comme des échecs, mais comme des opportunités d'amélioration. Mettez en œuvre des mesures correctives, mettez à jour la documentation, dispensez une formation supplémentaire si nécessaire et veillez à ce que la correction soit vérifiée lors du prochain cycle d'audit (interne ou externe).