Quâest-ce que le SDLC sĂ©curisĂ© (Secure Software Development Lifecycle) ?
Le cycle de développement logiciel ou SDLC (Software Development Lifecycle en anglais) englobe la planification, le déploiement et la maintenance des systÚmes logiciels. Ce processus existe sous des formes variées depuis 60 ans, mais malgré son ancienneté (ou plutÎt à cause de celle-ci), sa sécurité est souvent négligée. Une omission majeure dans une Úre marquée par la prolifération des compromissions, ransomwares et autres menaces.
Certes, la sĂ©curitĂ© reprĂ©sente une surcharge de travail et des coĂ»ts supplĂ©mentaires pour lâentreprise, mais ce nâest rien comparĂ© Ă lâimpact quâune compromission de donnĂ©es peut avoir sur ses systĂšmes. NĂ©anmoins, la question demeure : comment intĂ©grer la sĂ©curitĂ© Ă ce processus dĂ©jĂ complexe ? La rĂ©ponse, dĂ©ployer des bonnes pratiques qui permettront dâincorporer ces mĂ©canismes dans la trame mĂȘme du SDLC, plutĂŽt que de greffer aprĂšs coup des solutions qui entraveront la productivitĂ©.
La sécurité logicielle en exemples
Avant de dĂ©couvrir comment intĂ©grer la sĂ©curitĂ© au SDLC, il est important de bien cerner les diffĂ©rents types dâactivitĂ©s quâelle regroupe. Voici quelques exemples de pratiques dĂ©jĂ mises en place (ou en cours de dĂ©ploiement) dans de nombreuses entreprises pour renforcer la sĂ©curitĂ© logicielle.
Analyse statique
Lâanalyse statique permet de scanner le code source Ă la recherche de dĂ©fauts et de vulnĂ©rabilitĂ©s. Ce processus (souvent automatisĂ©) identifie les schĂ©mas connus symptomatiques dâun code mal sĂ©curisĂ© dans un projet logiciel, par exemple dans une Infrastructure-as-Code (IaC) ou dans le code applicatif. Les dĂ©veloppeurs peuvent ainsi corriger les problĂšmes bien avant que le logiciel ne parvienne jusquâĂ lâutilisateur final.
Scans de sécurité
Comme lâanalyse statique, le scan de sĂ©curitĂ© est un processus gĂ©nĂ©ralement automatique utilisĂ© pour dĂ©tecter les vulnĂ©rabilitĂ©s et les erreurs de configuration dans toute lâapplication, y compris dans son infrastructure sous-jacente. Ces scans incluent par exemple des analyses de script intersites, un scan des ports ou encore une analyse des vulnĂ©rabilitĂ©s de container.
Revues de code
Les scans automatisĂ©s sont certes trĂšs efficaces, mais il est toujours utile de faire inspecter le code par un humain avant de le dĂ©ployer en production. La plupart des dĂ©veloppeurs effectuent dĂ©jĂ des revues de code pour dĂ©tecter les dĂ©fauts et les erreurs logiques passĂ©s entre les mailles de filet. Mais avec la bonne stratĂ©gie, cette pratique peut Ă©galement leur permettre de repĂ©rer des vulnĂ©rabilitĂ©s moins communes pour Ă©viter quâelles ne contaminent le codebase.
Tests dâintrusion
Cette pratique beaucoup plus intensive fait intervenir des experts en cybersĂ©curitĂ©, embauchĂ©s par lâentreprise pour tester la sĂ©curitĂ© de son infrastructure de production. Les pentesters ont recours pour ce faire Ă diffĂ©rentes mĂ©thodes, de la simple analyse de vulnĂ©rabilitĂ©s Ă lâexĂ©cution dâexploit. Ă lâissue de la mission, ils Ă©tablissent un rapport listant les problĂšmes qui ont Ă©chappĂ© aux contrĂŽles de sĂ©curitĂ©.
Bug Bounty
Ce dispositif assez rĂ©cent est similaire aux tests dâintrusion, avec nĂ©anmoins quelques diffĂ©rences. Ces programmes encouragent les utilisateurs Ă signaler des vulnĂ©rabilitĂ©s quâils ont eux-mĂȘmes dĂ©tectĂ©es, en Ă©change dâune rĂ©compense financiĂšre. Ils sont ainsi moins enclins Ă exploiter ces vulnĂ©rabilitĂ©s pour leur propre intĂ©rĂȘt.
Formation
Il ne faut jamais sous-estimer le pouvoir dâune bonne formation. La cybersĂ©curitĂ© ne cesse dâĂ©voluer et bon nombre de conseils et de connaissances que nous prenions pour acquises il y a dix ans ne sont plus dâactualitĂ©. De la mĂȘme maniĂšre, ce que nous savons aujourdâhui nâaura peut-ĂȘtre plus cours dans une dĂ©cennie. Les formations de sĂ©curitĂ© sont donc extrĂȘmement importantes pour identifier et corriger les nombreuses vulnĂ©rabilitĂ©s dues aux erreurs humaines.
Sécuriser le cycle de développement logiciel
Des mĂ©canismes de protection greffĂ©s Ă la va-vite ne suffiront pas. La sĂ©curitĂ© doit sâintĂ©grer Ă la trame mĂȘme du cycle de dĂ©veloppement. Il nây a donc pas de « phase de sĂ©curitĂ© » Ă proprement parler, mais plutĂŽt une sĂ©rie de bonnes pratiques et dâoutils que vous pouvez (et devez) inclure Ă toutes les Ă©tapes de votre SDLC : implication des Ă©quipes de sĂ©curitĂ©, dĂ©ploiement dâoutils automatisĂ©s, formations, etc. ConsidĂ©rez la sĂ©curitĂ© non pas comme une simple case Ă cocher, mais plutĂŽt comme une Ă©volution de votre processus. Vous pourrez ainsi inscrire ces nouvelles pratiques dans le temps et en tirer plus de valeur.
- Cahier des charges
La premiĂšre phase du SDLC consiste Ă cerner le problĂšme et les objectifs pour Ă©tablir un cahier des charges de sĂ©curitĂ©. Ă ce stade, les tickets (signalements de bugs, demandes de fonctionnalitĂ©s, vulnĂ©rabilitĂ©s, etc.) deviennent des projets. Dans un SDLC sĂ©curisĂ©, le plus gros challenge est dâidentifier les prioritĂ©s. Impliquer lâĂ©quipe de sĂ©curitĂ© dans le processus vous donnera plus de contexte pour Ă©valuer lâimpact de chaque nouvelle fonctionnalitĂ© ou de chaque nouveau correctif qui entre dans le SDLC.
- Planification
Vous avez identifiĂ© le problĂšme. Il vous faut maintenant trouver la solution et dĂ©cider ce que vous allez construire. Comme Ă lâĂ©tape prĂ©cĂ©dente, recueillez le feedback de lâĂ©quipe de sĂ©curitĂ© pour vous assurer que la solution proposĂ©e rĂ©sout le problĂšme tout en prĂ©servant la sĂ©curitĂ© du client et la valeur quâils retirent de lâapplication.
- Conception
Une fois les exigences de sĂ©curitĂ© dĂ©finies, vous devez dĂ©terminer comment crĂ©er la solution dans votre application. Il vous faudra gĂ©nĂ©ralement concevoir lâarchitecture de bout en bout. Posez-vous les bonnes questions : quel sera lâimpact sur les systĂšmes ? Quels services seront créés ou modifiĂ©s ? Comment les utilisateurs interagiront-ils avec cette fonctionnalitĂ© ? Chaque concept doit ĂȘtre Ă©tudiĂ© et approuvĂ© par lâĂ©quipe dâingĂ©nierie, mais aussi par lâĂ©quipe de sĂ©curitĂ© qui pourra identifier les failles potentielles. Ces trois premiĂšres phases nĂ©cessitent une communication constante avec toutes les parties prenantes, faute de quoi certains problĂšmes risquent de passer sous les radars et dâĂȘtre dĂ©tectĂ©s trop tard dans le processus.
- Implémentation
Place au concret. Vos idĂ©es doivent ĂȘtre transposĂ©es en code. Câest lĂ que certains mĂ©canismes de sĂ©curitĂ© mentionnĂ©s plus haut interviennent. Lâanalyse statique est une solution peu coĂ»teuse et facile Ă mettre en Ćuvre. Elle peut ĂȘtre utilisĂ©e sur chaque commit ou chaque push pour donner aux dĂ©veloppeurs un feedback en temps quasi rĂ©el sur lâintĂ©gritĂ© du code quâils sont en train dâĂ©crire.
Une fois le code terminĂ© et le processus de revue enclenchĂ©, une Ă©quipe expĂ©rimentĂ©e prend le relais pour dĂ©tecter les problĂšmes de logique et les vulnĂ©rabilitĂ©s. Comme pour la qualitĂ© des produits, la protection de lâentreprise est lâaffaire de tous, et non pas uniquement de lâĂ©quipe de sĂ©curitĂ©.
- Tests et déploiement
Le code est Ă©crit et revu par les acteurs concernĂ©s. Il faut maintenant le tester avant de le dĂ©ployer en production. Les outils de scan plus robustes entrent alors en action pour une analyse approfondie de la sĂ©curitĂ© de lâapplication. Des tests manuels peuvent Ă©galement ĂȘtre effectuĂ©s, en fonction de la taille de la fonctionnalitĂ© et des ressources disponibles. Ă mesure que des vulnĂ©rabilitĂ©s sont identifiĂ©es, des solutions peuvent ĂȘtre intĂ©grĂ©es aux outils automatisĂ©s existants pour Ă©viter toute nouvelle occurrence.
- Maintenance
DĂ©ployer du code en production ne se rĂ©sume pas Ă appuyer sur un bouton puis Ă oublier son existence. Les ressources changent, des bugs apparaissent, des failles sont dĂ©tectĂ©es⊠le code doit ĂȘtre suivi et maintenu en permanence pour garantir son intĂ©gritĂ©, jour aprĂšs jour. Si la phase de maintenance sert gĂ©nĂ©ralement Ă identifier et Ă corriger les dĂ©fauts dans le code, câest aussi Ă ce stade que les vulnĂ©rabilitĂ©s sont dĂ©couvertes.
Vous devez nĂ©anmoins garder Ă lâesprit quâun code sĂ©curisĂ© ne le restera pas toujours. Des risques de la supply chain aux exploits zero-day, le paysage de la sĂ©curitĂ© Ă©volue constamment. Un SDLC sĂ©curisĂ© passe donc par un processus capable dâidentifier et de rĂ©soudre les problĂšmes au fur et Ă mesure quâils surgissent.
- Retour à la premiÚre étape
Le SDLC est un processus sans fin qui se rĂ©pĂšte en permanence. Lorsque vous arrivez au bout, vous devez revenir au point de dĂ©part. Chaque bug, amĂ©lioration ou vulnĂ©rabilitĂ© identifiĂ©s aux phases de test ou de maintenance lancera un nouveau cycle et la dĂ©finition dâun nouveau cahier des charges. Bref, le dĂ©veloppement sĂ©curisĂ© de logiciel est un cycle dâamĂ©lioration continue.
Conclusion : pour aller plus loin
Sâil existe une multitude de mĂ©thodes pour intĂ©grer la sĂ©curitĂ© au SDLC, dont certaines sont dĂ©jĂ en application dans votre entreprise, dâautres mĂ©canismes robustes vous permettront de renforcer davantage la protection de votre cycle de dĂ©veloppement. Les ressources ci-dessous sont un bon point de dĂ©part pour impulser cette transition.
SAMM de lâOWASP
Le SAMM (Software Assurance Maturity Model) est un modĂšle de maturitĂ© dâassurance logicielle publiĂ© par lâOWASP. Successeur du CLASP (Comprehensive, Lightweight Application Security Process), ce framework robuste fournit des recommandations claires pour intĂ©grer les pratiques de sĂ©curitĂ© au processus de dĂ©veloppement logiciel. Il met notamment lâaccent sur la nĂ©cessitĂ© dâadapter ces mĂ©canismes au profil de risque de lâentreprise.
SSDF du NIST
Le SSDF (Secure Software Development Framework) est une sĂ©rie de pratiques fondamentales conçues pour sĂ©curiser le dĂ©veloppement logiciel. Ce framework publiĂ© par le NIST sâappuie sur les bonnes pratiques mises au point par plusieurs organismes axĂ©s sur la sĂ©curitĂ© (notamment lâOWASP). Il dĂ©compose le SDLC en quatre Ă©tapes clĂ©s, chacune pensĂ©e pour renforcer la posture de sĂ©curitĂ© logicielle de lâentreprise.
- PrĂ©parer lâentreprise â Assurez-vous que les collaborateurs, les processus et les technologies sont prĂȘts Ă suivre un SDLC sĂ©curisĂ©, au niveau organisationnel, mais aussi au niveau individuel, dans chaque Ă©quipe de dĂ©veloppement et pour chaque projet.
- ProtĂ©ger le logiciel â ProtĂ©gez tous les composants du logiciel contre les altĂ©rations et les accĂšs non autorisĂ©s.
- Concevoir des logiciels sĂ©curisĂ©s â DĂ©veloppez des logiciels sĂ©curisĂ©s en limitant au maximum le nombre de vulnĂ©rabilitĂ©s Ă chaque publication.
- Corriger les vulnĂ©rabilitĂ©s â Identifiez les vulnĂ©rabilitĂ©s passĂ©es entre les mailles du filet aprĂšs publication. Mettez en place les mesures appropriĂ©es pour les corriger et Ă©viter toute rĂ©cidive.