Le DevSecOps fait en ce moment couler beaucoup d’encre parmi les experts, les ingénieurs et les fournisseurs de logiciels. Mais, selon Tim Johnson, directeur marketing produit de CloudBees, les recommandations liées qui priorisent la sécurisation du code, sans aller plus loin, laissent pourtant d’importantes lacunes… Voici ses 8 conseils pour les lecteurs de Solutions Numériques.
En effet, pour vraiment assurer la sécurité d’un logiciel, il ne suffit pas de l’appliquer au code en développement mais de sécuriser le pipeline qui le fournit. De plus, pour une réelle sécurité, il convient de mettre en place des systèmes et des outils pour atténuer immédiatement – puis corriger – les vulnérabilités identifiées en production.
En fait, le « DevSecOps » n’existe pas. Si l’on suit bien cette approche, la partie « Sec » (Sécurité) doit être silencieuse, devenant alors une composante intégrale du cycle de vie du développement logiciel. Oui, le code doit être sécurisé, mais aussi les mécanismes utilisés pour le mettre en production. Il faut également être vigilant aux vulnérabilités révélées une fois que le code sera livré.
Voici donc huit conseils essentiels pour assurer la sécurité des logiciels.
1 Optimiser la capacité de résilience, et non l’invulnérabilité
Il est presque inévitable que des vulnérabilités apparaissent. Alors si la perfection n’est pas possible, pourquoi s’entêter à l’atteindre ? Ce qui est néanmoins crucial est la recherche et l’identification de celles-ci avant la sortie, ainsi que leur résolution. Il convient donc de s’entraîner à échouer et d’analyser tout, partout et en permanence.
2 Combler l’écart entre les délais moyens de détection et de réparation
L’écart entre ces deux mesures représente en effet le temps pendant lequel vous serez exposé aux risques. Mettez alors en place des systèmes permettant d'atténuer automatiquement le problème grâce à des dispositifs d’arrêt d’urgence au niveau des fonctionnalités, ou à des retours en arrière précis et bien rodés. L’élimination de cette vulnérabilité dès sa détection fournit une couche supplémentaire de sécurité pour développer et tester une solution de manière approfondie. Par ailleurs, les feature flags peuvent aussi aider.
3 Appliquer les principes de la sécurité de l’information aux logiciels, et non seulement aux données
Les principes de base de la sécurité des données sont fondés sur la confidentialité, l’intégrité et la disponibilité. Et ces trois fondements sont également applicables pour assurer la sécurité des logiciels. Afin de garantir la confidentialité, le contrôle d’accès basé sur les rôles assure la séparation des tâches ainsi qu’une visibilité maîtrisée. Garantir l’intégrité signifie non seulement que les bonnes parties du code soient utilisées, mais aussi qu’il s’agisse bien des bonnes. Enfin, pour garantir la disponibilité, il faut que chaque membre de l’équipe dispose des bons niveaux d’accès et de privilèges nécessaires pour réaliser ses tâches et que les systèmes de livraison de logiciels soient suffisamment résistants pour être toujours disponibles.
4 Promouvoir une culture de tolérance
S’il est presque certain que des problèmes surgiront, plutôt que d’en blâmer le collaborateur qui les signale, l’entreprise devrait plutôt l’applaudir pour les avoir trouvés (avec un peu de chance, avant que les malfaiteurs ne les identifient aussi). L’équipe s’est sans doute entraînée à cela et pour favoriser cette culture, pourquoi ne pas plutôt célébrer le moment où l’entraînement et la prévoyance ont porté leurs fruits (après avoir réglé le problème, bien sûr).
5 Traiter tous les composants logiciels de la même manière
Tous les artefacts d’automatisation doivent être traités comme s’ils étaient du code source. Ils sont aussi importants pour le statut de sécurité que le code en développement. Le versioning, l’audit, la révision, et la mise à jour régulière de tous ces artefacts sont très importants, alors que les composants qui ne conviennent plus doivent être retirés.
6 Tout automatiser
Si une étape n’est pas automatisée, elle n’est ni contrôlable ni protégeable. Une action manuelle ne peut en effet pas être contrôlée, auditée ou atténuée facilement. Afin d’assurer la sécurité, il convient alors d’automatiser chaque mesure de sécurité pour qu’elle s’intègre au processus de manière fluide.
7 Travailler avec et non contre les contrôles de sécurité
Les pipelines renforcés doivent être prêts à tout moment pour ces contrôles. Si une sécurité et une gouvernance adéquates sont mises en place, les contrôleurs pourront obtenir rapidement et eux- mêmes ce dont ils ont besoin au moment du contrôle. De plus, les données sont quant à elles immuables, car elles aussi protégées.
8 Bien définir les rôles et responsabilités en matière de sécurité
La sécurité est l’affaire de tous, mais tout le monde n’a pas besoin de savoir comment corriger une vulnérabilité ni comment la détecter ou l’atténuer. Il faut surtout que les bonnes personnes sachent gérer leurs responsabilités individuelles en matière de sécurité des logiciels.
Pour sécuriser véritablement les logiciels, les outils et processus de sécurité doivent être intégrés dans l’ensemble du cycle de vie du développement. Il s’agit notamment de mettre en place des systèmes pour détecter et atténuer les problèmes, de s’entraîner aux échecs et d’automatiser tout ce qui peut l’être. En suivant cette approche, l’équipe pourra s’assurer d’être prête lorsqu’un incident de sécurité se produira.