Mis à jours 14 janvier 2018 Les applications et l’infrastructure natives du cloud requièrent une approche radicalement différente de la sécurité. Gardez ces bonnes pratiques à l’esprit.
Aujourd’hui, les organisations, grandes et petites, explorent l’adoption de technologies logicielles natives du cloud. “Cloud-native” désigne une approche qui regroupe les logiciels dans des unités standardisées appelées conteneurs, les place dans des microservices interconnectés pour former des applications et garantit que les applications en cours d’exécution sont entièrement automatisées pour plus de rapidité, d’agilité et d’évolutivité.
Parce que cette approche change fondamentalement la manière dont le logiciel est construit, déployé et exécuté, il change fondamentalement la façon dont le logiciel doit être protégé. Les applications et l’infrastructure natives du cloud créent plusieurs nouveaux défis pour les professionnels de la sécurité, qui devront établir de nouveaux programmes de sécurité prenant en charge l’utilisation par leur organisation des technologies natives du cloud.
Jetons un coup d’œil à ces défis, puis nous discuterons d’un certain nombre de meilleures pratiques que les équipes de sécurité devraient adopter pour y remédier. D’abord les défis :
- L’infrastructure de sécurité traditionnelle n’a pas de visibilité sur les conteneurs. La plupart des outils de sécurité réseau et hôte existants n’ont pas la capacité de surveiller ou de capturer l’activité des conteneurs. Ces outils ont été conçus pour sécuriser les systèmes d’exploitation uniques ou le trafic entre les machines hôtes plutôt que les applications précédentes, ce qui entraîne une perte de visibilité sur les événements de conteneur, les interactions système et le trafic inter-conteneur.
- Les surfaces d’attaque peuvent changer rapidement. Les applications natives du cloud sont constituées de nombreux composants plus petits appelés microservices, hautement distribués, chacun devant être audité et sécurisé individuellement. Ces applications étant conçues pour être provisionnées et mises à l’échelle par les systèmes d’orchestration, leurs surfaces d’attaque changent constamment et beaucoup plus rapidement que les applications monolithiques traditionnelles.
- Les flux de données distribués nécessitent une surveillance continue. Les conteneurs et les microservices sont conçus pour être légers et s’interconnecter par programmation entre eux ou avec des services de cloud externes. Cela génère de grands volumes de données en mouvement rapide à travers l’environnement pour être surveillé en permanence pour les indicateurs d’attaque et de compromis ainsi que l’accès aux données ou l’exfiltration non autorisée.
- La détection, la prévention et la réponse doivent être automatisées. La vitesse et le volume des événements générés par les conteneurs submergent les charges de travail des opérations de sécurité en cours. Les durées de vie éphémères des conteneurs rendent également difficile la saisie, l’analyse et la détermination de la cause première des incidents. Une protection efficace contre les menaces consiste à automatiser la collecte, le filtrage, la corrélation et l’analyse des données afin de pouvoir réagir assez rapidement aux nouveaux incidents.
Face à ces nouveaux défis, les professionnels de la sécurité devront mettre en place de nouveaux programmes de sécurité prenant en charge l’utilisation par leur organisation des technologies natives du cloud. Naturellement, votre programme de sécurité doit prendre en compte tout le cycle de vie des applications natives du cloud, qui peuvent être divisées en deux phases distinctes : la phase de génération et de déploiement et la phase d’exécution. Chacune de ces phases comporte un ensemble différent de considérations de sécurité qui doivent être traitées pour former un programme de sécurité complet.
Sécurisation des builds de conteneur et déploiement
La sécurité de la phase de génération et de déploiement consiste à appliquer des contrôles aux charges du travail des développeurs et des pipelines d’intégration et de déploiement continus pour réduire le risque de problèmes de sécurité pouvant survenir après le lancement des conteneurs. Ces contrôles peuvent incorporer les lignes directrices et les meilleures pratiques suivantes :
- Gardez les images aussi petites que possible. Une image conteneur est un exécutable léger qui conditionne le code de l’application et ses dépendances. Restreindre chaque image à l’essentiel pour que le logiciel s’exécute minimise la surface d’attaque pour chaque conteneur lancé à partir de l’image. Le démarrage avec des images de base minimales du système d’exploitation, telles que Alpine Linux peut réduire la taille des images et faciliter la gestion des images.
- Numérisez les images pour les problèmes connus. Au fur et à mesure que les images sont construites, il faut vérifier leur vulnérabilité et leur exposition. Chaque couche de système de fichiers qui compose une image peut être analysée et les résultats comparés à une base de données Common Vulnerabilities and Exposures (CVE) régulièrement mise à jour. Les équipes de développement et de sécurité peuvent ensuite résoudre les vulnérabilités détectées avant que les images ne soient utilisées pour lancer des conteneurs.
- Signez les images numériquement. Une fois les images construites, leur intégrité doit être vérifiée avant le déploiement. Certains formats d’image utilisent des identifiants uniques appelés digests qui peuvent être utilisés pour détecter le changement du contenu de l’image. Signer des images avec des clés privées fournit des garanties cryptographiques que chaque image utilisée pour lancer les conteneurs a été créée par une partie de confiance.
- Renforcez et restreignez l’accès au système d’exploitation hôte. Étant donné que les conteneurs s’exécutant sur un hôte partagent le même système d’exploitation, il est important de s’assurer qu’ils commencent avec un ensemble de capacités restreint. Cela peut être réalisé en utilisant des fonctions de sécurité du noyau et des modules tels que Seccomp, AppArmor et SELinux.
- Spécifiez les stratégies de segmentation au niveau de l’application. Le trafic réseau entre les microservices peut être segmenté pour limiter la façon dont ils se connectent les uns aux autres. Cependant, ceci doit être configuré en fonction des attributs au niveau de l’application, tels que les étiquettes et les sélecteurs, ce qui élimine la complexité de traiter les détails de réseau traditionnels tels que les adresses IP. Le défi de la segmentation est de devoir définir à l’avance des politiques qui limitent les communications sans affecter la capacité des conteneurs à communiquer dans et entre les environnements dans le cadre de leurs activités normales.
- Protégez les secrets à utiliser par les conteneurs. Les microservices qui interagissent entre eux échangent fréquemment des données sensibles telles que des mots de passe, des jetons et des clés, appelés secrets. Ces secrets peuvent être accidentellement exposés s’ils sont stockés dans des images ou des variables d’environnement. En conséquence, plusieurs plate-formes d’orchestration telles que Docker et Kubernetes ont intégré la gestion des secrets, assurant que les secrets ne sont distribués qu’aux conteneurs qui les utilisent, quand ils en ont besoin.
Plusieurs plate-formes de conteneurs et outils leaders de sociétés telles que Docker, Red Hat et CoreOS fournissent certaines ou toutes ces fonctionnalités. Démarrer avec l’une de ces options est le moyen le plus simple d’assurer une sécurité robuste pendant la phase de construction et de déploiement.
Cependant, les contrôles de phase de construction et de déploiement sont encore insuffisants pour garantir un programme de sécurité complet. Préempter tous les incidents de sécurité avant le démarrage des conteneurs n’est pas possible pour les raisons suivantes. Premièrement, les vulnérabilités ne seront jamais complètement éliminées et les nouvelles seront exploitées tout le temps. Deuxièmement, les politiques déclaratives de métadonnées de conteneur et de segmentation de réseau ne peuvent pas anticiper complètement toute activité d’application légitime dans un environnement hautement distribué. Et troisièmement, les contrôles d’exécution sont complexes à utiliser et souvent mal configurés, laissant les applications vulnérables aux menaces.
Sécurisation des conteneurs lors de l’exécution
La sécurité de phase d’exécution englobe toutes les fonctions requises (visibilité, détection, réponse et prévention) pour détecter et arrêter les attaques et les violations de stratégie qui se produisent une fois que les conteneurs sont en cours d’exécution. Les équipes de sécurité doivent trier, rechercher et identifier les causes premières des incidents de sécurité afin de les corriger complètement. Voici les principaux aspects d’une sécurité de phase d’exécution réussie :
- Instrumenter l’ensemble de l’environnement pour une visibilité continue. Être capable de détecter les attaques et les violations de politique commence par être capable de capturer toute l’activité de l’exécution des conteneurs en temps réel pour fournir une source de vérité exploitable. Divers cadres d’instrumentation existent pour capturer différents types de données pertinentes pour le conteneur. Il est essentiel de choisir celui qui peut gérer le volume et la vitesse des conteneurs.
- Corréler les indicateurs de menace distribués. Les conteneurs sont conçus pour être répartis sur l’infrastructure de calcul en fonction de la disponibilité des ressources. Étant donné qu’une application peut comprendre des centaines ou des milliers de conteneurs, les indicateurs de compromis peuvent être répartis sur un grand nombre d’hôtes, ce qui rend plus difficile la détermination de ceux qui sont liés à une menace active. Une corrélation rapide et à grande échelle est nécessaire pour déterminer quels indicateurs constituent la base d’attaques particulières.
- Analyser le comportement du conteneur et des microservices. Les microservices et les conteneurs permettent de décomposer les applications en composants minimaux remplissant des fonctions spécifiques et conçus pour être immuables. Cela facilite la compréhension des comportements normaux du comportement attendu par rapport aux environnements d’application traditionnels. Les écarts par rapport à ces lignes de base comportementales peuvent refléter une activité malveillante et peuvent être utilisés pour détecter les menaces avec plus de précision.
- Augmenter la détection des menaces grâce à l’apprentissage automatique. Le volume et la vitesse des données générées dans les environnements de conteneur dépassent les techniques de détection conventionnelles. L’automatisation et l’apprentissage automatique peuvent permettre une modélisation comportementale, une reconnaissance des formes et une classification beaucoup plus efficaces pour détecter les menaces avec une fidélité accrue et moins de faux positifs. Méfiez-vous des solutions qui utilisent l’apprentissage automatique simplement pour générer des listes blanches statiques utilisées pour alerter sur les anomalies, ce qui peut entraîner un bruit d’alerte important et de la fatigue.
- Intercepter et bloquer les commandes de moteur de conteneur non autorisées. Les commandes émises vers le moteur de conteneur, par exemple Docker, sont utilisées pour créer, lancer et tuer des conteneurs ainsi que pour exécuter des commandes à l’intérieur de conteneurs en cours d’exécution. Ces commandes peuvent refléter des tentatives de compromettre des conteneurs, ce qui signifie qu’il est essentiel d’interdire tout contenu non autorisé.
- Automatiser les actions pour la réponse et la médecine légale. La durée de vie éphémère des conteneurs signifie qu’ils laissent souvent très peu d’informations disponibles pour la réponse aux incidents et la médecine légale. En outre, les architectures natives du cloud traitent généralement l’infrastructure comme immuable, remplaçant automatiquement les systèmes impactés par de nouveaux, ce qui signifie que les conteneurs peuvent être supprimés au moment de l’enquête. L’automatisation peut garantir que les informations sont capturées, analysées et transmises suffisamment et rapidement pour atténuer l’impact des attaques et des violations.
Le logiciel natif basé sur le Cloud, basé sur des technologies de conteneurs et des architectures de microservices, modernise rapidement les applications et l’infrastructure. Ce changement de paradigme force les professionnels de la sécurité à repenser les programmes requis pour protéger efficacement leurs organisations. Un programme de sécurité complet pour les logiciels natifs du cloud concerne l’ensemble du cycle de vie de l’application au fur et à mesure que les conteneurs sont construits, déployés et exécutés. En mettant en œuvre un programme en utilisant les directives ci-dessus, les organisations peuvent établir une base solide pour les infrastructures de conteneur et les applications et services qui y sont exécutés.