Cours — Domaine 8 · 11% · 13 h

Sécurité du développement logiciel

La plupart des attaques modernes exploitent des vulnérabilités situées dans les couches logicielles des systèmes distribués, exposés sur le web et déployés sur Internet. Ces vulnérabilités sont presque toujours auto-induites : elles naissent d'erreurs commises par ceux qui conçoivent, programment, déploient ou utilisent le logiciel. Le pire est que les failles les plus dévastatrices (buffer overflow, injection SQL, escalade de privilèges) sont parfaitement connues depuis des décennies, et pourtant elles réapparaissent sans cesse faute d'appliquer des frameworks et des standards de codage sécurisés.

Le domaine 8 part d'un principe directeur : la sécurité est un ingrédient, un processus et une emerging property qui doit être intégrée dès le départ et à chaque étape (shift-left), jamais ajoutée après coup. On ne corrige pas une conception non sécurisée par un pansement en fin de cycle. Vous apprendrez à intégrer la sécurité dans le Software Development Life Cycle (SDLC), à comparer les méthodologies (waterfall, Agile, spiral, DevOps, DevSecOps), à appliquer les modèles de maturité (SW-CMM), à évaluer l'efficacité de la sécurité logicielle (SAST, DAST, IAST, RASP), à maîtriser les risques des logiciels acquis (COTS, open-source, software libraries) et à définir des règles de secure coding (input validation, defensive programming, strong data typing).

Le domaine couvre aussi en profondeur la sécurité des bases de données (modèles, ACID test, aggregation, inference, polyinstantiation, view-based access controls), du mobile code et du web (XML, REST, API), ainsi que le paysage des malwares (virus, worm, ransomware, APT, living off the land). Ce parcours s'appuie sur le scénario fil rouge du drone Waxbill (UAV de surveillance environnementale développé par MLZ Systems) pour ancrer chaque concept dans une décision concrète de sécurité.

Objectifs d'apprentissage

À la fin de ce cours, vous saurez

  • Intégrer la sécurité comme emerging property à chaque phase du SDLC plutôt que de l'ajouter après coup (principe shift-left).
  • Comparer les méthodologies de développement (waterfall, V-shaped, iterative, spiral, Agile, RAD, MPM, DevOps, DevSecOps) et recommander la plus adaptée à un contexte donné.
  • Évaluer la maturité des processus de développement à l'aide des maturity models (SW-CMM) et planifier leur amélioration continue.
  • Distinguer et appliquer les techniques d'évaluation de la sécurité logicielle : SAST, DAST, IAST, RASP, regression testing et IV&V.
  • Maîtriser les concepts de programmation pertinents pour la sécurité : OOP (inheritance, encapsulation, polymorphism, polyinstantiation), source/object/intermediate code, strong data typing.
  • Évaluer et maîtriser les risques liés aux logiciels acquis : COTS, open-source software, software libraries, citizen programmers et code reuse.
  • Sécuriser les bases de données : modèles, ACID test, et contrôles contre aggregation, inference, query/bypass attacks via polyinstantiation et view-based access controls.
  • Appliquer les règles de secure coding (input validation, defensive programming, blocked/allowed lists) pour prévenir buffer overflow, injection et TOCTOU.
  • Identifier et classifier les menaces sur le mobile code, le web (XML, REST, API) et les familles de malwares (virus, worm, ransomware, APT, living off the land).
  • Conduire un threat modeling data-centric et conseiller le management sur le niveau de sécurité à intégrer dès la conception.

Prérequis : Une compréhension générale des concepts de sécurité (CIA triad, defense in depth, least privilege) issus du domaine 1 est recommandée. Les notions d'architecture sécurisée et de mécanismes de protection (TCB, reference monitor, covert channels) abordées au domaine 3, ainsi que les principes de cryptographie et de protection des données du domaine 2, facilitent grandement la compréhension. Aucune expérience de programmation n'est exigée : ce domaine vise le security professional qui conseille et évalue, pas le software engineer qui code. Une familiarité de base avec le vocabulaire du développement (compilation, source code, bases de données, API web) suffit.

Parcours conseillé

Ce parcours se déroule en 4 sessions d'environ 3 à 4 heures chacune, soit ~13 heures au total. Travaillez les modules dans l'ordre : chaque session referme les checkpoints avant de passer à la suivante. Refaites systématiquement les checkpoints de fin de module - ils ancrent les pièges d'examen. Une fois les 9 modules terminés, enchaînez avec le quiz complet (150+ questions) en révision finale pour valider l'ensemble du domaine.

  1. Session 1 - SDLC, méthodologies et maturité

    MODULE 1 · MODULE 2 · MODULE 3

    Intégrer la sécurité dans le SDLC (shift-left), comparer waterfall, Agile, spiral, DevOps/DevSecOps, et situer les processus sur un maturity model (SW-CMM).

  2. Session 2 - Écosystèmes de développement et efficacité

    MODULE 4 · MODULE 5

    Sécuriser les écosystèmes de développement (IDE, CI/CD, software libraries, source code) et évaluer l'efficacité de la sécurité via SAST, DAST, IAST, RASP et IV&V.

  3. Session 3 - Logiciels acquis et secure coding

    MODULE 6 · MODULE 7

    Évaluer l'impact des logiciels acquis (COTS, open-source, code reuse, citizen programmers) et appliquer les secure coding guidelines (input validation, defensive programming).

  4. Session 4 - Bases de données, web, malware et SDS

    MODULE 8 · MODULE 9

    Sécuriser les bases de données (ACID, aggregation, inference, polyinstantiation), maîtriser mobile code, web (XML, REST, API), le paysage des malwares et le software-defined security (SDS).

Module 1 Objectif 8.1 100 min Fondamental

Sécurité dans le SDLC : fondations

Prérequis : Aucun. Point d'entrée du domaine.

La sécurité d'un système logiciel n'est ni un module qu'on ajoute à la fin, ni un produit qu'on achète : c'est une propriété émergente qui doit être présente à chaque étape de la planification, du développement et de l'exploitation. Ce module pose les fondations du Domaine 8. On y voit d'abord OÙ vivent les vulnérabilités (modèle en anneaux et pile OSI), comment les identifier (threat modeling, STRIDE), et la surface de menace particulière qu'introduit le mobile code du web. On situe ensuite le logiciel dans son environnement et ses trois perspectives temporelles, puis on démonte le faux dilemme du « rapide et pas cher contre lent mais sûr » : le coût d'une correction explose à mesure qu'on la retarde. La plupart des vulnérabilités exploitables sont auto-infligées - des erreurs de requirements, de design et de code non détectées au test. Les corriger tôt est l'opportunité à plus fort levier du professionnel de la sécurité.

Objectifs pédagogiques

  • Situer où vivent les vulnérabilités à travers le modèle en anneaux et la pile OSI, et expliquer l'héritage vertical des vulnérabilités.
  • Définir le threat modeling et appliquer le mnémonique STRIDE ; connaître PASTA, LINDDUN et Trike ainsi que la notion de threat surface.
  • Expliquer ce qu'est le mobile code (executable content) et pourquoi le web en dépend, côté client et côté serveur.
  • Décrire l'environnement logiciel et ses trois perspectives temporelles (design/dev, runtime, après retrait).
  • Analyser le compromis temps/qualité et le coût croissant des corrections tardives, jusqu'au threat modeling data-centric (NIST SP 800-154).

Critères de réussite

  • Je peux expliquer pourquoi une couche haute hérite des vulnérabilités des couches basses.
  • Je peux décliner STRIDE et distinguer threat modeling (identifier/catégoriser/analyser) de mitigation.
  • Je peux citer plusieurs types de mobile code et expliquer le risque client+serveur du web.
  • Je peux distinguer data in transit, at rest et in use, et justifier que protéger l'information est la fin.
  • Je peux situer un coût de correction sur la courbe 1x → exponentiel selon la phase où le défaut est trouvé.

1.1 Où vivent les vulnérabilités : ring model et pile OSI

Anneaux concentriques alignés sur la pile OSI à 7 couches montrant l'héritage des vulnérabilités vers le haut
Figure 1.1 · Modèle en anneaux et pile OSI

Le Domaine 3 a introduit le ring model pour montrer comment des couches de fonctions s'empilent pour produire les architectures de systèmes et d'information dont les organisations dépendent. Le matériel embarque son propre logiciel, le firmware, gravé en ROM. Les systèmes d'exploitation pilotent des familles de matériels via des device drivers, sans que l'OS ait à manipuler les détails de bas niveau. C'est exactement la logique des couches 1 et 2 du modèle OSI : elles encapsulent les détails matériels et exposent aux couches supérieures les fonctions dont elles ont besoin. Couche après couche, le système se construit jusqu'à la couche 7, où l'utilisateur et ses applications consomment des services rendus par du logiciel s'exécutant sur de nombreux systèmes différents.

Le point clé, à retenir pour l'examen : chaque couche dépend des couches inférieures pour ses contrôles de sécurité encapsulés, mais elle HÉRITE aussi de leurs vulnérabilités. Si une erreur exploitable existe dans une couche basse (firmware, driver, pile réseau), toutes les couches au-dessus en héritent, qu'elles le sachent ou non. Inversement, les couches internes (ou basses) de l'anneau ou de la pile doivent être protégées des conséquences d'attaques visant des vulnérabilités situées au-dessus d'elles. La sécurité n'est donc jamais l'affaire d'une seule couche : c'est de la defense in depth verticale.

Du logiciel existe à chaque niveau de l'anneau, et ce logiciel dépend souvent de fichiers de configuration, de scripts et de valeurs d'initialisation (les valeurs par défaut). Un programme applicatif typique peut comporter des dizaines de milliers de fichiers d'exécutable, de données de paramètres, de scripts et d'autres données. Chacun de ces fichiers est une surface de risque potentielle : la vulnérabilité ne se cache pas seulement dans le code, mais aussi dans la configuration et les données qui pilotent ce code.

Mots-clés EN ring model OSI 7-Layer Model firmware device driver defense in depth
Points clés
  • Chaque couche dépend des couches basses pour ses contrôles ET hérite de leurs vulnérabilités.
  • Les couches basses doivent aussi être protégées des attaques venant des couches hautes.
  • Du logiciel existe à chaque niveau de l'anneau : firmware, drivers, OS, applications.
  • Une appli typique = des dizaines de milliers de fichiers (exécutable, config, scripts, données).
  • Le risque ne vit pas que dans le code, mais aussi dans la configuration et les données.

1.2 Threat modeling et STRIDE

STRIDE : 6 catégories de menaces pour le threat modeling
Figure 1.2 · STRIDE : 6 catégories de menaces pour le threat modeling

Le threat modeling, tel que défini par l'OWASP, est le processus de sécurité par lequel des menaces potentielles - ou l'absence de safeguards - sont identifiées, catégorisées et analysées. Concrètement, on crée des abstractions du système pour repérer les frontières (perimeters) entre sous-systèmes et entre le système et son environnement externe. Logiciel, matériel, données et personnes sont autant de points de franchissement de ces frontières. Le threat modeling consiste à regarder un environnement, un système ou une application du point de vue de l'attaquant et à déterminer les vulnérabilités qu'il pourrait exploiter.

Le modèle le plus répandu est STRIDE, mnémonique de six catégories de menaces : Spoofing (usurper une identité), Tampering (modifier quelque chose sur disque, réseau, données ou code), Repudiation (nier avoir effectué une action), Information disclosure (exposer de l'information à quelqu'un de non autorisé), Denial of service (épuiser ou dégrader un service), et Elevation of privilege (obtenir des privilèges sans autorisation). En STRIDE, le professionnel décompose le système en composants pertinents, analyse la sensibilité de chaque composant à ces menaces, puis identifie des mitigations. D'autres modèles visent les mêmes fins : PASTA, LINDDUN (orienté privacy) et Trike.

La threat surface (surface de menace) est le total des points de franchissement pour une frontière donnée : ports TCP/IP, services de login, champs de saisie d'une page web, points de connexion pour médias amovibles. Chaque franchissement est une opportunité d'appliquer une technique de contrôle dans une stratégie globale de risk mitigation. Le data-centric threat modeling (NIST SP 800-154, 2016) déplace le focus du système vers la donnée : il modélise les mouvements, emplacements, exécutions et entrées/sorties autorisés des données, ce qui correspond directement à protéger les données in transit, at rest et in use.

Piège d'examen classique : le threat modeling sert à IDENTIFIER, CATÉGORISER et ANALYSER les menaces. Ce n'est PAS de la mitigation. La mitigation est l'étape qui suit, pas une étape du threat modeling lui-même. Confondre les deux est une erreur fréquente au QCM.

Mots-clés EN threat modeling STRIDE threat surface PASTA / LINDDUN / Trike data-centric threat modeling
Points clés
  • Threat modeling = identifier + catégoriser + analyser les menaces (OWASP).
  • STRIDE = Spoofing, Tampering, Repudiation, Information disclosure, Denial of service, Elevation of privilege.
  • On regarde le système du point de vue de l'attaquant ; on décompose en composants.
  • Autres modèles : PASTA, LINDDUN (privacy), Trike. Threat surface = somme des points de franchissement.
  • NIST SP 800-154 = data-centric : protéger la donnée in transit, at rest, in use.

1.3 Mobile code et executable content

Mobile code et executable content
Figure 1.3 · Mobile code et executable content

Les applications web étendent la surface de menace en prolongeant l'architecture de nos systèmes avec du mobile code, aussi appelé executable content. Le mobile code est un fichier (ou un ensemble de fichiers) envoyé par un système vers un ou plusieurs systèmes clients ; une fois ouvert par un logiciel déjà installé sur le client, il pilote l'exécution du logiciel du client ou est directement exécuté par le CPU du client. La distinction historique est nette : les architectures client-serveur traditionnelles gardaient le code en place (des fonctions différentes sur clients et serveurs) tandis que seules les données circulaient. Les architectures web, elles, DÉPENDENT du mobile code pour fonctionner.

À chaque connexion d'un navigateur à un serveur, le serveur télécharge sur le poste de l'utilisateur des fichiers contenant la logique de contrôle et les données nécessaires au rendu de la page, fournit des champs de saisie, valide ces saisies et renvoie des données au serveur. Les types de mobile code sont nombreux : les plus courants sont JavaScript, les Java Archive (fichiers JAR), les fichiers XML et les requêtes d'API. Les fichiers HTML de la page elle-même et les feuilles de style CSS sont aussi de l'executable content. Apps, applets, widgets, add-ons et add-ins de navigateurs en sont d'autres exemples. Les bots forment une classe émergente : ils utilisent des capacités limitées de machine learning pour assister les requêtes des utilisateurs, automatiser des workflows ou valider la qualité des saisies.

Presque toute action via une web app ouvre à la fois la surface de menace du client ET celle du serveur : le mobile code envoyé par le serveur doit franchir la threat surface du client pour être rendu, mais les données saisies dans les champs et renvoyées par un submit ou un post - qui peuvent elles-mêmes être du mobile code - traversent la threat surface du serveur. À retenir : la quasi-totalité des espèces de malware sont du mobile code, ou de l'executable content, ou exploitent les fonctionnalités systèmes et architecturales qui rendent le mobile code possible. Le mobile code n'est donc pas un risque parmi d'autres : c'est le mécanisme même que détourne la plupart des attaques web.

Mots-clés EN mobile code executable content JavaScript / JAR / XML / API applet / widget / add-on bot
Points clés
  • Mobile code = executable content envoyé au client et exécuté par lui.
  • Client-serveur classique : le code reste en place, seules les données bougent.
  • Le web DÉPEND du mobile code : chaque page télécharge logique + données.
  • Types : JavaScript, JAR, XML, API, HTML, CSS, applets, widgets, add-ons, bots.
  • Une web app ouvre les surfaces client ET serveur ; presque tout malware EST du mobile code.

1.4 L'environnement logiciel et les trois perspectives temporelles

Deux systèmes notionnels en interaction client-serveur via internet, montrant les couches OS du HAL aux applications
Figure 1.4 · L'environnement logiciel

L'environnement logiciel, au sens large, regroupe tous les éléments, activités, informations, personnes et systèmes qui affectent la façon dont un logiciel est créé, utilisé, modifié et finalement retiré. Cet environnement peut se limiter à une organisation qui est seule créatrice et utilisatrice de son logiciel, ou s'étendre à tout un marché pour du logiciel COTS (commercial off-the-shelf). Il inclut quiconque peut lire ou faire du reverse engineering du code, ses utilisateurs, et même ceux qui subissent les effets du logiciel sans l'utiliser directement. Il englobe souvent des facteurs légaux, réglementaires et externes. Exemple parlant : pendant la pandémie de COVID-19, des patients ne pouvaient accéder à la télémédecine que lorsque l'environnement logiciel de facturation des assurances médicales avait été modifié pour le permettre. L'environnement logiciel est donc complexe et déborde largement du seul code.

Le modèle de cycle de vie ajoute une autre source de complexité : trois perspectives temporelles différentes. Premièrement, le design et le développement : c'est là que se créent le plus de vulnérabilités auto-infligées, qui peuvent ne pas être détectées au test et à l'assessment. La threat surface y est plus petite et plus facile à contrôler qu'à toute autre étape. Cette phase peut durer des jours, des mois ou des années.

Deuxièmement, le runtime en exploitation : à la fois les moments individuels d'usage par chaque utilisateur, et les jours, mois ou années pendant lesquels une version donnée est mise à disposition. C'est le moment où la threat surface est MAXIMALE et où le contrôle du risque est le plus difficile pour les développeurs, mainteneurs et équipes sécurité. Troisièmement, après remplacement ou retrait d'une version par une autre : le système s'étend à chaque nouvelle version et à chaque adaptation locale. La découverte d'une vulnérabilité dans n'importe quelle version encore en service peut mettre en danger la dernière édition comme les précédentes. Cette phase de support chevauchant s'étale souvent sur des années. À retenir pour l'examen : la threat surface n'est pas constante - elle est minimale au design, maximale au runtime, et persiste tant que d'anciennes versions restent déployées.

Mots-clés EN software environment COTS design and development runtime overlapping support
Points clés
  • L'environnement logiciel inclut code, gens, lois, marché COTS, reverse engineers.
  • Trois perspectives temporelles : design/dev, runtime, après retrait.
  • Design/dev : le plus de vulnérabilités créées, mais threat surface minimale et contrôlable.
  • Runtime : threat surface MAXIMALE, contrôle du risque le plus difficile.
  • Après retrait : une vulnérabilité dans une vieille version peut menacer la dernière édition.

1.5 Le compromis temps/qualité et le coût des corrections tardives

Courbe du coût de correction d'un défaut croissant de 1x au design vers une valeur exponentielle en operations et maintenance
Figure 1.5 · Le coût des corrections tardives

Pendant des décennies, les organisations ont cru à un dilemme : avoir le logiciel vite et pas cher mais en sacrifiant des fonctions critiques comme la sécurité, ou bien plus tard, plus robuste et plus sûr, mais à coût bien plus élevé. La naissance d'internet reflète ce choix et la croyance implicite qu'il n'existait pas de terrain intermédiaire. C'est un faux dilemme : la plupart des vulnérabilités exploitables sont auto-infligées, créées comme erreurs de requirements, de design et de code, et non détectées par des erreurs de test, de vérification et d'assessment - puis laissées à trouver et exploiter par un attaquant. Beaucoup d'organisations ont évité ce faux dilemme en choisissant des approches qui satisfont le besoin métier avec du logiciel fiable, résilient et sûr.

La raison économique tient au coût croissant du changement tardif. Quand une erreur est trouvée et corrigée dans la phase où elle a été introduite, son coût est la référence : « 1x ». Trouvée une phase plus tard, le coût augmente ; trouvée en operations ou maintenance, il explose - non seulement à cause du rework, mais parce qu'elle impacte alors les objectifs métier et mission. La courbe va de 1x à une croissance quasi exponentielle. Sauter directement de l'idée au code (construction-only) paraît le moins cher mais ne l'est pas : l'analyse front-loaded de la sécurité, de la fiabilité et de la sûreté, plus déterminée et délibérée, vaut largement son effort.

Une grande partie de ces défauts vient des données. Les erreurs classiques persistent : mauvaise gestion des boucles et des conditions, mauvais types de données, mauvais usage des données/code d'un module par un autre, mauvaise gestion des cas spéciaux et exceptions, jeux de paramètres incomplets entre modules. Le problème central : une donnée d'entrée hors plage, incomplète, ou dans la plage mais incorrecte provoque un comportement anormal. D'où l'expression « garbage in, garbage out » - faire tourner une activité sans contrôle effectif de la qualité des données.

Le NIST Draft SP 800-154 - Guide to Data-Centric System Threat Modeling (2016) établit le data-centric threat modeling comme méthodologie : il se concentre sur les mouvements, emplacements, exécutions et entrées/sorties autorisés des données, ce qui correspond à protéger la donnée in transit, at rest et in use. Il rappelle qu'une entrée mal contrôlée peut exposer d'autres données, permettre l'exécution de code arbitraire, corrompre le stockage ou terminer l'application ; et qu'un mauvais usage des utilitaires système pour lire ou extraire des données peut être une étape d'exfiltration. Principe clé pour l'examen : protéger l'INFORMATION dans le système est la fin ; protéger le logiciel, le matériel, les personnes et les locaux n'en sont que les moyens.

Mots-clés EN deadly trade cost of late change garbage in, garbage out construction-only NIST SP 800-154
Points clés
  • Faux dilemme : on peut faire fiable, résilient ET sûr ; la plupart des vulnérabilités sont auto-infligées.
  • Coût de correction : 1x à l'origine, croissance exponentielle plus on attend.
  • En operations/maintenance, le coût explose car il touche les objectifs métier/mission.
  • « Garbage in, garbage out » : sans contrôle qualité des entrées, sorties fausses ; erreurs data classiques.
  • Protéger l'information est la FIN ; protéger logiciel/matériel/personnes/locaux sont des MOYENS.

Cas d'étude

Cas · Cas d'étude

Tout ou partie ? Le dilemme d'un jeune professionnel

Contexte : Un jeune professionnel de la sécurité, mentoré par un collègue chevronné, Jens, prend ses marques dans le programme de développement logiciel de son organisation. Il découvre un parc hétérogène : des applications maison, du COTS, des applets, des bots, et aucune vue claire de ce qui devrait être redéveloppé ou remplacé pour atteindre la posture de sécurité voulue. Deux questions le taraudent, qu'il pose à Jens.

Question : Première question : faut-il sécuriser TOUT le logiciel de l'organisation, ou seulement une partie jugée critique ? Seconde question : pourquoi les besoins métier semblent-ils si souvent ignorer le risque de sécurité ?

Topics traités héritage des vulnérabilitésthreat surfacemobile codecompromis temps/qualitérôle de conseil du professionnel
Voir l'analyse et la correction

Sur la première question, la bonne réponse est : tout (option A). Comme chaque couche hérite des vulnérabilités des couches inférieures et que presque tout malware exploite le mobile code présent partout, un élément logiciel non sécurisé - même mineur - peut devenir le point de franchissement par lequel un attaquant atteint le reste. On ne peut pas déclarer « non critique » un composant tant qu'on n'a pas modélisé sa place dans la threat surface globale. Sécuriser « une partie » laisse des frontières ouvertes.

Sur la seconde question, la bonne réponse (option D) tient à trois forces : les coûts, la speed to market, et la pression concurrentielle. Les besoins métier identifient de nouvelles capacités logicielles pour créer ou maintenir un avantage concurrentiel ; livrer vite et au moindre coût prime souvent sur l'analyse de risque, ce qui reproduit le faux dilemme « vite et pas cher contre sûr ». Le rôle du professionnel de la sécurité, ici, est d'éclairer ces arbitrages, pas de les subir : montrer que le coût d'une correction tardive explose justifie d'investir tôt dans la sécurité.

À retenir : Tout le logiciel doit être sécurisé, car l'héritage des vulnérabilités et l'ubiquité du mobile code rendent tout composant potentiellement exploitable. Et si le métier semble ignorer le risque, c'est rarement par négligence : ce sont les coûts, la speed to market et la pression concurrentielle qui pèsent - d'où la valeur d'un professionnel capable de chiffrer le coût croissant du changement tardif.

Éléments d'apprentissage clés
  • On sécurise TOUT le logiciel : aucun composant n'est isolable de la threat surface globale.
  • Les besoins métier ignorent le risque à cause des coûts, de la speed to market et de la pression concurrentielle.
  • Le professionnel de la sécurité conseille les arbitrages en chiffrant le coût du changement tardif.
Piège d'examen

Protéger l'information est la fin, pas le logiciel

Piège : croire que l'objectif est de protéger le logiciel, le matériel, les personnes ou les locaux. Ce sont des MOYENS. La fin, l'objet réel de la sécurité, est l'INFORMATION traitée par le système. On protège le code, les machines, le personnel et les sites parce qu'ils servent à protéger l'information - jamais l'inverse. Au QCM, si une option présente la protection du logiciel ou du matériel comme la finalité, méfie-toi : la bonne réponse renvoie presque toujours à la protection de l'information.

Piège d'examen

Data in transit vs at rest vs in use

Piège : confondre les trois états de la donnée. In transit = la donnée circule sur un réseau ou entre composants (à protéger par chiffrement de transport, TLS). At rest = la donnée est stockée (disque, base, sauvegarde ; à protéger par chiffrement de stockage et contrôle d'accès). In use = la donnée est en cours de traitement en mémoire par un processus (la plus difficile à protéger ; enclaves, isolation mémoire). Le data-centric threat modeling (NIST SP 800-154) raisonne précisément sur ces trois états. Une question d'examen qui parle de « donnée en cours de calcul » vise in use, pas at rest.

Piège d'examen

Threat modeling n'est PAS la mitigation

Piège du quiz officiel : le threat modeling consiste à IDENTIFIER, CATÉGORISER et ANALYSER des menaces (et l'absence de safeguards). La mitigation - décider et mettre en place des contre-mesures - n'est PAS une étape du threat modeling ; c'est ce qui vient après, sur la base du modèle. Quand une question demande « laquelle de ces étapes n'est PAS une étape du threat modeling ? », la réponse est Mitigation. Identifier, catégoriser et analyser, oui ; mitiger, non.

Point de contrôle — Checkpoint

  1. Parmi ces étapes, laquelle n'est PAS une étape du threat modeling ?

    • A Identifier les menaces
    • B Catégoriser les menaces
    • C Analyser les menaces
    • D Mitiger les menaces
    Réponse & justification

    Réponse : D — Mitiger les menaces

    La mitigation n'est pas une étape du threat modeling. Le threat modeling identifie, catégorise et analyse les menaces (et l'absence de safeguards) - options A, B, C. La mitigation vient après, sur la base du modèle, et constitue une activité distincte de réponse au risque.

  2. Dans le modèle en anneaux aligné sur la pile OSI, quelle affirmation est correcte au sujet d'une couche haute (ex. application) ?

    • A Elle est isolée des défauts des couches basses et ne peut pas en hériter.
    • B Elle dépend des couches basses pour ses contrôles mais hérite aussi de leurs vulnérabilités.
    • C Elle ne contient pas de logiciel, seulement des données utilisateur.
    • D Elle protège les couches basses sans jamais avoir besoin d'être protégée elle-même.
    Réponse & justification

    Réponse : B — Elle dépend des couches basses pour ses contrôles mais hérite aussi de leurs vulnérabilités.

    Chaque couche dépend des couches inférieures pour ses contrôles encapsulés ET hérite de leurs vulnérabilités (B). A est faux : l'héritage des vulnérabilités est précisément le point clé. C est faux : du logiciel existe à chaque niveau de l'anneau. D est faux : les couches basses doivent aussi être protégées des attaques venant des couches hautes.

  3. Pourquoi les architectures web ouvrent-elles à la fois la surface de menace du client et celle du serveur ?

    • A Parce que le code reste en place sur le serveur et que seules les données circulent.
    • B Parce que le mobile code envoyé par le serveur franchit la surface du client, et les données soumises franchissent celle du serveur.
    • C Parce que les navigateurs n'exécutent jamais de code et se contentent d'afficher du texte.
    • D Parce que les bots remplacent entièrement le serveur.
    Réponse & justification

    Réponse : B — Parce que le mobile code envoyé par le serveur franchit la surface du client, et les données soumises franchissent celle du serveur.

    Le web DÉPEND du mobile code : le serveur envoie au client de la logique de contrôle et des données qui doivent franchir la threat surface du client pour être rendues, tandis que les données saisies et renvoyées (qui peuvent être du mobile code) franchissent la threat surface du serveur (B). A décrit le client-serveur traditionnel, pas le web. C est faux : les navigateurs exécutent du mobile code (JavaScript, etc.). D est faux et hors sujet.

  4. Un défaut de sécurité introduit lors des requirements n'est découvert qu'en phase d'operations. Que prédit le modèle du coût du changement ?

    • A Le coût de correction reste à 1x quelle que soit la phase de découverte.
    • B Le coût diminue car le système est désormais stable en production.
    • C Le coût croît fortement, jusqu'à une valeur quasi exponentielle, car il touche aussi les objectifs métier.
    • D Le coût ne dépend que du nombre de lignes de code modifiées.
    Réponse & justification

    Réponse : C — Le coût croît fortement, jusqu'à une valeur quasi exponentielle, car il touche aussi les objectifs métier.

    Plus un défaut est trouvé tard, plus sa correction coûte : 1x à la phase d'origine, croissance quasi exponentielle en operations/maintenance, car elle impose du rework et impacte les objectifs métier et mission (C). A et B contredisent la courbe. D ignore l'impact métier, qui est précisément ce qui fait exploser le coût en exploitation.

Points essentiels à retenir

  • Les vulnérabilités vivent à chaque couche du ring model et de la pile OSI ; toute couche haute hérite des défauts des couches basses.
  • Le threat modeling identifie, catégorise et analyse les menaces (STRIDE, PASTA, LINDDUN, Trike) ; il n'inclut PAS la mitigation.
  • Le mobile code (JavaScript, JAR, XML, applets, widgets, bots) fait fonctionner le web et ouvre les surfaces client ET serveur.
  • L'environnement logiciel a trois perspectives temporelles : design/dev (surface minimale), runtime (surface maximale), après retrait (support chevauchant).
  • Le coût d'une correction croît de 1x à l'exponentiel ; protéger l'information est la fin, le logiciel/matériel/personnes/locaux sont des moyens.
Module 2 Objectif 8.1 130 min Fondamental

Méthodologies de développement

Prérequis : Module 1.

Une méthodologie de développement est l'ensemble organisé d'activités qui traduit les besoins fonctionnels des utilisateurs en un système logiciel. Ce module parcourt le SDLC waterfall classique et ses phases, la distinction entre SLC et SDLC, puis les modèles itératifs et lean (RAD, spiral, prototyping, Agile, DevOps, DevSecOps) ainsi que les approches transverses IPT et IPPD. Le fil rouge est constant : la sécurité doit etre intégrée du début à la fin, et la meilleure sécurité est celle qui est concue dans le système, pas ajoutée après coup. Vous apprendrez aussi à choisir une méthode adaptée au contexte org/industrie et à l'arbitrage entre fenetre concurrentielle et risque.

Objectifs pédagogiques

  • Décrire les phases du SDLC waterfall et distinguer SLC de SDLC.
  • Identifier les activités de sécurité propres à chaque phase, y compris IV&V, SV&V et OT&E.
  • Comparer les modèles itératifs et lean (RAD, spiral, prototyping, Agile, DevOps, DevSecOps) et leurs profils de risque.
  • Expliquer les approches transverses IPT et IPPD.
  • Choisir une méthodologie en intégrant la sécurité de bout en bout.

Critères de réussite

  • Je sais ordonner les phases waterfall et nommer ce qui appartient au SLC mais pas au SDLC.
  • Je distingue waterfall, V-shaped, itératif et Agile sans confusion.
  • Je tranche DevOps vs DevSecOps (shift-left) et spiral vs waterfall (PDCA + revue de risque).
  • Je situe IV&V, SV&V et OT&E dans la phase d'acceptance.
  • Je sais justifier le choix d'une méthode selon le contexte et le risque.

2.1 Le SDLC waterfall classique : SLC vs SDLC et ses phases

Schéma des phases du SDLC waterfall en séquence linéaire avec milestones de décision.
Figure 2.1 · Phases du SDLC waterfall

Le software development life cycle (SDLC) classique, apparu dans les années 1950 et institutionnalisé dans des standards d'acquisition gouvernementaux comme le MIL-STD-2167 du Department of Defense, est le waterfall model. Quand on parle de 'le SDLC' sans précision, on désigne presque toujours ce modèle waterfall. C'est une approche par phases en série ou chaque phase est complétée et documentée avant que la suivante ne commence ; la transition d'une phase à l'autre est marquée par un événement de décision formel, souvent un milestone ou une approbation, avec identification, status accounting et résolution gérée des open items restants. Chaque item non résolu représente un risque pour le programme.

Les phases généralement admises du waterfall sont : project initiation and planning ; functional requirements definition ; system design specifications ; development and implementation ; documentation and common program controls ; testing and evaluation control (certification and accreditation) ; transition to production. Comme le mot 'development' l'indique, le SDLC se termine à l'implémentation (mise en production). Le system life cycle (SLC), lui, couvre toute la vie du système et ajoute deux phases au-delà : operations and maintenance support (après installation), puis decommissioning/disposal and system replacement.

Piège d'examen : ne confondez pas SLC et SDLC. Le SDLC se termine à la mise en production ; operations & maintenance et decommissioning appartiennent au SLC, pas au SDLC. Autre piège : dans un waterfall strict, plus une erreur est détectée tard, plus son cout de correction explose - l'impact maximal survient en phase operations & maintenance. Cela justifie l'effort 'front-loaded' d'analyse et de test du waterfall pour les systèmes à haute fiabilité (nucléaire, spatial, aviation).

Mots-clés EN SDLC SLC Waterfall Milestone MIL-STD-2167
Points clés
  • 'Le SDLC' = le modèle waterfall classique par défaut.
  • Le SDLC se termine à la mise en production ; le SLC continue avec O&M et decommissioning.
  • Chaque phase est complétée et documentée avant la suivante, avec un milestone de décision.
  • Plus une erreur est trouvée tard, plus elle coute cher ; impact maximal en O&M.
  • Le waterfall convient aux systèmes haute fiabilité grace à son analyse front-loaded.

2.2 La sécurité à chaque phase du SDLC

Schéma montrant les activités de sécurité réparties sur toutes les phases du SDLC.
Figure 2.2 · La sécurité à chaque phase

La sécurité n'est pas une phase : elle s'exécute en parallèle de chaque phase de la méthodologie. En project initiation and planning, la justification du projet est endossée par le management (objectifs, scope, cout, calendrier) ; la compréhension des security requirements commence ici, et les activités de sécurité avancent en parallèle. En functional requirements definition, on formalise les exigences fonctionnelles ET nonfonctionnelles (sécurité, fiabilité, sureté) avec tous les stakeholders (owners, compliance, privacy). Attention : le waterfall a du mal avec les nonfunctional requirements et les emerging properties, qui ne s'évaluent que par analyse - les ignorer est une fallacy de raisonnement. En system design specifications, on conçoit l'architecture, les outputs et les interfaces ; les flux de données (input, data flow, output) et les security features sont intégrés au design. En development and implementation, le code est écrit (from scratch, librairies approuvées, snippets) ; il faut des coding standards, des librairies validées, des règles strictes de code reuse, et surtout du temps alloué au code review avant de poursuivre.

La phase acceptance est un handover formel et structuré au client, mesuré par rapport au requirements specification baseline convenu. Plusieurs équipes indépendantes peuvent intervenir : l'IV&V (independent verification and validation) examine, teste et analyse le système à la direction du client, en se concentrant sur certaines exigences ou éléments critiques ; le SV&V (selected/specialized verification and validation) cible spécifiquement la sécurité, la fiabilité, la sureté ou d'autres propriétés émergentes ; l'OT&E (operational testing and evaluation) évalue le système tel que l'équipe d'exploitation l'utilisera réellement, avec les concepts et procédures fournis par le client. Caveat de risque : plus ces équipes indépendantes s'éloignent des exigences contractuelles, plus les problèmes trouvés sont des surprises couteuses à corriger.

Transition to production n'appartient pas au waterfall traditionnel (réalisée par l'organisation cliente) : security accreditation, formation/sensibilisation des utilisateurs, installation, conversions de données, parfois opérations parallèles. Operation and maintenance (phase SLC) : monitoring, continuité, redondance, correction de défauts, test des procédures backup/recovery, et recertification périodique - en particulier lors de changements significatifs (classification des données, environnement physique, nouveau matériel/OS/logiciel, nouvelles interfaces externes). Decommissioning : retrait du service et disposal propre du matériel et du logiciel. Piège : un changement en maintenance ne doit jamais désactiver ou affaiblir un contrôle de sécurité existant requis.

Mots-clés EN IV&V SV&V OT&E Nonfunctional requirements Recertification Code review
Points clés
  • La sécurité s'exécute en parallèle de chaque phase, pas en bloc séparé.
  • Functional requirements : capturer aussi les nonfunctional et emerging properties.
  • Acceptance : IV&V (général), SV&V (sécurité/sureté ciblée), OT&E (usage réel).
  • Transition to production et O&M n'appartiennent pas au SDLC traditionnel.
  • Un changement en maintenance ne doit jamais affaiblir un contrôle existant requis.

2.3 Modèles itératifs et autres : du structured programming au cleanroom

Panorama des modèles SDLC
Figure 2.3 · Panorama des modèles SDLC

Le waterfall strict s'est révélé trop rigide : sur des programmes pluri-annuels (FAA, WWMCCS du DoD), le monde réel évoluait avant l'entrée en test et le requirements baseline n'était plus valide. Les modèles itératifs (Iterative development) répondent à cela en permettant des raffinements successifs des exigences, du design et du code, à condition d'un change control mécanisme et d'un scope maitrisé. Risque sécurité : dans un environnement changeant, il est difficile de garantir que les provisions de sécurité restent valides - si quelque chose change, les security requirements peuvent devoir changer aussi. Le Spiral method est une version imbriquée (nested) du waterfall : chaque phase est conduite en waterfall, mais on lui ajoute quatre sous-étapes basées sur le cycle de Deming PDCA (Plan, Do, Check, Act). La nouveauté clé : une risk assessment review (le Check) à chaque phase, avec révision des couts/calendriers et un point de décision continuer/annuler à chaque tour.

Plusieurs modèles 'lean' accélèrent la production. Le RAD (Rapid Application Development) est une forme raffinée de prototyping avec des limites de temps strictes par phase et des outils efficaces ; risque : des décisions trop rapides menant à un mauvais design. Le Prototyping construit une version simplifiée de l'application, la fait revoir, intègre le feedback, et itère jusqu'à satisfaction du owner. Le Modified Prototype Model (MPM) est une forme raffinée idéale pour le web : fonctionnalité de base déployée vite, maintenance enchainée juste après, application qui évolue avec l'organisation plutot que figée. Le Reuse model construit l'application à partir de composants existants déjà testés (idéal en OO) ; c'est sans doute l'approche la plus répandue mais souvent la plus mal gérée. Le Component-based development assemble des building blocks standardisés déjà testés pour la sécurité (largement remplacé par l'OOP).

D'autres méthodes complètent le tableau. Le Structured programming (années 1970, avant l'OOP) : usage intensif de subroutines et structures de blocs réutilisées, discipline, revues/approbations à chaque phase - principes toujours sains mais rarement utilisés tels quels. Le JAD (Joint Analysis Development) : techniques de facilitation impliquant tous les stakeholders à chaque phase critique. L'Exploratory model : exigences batîes avec les ressources disponibles et beaucoup d'hypothèses - la sécurité doit etre priorisée car la structure manque. Le CASE (Computer-Aided Software Engineering) : automatisation par langages formels à chaque étape avec base de données liant les phases (Space Shuttle Mission Control) - tombé en désuétude. Le Cleanroom mise sur la defect prevention plutot que la defect removal : écrire le code correctement du premier coup, la qualité par le design - meme logique que 'security baked in'. L'Extreme Programming (XP) : valeurs simplicité, communication, feedback ; développeurs travaillant toujours en paire ; petites releases pleinement intégrées ; owners et sécurité impliqués dans la définition des besoins en amont des développeurs.

Piège d'examen : Spiral = waterfall imbriqué avec PDCA et une revue de risque à chaque phase (à ne pas confondre avec un simple itératif). Cleanroom = defect PREVENTION (et non removal/correction).

Mots-clés EN Spiral RAD MPM Cleanroom Reuse model Extreme Programming CASE
Points clés
  • Iterative : raffinements successifs + change control ; risque que la sécurité se périme.
  • Spiral = waterfall imbriqué avec PDCA et revue de risque à chaque phase.
  • RAD/Prototyping/MPM = vitesse, risque de mauvais design si décisions trop rapides.
  • Cleanroom = defect prevention (correct du premier coup), pas defect removal.
  • XP = pair programming, petites releases, sécurité impliquée en amont.

2.4 Agile, Scrum et DevOps

Boucle DevOps montrant la collaboration continue entre development, operations et QA.
Figure 2.4 · DevOps

L'Agile development répond à des équipes et des besoins qui grandissent et évoluent : il privilégie les petits environnements d'équipe, l'apprentissage collaboratif et itératif, le build, le test et le déploiement de capacités opérationnelles. Ses patterns - Scrum, sprint, ou SAFe - gèrent le changement et produisent des fonctions travaillantes, fiables et vérifiables. Un sprint est un cycle court et borné produisant un incrément livrable. Agile peut très bien traiter les considérations de sécurité, à condition que l'équipe agile travaille effectivement avec des experts en sécurité de l'information. Rappel du module 1 : Agile livre plus de logiciel fonctionnel, plus vite, mais on lui reproche à juste titre de ne pas livrer une meilleure qualité ni un logiciel plus sécurisé par défaut.

DevOps combine 'development' et 'operations' (et typiquement la quality assurance). Fondé sur des principes lean/agile, il fait collaborer business owners, dev, ops et QA pour livrer du logiciel en continu, afin que le business réagisse vite aux opportunités de marché et au feedback client. Google, IBM, Amazon et Microsoft en ont des implémentations qui pilotent leur coeur de métier. DevOps repose sur quatre principes communs : développer et tester contre des systèmes 'production-like' (capturer des comportements réalistes avant la mise en production) ; déployer avec des processus répétables et fiables (l'automatisation est essentielle : déploiement et test continus, automatisés, fréquents, ce qui abaisse le risque d'échec de déploiement) ; monitorer et valider la qualité opérationnelle (avancer le monitoring tot dans le cycle, avec des métriques significatives capturées à chaque déploiement) ; amplifier les boucles de feedback (créer des canaux pour que tous les stakeholders accèdent au feedback et agissent dessus).

Piège d'examen : DevOps n'est pas DevSecOps. DevOps priorise la livraison rapide de nouvelles versions au-dessus de tout ; la sécurité, la sureté et la résilience y sont souvent reléguées et déléguées à d'autres processus. C'est précisément cette lacune que DevSecOps corrige (voir leçon suivante).

Mots-clés EN Agile Sprint DevOps Production-like Feedback loops
Points clés
  • Agile : Scrum/sprint/SAFe ; vite et fonctionnel, mais pas plus sécurisé par défaut.
  • DevOps = dev + ops + QA en collaboration pour une livraison continue.
  • 4 principes DevOps : prod-like, déploiements répétables/fiables, monitoring qualité, amplifier le feedback.
  • L'automatisation est essentielle pour des déploiements répétables et fiables.
  • DevOps priorise la vitesse ; la sécurité y est souvent déléguée à d'autres process.

2.5 DevSecOps et le shift-left

Schéma DevSecOps montrant la sécurité déplacée vers l'amont (shift-left) sur tout le pipeline.
Figure 2.5 · DevSecOps et shift-left

Pendant que DevOps se popularisait, les organisations soumises à des exigences de sécurité et de sureté plus strictes ont poussé une autre approche. Le terme SecOps a été forgé pour reprendre les lecons du waterfall classique et intégrer des activités de sécurité à chaque étape du processus. Là ou DevOps priorisait la livraison rapide au détriment de la sécurité, SecOps livre du code plus sécurisé en traitant les security requirements à chaque stade - au prix de plus de temps. DevSecOps fusionne ces deux modèles : il déplace le levier des security requirements vers la gauche de la timeline (le shift-left), offrant à chaque tour de cycle des opportunités plus précoces pour adresser et livrer les besoins de sécurité prioritaires en production.

Le shift-left est l'idée centrale : plutot que d'auditer la sécurité après le développement (post-hoc), on déplace les activités de sécurité - threat modeling, scanning, tests, monitoring - vers les phases amont de conception et d'exigences. La comparaison entre le schéma DevOps et le schéma DevSecOps montre l'inclusion explicite des préoccupations, activités et professionnels de sécurité tout au long du pipeline. Aspect clé : l'équipe de développement (qui doit inclure des membres sécurité) est responsable des tests de sécurité et de la résolution des problèmes de sécurité trouvés pendant le développement et le test. Beaucoup d'organisations adaptent en continu les principes DevSecOps à leur culture, co-adaptant culture et processus pour devenir plus orientés sécurité.

Piège d'examen (officiel Q8) : DevOps = livraison rapide, sécurité déléguée à d'autres processus ; DevSecOps = sécurité intégrée à chaque étape via le shift-left. Si la question oppose 'rapide mais sécurité externalisée' à 'sécurité intégrée tot et partout', la réponse 'intégrée à chaque étape' est DevSecOps.

Mots-clés EN DevSecOps Shift-left SecOps Threat modeling Security testing
Points clés
  • DevSecOps fusionne DevOps et SecOps en déplacant la sécurité vers la gauche.
  • Shift-left = sécurité dès la conception et les exigences, pas en post-hoc.
  • L'équipe de dev (avec membres sécurité) porte les tests et la résolution sécurité.
  • DevSecOps inclut explicitement sécurité et professionnels dans tout le pipeline.
  • Officiel Q8 : 'sécurité intégrée à chaque étape' = DevSecOps, pas DevOps.

2.6 Approches transverses : IPT et IPPD

IPT et IPPD : équipes pluridisciplinaires
Figure 2.6 · IPT et IPPD : équipes pluridisciplinaires

Dans les années 1980, beaucoup d'organisations ont implémenté le waterfall de travers : des équipes séparées par phase, sans personne hormis l'équipe de gestion de projet ayant une vue d'ensemble. Après des échecs couteux, le constat s'est imposé qu'impliquer le bon savoir, la bonne expérience et les bonnes perspectives de bout en bout est une meilleure facon de développer des systèmes complexes. Deux approches transverses sont couramment utilisées : l'Integrated Product Team (IPT) et l'Integrated Product and Process Development (IPPD).

Un IPT est une équipe de stakeholders aux compétences variées travaillant ensemble pour atteindre un processus ou un produit défini. Il puise dans de nombreuses disciplines de l'organisation et du domaine métier/mission pour engager des points de vue divers de facon cohérente tout au long du system life cycle. Ses membres assurent une représentation suffisante de tous les stakeholders - owners, management, développeurs, designers, contractants, professionnels de sécurité - pour garantir une collaboration efficace atteignant le résultat exigé. L'idée maitresse est l'engagement des stakeholders et la diversité des points de vue tout au long du développement.

L'IPPD reconnait que, dans beaucoup de projets complexes, les bons choix de méthodologie de gestion, d'approche de fabrication et de stratégie de test/vérification ne peuvent pas etre faits tant que le projet est encore en cours de réflexion ; les technologies à haut risque ou les algorithmes non éprouvés peuvent nécessiter une exploration par des démonstrateurs avant de savoir spécifier des exigences claires. C'est une technique de management combinant les activités essentielles d'acquisition via des équipes qualifiées pour optimiser les processus de design, de fabrication et de supportabilité, depuis le concept jusqu'au support post-production. L'IPPD facilite des membres multi-compétences travaillant ensemble via le concept d'IPT : représentants de toutes les disciplines fonctionnelles - ingénierie, fabrication, management, finance, achat, légal, sécurité - réunis avec un team leader pour identifier et résoudre les problèmes et prendre des décisions saines et opportunes. Piège : l'IPPD optimise à la fois le produit ET les processus (design, fabrication, support), là ou l'IPT vise d'abord la diversité des stakeholders ; l'IPPD s'appuie sur l'IPT comme brique de base.

Mots-clés EN IPT IPPD Stakeholder engagement Team leader
Points clés
  • IPT et IPPD répondent aux échecs des équipes waterfall cloisonnées par phase.
  • IPT = équipe transverse de stakeholders, diversité de points de vue de bout en bout.
  • IPPD = technique de management optimisant produit ET processus.
  • L'IPPD s'appuie sur le concept d'IPT comme brique de base.
  • La sécurité est l'une des disciplines représentées dans l'équipe.

2.7 Choisir une méthodologie : sécurité de bout en bout et arbitrage du risque

Choisir une méthodologie : comparaison des modèles SDLC
Figure 2.7 · Choisir une méthodologie : comparaison des modèles SDLC

Il n'existe pas de méthodologie universellement supérieure. Le choix doit etre basé sur les requirements de l'organisation : certains modèles conviennent mieux aux projets longs et complexes, d'autres aux projets courts. Une application peut nécessiter des activités spécifiques pour réussir, et l'organisation peut devoir respecter des standards ou processus imposés par son industrie ou par le gouvernement. Il est souvent judicieux de combiner plusieurs modèles pour développer correctement les exigences de facon cout-efficace. Point clé du manuel : ce n'est pas qu'un SDLC formalisé doive obligatoirement etre utilisé, mais bien que l'ensemble du processus de développement doit impliquer la sécurité. Le nombre et la nature des phases ne sont pas d'importance primordiale.

La règle universelle, valable dans tous les modèles : la sécurité doit etre incluse dès le début et maintenue jusqu'à la fin - non seulement du processus de développement, mais jusqu'à la fin du life cycle complet du système. La meilleure sécurité est toujours celle qui est concue dans le système, pas celle ajoutée après coup.

Les industries changent fréquemment d'avis sur leurs besoins de développement les plus urgents : parfois de la nouvelle fonctionnalité plusieurs fois par jour, parfois l'accent sur la sécurité, la sureté ou l'auditabilité. Le choix de méthodologie peut etre dicté par la perception qu'a le management d'une fenetre d'avantage concurrentiel ou, à l'inverse, d'une fenetre de risque/responsabilité accentuée - plus que par d'autres principes. Le professionnel de sécurité doit garder une sensibilité à ces glissements d'emphase incessants. Piège d'examen : la question 'quand impliquer la sécurité ?' a pour réponse 'immédiatement, dès le début' - jamais après l'initiation, le codage ou la définition des critères de test.

Mots-clés EN Requirements-based selection Security from start to end Competitive window Designed in
Points clés
  • Aucune méthode n'est universellement meilleure ; choisir selon les requirements.
  • Combiner plusieurs modèles est souvent le choix cout-efficace.
  • L'essentiel n'est pas le SDLC formel, mais que le process implique la sécurité.
  • Sécurité du début à la fin du life cycle complet ; concue dedans, pas ajoutée.
  • Le choix est souvent dicté par l'arbitrage fenetre concurrentielle vs risque/liability.

Cas d'étude

Cas · Cas d'étude

La checklist de sécurité d'initiation de projet de Jens

Contexte : Jens a créé une checklist initiale pour identifier les considérations les plus importantes afin que HelloWorld traite ses exigences de sécurité dès la phase de project initiation. La liste comprend : information à valeur ou sensibilité exceptionnelle nécessitant une protection spéciale ? propriété intellectuelle (IP) ou fonctionnalité propriétaire à protéger et à séparer des données traitées ? données de faible valeur mais output de plus grande valeur ? owner identifié ayant déterminé la valeur de l'information ? exigences légales, réglementaires ou de compliance particulières ? classifications/catégorisations selon le système de classification des actifs ? exposition d'information sensible lors de l'exploitation ? controles spéciaux sur les affichages/rapports de sortie ? données traitées/stockées/transmises via des réseaux publics ou non fiables ? zones physiquement controlées requises ? systèmes interconnectés considérés comme surs ? impact sur les opérations et la culture de l'organisation ? besoin de continuité d'activité ? système examiné sous l'angle du Business Impact Analysis (BIA) ? La liste n'est qu'un point de départ, et l'équipe sollicite votre avis.

Question : Comment répondriez-vous à Jens ? La checklist est-elle complète, et quelle(s) question(s) supplémentaire(s) ajouteriez-vous concernant les exigences de sécurité de l'organisation ?

Topics traités Project initiationSecurity checklistBIAClassification des actifs
Voir l'analyse et la correction

La checklist de Jens est un bon point de départ : elle couvre la valeur/sensibilité de l'information, l'IP, le rattachement à un owner, le cadre légal/réglementaire, la classification, l'exposition sur réseaux publics, les zones physiques, les interconnexions, et l'ancrage dans le BIA. Mais une checklist d'initiation reste un échantillon ; on peut l'enrichir. Questions supplémentaires pertinentes : quelles sont les exigences de privacy et de protection des données personnelles applicables (RGPD, etc.) et le système traite-t-il des données à caractère personnel ? quel niveau d'assurance d'authentification et d'access control sera requis ? quelles sont les contraintes de retention et de destruction sécurisée des données ? le système devra-t-il interagir avec des tiers/fournisseurs et quel est leur niveau de sécurité (supply chain) ? quelles sont les exigences de logging, d'audit et de traceabilité pour la conformité ? L'important est que ces questions soient posées dès l'initiation, en parallèle des activités de projet, car comprendre les security requirements commence ici - et les ajouter plus tard coute beaucoup plus cher.

À retenir : Une checklist d'initiation n'est jamais exhaustive : c'est un outil pour faire émerger les security requirements tot. Posez les questions de sécurité dès l'initiation, en parallèle du projet, plutot que de les découvrir après le codage.

Éléments d'apprentissage clés
  • Comprendre les security requirements commence dès l'initiation.
  • La checklist couvre valeur/IP/owner/légal/classification/réseaux/BIA.
  • Toujours l'enrichir : privacy, access control, retention, supply chain, audit.
  • Activités de sécurité en parallèle de chaque phase, pas après.
Cas · Cas d'étude

Le drone Waxbill de MLZ Systems : quelle méthodologie ?

Contexte : Schneider-Antman, chef de projet, conseille MLZ Systems sur la méthodologie à adopter pour le développement du logiciel de vol de leur nouveau drone (UAV) Waxbill. MLZ a une longue expérience du waterfall sur ses programmes embarqués à haute fiabilité. La direction hésite : faut-il rester en waterfall, ou passer à une approche plus rapide (Agile/DevOps) pour tenir une fenetre concurrentielle serrée face à un concurrent ?

Question : Quelles sont les forces et faiblesses du waterfall pour le Waxbill ? Quelles alternatives envisager, et que recommandez-vous ?

Topics traités WaterfallSpiralChoix de méthodologieSystèmes haute fiabilité
Voir l'analyse et la correction

Forces du waterfall pour un UAV : l'approche front-loaded, intensive en analyse et en test, convient aux systèmes de vol à haute fiabilité ou la sureté est critique ; chaque phase est complétée et testée avant la suivante, ce qui laisse le temps de traiter les nonfunctional requirements (safety, fiabilité) et d'organiser une acceptance rigoureuse (IV&V, SV&V, OT&E). Faiblesses : rigidité face aux changements d'exigences ; détection tardive et couteuse des erreurs ; difficulté à coper avec les nonfunctional/emerging properties ; risque qu'une fenetre concurrentielle se referme avant la livraison. Alternatives : le Spiral apporte une revue de risque PDCA à chaque phase et un point de décision continuer/annuler, utile pour un système à risque ; un modèle itératif avec change control permet de raffiner les exigences ; Agile/DevOps livrerait plus vite mais pas plus sécurisé par défaut, ce qui est risqué pour un système de vol. Recommandation : pour un UAV ou la sureté prime, conserver une ossature waterfall ou spiral plutot que basculer brutalement. Surtout, utiliser la méthode que l'équipe maitrise déjà réduit le risque ; changer de méthode en cours ajoute de la complexité et du risque. Si la vitesse est imposée, intégrer la sécurité via un DevSecOps discipliné plutot qu'un DevOps pur.

À retenir : Utiliser la méthode que l'équipe maitrise réduit le risque ; changer de méthodologie ajoute complexité et risque. Pour un système à sureté critique, privilégier waterfall/spiral et, si la vitesse s'impose, DevSecOps plutot que DevOps pur.

Éléments d'apprentissage clés
  • Le waterfall front-loaded convient aux systèmes haute fiabilité/sureté.
  • Ses faiblesses : rigidité, détection tardive, fenetre concurrentielle.
  • Spiral/itératif comme alternatives plus souples avec gestion du risque.
  • Utiliser la méthode maitrisée par l'équipe réduit le risque ; changer l'augmente.
Piège d'examen

DevOps vs DevSecOps

DevOps vise la livraison rapide et continue ; la sécurité y est souvent reléguée et déléguée à d'autres processus. DevSecOps intègre la sécurité à chaque étape via le shift-left, en déplacant les security requirements vers l'amont du cycle. Si l'énoncé oppose 'rapide mais sécurité ailleurs' à 'sécurité intégrée tot et partout', la seconde décrit DevSecOps (officiel Q8).

Piège d'examen

Waterfall vs V-shaped vs Iterative vs Agile

Waterfall = phases en série, chacune complétée ET testée avant de passer à la suivante (Q3). V-shaped associe à chaque phase de développement une phase de test miroir. Iterative permet des raffinements successifs des exigences/design/code via un change control. Agile livre par petits incréments collaboratifs (Scrum/sprint) en acceptant le changement. La marque du waterfall dans une question : 'chaque phase est terminée avant la suivante'.

Piège d'examen

Spiral = waterfall imbriqué avec PDCA et revue de risque

Le Spiral n'est pas un simple modèle itératif : c'est une version imbriquée (nested) du waterfall ou chaque phase est conduite en waterfall, augmentée de quatre sous-étapes PDCA (Plan, Do, Check, Act). Son trait distinctif est la risk assessment review (le Check) à chaque phase, avec révision des couts/calendriers et un point de décision continuer/annuler. Si une question évoque 'revue de risque et PDCA à chaque tour', c'est le Spiral.

Point de contrôle — Checkpoint

  1. Quand la sécurité doit-elle etre impliquée dans le software development life cycle ?

    • A Une fois tous les besoins métier planifiés et approuvés, après l'initiation du projet.
    • B Après le codage du coeur du logiciel, l'équipe sécurité évalue les manques et risques.
    • C Immédiatement dès le début, pour intégrer la sécurité dans le design et l'implémentation.
    • D Après que l'équipe de développement a défini les critères de test.
    Réponse & justification

    Réponse : C — Immédiatement dès le début, pour intégrer la sécurité dans le design et l'implémentation.

    C est correct : la sécurité doit etre impliquée immédiatement dès le début pour etre intégrée dans le design et l'implémentation. Ajouter la sécurité plus tard est couteux et difficile (effet de cascade, nouvelle phase de test). A, B et D placent tous la sécurité trop tard - après l'initiation, après le codage ou après la définition des critères de test - ce qui contredit le principe 'security designed in, not added later'.

  2. Quelle caractéristique identifie le modèle waterfall ?

    • A Chaque phase est complétée et testée avant que la suivante ne commence.
    • B Chaque phase de développement est associée à une phase de test miroir.
    • C Les exigences sont raffinées en continu via un change control.
    • D Le logiciel est livré par petits incréments collaboratifs successifs.
    Réponse & justification

    Réponse : A — Chaque phase est complétée et testée avant que la suivante ne commence.

    A est correct : le waterfall est une approche par phases en série ou chacune est complétée (et testée) avant la suivante, bornée par un milestone de décision. B décrit le V-shaped. C décrit l'itératif. D décrit l'Agile. La marque distinctive du waterfall est l'achèvement complet d'une phase avant de passer à la suivante.

  3. Quelle affirmation distingue correctement DevOps de DevSecOps ?

    • A DevOps intègre la sécurité à chaque étape ; DevSecOps priorise la vitesse.
    • B DevOps priorise la livraison rapide et délègue la sécurité ; DevSecOps intègre la sécurité à chaque étape (shift-left).
    • C DevOps et DevSecOps sont identiques, seul le nom change.
    • D DevSecOps supprime la phase de monitoring présente dans DevOps.
    Réponse & justification

    Réponse : B — DevOps priorise la livraison rapide et délègue la sécurité ; DevSecOps intègre la sécurité à chaque étape (shift-left).

    B est correct : DevOps privilégie la livraison rapide de nouvelles versions et relègue/délègue la sécurité à d'autres processus, tandis que DevSecOps intègre les activités de sécurité à chaque étape en déplacant le levier vers la gauche (shift-left). A inverse les deux. C est faux : la différence est substantielle, pas cosmétique. D est faux : DevSecOps conserve le monitoring et y ajoute de la sécurité.

  4. Qu'est-ce qui distingue le Spiral method du waterfall classique ?

    • A Il supprime toute phase de test pour gagner du temps.
    • B C'est un waterfall imbriqué ajoutant des sous-étapes PDCA et une revue de risque à chaque phase.
    • C Il interdit toute itération et fige les exigences dès le départ.
    • D Il livre du logiciel plusieurs fois par jour comme Agile.
    Réponse & justification

    Réponse : B — C'est un waterfall imbriqué ajoutant des sous-étapes PDCA et une revue de risque à chaque phase.

    B est correct : le Spiral est une version imbriquée du waterfall ou chaque phase est conduite en waterfall, augmentée de quatre sous-étapes basées sur le cycle de Deming PDCA (Plan, Do, Check, Act), avec une risk assessment review et un point de décision continuer/annuler à chaque phase. A est faux (le Spiral ajoute de l'analyse de risque, il ne retire pas le test). C décrit le waterfall strict. D décrit DevOps/Agile.

Points essentiels à retenir

  • 'Le SDLC' désigne le waterfall classique ; il finit à la mise en production, le SLC continue avec O&M et decommissioning.
  • La sécurité s'exécute en parallèle de chaque phase ; IV&V/SV&V/OT&E structurent l'acceptance.
  • Spiral = waterfall imbriqué + PDCA + revue de risque ; Cleanroom = defect prevention.
  • DevOps = vitesse, sécurité déléguée ; DevSecOps = sécurité à chaque étape via shift-left.
  • IPT = équipe transverse de stakeholders ; IPPD optimise produit ET processus et s'appuie sur l'IPT.
  • Le choix de méthode dépend des requirements et de l'arbitrage fenetre concurrentielle vs risque ; la sécurité doit etre concue dedans, du début à la fin.
Module 3 Objectif 8.1 70 min Intermédiaire

Modèles de maturité & gouvernance

Prérequis : Modules 1-2.

Un modèle de maturité est une façon formalisée de mesurer la fiabilité, la répétabilité et la qualité d'un ensemble de processus métier. Il condense des décennies de leçons de quality management issues de nombreuses industries. Appliqué au développement logiciel sécurisé, il permet à une organisation de comprendre ses processus actuels, d'évaluer ses opportunités d'amélioration et de fixer des cibles chiffrées avec un plan et un calendrier. Ce module couvre le Capability Maturity Model for Software (SW-CMM) du SEI et ses cinq niveaux, puis les modèles centrés sur la sécurité applicative : SAMM (OWASP) et BSIMM, en distinguant approche prescriptive et approche descriptive.

Objectifs pédagogiques

  • Restituer les cinq niveaux du SW-CMM dans l'ordre exact et leurs caractéristiques.
  • Classer une organisation au bon niveau de maturité d'après une description de ses pratiques.
  • Décrire la structure de SAMM (quatre fonctions cœur, pratiques, trois niveaux).
  • Distinguer SAMM (prescriptif) de BSIMM (descriptif) et situer CMMI.

Critères de réussite

  • Vous ordonnez 1 Initial, 2 Repeatable, 3 Defined, 4 Managed, 5 Optimizing sans inverser Defined et Managed.
  • Vous reliez Managed aux mesures quantitatives et Optimizing à l'amélioration continue.
  • Vous nommez les quatre fonctions de SAMM et tranchez SAMM vs BSIMM.

3.1 Le SW-CMM et ses cinq niveaux

Pyramide des cinq niveaux du SW-CMM, de Initial à Optimizing
Figure 3.1 · Les 5 niveaux du SW-CMM

Le Capability Maturity Model for Software (SW-CMM) a été publié par le Software Engineering Institute (SEI) en 1991. Bien que le développement logiciel ait beaucoup évolué depuis, le modèle reste utile : il permet à une organisation de mesurer sa capacité de développement actuelle et de formuler un plan d'amélioration. Le CMM est centré sur les processus de quality management et décrit un chemin évolutif qui va de processus chaotiques et non structurés vers des processus matures, disciplinés et optimisés. Chaque pas le long de ce parcours doit produire un logiciel meilleur, plus rapide et moins coûteux, où « meilleur » recouvre toute mesure de qualité choisie par la direction, y compris les caractéristiques de sécurité et de safety.

Les cinq niveaux s'enchaînent dans un ordre strict. Level 1 Initial : les bonnes pratiques peuvent être répétées mais restent ad hoc, chaotiques ; le succès dépend des individus. Level 2 Repeatable : les meilleures pratiques sont répétables et transférables rapidement entre les groupes de l'organisation, car elles sont définies de façon à franchir les frontières de projet ; c'est le niveau du basic project management. Level 3 Defined : les processus standard sont formalisés, tout nouveau développement suit des processus stricts et standardisés, bien compris et proactifs. Level 4 Managed : des objectifs quantitatifs et mesurables sont établis pour les tâches, des mesures chiffrées sont calculées et maintenues comme baseline, ce qui réduit les écarts par rapport aux objectifs. Level 5 Optimizing : les pratiques sont continuellement améliorées et optimisées, le feedback d'une phase impacte positivement les autres ; c'est le focus continuous improvement.

Piège d'examen : ne pas inverser Defined (niveau 3, processus standardisés et documentés) et Managed (niveau 4, mesures quantitatives). Retenez la progression mémotechnique « chaotique vers optimisé » et le couple distinctif Managed = on mesure, Optimizing = on améliore en continu.

Mots-clés EN SW-CMM SEI Managed Optimizing quality management
Points clés
  • SW-CMM : SEI, 1991, cinq niveaux, du chaotique à l'optimisé.
  • Ordre : 1 Initial, 2 Repeatable, 3 Defined, 4 Managed, 5 Optimizing.
  • Level 1 Initial = ad hoc, succès dépendant des individus.
  • Level 4 Managed = mesures quantitatives ; Level 5 Optimizing = amélioration continue.
  • Ne pas inverser Defined (3) et Managed (4).

3.2 SAMM, BSIMM et CMMI

Les 4 fonctions cœur de OWASP SAMM
Figure 3.2 · Les 4 fonctions cœur de OWASP SAMM

Le Software Assurance Maturity Model (SAMM) est porté par l'OWASP. Développé à la fin des années 2000, c'est un open framework qui aide une organisation de toute taille à formuler et mettre en oeuvre une stratégie de sécurité applicative. Une organisation l'utilise pour évaluer ses pratiques de sécurité logicielle existantes ou pour construire un programme de sécurité par itérations successives. SAMM repose sur quatre fonctions cœur : Governance, Construction, Verification et Operation. Ces fonctions couvrent un large spectre d'activités : product management, recueil des exigences, architecture et design, quality assurance, déploiement et exploitation en production. Chaque fonction se décline en plusieurs security practices, et chaque pratique est découpée en trois niveaux de maturité, du niveau le plus bas (pratique non remplie) au plus haut (maîtrise complète de la pratique).

Le BSIMM (Building Security In Maturity Model) joue un rôle complémentaire mais d'une autre nature. C'est un modèle descriptif, observationnel : il décrit ce que des firmes réelles font effectivement en matière de sécurité logicielle, en mesurant les activités observées sur le terrain. SAMM, à l'inverse, est prescriptif : il recommande ce qu'une organisation devrait faire pour progresser. Le piège est de confondre les deux logiques : SAMM dit « voici comment vous améliorer », BSIMM dit « voici ce que font les autres ». On compare souvent son score BSIMM à un benchmark sectoriel ; on suit son parcours SAMM comme une feuille de route.

Enfin, CMMI (Capability Maturity Model Integration) est le successeur générique du SW-CMM. Là où le SW-CMM ciblait spécifiquement le développement logiciel, CMMI généralise et intègre la démarche de maturité à d'autres domaines (services, gestion, acquisition). Pour l'examen, retenez la filiation SW-CMM (1991, logiciel) puis CMMI (modèle intégré plus large), et la distinction SAMM/BSIMM plutôt que les détails internes de CMMI.

Mots-clés EN SAMM BSIMM core functions open framework CMMI
Points clés
  • SAMM : OWASP, open framework, fin des années 2000.
  • SAMM = 4 fonctions cœur : Governance, Construction, Verification, Operation.
  • Chaque pratique SAMM a 3 niveaux de maturité (non remplie vers maîtrise).
  • BSIMM = descriptif (observe les firmes réelles) ; SAMM = prescriptif.
  • CMMI = successeur générique et intégré du SW-CMM.

Cas d'étude

Cas · Cas d'étude

À quel niveau CMM se situe cette équipe ?

Contexte : Une organisation évalue la maturité de son développement sécurisé. Une équipe livre régulièrement du code de qualité : elle applique de bonnes pratiques de revue et de tests, et obtient de bons résultats. Mais ces pratiques ne sont nulle part documentées, ne sont pas formalisées en processus standard, et dépendent entièrement de quelques individus expérimentés. Quand ces personnes sont absentes, la qualité s'effondre. Aucune mesure chiffrée n'est collectée.

Question : À quel niveau du SW-CMM cette équipe se situe-t-elle, et pourquoi pas un niveau supérieur ?

Topics traités SW-CMM Level 1 Initialrépétabilité et transfert de processusdépendance aux individus
Voir l'analyse et la correction

L'équipe est au Level 1 Initial. Le marqueur décisif est que le succès dépend des individus et que les pratiques restent ad hoc, non documentées et non transférables. De bons résultats ne suffisent pas à monter de niveau : ce qui compte est la nature du processus, pas la qualité ponctuelle du livrable. L'équipe n'est pas au Level 2 Repeatable car ses pratiques ne sont pas définies de façon à être transférées entre groupes et projets ; elles ne survivent pas à l'absence des experts. Elle n'est pas au Level 3 Defined car rien n'est formalisé ni standardisé, ni au Level 4 Managed car aucune mesure quantitative n'est établie comme baseline. Pour passer au Level 2, l'organisation doit définir et documenter ces pratiques afin qu'elles franchissent les frontières de projet indépendamment des personnes.

À retenir : La maturité se juge sur le processus, pas sur la qualité d'un livrable isolé. Des pratiques dépendantes des individus et non documentées restent Level 1 Initial, même si les résultats sont bons.

Éléments d'apprentissage clés
  • Pratiques ad hoc, non documentées, dépendantes des personnes = Level 1 Initial.
  • Le passage au Level 2 Repeatable exige des processus définis et transférables.
  • La qualité du livrable ne détermine pas le niveau de maturité.
Piège d'examen

L'ordre des niveaux CMM (ne pas inverser Defined et Managed)

L'ordre exact est : 1 Initial, 2 Repeatable, 3 Defined, 4 Managed, 5 Optimizing. Le piège classique d'examen est d'intervertir Defined et Managed, ou de croire que la mesure vient avant la standardisation. Tranchez nettement : Defined (niveau 3) signifie processus standardisés et formalisés ; Managed (niveau 4) signifie mesures quantitatives et objectifs chiffrés ; Optimizing (niveau 5) signifie amélioration continue. Un autre indice de niveau 1 Initial : « ad hoc, chaotique, dépend des individus ».

Piège d'examen

SAMM (prescriptif) vs BSIMM (descriptif)

SAMM (OWASP) est prescriptif : c'est un open framework qui recommande ce qu'une organisation devrait faire pour bâtir et améliorer sa sécurité applicative, structuré en quatre fonctions cœur (Governance, Construction, Verification, Operation). BSIMM est descriptif : il est basé sur l'observation de firmes réelles et décrit ce qu'elles font effectivement, servant de benchmark. Si la question parle d'un modèle « observationnel » ou de « comparaison à ce que font les pairs », c'est BSIMM. Si elle parle d'une « feuille de route » ou d'un « cadre pour formuler une stratégie », c'est SAMM.

Point de contrôle — Checkpoint

  1. Une organisation a établi des objectifs quantitatifs mesurables pour ses tâches de développement, calcule et maintient ces mesures comme baseline, et réduit les écarts par rapport aux objectifs. À quel niveau du SW-CMM se situe-t-elle ?

    • A Level 3 Defined
    • B Level 4 Managed
    • C Level 5 Optimizing
    • D Level 2 Repeatable
    Réponse & justification

    Réponse : B — Level 4 Managed

    Les mesures quantitatives établies comme baseline caractérisent le Level 4 Managed. Defined (3) est la formalisation/standardisation des processus, sans mesure chiffrée. Optimizing (5) ajoute l'amélioration continue par-dessus la mesure. Repeatable (2) ne concerne que la répétabilité et le transfert des pratiques.

  2. Quelles sont les quatre fonctions cœur de l'OWASP SAMM ?

    • A Plan, Do, Check, Act
    • B Governance, Construction, Verification, Operation
    • C Initial, Repeatable, Defined, Managed
    • D Identify, Protect, Detect, Respond
    Réponse & justification

    Réponse : B — Governance, Construction, Verification, Operation

    SAMM s'articule en quatre fonctions cœur : Governance, Construction, Verification, Operation, chacune déclinée en pratiques sur trois niveaux de maturité. Plan/Do/Check/Act est le cycle de Deming. Initial/Repeatable/Defined/Managed sont des niveaux du SW-CMM. Identify/Protect/Detect/Respond évoque les fonctions du NIST CSF.

  3. Un RSSI veut comparer le niveau de sécurité de son organisation à ce que font réellement d'autres firmes du secteur, à partir d'activités observées. Quel modèle est descriptif et adapté à cette comparaison ?

    • A SAMM, car il est prescriptif
    • B BSIMM, car il est descriptif et observationnel
    • C SW-CMM, car il a cinq niveaux
    • D CMMI, car il est générique
    Réponse & justification

    Réponse : B — BSIMM, car il est descriptif et observationnel

    BSIMM est descriptif et observationnel : il mesure ce que des firmes réelles font, ce qui en fait un benchmark sectoriel. SAMM est prescriptif (il dit quoi faire), donc inadapté à une comparaison observationnelle. SW-CMM mesure la maturité des processus génériques mais n'est pas un benchmark inter-firmes de sécurité. CMMI est le successeur intégré du SW-CMM, pas un modèle observationnel de pairs.

Points essentiels à retenir

  • Un modèle de maturité mesure et structure l'amélioration des processus, du chaotique vers l'optimisé.
  • SW-CMM (SEI, 1991) : 1 Initial, 2 Repeatable, 3 Defined, 4 Managed, 5 Optimizing.
  • Managed = mesures quantitatives ; Optimizing = amélioration continue ; ne pas inverser Defined et Managed.
  • Des pratiques non documentées et dépendantes des individus restent Level 1 Initial.
  • SAMM (OWASP) prescriptif, 4 fonctions cœur ; BSIMM descriptif et observationnel ; CMMI successeur générique du SW-CMM.
Module 4 Objectif 8.2 130 min Intermédiaire

Écosystèmes de développement

Prérequis : Modules 1-3.

L'écosystème de développement regroupe tout ce qui entoure l'écriture du code : langages et chaîne de traduction, librairies et reuse, outils et IDE, environnements d'exécution, tests de sécurité applicative, contrôles de bases de données et gestion de configuration. La plupart des organisations s'appuient massivement sur des composants tiers (libraries, frameworks) : c'est un gain de temps mais une source de risque quand on hérite des erreurs des autres. Ce module couvre les implications de sécurité de la gestion du développement, du déploiement et du support : maturité des tool sets, risques et bénéfices des code repositories, valeur des IDE, outils SAST/DAST/IAST/RASP, séparation des environnements, support OS/matériel (TCB, reference monitor, security kernel), contrôles DBMS et configuration management avec CI/CD.

Objectifs pédagogiques

  • Distinguer langages compilés, interprétés et intermediate code, et situer Assembly comme niveau le plus bas.
  • Classer les types de librairies et arbitrer le software reuse entre risque et gain de temps.
  • Différencier SAST, DAST, IAST et RASP et savoir quand chacun s'applique.
  • Justifier la séparation development/QA/production et la dangerosité des blended environments.
  • Expliquer TCB, reference monitor et security kernel avec les trois exigences du kernel.
  • Décrire les contrôles DBMS (locks, deadlock, views, grant/revoke, OLTP) et la configuration management avec CI/CD.

Critères de réussite

  • Vous identifiez Assembly comme le langage le plus bas (un énoncé = une instruction).
  • Vous tranchez SAST (statique, code source, tôt) vs DAST (dynamique, application en exécution, fuzz).
  • Vous distinguez CI (intégration et tests fréquents dans le repo) de CD (déploiement en production).
  • Vous citez les trois exigences du security kernel : completeness, isolation, verifiability.

4.1 Langages, traduction, librairies et IDE

Générations de langages et traduction
Figure 4.1 · Générations de langages et traduction

Un programme écrit en langage source doit être traduit en instructions exécutables par la machine. On distingue les langages compilés (traduits intégralement en code machine avant exécution par un compiler) des langages interprétés (traduits ligne à ligne au moment de l'exécution par un interpreter). Entre les deux, certaines plateformes produisent un intermediate code : le code source Java est compilé en bytecode, puis exécuté par la machine virtuelle. Le repère de niveau utile à l'examen est l'échelle des générations : l'Assembly (langage de bas niveau, traité par un assembler) est le plus proche de la machine, où un énoncé correspond à une seule instruction processeur ; les langages de plus haut niveau (compilés ou interprétés) traduisent un seul énoncé en plusieurs instructions machine.

Une software library est un repository de code préécrit : classes, procédures, scripts et autres éléments programmatiques que le développeur appelle plutôt que de les réécrire. Il existe une hiérarchie de librairies : librairies de l'OS et du matériel (fournies par le vendor, mises à jour signées numériquement), librairies du langage de programmation (fournies par l'IDE ou les tool sets), development frameworks (comme .NET), librairies in-house, project-specific ou customer-specific (code éprouvé moissonné dans les projets internes), et librairies third-party open-source. Ces dernières vont de sources réputées à du code de pedigree incertain (blogs, forums) qu'il faut inspecter pour back doors, Trojans ou logic bombs avant tout reuse. Le software reuse échange du risque contre du temps : réutiliser trop vite sans inspection introduit une vulnérabilité exploitable ; inspecter à l'excès annule le gain de temps. Les junior programmers passent parfois plus de temps à chercher un snippet réutilisable qu'à écrire eux-mêmes un bon code.

Les programming tools (debuggers, build tools, source code editors, static code analysis tools, revision control, unit testing) sont souvent regroupés dans un IDE (Integrated Development Environment). Un IDE combine de nombreux outils dans un même environnement : il comprend typiquement un source code editor, des build automation tools et un debugger, et peut offrir un class browser, un object browser et un class hierarchy diagram pour le développement orienté objet. Les source code analysis tools cherchent les défauts de sécurité dans le code source (et parfois le code compilé) ; il est préférable de les utiliser dès les premières phases de développement pour corriger au plus près de l'introduction de l'erreur. Enfin, le sandbox protège l'exécution de mobile code : il limite mémoire et CPU et isole le code suspect. Dans le modèle Java, le Java security manager fait respecter les limites du sandbox ; les sandbox applets ne peuvent réaliser qu'un jeu d'opérations sûres, tandis que les privileged applets (signés par un certificat accepté par l'utilisateur) peuvent s'exécuter hors du sandbox avec un accès étendu au client.

Mots-clés EN compiler vs interpreter intermediate code Assembly software library software reuse IDE Java security manager
Points clés
  • Compilé = traduit avant exécution ; interprété = ligne à ligne à l'exécution.
  • Intermediate code : source Java vers bytecode exécuté par la JVM.
  • Assembly = langage le plus bas, un énoncé = une instruction machine.
  • Librairies : OS/matériel, langage, frameworks, in-house, third-party open-source.
  • Software reuse : inspecter les sources incertaines (back doors, Trojans, logic bombs) avant.
  • IDE = source code editor + build automation + debugger (+ class browser en OO).
  • Sandbox applets = opérations sûres ; privileged applets signés = hors sandbox.

4.2 Tests de sécurité applicative : SAST, DAST, IAST, RASP

Comparaison SAST (analyse statique du code source) et DAST (test dynamique de l'application en exécution)
Figure 4.2 · SAST vs DAST

Plusieurs approches d'analyse de sécurité applicative coexistent et se complètent. Le SAST (Static Application Security Testing) analyse le code source sans l'exécuter : il recherche les erreurs de programmation courantes, la conformité aux guidelines et templates, et les sources d'erreurs visibles dans le source. Comme il n'exécute pas le code, le qualifier de « security testing » est un léger abus de langage ; en revanche il est facile à déployer, passe bien à l'échelle, se lance tôt dans le cycle d'écriture et aide même au refactoring. Le DAST (Dynamic Application Security Testing) fait l'inverse : il exécute l'unité, le module ou l'application complète et injecte une variété de tests pour pousser le code au-delà de ses limites. C'est l'approche dite fuzz testing, qui lance des dizaines de milliers de cas de test contre l'application, là où le test manuel n'en couvrait que quelques-uns.

Le IAST (Interactive Application Security Testing) est une approche hybride : il amène le test aux applications web et mobiles, là où SAST et DAST peinent. Le IAST fonctionne avec des agents incorporés dans le logiciel testé, ce qui permet au moteur d'inspecter la logique de l'application jusque dans les library routines qu'elle appelle, en vérifiant leur usage correct. Sa limite est la couverture des applications serverless utilisant des interfaces non-HTTP. Le RASP (Runtime Application Security Protection) est davantage un outil de protection : ses agents et son instrumentation dans le code peuvent terminer l'exécution si une violation de sécurité potentielle est détectée pendant le test.

Ces outils ont des limites communes : beaucoup de vulnérabilités (problèmes d'authentication, d'access control, usage incorrect de la cryptographie) sont difficiles à trouver automatiquement ; les taux de false positives sont élevés (utiles pour affiner les outils) ; les problèmes de configuration échappent souvent à l'analyse car ils ne sont pas représentés dans le code ; et le code qui ne peut être compilé est difficile à analyser. Le piège d'examen est la paire SAST/DAST : SAST est statique, lit le code source, se place tôt dans le cycle (shift-left) ; DAST est dynamique, teste l'application en exécution par fuzz testing.

Mots-clés EN SAST DAST IAST RASP fuzz testing false positives
Points clés
  • SAST = statique, code source, sans exécution, tôt dans le cycle.
  • DAST = dynamique, application en exécution, fuzz testing (milliers de cas).
  • IAST = hybride, agents incorporés, inspecte jusqu'aux library routines.
  • RASP = protection runtime, peut terminer l'exécution sur violation.
  • Limites : authentication/access control/crypto et config difficiles à détecter, false positives élevés.

4.3 Séparation et contrôle des environnements

Séparation dev / QA / production
Figure 4.3 · Séparation dev / QA / production

Le développement logiciel s'appuie sur trois environnements clés : l'environnement de development (où analystes et programmeurs écrivent, compilent et testent initialement l'application), l'environnement de quality assurance (QA, où utilisateurs et équipe qualité réalisent les functional tests, idéalement sur une configuration simulant la production au plus près) et l'environnement de production. D'autres environnements existent (test, staging), mais l'enjeu de sécurité est identique : contrôler comment chaque environnement accède à l'application et aux données, puis maintenir les environnements séparés et isolés. Les personnes travaillant dans un environnement doivent être restreintes à celui-ci : il est généralement admis qu'un développeur ne doit jamais avoir accès à la production. Les blended environments combinent un ou plusieurs de ces environnements individuels et sont les plus difficiles à contrôler, donc risqués.

Les mesures de protection classiques sont l'isolation physique de chaque environnement, la séparation physique ou temporelle des données, des access control lists, des content-dependent access controls, des role-based constraints, l'accountability et la separation of duties. La virtualisation généralise cette isolation : on définit des environnements virtuels contenant le bon mélange de virtual machines (avec OS, plateformes applicatives et supports) pour chaque configuration testée. Tout cela n'est que l'application du least privilege à la sécurité du processus de développement, première étape indispensable vers un logiciel plus sûr.

Pour exécuter un programme, il faut un runtime system : l'ensemble des composants matériels et logiciels permettant à une application de tourner, quel que soit le langage. Tout langage a un runtime system, qu'il soit compilé, interprété ou invoqué via API. Le JRE (Java Runtime Environment) en est l'exemple : il comprend la JVM (Java virtual machine), les classes cœur de la plateforme et les librairies de support nécessaires pour exécuter un programme Java. Le runtime system est aussi la passerelle par laquelle le programme interagit avec le runtime environment, qui détient les valeurs d'état accessibles pendant l'exécution. Enfin, la sécurité des code repositories est un asset à protéger comme un autre : combinaison de contrôles d'accès logiques et physiques, plus protection de l'intégrité et de la disponibilité du contenu. L'offshoring du développement complique cette protection, car le code et l'environnement peuvent échapper à l'inspection directe de l'entreprise.

Mots-clés EN development / QA / production blended environment separation of duties runtime system JRE / JVM code repository
Points clés
  • Trois environnements : development, QA, production, à garder séparés.
  • QA doit simuler la production au plus près pour les functional tests.
  • Blended environment = le plus difficile à contrôler, donc risqué.
  • Séparation = least privilege ; le développeur n'accède jamais à la production.
  • JRE = JVM + classes cœur + librairies de support pour exécuter Java.
  • Code repository = asset protégé par contrôles logiques et physiques.

4.4 Déploiement plus sûr : TCB, reference monitor, security kernel

TCB, reference monitor et security kernel
Figure 4.4 · TCB, reference monitor et security kernel

La phase de déploiement offre des leviers de sécurité via le bon choix de matériel, d'OS et de configuration. Au cœur de cette sécurité se trouve la Trusted Computing Base (TCB) : l'ensemble des composants hardware, software et firmware d'une architecture responsables du support de la security policy et de l'isolation des objets. Quand elle est conçue et codée correctement, toutes les fonctions de sécurité du système forment la TCB. Celle-ci peut contenir des trusted paths (canaux de communication sûrs entre l'utilisateur ou le programme et la TCB, que la TCB protège de toute compromission) et des trusted shells (tout ce qui se passe dans le shell reste confiné à ce canal).

Le reference monitor est l'élément qui fait respecter la sécurité entre les subjects (utilisateurs) et les objects (données ou ressources). C'est une machine abstraite qui médie, ou contrôle, tous les accès des subjects aux objects, garantissant que tout subject tentant d'accéder à un object dispose des droits appropriés. Le reference monitor est un concept ; son implémentation concrète est le security kernel. Le security kernel est constitué de tous les composants de la TCB (software, hardware, firmware) et implémente le mécanisme du reference monitor ainsi que la security policy. Dans une architecture en couches, le kernel se situe au niveau le plus bas et primitif : c'est la petite portion de l'OS par laquelle passent toutes les références à l'information et tous les changements d'autorisation.

Pour être implémenté correctement, le security kernel doit satisfaire trois exigences fondamentales : completeness (tout accès à l'information doit passer par le kernel), isolation (le kernel doit être protégé de tout accès non autorisé) et verifiability (le kernel doit être prouvé conforme à ses spécifications de design). Pour mesurer la confiance dans les capacités de sécurité de la TCB, on recourt à des evaluation criteria comme le TCSEC (Trusted Computer System Evaluation Criteria) et les Common Criteria actuels. Au-dessus de ce noyau viennent les approches cryptographiques : PKI (public key infrastructure) et signatures numériques, gestion des certificats et des clés, HSM (hardware security modules) pour le stockage robuste des clés, intégration avec l'access control et l'identity management. Une règle négative s'impose : ne jamais laisser développeurs ou administrateurs concevoir leurs propres solutions cryptographiques. Les politiques doivent aussi couvrir le shadow IT et le BYOx (bring your own everything), souvent portés par des citizen developers.

Mots-clés EN Trusted Computing Base (TCB) reference monitor security kernel completeness / isolation / verifiability TCSEC / Common Criteria HSM shadow IT / BYOx
Points clés
  • TCB = tous les composants HW/SW/firmware supportant la security policy.
  • Reference monitor = concept abstrait médiant l'accès subjects vers objects.
  • Security kernel = implémentation concrète du reference monitor, niveau le plus bas.
  • Kernel : trois exigences = completeness, isolation, verifiability.
  • Evaluation criteria : TCSEC et Common Criteria mesurent l'assurance.
  • Crypto : PKI, signatures, certificats, HSM ; ne pas coder sa propre crypto.
  • Inclure shadow IT et BYOx dans les politiques de sécurité.

4.5 Contrôles DBMS comme sécurité logicielle

Contrôles DBMS : locks, vues, OLTP
Figure 4.5 · Contrôles DBMS : locks, vues, OLTP

Le DBMS (database management system) fournit des contrôles de sécurité pour empêcher les accès non autorisés et les modifications inappropriées par des utilisateurs autorisés, sur la base de l'identification, de l'authentication, de l'authorization et de l'accountability. Le premier mécanisme est le lock control : le DBMS contrôle qui peut lire et écrire les données, en posant des verrous sur des rows ou des objects. Quand deux processus tentent d'accéder simultanément à une même ressource qui ne peut traiter qu'une requête à la fois sans casser l'intégrité, un deadlock peut survenir : le système ne peut libérer la ressource pour aucune des transactions et les refuse toutes deux. Pour l'éviter, le DBMS donne un write lock à une transaction (par exemple sur le dernier siège d'un vol) et met l'autre en file d'attente. Les locks peuvent être granulaires : par table, row, record ou même field.

D'autres contrôles d'accès DBMS complètent les locks. Le view-based access control divise logiquement la base : un trusted front end attribue à chaque type d'utilisateur une view qui masque les données sensibles non autorisées, avec une granularité possible sur les rows et les columns. Le grant and revoke gère les permissions : un utilisateur doté de la grant authority peut accorder des permissions à d'autres ; sans l'option grant, il ne peut pas transmettre cette autorité. La caractéristique de sécurité notable est l'effet cascade du revoke : révoquer les droits d'un utilisateur révoque aussi tous les droits qu'il avait lui-même accordés. La metadata sert aussi de gatekeeper : le data dictionary est un repository central d'informations sur les bases de l'entreprise (sensibilité, classification) ; il ne contrôle pas directement les accès mais éclaire la gestion du risque.

L'OLTP (Online Transaction Processing) gère un volume élevé de transactions en temps réel contre les bases, avec de nombreux utilisateurs concurrents (réservations aériennes, finance, retail). Il s'appuie sur les exigences de concurrency et d'atomicity du DBMS (le test ACID : atomicity, consistency, isolation, durability). L'OLTP agit comme un système de monitoring : il détecte l'abort d'un processus, le redémarre et annule une transaction si nécessaire. Deux features de sécurité importantes : le transaction log enregistre l'information d'une transaction avant traitement, puis la marque comme traitée ; en cas de panne, la transaction est récupérée et réappliquée via le log. Le checkpoint restart utilise les logs pour redémarrer la machine en rejouant jusqu'au dernier checkpoint (dernière bonne transaction connue), toutes les transactions suivantes étant réappliquées avant de rouvrir l'accès aux données.

Mots-clés EN lock control deadlock view-based access control grant / revoke data dictionary OLTP checkpoint restart
Points clés
  • Lock control : un seul utilisateur écrit une donnée à la fois (granularité table/row/field).
  • Deadlock : deux processus se bloquent sur une même ressource indivisible.
  • View-based access control : trusted front end masque les données sensibles.
  • Grant/revoke : sans option grant, pas de transmission ; revoke = effet cascade.
  • Data dictionary = metadata centrale (sensibilité, classification), pas un contrôle d'accès direct.
  • OLTP = transactions temps réel, ACID ; transaction log et checkpoint restart pour la reprise.

4.6 Configuration management, change management et CI/CD

Phases notionnelles du configuration management, de la demande de changement à la livraison
Figure 4.6 · Gestion de configuration (phases)

Le configuration management (CM) consiste à surveiller et gérer les changements apportés à un programme ou à sa documentation. Son but est de garantir l'intégrité du code, sa disponibilité et l'usage de la bonne version de chaque composant (code, design documents, documentation, control files). Le CM revoit chaque changement à travers quatre activités : identifying (identifier les changements), controlling (chaque changement passe par une documentation revue et approuvée par une personne autorisée, le change management ou RFC, request for change), accounting (enregistrer et reporter la configuration tout au long des procédures) et auditing (vérifier le changement et s'assurer qu'il n'affecte pas la security policy). Un CM plan définit les configuration items sous CM, leur nommage, comment ils entrent et sortent de l'ensemble contrôlé, comment un item peut changer et comment les outils CM appliquent ces règles. Dans un projet, le CM limite les changements au scope ; un CM défaillant mène au scope creep, où les exigences changent en continu et le projet ne se termine jamais.

Le Software Configuration Management (SCM) applique ces principes au code source : version control, branching et merging permettant à plusieurs équipes de travailler sans conflits, et builds stables. C'est l'outil approprié quand une organisation gère mal ses versions, contrairement à un simple document management system qui n'offre ni branching ni merging.

Le Continuous Integration (CI) et le Continuous Delivery (CD) automatisent et coordonnent les processus du pipeline, depuis l'écriture du code jusqu'à l'exécution du logiciel fini en production. Le pipeline enchaîne : codage d'un software unit, unit test, build et intégration des unités en sous-systèmes, puis en application complète, suivie d'autres tests, et enfin déploiement du build package. Le piège d'examen distingue les deux : la CI intègre et teste fréquemment le code dans le repository ; le CD déploie en production. Bien menés avec une forte implication de l'équipe sécurité, CI/CD sont des briques majeures d'une approche DevSecOps, rendant le change management plus seamless, auditable et applicable. Deux défis de sécurité : la chaîne CI/CD elle-même doit passer un security assessment, et elle peut alimenter la pression à livrer plus vite au détriment de la sécurité. Enfin, la granularité des contrôles doit adresser à la fois le programme et l'utilisateur : si un utilisateur ne peut accéder à un objet X mais dispose d'un programme qui le peut, les mécanismes de sécurité sont contournés (low granular system). La réponse est least privilege, separation of duties et limites d'accès raisonnables.

Mots-clés EN configuration management (CM) configuration items scope creep RFC / change management SCM CI vs CD granularity of controls
Points clés
  • CM = identify, control (RFC approuvée), account, audit des changements.
  • CM plan définit configuration items, nommage, règles de changement.
  • Mauvais CM = scope creep (exigences qui dérivent).
  • SCM = version control, branching, merging pour le code source.
  • CI = intègre et teste fréquemment dans le repository ; CD = déploie en production.
  • CI/CD = briques de DevSecOps ; la chaîne elle-même doit être security-assessed.
  • Granularité : adresser programme ET utilisateur, sinon contrôles contournés.

Cas d'étude

Cas · Cas d'étude

HelloWorld : maîtriser les versions du code

Contexte : HelloWorld grandit et gère mal les versions de son code : conflits et incohérences fréquents lors de la fusion des changements de plusieurs équipes, difficulté à tracer les changements et à maintenir des releases stables pour les clients. La direction propose quatre pistes : (1) mettre en place un système de Software Configuration Management (SCM), (2) utiliser un Document Management System (DMS) centralisé pour suivre tous les changements des développeurs, (3) s'appuyer sur des processus manuels et des dossiers réseau partagés pour le version control, (4) externaliser le version control et le merging à un prestataire spécialisé.

Question : Quelle approche Jens doit-il adopter pour améliorer le version control, fusionner le code efficacement et maintenir des releases stables, et comment répondre à chaque proposition ?

Topics traités Software Configuration Managementversion control, branching, mergingscope creep et change management
Voir l'analyse et la correction

L'option recommandée est le système SCM (option 1). Les systèmes de configuration management sont spécifiquement conçus pour gérer et tracer les changements dans les projets de développement : ils assurent le version control, indispensable pour gérer plusieurs versions et maintenir des builds stables, et facilitent le merging du code de différentes équipes en réduisant conflits et erreurs. Le DMS centralisé (option 2) est insuffisant : il aide à organiser la documentation mais ne dispose pas des features avancées du source code management, notamment le branching, le merging et le version control. Les processus manuels avec dossiers partagés (option 3) sont inefficaces et error prone pour une entreprise en croissance : ils ne gèrent ni le version control, ni le suivi précis des changements, ni le merge multi-équipes. L'externalisation à un tiers (option 4) peut apporter une expertise spécialisée mais reste peu pratique pour du développement continu : elle introduit une dépendance à un acteur externe sur un processus de développement cœur, avec des risques de perte de contrôle, de collaboration et de mises à jour tardives.

À retenir : Pour le version control, le branching et le merging multi-équipes, un système SCM est l'outil approprié. Un DMS, des processus manuels ou l'externalisation ne fournissent pas les contrôles de source code management nécessaires et introduisent des risques de contrôle ou de dépendance.

Éléments d'apprentissage clés
  • Un système SCM gère version control, branching, merging et builds stables.
  • Un DMS centralisé n'a pas de branching/merging : insuffisant pour le code.
  • Processus manuels et dossiers partagés : inefficaces et error prone.
  • Externaliser un processus de développement cœur crée dépendance et perte de contrôle.
Piège d'examen

SAST (statique) vs DAST (dynamique)

SAST est statique : il analyse le code source sans l'exécuter, cherche les erreurs de programmation et la conformité aux guidelines, et se place tôt dans le cycle d'écriture (shift-left), ce qui le rend facile à déployer et scalable. DAST est dynamique : il exécute l'application et y injecte des tests pour la pousser au-delà de ses limites, par fuzz testing (des dizaines de milliers de cas). Si la question parle de « code source », « sans exécution » ou « tôt dans le cycle », c'est SAST. Si elle parle d'« application en exécution », de « fuzz testing » ou d'« injection de tests », c'est DAST. Ne pas confondre non plus avec IAST (hybride, agents incorporés, web et mobile) et RASP (protection runtime qui peut terminer l'exécution sur violation).

Piège d'examen

CI (intégration) vs CD (déploiement)

Continuous Integration (CI) et Continuous Delivery (CD) ne désignent pas la même étape. CI intègre et teste fréquemment le code dans le repository : les développeurs poussent souvent leur code, qui est automatiquement construit et testé pour détecter tôt les conflits d'intégration. CD prend le relais en aval : il déploie le code vers la production (ou le rend déployable à tout moment). Le piège classique (quiz officiel Q9) est d'attribuer le déploiement en production à la CI : non, le déploiement relève du CD. Retenez : CI = intègre et teste dans le repo, CD = déploie en production. Le pipeline CI/CD coordonne et automatise toute la chaîne, de l'écriture du code au logiciel fini en exploitation.

Piège d'examen

Le langage le plus bas niveau = Assembly

Le langage le plus proche de la machine est l'Assembly (langage de bas niveau, deuxième génération), traité par un assembler : un énoncé y correspond à une seule instruction processeur. C'est la clé pour trancher le piège (quiz officiel Q5) : dans les langages de plus haut niveau, compilés (traduits intégralement avant exécution) comme interprétés (traduits ligne à ligne à l'exécution), un seul énoncé se traduit en plusieurs instructions machine. Si la question demande le langage « le plus bas niveau » ou celui où « une déclaration = une instruction », la réponse est Assembly, pas un langage compilé ou interprété. Ne pas confondre non plus l'intermediate code (Java bytecode), qui n'est ni source pur ni code machine pur.

Point de contrôle — Checkpoint

  1. Parmi les éléments suivants, lesquels peuvent être stockés dans un software repository ?

    • A Du code préécrit (prewritten code)
    • B Des scripts
    • C Des procédures
    • D Tout ce qui précède
    Réponse & justification

    Réponse : D — Tout ce qui précède

    Un software repository agit comme magasin central de code : un développeur y ajoute une librairie pour gagner en fonctionnalité ou automatiser un processus sans tout réécrire. Il contient du prewritten code, des scripts, des procedures, mais aussi des classes et autres éléments programmatiques. Aucune option seule n'est complète, donc la réponse est « tout ce qui précède ».

  2. Une équipe pousse fréquemment son code dans le repository, où il est automatiquement construit et testé pour détecter tôt les conflits, mais le déploiement en production relève d'une autre pratique. Comment nomme-t-on respectivement ces deux pratiques ?

    • A CD pour l'intégration, CI pour le déploiement
    • B CI pour l'intégration et les tests, CD pour le déploiement en production
    • C SAST pour l'intégration, DAST pour le déploiement
    • D SCM pour l'intégration, RFC pour le déploiement
    Réponse & justification

    Réponse : B — CI pour l'intégration et les tests, CD pour le déploiement en production

    La Continuous Integration (CI) intègre et teste fréquemment le code dans le repository ; le Continuous Delivery (CD) déploie en production. L'option 1 inverse les deux. SAST/DAST sont des techniques de test de sécurité, pas le pipeline CI/CD. SCM est le système de gestion de configuration logicielle et RFC une demande de changement, sans rapport avec cette dichotomie.

  3. Quel langage est le plus proche de la machine, où un énoncé correspond à une seule instruction processeur ?

    • A Un langage compilé de haut niveau
    • B Un langage interprété
    • C L'Assembly
    • D Le bytecode Java (intermediate code)
    Réponse & justification

    Réponse : C — L'Assembly

    L'Assembly est le langage le plus bas niveau : un énoncé y équivaut à une seule instruction machine. Dans les langages compilés ou interprétés de plus haut niveau, un énoncé se traduit en plusieurs instructions. Le bytecode Java est un intermediate code exécuté par la JVM, pas le niveau le plus bas exprimé par le développeur.

  4. Une organisation veut analyser son code source à la recherche d'erreurs de programmation, sans exécuter l'application, et le plus tôt possible dans le cycle de développement. Quelle approche convient ?

    • A DAST, car il exécute l'application par fuzz testing
    • B SAST, car il analyse le code source sans l'exécuter
    • C RASP, car il termine l'exécution sur violation
    • D IAST, car il couvre les applications serverless non-HTTP
    Réponse & justification

    Réponse : B — SAST, car il analyse le code source sans l'exécuter

    Le SAST (Static Application Security Testing) analyse le code source sans exécution et se lance tôt dans le cycle (shift-left), ce qui correspond exactement au besoin. Le DAST est dynamique et exécute l'application (fuzz testing). Le RASP est une protection runtime, pas une analyse statique de code source. L'IAST est hybride et peine justement sur les applications serverless non-HTTP.

Points essentiels à retenir

  • Compilé vs interprété vs intermediate code (bytecode) ; Assembly = langage le plus bas, un énoncé = une instruction.
  • Software reuse échange risque contre temps : inspecter les sources third-party avant tout reuse ; l'IDE réunit editor, build automation et debugger.
  • SAST (statique, code source, tôt) vs DAST (dynamique, exécution, fuzz) ; IAST hybride ; RASP protège au runtime.
  • Garder development/QA/production séparés ; blended = risqué ; le développeur n'accède jamais à la production.
  • TCB = HW/SW/firmware de la security policy ; reference monitor (concept) implémenté par le security kernel (completeness, isolation, verifiability).
  • Contrôles DBMS : locks, deadlock, view-based access control, grant/revoke (cascade), data dictionary, OLTP (transaction log, checkpoint restart).
  • CM = identify/control/account/audit ; SCM pour le code ; CI intègre/teste dans le repo, CD déploie en production.
Module 5 Objectif 8.3 110 min Intermédiaire

Efficacité de la sécurité logicielle

Prérequis : Modules 1-4.

Construire du logiciel sûr ne suffit pas : il faut prouver qu'il l'est et qu'il le reste. Ce module traite de l'efficacité de la sécurité logicielle (objectif 8.3), c'est-à-dire de l'évaluation continue des contrôles de sécurité tout au long du cycle de vie. On commence par l'arbitrage permanent entre assurance et coût, temps et ressources, puis par la comparaison du risque aux besoins métier via les quatre étapes discover, evaluate, agree, document. On insiste sur la maxime « if you can't measure it, you can't manage it » : sans configuration management (CM) robuste, l'évaluation perd son ancrage. On voit ensuite l'auditing et le logging des changements appuyés sur des configuration items (CIs) uniquement identifiables, le software assurance comme processus ET résultat, la distinction functional vs nonfunctional requirements, et les quatre familles d'évaluation du risque logiciel. On approfondit la certification & accreditation (Security Authorization), puis le testing : acceptance, regression, security assessment, et les bonnes pratiques de test data. Le cas Equifax / Apache Struts illustre concrètement le coût de ne pas appliquer un patch critique.

Objectifs pédagogiques

  • Arbitrer l'assurance contre le coût, le temps et les ressources, et comparer le risque aux besoins métier (discover, evaluate, agree, document).
  • Expliquer pourquoi le CM et l'auditing/logging des changements sont indispensables à une évaluation crédible.
  • Définir le software assurance comme processus et résultat, et distinguer functional vs nonfunctional requirements.
  • Différencier certification (analyse technique) et accreditation (décision de management).
  • Choisir et appliquer les bonnes techniques de test : acceptance, regression, security assessment, et les règles de test data.

Critères de réussite

  • Je sais énumérer les quatre étapes d'identification des besoins métier et expliquer pourquoi le risque n'y figure pas.
  • Je sais ce qu'est un configuration item et pourquoi son identification unique conditionne l'audit.
  • Je distingue functional et nonfunctional requirements et je sais pourquoi la sécurité est souvent nonfunctional.
  • Je tranche certification vs accreditation et provisional vs full accreditation.
  • Je sais pourquoi on n'utilise jamais de données de production en test et ce qu'est le fuzz testing.

5.1 Arbitrer assurance, coût et besoins métier

Schéma reliant besoins métier, évaluation du risque, contrôles de sécurité et assurance logicielle en réseau d'activités interdépendantes.
Figure 5.1 · Assurance logicielle et évaluation de sécurité

Évaluer l'efficacité de la sécurité logicielle, c'est d'abord faire du risk management appliqué. Chaque étape, de la naissance d'une idée jusqu'au retrait du système, vise à atteindre une confiance suffisante : le logiciel est assez sûr, assez sécurisé, assez rapide pour les besoins des utilisateurs, et reste dans le budget et les délais. Comme les systèmes deviennent plus distribués et reposent sur des protocoles, interfaces et code open-source partagés, l'arbitrage entre le risque d'une brèche et la complexité, la difficulté et le coût d'un développement plus sûr devient chaque jour plus délicat.

Le professionnel de la sécurité n'est qu'un conseiller : la sécurité ne dicte pas ce que fait le business, elle lui permet d'opérer en sécurité. Pour comparer le risque aux besoins métier, l'entreprise suit quatre étapes. Discover : consulter les parties prenantes (entretiens, questionnaires, groupes de travail) sur ce qu'elles font et les outils qu'elles utilisent ; cette phase se répète souvent pour obtenir des réponses cohérentes. Evaluate : évaluer ces réponses, car les dirigeants articulent rarement clairement ce qu'ils font et les réponses sont souvent erronées. Agree : formuler des hypothèses pour réconcilier les visions ; si tous s'accordent, produire les business plans. Document : consigner le processus et le plan, qui deviennent le modèle de travail.

Piège d'examen : ce processus à quatre étapes ne tient pas compte du risque - il reflète ce que le business dit avoir besoin. Une fois la décision prise et implémentée, c'est l'équipe de sécurité (hors security architect) qui doit rendre le plan sûr. Et pour piloter cela, le principe « if you can't measure it, you can't manage it » impose des processus de configuration management (CM) et de configuration control (CC) robustes : sans mesure, pas de management de la sécurité.

Mots-clés EN Risk management Business needs Discover / Evaluate / Agree / Document Configuration management (CM) If you can't measure it, you can't manage it
Points clés
  • L'évaluation de l'efficacité de la sécurité est du risk management appliqué sur tout le cycle de vie.
  • Les quatre étapes des besoins métier : discover, evaluate, agree, document.
  • Ce processus ne tient pas compte du risque : il décrit ce que le business croit avoir besoin.
  • La sécurité conseille, elle ne dicte pas ; rendre le plan sûr revient à l'équipe de sécurité.
  • « If you can't measure it, you can't manage it » justifie le besoin de CM/CC robustes.

5.2 Auditing et logging des changements

Auditing et logging des changements
Figure 5.2 · Auditing et logging des changements

Le change management et le change control doivent d'abord décider du niveau de granularité auquel les éléments du système sont définis, énumérés, gérés et contrôlés. Cela établit l'ensemble des configuration items (CIs) formellement soumis aux décisions de CM et à l'enforcement et l'audit de CC. Tout le processus dépend des autres processus de sécurité du système pour empêcher rigoureusement la falsification du contenu d'un CI.

Un CI logiciel doit être identifiable de manière unique, et cet identifiant est lié aux processus de version control utilisés pendant l'intégration et la livraison. L'énumération du système doit révéler les CIs précis et l'identification de leur version. Sans ce niveau de spécificité et de granularité, l'énumération perd sa capacité à produire des findings exploitables en audit : on ne peut pas affirmer qu'un système correspond à son baseline si l'on ne sait pas exactement de quels éléments versionnés il est composé.

Le change control repose traditionnellement sur des change logs, alimentés par les logs des systèmes de fichiers et applications tenus par les OS, par les agents des systèmes de CM/CC, ou d'autres moyens. L'audit parcourt ensuite ces change logs pour vérifier que le résultat de tous les changements loggés correspond au baseline énuméré du système actuel. Piège d'examen : l'audit ne se contente pas de constater des changements, il vérifie qu'ils ramènent bien à l'état autorisé attendu (le baseline). C'est ainsi qu'on assess l'efficacité de la sécurité par auditing et logging - la réponse au scénario du profil 8.3.

Mots-clés EN Configuration item (CI) Version control Change log Baseline Audit-worthy findings
Points clés
  • Le CM définit d'abord la granularité, fixant l'ensemble des CIs gérés.
  • Un CI logiciel doit être uniquement identifiable et lié au version control.
  • Sans identification/versioning précis, pas de findings exploitables en audit.
  • Le CC s'appuie sur des change logs (OS, agents CM/CC, applications).
  • L'audit vérifie que les changements loggés correspondent au baseline énuméré.

5.3 Software assurance : processus, résultat et types d'évaluation

Functional vs nonfunctional requirements
Figure 5.3 · Functional vs nonfunctional requirements

Le software assurance (ou software quality assurance) détermine qu'un système : accomplit toutes les fonctions prévues et requises ; n'accomplit aucune fonction non prévue ou non autorisée ; est exempt de vulnérabilités de sécurité, exploitables ou non ; et est protégé contre l'insertion d'erreurs dans le design, le code, la forme, la fonction et les données à tout moment du cycle de vie. C'est à la fois un processus - l'ensemble planifié et systématique d'activités pour collecter des données sur le logiciel, les évaluer et déterminer sa qualité globale - ET un résultat : la confiance que les parties prenantes peuvent avoir dans la capacité du logiciel à remplir leurs besoins en sécurité. Cette confiance est comparable à une garantie d'aptitude.

Beaucoup de besoins de sécurité s'évaluent mal par le software quality assurance car les analystes les voient comme des nonfunctional requirements. Les functional requirements sont les choses précises que le système doit faire (traiter correctement une transaction d'achat) : du code est écrit pour les accomplir. Les nonfunctional requirements sont des caractéristiques de forme globale ou des attributs de comportement résultant de la conception ; la plupart des besoins de sécurité ont été considérés comme nonfunctional - aucun code spécifique n'est écrit car il n'y a pas de « fonction » à exécuter. La sécurité est aussi une emerging property : elle découle de l'ensemble du design plutôt que d'un module isolé. Les processus efficaces s'organisent autour de workflows (tâches, déclencheurs, reporting) et de métriques basées sur des use cases, benchmarks de performance de sécurité dans des situations connues.

Il existe quatre types d'évaluation du risque logiciel à connaître. Certification & accreditation : analyse en amont des besoins, requirements et design, avec acceptance testing par rapport au baseline ; coûteuse, elle tombe en désuétude. Risk management frameworks : NIST, ISO et autres cadres formalisés couvrant tout le cycle de décision du risque. Software process CMMs : modèles du SEI caractérisant les processus métier de bout en bout par leur fiabilité, répétabilité et atteinte de métriques de qualité. Software quality assurance (software assurance) : comme la C&A, elle établit dans quelle mesure le logiciel respecte ses requirements sans exposer l'organisation à des risques indus. Le fil rouge est une question de due diligence : quelle confiance peut-on avoir que le logiciel est sûr, sécurisé et apte à l'usage ?

Mots-clés EN Software assurance Functional requirement Nonfunctional requirement Emerging property Use case Software process CMM
Points clés
  • Software assurance = processus (collecte/évalue/qualifie) ET résultat (confiance, garantie d'aptitude).
  • Functional = tâche précise codée ; nonfunctional = caractéristique globale comme la sécurité.
  • La sécurité est souvent nonfunctional et une emerging property du design entier.
  • Workflows et métriques fondés sur des use cases mesurent l'efficacité.
  • Quatre types : C&A, risk management frameworks (NIST/ISO), software process CMMs (SEI), software quality assurance.

5.4 Certification & Accreditation (Security Authorization)

Certification & Accreditation (Security Authorization, ATO)
Figure 5.4 · Certification & Accreditation (Security Authorization, ATO)

La certification & accreditation, parfois appelée Security Authorization, sépare deux décisions distinctes. La certification est le processus formel d'évaluation des capacités de sécurité du logiciel ou du système contre un ensemble prédéterminé de standards ou de politiques de sécurité ; elle peut aussi examiner dans quelle mesure le système remplit ses functional requirements liés à la sécurité. En d'autres termes, la certification est l'analyse technique complète de la sécurité du système, dont le résultat contient une analyse des capacités et contre-mesures techniques et non techniques et de la mesure dans laquelle le système répond aux exigences.

L'accreditation est la décision formelle de management portant sur les résultats de la certification, utilisée comme autorisation de mise en production. Elle requiert généralement une designated accrediting authority (DAA) qui revoit et approuve, et autorise le système en production pour une période donnée. Piège d'examen : certification = analyse technique (le « quoi » et le « comment » de la sécurité) ; accreditation = décision/autorisation de management (le « go » business). Le management peut accréditer un système qui a échoué à la certification, ou refuser d'accréditer un système certifié conforme - la décision finale est managériale, pas technique.

Il existe deux types d'accreditation. La provisional accreditation vaut pour une période déterminée et liste les changements requis pour atteindre la full accreditation. La full accreditation implique qu'aucun changement n'est requis pour la décision. Pour un test valable, l'application doit être testée dans un environnement simulant au plus près la production, en testant les capacités de sécurité et en simulant les problèmes de sécurité susceptibles de survenir - c'est la première phase du processus de C&A. Usage : surtout les environnements gouvernementaux (et leurs agences clientes), qui ont des exigences strictes de C&A et d'authorization to operate ; la plupart des organisations commerciales n'y voient pas de bénéfice face au fardeau administratif.

Mots-clés EN Security Authorization Certification Accreditation Designated accrediting authority (DAA) Provisional vs full accreditation
Points clés
  • Certification = analyse technique ; accreditation = décision de management.
  • L'accreditation requiert une DAA et autorise la production pour une période.
  • Le management peut accréditer un système non certifié ou refuser un système certifié.
  • Provisional = temporaire avec changements requis ; full = aucun changement requis.
  • Usage surtout gouvernemental ; trop lourd pour la plupart du commercial.

5.5 Testing, verification et security assessment

Pyramide des tests logiciels : unit, integration, system
Figure 5.5 · Pyramide des tests logiciels : unit, integration, system

Le testing utilise un système (ou ses composants) de manière scriptée et contrôlée pour vérifier qu'un jeu d'entrées et de conditions initiales produit les résultats requis. Il intervient à de nombreuses étapes pour vérifier la justesse du design, de l'implémentation et l'aptitude à l'usage, y compris les caractéristiques de sécurité. L'acceptance testing (à l'origine « functional testing ») est un test formel mené par les équipes end-user du client pour déterminer s'il accepte le système : il répond à « peut-on l'utiliser pour nos besoins métier ? ». Il se distingue des unit tests, écrits et menés par les développeurs eux-mêmes, qui répondent à « se comporte-t-il selon les functional requirements ? ». Chaque test (un case) donne un pass ou fail ; accepter un système avec des écarts connus et un plan de résolution est courant.

Le regression testing vérifie qu'un changement ou ajout n'a pas affecté négativement les fonctionnalités existantes : attraper les bugs accidentellement réintroduits dans un nouveau build et s'assurer que des bugs déjà éradiqués le restent. Le regression testing de sécurité vérifie qu'un nouveau lot de modifications n'a pas ré-exposé le système à des vulnérabilités exploitables déjà connues - il arrive qu'un patch de sécurité défasse les mitigations d'une mise à jour précédente. Le security assessment testing, incluant l'ethical penetration testing, s'applique tout au long de la vie opérationnelle ; il évalue l'état présent du système et son usage réel, qui a souvent évolué au-delà des requirements d'origine, et inspecte que les contrôles de sécurité intégrés fonctionnent encore face aux menaces actuelles.

Les bonnes pratiques de test data sont des classiques d'examen. Ne jamais utiliser de données de production (privacy, need-to-know) ; si c'est inévitable, le data owner doit donner son accord et des usage controls stricts sont négociés. Inclure des données aux limites des plages acceptables, entre les deux, et au-delà du prévu, avec du fuzz testing (données aléatoires, non « attendues »). Tester aussi avec des known good data pour vérifier le comportement attendu. Faire du bounds checking de taille de champ, d'heure et de date pour prévenir les buffer overflows. Sanitiser les données de test pour ne pas exposer de données sensibles aux testeurs non autorisés. Revoir les données avant et après chaque test, et maintenir en permanence une séparation claire entre environnements de test et de production.

Les tests se classent aussi selon la connaissance interne dont dispose le testeur. Le black-box testing ne suppose aucune connaissance du code interne et exerce le systeme de l'exterieur (proche du DAST et du pentest externe). Le white-box testing dispose d'un acces complet au code source et a la conception (proche du SAST et de la code review). Le grey-box testing combine les deux : une connaissance partielle (par exemple des comptes ou des schemas) pour cibler les tests. Choisir le bon mix selon le risque et la criticite renforce la couverture.

Mots-clés EN Acceptance testing Unit test Regression testing Security assessment testing Fuzz testing Bounds checking Black-box testing White-box testing Grey-box testing
Points clés
  • Acceptance testing = client/end-user, besoins métier ; unit test = développeurs, requirements.
  • Regression testing : ne pas réintroduire de bugs ni rouvrir de vulnérabilités connues.
  • Security assessment testing (pen test éthique) couvre toute la vie opérationnelle.
  • Ne jamais utiliser de données de production ; sinon accord du data owner + usage controls.
  • Fuzz testing, bounds checking, sanitisation, séparation test/prod sont des règles clés.
  • Black-box (sans le code, cf. DAST), white-box (avec le code, cf. SAST), grey-box (connaissance partielle).

Cas d'étude

Cas · Profil

Jens : évaluer l'efficacité par auditing et logging

Contexte : On demande à Jens d'expliquer comment évaluer l'efficacité de la sécurité logicielle chez HelloWorld Inc. en s'appuyant sur l'auditing et le logging des changements, et d'exposer des méthodes de risk analysis et de mitigation.

Question : Comment Jens peut-il évaluer l'efficacité de la sécurité logicielle via l'auditing et le logging des changements ?

Topics traités Configuration managementAuditing et loggingRisk analysis et mitigation
Voir l'analyse et la correction

Jens doit d'abord faire fixer par le CM la granularité des éléments, définissant l'ensemble des configuration items (CIs) gérés. Chaque CI logiciel doit être uniquement identifiable et lié au version control, pour que l'énumération révèle les CIs précis et leur version. Le change control alimente alors des change logs (OS, agents CM/CC, applications). Jens fait parcourir ces logs par l'audit pour vérifier que le résultat de tous les changements correspond au baseline énuméré du système actuel. Là où les changements ne ramènent pas à l'état autorisé attendu, il y a un écart à triager. Ces findings alimentent la risk analysis et orientent la mitigation. La traçabilité fournit aussi un paper trail qui peut révéler des intrusions ou altérations passées inaperçues.

À retenir : Sans CIs uniquement identifiables et versionnés, l'auditing ne produit pas de findings exploitables : l'identité et la traçabilité des changements sont le socle de toute évaluation d'efficacité.

Éléments d'apprentissage clés
  • Le CM fixe la granularité et l'ensemble des CIs.
  • L'audit compare les changements loggés au baseline énuméré.
  • Les écarts triagés alimentent la mitigation du risque.
Cas · Cas d'étude

Equifax et Apache Struts (CVE-2017-5638)

Contexte : Apache Struts 1, framework open-source MVC développé en mai 2000 par Craig McClanahan, étend l'API Java en séparant le model (qui dialogue avec la base) de la view (la page HTML). Le 10 mars 2017, le NVD américain publie CVE-2017-5638, une vulnérabilité critique du Jakarta multipart parser permettant l'exécution de code arbitraire à distance. Le correctif du framework est publié le 6 mars 2017, mais dès les premiers jours des attaquants tentent d'exploiter la faille. En mai 2017, deux mois après le patch, une vulnérabilité web dans Struts mène à la brèche Equifax, exposant les données sensibles de 143 millions de citoyens US : noms, numéros de Social Security, dates de naissance, adresses, numéros de permis et de cartes de crédit, ainsi que des résidents britanniques et canadiens.

Question : Pourquoi Equifax n'a-t-il pas appliqué le correctif alors qu'il était disponible ?

Topics traités Supply chain riskPatch management des dépendancesArbitrage assurance vs coût
Voir l'analyse et la correction

Le patch était trop complexe et laborieux à déployer. Des centaines d'applications dépendaient de Struts ; corriger la vulnérabilité aurait imposé de reconstruire ces applications et de les retester en profondeur avec le nouveau correctif, opération coûteuse qui ne semblait pas en valoir la peine. C'est exactement l'arbitrage assurance contre coût/temps/ressources, mal résolu : le risque réel (RCE sur des données ultra-sensibles) a été sous-estimé face au coût immédiat. Sans inventaire précis des CIs dépendant de Struts ni regression testing automatisé, l'effort paraissait démesuré, et la fenêtre de deux mois a suffi aux attaquants.

À retenir : Le patch management des dépendances tierces est un risque de supply chain de premier ordre : une dépendance open-source non corrigée peut anéantir l'assurance de tout un système. Un inventaire de CIs et un regression testing efficaces rendent le patch d'une dépendance critique tenable plutôt que prohibitif.

Éléments d'apprentissage clés
  • CVE-2017-5638 : RCE via le Jakarta multipart parser de Struts.
  • Patch publié le 6 mars 2017, brèche Equifax en mai 2017 (143 M de citoyens).
  • Le coût perçu du patch a primé sur le risque réel - mauvais arbitrage.
  • Inventaire de CIs et regression testing rendent le patch des dépendances tenable.
Piège d'examen

Acceptance testing vs regression testing

Ne pas confondre. L'acceptance testing est mené par le client / les end-users pour décider d'accepter le système : il répond à « peut-on l'utiliser pour nos besoins métier ? ». Le regression testing vérifie qu'un changement ou ajout n'a pas cassé l'existant ni rouvert un bug ou une vulnérabilité déjà corrigée. Mémo : acceptance = adéquation aux besoins métier (orienté client) ; regression = non-régression de l'existant (orienté changement). Les unit tests, eux, sont menés par les développeurs et répondent à « se comporte-t-il selon les functional requirements ? ».

Piège d'examen

Certification vs accreditation

Ne pas confondre. La certification est l'analyse technique complète : évaluer les capacités de sécurité du système contre des standards prédéterminés. L'accreditation est la décision formelle de management sur les résultats de la certification, l'autorisation de mise en production prononcée par une DAA. Mémo : certification = technique (le « quoi/comment ») ; accreditation = managérial (le « go »). Conséquence d'examen : le management peut accréditer un système qui a échoué à la certification, ou refuser un système certifié conforme - la décision finale est managériale.

Piège d'examen

Functional vs nonfunctional requirements

Ne pas confondre. Une functional requirement est une tâche précise que le système doit accomplir (traiter une transaction) : on écrit du code pour l'exécuter et elle est traçable et testable directement. Une nonfunctional requirement est une caractéristique globale ou un attribut de comportement (la sécurité, la performance) issu de la conception ; il n'y a pas de « fonction » dédiée, donc on l'évalue par analyse plutôt que par un test de fonction. Mémo : functional = ce que le système fait (codé, traçable) ; nonfunctional = comment il est, dont la sécurité, souvent une emerging property.

Point de contrôle — Checkpoint

  1. Quel est le but principal de l'évaluation de l'efficacité de la sécurité logicielle ?

    • A Évaluer et améliorer en continu les mesures de sécurité du logiciel
    • B Remplacer le configuration management par des audits ponctuels
    • C Garantir l'absence totale de bugs fonctionnels
    • D Transférer la responsabilité de la sécurité aux développeurs
    Réponse & justification

    Réponse : A — Évaluer et améliorer en continu les mesures de sécurité du logiciel

    Le but est d'évaluer et d'améliorer les mesures de sécurité tout au long du cycle de vie (risk management appliqué et continu). B est faux : l'évaluation s'appuie sur le CM, elle ne le remplace pas. C confond sécurité et qualité fonctionnelle, et aucun système n'est garanti sans bug. D est faux : la sécurité conseille et évalue, elle ne se décharge pas sur les développeurs.

  2. Quelle technique analyse le code source sans l'exécuter ?

    • A Static analysis (SAST)
    • B Dynamic analysis (DAST)
    • C Fuzz testing
    • D Acceptance testing
    Réponse & justification

    Réponse : A — Static analysis (SAST)

    La static analysis (SAST) examine le code source sans l'exécuter. B (DAST) évalue le comportement à l'exécution. C (fuzz testing) injecte des données aléatoires sur un système en cours d'exécution. D (acceptance testing) est mené par le client pour décider d'accepter le système, et il s'exécute.

  3. Quel est le but de l'analyse dynamique (DAST) ?

    • A Évaluer le comportement du logiciel à l'exécution
    • B Inspecter le code source ligne par ligne au repos
    • C Décider de l'autorisation de mise en production
    • D Définir la granularité des configuration items
    Réponse & justification

    Réponse : A — Évaluer le comportement du logiciel à l'exécution

    L'analyse dynamique évalue le comportement du logiciel pendant son exécution. B décrit la static analysis (code au repos). C décrit l'accreditation (décision de management). D relève du configuration management, pas d'une technique d'analyse de code.

  4. Dans la Security Authorization, qui prend la décision d'autoriser la mise en production ?

    • A Le management via l'accreditation (souvent une DAA)
    • B L'équipe technique via la certification
    • C Les développeurs via les unit tests
    • D Le data owner via la sanitisation des données
    Réponse & justification

    Réponse : A — Le management via l'accreditation (souvent une DAA)

    L'accreditation est la décision formelle de management qui autorise la production, généralement par une designated accrediting authority (DAA). B est faux : la certification est l'analyse technique, pas la décision d'autorisation. C concerne le test unitaire des fonctions. D concerne la protection des données de test, sans rapport avec l'autorisation.

Points essentiels à retenir

  • Évaluer l'efficacité de la sécurité = risk management appliqué et continu ; sans mesure (CM), pas de management.
  • Les besoins métier se construisent en discover, evaluate, agree, document - sans tenir compte du risque, que la sécurité ajoute ensuite.
  • Des CIs uniquement identifiables et versionnés rendent l'auditing capable de produire des findings face au baseline.
  • Software assurance = processus ET résultat ; la sécurité est souvent nonfunctional et une emerging property.
  • Certification (technique) et accreditation (management) sont distinctes ; la décision finale est managériale.
  • Acceptance (client), regression (non-régression) et security assessment (pen test continu) couvrent des besoins différents.
  • Jamais de données de production en test ; fuzz testing, bounds checking, sanitisation et séparation test/prod sont la règle.
  • Equifax / Struts : un patch de dépendance non appliqué est un risque de supply chain majeur.
Module 6 Objectif 8.4 100 min Intermédiaire

Sécurité des logiciels acquis

Prérequis : Modules 1-5.

La majeure partie du logiciel sur lequel une organisation s'appuie n'est pas écrite par ses propres développeurs : COTS, open source, développement third-party, services managés et cloud. Le software assurance ne s'arrête donc pas à la porte de l'équipe de dev interne ; il doit s'étendre à tout ce qui est acheté, loué ou hérité. Ce module couvre l'objectif 8.4 : acquisition via développement third-party et son processus en quatre phases, évaluation de l'open source et des systèmes orphaned, enjeux des mergers and acquisitions, due diligence sur les commodity systems et le COTS, et responsabilité partagée des services managés et cloud. On ajoute les pratiques modernes de supply chain (SCA, SBOM) qui prolongent ce raisonnement.

Objectifs pédagogiques

  • Décrire le processus d'acquisition via développement third-party et ses quatre phases (Planning, Contracting, Monitoring/Acceptance/Deployment, Ongoing use & support).
  • Évaluer la sécurité de l'open source (Linus's law et ses limites) et distinguer systèmes legacy et orphaned.
  • Expliquer les enjeux de software assurance lors des mergers and acquisitions.
  • Mener une due diligence sur le COTS et les commodity systems (CVE, réputation vendeur, mises à jour signées).
  • Situer la responsabilité partagée des services managés (MSP, MSSP, ERP) et du cloud (SaaS, PaaS, IaaS).
  • Utiliser SCA et SBOM pour gérer le risque de supply chain des composants tiers.

Critères de réussite

  • Vous ordonnez les quatre phases d'acquisition et citez les artefacts clés (SOW, RFP, ROI/hurdle rate).
  • Vous tranchez legacy vs orphaned et COTS vs bespoke sans hésiter.
  • Vous attribuez correctement les responsabilités dans le modèle de partage SaaS/PaaS/IaaS.
  • Vous expliquez le but d'un SBOM.

6.1 Acquisition via développement third-party : les quatre phases

Les 4 phases d'acquisition logicielle
Figure 6.1 · Les 4 phases d'acquisition logicielle

Quand une organisation confie à un tiers le développement d'un système, la customisation d'un logiciel existant ou le tailoring d'une plateforme commerciale, le processus d'acquisition devient le levier pour imposer le software assurance. La sécurité doit être designed in dès le départ : la meilleure sécurité est toujours celle conçue dans l'application, pas ajoutée après coup. La nature du contrat (open-ended ou fixed) reflète le degré d'incertitude sur le développement, le test et l'acceptance test ; un baseline contractuel entièrement fixe est souvent trop optimiste car peu de projets logiciels sont livrés à temps, dans le budget et avec toutes les exigences satisfaites.

Le software assurance pendant l'acquisition suit quatre phases. (1) Planning : on identifie le besoin, on fait le sizing/scoping, des risk assessments, on compare des implémentations alternatives, on estime le ROI comparé au hurdle rate interne (un projet qui ne dépasse pas ce taux de rentabilité minimal doit avoir une raison dominante pour être approuvé), puis on rédige les exigences logicielles du Statement of Work (SOW) et la stratégie d'acquisition avec critères de sélection des bidders. (2) Contracting : on émet la sollicitation ou Request for Proposal (RFP) accompagnée du SOW et des terms and conditions (conditions d'acceptance, prequalification, certifications), on évalue les propositions, puis on négocie et on attribue le contrat. (3) Monitoring, acceptance and deployment : on établit le planning de travail, on applique le change management / configuration control, et on revoit et accepte les deliverables - les assurance case deliverables doivent prouver la conformité aux stratégies de risk mitigation du contrat. (4) Ongoing use and support : le sustainment (risk management, assurance case management, change management) puis le disposal ou decommissioning.

Piège d'examen : un fournisseur qui revendique un CMM élevé n'est pas automatiquement sûr. La plupart des CMMs n'adressent pas explicitement la safety et la security ; un supplier au process mature peut donc ne pas exercer les pratiques critiques de software assurance. Le security professional doit vérifier que le software assurance est réellement intégré aux capacités de process du fournisseur, à la hauteur des besoins de risk mitigation de l'organisation.

Quand l'organisation depend d'un logiciel sur mesure dont elle ne possede pas le code source, un software escrow (sequestre de code source) protege la continuite : un tiers de confiance (escrow agent) conserve le code source et la documentation, et les libere au client selon des conditions contractuelles predefinies, typiquement la faillite du fournisseur, l'arret du support ou un manquement grave. C'est un controle cle de supply chain a negocier des la phase de contracting, au meme titre que le SOW et l'assurance case.

Mots-clés EN Statement of Work (SOW) Request for Proposal (RFP) Hurdle rate Assurance case Sustainment CMM Software escrow
Points clés
  • Quatre phases : Planning, Contracting, Monitoring/Acceptance/Deployment, Ongoing use & support.
  • SOW = exigences dans le contrat ; RFP = sollicitation envoyée aux fournisseurs.
  • ROI comparé au hurdle rate interne pour décider d'un projet.
  • La sécurité doit être designed in dès le départ.
  • Un CMM élevé ne garantit pas le software assurance : vérifier explicitement.
  • Software escrow : un tiers detient le code source, libere au client si le fournisseur fait faillite ou cesse le support.

6.2 Open source et systèmes orphaned

Legacy vs orphaned systems
Figure 6.2 · Legacy vs orphaned systems

L'open-source software est du code source rendu disponible à tous, généralement développé par et pour la communauté sous des licences variées favorisant l'adoption. Les partisans pensent que l'ouverture améliore la sécurité, ce qu'exprime la Linus's law : avec suffisamment d'yeux sur le code, tous les bugs deviennent apparents ("with enough eyeballs, all bugs are shallow"). L'idée est que la revue par d'autres développeurs identifie et corrige vite les vulnérabilités. Les critiques objectent que rien ne garantit que tous les défauts seront trouvés, quel que soit le nombre de relecteurs ; publier le code ne supprime pas les vulnérabilités, et présumer automatiquement la fiabilité crée un faux sentiment de sécurité. Des programmeurs malhonnêtes peuvent trouver des failles sans les divulguer, parfois pour les exploiter ou faire chanter l'éditeur.

Le débat n'est pas tranché, mais un principe est admis : la "security by obscurity" ne marche pas. Cacher une technologie ne la protège pas durablement. Que le programme soit fourni en source ou seulement en exécutable, l'observation, le reverse engineering, le disassembly, le trial and error et le hasard peuvent révéler des vulnérabilités. L'open source n'est donc ni intrinsèquement plus sûr ni intrinsèquement plus dangereux : il demande une évaluation propre.

Un cas particulier est le logiciel orphaned. Une organisation se retrouve parfois bloquée avec des éléments que le fabricant d'origine ne supporte plus et pour lesquels aucun support tiers efficace n'existe. En 2019 et 2020, des cabinets médicaux au Royaume-Uni ont dû rester sous Windows XP car remplacer les dispositifs cliniques XP-dépendants dépassait leur budget. Piège d'examen : ne confondez pas legacy et orphaned. Un système legacy est encore supporté (en interne ou par un tiers) et reste, dans la limite du raisonnable, remédiable. Un technological orphan est globalement insupportable ; il devra être remplacé ou abandonné. Même sans code source ni documentation, l'évaluation reste utile : les données CVE révèlent des vulnérabilités potentielles que l'on peut parfois mitiger autrement. À terme, refactoring le processus métier entier qui dépend de la technologie orpheline est souvent la meilleure option.

Mots-clés EN Linus's law Security by obscurity Reverse engineering Legacy system Orphaned / technological orphan CVE data
Points clés
  • Linus's law : many eyes = bugs superficiels ; mais l'open source ne garantit pas zéro vulnérabilité.
  • Security by obscurity ne marche pas : reverse engineering et hasard trouvent les failles.
  • Legacy = encore supporté, remédiable ; orphaned = insupportable, à remplacer/abandonner.
  • Exemple : cabinets médicaux UK bloqués sous Windows XP (orphaned).
  • Sans code source, CVE permet encore d'évaluer ; refactoring du processus métier en dernier recours.

6.3 Mergers and acquisitions : risques hérités

Risques de sécurité en M&A
Figure 6.3 · Risques de sécurité en M&A

Lors d'un merger ou d'une acquisition (M&A), le nouveau propriétaire hérite à la fois des bons et des actifs douteux de l'organisation absorbée : systèmes d'information, infrastructures IT, données et personnes. L'évaluation de sécurité des architectures combinées est difficile. Les différences de culture organisationnelle se traduisent par des attentes et standards de documentation différents, ce qui peut rendre incompatibles ou incomplets le configuration management et l'identification des baselines, les inventaires d'actifs (énumération des systèmes, licences logicielles, niveaux de révision) et les inventaires de risques avec leurs stratégies de contrôle.

Le risque le plus dangereux est souvent invisible : l'organisation acquise peut apporter un legacy non documenté de data breaches, intrusions, malware et identités/contrôles d'accès compromis. La connaissance tacite de ces risques a parfois déjà quitté l'entreprise avec les employés partis avant le rachat. Le cas Marriott (2016-2020) illustre ce piège : en absorbant les opérations et l'infrastructure IT d'autres chaînes hôtelières, l'entreprise a hérité d'expositions préexistantes.

Piège d'examen : la sécurité est rarement prioritaire dans une M&A. L'organisation acquéreuse subit une forte pression de maîtrise des coûts pour absorber et rentabiliser la nouvelle activité, et a peu d'appétit pour allouer des ressources à une évaluation de sécurité approfondie des propriétés considérées. Le security professional doit donc anticiper : exiger une due diligence de sécurité avant la signature, et traiter les identités héritées et les CM incompatibles comme des risques de premier ordre, pas comme un détail post-fusion.

Mots-clés EN Merger & Acquisition (M&A) Configuration management (CM) Asset inventory Inherited identities Due diligence
Points clés
  • Une M&A fait hériter des actifs douteux : breaches non documentées, malware, identités compromises.
  • CM, inventaires d'actifs et de risques souvent incompatibles ou incomplets.
  • La connaissance tacite des risques part avec les employés.
  • Exemple : Marriott 2016-2020.
  • La sécurité est rarement prioritaire post-acquisition : exiger une due diligence avant signature.

6.4 Commodity systems et COTS : due diligence

COTS et cloud : due diligence et responsabilité partagée
Figure 6.4 · COTS et cloud : due diligence et responsabilité partagée

La grande majorité des logiciels en service dans une organisation sont des produits commerciaux vendus ou licenciés comme des commodities : ce sont les COTS (commercial-off-the-shelf), firmware ou produits embarqués - firmware de cartes mères ou de contrôleurs, OS, applications autonomes, suites bureautiques, plateformes applicatives. L'organisation n'est qu'un client parmi des milliers et n'a presque jamais le capital pour influencer le développeur afin qu'il satisfasse ses besoins spécifiques de sécurité. Par nature one-size-fits-all, la sécurité d'un COTS est souvent trop générique, voire inexistante.

Le security professional n'est pas pour autant désarmé : le choix du produit, et même du revendeur, peut et doit être influencé par des considérations de sécurité. Exploitez les données CVE - pour le produit visé mais aussi pour les autres produits du même vendeur. Recherchez la réputation du vendeur : réactivité aux rapports de vulnérabilité, rapidité d'émission de mises à jour, et usage de paquets de mise à jour signés (signed update packages) pour les distribuer. La même due care qui maintient le système sûr en exploitation doit servir de due diligence avant d'endosser la décision d'achat, de location ou de licence.

Piège d'examen (CYU 8.4) : le COTS est-il plus dangereux que le bespoke développé en interne ? La réponse attendue est oui : le caractère one-size-fits-all augmente le potentiel de failles de sécurité, car la sécurité y est générique ou absente. Elle peut être prise en compte, mais seulement après un risk assessment approfondi. Ne tombez pas dans le raisonnement inverse ("le COTS a forcément subi des tests rigoureux") qui est faux.

Mots-clés EN COTS Commodity systems Signed update packages Vendor reputation Bespoke
Points clés
  • COTS = produit commercial standard ; sécurité souvent générique ou inexistante (one-size-fits-all).
  • On influence rarement le développeur : la due diligence se fait au moment du choix.
  • Due diligence : CVE du produit ET du vendeur, réputation, mises à jour signées.
  • CYU 8.4 : oui, le COTS est plus dangereux que le bespoke (réponse A).
  • Piège : croire que le COTS a forcément subi des tests rigoureux (faux).

6.5 Services managés et cloud : responsabilité partagée

Schéma des modèles de service cloud SaaS, PaaS, IaaS montrant le partage des responsabilités de sécurité entre fournisseur et client.
Figure 6.5 · Modèles de service cloud et responsabilité partagée

Les services managés permettent à une organisation de se concentrer sur son cœur de métier, de libérer ses ressources IT internes et d'obtenir des capacités qui auraient sinon demandé des équipes internes. Les prestataires sont des tiers appelés managed service providers (MSP). Les possibilités sont nombreuses : un système ERP (enterprise resource planning) en est un exemple ; un prestataire spécialisé dans le security monitoring et l'incident response s'appelle un managed security service provider (MSSP).

Les services cloud livrent à la demande, via internet, des capacités qui évitent au client d'acquérir et de maintenir l'infrastructure. Les offres as-a-service incluent Software as a Service (SaaS), Platform as a Service (PaaS) et Infrastructure as a Service (IaaS). Dans tous ces modèles, la sécurité et la conformité relèvent d'une shared responsibility entre le fournisseur et le client : plus on monte vers le SaaS, plus le fournisseur prend en charge la pile (matériel, runtime, application) ; plus on descend vers l'IaaS, plus le client conserve la responsabilité (OS, middleware, données, configuration). Les bénéfices sont l'efficacité, la réduction des coûts, la flexibilité et la scalabilité à la demande ; le plus notable pour le business est le passage de capital expenditure (CapEx) à operational expenditure (OpEx).

Piège d'examen : la shared responsibility ne signifie pas que le fournisseur assume toute la sécurité. En IaaS, le client reste responsable du système d'exploitation, des données et de la configuration ; une mauvaise configuration d'un bucket de stockage est la faute du client, pas du fournisseur. Sachez situer la frontière de responsabilité selon le modèle SaaS / PaaS / IaaS.

Mots-clés EN MSP MSSP ERP SaaS / PaaS / IaaS Shared responsibility CapEx → OpEx
Points clés
  • MSP = services managés ; MSSP = sécurité managée (monitoring, IR) ; ERP = exemple.
  • Cloud : SaaS, PaaS, IaaS ; bénéfice business clé = CapEx vers OpEx.
  • Shared responsibility : le partage dépend du modèle (SaaS le plus chez le fournisseur).
  • En IaaS le client garde OS, données et configuration.
  • Piège : une mauvaise config (bucket ouvert) reste la responsabilité du client.

6.6 Supply chain : SCA et SBOM

Supply chain logicielle : SCA et SBOM
Figure 6.6 · Supply chain logicielle : SCA et SBOM

Le raisonnement de l'objectif 8.4 - on dépend de logiciel qu'on n'écrit pas - se prolonge dans les pratiques modernes de software supply chain risk management. Une application n'est plus un bloc monolithique : elle agrège des dizaines voire des centaines de composants tiers et open source (bibliothèques, frameworks, conteneurs). Chacun apporte ses propres vulnérabilités et ses propres licences. Gérer ce risque suppose de savoir précisément ce que l'on embarque.

Le Software Composition Analysis (SCA) est l'outillage qui scanne automatiquement les dépendances d'un projet pour identifier les composants tiers, les corréler aux vulnérabilités connues (CVE) et signaler les problèmes de licence. Il prolonge la logique CVE de la due diligence COTS, mais appliquée aux composants internes du produit plutôt qu'au produit acheté entier. Le Software Bill of Materials (SBOM) est l'inventaire formel et lisible par machine de tous ces composants et de leurs versions - une nomenclature logicielle. Son but : quand une vulnérabilité majeure frappe une bibliothèque répandue, l'organisation peut interroger ses SBOM pour savoir en minutes quels produits sont affectés, au lieu d'auditer le code à l'aveugle.

Piège d'examen : ne confondez pas SCA et SAST. Le SAST (static application security testing) analyse votre propre code source à la recherche de défauts ; le SCA analyse les composants tiers que vous réutilisez. SBOM n'est pas un outil de scan mais une liste d'ingrédients ; c'est la transparence qui rend la réponse aux incidents de supply chain rapide et fiable.

Mots-clés EN Software Composition Analysis (SCA) Software Bill of Materials (SBOM) Supply chain risk management Third-party component
Points clés
  • SCA scanne les dépendances tierces et les corrèle aux CVE et licences.
  • SBOM = nomenclature logicielle machine-readable des composants et versions.
  • But du SBOM : identifier vite les produits affectés par une vulnérabilité de composant.
  • Ne pas confondre SCA (composants tiers) et SAST (votre propre code).

Cas d'étude

Cas · Activité

HelloWorld : tous les logiciels acquis, même niveau de risque ?

Contexte : Bien qu'HelloWorld développe sur mesure des systèmes de gestion de l'information, l'entreprise doit aussi acquérir et utiliser du logiciel de sources variées : COTS, open source, développement third-party et services managés (SaaS, IaaS, PaaS). Pendant une présentation, le CEO interpelle Jens.

Question : Toutes ces formes de logiciel présentent-elles le même niveau de risque, et comment Jens devrait-il évaluer leur impact de sécurité et vérifier l'alignement avec les standards d'HelloWorld ?

Topics traités Priorisation par impactSources d'acquisition variéesSoftware assurance measures
Voir l'analyse et la correction

Non, pas nécessairement : des risques différents ont des effets différents. Tous les risques doivent être considérés, mais le security professional doit prioriser les plus dangereux. Un défaut dans un logiciel financier est bien plus grave qu'un défaut dans un client email : même probabilité éventuelle, mais impact incomparable. Jens doit donc cartographier chaque source acquise selon la criticité de la fonction qu'elle porte, puis appliquer une évaluation proportionnée : données CVE et réputation du vendeur pour le COTS, évaluation propre et veille pour l'open source, exigences de software assurance dans le SOW pour le third-party, et clarification de la frontière de shared responsibility pour les services SaaS/PaaS/IaaS. Le fil conducteur est un risk assessment approfondi assorti de software assurance measures, pas un traitement uniforme.

À retenir : Tout logiciel acquis n'est pas égal devant le risque : priorisez selon l'impact (criticité de la fonction), pas selon la source. Adaptez l'évaluation au modèle d'acquisition.

Éléments d'apprentissage clés
  • Risques variés = effets variés ; prioriser les plus dangereux.
  • Défaut en logiciel financier > défaut en client email.
  • Un risk assessment approfondi conditionne l'alignement aux standards.
Cas · Check Your Understanding

COTS vs bespoke : lequel est plus dangereux ?

Contexte : Lors d'une revue d'architecture, on débat de savoir si le recours à du COTS expose davantage l'entreprise que le développement bespoke réalisé en interne.

Question : Le COTS est-il plus dangereux que le logiciel bespoke développé en interne ? A. Oui, le COTS augmente le potentiel de failles de sécurité. B. Non, le COTS a généralement subi des tests de sécurité rigoureux. C. Non, et supposer le contraire coûte cher aux entreprises en quête d'efficacité. D. Oui, le COTS ne peut jamais être sûr.

Topics traités COTSBespokeRisk assessment
Voir l'analyse et la correction

La bonne réponse est A. La nature one-size-fits-all du COTS rend souvent la sécurité trop générique ou inexistante, ce qui augmente le potentiel de failles. Elle peut être prise en compte, mais seulement après un risk assessment approfondi. B est faux : rien ne garantit des tests rigoureux. D est trop absolu : le COTS n'est pas condamné à l'insécurité, il demande de la due diligence. C inverse la réalité : le risque accru est réel, pas une croyance coûteuse.

À retenir : COTS plus dangereux que bespoke : oui (réponse A), à cause du one-size-fits-all - mais maîtrisable par due diligence et risk assessment.

Éléments d'apprentissage clés
  • Réponse A : le COTS augmente le potentiel de failles.
  • Cause : one-size-fits-all, sécurité générique ou absente.
  • La due diligence (CVE, réputation, mises à jour signées) compense.
Piège d'examen

Legacy vs orphaned (technological orphan)

Ne confondez pas les deux. Un système legacy est ancien mais encore supporté (en interne ou par un tiers) et reste, dans la limite du raisonnable, remédiable. Un système orphaned, ou technological orphan, n'est plus supporté par personne et est globalement insupportable : à terme il faut le remplacer ou l'abandonner, voire refactoring le processus métier entier qui en dépend. Exemple : les cabinets médicaux UK bloqués sous Windows XP. Même orphelin, on peut encore exploiter les données CVE pour mitiger.

Piège d'examen

Linus's law vs réalité de l'open source

La Linus's law ("many eyes" rendent les bugs superficiels) plaide pour l'ouverture, et il est vrai que la security by obscurity ne marche pas. Mais l'examen attend la nuance : publier le code ne garantit pas que toutes les vulnérabilités seront trouvées, et l'hypothèse automatique de fiabilité crée un faux sentiment de sécurité. L'open source n'est ni intrinsèquement plus sûr ni plus dangereux que le propriétaire : il exige sa propre évaluation.

Piège d'examen

COTS vs bespoke (CYU 8.4)

Question piège classique : le COTS est-il plus dangereux que le bespoke interne ? Réponse A - oui. Le one-size-fits-all rend la sécurité générique ou inexistante, d'où un potentiel accru de failles. N'choisissez pas l'option qui prétend que le COTS a forcément subi des tests rigoureux (faux), ni l'option absolutiste "jamais sûr" : le risque est réel mais maîtrisable par due diligence (CVE, réputation du vendeur, mises à jour signées) après risk assessment.

Point de contrôle — Checkpoint

  1. Le COTS est-il plus dangereux que le logiciel bespoke développé en interne ?

    • A Oui, le COTS augmente le potentiel de failles de sécurité.
    • B Non, le COTS a généralement subi des tests de sécurité rigoureux.
    • C Non, et le supposer coûte cher aux entreprises en quête d'efficacité.
    • D Oui, le COTS ne peut jamais être sûr.
    Réponse & justification

    Réponse : A — Oui, le COTS augmente le potentiel de failles de sécurité.

    A est correcte : la nature one-size-fits-all du COTS rend la sécurité souvent trop générique ou inexistante, augmentant le potentiel de failles (CYU 8.4). B est faux, aucun test rigoureux n'est garanti. C inverse la réalité du risque. D est trop absolu : le COTS reste maîtrisable par due diligence.

  2. Quelles sont, dans l'ordre, les quatre phases de l'acquisition logicielle via développement third-party ?

    • A Planning ; Contracting ; Monitoring, acceptance and deployment ; Ongoing use and support.
    • B Contracting ; Planning ; Deployment ; Disposal.
    • C RFP ; SOW ; ROI ; Sustainment.
    • D Design ; Build ; Test ; Maintain.
    Réponse & justification

    Réponse : A — Planning ; Contracting ; Monitoring, acceptance and deployment ; Ongoing use and support.

    A est correcte et respecte l'ordre du manuel. B inverse Planning et Contracting et tronque la fin. C confond des artefacts (RFP, SOW, ROI) avec des phases. D décrit un cycle de développement générique, pas le processus d'acquisition.

  3. Dans le modèle cloud, qui est responsable du système d'exploitation et de la configuration des données en IaaS ?

    • A Le client, qui conserve la responsabilité de l'OS, des données et de la configuration.
    • B Le fournisseur, qui assume toute la sécurité comme en SaaS.
    • C Personne : la responsabilité disparaît dans le cloud.
    • D Un MSSP obligatoirement désigné par le fournisseur.
    Réponse & justification

    Réponse : A — Le client, qui conserve la responsabilité de l'OS, des données et de la configuration.

    A est correcte : la shared responsibility laisse au client de l'IaaS l'OS, les données et la configuration (une mauvaise config de bucket est sa faute). B confond IaaS et SaaS. C est faux, la responsabilité est partagée, pas annulée. D invente une obligation inexistante.

  4. Quel est le but principal d'un Software Bill of Materials (SBOM) ?

    • A Inventorier de façon machine-readable les composants et versions pour identifier vite les produits affectés par une vulnérabilité.
    • B Analyser statiquement votre propre code source à la recherche de défauts.
    • C Remplacer le risk assessment lors d'une M&A.
    • D Garantir qu'un logiciel open source est sans vulnérabilité.
    Réponse & justification

    Réponse : A — Inventorier de façon machine-readable les composants et versions pour identifier vite les produits affectés par une vulnérabilité.

    A est correcte : le SBOM est la nomenclature des composants et versions ; quand une faille frappe une bibliothèque répandue, on interroge les SBOM pour savoir en minutes quels produits sont touchés. B décrit le SAST. C est faux, le SBOM ne remplace pas un risk assessment. D contredit le fait qu'aucun inventaire ne supprime les vulnérabilités.

Points essentiels à retenir

  • L'acquisition third-party suit quatre phases (Planning, Contracting, Monitoring/Acceptance/Deployment, Ongoing use & support) ; le SOW porte les exigences, le RFP sollicite les fournisseurs, le ROI se compare au hurdle rate.
  • Un CMM élevé ne prouve pas le software assurance : vérifiez-le explicitement.
  • Linus's law plaide pour l'open source et la security by obscurity ne marche pas, mais l'ouverture ne garantit pas zéro vulnérabilité.
  • Legacy = encore supporté/remédiable ; orphaned = insupportable, à remplacer ou abandonner (Windows XP UK).
  • Une M&A fait hériter de risques cachés (CM incompatibles, breaches non documentées, identités compromises) ; cas Marriott 2016-2020.
  • Le COTS est plus dangereux que le bespoke (one-size-fits-all) mais maîtrisable par due diligence (CVE, réputation, mises à jour signées).
  • Cloud SaaS/PaaS/IaaS : shared responsibility et passage CapEx vers OpEx ; SCA et SBOM gèrent le risque de supply chain.
Module 7 Objectif 8.5 150 min Avancé

Secure coding : vulnérabilités et attaques

Prérequis : Modules 1-6.

Les vulnérabilités logicielles sont auto-induites : par ceux qui conçoivent, ceux qui programment, ceux qui déploient et ceux qui utilisent le logiciel. Pour soutenir efficacement la posture de sécurité de son organisation, le security professional n'a pas besoin de devenir software engineer, mais il lui faut une connaissance opérationnelle des fondamentaux : comment un logiciel est construit, traduit et déployé, et comment chacune de ces couches ouvre des vulnérabilités exploitables. Ce module couvre la première partie de l'objectif 8.5 : du source code au code exécutable et aux attaques par arbitrary code execution ; procédural vs object-oriented et les générations de langages ; les concepts OO (encapsulation, inheritance, polymorphism, polyinstantiation) et les systèmes OO distribués (CORBA, ORB, RMI, EJB, DCOM) ; le spectre de confiance des fournisseurs de code et le mobile code ; les erreurs exploitables courantes (buffer overflow, malformed input, SQL injection, XSS) ; les covert channels et le memory/object reuse ; et les vecteurs d'attaque temporels (social engineering, TOCTOU, race conditions, between-the-lines, trapdoors).

Objectifs pédagogiques

  • Distinguer source code, object/executable code, intermediate code et arbitrary code, et les outils de traduction (assemblers, compilers, interpreters).
  • Opposer procédural et object-oriented et situer les cinq generations de langages (1GL à 5GL).
  • Expliquer les concepts OO - encapsulation, inheritance, polymorphism, polyinstantiation - et les systèmes OO distribués (CORBA/ORB, RMI, EJB, DCOM).
  • Évaluer le spectre de confiance des fournisseurs de code et les contrôles du mobile code (sandbox, signature cryptographique).
  • Analyser les erreurs exploitables courantes : buffer overflow, malformed input, SQL injection, cross-site scripting, et leurs contre-mesures (bounds checking, strong typing, defensive programming).
  • Reconnaître les covert channels (storage/timing, witting/unwitting), le data remanence et les vecteurs temporels (TOCTOU, race condition, between-the-lines, trapdoor).

Critères de réussite

  • Vous triez source / object / intermediate / arbitrary code sans hésiter et associez chaque outil de traduction à ce qu'il produit.
  • Vous nommez le concept OO qui prévient l'inference (polyinstantiation).
  • Vous expliquez le mécanisme d'un buffer overflow et trois contre-mesures.
  • Vous tranchez TOCTOU vs race condition et identifiez une between-the-lines attack.

7.1 Du source code au code exécutable

Tableau opposant assemblers, compilers et interpreters selon ce qu'ils produisent et la voie d'attaque par arbitrary code
Figure 7.1 · Attaques contre le code exécutable

Le processus de développement traduit les idées des utilisateurs en un jeu d'instructions et de données qu'un ordinateur exécute. Cette traduction empile plusieurs couches, chacune s'éloignant du "business speak" des utilisateurs pour se rapprocher des chiffres binaires manipulés par le hardware. Quatre formes de code structurent cette descente. Le source code est un ensemble d'instructions écrites sous forme lisible par l'humain (mots, nombres, opérateurs, ponctuation) qui suit la syntax (structure) et la semantics (sens) d'un langage donné ; plusieurs programmes source corrects et complets peuvent implémenter le même design. L'executable code, aussi appelé object code, est la représentation binaire du jeu d'instructions machine que le CPU et le hardware cible exécutent directement.

L'intermediate code se situe entre le source code lisible et les valeurs binaires chargeables en mémoire. Son usage principal est d'offrir la machine independence ou portabilité : comme les CPUs ont des jeux d'instructions différents, un logiciel spécialisé (runtime engine) est requis pour chaque type de CPU. Le Java P-Code (bytecode) et le Microsoft Common Intermediate Language (CIL) sont les deux exemples canoniques. L'arbitrary code, lui, n'est pas une forme de langage : dire qu'une vulnérabilité permet l'"arbitrary code execution" signifie seulement que l'attaquant peut tromper le CPU pour qu'il exécute un jeu d'instructions différent de celui prévu par les concepteurs.

Les outils de traduction se répartissent selon ce qu'ils produisent (Figure 8.13). Les assemblers traduisent une instruction en une instruction machine et produisent des fichiers d'executable code (.exe) ; bénéfices : protection du source code, exécution répétable, vue directe du hardware, exécution rapide. Les compilers traduisent une instruction en de nombreuses instructions, produisent aussi des .exe ; vue orientée business logic, vitesse modérée. Les interpreters traduisent une instruction en de nombreux opcodes intermediaires sous forme de flux temps réel, traduits au runtime (système runtime Java) ; bénéfice clé : portabilité accrue entre architectures et debug/traceback au niveau de l'instruction. Piège d'examen : la plupart des vulnérabilités exploitables sont introduites au niveau du source code (erreurs de traduction du design vers le langage), rarement par les outils eux-mêmes - même si des versions infestées de malware de ces outils existent.

Mots-clés EN Source code Object / executable code Intermediate code Arbitrary code Assembler Interpreter
Points clés
  • Source = lisible ; object/executable = binaire CPU ; intermediate = portable ; arbitrary = instructions non prévues.
  • Intermediate code (Java P-Code, CIL) donne la machine independence via un runtime engine.
  • Arbitrary code execution = tromper le CPU pour exécuter un autre jeu d'instructions.
  • Assembler = 1 vers 1 ; compiler = 1 vers plusieurs ; interpreter = 1 vers opcodes intermediaires au runtime.
  • La plupart des vulnérabilités naissent au niveau du source code, rarement des outils.

7.2 Faire exécuter des instructions à la machine

Schéma des chemins de l'idée humaine vers l'exécution machine via assemblers, compilers et interpreters
Figure 7.2 · Faire exécuter des instructions à la machine

Aux débuts de la programmation, les développeurs codaient directement le programme objet (machine ou binaire) en écrivant les opcodes en binaire, puis en chargeant ces chaînes en mémoire pour exécution. L'assembly language a facilité ce travail : il existe une correspondance directe entre les mnemonics assembleur et des opcodes précis (MOV pour move, CMP pour compare, DEC pour decrement, ADD), mais les fichiers sont formatés de façon relativement lisible plutôt que comme des suites de nombres hexadécimaux ou binaires. L'assembly est dit low-level car une ligne (un statement) se traduit, dans presque tous les cas, en une seule instruction machine, et il est spécifique à un CPU donné.

Les high-level languages élèvent le niveau d'abstraction : le source code y est plus compréhensible pour l'humain. Un programmeur compétent y exprime des opérations complexes de façon concise, et s'il respecte des frameworks de codage standard, son code reste lisible et donc maintenable. La Figure 8.14 résume les chemins de l'idée humaine à l'exécution machine. Les compiled languages (FORTRAN, Modula) imposent deux étapes : on écrit le source code lisible, puis on le compile en object code (parfois via linkers et utilitaires) ; le source ne peut pas être exécuté directement. Les interpreted languages raccourcissent le cycle : l'interpreter traduit le source en langage machine au moment de l'exécution.

Le compromis est clair. Un programme compilé est natif pour le CPU, s'exécute directement depuis l'object code et tourne donc bien plus vite ; certains compilers optimisent en plus le code. Un programme interprété paie en performance car la traduction est refaite à chaque exécution, mais il gagne en portabilité : tant qu'un interpreter existe pour la plateforme cible, l'application tourne sur des machines variées (les scripting languages en sont l'exemple). Piège d'examen : ne confondez pas "compilé = rapide mais lié à la plateforme" et "interprété = portable mais plus lent" ; l'examen teste régulièrement cette opposition vitesse/portabilité.

Mots-clés EN Assembly language Mnemonic Compiled language Interpreted language Level of abstraction
Points clés
  • Assembly = low-level, 1 statement = 1 instruction, lié à un CPU précis.
  • Compiled : 2 étapes (source puis object code), non exécutable directement, mais rapide.
  • Interpreted : traduction au runtime à chaque exécution, plus lent mais portable.
  • Scripting languages = exemples de portabilité par interpretation.
  • Piège : opposition vitesse (compilé) vs portabilité (interprété).

7.3 Procédural vs objet et générations de langages

Concepts objet, coupling et cohesion
Figure 7.3 · Concepts objet, coupling et cohesion

Deux façons de penser le travail structurent la programmation. Le procedural thinking raisonne en séquences d'étapes (avec branches conditionnelles, boucles, contrôles de séquence) : le procedural programming met l'accent sur le flux logique des étapes. Une procédure est un ensemble de logiciel qui réalise une fonction précise, demande des entrées spécifiques et produit des sorties définies (y compris des signaux d'erreur), et peut en appeler ("call") d'autres. L'object-oriented thinking raisonne en paquets nommés d'idées, d'étapes, de données et de logique : chaque paquet n'a pas besoin de connaître l'intérieur des autres. L'object-oriented programming (OOP) définit un object comme un ensemble de logiciel offrant des methods, internes à l'objet, que du code externe peut demander d'exécuter. Les deux approches encouragent le code reuse, l'ajout/modification de fonctionnalité, le refactoring, le data modeling, les data quality standards et les security practices (bibliothèques préapprouvées).

Les langages se classent aussi par level of abstraction (proximité du binaire) et par data type enforcement : la capacité d'un langage à empêcher des opérations sur des types incompatibles. On ne peut pas additionner "3" à un nom de personne ; ajouter 3 à une date suppose de trancher s'il s'agit de jours, mois ou années. Un strong typing protège donc le programmeur des erreurs de type. S'ajoutent le data protection / data hiding (empêcher un module de lire ou altérer les données privées d'un autre) et le code protection / logic hiding (empêcher de lire ou altérer le code source, intermédiaire ou exécutable d'un autre module).

Les générations de langages structurent l'historique. 1GL : machine language, opcodes, object code exécutés directement par le CPU - rares aujourd'hui, sauf reverse engineering de malware et craft de payloads binaires. 2GL : assembly language, symboles abrégeant les instructions, interaction directe avec le hardware (kernels, device drivers) - précieux aussi pour les attaquants. 3GL : HOLs utilisant des mots significatifs (COBOL, FORTRAN, BASIC, Java, C). 4GL : report generators, application generators, plateformes "codeless" drag-and-drop, scripting languages. 5GL : natural language interfaces, langages logiques ou contraint-based, parfois appuyés sur l'IA (NLP, machine learning), largement tombés en désuétude dès les années 1990. Piège d'examen : retenez le mapping 1GL machine, 2GL assembly, 3GL HOL, 4GL générateurs/codeless, 5GL langage naturel, et que chaque génération introduit des contrôles de sécurité et de fiabilité absents de la précédente.

Deux metriques de qualite de conception structurent le decoupage en modules ou objets : le coupling (couplage) mesure le degre de dependance entre modules, et la cohesion mesure a quel point les elements d'un meme module concourent a une seule responsabilite. L'objectif de conception est un low coupling (modules independants, modifiables isolement) et une high cohesion (chaque module fait une chose et la fait bien). Un code a fort couplage et faible cohesion est fragile : une modification se propage partout, la reutilisation securisee devient impossible et la surface d'attaque augmente. L'encapsulation favorise directement low coupling et high cohesion.

Mots-clés EN Procedural programming Object-oriented programming (OOP) Data type enforcement / strong typing Data hiding Code / logic hiding Language generations (1GL-5GL) Coupling Cohesion
Points clés
  • Procedural = séquence d'étapes ; OOP = objects avec methods, on s'intéresse aux objets pas aux actions.
  • Strong typing (data type enforcement) bloque les opérations sur types incompatibles.
  • Data hiding protège les données privées ; logic/code hiding protège le code.
  • 1GL machine, 2GL assembly, 3GL HOL (COBOL, Java, C), 4GL générateurs/codeless, 5GL langage naturel.
  • Chaque génération ajoute des contrôles de sécurité/fiabilité absents de la précédente.
  • Conception saine : low coupling + high cohesion ; l'encapsulation y contribue directement.

7.4 Concepts orientés objet et systèmes OO distribués

Schéma du processus Object Request Broker reliant objets client et serveur à travers le réseau
Figure 7.4 · Le processus Object Request Broker (ORB)

L'OOP renverse la perspective : on s'intéresse aux objects à manipuler plutôt qu'à la logique qui les manipule. Un object est un bloc d'instructions offrant des methods de travail sur des données ; il encapsule à la fois les données et les instructions de traitement, et se réutilise dans tout programme qui en a besoin (Java, Python, C++, C#, Ruby, Smalltalk). Quatre caractéristiques dominent. L'encapsulation : une classe ne définit que les données qui la concernent, et une instance ne peut pas accéder accidentellement à d'autres données - c'est le data hiding. L'inheritance : on définit des subclasses partageant tout ou partie des caractéristiques de la super class ; si la sécurité est bien implémentée dans la classe haute, les sous-classes en héritent. Le polymorphism : un objet peut "prendre plusieurs formes" selon son usage, donc une modification ne se propage pas à toutes les applications - mais attention, des methods sécurisées peuvent être perdues à travers le polymorphism, à évaluer soigneusement.

La polyinstantiation est la caractéristique OO la plus utile à la sécurité. Elle crée une nouvelle version d'un objet sous le même identifier/key, de sorte que différents processus utilisateurs ont leur copie locale ; elle permet à différentes versions de la même ressource d'exister à différents niveaux de classification. Elle empêche ainsi des utilisateurs ou processus de niveau inférieur de connaître l'existence d'un niveau supérieur. C'est précisément ce qui prévient l'inference : l'inference est la capacité d'un utilisateur à déduire une information plus sensible en observant une information autorisée. La polyinstantiation contre les inference attacks contre les bases de données en laissant coexister plusieurs versions à des classifications distinctes.

Les distributed OO systems découpent l'application en composants logiques répartis sur plusieurs machines, qui communiquent et s'appellent à la demande, code téléchargé depuis des machines distantes de façon transparente. Exemples : CORBA, Java RMI, EJB (modèle Sun fournissant un environnement proche de CORBA via des API et s'appuyant sur RMI), et DCOM. Pour standardiser la localisation, l'initiation et l'envoi de requêtes aux objets, l'Object Management Group (OMG) a créé l'Object Request Broker (ORB), pièce centrale de CORBA (Figure 8.15). L'ORB s'intercale entre client et serveur, indépendamment du processeur ou du langage ; côté sécurité, il traite toutes les requêtes et peut appliquer les politiques. Le CORBA security service couvre quatre types de policies : access control, data protection, non-repudiation, auditing. Piège d'examen : associez ORB à CORBA/OMG, et retenez que polyinstantiation est la réponse au mot-clé "inference".

Mots-clés EN Encapsulation Inheritance Polymorphism Polyinstantiation Object Request Broker (ORB) CORBA / RMI / EJB / DCOM
Points clés
  • Encapsulation = data hiding ; inheritance = héritage des caractéristiques et de la sécurité.
  • Polymorphism = plusieurs formes ; attention à la perte de methods sécurisées.
  • Polyinstantiation = versions à différents niveaux de classification : PRÉVIENT l'inference.
  • ORB (créé par l'OMG) est la pièce centrale de CORBA, indépendant du CPU/langage.
  • Distributed OO : CORBA, RMI, EJB (sur RMI), DCOM ; CORBA security = access control, data protection, non-repudiation, auditing.

7.5 Qui écrit votre code source ? Le spectre de confiance

Le spectre de confiance du code source
Figure 7.5 · Le spectre de confiance du code source

Demander "qui écrit votre code source ?" revient à demander comment on assure la sécurité et l'intégrité de sa supply chain logicielle. Les fournisseurs se rangent sur un spectre de confiance décroissant. En haut, les major hardware and systems vendors disposent en général de processus robustes et fiables garantissant l'intégrité et la sécurité de leurs produits. Viennent ensuite les applications software providers, parfois de grandes entreprises servant des millions d'utilisateurs, dont les mises à jour et le support sûrs renforcent la trustworthiness. Les third-party developers produisent du logiciel sur mesure ou tailorent un produit commercial, mais ne doivent être engagés que si l'on s'accorde sur la façon de fournir et d'évaluer la sécurité. Les in-house developers travaillent dans un cadre formalisé de quality assurance, configuration management et security assessment, offrant autant de contrôle et d'accountability que l'organisation veut bien y investir.

Les couches suivantes deviennent de moins en moins sûres. Les open-source providers offrent un support après téléchargement variable, parfois nul, et pas toujours via des moyens vérifiables comme des téléchargements signés (avec aussi shareware ou freeware). Les citizen programmers - membres de l'organisation qui codifient leur savoir en scripts ou programmes 4GL, souvent à partir d'exemples trouvés en ligne et légèrement modifiés - opèrent presque toujours hors de portée des processus de software quality, de configuration management ou de security assessment, avec peu d'égard pour la sécurité. Tout en bas, le mobile code est la forme la moins intrinsèquement fiable : les propriétaires du système récepteur n'ont aucune visibilité ni influence sur son développement.

Le mobile code (aussi appelé executable content, mobile agents, downloadable code, active capsules) déplace le code lui-même, pas seulement les données, souvent sans action ni consentement explicite de l'utilisateur. Distinction d'examen : les mobile agents migrent d'hôte en hôte à des moments et des endroits qu'ils choisissent, avec une forte autonomie, donc difficiles à contrer s'ils sont malveillants ; les applets sont téléchargés suite à une action utilisateur puis exécutés du début à la fin sur sa machine (ActiveX, Java applets, scripts dans le navigateur). Comme le code finira par tourner localement, deux contrôles limitent le risque : faire tourner le code dans un environnement restreint où il ne peut nuire (sandbox), et utiliser une authentification cryptographique (certificats et signatures) pour authentifier la provenance du code. Le sandbox limite l'accès aux ressources système (file system, CPU, réseau).

Mots-clés EN Trust spectrum Citizen programmers Mobile code / executable content Mobile agent Applet Sandbox
Points clés
  • Confiance décroissante : vendeurs majeurs > éditeurs > third-party > in-house > open-source > citizen programmers > mobile code.
  • Mobile code déplace le code, pas la donnée, souvent sans consentement de l'utilisateur.
  • Mobile agent = autonome, migre seul ; applet = téléchargé sur action, exécuté localement.
  • Deux contrôles du mobile code : sandbox (restreindre les ressources) et signature cryptographique (authentifier la source).
  • Citizen programming = hors gouvernance, risque significatif.

7.6 Buffer overflow et erreurs d'entrée exploitables

Schéma d'un buffer de 16 octets débordé dont l'excédent écrase la mémoire d'instructions adjacente
Figure 7.6 · Buffer overflow

Un buffer est une zone contiguë de stockage utilisée pour transférer des données d'un device, programme ou processus à un autre. Une condition de buffer overflow existe quand ce buffer reçoit plus de données qu'il n'a été conçu pour en contenir : trop de texte dans une boîte de dialogue, une URL beaucoup trop longue, un paquet réseau surdimensionné. L'application déborde alors la mémoire allouée au buffer et écrit l'excédent dans la mémoire système, qui peut être réservée au traitement des instructions. Si l'attaque est menée habilement, l'excédent contient des instructions en langage machine : au prochain pas d'exécution, le code de l'attaquant s'exécute (Figure 8.16). Souvent un code négligent laisse une boucle écrire au-delà des 16 octets déclarés du buffer ; la vulnérabilité existe si la source peut pousser plus de 16 octets sans que le logiciel ne s'en aperçoive, écrivant le 17e octet hors du buffer. Le résultat visé est de placer les instructions de l'attaque en mémoire et de les faire exécuter - c'est l'arbitrary code execution, qui sert typiquement à élever les privilèges.

Le buffer overflow est techniquement une forme de malformed input. Un logiciel sûr doit faire deux choses : n'accepter une entrée que si elle passe une série de constraint checks bien définis (sinon la rejeter), et ne jamais mal se comporter, échouer anormalement ou autoriser l'arbitrary code execution quand l'entrée ne respecte pas toutes les contraintes. Les malformed input attacks fournissent des données incohérentes pour provoquer un dysfonctionnement : une app bancaire peut accepter un retrait maximal de £10 000, mais tenter d'en saisir £11 000 ne doit jamais la faire planter. Le defensive programming traduit la business logic sur les entrées acceptables et dangereuses en code qui traite les bonnes et bloque sûrement les injections. Subtilité : une URL sur liste de blocage exprimée en ASCII plutôt qu'en Unicode peut échapper au firewall alors que le navigateur la convertira sans peine.

Les contrôles contre l'incomplete parameter checking vont au-delà du test de chaque paramètre isolément : le logiciel récepteur doit tester l'ensemble des valeurs pour cohérence, validité et complétude (une false invoice attack peut utiliser un customer ID inexistant mais conforme au format). Les buffer overflows se préviennent à plusieurs niveaux : enforcer le bounds checking (interdire l'accès au-delà du buffer), utiliser un langage à strong typing isolant le code des données, et détecter/intercepter proprement les erreurs (même un divide-by-zero peut ouvrir une exploitation). Deux attaques d'injection découlent du même défaut : la SQL injection, où des structures syntaxiques trompent les filtres qui voient la requête comme un commentaire et non une instruction, renvoyant plus d'informations que prévu ; et le cross-site scripting (XSS), où un site acceptant des entrées d'utilisateurs (un blog) ne détecte pas que l'entrée est un active scripting exécuté ensuite chez d'autres utilisateurs.

Mots-clés EN Buffer overflow Bounds checking Defensive programming Malformed input attack SQL injection Cross-site scripting (XSS)
Points clés
  • Buffer overflow : trop de données dépassent le buffer et écrasent la mémoire d'instructions.
  • But de l'attaque : placer du code en mémoire et le faire exécuter = arbitrary code execution (élévation de privilèges).
  • Buffer overflow = forme de malformed input ; défense = constraint checks + ne pas crasher.
  • Contre-mesures : bounds checking, strong typing (isole code/données), gestion des erreurs, defensive programming.
  • SQL injection (filtre trompé) et XSS (active scripting) découlent d'une input validation défaillante.

7.7 Covert channels et réutilisation de mémoire

Covert channels : storage vs timing
Figure 7.7 · Covert channels : storage vs timing

Un covert channel (ou covert path) est un canal de communication entre deux processus ou plus qui transfère de l'information en violant une politique ou une exigence de sécurité. Il emprunte souvent des moyens de transmission qu'on ne considère pas comme des communications, ce qui le rend indétectable ou non bloqué par les méthodes de sécurité routinières. Il se crée de deux façons : wittingly, par la conception coopérative et délibérée des deux processus pour créer et gérer le canal ; ou unwittingly, par un processus hostile exploitant des expositions d'information jusque-là non reconnues du système cible. En facilitant le passage furtif d'information, les covert channels servent à exfiltrer des données sensibles mais aussi de mécanisme de command-and-control dans une attaque par advanced persistent threat (APT).

Deux types s'opposent. Le covert storage channel (CSC) implique l'usage direct ou indirect (lecture/écriture) d'un emplacement de stockage par un processus, et l'usage du même emplacement par un autre : emplacements mémoire, secteurs disque partagés, cache, ou bits inutilisés dans les en-têtes de trafic réseau. Le CSC peut violer la politique directement (si le processus hostile opère à un niveau de sécurité inférieur) ou indirectement (maillon d'un pipeline d'exfiltration). Le covert timing channel (CTC) modifie la temporisation du comportement d'une ressource pour transmettre de l'information à un processus observateur, comme moduler de l'information sur un train d'impulsions ; exemple : étirer le temps de réponse à un handshake juste avant le timeout pour signaler. Les CTC sont souvent difficiles à détecter. Tout covert channel s'appuie sur une ressource partagée : on les identifie en conception en repérant les ressources partagées susceptibles d'abus, puis on décide lesquels mitiger (redesign, access controls plus stricts).

Le memory or object reuse pose un risque connexe. La gestion mémoire alloue, désalloue puis réalloue des sections à différents processus (RAM, cache, disque). Si de l'information résiduelle subsiste quand une section est réassignée, le processus suivant peut lire et réutiliser ces données : c'est un memory leak, exemple typique de CSC (le plus souvent unwitting). Cela vaut pour toute ressource où l'on peut stocker : mémoire principale, file storage, buffers matériels, et surtout le fichier de pagination/swap, souvent laissé non protégé et riche en informations sensibles. Les data remanence controls limitent voire éliminent ce risque : du hardware/firmware jusqu'aux applications, tout élément doit garantir que le contenu de ses ressources mémoire est randomisé, mis à zéro (zeroed) ou autrement écrasé (overwritten) avant d'être alloué à un autre processus. Piège d'examen : memory leak et page/swap non protégé sont des exemples de CSC, pas de CTC.

Mots-clés EN Covert channel Covert storage channel (CSC) Covert timing channel (CTC) Witting / unwitting Memory / object reuse Data remanence controls
Points clés
  • Covert channel = transfert violant une politique, souvent invisible aux contrôles routiniers ; sert à l'exfiltration et au C2 d'APT.
  • Witting = conçu volontairement ; unwitting = exploité par hasard.
  • CSC = stockage partagé (mémoire, disque, bits d'en-tête) ; CTC = modulation de la temporisation.
  • Memory leak et swap non protégé = exemples de CSC (unwitting).
  • Data remanence : randomiser, zéro ou écraser la mémoire avant de la réallouer.

7.8 Vecteurs d'attaque temporels : TOCTOU, race conditions, backdoors

Schéma d'une attaque TOCTOU où l'attaquant redirige le second processus entre la vérification des credentials et leur usage
Figure 7.8 · Attaque Time of Check vs Time of Use

Les attaques contre les systèmes distribués s'appuient souvent sur deux leviers complémentaires. Le social engineering manipule émotionnellement une victime (déception, intimidation, abus de hiérarchie, exploitation de la culpabilité ou du désir d'aider) pour obtenir une information ou un accès et contourner les contrôles ; il pave la voie aux attaques techniques plus sophistiquées. La formation et l'awareness des end-users sont la première et meilleure ligne de défense, au-delà du seul phishing par email.

Le Time of Check vs Time of Use (TOCTOU) exploite un changement de la control information entre le moment où les fonctions de sécurité vérifient une variable et le moment où cette variable est utilisée. Exemple : un employé connecté le matin est licencié, son compte est désactivé, mais comme il ne s'est pas déconnecté, sa session conserve ses privilèges - d'où l'importance du deprovisioning. Dans la Figure 8.17, le Process 1 valide les credentials pour ouvrir le fichier A (non sécurisé) et le Process 2 accède au fichier ; l'attaquant redirige le Process 2 vers un fichier sécurisé (paie) après l'autorisation mais avant l'exécution. Contre-mesure : le software locking (verrou sur le fichier/ressource) empêche la substitution du fichier pendant la validation d'accès.

Une race condition existe quand deux tâches dépendent chacune de l'achèvement de l'autre pour leur entrée, et doivent s'exécuter dans le bon ordre (Process 1 puis Process 2). Si un attaquant perturbe cet ordre, il manipule le résultat combiné : par exemple forcer le processus d'authorization à s'exécuter avant l'authentication accorderait l'accès sans authentifier l'identité. La parade est d'imposer des atomic operations et de ne pas découper les tâches critiques. La différence est subtile mais cruciale : dans une race condition, l'attaquant contrôle le résultat en forçant deux processus à s'exécuter hors séquence ; dans un TOCTOU, l'attaquant s'insère entre deux processus en cours d'exécution pour rediriger le second. La between-the-lines attack relève d'une autre famille : l'attaquant exploite des lignes de télécommunication tapées (piggyback sur une ligne en cours) pour injecter de fausses données - à ne pas confondre avec un backdoor, une race condition ou un buffer overflow. Enfin, trapdoor, backdoor et maintenance hook désignent un moyen caché de transfert de contrôle laissé dans le code, qui offre une entrée non prévue contournant l'authentification.

Mots-clés EN Social engineering TOCTOU Race condition Software locking / atomic operations Between-the-lines attack Trapdoor / backdoor / maintenance hook
Points clés
  • Social engineering manipule la victime et pave la voie aux attaques techniques ; awareness = meilleure défense.
  • TOCTOU : changement de la control information entre le check et le use ; parade = software locking.
  • Race condition : ordre d'exécution forcé hors séquence ; parade = atomic operations.
  • Distinction : race condition = mauvais ordre ; TOCTOU = insertion entre deux process pour rediriger le second.
  • Between-the-lines = ligne télécom tapée + fausses données ; trapdoor/backdoor/maintenance hook = entrée cachée.

Cas d'étude

Cas · Cas d'étude

La copie d'entrée dans un tableau de 16 octets

Contexte : Un développeur revoit un module en C écrit par un collègue. Le code copie une entrée utilisateur (saisie dans un champ de formulaire) directement dans un tableau local déclaré à 16 octets, à l'aide d'une boucle de copie, sans jamais vérifier la taille de l'entrée avant de l'écrire. Le champ amont n'impose aucune limite de longueur côté serveur. Le développeur se demande quelle vulnérabilité ce code introduit et comment la corriger proprement.

Question : Quelle est la vulnérabilité, par quel mécanisme peut-elle être exploitée, et quelles contre-mesures de secure coding appliquer ?

Topics traités buffer overflowbounds checkingarbitrary code executiondefensive programming
Voir l'analyse et la correction

La vulnérabilité est un buffer overflow. Le tableau de 16 octets est un buffer ; comme la boucle écrit sans bounds checking, une entrée de 17 octets ou plus déborde la zone allouée et écrit le 17e octet et les suivants sur la mémoire adjacente - potentiellement de la mémoire réservée au traitement d'instructions. Mécanisme d'exploitation : un attaquant pousse une entrée surdimensionnée dont l'excédent contient des instructions en langage machine ; au prochain pas d'exécution, le CPU exécute ce code injecté. C'est l'arbitrary code execution, qui sert typiquement à élever les privilèges. Techniquement, c'est aussi une forme de malformed input, puisque le logiciel accepte une entrée qui ne respecte aucune contrainte de longueur.

La correction agit à plusieurs niveaux. D'abord le bounds checking : interdire toute écriture au-delà des 16 octets (copier au plus 15 octets utiles + terminateur, ou rejeter l'entrée trop longue) - en C, remplacer une copie non bornée par une copie à longueur bornée et tester explicitement la taille. Ensuite le strong typing / data type enforcement et l'isolation du code et des données, idéalement via un langage ou un framework qui les sépare. Enfin le defensive programming : valider l'entrée contre des constraint checks bien définis, rejeter proprement ce qui ne passe pas, et ne jamais crasher ni autoriser l'exécution arbitraire sur une entrée non conforme. La validation doit être faite côté serveur, le contrôle de longueur côté client étant contournable.

À retenir : Un buffer écrit sans bounds checking est un buffer overflow en puissance : l'excédent peut écraser la mémoire d'instructions et mener à l'arbitrary code execution. La parade combine bounds checking, strong typing/isolation code-données et defensive programming, validée côté serveur.

Éléments d'apprentissage clés
  • Un tableau écrit sans vérifier la taille de l'entrée est un buffer overflow exploitable.
  • L'excédent peut contenir des instructions machine exécutées au pas suivant = arbitrary code execution (élévation de privilèges).
  • Le buffer overflow est techniquement une forme de malformed input.
  • Contre-mesures : bounds checking, strong typing + isolation code/données, defensive programming, validation côté serveur.
Piège d'examen

Source vs object vs intermediate vs arbitrary code

Quatre termes que le quiz officiel (Q4) oppose. Source code = lisible par l'humain, suit syntax et semantics d'un langage. Object code (= executable code) = représentation binaire exécutée directement par le CPU. Intermediate code = forme portable entre source et binaire, exécutée via un runtime engine pour la machine independence (Java P-Code/bytecode, Microsoft CIL). Arbitrary code n'est PAS un langage : c'est l'exécution, par ruse, d'instructions non prévues par les concepteurs ("arbitrary code execution"). Ne traitez pas l'arbitrary code comme une 4e forme de langage : c'est un résultat d'attaque, pas une étape de compilation.

Piège d'examen

TOCTOU vs race condition

Deux attaques temporelles que l'examen confond volontiers. Dans un TOCTOU (Time of Check vs Time of Use), l'attaquant s'insère ENTRE le check et le use : la control information change entre la vérification et l'utilisation, et l'attaquant redirige le second processus (ex : vers un fichier de paie). Parade : software locking. Dans une race condition, l'attaquant force un ORDRE d'exécution incorrect entre deux processus qui devaient s'exécuter en séquence (ex : authorization avant authentication). Parade : atomic operations. Mémo : TOCTOU = insertion entre check et use ; race condition = inversion de l'ordre.

Piège d'examen

Between-the-lines attack

Cible du quiz Q7. La between-the-lines attack consiste à exploiter des lignes de télécommunication tapées (piggyback sur une ligne active) pour injecter de fausses données dans la session. Ne la confondez pas avec : un backdoor (entrée cachée laissée dans le code), une race condition (ordre d'exécution forcé), ou un buffer overflow (débordement de buffer). Le mot-clé discriminant est l'idée de ligne télécom interceptée + injection de données dans le flux.

Piège d'examen

Le concept OO qui prévient l'inference

Visé par le quiz Q6. Parmi encapsulation, inheritance, polymorphism et polyinstantiation, seule la polyinstantiation prévient l'inference. Elle crée une nouvelle version d'un objet sous le même identifier/key, permettant à différentes versions de la même information d'exister à différents niveaux de classification - empêchant un niveau inférieur de déduire l'existence d'un niveau supérieur. Rappel : l'inference = déduire une information sensible en observant une information autorisée. Ne répondez pas "encapsulation" (c'est du data hiding) ni "polymorphism" (formes multiples) : le mot-clé inference appelle polyinstantiation.

Point de contrôle — Checkpoint

  1. Quelle affirmation distingue correctement le source code de l'object code ?

    • A Le source code est lisible par l'humain ; l'object code est la représentation binaire exécutée directement par le CPU
    • B Le source code est binaire ; l'object code est lisible par l'humain
    • C Les deux sont des formes portables exécutées par un runtime engine
    • D L'object code désigne des instructions non prévues exécutées par ruse
    Réponse & justification

    Réponse : A — Le source code est lisible par l'humain ; l'object code est la représentation binaire exécutée directement par le CPU

    Le source code suit syntax et semantics et se lit par l'humain ; l'object (= executable) code est la représentation binaire exécutée directement par le CPU. B inverse les deux. C décrit l'intermediate code (portable, runtime engine). D décrit l'arbitrary code execution, pas l'object code.

  2. Quel concept orienté objet permet de prévenir l'inference ?

    • A Polyinstantiation
    • B Encapsulation
    • C Inheritance
    • D Polymorphism
    Réponse & justification

    Réponse : A — Polyinstantiation

    La polyinstantiation crée des versions d'un objet à différents niveaux de classification sous le même identifier, empêchant un niveau inférieur de déduire l'existence d'un niveau supérieur : c'est ce qui prévient l'inference. L'encapsulation est du data hiding ; l'inheritance transmet les caractéristiques aux sous-classes ; le polymorphism permet plusieurs formes - aucun ne traite l'inference.

  3. Un attaquant pirate des lignes de télécommunication actives et y injecte de fausses données dans la session. De quelle attaque s'agit-il ?

    • A Between-the-lines attack
    • B Buffer overflow
    • C Race condition
    • D Backdoor
    Réponse & justification

    Réponse : A — Between-the-lines attack

    La between-the-lines attack exploite des lignes télécom tapées pour injecter de fausses données dans une session active. Le buffer overflow déborde un buffer en mémoire ; la race condition force un ordre d'exécution incorrect ; le backdoor est une entrée cachée laissée dans le code - aucun ne correspond à l'interception de ligne + injection.

  4. Quand une vulnérabilité permet de tromper un CPU pour qu'il exécute un jeu d'instructions alternatif et non prévu, on parle de :

    • A Arbitrary code execution
    • B Intermediate code generation
    • C Strong typing enforcement
    • D Polyinstantiation
    Réponse & justification

    Réponse : A — Arbitrary code execution

    L'arbitrary code execution désigne précisément le fait de tromper le CPU pour qu'il exécute un jeu d'instructions différent de celui prévu par les concepteurs (souvent via overwrite mémoire d'un buffer overflow). L'intermediate code est une forme portable ; le strong typing est un contrôle de types ; la polyinstantiation est un concept OO - aucun n'est ce résultat d'attaque.

  5. Quelle phrase distingue correctement un TOCTOU d'une race condition ?

    • A TOCTOU : l'attaquant s'insère entre le check et le use pour rediriger le second processus ; race condition : l'attaquant force un ordre d'exécution incorrect
    • B TOCTOU : l'attaquant force un ordre d'exécution incorrect ; race condition : l'attaquant déborde un buffer
    • C Les deux désignent l'injection de code via un buffer overflow
    • D TOCTOU se corrige par atomic operations ; race condition par signature cryptographique
    Réponse & justification

    Réponse : A — TOCTOU : l'attaquant s'insère entre le check et le use pour rediriger le second processus ; race condition : l'attaquant force un ordre d'exécution incorrect

    Dans un TOCTOU, l'attaquant s'insère entre le check et le use (la control information change) et redirige le second processus ; parade : software locking. Dans une race condition, il force deux processus à s'exécuter hors séquence ; parade : atomic operations. B inverse les définitions ; C confond avec le buffer overflow ; D associe les mauvaises parades.

Points essentiels à retenir

  • Source = lisible, object/executable = binaire CPU, intermediate = portable (runtime engine), arbitrary = instructions non prévues exécutées par ruse.
  • Assembler (1 vers 1), compiler (1 vers plusieurs), interpreter (opcodes au runtime, portabilité) ; vulnérabilités surtout au niveau source code.
  • OO : encapsulation = data hiding, inheritance, polymorphism, et polyinstantiation qui PRÉVIENT l'inference ; ORB est la pièce centrale de CORBA/OMG.
  • Confiance décroissante des fournisseurs jusqu'au mobile code ; contrôles du mobile code = sandbox + signature cryptographique.
  • Buffer overflow = débordement écrasant la mémoire d'instructions vers l'arbitrary code execution ; parade : bounds checking, strong typing, defensive programming.
  • Covert channels (CSC stockage, CTC timing ; witting/unwitting) et data remanence (randomiser/zéro/écraser) ; TOCTOU (entre check et use) vs race condition (ordre forcé), et between-the-lines (ligne télécom + fausses données).
Module 8 Objectif 8.5 130 min Avancé

Bases de données et concepts

Prérequis : Modules 1-7.

Les bases de données concentrent l'information la plus précieuse de l'organisation, ce qui en fait une cible de choix. Ce module couvre les menaces propres aux bases de données et aux data warehouses (avec le piège central aggregation/inference), l'architecture d'un DBMS, les grands modèles de bases (hierarchical, network, graph, relational, object-oriented), le test ACID, les langages et technologies de connexion (SQL, XML, ODBC, JDBC, OLE DB, ADO, approche 3-tier) et l'analytique avancée (metadata, OLAP, data mining, KDD, knowledge management). Le fil conducteur sécurité : polyinstantiation comme contre-mesure à l'inference.

Objectifs pédagogiques

  • Distinguer aggregation, inference et polyinstantiation et nommer les menaces classiques des bases et data warehouses.
  • Décrire l'architecture d'un DBMS et l'écosystème data warehouse, lake, farm et big data.
  • Comparer les modèles hierarchical, network, graph, relational et object-oriented et appliquer le test ACID.
  • Identifier les langages et technologies de connexion : SQL (DDL/DML/DCL), XML, ODBC, JDBC, OLE DB, ADO, approche 3-tier.
  • Expliquer metadata, OLAP, data mining, KDD et knowledge management ainsi que les contrôles de sécurité associés.

Critères de réussite

  • Je tranche aggregation vs inference et je cite polyinstantiation comme contre-mesure.
  • Je rattache Isolation au fait que les transactions sont invisibles aux autres jusqu'à leur fin.
  • Je reconnais KDD (visualisation/patterns) face à data mining (extraction).

8.1 Menaces aux bases de données et data warehouses

Schéma montrant l'aggregation de données non sensibles menant à l'inference, et la polyinstantiation comme contre-mesure
Figure 8.1 · Aggregation, inference et polyinstantiation

Les bases de données et data warehouses présentent une surface d'attaque riche. La menace phare est le couple aggregation / inference. L'aggregation consiste à combiner des données non sensibles issues de sources séparées pour produire une information sensible : un utilisateur assemble deux fragments non classifiés et obtient un ensemble classifié auquel il n'a pas droit, car la sensibilité du tout dépasse celle des parties. L'inference va plus loin : c'est la capacité à déduire une information plus sensible que celle à laquelle on est autorisé. Pouvoir agréger ouvre souvent la voie à l'inference.

Les autres menaces : les bypass attacks contournent les contrôles du front end (DBMS et query engine) en passant par d'autres voies que l'interface ou la CLI ; la compromission des database views, quand un utilisateur accède à des vues restreintes ou en modifie une (la view limite ce que l'on voit, pas les opérations possibles) ; les routes d'accès alternatives mais non équivalentes, car le modèle en couches offre plusieurs chemins vers la même donnée (view, requête directe, accès direct aux fichiers) dont tous ne sont pas protégés ; la data contamination par des entrées malformées au niveau champ, enregistrement, transaction ou fichier.

Le deadlocking (ou 'deadly embrace') survient quand deux processus concurrents détiennent chacun un verrou sur un objet et attendent le verrou de l'autre ; le système abort l'une des transactions (idéalement la moins coûteuse à roll back) pour débloquer la situation. Viennent ensuite le DoS (requête ou table scan qui sature les tables), la modification incorrecte (problème d'integrity), l'interception des données en transit lors d'un accès distant, les query attacks (outils ou SQL malformé pour contourner le trusted front end et ses views), l'accès physique/logique direct au serveur, le TOCTOU (du code change la donnée entre l'approbation de la requête et son affichage) et les attaques web (pages statiques ou dynamiques exposant des données sensibles via 'show code'). Piège : aggregation et inference sont les termes que l'examen attend ici, ne les confonds pas avec une simple unauthorized access.

Mots-clés EN Aggregation Inference Deadlock (deadly embrace) Database view TOCTOU Query attack
Points clés
  • Aggregation = combiner du non sensible vers du sensible ; inference = en déduire l'interdit.
  • Une view limite ce que l'on voit, pas les opérations effectuées sur elle.
  • Le deadlock se résout en abortant la transaction la moins coûteuse à roll back.
  • Les routes d'accès alternatives (view, requête directe, fichier) ne sont pas toutes protégées.
  • TOCTOU en base : la donnée change entre l'approbation et l'affichage de la requête.

8.2 L'environnement base de données et data warehouse

Architecture d'un DBMS avec database engine, interface vers l'OS et interface CLI client
Figure 8.2 · Architecture d'un DBMS

Une base de données est un dépôt d'information organisée et précieuse. Historiquement, les organisations géraient des fichiers, difficiles à maintenir et propices aux erreurs et incohérences. Les architectures de bases ont répondu à ce problème, avec le DBMS (Database Management System) en leur coeur : une suite d'applications qui gère les bases et leur environnement. Le coeur du DBMS est le database engine, application centrale qui réalise les fonctions CRUD (create, read, update, delete) et rend les données disponibles pour affichage ou export, en garantissant confidentiality, integrity et availability.

La base elle-même est une vaste collection structurée de tables de données persistantes et liées. Du point de vue de l'OS, c'est un ensemble d'espaces fichiers gérés par le DBMS, non lisibles utilement comme un fichier normal par d'autres applications. L'environnement complet peut inclure des VM, des composants middleware entre applications et engine, des utilitaires et de plus en plus un front end web. Chaque composant ajouté augmente la complexité et les exigences de sécurité : on sécurise une architecture en sécurisant chacun de ses composants.

Quand les organisations ont multiplié les bases, elles ont regroupé les données dans des data warehouses pour offrir un contexte plus riche à l'analytique, au trending et au reporting. Un data lake désigne de grandes collections de données non encore mises au format commun d'un warehouse ; un data farm est un endroit où l'analytique prédictive génère des données entre des points connus ou observés. L'ensemble de ces sources interconnectées via internet est appelé, de façon lâche, big data. Piège : data lake = données brutes non structurées en commun ; data warehouse = données intégrées et structurées pour l'analyse.

Mots-clés EN DBMS Database engine CRUD Data warehouse Data lake Big data
Points clés
  • Le database engine exécute le CRUD au coeur du DBMS.
  • Un data warehouse intègre des données de plusieurs bases pour l'analytique.
  • Data lake = brut non structuré en commun ; data farm = données générées par analytique prédictive.
  • On sécurise une architecture en sécurisant chacun de ses composants.
  • Pour l'OS, une base est un ensemble de fichiers non lisibles utilement hors du DBMS.

8.3 Modèles hiérarchique, réseau et graphe

Comparaison des modèles hiérarchique (arbre), réseau (linked lists) et graphe (noeuds et arcs)
Figure 8.3 · Modèles hiérarchique, réseau et graphe

Un database model décrit les relations entre les entités de données et fournit le cadre d'organisation. Tout modèle doit satisfaire des exigences minimales : transaction persistence (l'état après transaction est durable), fault tolerance and recovery via rollback (annuler proprement les transactions incomplètes ou invalides) et shadowing (réappliquer les transactions à une version antérieure, à l'aide du transaction logging), sharing entre plusieurs utilisateurs simultanés sans nuire à l'integrity, et security controls (confidentiality, integrity, availability, access controls, view definitions). À ne pas confondre : un database model décrit l'organisation/structure/architecture offerte par le DBMS, alors qu'un data model décrit les types de données propres à une organisation (un data model 'customer' liste name, address, etc.).

Le modèle hierarchical est le plus ancien (années 1950-60). Il stocke les données en enregistrements porteurs de valeurs de champs, regroupe les instances d'un même enregistrement en record type, et crée les liens via des relations parent-enfant en structure d'arbre. Puissant et adaptable pour organiser des données dissemblables, mais difficile à étendre quand de nouvelles fonctions métier apparaissent.

Le modèle network (aussi appelé CODASYL, 1959, à l'origine de COBOL) représente les données en réseau d'enregistrements et de sets reliés par des linked lists. Les record types équivalent aux tables du relationnel, et les set types expriment les relations entre deux record types. Plus performant que le hierarchical pour certaines fonctions, mais moins flexible que le relationnel. Il trouve aujourd'hui deux usages forts : le stockage haute performance/haut volume en parallèle (clouds, moteurs de recherche) et les graph databases. Le modèle graph représente noeuds (objets) et arcs étiquetés décrivant la nature de la connexion ; Neo4J est utilisé en détection d'insider threat, anti-blanchiment et contact tracing COVID-19. Piège : 'network' ne désigne pas un réseau informatique mais un réseau de liens entre enregistrements.

Mots-clés EN Hierarchical model Network model (CODASYL) Graph database Transaction persistence Rollback vs shadowing Database vs data model
Points clés
  • Hierarchical = arbre parent-enfant, le plus ancien et le moins extensible.
  • Network = CODASYL, réseau de liens (pas un réseau informatique), base des graph databases.
  • Graph = noeuds et arcs étiquetés (Neo4J : insider threat, anti-blanchiment).
  • Rollback annule l'incomplet ; shadowing réapplique à une version antérieure via logging.
  • Database model = structure du DBMS ; data model = types de données de l'organisation.

8.4 Le modèle relationnel, l'object-oriented et le test ACID

Le modèle relationnel illustré : tables, lignes (tuples), champs (attributes), primary key et join
Figure 8.4 · Le modèle relationnel : tables, lignes, champs

Le modèle relationnel structure les données en tables (ou relations) à deux dimensions : des colonnes représentent les variables, des lignes contiennent les instances de données, organisées en normal forms qui permettent de lier les tables entre elles. Il offre trois éléments : les structures de données (tables/relations), les règles d'integrity sur les valeurs admissibles, et les agents de manipulation fournissant la base mathématique relationnelle. Vocabulaire à maîtriser : chaque table est un set (ensemble non ordonné) ; chaque ligne est un tuple (record) contenant des attributes (fields), un par colonne ; l'un des attributes est désigné comme primary key, d'autres peuvent aussi être des keys. On retrouve un tuple par recherche de valeurs ou via le primary index ; un filtrage produit un sous-ensemble ; un join relie deux tables ou plus via des attributes spécifiés. Le relationnel est devenu dominant dans les DBMS.

Le modèle object-oriented (OO) stocke les données sous forme d'objets, collections d'éléments publics et privés assortis des opérations (methods) exécutables sur eux. Comme l'objet porte ses propres opérations, tout appel à la donnée a potentiellement accès à toute la gamme des fonctions, d'où une exigence de sécurité forte. Le modèle OO ne requiert pas forcément un langage de haut niveau comme SQL puisque les fonctions sont contenues dans les objets, ce qui évite le surcoût de langage. L'évolution naturelle, le modèle object-relational, est un hybride combinant les avantages du relationnel et de l'OO et offrant un chemin de migration.

Les modèles sont souvent évalués via le test ACID : Atomicity (la transaction est tout ou rien, indivisible), Consistency (la transaction respecte les contraintes d'integrity et laisse la base cohérente), Isolation (les transactions concurrentes restent invisibles les unes aux autres jusqu'à leur achèvement) et Durability (les effets validés sont permanents). Piège central : Isolation = invisibilité jusqu'à la fin, à ne pas confondre avec Atomicity (tout ou rien), Consistency (contraintes d'integrity) ou Durability (permanence).

Mots-clés EN Relational model Tuple Primary key Join Object-relational ACID
Points clés
  • Relationnel = tables/tuples/attributes ; un attribute est la primary key ; le relationnel est dominant.
  • Un join relie deux tables ou plus via des attributes spécifiés.
  • Le modèle OO porte ses methods dans les objets et n'exige pas forcément SQL.
  • Object-relational = hybride relationnel + OO avec chemin de migration.
  • ACID : Isolation = transactions invisibles aux autres jusqu'à la fin (à ne pas confondre).

8.5 Langages d'interface et connexion aux bases

SQL : DDL, DML, DCL et connecteurs
Figure 8.5 · SQL : DDL, DML, DCL et connecteurs

Les langages d'interface (souvent appelés query languages) permettent aux utilisateurs, administrateurs et applications de demander des services au DBMS. La connexion doit toujours passer par authentication et authorization. SQL, créé chez IBM au début des années 1970 pour le relationnel, reste la lingua franca des bases. Il établit trois concepts : schemas (structure de la base, dont les access controls), tables (colonnes et lignes) et views (down-selections de lignes/colonnes créées dynamiquement par utilisateur, qui implémentent les politiques de sécurité et la granularité d'accès, par exemple separation of duties ou data classification). SQL se décompose en trois sous-langages : DDL (Data Definition Language) pour créer bases, tables, views et keys, réservé aux administrateurs ; DML (Data Manipulation Language) pour interroger, insérer, supprimer et mettre à jour les données ; DCL (Data Control Language) pour établir et contrôler l'accès aux données. Le DCL portant l'aspect contrôle de sécurité, le security professional doit y prêter attention.

Les markup languages ne sont pas des langages de programmation : ils expriment la mise en forme des données. HTML décrit la disposition d'une page. XML, le plus reconnu après HTML, assure stockage et transport de données en réseau et sert d'interface entre les pages web (front end) et les bases (back end) ; il est un exemple de mobile code et sert souvent à définir des metadata. XML embarqué doit être inspecté et encadré par des frameworks de confiance.

Pour connecter les applications aux bases : ODBC (Open Database Connectivity, de Microsoft) est le moyen dominant d'accès standardisé ; il traduit les commandes applicatives vers le système de base cible, permettant de changer de DBMS avec peu de modifications, mais comme il opère en entité système il est vulnérable (identifiants en clair, données en cleartext, vérification d'accès parfois insuffisante, aggregation entre sources). JDBC (Java Database Connectivity, de Sun) connecte les programmes Java aux bases, directement ou via ODBC. OLE DB, fondé sur le COM (Component Object Model), relie des données entre divers DBMS et fonctionne en middleware client ou serveur. ADO (ActiveX Data Objects, de Microsoft) est une interface de haut niveau qui simplifie l'usage d'OLE DB (front-end client ou objet métier en middle-tier), critiquée pour son accès non restreint au système, atténué par le sandboxing des navigateurs récents. Enfin, l'approche tiered (3-tier : presentation, business logic, data) renforce la sécurité car l'utilisateur ne touche pas directement la donnée mais passe par la couche business logic ; le risque est de perdre les fonctions de sécurité de la base dans la traduction par la couche intermédiaire. Piège : ODBC ne s'appuie pas sur HTTP, contrairement aux REST APIs.

Mots-clés EN SQL (DDL/DML/DCL) View XML ODBC JDBC OLE DB / ADO 3-tier
Points clés
  • DDL crée (admins), DML interroge/modifie, DCL contrôle l'accès (focus sécurité).
  • Les views sont dynamiques et appliquent separation of duties et data classification.
  • XML interface front-end web et back-end base, et définit des metadata (mobile code).
  • ODBC = accès standardisé dominant et hors HTTP ; identifiants/données souvent en clair.
  • Le 3-tier protège car l'utilisateur passe par la business logic, pas directement par la donnée.

8.6 Accès via internet, analytique et knowledge discovery

Metadata, OLAP, data mining et KDD
Figure 8.6 · Metadata, OLAP, data mining et KDD

Le metadata est l'information qui décrit une autre information, littéralement 'data about the data'. Il fournit une méthode systématique de description des ressources et améliore la précision de recherche. Il révèle des relations invisibles entre données, permet de corréler des données jugées non liées et donne les clés des données critiques d'un data warehouse. Comme le warehouse est généralement au plus haut niveau de classification alors que ses utilisateurs ne le sont pas, les données non publiques doivent être retirées du metadata : on abstrait les corrélations sans exposer les données sous-jacentes. Les données du warehouse sont exploitées via OLAP, data mining ou KDD.

L'OLAP (Online Analytical Processing) permet à l'analyste de formuler des requêtes puis d'en définir d'autres selon les résultats, en parcourant les données ('roaming') pour présenter ensuite l'information au management. Le data mining lance des requêtes sur le warehouse pour révéler relations, patterns, corrélations et tendances cachés, à l'aide de techniques mathématiques et statistiques. Risques : atteinte à la vie privée si l'on mine des données individuelles, et data contamination quand des erreurs de collecte/transformation/chargement produisent des relations inexactes. Aspect positif : miner les audit logs pour repérer des événements anormaux. Le knowledge management gère efficacement l'information et les ressources de l'entreprise pour produire de la business intelligence, en s'appuyant souvent sur le data warehouse et désormais sur l'IA.

Le KDD (Knowledge Discovery in Databases) est une méthode mathématique, statistique et de visualisation pour identifier des patterns valides et utiles et en dériver une information signifiante, généralement obtenue par des techniques d'IA plutôt que des requêtes standards. Ses approches incluent le modèle probabiliste (graphes, incertitude), l'approche statistique (découverte de règles, dont OLAP est un exemple), la classification (regroupement par similarité, suppression des redondances) et l'analyse de déviation et de tendance (filtrage, ex. un IDS). Côté contre-mesure d'inference, la polyinstantiation crée plusieurs versions d'un enregistrement à différents niveaux de classification, empêchant la déduction d'information sensible. Les contrôles de sécurité du KDD : protéger la knowledge base comme toute base, vérifier régulièrement que les sorties correspondent aux entrées attendues, soumettre les changements de règles à un change control, relancer des requêtes si une sortie paraît suspecte, intégrer le risque dans les décisions et établir une baseline de performance attendue. Piège : KDD = visualisation et identification de patterns pour la décision ; data mining = extraction des relations cachées.

Mots-clés EN Metadata OLAP Data mining KDD Knowledge management Polyinstantiation
Points clés
  • Metadata = data about the data ; retirer le non public avant exposition.
  • OLAP = requêtes itératives ; data mining = patterns cachés ; KDD = visualisation/patterns par IA.
  • Polyinstantiation = plusieurs versions par niveau de classification, contre-mesure à l'inference.
  • Data mining peut contaminer les données et menacer la vie privée.
  • Contrôles KDD : protéger la knowledge base, change control des règles, baseline, revérification.

Cas d'étude

Cas · Cas d'étude

Le patient VIP déduit par aggregation

Contexte : Un analyste d'un hôpital n'est autorisé qu'à consulter des données agrégées non classifiées. En croisant deux jeux qui lui sont accessibles - le planning du bloc opératoire (créneaux, salles, types d'intervention) et la liste de présence du personnel - il parvient à isoler une intervention et, de proche en proche, à déduire l'identité d'un patient VIP hospitalisé discrètement. Aucune des sources n'était sensible individuellement, mais leur combinaison l'est devenue.

Question : Il s'agit d'une aggregation menant à une inference. Quel mécanisme prévient le mieux cette déduction d'information sensible : la polyinstantiation, le view-based access control ou le contrôle de l'aggregation ?

Topics traités aggregationinferencepolyinstantiationview-based access control
Voir l'analyse et la correction

Le view-based access control restreint ce que l'analyste voit, mais ici il voit légitimement des données déjà non classifiées : les views ne bloquent pas la corrélation entre deux sources autorisées. Contrôler l'aggregation (limiter le nombre ou la combinaison de requêtes croisées) aide, mais reste difficile à calibrer et n'efface pas l'information déjà déductible. La polyinstantiation est la contre-mesure visée par l'examen face à l'inference : en maintenant plusieurs versions d'un même enregistrement à différents niveaux de classification, un utilisateur de bas niveau voit une version 'de couverture' cohérente mais non révélatrice, tandis que la vraie donnée reste à un niveau supérieur. L'analyste ne peut alors plus inférer le patient VIP car les jeux qu'il croise ne pointent pas vers la donnée sensible réelle.

À retenir : Quand l'aggregation mène à l'inference, la contre-mesure que l'examen attend est la polyinstantiation, pas seulement le contrôle de view ou d'aggregation.

Éléments d'apprentissage clés
  • L'aggregation de sources non sensibles peut produire une information sensible.
  • L'inference déduit l'interdit à partir de l'agrégat.
  • La polyinstantiation est la contre-mesure de référence à l'inference.
Piège d'examen

Aggregation vs inference vs polyinstantiation

Piège central du domaine. L'aggregation est l'action de combiner des faits non sensibles issus de sources séparées pour obtenir une information sensible (le tout vaut plus que la somme des parts). L'inference est la capacité de déduire ou d'inférer une information à laquelle on n'a pas droit, souvent rendue possible par l'aggregation. La polyinstantiation n'est pas une menace mais la contre-mesure : elle maintient plusieurs versions d'un enregistrement à différents niveaux de classification pour qu'un utilisateur de bas niveau ne puisse pas inférer la donnée sensible. Retiens : aggregation = combiner, inference = déduire, polyinstantiation = la parade.

Piège d'examen

ACID : Isolation n'est pas Atomicity

Question d'examen fréquente. Isolation garantit que les transactions concurrentes restent invisibles les unes aux autres jusqu'à leur achèvement : aucune transaction ne voit les résultats intermédiaires d'une autre. Ne la confonds pas avec Atomicity (la transaction est tout ou rien, indivisible), Consistency (la transaction respecte les contraintes d'integrity et laisse la base cohérente) ni Durability (les effets validés sont permanents, même après panne). Si l'énoncé parle d'invisibilité jusqu'à la fin de la transaction, la réponse est Isolation.

Piège d'examen

KDD vs data mining

Le data mining lance des requêtes sur un data warehouse pour extraire des relations, patterns et corrélations cachés à partir de techniques mathématiques et statistiques. Le KDD (Knowledge Discovery in Databases) part de ces données et utilise des méthodes mathématiques, statistiques et surtout de visualisation, généralement par IA, pour identifier des patterns valides et les transformer en information compréhensible et actionnable. Repère-clé d'examen : si l'énoncé évoque la visualisation pour identifier des patterns, la réponse est KDD ; s'il s'agit de l'extraction brute des relations, c'est data mining.

Point de contrôle — Checkpoint

  1. Quelle technique d'analyse d'un data warehouse repose sur des méthodes mathématiques, statistiques et de visualisation pour identifier des patterns valides et utiles ?

    • A Knowledge Discovery in Databases (KDD)
    • B Online Analytical Processing (OLAP)
    • C Data contamination
    • D Object Linking and Embedding (OLE DB)
    Réponse & justification

    Réponse : A — Knowledge Discovery in Databases (KDD)

    Le KDD est défini précisément comme une méthode mathématique, statistique et de visualisation pour identifier des patterns valides et utiles, généralement via l'IA. OLAP est une approche statistique de requêtage itératif (un exemple parmi les techniques), pas la méthode de visualisation visée. Data contamination est une menace (erreurs d'intégrité), pas une technique d'analyse. OLE DB est une technologie de connexion fondée sur COM, sans rapport.

  2. Un utilisateur de bas niveau pourrait inférer une information classifiée à partir de données qu'il consulte légitimement. Quel mécanisme constitue la contre-mesure de référence à l'inference ?

    • A La polyinstantiation
    • B Le deadlock detection
    • C Le rollback recovery
    • D Le data farming
    Réponse & justification

    Réponse : A — La polyinstantiation

    La polyinstantiation maintient plusieurs versions d'un enregistrement à différents niveaux de classification, de sorte qu'un utilisateur de bas niveau voit une version non révélatrice et ne peut pas inférer la donnée sensible. Le deadlock detection résout les verrous croisés, sans rapport avec l'inference. Le rollback recovery annule des transactions invalides (recovery), pas l'inference. Le data farming génère des données par analytique prédictive, ce n'est pas un contrôle de confidentialité.

  3. Dans le test ACID, quelle propriété garantit que les transactions concurrentes restent invisibles les unes aux autres jusqu'à leur achèvement ?

    • A Isolation
    • B Atomicity
    • C Consistency
    • D Durability
    Réponse & justification

    Réponse : A — Isolation

    Isolation assure qu'une transaction ne voit pas les résultats intermédiaires d'une autre tant qu'elle n'est pas achevée. Atomicity garantit le tout ou rien (transaction indivisible). Consistency garantit le respect des contraintes d'integrity et un état cohérent. Durability garantit la permanence des effets validés, même après panne. L'invisibilité jusqu'à la fin pointe vers Isolation.

  4. Quelle est la différence entre aggregation et inference ?

    • A Aggregation = combiner des données non sensibles pour créer du sensible ; inference = déduire une information non autorisée
    • B Aggregation = déduire l'interdit ; inference = combiner des données non sensibles
    • C Les deux désignent la même chose : un accès non autorisé direct
    • D Aggregation = chiffrer les données ; inference = les déchiffrer
    Réponse & justification

    Réponse : A — Aggregation = combiner des données non sensibles pour créer du sensible ; inference = déduire une information non autorisée

    L'aggregation combine des fragments non sensibles issus de sources séparées pour produire une information sensible ; l'inference déduit une information plus sensible que celle autorisée, souvent grâce à l'aggregation. L'option 2 inverse les définitions. L'option 3 confond avec un simple unauthorized access. L'option 4 décrit le chiffrement, sans rapport.

  5. Dans le modèle relationnel, comment nomme-t-on une ligne d'une table et l'attribute qui identifie de façon unique cette ligne ?

    • A Une ligne est un tuple ; l'identifiant unique est la primary key
    • B Une ligne est un schema ; l'identifiant unique est le join
    • C Une ligne est un set type ; l'identifiant unique est le foreign key seul
    • D Une ligne est une view ; l'identifiant unique est le DDL
    Réponse & justification

    Réponse : A — Une ligne est un tuple ; l'identifiant unique est la primary key

    Dans le modèle relationnel, chaque ligne est un tuple (record) composé d'attributes, et l'un d'eux est désigné primary key pour identifier le tuple. Un schema décrit la structure de la base, pas une ligne. Le set type appartient au modèle network. La view est une down-selection, et le DDL est un sous-langage SQL de création.

Points essentiels à retenir

  • Aggregation = combiner du non sensible vers du sensible ; inference = en déduire l'interdit ; polyinstantiation = la contre-mesure.
  • Le DBMS et son database engine (CRUD) orchestrent la base ; warehouse, lake, farm et big data en élargissent le périmètre.
  • Cinq modèles à distinguer : hierarchical (arbre), network (CODASYL), graph (Neo4J), relational (dominant, tuples/attributes/keys), object-oriented (hybride object-relational).
  • ACID : Atomicity (tout ou rien), Consistency (intégrité), Isolation (invisibilité jusqu'à la fin), Durability (permanence).
  • SQL (DDL/DML/DCL), XML, ODBC/JDBC/OLE DB/ADO et l'approche 3-tier connectent applications et bases ; metadata, OLAP, data mining et KDD en tirent la business intelligence.
Module 9 Objectif 8.5 140 min Avancé

Sécurité web, API, malware et SDS

Prérequis : Modules 1-8.

Ce module final aborde le terrain où la majorité des attaques se concrétisent aujourd'hui : la couche applicative exposée sur le web. On commence par l'environnement des applications web - pourquoi un site est intrinsèquement vulnérable, les erreurs de conception classiques (réinventer l'authentification ou la crypto, hard-coding, mauvaise validation), les attaques fréquentes (DoS/DDoS, MITM, SQL injection, XSS, CSRF) et le cadre de référence OWASP Top 10. On enchaîne sur les défenses concrètes du code : input validation, output encoding, session management, secure coding standards (CERT/SEI, OWASP), strong data typing et reuse limité aux trusted libraries. Vient ensuite la sécurité des API REST, leurs options d'authentification (Basic+TLS, OAuth 1.0a, OAuth 2) et le recours systématique à HMAC SHA-2/SHA-3. On dresse la taxonomie des logiciels malveillants (virus, worm, trojan, RAT, logic bomb, spyware, botnet, ransomware), un vocabulaire que l'examen distingue finement. On termine par la Software-Defined Security (SDS), changement de paradigme vers le cloud, Zero Trust Architecture et microsegmentation. Deux cas réels - My Pet Food Inc. et la brèche British Airways (amende ICO de 20 millions de livres) - ancrent tout cela dans la pratique.

Objectifs pédagogiques

  • Caractériser la surface de menace d'une application web et les erreurs de conception classiques.
  • Reconnaître et distinguer SQL injection, cross-site scripting (XSS) et cross-site request forgery (CSRF) à partir d'un scénario.
  • Appliquer les défenses du code web : input validation, output encoding, session management, secure coding standards.
  • Sécuriser une API REST et choisir l'option d'authentification adaptée (Basic+TLS, OAuth 1.0a, OAuth 2).
  • Classer les logiciels malveillants et distinguer virus, worm, trojan, RAT, logic bomb, botnet et ransomware.
  • Expliquer la Software-Defined Security (SDS), la Zero Trust Architecture et la microsegmentation.

Critères de réussite

  • Je sais nommer les attaques du OWASP Top 10 et les contre-mesures de durcissement web (hardening OS, scans, WAF/proxy, MFA, IPS).
  • Je tranche sans hésiter SQLi vs XSS vs CSRF d'après la description d'une attaque.
  • Je justifie pourquoi input validation et output encoding sont les défenses essentielles, et pourquoi les cookies/indicateurs de session doivent être chiffrés, aléatoires et non prédictibles.
  • Je distingue OAuth 1.0a (signature HMAC-SHA1, utilisable sans TLS) de OAuth 2 (signatures supprimées, TLS obligatoire).
  • Je classe correctement un échantillon de malware et explique la différence virus / worm.
  • Je décris les avantages de SDS et le rôle central de l'identity management dans une Zero Trust Architecture.

9.1 Environnement des applications web et OWASP Top 10

Schéma des dix catégories de risques du OWASP Top 10 web
Figure 9.1 · OWASP Top 10

L'environnement des applications web est l'endroit où une application tourne sur un serveur et expose l'interface par laquelle les utilisateurs interagissent avec l'organisation. Comme il est accessible à tout l'internet, il devient une cible privilégiée : les statistiques montrent que la plupart des attaques visent désormais la couche applicative (le serveur web lui-même, les scripts maison, les front-ends e-commerce) plutôt que les plateformes sous-jacentes. Une fois l'application compromise, l'attaque de l'OS et du reste de l'architecture devient généralement possible. Un site est facilement aspiré par des outils de traversal qui suivent chaque lien pour en faire une copie locale : le même transfert de mobile code qui sert le navigateur légitime sert aussi la reconnaissance technique de l'attaquant.

Les sites souffrent d'erreurs de conception classiques : tenter de réinventer (coder soi-même) le contrôle d'accès et l'authentification, vouloir concevoir sa propre cryptographie, faire du hard-coding de credentials ou de données sensibles dans les pages ou les scripts, mal gérer le contrôle d'accès, et surtout coder une input validation absente ou défaillante. Chaque page, chaque lien, chaque opération GET ou POST est un point de la threat surface qu'un attaquant peut découvrir et exploiter. Les attaques les plus fréquentes sont : DoS et DDoS, man-in-the-middle (MITM), SQL injection, cross-site scripting (XSS) et cross-site request forgery (CSRF).

Les stratégies de protection émergent des leçons douloureuses : un processus de security sign-off pour les serveurs web, le hardening de l'OS (retrait des comptes et configurations par défaut, permissions correctes, patches à jour), des vulnerability scans avant déploiement, le déploiement d'IDS/IPS, des application proxy firewalls, la désactivation de la documentation et des librairies inutiles, la sécurisation ou le retrait des interfaces d'administration, l'accès limité aux hôtes autorisés avec authentification forte (MFA), le non hard-coding des credentials, l'account lockout, le logging étendu et le chiffrement de tout le trafic d'authentification.

Le Open Web Application Security Project (OWASP) est la ressource de référence pour le développement web sécurisé. Il fournit de nombreux projets (Zed Attack Proxy, Web Security Testing Guide, Cheat Sheet Series, Security Knowledge Framework) mais le professionnel de la sécurité doit avant tout connaître le OWASP Top 10 des vulnérabilités d'applications web et savoir les mitiger. Piège d'examen : OWASP n'est pas un outil, c'est un projet/communauté ; et le Top 10 est une liste de catégories de risques, pas un classement de produits.

Mots-clés EN Threat surface OWASP Top 10 Input validation Application proxy firewall OS hardening MFA
Points clés
  • La plupart des attaques visent la couche applicative web, pas la plateforme.
  • Erreurs classiques : réinventer l'auth/la crypto, hard-coding, input validation absente.
  • Attaques fréquentes : DoS/DDoS, MITM, SQL injection, XSS, CSRF.
  • Protection : hardening OS, vulnerability scans, WAF/proxy, IDS/IPS, MFA, pas de credentials hard-codés.
  • OWASP est un projet/communauté ; le Top 10 est une liste de catégories de risques à connaître et mitiger.

9.2 Défenses du code web et secure coding standards

Input validation et session management
Figure 9.2 · Input validation et session management

Du fait de l'accessibilité des systèmes web, l'input validation devient la défense essentielle : il faut valider toute donnée entrante (et la sortie). Les application proxy firewalls aident mais doivent gérer les exploits connus - buffer overflows, problèmes d'authentification, scripting, passage de commandes à la plateforme sous-jacente (SQL vers le moteur de base de données), problèmes d'encodage (Unicode) et encodage/traduction d'URL. La règle d'or : le plus grand défi survient quand une donnée passe de n'importe quoi à n'importe quoi d'autre - la validation doit être adéquate à ce moment précis. À l'input validation s'ajoute l'output encoding, qui neutralise les données avant de les renvoyer au navigateur (défense centrale contre XSS).

Le session management mérite une attention particulière car HTTP est un protocole stateless : la sensation d'attachement au serveur est portée par d'autres technologies (cookies, données d'URL) qui doivent être protégées et validées. Si des cookies sont utilisés, ils doivent toujours être chiffrés. La validation temporelle fait partie du session management : il faut interdire les cookies, numéros de session ou données d'URL séquentiels, calculables ou prédictibles, et toujours utiliser des indicateurs aléatoires et uniques. Comme pour tout environnement applicatif, on valide tout l'input et l'output, on fait fail secure (closed), on garde l'application aussi simple que possible, on emploie pen testing et secure network design, et on applique le defense in depth (DiD). À ne jamais faire : cacher les pages sécurisées, faire confiance aux données du client, ou faire confiance automatiquement aux données d'autres serveurs ou partenaires.

Les secure coding guidelines & standards encouragent les développeurs à suivre un ensemble de règles déterminées par les besoins de l'organisation, plutôt que de coder selon leur préférence ou leur familiarité. Des standards existent par langage (C, C++, Java, Perl) et proviennent de groupes comme la division CERT du SEI et l'OWASP. Le strong data typing aide l'exécution sûre : un langage type-safe (strongly typed) insère de la logique à la compilation empêchant le misuse d'un type de donnée - arrays qui restent in bounds, pointeurs toujours valides, impossibilité de placer du code dans une string puis de l'exécuter (ce qui prévient les injections). Java fait du static type checking ; en C/C++, l'accès mémoire par pointeurs est l'une des principales sources de vulnérabilités, d'où l'intérêt de contrôler ou restreindre leur usage.

Deux dernières pratiques. D'abord, limiter le reuse aux trusted libraries : réutiliser un snippet est tentant mais risqué car le programmeur peut mal comprendre ce que fait le code, ou le code peut ne pas fonctionner correctement - les équipes doivent fixer des limites fermes au reuse et des politiques sur les librairies approuvées. Ensuite, faire respecter les standards a deux faces : administrative (instruire, motiver, engager l'équipe) et technique (exploiter les fonctionnalités des IDE, des systèmes de configuration management et change tracking, et au besoin des audits d'usage). Piège d'examen : input validation et output encoding sont les deux défenses fondamentales du code web - les distinguer, l'une filtre ce qui entre, l'autre neutralise ce qui sort.

Mots-clés EN Output encoding Session management Fail secure Strong data typing CERT/SEI Trusted libraries
Points clés
  • Input validation et output encoding sont les deux défenses essentielles du code web.
  • HTTP est stateless : cookies et indicateurs de session doivent être chiffrés, aléatoires et non prédictibles.
  • Principes : valider input/output, fail secure (closed), simplicité, defense in depth, ne jamais trust le client.
  • Secure coding standards : CERT/SEI et OWASP ; strong data typing prévient les injections (static type checking en Java).
  • Limiter le reuse aux trusted libraries ; faire respecter les standards par voie administrative ET technique.

9.3 Sécurité des API REST et options d'authentification

Sécurité des API REST : OAuth2/JWT, validation, TLS
Figure 9.3 · Sécurité des API REST : OAuth2/JWT, validation, TLS

Les API (Application Programming Interfaces) sont les connecteurs qui permettent à des composants différents de communiquer - tel un messager qui transporte l'information entre les applications d'un système pour qu'il fonctionne de façon transparente. L'IoT en est l'exemple parfait : quand un bracelet de fitness envoie votre temps de jogging à un site, quand vous déverrouillez une voiture depuis une app, quand vous changez la température de votre thermostat depuis le bureau, une API travaille en coulisse. Ces API doivent être gérées et sécurisées, sinon de mauvais messages influencés par des attaquants peuvent atteindre les applications. Le cadre fédérateur est la data governance : un développement structuré et contrôlé des API qui sécurise tous les échanges de données dès le début du cycle de vie.

Les sites et apps web existent sous deux formes : stateful (les deux parties suivent une séquence partagée, comme la négociation d'une session HTTPS) et stateless (pas de synchronisation requise, comme UDP). Representational State Transfer (REST) n'est pas une architecture mais un style architectural pour bâtir des services au-dessus du web ; il utilise du simple HTTP pour permettre l'interaction via des URLs simplifiées. C'est justement parce que REST repose sur du HTTP simple que protéger les services REST devient délicat : c'est faisable, mais cela demande un travail rigoureux et cohérent à l'échelle de l'entreprise.

Les recommandations REST : employer les mêmes mécanismes de sécurité que pour toute application web (si vous filtrez le XSS sur le front, faites-le aussi pour vos API, idéalement avec les mêmes outils) ; ne pas réinventer sa propre solution de sécurité mais utiliser un framework peer-reviewed ; ne pas se contenter d'une authentification à clé unique (sauf API publique gratuite en read-only) ; ne jamais transmettre de clés statiques non chiffrées ; et idéalement utiliser HMAC (hash-based message authentication code) avec SHA-2 ou SHA-3, en évitant SHA-1 et MD5 à cause de leurs faiblesses connues.

Trois options d'authentification pour les API REST. Basic authentication avec TLS : la plus simple à implémenter (incluse dans la plupart des frameworks) mais la moins sûre ; à ne jamais utiliser sans TLS, sinon le couple login/mot de passe se déduit facilement. OAuth 1.0a : la plus sûre des trois, elle utilise une signature cryptographique (typiquement HMAC-SHA1) combinant le token secret, un nonce et d'autres infos ; son grand avantage est que le token secret n'est jamais transmis sur le réseau, ce qui en fait la seule des trois utilisable sans TLS (TLS reste recommandé selon la sensibilité). OAuth 2 : l'évolution suivante, elle supprime les signatures - plus besoin d'algorithmes cryptographiques pour les générer - car tout le chiffrement est désormais assuré par TLS, qui devient obligatoire. À considérer aussi : KMIP V1.1 et les HSM pour la gestion des clés et certificats, et la OWASP REST Security Cheat Sheet (qui recommande des session tokens pour protéger l'authentification des sniffers). Piège d'examen : OAuth 1.0a signe (utilisable sans TLS) ; OAuth 2 ne signe plus et exige TLS.

REST n'est pas la seule famille d'API : SOAP (Simple Object Access Protocol) est un protocole plus ancien, base sur XML, strict et fortement type, qui transporte des messages via une enveloppe XML et integre WS-Security (signature, chiffrement, tokens au niveau du message). SOAP est stateful et adapte aux transactions critiques ou aux contrats formels (WSDL) ; REST est leger, stateless, s'appuie sur les verbes HTTP et JSON, et domine le web et le mobile. Piege d'examen : SOAP porte sa propre securite de message (WS-Security) independante du transport, alors que REST s'appuie sur TLS pour proteger les donnees en transit.

Mots-clés EN REST Stateful vs stateless HMAC OAuth 1.0a OAuth 2 Data governance SOAP WS-Security
Points clés
  • Les API sont les connecteurs entre composants (IoT) ; REST est un style architectural sur HTTP simple.
  • Recommandations : mêmes mécanismes que le web, ne pas réinventer, HMAC avec SHA-2/SHA-3, éviter SHA-1/MD5.
  • Basic auth : simple mais faible, jamais sans TLS.
  • OAuth 1.0a : signature HMAC-SHA1, token secret jamais transmis, seule option utilisable sans TLS.
  • OAuth 2 : signatures supprimées, tout le chiffrement repose sur TLS, qui devient obligatoire.
  • SOAP (XML, WS-Security, stateful) vs REST (HTTP/JSON, stateless, securise par TLS).

9.4 Taxonomie des logiciels malveillants (malware)

Taxonomie des malwares : virus, ver, cheval de Troie, ransomware
Figure 9.4 · Taxonomie des malwares : virus, ver, cheval de Troie, ransomware

Le malware compromet l'intégrité d'un système, souvent en s'attachant à des programmes ou fichiers exécutables et en délivrant un payload (charge utile) qui efface des données, en altère, ouvre des covert channels ou exfiltre des informations - on parle de negative payload. Le malware réussit largement grâce à sa composante de social engineering. Au cœur de la taxonomie : le virus, programme écrit pour se copier et se disperser sans la coopération de l'utilisateur ; la définition de Fred Cohen (1984) le décrit comme un programme qui modifie d'autres programmes pour y inclure une version de lui-même. Point clé d'examen : un virus exige une action de l'utilisateur (double-clic sur une pièce jointe, lancement d'un programme) pour infecter. Les types de virus incluent : file infectors (infectent fichiers programme/objet ; les system infectors visant l'OS en sont une sous-catégorie), boot sector infectors (remplacent le master boot record), macro viruses (via VBA dans Word/Excel, infectent des fichiers de données comme NORMAL.DOT), script viruses (fichiers autonomes .vbs interprétés, ex. LoveLetter), multipartite (infectent plusieurs types d'objets ou se reproduisent de plusieurs façons, ex. Nimda), companion viruses (créent une copie avec une autre extension, ex. .COM avant un .EXE) et email viruses (exploitent les fonctions de la messagerie, ex. Melissa).

Le worm se reproduit et se propage comme un virus mais s'en distingue fondamentalement : il se propage SANS action de l'utilisateur, traversant les réseaux de son propre chef en exploitant des vulnérabilités connues. N'ayant besoin d'aucune intervention humaine, il se répand bien plus vite (mondialement en heures voire minutes). Le premier worm marquant fut le Morris Internet Worm de 1988. Le trojan (cheval de Troie) prétend faire une chose utile tout en exécutant une action malveillante non documentée ; il ne se reproduit pas. Le Remote Access Trojan (RAT) est installé à distance après mise en production pour donner à l'attaquant un contrôle complet du poste cible sans alerte ; il n'est pas viral (ne se propage pas seul) mais peut être déposé comme payload d'un virus, et fait souvent du poste un membre d'un botnet. Les DDoS zombies sont des machines compromises au milieu, ignorant qu'elles participent à une attaque DoS distribuée.

La logic bomb reste dormante jusqu'à une condition précise (date, état d'une base) puis active son negative payload ; difficile à implanter après coup, elle est codée dans une application en développement ou maintenance, n'implique ni reproduction ni social engineering, et un exemple classique est le salami scam (siphonner des fractions de centime sur de nombreuses transactions). Spyware et adware sont à la frontière du légitime : initialement outils marketing traçant les habitudes de navigation, devenus intrusifs, on les nomme souvent PUP/PUA (potentially unwanted programs/applications) pour cibler l'absence de consentement plutôt que le préjudice. Le hoax est une fausse alerte de virus poussant à la transmettre à tous ses contacts (sorte de spam auto-entretenu). Les pranks et Easter eggs (fonctions cachées) sont des farces sans intention malveillante mais consomment des ressources et compliquent l'intégrité.

Le botnet est un réseau de bots automatisés agissant ensemble vers un but souvent malveillant ; sa nature distribuée et des techniques comme le fast-flux (rotation rapide de noms de domaine et d'adresses IP) le rendent difficile à détecter et neutraliser ; les bots sont généralement déposés par des trojans. Enfin, le ransomware chiffre les fichiers de la victime et vend la clé de déchiffrement (souvent en Bitcoin) ; une variante, le living off the land (attaque sans malware), n'utilise pas de malware mais des capacités natives du système (comme les outils de chiffrement du système de fichiers) pour le même résultat. Piège d'examen : virus = action utilisateur requise et modifie d'autres programmes ; worm = propagation autonome via le réseau, sans action utilisateur.

Mots-clés EN Virus Worm RAT Logic bomb Botnet Ransomware
Points clés
  • Virus : modifie d'autres programmes et exige une action utilisateur ; types : file/boot/macro/script/multipartite/companion/email.
  • Worm : se propage seul via le réseau sans action utilisateur (Morris Internet Worm, 1988).
  • Trojan : prétend être utile, ne se reproduit pas ; RAT : contrôle distant complet, non viral, fait du poste un zombie/botnet.
  • Logic bomb : déclenchée par une condition, sans reproduction ni social engineering (salami scam).
  • Botnet : bots coordonnés (fast-flux) ; ransomware : chiffre les fichiers, variante living off the land sans malware.

9.5 Software-Defined Security (SDS) et Zero Trust

Pyramide des générations de sécurité menant à la Software-Defined Security
Figure 9.5 · Software-Defined Security : la prochaine révolution

La Software-Defined Security (SDS) est un changement de paradigme majeur dans la façon de penser et de sécuriser les architectures de systèmes d'information. En termes simples, c'est la différence entre le modèle client-serveur reposant sur un serveur on-premise et un modèle entièrement cloud, sans architecture sur site au-delà du point de présence internet et des points d'accès locaux. Le modèle client-serveur étendu à l'internet imposait une pensée périmétrique, des défenses en couches (DiD) et il faisait confiance aux entités se déplaçant latéralement à l'intérieur d'une couche. Vers 2018, le marché clamait que le defense in depth is dead pour signaler le besoin de SDS face à des attaquants sophistiqués. La nuance, vite apportée : ce ne sont pas les couches qui posent problème, mais le fait que le DiD traditionnel n'a aucun contrôle effectif sur le mouvement latéral dans une couche, ni de défense réelle contre la menace interne.

Pour une entreprise mondiale (50 sites, 10 000 utilisateurs, assets en cloud, microsegmentation exigeant des centaines de firewalls, routeurs, NIPS/NIDS pilotés par des SIEM et SOAR), le passage à SDS apporte plusieurs avantages : il centralise le control plane de tous les segments réseau, réduisant l'overhead tout en permettant des changements rapides à l'échelle de l'entreprise ; il favorise des appliances de sécurité virtualisées, réduisant la dépendance au matériel et aux fournisseurs ; il rend les politiques de sécurité on-demand, agiles et adaptables ; il peut éliminer d'anciens protocoles convergés comme MPLS via des overlays virtuels ; et il fait passer la threat intelligence de réactive à prédictive en combinant apprentissage machine et humain. SDS proprement implémentée offre aussi un tremplin vers une gestion holistique des risques toutes sources.

Il faut souligner que les éléments traditionnels au niveau composant n'ont pas disparu : il reste à gérer l'accès aux services internet de couche 2 et, surtout, le problème fondamental de l'identity management et de l'access control. Chaque utilisateur, humain ou non humain, et chaque device, entité logicielle ou processus doit être soumis à la suite complète de contrôles IAM - c'est le socle sur lequel SDS doit reposer avant de devenir holistique. Plusieurs idées sont désormais établies au cœur de la SDS : l'identity management est absolument vital ; ce sont les entités (pas seulement les utilisateurs) qui doivent être le niveau auquel l'identité est définie et tracée ; la défense doit devenir proactive ; les systèmes doivent être agiles ; l'access management doit descendre jusqu'à l'asset de plus bas niveau ; et la Zero Trust Architecture (ZTA) à la fois habilite SDS et est requise par elle. La ZTA recourt à la microsegmentation et aux fonctions IAM ; ce n'est pas un simple relabeling du DiD - par exemple, on définit des segments très localisés par type d'IoT, avec des trusted agents servant de brokers entre un segment IoT et le reste (des capteurs d'entrepôt n'ont aucune raison d'accéder aux systèmes RH ou finance).

SDS et assessment posent deux questions fondamentales et intriquées : (1) les systèmes dont l'organisation dépend fonctionnent-ils comme requis pour répondre aux besoins de conformité ET à la réalité de l'environnement de menace actuel ? (2) les processus SDS et de sécurité en place fonctionnent-ils correctement ? La première relève du Domaine 6 ; la seconde est un cas particulier du problème d'évaluation de sécurité d'un tiers - confier toutes ses capacités de sécurité aux mains virtuelles d'une installation SDS exige un degré de confiance considérable, et ce système doit être traité comme un asset mission-critical de grande valeur. Le choix d'un fournisseur SDS, en interne ou en service managé, doit intégrer les besoins d'assessment et de conformité dès le départ. Piège d'examen : SDS et ZTA ne signifient pas que le périmètre ou les couches sont morts ; ils corrigent l'angle mort du DiD - le mouvement latéral - en plaçant l'identity management au centre.

Mots-clés EN Software-Defined Security Defense in depth is dead Zero Trust Architecture Microsegmentation Control plane Identity management
Points clés
  • SDS : passage du modèle client-serveur on-premise à un modèle cloud centralisé et virtualisé.
  • Defense in depth is dead est nuancé : le DiD ne contrôle pas le mouvement latéral ni la menace interne.
  • Avantages SDS : control plane centralisé, appliances virtualisées, politiques agiles, threat intelligence prédictive.
  • ZTA et microsegmentation reposent sur l'identity management des entités (pas seulement des utilisateurs).
  • Assessment SDS : 2 questions (systèmes conformes/sûrs ? processus SDS corrects ?) ; traiter le SDS comme un asset mission-critical.

Cas d'étude

Cas · Activité

My Pet Food Inc. : posture de sécurité d'une boutique en ligne

Contexte : My Pet Food Inc. est une animalerie en ligne (chats, chiens, oiseaux, reptiles, poissons, spécialiste de la nourriture crue). Comme la plupart des sites marchands, elle propose un catalogue avec un panier en ligne. On peut acheter en identité invité ou via un compte enregistré ; le compte personnel exige un nom d'utilisateur lié à des détails personnels (nom, téléphone, carte de crédit ou débit) et fournit un historique de commandes. L'équipe HelloWorld doit examiner les faiblesses de leurs applications web et préparer des solutions.

Question : 1. Comment le site pourrait-il être attaqué ? 2. Comment ces attaques pourraient-elles être mitigées, en considérant safeguards et countermeasures et l'interaction entre logiciel, physique et technologie ?

Topics traités OWASP Top 10Penetration testingSession managementIPSInput validation
Voir l'analyse et la correction

1. Préparer l'organisation à tous les types d'attaques en s'appuyant sur la OWASP Top 10 Web Application Security Risks pour identifier les vecteurs, et mener du penetration testing régulier pour vérifier que la protection tient. Attaques possibles : Denial of Service (DoS), défaçage du site, vol d'informations clients (détails de carte de crédit), man-in-the-middle (MITM), phishing, SQL injection, cross-site scripting (XSS) et insertion de malware. 2. La gestion des utilisateurs et des sessions est toujours un point de départ : comprendre qui tente de se connecter, depuis où et pour combien de temps donne un aperçu de l'activité potentiellement malveillante. Un intrusion prevention system (IPS), s'il est correctement configuré, peut fournir une protection supplémentaire. On y ajoute input validation, chiffrement des sessions et des cartes, et hardening conforme à OWASP.

À retenir : Une boutique en ligne manipulant cartes et CVV doit traiter le OWASP Top 10 comme une checklist vivante, faire du pen testing régulier, et faire du session management plus de l'IPS son premier rempart contre la fraude et l'exfiltration.

Éléments d'apprentissage clés
  • Lister les attaques via le OWASP Top 10 : DoS, défaçage, vol d'infos, MITM, phishing, SQLi, XSS, malware.
  • Le session management (qui, d'où, combien de temps) est le point de départ de la détection.
  • Un IPS bien configuré et du pen testing régulier complètent la défense d'un site e-commerce.
Cas · Cas d'étude

British Airways : brèche, amende ICO et input validation absente

Contexte : Le 16 octobre 2020, l'Information Commissioner's Office (ICO) conclut que British Airways (BA) n'a pas pris les mesures adéquates pour protéger les données personnelles de ses clients et inflige une amende de 20 millions de livres (la plus élevée à l'époque) ; l'amende initiale, avant la pandémie de COVID-19, était de 184 millions de livres (1,5 % du chiffre d'affaires 2018). Une défaillance des procédures et logiciels de sécurité a entraîné une brèche touchant 429 612 clients et employés : noms, adresses, détails de cartes de paiement et numéros CVV exposés. Aggravant : BA n'a jamais détecté l'attaque et l'a apprise d'un tiers. Deux théories prévalent ; la plus probable selon un ancien chercheur du GCHQ : les attaquants ont chargé des scripts malveillants sur le site légitime de BA, captant l'information au point d'entrée (skimming) - les CVV ont été collectés « live » à chaque réservation ou connexion.

Question : 1. Quels types d'erreurs ont été commis dans le développement du site BA (input validation, session management, access control) et où ? 2. Quelles best practices seraient les plus importantes pour une organisation au site similaire (achat invité ou enregistré) ? 3. Pourquoi le testing est-il un point d'échec fréquent ? 4. Quels tests auraient identifié la vulnérabilité de BA ? 5. Lesquels seraient les plus importants et comment le faire comprendre au métier ?

Topics traités Input validationSession managementSkimming de scriptsTesting sous pressionVulnerability assessment / pen test
Voir l'analyse et la correction

1. L'échec principal fut une absence d'input validation, qui a permis d'uploader des scripts redirigeant les utilisateurs vers un site usurpé ou collectant directement l'information sur le vrai site de BA ; le session management aurait aussi pu aider en détectant les connexions et le transfert de données vers les attaquants. 2. Input validation et output sanitization sont la clé de la protection de l'organisation et des clients ; sans elles, on s'expose au post-form tampering, au cross-site scripting et au cross-site request forgery. Les informations transmises doivent être protégées par des sessions chiffrées ET suivies : si un utilisateur britannique se connecte habituellement depuis le Royaume-Uni mais qu'une session vient de Chine, pourquoi ? Si deux sessions naissent simultanément avec les mêmes identifiants, laquelle est légitime ? 3. Dans un monde où la vitesse de mise sur le marché (push to market) prime, le testing est perçu comme coûteux et chronophage et peut être abandonné, raccourci ou réduit. 4. Plusieurs tests auraient révélé le problème : un vulnerability assessment (si la faille était connue), un penetration test du site web, un regression test et un misuse case test. 5. Tous ces tests sont importants : on ne trouvera jamais toutes les failles, mais plus on teste, plus on en identifie - c'est l'argument à porter au métier.

À retenir : Une absence d'input validation a coûté à BA une brèche de 429 612 personnes (CVV compris) et 20 millions de livres d'amende, jamais détectée en interne. La leçon : input validation et output sanitization, sessions chiffrées et suivies, et un testing qu'on refuse de sacrifier à la vitesse de mise sur le marché.

Éléments d'apprentissage clés
  • L'erreur centrale fut l'absence d'input validation (et de session management), permettant le skimming de scripts au point d'entrée.
  • Best practices : input validation + output sanitization, sessions chiffrées et suivies (géolocalisation, sessions concurrentes).
  • Le testing échoue souvent sous la pression du push to market ; vulnerability assessment, pen test, regression et misuse case auraient révélé la faille.
Piège d'examen

SQL injection vs XSS vs CSRF

Trois attaques web fréquentes que l'examen fait reconnaître à partir d'un scénario. SQL injection : l'attaquant injecte de la syntaxe SQL dans un champ de saisie pour manipuler la requête côté serveur (ex. contourner l'authentification ou lire toute une table) ; la cible est la base de données. Cross-site scripting (XSS) : l'attaquant fait exécuter un script malveillant dans le navigateur d'AUTRES utilisateurs (ex. un commentaire piégé qui vole les cookies des visiteurs) ; la cible est le navigateur des autres victimes. Cross-site request forgery (CSRF) : l'attaquant force le navigateur d'une victime DÉJÀ authentifiée à envoyer une requête non désirée (ex. un lien piégé qui déclenche un virement pendant que la victime est connectée à sa banque) ; la cible est l'action effectuée au nom de la victime. Mnémonique : SQLi manipule la requête (base de données), XSS exécute du script chez les autres (navigateur), CSRF abuse de la session authentifiée (requête forgée). Défenses respectives : input validation/requêtes paramétrées (SQLi), output encoding (XSS), tokens anti-CSRF (CSRF).

Piège d'examen

Virus vs worm

Confusion classique entre deux malwares qui se reproduisent. Le virus exige une action de l'utilisateur pour infecter (double-clic sur une pièce jointe, lancement d'un programme) et il modifie d'autres programmes pour y inclure une copie de lui-même - c'est sa marque définitionnelle (Fred Cohen, 1984). Le worm, lui, se propage SANS aucune action de l'utilisateur : il traverse les réseaux de son propre chef en exploitant des vulnérabilités connues, donc bien plus vite (mondialement en heures ou minutes) ; le Morris Internet Worm (1988) en est le premier exemple marquant. Pour trancher dans un scénario : si la propagation nécessite que quelqu'un ouvre/exécute quelque chose, c'est un virus ; si elle se fait seule sur le réseau, c'est un worm. Attention : de nombreuses menaces modernes (LoveLetter, Nimda) combinent les deux techniques.

Piège d'examen

OAuth 1.0a vs OAuth 2

Deux versions d'OAuth que l'examen oppose sur la cryptographie et le besoin de TLS. OAuth 1.0a repose sur une signature cryptographique (typiquement HMAC-SHA1) combinant le token secret, un nonce et d'autres infos de la requête ; comme le token secret n'est jamais transmis sur le réseau, OAuth 1.0a est la SEULE des trois options (avec Basic auth et OAuth 2) qui peut être utilisée en sécurité SANS TLS - bien que TLS reste recommandé selon la sensibilité. OAuth 2 supprime les signatures : il n'y a plus d'algorithme cryptographique à gérer pour signer, car tout le chiffrement est délégué à TLS, qui devient OBLIGATOIRE. Pour trancher : signature cryptographique présente et TLS optionnel = OAuth 1.0a ; pas de signature et TLS imposé = OAuth 2. À ne pas confondre non plus avec Basic auth (la plus simple mais la moins sûre, jamais sans TLS) ; et rappelez-vous la reco HMAC SHA-2/SHA-3 (éviter SHA-1/MD5).

Point de contrôle — Checkpoint

  1. Un attaquant saisit la chaîne ' OR '1'='1 dans le champ « nom d'utilisateur » d'un formulaire de connexion et obtient l'accès sans mot de passe valide. De quelle attaque s'agit-il ?

    • A Cross-site scripting (XSS)
    • B SQL injection
    • C Cross-site request forgery (CSRF)
    • D Man-in-the-middle (MITM)
    Réponse & justification

    Réponse : B — SQL injection

    SQL injection : l'attaquant injecte de la syntaxe SQL dans un champ pour manipuler la requête côté serveur et contourner l'authentification, ciblant la base de données. Ce n'est pas du XSS (qui exécute un script dans le navigateur d'autres utilisateurs), ni du CSRF (qui force une requête depuis le navigateur d'une victime déjà authentifiée), ni du MITM (interception entre deux parties). Défense : input validation et requêtes paramétrées.

  2. Un attaquant poste un commentaire contenant <script> sur un forum ; chaque visiteur qui lit le fil voit ses cookies de session volés. De quelle attaque s'agit-il ?

    • A SQL injection
    • B Cross-site request forgery (CSRF)
    • C Cross-site scripting (XSS)
    • D Logic bomb
    Réponse & justification

    Réponse : C — Cross-site scripting (XSS)

    Cross-site scripting (XSS) : un script malveillant stocké est exécuté dans le navigateur d'AUTRES utilisateurs, typiquement pour voler leurs cookies. Ce n'est pas du SQLi (qui vise la base de données via une requête manipulée), ni du CSRF (qui force une requête non désirée depuis une session authentifiée sans exécuter de script chez la victime), ni une logic bomb (payload déclenché par une condition). Défense : output encoding.

  3. Pendant qu'une victime est connectée à sa banque dans un onglet, elle clique sur un lien piégé dans un autre onglet ; son navigateur envoie alors un virement à l'insu de la victime. De quelle attaque s'agit-il ?

    • A Cross-site request forgery (CSRF)
    • B Cross-site scripting (XSS)
    • C SQL injection
    • D Phishing
    Réponse & justification

    Réponse : A — Cross-site request forgery (CSRF)

    Cross-site request forgery (CSRF) : l'attaque force le navigateur d'une victime DÉJÀ authentifiée à envoyer une requête non désirée (le virement), exploitant la session active. Ce n'est pas du XSS (pas d'exécution de script malveillant chez la victime, mais abus de la requête), ni du SQLi (pas de manipulation de requête de base de données), ni du phishing (qui trompe l'utilisateur pour qu'il livre lui-même ses identifiants). Défense : tokens anti-CSRF.

  4. Un programme malveillant se propage à travers un réseau d'entreprise en exploitant une vulnérabilité connue, sans qu'aucun utilisateur n'ait à ouvrir ou exécuter quoi que ce soit. Quel type de malware est-ce ?

    • A Virus
    • B Worm
    • C Trojan
    • D Logic bomb
    Réponse & justification

    Réponse : B — Worm

    Worm : il se propage seul via le réseau en exploitant des vulnérabilités connues, SANS action de l'utilisateur (ex. Morris Internet Worm, 1988). Un virus exigerait une action de l'utilisateur et modifierait d'autres programmes ; un trojan prétend être utile et ne se reproduit pas ; une logic bomb attend une condition pour déclencher son payload, sans se propager. Le critère décisif est l'absence d'action utilisateur.

  5. Quelle affirmation distingue correctement OAuth 1.0a de OAuth 2 pour la sécurité d'une API REST ?

    • A OAuth 1.0a utilise une signature cryptographique et peut être utilisé sans TLS ; OAuth 2 supprime les signatures et exige TLS
    • B OAuth 2 utilise une signature cryptographique et peut être utilisé sans TLS ; OAuth 1.0a exige TLS
    • C Les deux exigent TLS et utilisent une signature HMAC-SHA1
    • D Aucun des deux n'utilise de chiffrement ; ils reposent uniquement sur Basic authentication
    Réponse & justification

    Réponse : A — OAuth 1.0a utilise une signature cryptographique et peut être utilisé sans TLS ; OAuth 2 supprime les signatures et exige TLS

    OAuth 1.0a utilise une signature cryptographique (typiquement HMAC-SHA1) et, le token secret n'étant jamais transmis, c'est la seule option utilisable sans TLS (TLS restant recommandé). OAuth 2 supprime les signatures et délègue tout le chiffrement à TLS, qui devient obligatoire. L'option B inverse les deux versions ; C est faux car seul OAuth 1.0a signe et OAuth 1.0a n'exige pas TLS ; D est faux car OAuth est un protocole d'autorisation distinct de Basic auth, et la reco générale est HMAC SHA-2/SHA-3.

Points essentiels à retenir

  • La majorité des attaques visent la couche applicative web ; le OWASP Top 10 est la liste de référence des risques à connaître et mitiger.
  • Input validation et output encoding sont les deux défenses essentielles ; HTTP étant stateless, les sessions doivent être chiffrées, aléatoires et non prédictibles.
  • SQLi (manipule la requête, base de données), XSS (exécute du script chez d'autres, navigateur) et CSRF (abuse d'une session authentifiée) se reconnaissent au scénario.
  • API REST : mêmes mécanismes que le web, HMAC SHA-2/SHA-3 ; OAuth 1.0a signe (sans TLS possible), OAuth 2 supprime les signatures et exige TLS.
  • Malware : virus (action utilisateur, modifie des programmes) vs worm (propagation réseau autonome) ; connaître RAT, logic bomb, botnet, ransomware.
  • SDS déplace la sécurité vers un modèle cloud centralisé et virtualisé ; ZTA et microsegmentation reposent sur l'identity management des entités.

Synthèse du domaine

La quasi-totalité des attaques d'aujourd'hui visent les couches logicielles des systèmes distribués et exposés sur Internet. Ces vulnérabilités sont auto-induites : elles sont créées comme erreurs dans les requirements, les designs et le source code, puis ne sont pas détectées par des tests, vérifications et évaluations défaillants, et finissent par être trouvées et exploitées par les attaquants. Le plus frustrant est que les failles les plus dévastatrices (buffer overflow, escalade de privilèges, validation de données absente) sont parfaitement comprises depuis longtemps, mais réapparaissent faute d'utiliser des frameworks et standards de codage sécurisés.

Les brèches de données peuvent viser de simples fichiers (listes de credentials mal protégées, logs, documents), mais les vols de millions d'enregistrements ciblent les bases de données et les data warehouses. Le web ajoute une surface propre : le mobile code circule le plus souvent en source code lisible, et presque toutes ses vulnérabilités sont auto-infligées par erreur de programmation ou de conception de page. La sécurité doit donc être traitée comme un élément essentiel dès le départ et à chaque étape : c'est un ingrédient, un processus et une emerging property du système et des processus utilisés tout au long de la vie du logiciel.

Les organisations peuvent éviter le faux dilemme entre rapide/lent, économique/coûteux et risqué/sécurisé en choisissant de meilleures approches : intégrer des équipes traditionnellement séparées (développement, QA, opérations) en démarches transversales ; utiliser des secure coding guidelines, des langages, des libraries et des outils adaptés ; reconnaître les faiblesses récurrentes au niveau du source code et instituer des contrôles pour les limiter, les détecter tôt et les remédier (protection des API, buffer overflows, escalade de privilèges, data validation) ; et s'appuyer sur des CMM pour améliorer continuellement la sécurité et la qualité.

La complexité croissante aggrave le défi : les systèmes modernes empilent plateforme matérielle, microcode CPU, machine virtuelle, OS, ORB, serveurs de bases de données et web, API libraries et interfaces multiples. Cette complexité, ajoutée pour l'interopérabilité, rend bien plus difficile de concevoir des systèmes conformes aux exigences de sécurité et de vérifier qu'ils le restent en exploitation. Le software quality assurance, le testing et le security assessment permettent des réductions de risque significatives, applicables au développement tiers, au COTS, aux systèmes IT de commodité et aux logiciels orphelins.

Le message central reste invariant : la meilleure sécurité est toujours conçue dans le système, jamais ajoutée après. Les mécanismes de protection et les safeguards doivent être conçus et implémentés tôt, pas backfittés après que des tests ou des attaques en aient démontré les faiblesses. Le security professional n'a pas besoin de devenir software engineer, mais doit posséder une connaissance pratique de la façon dont le logiciel est construit et déployé pour conseiller, évaluer et faire appliquer la posture de sécurité requise.

Glossaire (Terms & Definitions)

Les termes-clés du Domaine 8, à maîtriser en anglais pour l'examen.

TermeDéfinition
AcceptanceRemise formelle et structurée du logiciel fini à l'organisation cliente, impliquant test, analyse et évaluation.
AccreditationDéclaration formelle d'une autorité (DAA) approuvant l'exploitation d'un système à un niveau de risque acceptable, sur la base de safeguards approuvés.
ACID TestIntégrité des données garantie par l'application des politiques d'atomicity, consistency, isolation et durability dans les transactions.
Advanced Persistent ThreatsAgent ou organisation menant une attaque très sophistiquée et multi-étapes contre une cible sur des mois ou années, avec un objectif stratégique.
AggregationCapacité de combiner des données non sensibles issues de sources distinctes pour produire de l'information sensible.
Blocked and Allowed ListsListes d'identités, URL, adresses, fichiers ou programmes bloqués ou autorisés pour contrôler leur accès, usage ou exécution (remplacent blacklist/whitelist).
BotnetsRéseau de systèmes ou processus automatisés (bots) agissant ensemble, généralement à des fins malveillantes, démultipliant puissance et vitesse d'attaque.
BotsClasse émergente de mobile code utilisant un machine learning limité pour assister les requêtes utilisateur, automatiser des workflows ou valider des entrées.
Buffer OverflowVulnérabilité du source code permettant d'accéder à des emplacements mémoire hors de l'espace alloué au buffer, déclenchée par une entrée trop grande.
Bypass AttackTentative de contourner les contrôles du front-end de l'application de base de données pour accéder directement à l'information.
CertificationAnalyse technique de sécurité complète d'un système pour s'assurer qu'il satisfait toutes les exigences de sécurité applicables.
Citizen ProgrammersMembres de l'organisation codifiant leur savoir en formes pseudo-logicielles (macros, scripts) hors du contrôle qualité, CM ou sécurité, posant un risque.
Code Protection or Logic HidingEmpêche une unité logicielle de lire ou modifier le code source, intermédiaire ou exécutable d'une autre unité.
Code ReuseRéutilisation, plutôt que réinvention, d'unités logicielles déjà démontrées correctes, complètes, sûres et sécurisées.
Commercial Off-the-Shelf (COTS)Éléments logiciels fournis comme produits finis non destinés à être modifiés par l'utilisateur, extensibles par scripts, macros et paramètres.
Common Object Request Broker Architecture (CORBA)Ensemble de standards assurant l'interopérabilité entre produits matériels et logiciels sur des machines différentes en réseau (localisation et usage d'objets).
Configuration ControlProcessus de contrôle des modifications du matériel, firmware, logiciel et documentation pour protéger le système contre les changements indus.
Configuration ManagementEnsemble d'activités établissant et maintenant l'intégrité des produits IT par le contrôle de leurs configurations tout au long du cycle de vie.
Continuous Integration and Continuous Delivery (CI/CD)Automatisation des workflows réduisant le besoin de communication et coordination manuelles entre les étapes du développement logiciel.
Covert ChannelVoie de communication entre processus transférant de l'information en violation d'une politique de sécurité, créée délibérément ou exploitée à l'insu.
Data ContaminationUsage par l'attaquant d'entrées malformées (champ, enregistrement, transaction ou fichier) pour perturber le bon fonctionnement du système.
Data LakeData warehouse incorporant plusieurs types ou flux de données non structurées ou semi-structurées.
Data MiningTechnique d'analyse et de décision extrayant des significations profondes de nombreuses instances et types de données, souvent d'un data warehouse.
Data ModelingProcessus de conception identifiant tous les éléments de données que le système devra créer, stocker, modifier, sortir et détruire en exploitation.
Data Protection or Data HidingRestreint ou empêche une unité logicielle de lire ou modifier les données privées d'une autre unité.
Data Type EnforcementMesure de la protection qu'offre un langage contre les opérations sur des types de données dissemblables conduisant à des résultats erronés.
Data WarehouseCollection de sources de données (bases internes ou externes) offrant une base d'information élargie pour l'analyse, le trending et la référence.
Database Management System (DBMS)Suite d'applications gérant bases de données et environnements ; son moteur réalise les opérations CRUD de façon sécurisée (CIA).
Database ModelConcepts de conception sous-jacents qu'un DBMS implémente, définissant l'organisation, la structure et l'architecture offertes aux utilisateurs.
Data-Centric Threat ModelingMéthodologie centrée sur le mouvement, la localisation et l'usage autorisés des données (in transit, at rest, in use) pour appliquer les décisions de sécurité.
Defensive ProgrammingStyle de conception et codage traduisant la logique métier sur les entrées acceptables et nuisibles en code, bloquant sûrement les entrées dangereuses.
DevOpsApproche fondée sur les principes lean et agile où métiers, développement, opérations et QA collaborent pour livrer le logiciel en continu.
DevSecOpsFusion de la revue par phases (waterfall) avec DevOps pour intégrer sécurité, sûreté et résilience à chaque tour du cycle de développement.
Dynamic Application Security Testing (DAST)Outils exécutant l'unité, l'application ou le système testé pour le pousser à révéler une vulnérabilité potentiellement exploitable.
Emerging PropertiesManière puissante d'envisager les comportements de niveau système (safety, security) et de répondre de façon testable à « quel est notre niveau de sécurité ? ».
EncapsulationApplication du data hiding et du code hiding en regroupant données et méthodes ; aussi : emballer des données dans une autre structure (réseau, chiffrement).
Executable Code, Object CodeReprésentation binaire du jeu d'instructions en langage machine que le CPU et le matériel cible exécutent directement.
Extensible Markup Language (XML)Extensions de HTML permettant le stockage et le transport de données en réseau, souvent pour relier pages web front-end et bases de données back-end.
Functional RequirementsDécrivent une tâche ou un processus fini que le système doit réaliser, souvent traçables jusqu'à des éléments précis du design final.
Hierarchical Database ModelModèle de base de données où éléments et enregistrements sont organisés en structures parent-enfant telles que des arbres.
Independent Verification and Validation (IV&V)Revue, analyse et test par un tiers objectif confirmant que les exigences sont bien définies (verify) et correctement implémentées (validate).
InheritanceMécanisme par lequel les objets membres d'une classe héritent de caractéristiques spécifiques de cette classe (ex. attribut read-only d'un dossier).
Interactive Application Security Testing (IAST)Test combinant SAST et DAST pour ajouter une analyse comportementale et localiser précisément la source des vulnérabilités.
Integrated Development Environments (IDEs)Ensemble d'applications, procédures, bases et outils donnant aux programmeurs de quoi concevoir, coder, compiler, tester et intégrer un logiciel fini.
Integrated Product and Process Development (IPPD)Technique de management intégrant simultanément toutes les activités d'acquisition via des équipes pluridisciplinaires pour optimiser conception et support.
Integrated Product Team (IPT)Équipe de parties prenantes aux compétences variées travaillant ensemble pour réaliser un processus ou un produit défini.
Intermediate CodeForme intermédiaire entre source code lisible et binaire exécutable, servant surtout à l'indépendance machine ou la portabilité (ex. Java).
Knowledge Discovery in Database (KDD)Méthode mathématique, statistique et de visualisation identifiant des motifs valides et utiles dans les données.
Knowledge ManagementGestion efficace de l'information et des ressources de l'entreprise pour nourrir la business intelligence et la prise de décision.
Level of AbstractionMesure de la proximité entre une description (code, design) et les détails de l'objet sous-jacent ; plus bas signifie plus de détail fin.
Living Off the LandAttaque utilisant un accès illicite pour détourner les capacités natives du système sans malware, échappant ainsi aux défenses anti-malware.
Logic BombsMalware inséré dans un programme qui s'active et exécute des fonctions au profit de l'attaquant à une date ou sous conditions ultérieures.
Malformed Input AttackErreurs de source code conduisant à mal gérer des entrées hors plage, contradictoires ou non autorisées, pouvant provoquer une exécution de code arbitraire.
MalwareProgramme inséré dans un système, souvent furtivement, pour compromettre la confidentialité, l'intégrité ou la disponibilité des données ou de l'OS.
Markup LanguagesLangages non programmatiques exprimant la mise en forme des données ; extensibles, ils peuvent devenir programmatiques (ex. JavaScript étend HTML).
Memory or Object ReuseRéutilisation d'objets ou de mémoire par des processus ; toute donnée résiduelle laissée dans l'objet réutilisé est un risque de data remanence.
MetadataInformation décrivant le format ou le sens d'autres données, offrant une méthode systématique pour décrire les ressources et améliorer leur récupération.
Mobile CodeFichier(s) envoyé(s) par un système à des clients qui, ouverts par un logiciel installé, contrôlent ou sont directement exécutés par le CPU du client.
Modified Prototype Model (MPM)Approche bâtissant d'abord une version simplifiée de l'application, affinée itérativement via le feedback des stakeholders jusqu'à satisfaction.
Network Database ModelModèle de base de données où éléments et enregistrements sont liés de façon arbitraire (listes, clusters ou autres formes en réseau).
Nonfunctional RequirementsIdentifient des caractéristiques larges du système entier (sécurité, sûreté, privacy, résilience) sans s'aligner sur un sous-ensemble d'éléments précis.
ObjectEncapsulation d'un ensemble de données et des méthodes permettant de manipuler ces données.
Object-Oriented (OO) Database ModelModèle utilisant les concepts OOP (classes, instances, objets) pour organiser et stocker données et méthodes ; schemas et views structurent l'accès.
Object-Oriented Programming (OOP)Définit l'objet comme un ensemble logiciel offrant des méthodes internes que le logiciel externe peut demander d'exécuter, avec entrées et sorties spécifiées.
Open-Source SoftwareLogiciel dont le source code et les infos de design sont publics pour inspection, test et usage ; les licences autorisent souvent modification et refactoring.
PolyinstantiationCrée une nouvelle instance d'un item de données avec le même identifiant mais des valeurs différentes, protégeant des security levels distincts d'une ressource partagée.
PolymorphismPermet à un objet de prendre plusieurs formes selon son usage, évitant que ses changements ne se propagent à tous les programmes l'utilisant.
Procedural ProgrammingMet l'accent sur la séquence logique des étapes ; une procédure réalise une fonction, prend des entrées et produit des sorties, et peut en appeler d'autres.
Query AttackUsage d'outils de requête pour accéder à des données normalement interdites par le front-end de confiance, dont via des requêtes SQL malformées.
Ransom AttackAttaque menaçant de détruire, refuser ou divulguer des actifs informationnels privés, impliquant souvent leur chiffrement jusqu'au paiement d'une rançon.
RansomwareMalware utilisé pour faciliter une ransom attack.
Rapid Application Development (RAD)Méthodologie créant une application plus vite en réduisant les méthodes formelles et en réutilisant des composants logiciels.
RefactoringRéécriture partielle ou complète d'un logiciel pour réaliser les mêmes fonctions sous une forme plus simple, efficace ou maintenable.
Regression TestingTest vérifiant que des modifications récemment approuvées n'ont pas altéré d'autres fonctions approuvées ni introduit de comportements non autorisés.
Relational Database ModelModèle organisant données et enregistrements en tables liées entre elles pour combiner des enregistrements de structures différentes dans une même activité.
Representational State Transfer (REST)Style architectural logiciel synchronisant deux applications sur des systèmes différents en échangeant de l'information d'état, via HTTP ou HTTPS.
Runtime Application Security Protection (RASP)Agents de sécurité intégrés à une application par le développeur, détectant des violations et pouvant la stopper ou prendre des actions protectrices.
SandboxEnvironnement de test isolé logiquement, physiquement ou virtuellement, servant au développement, à l'intégration, au criblage de malware ou à un honeynet.
ScannersLogiciels examinant des fichiers suspects pour détecter du malware par analyse de signatures, monitoring d'activité, heuristiques ou machine learning.
Secure Coding Guidelines and StandardsBonnes pratiques de professionnels qui, bien appliquées, réduisent fortement le nombre de vulnérabilités exploitables subsistant dans le système déployé.
Security AssessmentTest, inspection et analyse déterminant dans quelle mesure un système atteint la posture de sécurité requise, à la construction ou face aux menaces réelles.
Software (Quality) AssuranceProcessus déterminant si un logiciel remplit ses fonctions voulues, n'en exécute pas d'indésirables, et est exempt de vulnérabilités et d'erreurs connues.
Software Capability Maturity Modeling (SW-CMM)Processus de management favorisant l'amélioration continue des processus de développement, maintenance et usage du logiciel.
Software Development Life Cycle (SDLC)Framework et processus systématique en étapes pour construire, déployer et soutenir des logiciels, de la planification au décommissionnement.
Software LibrariesRéférentiel de code préécrit (classes, procédures, scripts) fourni par des vendeurs, des tiers de confiance, l'interne ou des sources open-source.
Source CodeInstructions de programme écrites en forme lisible par l'humain selon les règles de syntaxe et de sémantique d'un langage formel.
Spiral MethodProcessus améliorant le waterfall en ajoutant un cycle Plan-Do-Check-Act (PDCA) de sous-étapes à chaque phase du SDLC.
Spyware and AdwareLogiciels de monitoring et collecte de données (PUP/PUA) ; le spyware surveille, l'adware sert la publicité ; légitimes ou intrus selon les cas.
Static Application Security Testing (SAST)Outils analysant le source code (sans l'exécuter) pour détecter erreurs de type, violations de bornes et code inatteignable.
Strong Data TypingCaractéristique d'un langage prévenant les erreurs de mismatch de type en générant des erreurs à la compilation, forçant la correction.
Threat SurfaceEnsemble total des pénétrations d'une frontière ou d'un périmètre entourant des éléments du système.
Time of Check versus Time of Use (TOCTOU)Attaque exploitant le délai entre un contrôle de sécurité (authentification ou autorisation) et l'usage effectif de l'asset.
Trapdoor or BackdoorMécanisme caché contournant les contrôles d'accès, inséré par les développeurs pour la maintenance ou par un attaquant pour un accès non autorisé.
TrojansMalware insérant des backdoors ou trapdoors dans d'autres programmes ou systèmes, parfois déguisé en application utile ou divertissante.
Trusted Computing Base (TCB)Ensemble du matériel, logiciel et firmware d'une architecture spécifiquement responsable de la sécurité et de l'isolation des objets.
View-Based Access ControlsContrôle divisant logiquement la base en vues (enregistrements, champs) pour masquer aux utilisateurs non autorisés les données sensibles.
VirusProgramme conçu pour se copier et se disperser à l'insu de l'utilisateur, modifiant généralement d'autres programmes pour y inclure une copie de lui-même.
Waterfall Software Development Life Cycle (SDLC)Modèle de SDLC classique aux frontières nettes entre phases, chacune devant être complétée et testée avant que la suivante ne commence.
WormProgramme se copiant et se dispersant à l'insu de l'utilisateur, mais sans avoir besoin de modifier d'autres programmes pour s'y répliquer.

Points essentiels du domaine

Ce qu'il faut absolument retenir

  • La security du développement consiste à intégrer la sécurité dans le SDLC pour prévenir les vulnérabilités et obtenir un logiciel secure by design : la meilleure sécurité est toujours conçue dans le système, jamais ajoutée après.
  • Le SDLC comprend plusieurs phases (planification, conception, implémentation, test, déploiement) ; l'essentiel n'est pas qu'un SDLC formel soit utilisé, mais que tout le processus de développement intègre la sécurité.
  • Les secure coding practices comme l'input validation et l'error handling préviennent les vulnérabilités courantes telles que le buffer overflow et l'injection SQL.
  • Les code reviews et le testing - static code analysis (SAST) et dynamic testing (DAST) - permettent d'identifier les vulnérabilités tôt dans le cycle.
  • Les organisations doivent choisir leur méthodologie selon leurs besoins ; changer de méthodologie ajoute de la complexité et du risque (nouveau personnel, nouveaux processus).
  • Les maturity models (SW-CMM) servent à comprendre les processus actuels, évaluer les opportunités d'amélioration et fixer des cibles : c'est une stratégie de mesure.
  • Il existe quatre grands types d'évaluation du risque de sécurité logicielle : certification and accreditation, risk management frameworks, CMM, et software (quality) assurance.
  • Quatre phases structurent l'acquisition de logiciels via des tiers : planning, contracting, monitoring/acceptance/deployment, et ongoing use and support.
  • Un logiciel sécurisé ne le reste pas si ses specifications, designs, source code ou scripts de build peuvent être altérés dans le pipeline : change management et configuration control sont vitaux.
  • Le software-defined security (SDS) marque un changement de paradigme : l'identité (de toute entity, pas seulement des users) est centrale, l'access management descend au niveau de l'asset le plus bas, et la zero trust architecture (ZTA) à la fois permet et exige le SDS.

Pour aller plus loin