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.

  1. 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.

  2. 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.

  3. 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.

  4. 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Ă©.

  5. 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.

  6. 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.

  7. 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.