Sécurité des Applications
Introduction à la sécurité
Outils pour la sécurité
Les outils pour la sécurité recouvrent des notions à peu près identiques quelque soit le domaine de
l'informatique que l'on considère. Les catégories développées ici sont présentes dans les trois
problématiques traités dans la suite : le code, le réseau et les applications web.
Les outils de contrôle d'accès et de filtrage
Notions : contrôle d'accès discrétionnaire, ressources informatiques, règles d'accès, chaînage de droits, authentification forte, les trois types d'authentifications, architectures de contrôle d'accès, filtrage des flux.
Le contrôle d'accès : c'est permettre à un sujet d'accéder à un système sous certaines conditions et d'effectuer un certain nombre d'opérations sur un objet défini. Ceci doit théoriquement permettre d'envisager tous les situations d'accès possibles mais la multiplication des sujets, des objets et des règles rend une vision globale difficile.
Le premier type de contrôle est celui discrétionnaire. C'est le propriétaire qui définit les règles d'accès aux informations qu'il possède. Le second est le contrôle des flux qui sera plus largement traité dans la partie sécurité réseau.
Ces outils de contrôle d'accès discrétionnaire proposent des mécanismes permettant de définir les droits d'accès à une information. Un exemple est le contrôle d'accès à un système d'exploitation qui repose sur l''authentification de l'utilisateur. En s'authentifiant l'utilisateur obtient un accès à son compte qui comporte des règles définissant les ressources utilisables.
Des exemples de ressources sont :- un partage de fichiers réseaux;
- des fichiers sur les disques locaux;
- des librairies ou des exécutables;
- des ressources multimédias (affichage, son, ...).
- le droit de lecture;
- le droit d'écriture;
- le droit d'exécution.
A ces règles peuvent s'ajouter des conditions d'environnement. Par exemple, un utilisateur distant aura des droits réduits par rapport à la situation où il travaille au sein même de l'entreprise.
La catégorisation ci-dessus ne se limite pas à la gestion des droits des utilisateurs. Les bases de données (par exemple : OpenLDAP) et les annuaires (par exemple PostgreSQL) fournissent généralement des informations permettant le bon fonctionnement d'autres logiciels. La granularité dans les droits d'accès est plus fine que pour les fichiers. Dans le droit à l'écriture on distingue, par exemple, l'ajout d'information, la suppression d'information et la modification des informations existantes.
Une base de données ou un annuaire peut elle-même contenir des informations de contrôle d'accès à une autre ressource. Il est donc nécessaire de gérer les droits entre les différentes entités de manière cohérente.
Un client qui consulte ses comptes en ligne va renseigner son identifiant et son mot de passe dans un logiciel d'interface. Celui-ci va alors s'authentifier auprès de la base des utilisateurs et l'interroger afin de vérifier l'identité du client. En fonction de l'identité de l'utilisateur, le logiciel d'interface va consulter les informations relatives à son compte et les afficher à l'utilisateur. La distinction entre les utilisateurs est donc faite le logiciel d'interface. Pour la base de données des utilisateurs, il n'existe qu'un seul client qui est le logiciel d'interface.
Le contrôle d'accès repose donc soit sur des mécanismes propres ou peut-être déléguée à des outils d'authentification. Dans l'exemple précédant les mécanismes d'authentification étaient traités par le logiciel d'interface et les informations d'authentification stockés dans un autre logiciel. Une autre solution est de faire traiter ces deux aspects par un outil externe qui renvoit un identifiant permettant de désigner
l'utilisateur sans ambiguité. Dans ce cadre il est crucial que la communication entre la solution d'authentification et le logiciel exploitant l'identité soit sûr. En particulier le passage par la solution d'authentification doit être incontournable.
L'authentification forte repose sur la vérification de deux éléments dans les trois catégories suivantes :* ce que l'on est : biométrie;
* ce que l'on sait : mot de passe, code confidentiel;
* ce que l'on possède : carte à puce.
Dans les solutions basées sur ce que l'on est, il existe notamment les techniques suivantes :
* l'empreinte digitale;* la reconnaissance de la main;
* la reconnaissance faciale;
* l'analyse vocale;
* l'analyse de l'iris;
* la reconnaissance dynamique de la signature.
Le principe est de stocker une empreinte numérique des informations de l'utilisateur analysées qui peut être formée à partir de points caractéristiques. Lors de l'authentification de l'utilisateur, cette empreinte est recalculée dynamiquement et comparée à la base d'empreinte stockée.
Ce système ne permet pas de révoquer des accès en cas de compromission. L'information utilisée peut potentiellement être facile obtenir soit dans la vie quotidienne pour l'empreinte digitale soit via un système biométrique basé sur le même principe.
Dans les solutions basées sur ce que l'on sait, l'utilisateur transmet une information qu'il est seul à connaître, le système d'authentification vérifie que l'information fournie par l'utilisateur est bien celle attendue. Un exemple simple est le mot de passe. L'information doit être véhiculée par un canal sûr.
Une solution alternative est de demander à l'utilisateur de fournir une information différente à chaque fois qu'il peut calculer à partir d'une information que lui et le système d'authentification possède.
C'est le challenge/réponse. Par un exemple, l'utilisateur reçoit une chaîne de donnée. Il utilise son secret et cette chaîne de donnée pour calculer une nouvelle chaîne de donnée avec une fonction à sens unique ou fonction de hachage. Il transmet le résultat de ce calcul au système d'authentification qui vérfie que le résultat est le bon. Ceci permet d'éviter le rejeu.
Les solutions basées sur ce que l'on sait dépendent beaucoup des règles de gestion du secret :
complexité du mot de passe, durée de vie, stockage de cette information sur le seveur, réutilisation du mot de passe, ...
La règle de base est de ne jamais donner aucun mot de passe à personne et en particulier à un administrateur.
Il ex
iste différents types d'architecture de contrôle d'accès :
– le portail unifié ou single sign on : l'utilisateur s'authentifie une fois auprès d'un portail qui relaie l'identité de l'utilisateur auprsè des autres applications;
– le serveur d'authentification : chaque application relaie les informations d'authentification auprès d'un
serveur unique offrant ce service;
– l'accès à distance : l'utilisateur se connecte sur un serveur d'accès distant qui effectue les requêtes à la
place de l'utilisateur.
Le contrôle d'accès permet outre de définir des droits d'accès logique de mettre en place l'imputabilité. Celle-ci permet de se prémunir des comportements indésirables qu'ils soient volontaires ou non. Une analyse automatisée des traces enregistrées soit de déclencher des alarmes pour une analyse en temps réel (en utilisant des règles prédéfinies ou par analyse heuristique), soit de mener des investigations suite à un incident.
La notion de filtrage sera plus largement développée dans « la partie sécurité réseau ». Elle repose
sur le principe de contrôle de l'échange d'information entre deux éléments ayant des niveaux de sécurité distincts. Ceux sont les différences entre ces éléments qui nécessitent la notion de contrôle des échanges.
Les actions effectuées peuvent être :
– empêcher la transmission de l'information dans un sens ou dans les deux sens;
– vérifier l'authenticité d'une des entitées;
– conserver une trace des échanges;
– limiter les échanges en volume ou en qualité;
– vérifier la qualité des informations transmises;
– ...
Les outils de protection des systèmes
Notions : défense en profondeur, menaces sur un système, protection des données, intégrité, code correcteurs d'erreurs, intégrité cryptographique, confidentialité, chiffrement, steganographie, canaux cachés, effacement de données, conservation de données, protection des ressources, gestion des configurations, protection de fonctionnement, haute disponibilité, contrôle des ressources.
La sécurité repose sur la défense en profondeur. Le système ne doit pas faire confiance à l'utilisateur même si celui-ci a validé les conditions d'accès au système. Les outils de protections des systèmes visent à se protéger :
- de la modification, la lecture ou la destruction des informations échangées avec d'autres systèmes, en
- entrée comme en sortie;
- de la modification ou de l'alération des ressources nécessaires au fonctionnement du système;
- des perturbations apportées au système pour le mettre dans un état vulnérable.
Le contrôle d'intégrité vise à s'assurer que les informations sont intactes et qu'elles n'ont pas été modifiées pendant leur transfert ou sur leur stockage sur un support. Plusieurs techniques peuvent être utilisées en fonction de la stabilité de l'information et des menaces que l'on cherche à couvrir.
Les modifications accidentelles concernent surtout les transferts d'information ou le stockage sur des supports soumis à des dégradations lors de leur vieillissement. La technique utilisée est celle du code correcteur d'erreur. L'information est répétée sous plusieurs formes, ce qui permet de détecter les erreurs et de les corriger dans certains cas.
Une exemple simple est le contrôle de parité. Sur un octet (8 bits d'information 0 ou 1), un bit est utilisé pour indiquer la parité des sept autres. Si un nombre impair d'erreurs se produit, on peut détecter qu'il y a eu une erreur mais pas la corriger.
Un exemple plus complexe mais beaucoup plus performant sont les turbocodes qui sont par exemples utilisés dans l'UMTS. Ils permettent d'obtenir de très bons résultats proches de la limite théorique de pouvoir de correction de Shannon.
Chaque code définit la structure et le nombre d'erreurs qu'il peut corriger. Les erreurs peuvent être
isolées, en bloc, uniformément aléatoires, ...
Les codes correcteurs d'erreurs ne permettent pas de se prémunir des modifications interntionnelles.
L'attaquant est en effet en mesure de recalculer les valeurs de redondances pour faire croire qu'il n'y a pas eu de modification. Deux techniques peuvent être utilisées : le scellement numérique et la signature électronique.
Le scellement numérique repose sur un algorithme non linéaire irréversible qui permet de calculer un sceau à partir des données transmises. Ce sceau est ensuite ajouté aux données utiles et transmis avec
l'information. L'algorithme de scellement peut être un algorithme de chiffrement par bloc en mode CBC
dans lequel on utilise le bloc précédent chiffré et le bloc à chiffrer pour calculer le nouveau chiffré. Ce peut également être une fonction de condensation ou fonction de hachage dont le résultat est chiffré avec un algorithme de chiffrement symétrique.
La signature numérique est un scellement particulier dans lequel on chiffre le condensat numérique
avec un algorithme asymétrique ce qui garantit l'identité de la personne qui a créé le message.
La confidentialité vise à empêcher la lecture d'une information par des personnes qui ne sont pas légitimes pour le faire. Deux techniques peuvent être utilisées.
La première consiste à chiffrer les informations afin de les rendre incompréhensibles par un attaquant. C'est notamment cette technique qui est utilisée pour les connexions sécurisées dans le cadre du commerce électronique. La sécurité repose sur la connaissance d'un secret. Une attaque courante contre cette technique est l'attaque par le milieu ou man in the middle. Elle consiste à se faire passer auprès de chacun des intervenants pour l'autre intervenant.
La seconde consiste à masquer l'information sensible dans de l'information banale. Ceci entraîne une modification de l'information transmise qui est généralement invisible si le ratio information cachée/information banale n'est pas trop grand. La sécurité repose sur le mécanisme utilisé pour cacher
l'information. Ceci rend difficile l'utilisation d'un tel procédé pour des échanges dans des systèmes de tailles importantes.
Une technique pour éviter la diffusion d'une information est d'empêcher sa diffusion via des canaux
non contrôlés ou cachés. Une manière de diffuser de l'information est d'avoir un comportement dont
l'analyse permet de reconstituer les données (par exemple le morse). La protection contre de tels système est très difficile et n'est généralement possible que dans le cas de comportements facile à détecter et peu ambigu. Par exemple, une méthode employée par une femme de ménage dans une entreprise consistait à voler chaque jour quelques pages en bas d'une des piles de papier sur un bureau.
Le dernier point sur la protection des données concerne les risques de pertes ou au contraire leur présence résiduelle. Pour accéder à un fichier le système utilise une table des fichiers qui donne la correspondance entre le nom du fichier et son emplacement sur le support physique. Pour des raisons de performance, lors de l'effacement d'un fichier, on ne supprime que la référence dans la table. Le fichier est donc toujours accessible si l'on lit le support au bon endroit.
Des outils permettent de récupérer l'information sur un support sans la table des fichiers. Les outilsd'effacement résiduel suppriment le fichier du support en écrivant des données aléatoires sur les espaces non affectés à des fichiers présent dans la table. Il effectuent cette tâche plusieurs fois car à chaque écriture les données précédentes ne sont pas totalement effacées.
Des données peuvent également être conservées dans les imprimantes réseaux, sur les disques réseaux de partage de fichiers, fichiers de quarantaine des antivirus, fichiers temporaires, ... Toutes ces zones peuvent être la source de fuite d'informations.
Le disque dur est l'une des pièces les plus fragiles car il comporte de nombreuses pièces mécaniques. Il est donc important d'utiliser des outils afin de sauvegarder les données sensibles. La première méthode consiste à faire une réplication automatique en utilisant plusieurs disques durs redondants sur un même équipement (RAID). Ceci ne permet pas de se prémunir d'un incident électrique entrainant la destruction des disques ou d'un incendie.
La seconde consiste à dupliquer les données sur un autre support généralement stocké dans un local différent. La difficulté est la perennité du support, la réutilisation de ces informations et les conditions de stockage de ces informations en particulier dans le cas d'un stockage de l'ongue durée.
La protection des ressources a pour but d'assurer la disponibilité et le bon fonctionnement des ressources nécessaires au fonctionnement d'un système.
La bonne configuration des produits permet de s'assurer qu'ils peuvent répondre au besoin de
manière satisfaisante. Lors du développement et de l'intégration d'un projet dans le système d'information, la
gestion de la configuration est prise en compte. Il est nécessaire de poursuivre cette action dans la phase
d'exploitation afin de prendre en compte, les changements de version, s'assurer de la conformité des
configurations des différents éléments, garder un inventaire des ressources disponibles. Des outils
permettent d'identifier les différents composants d'un parc, faire les changements nécessaires sur les
configurations et garder des traces de ces actions.
La protection du fonctionnement vise à protéger le système et son environnement des conditions de
fonctionnement exceptionnelles ou des défaillances.
La redondance du matériel ou haute disponibilité permet de se prémunir d'une défaillance du
matériel. La haute disponibilité peut être :
– actif/passif : un équipement est actif et en cas de défaillance, un autre équipement reprend le service.
– actif/actif : les deux équipements sont en équilibrage de charge. Chaque équipement offre une partie du
service. et la totalité en cas de défaillance de l'un des deux. Les deux équipements ne doivent pas en
fonctionnement nominal utiliser plus de 50% de leurs ressources.
Une autre solution consiste à utiliser du matériel identique et des logiciels distincts comme cela est
fait en aéronautique afin de se prémunir des erreurs de programmation qui pourraient fausser les résultats.
Trois solutions distinctes sont nécessaires pour résoudre les conflits. Ces techniques sont coûteuses et ne
permettent pas de se prémunir des dysfonctionnements intentionnels.
En cas d'utilisation importante d'un système, il peut arriver qu'aucun utilisateur ne puisse utiliser de
manière satisfaisante le service. Une approche est de limiter la quantité de ressources qui peut être utilisée.
On peut utiliser des mécanismes de priorité, des quotas, limiter la fréquence des accès. Ces règles sont
simple techniquement mais nécessitent de bien définir le cadre d'utilisation d'un service comme par exemple
la messagerie électronique ou l'accès à Internet.
La protection contre les fonctions illicites (virus, vers, ...) repose sur quatre techniques principales :
– la recherche de séquences de programmes caractéristiques (détection sur signature);
– l'analyse heuristique : la recherche de séquence de code typique d'une activité virale;
– l'analyse du comportement;
– la modification de zones réservées.
La majorité des antivirus repose par recherche de signatures. Cette technique est globalement satisfaisante
pour se prémunir des attaques communes mais est inefficace face aux attaques ciblées ou aux codes
malicieux complexes.
===== Les outils d'analyse et de surveillance =====
Notions : noyau de sécurité, journalisation, alarmes de sécurité, IPS, supervision, contrôle de bon
fonctionnement, test de vulnérabilité, supervision, administration.
Pour que les outils de sécurité fonctionnent correctement, ils doivent respecter trois propriétés :
– être protéger contre les altérations;
– être incontournable;
– être petit pour pouvoir être évalué.
La fonction de journalisation réalise la collecte de tous les événements particuliers ou significatifs
afin de pouvoir mener une analyse à posteriori des incidents et avoir une connaissance générale des
événements de sécurité du système. Les événements importants sont ceux émis par les fonctions de sécurité
mais aussi ceux qui décrivent les états de fonctionnement du système. Chaque enregistrement comprend la
ressource ou l'utilisateur concerné, l'action, la date et l'heure. Le format standard est syslog.
La centralisation et la mise en commun facilite l'exploitation des événements de sécurité. La
corrélation des observations des événements sur plusieurs ressourcse en est facilitée. Le système est
5/15
composé d'une détection locale des événements et d'une remontée des informations vers une ressource
centrale.
Les informations journalisées doivent être pertinente afin de ne pas accroître inutilement le volume
d'informations à traiter. On est cependant amener à enregistrer un grand nombre dévénements trivaux afin de
pouvoir exploiter de l'information. Il est essentiel d'exploiter ces informations régulièrement afin d'avoir une
bonne connaissance de ses systèmes. Ceci permet de détecter les faiblesses du système et de rechercher des
indices. La durée de conservation est reglementée.
Le stockage de ces informations ne doit pas se faire sur le même support que celui assurant le fonctionnement du système afin d'éviter les problèmes liés à la saturation de l'espace. En cas d'utilisation importante de l'espace de stockage allouée, une alarme doit être remontée et une politique par défaut doit
s'appliquer : écrasement des anciens enregistrements, arrêt des enregistrements, écrasement sélectif, ...
Une alarme est le signal qu'un événement a été détecté. Cette détection peut être basée sur :
– une règle prédéfinie;
– un écart par rapport à un comportement habituel.
Une alarme peut entraîner une réaction automatique du système comme la désactivation d'une
ressource. Les comportements actifs sont ceux développés dans les IPS (Intrusion Prevention System).
Les outils de supervision permettent de construire en temps réel des tableaux de bord sur l'état de
sécurité des composants d'un système. Des exemples d'indicateurs sont :
– la charge du système : nmbre d'utilisateurs, débit, taux d'occupation des ressources, ...
– les flux d'informations entrants et sortants ainsi que leurs variations;
– les taux d'incidents détectés avec éventuellement les causes associées.
En plus du fonctionnement normal du système, on peut être conduit à mener des tests de contrôle de bon fonctionnement :
– automatiquement et périodiquement afin de vérifier l'état du système ou bien la vérification des effets
d'une action. Par exemple les équipements interrogent régulièrement la présence d'autres équipements;
– ponctuellement et manuellement. Ces tests sont généralement ciblé et plus complexes. Ils visent à
répondre à un besoin particulier.
Une famille de tests automatique et spécifique est le test de vulnérabilité qui consiste rechercher les failles
d'un système en :
– vérifiant les versions des logiciels et les correctifs appliqués;
– essayant systématiquement une liste d'attaques connues.
Ces tests doivent être régulièrement menés et adaptés pour prendre en compte les nouvelles vulnérabilités.
Les dispositifs d'administration permettent de définir l'ensemble des règles de comportement qui
s'appliquent à tous les dispositifs décrits précédemment. Chaque mécanisme intègre généralement ses
fonctions d'administration. La difficulté est la conservation d'une cohérence entre l'ensemble de ces règles. Il
est recommander de séparer les fonctions d'administrateur et de gestionnaire des utilisateurs. Les privilèges
offerts par ces fonctions sont très importants. Il est donc essentiel :
– d'authentifier les utilisateurs utilisant ces fonctions;
– d'assurer l'imputabilité des actions;
– de sécuriser les fonctions d'administration à distance.
====== Sécurité du code ======
Un logiciel ne peut être sécurisé que si la problématique est traitée dès la conception initiale.
Certains facteurs sont propices à des failles de sécurité et nécessitent des précautions particulières :
– utilisation d'un langage de bas niveau comme C qui permet nu grand nombre d'erreurs;
– développement spécifique à une plate-forme avec utilisation de mécanismes spécifiques à la plateforme;
– utilisation de démons fournissant des services réseaux qui exposent le logiciel à une exploitation à
distance;
– utilisation de protocole Internet complexes et qui contiennent parfois des problèmes de sécurité
inhérents : messagerie électronique, téléphonie sur IP.
Une bonne organisation des sources facilite la relecture du code. Un exemple d'organisation est la
séparation des différentes parties du source en fonction des sous-systèmes associés. Une verbosité
importante du code et des commentaires facilitent la compréhension de celui-ci.
La relecture des sources, l'audit du code et la vérification de l'utilisation mémoire sont indispensable
au maintien de la sécurité d'un programme mais ces tâches sont complexes et coûteuses en temps.
2.1 Séparation des privilèges et architecture sécurisée
Notions : architecture et sous-systèmes, moindre privilège, chroot.
Les logiciels sont souvent amenés à faire des tâches complexes. L'utilisation d'une architecture
monolithique rend difficile le maintien d'un bon niveau de sécurité. Certains services nécessitent des droits
élevés comme par exemple l'écoute sur des ports privilégiés tandis que le programme peut être amené à
traiter des données non sûres, gérer des files d'attentes, se connecter sur d'autres programmes, assurer de la
disponibilité. La séparation en module permet de répartir les contraintes et d'appliquer des éxigences
adaptées à chaque sous-partie. Ceci évite que des erreurs de programmation sur une sous-partie affecte le
bon fonctionnement de l'ensemble.
Le programme doit utiliser le moindre privilège. C'est-à-dire que s'il n'a besoin d'aucun privilège, il
n'a aucune raison d'être lancé avec les droits root. Si le programme a besoin d'effectuer des actions
privilégiées, il doit les effectuer le plus tôt possible dans son fonctionnement.
Si le logiciel doit effectuer régulièrement des actions nécessitant des droits élevés, par exemple
lancer des nouveaux processus, il faut isoler ces fonctions dans un sous-système spécifique dont le nombre
de tâche sera réduit au minimum. En particulier l'utilisateur ne devra pas pouvoir effectuer des tâches dans
ce contexte et les données en entrée et en sortie devront être soigneusement vérifiées.
Ces éléments peuvent être complétés en limitant la visibilité dans le système de fichiers. Chroot ou
jail permet ne donner accès qu'à un nombre limité de fichiers, en particulier ceux nécessaires au
fonctionnement du logiciel.
2.2 Gestion de la mémoire et vérification des données
Notions : Vérification des données, gestion de la mémoire, protection de la mémoire vive.
Le programme doit considérer comme non sûres toutes les informations qu'il reçoit d'autres
programmes ou d'un utilisateur. Ceci implique en particulier de vérifier que les chaînes de caractères reçues
sont bien des chaînes de caractères, c'est-à-dire qu'elles se terminent par le caractère '\0'. Il faut également
vérifier la longueur des données pour éviter d'avoir des débordements de tampons dans le cas où les données
seraient de taille trop importante. Enfin, il est important de vérifier que de la mémoire est effectivement
disponible. On peut se retrouver avec un pointeur NULL ou encore provoquer une erreur de programme pour
manque de mémoire.
Plusieurs solutions permettent de gérer plus ou moins efficacement la mémoire dans un programme.
Une solution est d'utiliser une librairie qui gère les tamons et les chaines de caractères afin de gérer la taille de ceux-ci. On peut également utiliser des buffers de taille fixe mais ce n'est pas très souple. Certains
langages de haut niveau utilisent un ramasse-miette ce qui permet de ne pas avoir à gérer la mémoire.
Enfin une solution est de combiner l'utilisation d'une pile pour stocker les données temporaires et
d'un espace mémoire partagé que le programme répartie entre les différentes parties du programme. La
pilepermet de stocker les données temporaires et pour désallouer, on supprime la pile entière.
Un examen de la mémoire lors ou en dehors de l'exécution d'un programme permet de récupérer des
informations sensibles. Ceci est particulièrement vrai pour les mots de passe. La première chose évidente à
ne pas faire est de stocker dans le code un mot de passe. Celui-ci sera conservé lors de la compilation et
7/15
l'attaquant pourra le retrouver en parcourant le fichier binaire.
Suivant les droits possédés par l'attanquant, celui-ci peut examiner le contenu de la mémoire. Ceci
est possible sous windows avec winhex qui permet de parcourir la mémoire vive. Si des mots de passe ont
été stockés en mémoire vive en clair, ils pourront être lu. Dans le cas de données sensibles, une technique consiste à réécrire sur l'espace mémoire. Dans le cas d'une base de données, il est judicieux de ne pas
conserver les mots de passe en clair mais leur image via une fonction de hashage.
2.3 La recherche de vulnérabilités
Notions : analyse par graphe, fuzzing.
Les logiciels sont généralement disponibles sous forme compilée. Les seules informations
accessibles sont les commandes au niveau assembleur. Des changements mineurs dans le code peuvent
changer considérablement la suite d'instructions du fait
– d'allocation de registres différents;
– de la réorganisation des instructions par le compilateur;
– d'inversion de branchements entre les blocs d'instructions pour des raisons d'optimisation.
Une approche est de considérer l'exécutable comme un graphe de fonctions qui s'appellent entre
elles, c'est le graphe des appels. Une première comparaison permet de détecter l'ajout de contrôle ou le
remplacement d'un appel par un autre. Pour comparer différentes versions d'un logiciel, on calcule la
signature structurelle des différentes fonctions en s'appuyant sur le nombre de blocs basiques dans la
fonction, le nombre d'arcs vers cette fonction et le nombre d'appels. Ceci permet de trouver des points fixes
d'une version à une autre et par propagation de trouver les isomorphismes entre les versions.
L'utilisation d'une distance euclidienne permet de résoudre les ambiguités en calculant la racine
carré de la somme des carrés des différences entre les points. Au sein des fonctions on peut appliquer le
même schéma aux blocas basiques en utilisant une signature structurelle telle que nombres d'arcs pour arriver
à l'entrée du bloc, nombre d'arc pour arriver à la fin du bloc et nombre de sous-blocs appelés. On n'utilise
plus le nombre d'appels de la fonction car en général le point d'entrée est unique.
Pour la recherche de vulnérabilités, on se concentre sur les changements apportés, ce qui permet de
trouver plus facilement des zones suceptibles de contenir des vulnérabilités.
Une autre technique, le fuzzing, consiste à envoyer des données aléatoires presques conformes à un
système afin de détecter des comportements anormaux. Les comportements anormaux sont par exemple une
utilisation anormale de ressources mémoires ou processeurs. Les changements les plus usités sont :
– des chaînes aléatoires dans leur contenu et leur longueur;
– des chaînes typiques;
– un grand nombre aléatoire d'arguments;
– des longues chaînes alphanumériques;
– des chaînes de caractères quelconques;
– création de contenu adaptés avec des erreurs de compression;
– ....
Sécurité réseau
La sécurité du réseau se traite aux interconnexions, au niveau du WAN (réseau qui interconnecte les
réseaux locaux) et des réseau locaux selon le principe de défense en profondeur.
3.1 Les filtres de sécurité
Notions : filtre de sécurité, réseaux logiques, VLAN, translation d'adresse, équipements dédiés, sondes,
pare-feu, barrière protocolaire.
8/15
Les filtres de sécurité visent à contrôler les échanges d'information entre deux éléments d'un réseau.
Les produits qui intègrent le plus couramment des fonctions de filtrage sont les commutateurs et les routeurs.
Ces équipements sont utilisés pour transférer l'information d'une liaison à une autre en fonction de règles de
routage. On peut donc effectuer un premier filtrage en n'autorisant seulement le trafic entre certains points.
Une technique plsu avancée permet de marquer les paquets afin de créer des réseaux logiques au
sein d'un même réseau physique ou sur des réseaux physiques distants. C'est le concept de réseau local
virtuel ou VLAN (Virtual Area Network). L'IEEE a défini une norme sous la référence 802.1Q.
Il existe des VLAN
– par port physique;
– par adresse MAC;
– par adresse IP ou sous-réseau;
Ces équipements offrent des fonctions de filtrage plus évolués :
– filtrage en fonction des adresses sources et destination, port source et destination, des protocoles;
– masquage ou translation d'adresse : NAT et PAT. Le NAT consiste à changer l'adresse IP source. Le
PAT change à la fois l'adresse IP et le port source.
Ils permettent de créer des zones spécifiques et de séparer le réseau en différentes zones logiques.
Les DMZ (zone démilitarisées) sont par exemple des zones situées entre le réseau interne et le réseau externe
pour lesquelles les échanges avec d'autres zones sont fortement contrôlée. Généralement une DMZ n'accepte
que les connexions entrantes si elle n'héberge que des serveurs, sauf pour certains protocoles particulier
comme DNS ou NTP que les serveurs peuvent avoir besoin d'utiliser. Ils permettent en outre de fournir des
fonctions de supervision, de la redondance, du double attachement, ...
Des équipements dédiés peuvent se mettre en coupure ou non sur le réseau pour assurer des
fonctions spécifiques de sécurité. Les pare-feux se mettent en coupure et assurent des fonctions de filtrage de
manière transparente et robuste. Les règles de filtrage peuvent généralement être plus complètes et plu
précises. Ils offrent en général des fonctions de filtrage de niveau applicatif, intègrent des fonctions de
détection d'attaques, d'antivirus et peuvent parfois jouer le rôle de proxy transparents.
Les sondes permettent d'écouter le trafic sans perturber le réseau. Elles comprennent un prisme
(pour les fibres optiques) ou bien une connectique adaptée qui permet de capter une partie du signal afin de
ne pas couper la liaison en cas de dysfonctionnement de la sonde. Le signal est ensuite stocké et peut être
analysée par la sonde.
Les filtres de sécurité ne sont pas simplement présents sur les équipements réseaux. Pour les serveurs, on
utilise souvent un proxy qui fait le relais des interrogations vers l'application et peut en particulier vérifier la
conformité des informations reçues à certaines règles. Il peut en outre assurer un équilibrage de la charge sur
plusieurs serveurs. Les filtrages peuvent concerner :
– des protocoles standards;
– des protocoles propriétaires;
– des protocoles spécifiques à l'application.
Le pare-feu spécifique à un poste permet de ne laisser passer que les flux explicitement autorisés et
ainsi de se prémunir d'une communication illégitime.
Les filtres sont de bons composants de sécurité. Ils permettent :
– une grande diversité de règles;
– une coupure logique incontournable;
– un fonctionnement dédié à la sécurité;
– une absence d'impact sur les fonctionnement internes des différents réseaux.
Une autre forme de filtrage est la barrière protocolaire qui consiste à changer de protocole de
communication d'un réseau à un autre, ce qui rend plus difficile la transmission d'informations illégitimes
entre les réseaux.
9/15
3.2 Les limites du filtrage réseau
Notions : fragmentation, icmp, fenêtre et sequençage, analyse protocolaire.
La fragmentation des paquets est problématique. Si le filtrage des paquets n'analyse que le premier
paquet, comme les paquets suivants peuvent recouvrir les précédents ceci permet de faire passer des paquets
non valides. En outre la détection des attaques sur signature est souvent basé sur la recherche de chaînes, il est
donc possible de les contourner en segmentant ces chaînes.
Deux attaques sont courantes :
– changer l'ordre des paquets qui permet d'abuser les outils ne gérant pas correctement le réassemblage en
envoyant par exemple le dernier segment puis les autres;
– envoyer plusieurs fois le même segment pour tenir compte des particularités de réassemblage de l'hôte
distant.
Le filtrage des icmp est difficile. Normalement le pare-feu doit vérifier que le message se rapporte à
une connexion éxistante et doit le bloquer sinon. Dans le cas contraire il est tout à fait possible de les utiliser
pour créer des canaux cachés. Si le filtrage des icmp est trop rigide, certains mécanismes réseaux seront mis à
mal comme la découverte de la MTU (maximum transmission unit).
Une autre technique consiste à envoyer des paquets hors séquence dans une connexion existante. Si
le pare-feu ne gère pas la taille de la fenêtre, il les laissera passer. Un attaquant pourra alors récupérer ces
informations et ces paquets seront ignorés par la machine normalement destinataire.
Certains protocoles utilisent des ports dynamiques et font passer des informations dans les données
comme FTP. Ceci implique une analyse de niveau 7 pour suivre la connexion mais ce n'est pas toujours
possible. Avec IRC, par exemple, une requête DCC (direct client to client) fait passer dans la requête au
serveur le pseudo de l'utilisateur et non son adresse IP, le pare-feu ne peut donc pas connaître l'adresse IP du
client distant qui va essayer d'établir la connexion.
L'analyse protocolaire de protocole permettant d'éxécuter des commandes comme telnet ou les rpc
est particulièrement difficile car il faut faire à la fois une analyse locale et une analyse globale. Par ailleurs
l'analyse par l'outil de sécurité et le serveur peut être différente du fait des erreurs d'implémentations.
3.3 La protection des flux
Notions : chiffrement de liaison point à point, VPN, chiffrement applicatif.
Un moyen pour protéger les informations sur le réseau est le chiffrement de l'information. Les
produits correspondants sont soit dédiés soit présent sous forme de module sur les équipements actifs de
réseau. Ils permettent de chiffrer le trafic sur les liaisons en étant placé entre les commutateurs ou les
routeurs afin de protéger les informations en confidentialité.
Le chiffrement peut se faire au niveau réseau. On a alors un chiffrement des données utiles
transmises dans les paquets. Ceci permet de créer des VPN ou réseaux privés virtuels. Les standards IPSEC
et Ipv6 proposent de tels modes de chiffrement de bout en bout selon deux modes :
– le mode tunnel : chaque paquet est chiffré dans son ensemble et le résultat devient l'information utile
d'un nouveau paquet. Le tunnel préserve la confidentialité de toutes les informations sur les émetteurs et
récepteurs.
– le mode transport : les données utiles sont chiffrées et le paquet est modifié en conséquence (en
particulier la valeur du ckecksum).
Ceci permet de créer des chaînes de tunnels avec des redirections, des séparations et des
multiplexation de flux. La compatibilité et l'interropérabilité des produits est le problème essentiel.
Le chiffrement peut se faire au niveau applicatif. Le principal outil utilisé est SSL qui réalise la
protection des données avant leur passage sur le réseau. C'est notamment ce qui est utilisé pour les sites
sécurisés HTTPS.
Dans le cadre d'architectures complexes ou avec de nombreux clients, la gestion des identités peut
se faire sur la base de certificats électronique au format X509 tant pour les CPN que pour les chiffrements
applicatifs. Ces deux solutions peuvent être mises en oeuvre de manière indépendante.
10/15
3.4 La sécurité des interconnexions et analyse des flux
Notions : interconnexion, règles d'interconnexions, analyse des flux.
Les interconnexions sont l'ensemble des moyens techniques permettant de relier plusieurs systèmes
ayant des caractéristiques différentes et en particulier des niveaux de sécurité différents. Cette différence met
en cause la sécurité des systèmes et nécessite une zone tampon qui soit à même de faire appliquer des règles
sur les communications entre les deux réseaux. En particulier il est essentiel de définir les droits et les
obligations de chacun des acteurs :
– engagement d'innocuité vis-à vis de l'autre;
– engagement de coopération pour contribuer à la sécurité;
– possibilité unilatérale de rompre ou de restaurer l'interconnexion;
– possibilité de contrôler les mesures de sécurité.
Les filtrages effectués ont pour but de n'autoriser que certains échanges et doivent s'appliquer sur
plusieurs couches du modèle OSI. Ces filtrages comportent généralement un traitement des flux standards et
des traitements spécifiques pour les échanges particuliers.
Parmi les flux autorisés certains peuvent servir de base pour effectuer des actions malveillantes. Une analyse
des flux réseaux permet de détecter des comportements typiquement suspects :
– les scans : généralement beaucoup de petits flux depuis une adresse IP avec peu de sessions établies et
beaucoup de messages icmp pour indiquer des ports fermés;
– les virus et les vers : beaucoup de petits flux courts vers un grand nombre de machine et/ou de ports. Les
destinations peuvent être aléatoires et ne pas correspondre à des segments réseaux routés. L'adresse
source peut également ne pas faire partie du réseau si les paquets sont forgés.
– réseaux cachés : encapsulation dans des flux DNS, icmp ou http. Des flux DNS ou icmp de plus de
quelques secondes et ko sont suspects. Des flux http symétriques sont également à surveiller en
particulier s'ils durent dans le temps. La détection d'adresses publiques ou de ports non standards est à
surveiller.
– les flux répétifs : ceux-ci peuvent correspondre à de la messagerie ou de la navigation web.
– les changements de protocoles entre deux points qui peuvent correspondre à différentes tentatives
d'encapsulation.
3.5 Sécurisation des éléments d'architecture réseau
Notions : DNS
Le service de nommage (DNS : domain name service) est l'un des services les plus utilisés et n'est pas le plus
souvent correctement protégé. Les principales vulnérabilités sont :
– la fuite d'informations;
– la corruption de la résolution;
– le déni de service.
Dans le cas où une station interne peut effectuer des requêtes DNS vers l'extérieur, il est possible
d'envoyer de l'information soit par un tunnel ssh sur le port 53 ou bien en faisant un tunnel IP directement
dans le trafic DNS. La solution est de n'autoriser que les proxys à effectuer des requêtes vers l'extérieur du
réseau.
La corruption de la résolution vise à corrompre les données DNS pour assurer un trafic avec un autre site que
celui désiré en :
– compromettant le processus de résolution;
– en modifiant le trafic DNS;
– en modifiant le cache dans le serveur de nom.
Le déni de service consiste à envoyer un grand nombre de question sur les serveurs DNS exposé à
11/15
l'extérieur.
L'architecture proposée consiste à segmenter le service en fonction des besoins. Le serveur DNS
cache interne permet la résolution des adresses internes auprès des machines internes. Ce serveur utilise une
ACL sur les adresses IP des postes clients. Pour les proxys cherchant à résoudre des adresses externes, les
serveurs caches relaient la question auprès de serveurs placés en DMZ et qui ne peuvent que faire la
résolution des sites externes. Pour les interrogations externes, un serveur dédié et isolé effectue la résolution
des noms des domaines dont on a la responsabilité.
Pour la sécurisation du DNS vis-à-vis du contrôleur de domaine ou du serveur DHCP qui peuvent
effectuer des mise à jours dynamiques du DNS, il est possible de créer des sous-domaines sur lesquels ces
serveurs ont des droits limités.
3.6 Sécurité de la messagerie électronique
Notions : architecture, virus, phishing, spam, greylisting, filtre bayésiens.
3.7 Protection des serveurs exposés
Notions :empreinte TCP/IP, authentification d'OS, fragmentation, honeypots
Dans le cadre d'une attaque, une étape importante est la détection du système d'exploitation du
serveur sur lequel l'attaque est menée. Ceci permet de choisir l'exploit le plus efficace. Le principe de la
protection contre cette identification repose sur la réduction de la fuite d'information.
La première mesure consiste à configurer les services afin de limiter l'information fournie par les
banières. Il est ensuite nécessaire de désactiver tous les services inutiles qui donnent des informations.
La dernière étape repose sur une modification du comportement réseau par une personnalisation de la
pile TCP/IP. Ceci peut se faire soit avec un dispositif en coupure qui va appliquer des filtres (par exemple
netfilter) modifiant ainsi les réponses soit en modifiant directement le comportement de la pile au niveau du
noyau. La seconde solution est plus intrusive et n'est pas toujours possible en particulier pour les systèmes
d'exploitation propriétaires.
De nombreux paramètres dépendent du système d'exploitation, généralement pour des questions de
performances : taille de la fenêtre, réponse sur des ports fermés en UDP et en TCP, ... Des outils sont
également basés sur la réponse à des paquets mal formés. Une solution est d'utiliser un filtre suprimant les
paquets mal formatés (taille de l'en-tête, combinaison de drapeaux invalide, ...) et réécrivant certains
paramètres (recalcul du checksum, modification des drapeaux, ...) complété par une reconstruction des
paquets fragmentés.
Pour comprendre les attaques qui sont menés contre des serveurs, une technique est la mise en place
de serveurs dédiés, les honypots, qui servent de cibles pour les attaques. L'analyse des comportements permet
de mieux détecter les attaques sur les vrais serveurs.
====== Sécurité des applications web ======
===== Sécurisation du serveur =====
La première étape consiste à cacher les bannières.
<code>
telnet www.microsoft.com 80
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
P3P: CP='ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR
SAMo CNT COM INT NAV ONL PHY PRE PUR UNI'
Content-Location: http://tkmsftwbw11/default.htm
Date: Fri, 05 Oct 2001 09:18:47 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Thu, 04 Oct 2001 18:34:38 GMT
ETag: "188b883934dc11:854"
Content-Length: 23062
Server: Apache/1.3.14 (Unix) (Red-Hat/Linux) PHP/4.0.3pl1 mod_perl/1.24
</code>
Certains langages sont typiques d'un serveur :
* Apache, Netscape : script PHP
* IIS : pages dynamiques ASP
* Lotus : bases NSF
* Tomcat, WebLogic : script JSP
Les messages d'erreurs peuvent également être exploités. Il permettent en outre de connaître l'existence ou non
d'un utilisateur dans le cas d'une authentification basic http.
<code>
GET /pipo HTTP/1.0
HTTP/1.1 404 Not Found
Date: Sat, 03 Nov 2001 14:33:08 GMT
Server: Apache
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>404 Not Found</TITLE>
</HEAD><BODY>
<H1>Not Found</H1>
The requested URL /pipo was not found on this server.<P>
<HR>
<ADDRESS>Apache/1.3.12 Server at p500.labo.net Port 80</ADDRESS>
</BODY></HTML>
</code>
Les attaques les plus courantes sont :
* l'accès à un shell via une requête par exemple GET ../../../winnt/system32/cmd.exe
* l'injection de requête SQL;
* le cross site scripting par envoi de contenus html ou javascript affiché par le serveur sans filtrage.
Ces attaques ne compromettent pas le serveur mais permettent de voler des données.
Indépendemment de l'application web, il est judicieux de mettre des filtres (mod_security) afin de
bloquer les requêtes malveillantes connues. Ceci permet également de cacher les erreurs qui peuvent être
générées par le serveur. Enfin on peut faire une analyse avec un antivirus des fichiers reçus ou encore chrooter
le serveur. Dans le cas d'application web bien construite, on peut définir un profil contenant l'ensemble des
requêtes valides afin de ne permettre que l'envoi de celles-ci.
Exemples d'attaques sur les en-têtes : répétition d'en-têtes. Certains serveurs prennent en compte le premier,
d'autres le second.
Des modules (mod_dosevasive) permettent de détecter des bloquer les deni de service en limitant les
requêtes répétés sur des ressources et la fréquences de celles-ci selon trois facteurs :
– requêtes répétées sur une même ressource. Un utilisateur ne récupère pas plusieurs fois la même
ressource.
– multiplication du nombre de requêtes. Un utilisateur ne récupère pas massivement des ressources.
– sortie de la liste noire après un certain délai.
===== Langage objet contre gestion par page =====
L'utilisation d'un langage objet pour des applications web a ses limites car si pour chaqu
page on est amené à charger l'ensemble des objets, cela induit une utilisation importante des
ressources et de la latence. Une programmation indépendante pour chaque page facilite la lecture du
code et limite le chargement des librairies à des fonctions communes largement utilisées.
===== Vérification des interlocuteurs et des données =====
Notions : vérification des données, man in the middle, défi/réponse
Comme pour un programme classique, il est important de vérifier les données fournies par
l'utilisateur. En particulier si la chaîne attendu est un nombre, une chaîne de caractère, une adresse
électronique, il faut vérifier que le formatage est bien celui attendu. Ceci permet de se prémunir des injections
de codes. Le filtrage le plus simple est de transformer les apostrophes en caractère html. Mais l'utilisation
d'autres encodages pemet de passer outre ces filtres. Il faut donc reformater correctement les données pour
éviter par exemple d'avoir de l'utf8, de l'exadécimal, de l'encodage html, utilisation de caractères non
imprimables (effacement), ...
Une attaque courante est l'attaque par le milieu. L'attaquant se fait intermédiaire entre le client et le
serveur. Il peut ainsi modifier les données et écouter les échanges, bloquer les échanges. L'utilisation de https
permet d'assurer la confidentialité des échanges et d'authentifier le serveur. Cela permet également
d'authentifier le client si l'on met en place des certificats clients. Une solution intermédiaire en
l'authentification forte et l'authentification par mot de passe est l'authentification par challenge réponse.
Le serveur envoie un défi aléatoire. L'utilisateur répond avec son identifiant et un message calculé à
partir du défi et de son mot de passe, sous la forme hash(mot_de_passe || defi). Cette technique présente des
faiblesses car l'entropie du mot de passe est généralement faible. Le nombre de bits de la cle se calcule par la
formule log2(n^m) où n est la taille du jeu de caractère et m la taille du mot de passe. Pour un jeu de 46
caractères et un mot de passe de 8 caractères on a une clé de 44 bits. Les fonctions de hashage permettent de
calculer sous certaines conditions la réponse au défi à partir d'une autre réponse. Une fonction MAC comme
HMAC serait plus efficace.
Pour les données sensibles, il est important de ne pas les stocker en clair dans la base de données
mais de les chiffrer. Ceci évite des pertes d'informations par lecture directe des fichiers de la base.
===== Attaques courantes =====
Notions : cross site scriptiog, SQL injection, chiffrement des données.
Le cross site scripting consiste à injecter du javascript dans les données envoyées au serveur. Ce code
est ensuite exécuter sur le poste client. L'application la plus courante consiste à voler la session afin de pouvoir
accéder à l'application et voler les informations disponibles. Pour détecter les failles on peut utiliser des
variantes du code </script>alert("Hello");</script>.
Utilisation de la méthode HTTP TRACE. Cette méthode est traditionnellement utilisée pour
déterminer la vision qu’a le serveur d’une requête. Le serveur renvoyant exactement l’argument fourni par
l’utilisateur, cette méthode est couramment utilisée pour réaliser des attaques de type Cross-Scripting.
<code>
var xmlHttp = new ActiveObject("Microsoft.XMLHTTP")
xmlHttp.open("TRACE", "./", false)
TRACE
/mail/victime.nsf/c1dee9080256c3f003dccf5/33cc18a13483c9f2c125704400447cf
6/$FILE/
HTTP/1.1
Accept: */* Accept-Language: fr
Referer:
http://Srv_Domino/mail/victime.nsf/c1cdee9080256c3f003dccf5/33cc18a13483c
9f2c125704400447cf6/$FILE/Humour.htm
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR
14/15
1.1.4322)
Host: Srv_Domino
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Authorization:,dmljdGltZTptZHBfc2VjcmV0IA
</code>
On peut également utiliser le javascript pour effectuer des actions sur les pages d'autres sites.
La seconde attaque la plus courante est l'injection de code SQL qui permet de corrompre la base ou
de faire des requête arbitraires. Par exemple :
Private Sub btnLogin_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnLogin.Click
SqlConnection1.Open()
Dim str As String = "SELECT * FROM Users WHERE UserID='" _
& txtName.Text & "' AND Password='" & _
txtPassword.Text & "'"
Dim comm As New SqlCommand(str, SqlConnection1)
Dim reader As SqlDataReader = comm.ExecuteReader()
If Not reader.HasRows Then _
Response.Write("Login failed. Please try again")
While reader.Read()
Response.Write("Hello " & reader("UserName"))
End While
End Sub
On peut faire de l'injection avec xyz' union select @@servername, @@servicename,
@@version --
Une solution est d'utiliser les mécanismes de sécurité du langage ou bien de valider les données en entrée.
Les informations sensibles ne doivent pas non plus être stocké dans de cookies sur le poste client car ceux-ci
peuvent être modifiés. Il vaut mieux stocker ces informations dans des variables de sessions sur le serveur.
===== Les protections élémentaires =====
Pour les utilisations de l'authentification basique http où le nom de l'utilisateur et le mot de passe sont
transmis en clair dans les en-têtes, il est nécessaire de protéger l'accès au fichier contenant les mots de passe et
la liste des utilisateurs.
Il faut éviter de passer des informations cachées dans les formulaires si ce n'est pas nécessaire et les
garder dans des variables de sessions car l'utilisateur peut les modifier.
Les validations des données des formulaires par des codes javascript sont inutiles du point de vue de
la sécurité car l'utilisateur peut les contourner. De la même façon la délégation de traitement de données dans
des applets peut être manipuler par l'utilisateur qui peut lire et modifier le code si celui-ci n'est pas protéger
(exemple java, mon légionnaire.com).
La gestion des aléas pour les sessions est importante sinon une simple attaque par brute force permet
de récupérer des sessions, en particulier si on utilise le temps pour l'aléa.
<code>
http://www.cible.fr/shop.htm?id=0112037524678
http://www.cible.fr/shop.htm?id=0112037520987
http://www.cible.fr/shop.htm?id=0112037521345
http://www.cible.fr/shop.htm?id=0112037526794
http://www.cible.fr/shop.htm?id=0112037523098
</code>
====== Navigation ======
[[::homepage|HomePage]]
{{tag>Securite Dev Reseau Hack}}
OWASP
Open Web Application Security Project (OWASP) est une communauté en ligne travaillant sur la sécurité des applications Web.
En 2017, les dix failles les plus dangereuses identifiées par OWASP étaient les suivantes:
Injection : Correspond à l'injection de code dans les applications web (injection SQL, ou dans l'interface système...). Les attaquants cherchent à entrer des données de façon à ce qu'elles soient interprétées comme une commande, leur permettant ainsi d'effectuer des actions non désirées.
Broken Authentification : Correspond à une mauvaise gestion de l’authentification et de la session, que les attaquants peuvent exploiter pour récupérer mots de passe, clés, jetons de session, ou pour usurper l'identité d'un autre utilisateur.
Sensitive Data Exposure : Correspond à une mauvaise protection des données sensibles (comme les données personnelles). Ces dernières sont collectées par les attaquants pour effectuer des usurpations d'identité, des vols de cartes de paiement ou autres méfaits.
XML External Entities (en) ; Les interpréteurs XML obsolètes ou mal configurés évaluent les entités externes déclarées dans un fichier XML, or ces entités peuvent être utilisées pour accéder à des fichiers, scanner des ports ou exécuter du code à distance.
Broken Access Control ; Il s'agit de défauts dans la gestion des droits d'accès, permettant aux attaquants d'activer des fonctionnalités qui ne sont pas prévues pour eux.
Security Misconfiguration : Correspond aux failles de configuration liées aux serveurs Web, applications, base de données ou framework.
Cross-site scripting : Aussi appelée XSS, cette faille concerne les sites où du contenu est produit par les utilisateurs (médias sociaux notamment). Si le site ne vérifie pas les ajouts des utilisateurs, des attaquants peuvent écrire du code malveillant dans une publication, qui sera exécutée par un autre utilisateur à son insu, permettant ainsi le vol de sa session ou sa redirection vers un site frauduleux.
Insecure Data Deserialization : Une déserialisation (conversion d'une chaîne de caractères en objets) non sécurisée peut permettre à un attaquant d'insérer ses propres objets, et parfois son propre code malveillant, dans une application.
Using Components with Known Vulnerabilities : Correspond aux failles liées à l’utilisation de composants tiers.
Insufficient Logging & Monitoring : La plupart des études de brèches de sécurité indiquent que ces brèches ont mis plus de 200 jours à être découvertes, laissant ainsi aux attaquants le temps de l'exploiter pour perfectionner leur emprise sur le système. Les systèmes de surveillance informatique et de logging devraient être capables de détecter des activités suspectes pour alerter au plus tôt.
Commentaires
Enregistrer un commentaire