Le choix des méthodes agiles est désormais dans les moeurs de la plupart de nos clients. Les initiatives DevOps se multiplient également. Mais où en est on de la prise en compte de la sécurité de nos applications par les équipes ?
Lors de la conférence DEVOXX 2018, Erik Lenoir nous a partagé les bons réflexes à avoir en terme de sécurité pendant la phase de développement. Je vais vous en retranscrire l’essentiel.
OWASP (Open Web Application Security Project)
Le projet OWASP est :
- un projet à but non lucratif, il a pour vocation de promouvoir les bonnes pratiques pour obtenir un monde plus sécurisé
- agnostique à la technologie (PHP, .net, Java, …) et s’intéresse à toutes les stacks technologiques quelles qu’elles soient
- contribué sans contrepartie par une communauté active d’expert en sécurité.
Top 10
Le TOP 10 de l’OWASP est un projet visant à maintenir à jour la liste des 10 risques de sécurité et vulnérabilités les plus critiques affectant les applications Web. Le classement 2017 est disponible sur le site de l’OWASP (https://www.owasp.org/index.php/top10) sachant que le précédent datait de 2013 🙁
Ce classement a pour but d’informer sur l’existence de ces vulnérabilités et de fournir des guides simplifiés sur les bonnes pratiques pour s’en prémunir. Ces guides s’adressent aux développeurs, architectes, chef de projets, managers…
Voici les évolutions apportées par le millésime 2017
OWASP Top10 2017
Les risques liés à l’Injection (SQL, NoSQL, LDAP, code, système, …), la gestion de l’authentification et de la session sont et restent en tête du classement. Par contre, deux risques sortent de ce top 10 :
- CSRF (Cross Site Request Forgery), ce type d’attaques est en baisse, les framework actuels disposant de protections à ces attaques.
- Redirection et renvois non validés, ce point a été sorti pour laisser entrer les nouveaux sujets qui sont plus pertinents.
On notera l’arrivée de “Insecure deserialization” et de l’incroyable “Insufficient Logging & Monitoring” !
OWASP Top 10 Proactive Controls 2018
Il est toujours appréciable de se souvenir des quelques règles de bases à appliquer quand on développe une application.
- Define Security Requirements
- Leverage Security Frameworks and Libraries
- Secure Database Access
- Encode and Escape Data
- Validate All Inputs
- Implement Digital Identity
- Enforce Access Controls
- Protect Data Everywhere
- Implement Security Logging and Monitoring
- Handle All Errors and Exceptions
La SECU dans mon pipeline ou la sécurité en Continu
Il n’est pas donné à tout le monde d’avoir une vision des risques dans son ensemble. Pour cela, il faudrait en avoir une entière compréhension… Par contre, La communauté OpenSource et des éditeurs vous mettent à disposition tout un panel d’outils pour vous défendre (ou du moins vous sensibiliser à la cyber-sécurité) ! Regardons quelques moyens de gérer la vulnérabilité des applications au travers leurs codes sources.
Une erreur classique est l’utilisation d’un composant dont les vulnérabilités sont connues
Analyse des dépendances ou l’analyse des dépendance en Continu
Coté Java
OWASP dependency check (plugin gradle et maven) : Il construit l’arbre de dépendances transitif et pour chaque dépendances, il consultera la liste des alertes de la NVD (national vulnerability database) afin de vous prévenir d’une quelconque vulnérabilité connue.
sources : https://github.com/jeremylong/DependencyCheck
Pour les plus consciencieux, vous pourrez casser votre build ! OWASP vous fournit également Dependency Track (https://dependencytrack.org/) un dashboard pour le suivi de vos analyses.
Coté JavaScript
Le monde du javascript n’est pas en reste puisqu’OWASP a pensé à leurs pléthores des librairies open-source. Sera à votre disposition :
- Dependency Check (Beta)
- NSP : Analyzes Node Package Manager (npm) package.json files using Node Security Platform. (payant)
- retireJS (https://retirejs.github.io/retire.js/)
Coté des containers
N’oublions pas les vulnérabilités des images des containers eux-mêmes. Il y a quelques produits très intéressants à regarder :
- XRAY (https://jfrog.com/xray/)
- AQUA (https://www.aquasec.com/)
- Twistlock (https://www.twistlock.com/)
- CoreOs Clair (https://coreos.com/clair/docs/latest/)
Il existe également des scripts de contrôle de la configuration de vos serveurs. Docker met à disposition Docker Bench Security, un script qui vérifie un bon nombre de bonnes pratiques autour du déploiement des containers Docker (https://github.com/docker/docker-bench-security).
Les licences ou la conformité en continu
DBS (https://www.blackducksoftware.com/) et XRAY (https://jfrog.com/xray/) pourront vous assurer que vous utilisez bien des librairies pour lesquelles vous avez le droit. On oublie souvent de vérifier le niveau et la qualité d’une librairie Open-Source.
Analyse statique du code
Les éditeurs des analyseurs de code s’y sont mis aussi. SonarSource fourni des régles de sécurité contre des vulnérabilités (https://rules.sonarsource.com/java/type/Vulnerability). Pensez à les activer !
Coté javascript (enfin ECMA Script ou ES), on regardera également les linter de securité comme eslint-plugin-security (https://github.com/nodesecurity/eslint-plugin-security).
Middlewares
Activer l’authentification ! Son absence est l’une des plus banale erreur que l’on retrouve encore. Les équipes de MySQL lançaient jusqu’à il y a encore quelques années que la seule faille de sécurité connue pour leur SGBD était le couple d’identifiant par défaut (root et pas de mots de passe 😉 ).
Côté système, les experts vous préconiseront en premier lieu d’utiliser un chiffrement physique qui évitera le vol de données en les copiant physiquement ! La commision européenne vous mènera certainement vers un changement profond dans la manière de gérer les données personnelles et de les protéger, vous menant vers le chiffrement logique (ou par colonne).
Les serveurs Web
Certains petits ajustements peuvent aussi vous permettre une avancée significative en matière de sécurité. Ces modifications sont minimes en termes de code et de configuration, mais elles requièrent une bonne analyse et une validation avant d’être implémentées. Il s’agit des headers HTTP.
- HSTS : forcer le passage en https
- Content-Security-Policy : maîtriser le chargement de sources (et mitiger les XSS /Cross site scripting) en limitant à des domaines / éviter également les scripts inline
- X-Content-Security-Policy : complément à CSP sur des vieux navigateurs
- X-XSS-Protection : complément à CSP sur des vieux navigateurs
- X-Frame-Options : éviter le chargement par iframe
- X-Content-Type-options : contrôler les types MIME
- HPKP : stocker les clés de confiance pour détecter les éventuelles compromissions de certificats
Automatiser les Tests d’intrusions
OWASP fourni le project ZAP (Zed Attack Proxy https://www.zaproxy.org/), un outil gratuit de tests d’intrusion qui permet de détecter les vulnérabilités de vos applications web. Il a plusieurs modes d’opérations (passif/safe et actif). ZAP est très pratique par son coté “scriptable”, lequel viendra évidemment compléter votre pipeline de build 😉
Retrouver la vidéo originale : “Sécurité des applications Web les bons réflexes à avoir (E. Lenoir)”

Conclusion
N’oubliez que les critères de choix de vos outils de test de sécurité sont :
- supporter votre langage de programmation
- les types de vulnérabilités qu’il peut détecter
- comprendre les librairies que vous utilisez
- monitorer (faux positif vs faux négatif)
- l’intégration dans l’IDE de dev
- la difficulté de paramétrage et d’utilisation
- qu’il puisse être lancé continuellement et automatiquement !
- et le coût de la license