1. Gérer l’authentification avec un outil de type Identity Provider
Un Identity Provider est une solution logicielle chargée de créer et de gérer les informations d’identité des utilisateurs, tout en fournissant les services d’authentification pour les applications qui choisissent de lui déléguer cette responsabilité. L’Identity Provider fournit l’authentification comme un service. C’est un outil centralisé qui gère l’authentification au sein du système d’information, et ce faisant, il absorbe toute la complexité relative au mécanisme d’authentification et simplifie vos applications. En utilisant un IdP, vous bénéficiez d’un outil testé et éprouvé, ce qui augmente la sécurité de votre système d’information.
2. Gérer les droits d’accès avec un outil de type IAM
La gestion des droits d’accès est un sujet sensible et complexe. Il est recommandé pour celà d’utiliser un outil de type IAM. Ce genre d’outil est spécifiquement conçu pour gérer cette problématique de façon fiable et selon les standards en vigueur en la matière, tels que OAuth2 ou SAML2.
3. Passer périodiquement en revue les droits accordés aux utilisateurs
Ce mécanisme de revue des droits d’accès présente plusieurs avantages:
- S’assurer que chacun a les droits dont il a besoin pour accomplir ces tâches, et pas plus
- Eviter l’accumulation des droits au fil du temps
- Consolider et optimiser l’organisation des droits d’accès
- S’assurer que les droits d’accès sont ne sont pas trop permissifs
- Faire le nettoyage en supprimant les droits qui n’ont plus lieu d’être
4. Accessibilité via TLS uniquement
Chaque application doit être exposée avec un certificat TLS.
Les API REST et Web Services doivent être accessibles uniquement en HTTPS. Toute communication entre services doit être chiffrée.
Si le code est déployé dans un cluster Kubernetes, mettre en place le mTLS ou mutual TLS. Cela permettra de chiffrer tous les échanges internes au cluster. Avec les mTLS, les pods s’authentifient mutuellement au début de chaque échange, et tout échange est chiffré.
5. Limiter les ports ouverts au strict nécessaire
Il ne faut exposer que les ports indispensables au fonctionnement normal de chaque application. Que l’infrastructure soit constituée de machines physiques, machines virtuelles ou de conteneurs, il faut veiller à ne laisser ouvert que les ports nécessaires à l’application. En effet, tout accès à un système informatique se fait via un port ouvert, et plus il y a de ports ouverts, plus le risque d’intrusion augmente.
6. Contrôler la sécurité des dépendances tiers
Il faut scanner régulièrement le code source de chaque application à la recherche des vulnérabilités affectant les dépendances de l’application. Pour ce faire, des outils dédiés sont en mesure d’inspecter les bibliothèques utilisées par le code applicatif et de les évaluer par rapport aux vulnérabilités de sécurité connues.
7. Ne pas inclure de mot de passe et autres secrets dans le code source
La présence de secrets dans le code source pose de sérieux problèmes. En plus des problèmes de mise à jour et de gouvernance, les secrets dans le code source représente une vulnérabilité de cybersécurité majeure pour l’entreprise. Je vous invite à consulter cet article qui décrit le problème en détail et celui-là qui montre comment y remédier.
8. Analyser statiquement le code source
L’analyse statique du code source des applications permet de mettre en évidence les portions de code problématiques. Un morceau de code peut poser problème soit par sa complexité, soit pour non respect des bonnes pratiques ou des conventions définies d’un commun accord par l’équipe, soit parce qu’il introduit des bugs, soit parce qu’il introduit des vulnérabilités.
Pour en tirer le plus de bénéfice, il faut automatiser le processus de scan du code source, le faire chaque fois que le code est modifié et bloquer tout ajout de code non conforme aux règles prédéfinies.
Quel que soit le langage ou la technologie utilisée, des outils d’analyse statique de code existent.
9. Scanner les images Docker à la recherche de vulnérabilités
Lorsque vous déployez votre application sous forme d’image Docker, vous devez scanner votre image de base à la recherche de vulnérabilités connues affectant les dépendances embarquées par cette image. De même, il est nécessaire de s’assurer qu’il n’y a pas de secrets embarqués dans l’image, grâce à un scan avec des outils conçus pour détecter ce genre de situation..
10. Automatiser tout ce qui peut l’être
Build, Test, Release, deploy, Monitore, Alert, etc, il faut automatiser toutes les étapes. Les avantages de l’automatisation sont multiples. En effet, les opérations automatisées sont rapides, répétables,, auditables, fiables, et peuvent être exécutées à tout moment.
En outre, l’automatisation ouvre la voie à l’approche “Everything As Code”, qui consiste à tout traiter comme du code: code source applicatif, configuration (Configuration as Code), infrastructure (Infrastructure as Code), policy (Policy as Code), etc. Cela permet d’appliquer les bonnes pratiques du développement logiciel à toutes les opérations au sein du système d’information. On aboutit à un système plus robuste, sécurisé, résiliente, et agile.
