PR : DevSecOps - Jules - Martin - Mathéo#50
Open
martinboutier wants to merge 1 commit into
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Mise en œuvre de l'approche DevSecOps
Ce document a pour objectif de présenter notre approche pour intégrer les principes et les outils DevSecOps au cœur de notre projet. Il détaille la manière dont nous combinons les pratiques de développement (Dev), de sécurité (Sec) et d’exploitation (Ops) afin de garantir une sécurité globale.
Le DevSecOps c'est quoi ?
Le DevSecOps est l'évolution naturelle de la culture DevOps. Il repose sur le principe du "Shift Left" : l'idée est d'intégrer la sécurité le plus tôt possible dans le cycle de vie du développement logiciel (SDLC), plutôt que de la traiter comme une étape finale de vérification. Il s'agit avant tout d'une culture qui regroupe aussi bien les équipes de développement, de sécurité et opérationnels. L'objectif est de traiter les enjeux de sécurité au tout début du projet et tout au long de celui-ci. Comme le DevOps avant même de penser à la mise en place et la configuration de différents outils, on s'attèle d'abord a bien organiser l'équipe autour de cette idée.
Les enjeux du DevSecOps
Stack Technique & Outils Choisis
Nous avons sélectionné 3 outils pour couvrir les différentes phases du projet (Code, Build, Déploiement, Runtime).
1. SonarQube (Static Application Security Testing - SAST)
SonarQube analyse statiquement le code source pour détecter les bugs, les "code smells" et les vulnérabilités de sécurité. Dans ce projet, nous l'utilisons pour valider la conformité de notre infrastructure.
sonar-scanner.shpermet de lancer un scan. Le scanner est configuré avec un périmètre d'analyse optimisé via le fichiersonar-project.properties. Les résultats sont ensuite consultable sur le port 9000.2. HashiCorp Vault (Secrets Management)
Le stockage de secrets (clés API, mots de passe base de données) en clair dans le code ou les variables d'environnement est une faille majeure.
Protéger les données sensibles est un élement important dans la démarche DevSecOps, en effet il est primordiale de protéger des clés d'API ou tout autre élement critique. Nous avons fait le choix d'implémenter Vault afin de stocker ces clés encryptées. Un script de test est par ailleurs disponible pour ajouter au Vault les clés d'etherpad et la clé de décryptage de la base de données.
3. Falco (Cloud-Native Runtime Security)
Une sécurité parfaite au build ne garantit pas l'absence d'attaques en production. Falco surveille les appels système en temps réel.
Dans une logique DevSecOps tous les élements doivent être protégés ainsi mettre ne place des secrets notamment avec Vault ou encore analyser le code avec Sonarqube serait inutile si les conteneurs eux-mêmes n'étaient pas sécurisés. C'est pourquoi nous avons fait le choix de configurer falco qui permet une approche sûr et fiable.
Un script d'automatisations est par ailleurs disponible dans le dossier racine et permet de vérifier l'état des conteneurs les plus critiques. Il donne un compte rendu de son analyse dans le fichier falco_tests.txt.
Base de données
Le projet initial utilise une base de données mysql. Nous avons décidé de crypté la base de données. La configuration du cryptage se fait via le fichier
docker-compose.yaml. Ce cryptage s'accompagne forcément d'une clé de décryptage, que nous protégeons dans Vault. Cette configuration passe par les fichierscomponent_keyring_file.cnf,mysql_encryption_keys.keyetmysqld.mydans la racine de l'api. Malheureusement nous n'avons pas réussi à faire communiquer l'api avec la base de données.Lancement du Projet
Pour lancer les conteneurs on a le docker-compose.yml à la racine du projet:
docker compose up -d
Dans le répertoire api/:
./mvnw quarkus:dev
Dans le répertoire front/:
npm start
Les fichiers de tests sont situés dans le dépôt racine:
Difficultés rencontrées
init-vault.shpuis lancer le reste de l'application. Cela nous a motivé a créer le fichier de lancementstart.sh. Finalement, bien que nous avons fini par réussir à lancer la base de données cryptée, et à sauvegarder sa clé de décryptage dans le Vault, nous n'avons pas réussi à la faire communiquer avec l'API.Ces deux éléments sont les obstacles qui nous ont pris le plus de temps lors de la réalisation de ce projet. Nous voulions ajouter et configurer d'autres outils mais nous avons manqué de temps.
Autres outils
Etant donné que le projet était hébergé en local il nous était difficile d'implémenter et configurer certains outils qui aurait pu renforcer la logique de DevSecOps mise en place pour ce projet.
1. OWASP Dependency-Check (Software Composition Analysis - SCA)
Cet outil scanne les dépendances pour identifier les vulnérabilités connues (CVE).
2. Lynis (Analyse de Sécurité des Dépendances)
Lynis est un outil de sécurité open source conçu pour les systèmes basés sur Unix (Linux, macOS). Contrairement au SCA qui scanne les bibliothèques de code, Lynis effectue un scan de santé global du système d'exploitation.