Automatisation

Cet article est une liste non exhaustive d’outils relatifs à l’automatisation de la sécurité dans des environnements cloud.

Public visé: les développeurs logiciels, et plus particulièrement les Dev/Sec/Ops.

Par Quentin Anglade, chargé d’études sécurité @ Objectif Libre

Cybersécurité & automatisation, du développement à la production

Si vous voulez produire de bons logiciels, ils doivent être sûrs. Rien ne vous protégera mieux que le respect des bonnes pratiques de sécurité – et pour cela, nous vous engageons à lire OWASP’s secure coding practices, une référence reconnue ; cependant, l’utilisation d’outils adéquats complète de manière intéressante le respect des bonnes pratiques.

Cet article traite d’outils qui peuvent vous aider à produire des logiciels sûrs dans l’ère du développement agile / devops.

Pendant le développement

Peu d’outils existent pour accompagner les développeurs au moment où ils codent et la plupart des vérifications seront effectuées lors de l’intégration continue.

Des outils tels que des linters peuvent aider lors du développement. Le but d’un linter est de détecter de potentiels problèmes en analysant le code en permanence. C’est principalement utile pour aider les développeurs à respecter différentes normes, bonnes pratiques et autres conventions.

  • Sonarlint est un linter open-source disponible pour de nombreux IDEs / éditeurs. Il supporte le JS, TypeScript, Python et PHP dans sa version standalone. Connecté à SonarQube, SonarLint peut supporter plus de langages selon votre éditeur / IDE.
  • Linters spécifiques: vous trouverez de nombreux linters spécifiques dans cette liste ou dans celle-ci.

Outre les outils et l’automatisation, mettre en place des revues de code systématiques, un programme de bug bounty et effectuer des audits de sécurité par des tiers de confiance sont de bonnes initiatives. Les audits ne sont pas toujours économiquement accessibles, mais un programme de bug bounty s’avère généralement très efficace.

Intégration continue

Analyse statique

L’analyse statique consiste à analyser le code source d’un logiciel pour détecter des défaillances avant qu’elles ne se produisent, sur le même principe que les linters.
Cela peut détecter des failles dangereuses telles que des buffer overflow ou des injections SQL, mais il ne faut pas s’y fier aveuglément. De par sa nature, l’analyse statique remonte généralement de nombreux faux-positifs et ne peut détecter des dangers tels qu’une mauvaise configuration, des mécanismes d’authentifications défaillants, une mauvaise gestion de permissions & droits, un mauvais usage d’outils cryptographiques, etc. Aujourd’hui, la plupart des outils ne vérifient pas seulement les failles, mais remontent de nombreuses métriques sur la qualité du code en général.

  • Sonarqube: open-source, la community edition gratuite supporte Java, JavaScript, C#, TypeScript, Flex, Python, PHP, Web, XML. Pour plus de langages il vous faut utiliser des plugins gratuits ou acheter des éditions commerciales. S’intègre bien aux VCS (git, svn, etc.), aux systèmes d’intégration continue et possède de nombreuses fonctionalités.
  • LGTM, service gratuit pour les projets open-source. Compatible Java, Python, JavaScript, TypeScript, C et C++.
  • Codebeat, autre service gratuit pour les projets open-source. Compatible Swift, Objective C, Exlixir, Go, Ruby, Pyhton, Java, Kotlin, JS et Typescript.
  • Codacy, autre service toujours gratuit pour les projets open-source. Compatible Scala, Java, JavaScript, Python, Ruby, PHP, Apex, JSP, XML, Velocity, VisualForce, C#, JSON et Kotlin.
  • Outils spécifiques

Dépendances vulnérables

Un logiciel est comme l’étoile noire: aussi sûr que son point le plus faible. Un logiciel présente généralement de nombreuses dépendances et si l’une de ces dépendances est vulnérable, le logiciel l’est également. Il est indispensable de vérifier ces dépendances. Sans ordre particulier, voici une liste d’outils qui peuvent vous être utile:

  • Snyk possède une grande base de données de vulnérabilités sur de nombreux langages (JS, Java, Scala, Python, Ruby, Go, PHP, .Net). Vous avez droit à des scans illimités sur des projets open-source et jusqu’à 200 par mois pour des projets privés avec l’offre gratuite.
  • Outils spécifiques:
  • Github Enterprise
  • Gitlab EE

Environnement vulnérable

Si vous utilisez des conteneurs pour déployer vos logiciels, cela ajoute une nouvelle couche de vulnérabilités potentielles: l’environnement de votre application. Ne vous inquiétez pas, il existe un outil magique pour cela: Clair peut scanner des images de conteneurs et vous avertir des vulnérabilités connues. Libre et open source, vous n’avez aucune raison de ne pas vous en servir. Il est principalement intégré à des registres docker:

Vous devriez également utiliser lynis. Cet outil ne scanne pas vos images de conteneurs, mais effectue un audit basé sur le Dockerfile. Il est également utilisable sur des hôtes Linux/Unix.

Scanners de vulnérabilités

Nous avons couvert la possibilité que l’environnement ou les dépendances de votre logiciel soient vulnérables ; qu’en est-il si votre logiciel lui-même est vulnérable ?

Heureusement, il y a des outils pour vérifier cela:

  • Zed Attack Proxy (ZAP), un projet de l’OWASP qui vous « aide à trouver automatiquement des failles de sécurité dans vos applications web ». Il est très populaire et possède une grande communauté.
  • Arachni, similaire à ZAP ; ce « web application security scanner framework » est un framework Ruby qui possède une grande modularité de par sa nature. Sa communauté n’est cependant pas aussi développée que celle de ZAP.

Ces deux outils peuvent s’intégrer dans une chaîne d’intégration continue. Voir cet article pour plus de détails sur les avantages et inconvénients de chaque outil.

Production

Il y a beaucoup à faire pour sécuriser une infrastructure entière : pare-feu, protection DDOS, monitoring, logs, etc. Nous allons ici rester au plus près de l’application, principalement au niveau des conteneurs. La plupart des outils utilisent des règles, ce qui signifie que vous aurez probablement à écrire vos propres règles selon votre application / environnement:

  • Docker : Docker possède des fonctionnalités souvent oubliées, comme des profils Seccomp et limitations de ressources. Vous pouvez vous en servir si vous utilisez déjà Docker.
  • AppArmor : « an effective and easy-to-use Linux application security system ». C’est un système de contrôle d’accès obligatoire (MAC) sous la forme d’un module kernel. Vous pouvez assigner à chaque application un profil qui spécifie des permissions (filesystem, réseau, etc.). Fonctionne avec Docker.
  • SELinux : similaire à AppArmor, c’est également un système de contrôle d’accès obligatoire dans un module kernel. C’est un outil plus puissant mais plus complexeet difficile à mettre en place – et souvent tout simplement désactivé. Plus d’informations sur les problèmes de SELinux dans cet article. Lisez la documentation de RedHat pour l’intégration de SELinux + Docker.
  • Falco : c’est un « logiciel de monitoring comportemental fait pour détecter les activités anormales ». Il utilise également un module kernel et s’intègre bien avec Docker. Des règles généralistes sont présentes par défaut et vous pouvez écrire vos propres règles. Un exemple simple est « si un shell est exécuté avec un terminal attaché, exécuter une action » ; l’action peut aller d’un simple message sur slack à un kill automatique du conteneur en question. Falco est en somme un outil puissant et personnalisable.
  • Cilium : « brings API-aware network security filtering to Linux container frameworks like Docker and Kubernetes ». Cet outil utilise BPF (Berkeley Packet Filter), nouvel outil de filtrage intégré au kernel pour filtrer des paquets réseau à différents niveaux (L3, L4, et L7).
  • kube-bench : « vérifie que kubernetes est déployé de manière sécurisée ». Si vous utilisez kubernetes,vous pouvez vérifier votre installation avec cet outil qui utilise le benchmark CIS (Center for Internet Security).

Pour scanner vos serveurs, machines virtuelles ou instances, vous devriez utiliser vuls.io. Scanner de vulnérabilité agent-less (ne nécessite pas d’installation sur les machines à scanner, juste un accès ssh), il peut scanner des machines Linux et FreeBSD à la recherche de logiciels vulnérables, installés ou non avec le gestionnaire de paquets de la distribution Linux. Des interfaces CLI et web sont disponibles ainsi que des remontées par mail ou slack.

Pour automatiser des réponses à des événements liés à la sécurité de votre infrastructure, vous pouvez utiliser CSF (Continuous Security Framework), un outil développé par Objectif Libre. Il permet de facilement scripter des réactions à de nombreux événements: une nouvelle vulnérabilité dans vos conteneurs, une demande d’image de kubernetes, une nouvelle instance sur OpenStack, etc. Vous pourrez facilement l’adapter à vos besoin grâce à son design simple et modulaire.

Conclusion

Le respect des bonnes pratiques de sécurité est indispensable, aucun outil ne viendra vous protéger sans cela. Cependant, utiliser les bons outils à chaque étape peut éviter de nombreuses failles, et principalement vous éviter d’utiliser des logiciels avec des vulnérabilités connues, faute de quoi vous serez exposés aux divers ransomwares et autres malwares qui exploitent ces vulnérabilités. Intégrer ces outils ne sera pas toujours facile, mais automatiser des vérifications peut vous permettre d’éviter de nombreuses failles.