Sécurité Web (introduction)

Publié par : Web 3.0
Description : Document sous licence CC: http://creativecommons.org/licenses/by-sa/2.0/fr/. Sécurité Web (introduction).

Consulter un extrait ci-dessous
(introduction)
http://cedric.foll.name/
Sous licence « creative common »
Paternité, Partage des Conditions Initiales à l'Identique
http://creativecommons.org/licenses/by-sa/2.0/fr/
mercredi 13 janvier 2010
Les principales vulnérabilités et attaques associées
De la faille web à la prise en main du serveur (ou du
client)
mercredi 13 janvier 2010
A1 Injection
A2 Cross Site Scripting (XSS)
A3 Broken Authentication and Session Management
A4 Insecure Direct Object Reference
A5 Cross Site Request Forgery (CSRF)
A6 Security Misconfiguration
A7 Failure to Restrict URL Access
A8 Unvalidated Redirects and Forwards
A9 Insecure Cryptographic Storage
A10 Insufficient Transport Layer Protection
mercredi 13 janvier 2010
INJECTION
Attaque
Impact
Contre mesure
mercredi 13 janvier 2010
INJECTION FLAWS :
Injection Flaw :
Injection de code qui sera exécuté par le « serveur »
langages de requête (ldap, XPatch, ...) ou encore du code
interprété (fonction de type « eval », « system » et consorts...).
Probablement le moyen le plus simple pour prendre le contrôle
exemple PHP/Mysql.
mercredi 13 janvier 2010
ATTAQUES « SIMPLES »
mercredi 13 janvier 2010
SQL INJECTION :
L'attaquant envoie au site par différents champs (formulaire GET, POST,
Cookies, User-Agent, ...) du code SQL qui sera exécuté par le serveur.
Le serveur utilise les données envoyées par l'utilisateur pour construire
une requête SQL.
Contournement du processus d'authentification.
Récupération (ou altération) de données dans la base.
Récupération (ou dépôt) de fichier.
Exécution de code arbitraire.
mercredi 13 janvier 2010
SQL INJECTION
mercredi 13 janvier 2010
SQL INJECTION
CONTOURNEMENT
Requête SQL construite :
Paramètres envoyés par le pirate
Ce qui va être envoyé vers le serveur SQL
mercredi 13 janvier 2010
SQL INJECTION
CONTOURNEMENT
Conséquences
La requête SQL va renvoyer des résultats et donc le test suivant va aboutir :
Le pirate peut utiliser la commande SQL limit :
renvoie le premier élément (indice 0) de la table.
mercredi 13 janvier 2010
SQL INJECTION
CONTOURNEMENT
Envoyer des caractères spéciaux dans les champs des
formulaires et voir si des erreurs sont générées.
caractères à essayer : ' (quote), ' (double quote), (, ), #,
mercredi 13 janvier 2010
SQL INJECTION
CONTOURNEMENT
La requête SQL peut être plus complexe (usage de
parenthèses par exemple):
select * from user where
On injecte :
mercredi 13 janvier 2010
SQL INJECTION
CONTOURNEMENT
Les messages d'erreur peuvent aider à construire l'attaque :
Error in query: You have an error in your
SQL syntax; check the manual that
corresponds to your MySQL server version
for the right syntax to use near 'toto')'
Les messages d'erreur ci dessus montrent qu'il y a une
parenthèse à fermer pour construire la réponse.
mercredi 13 janvier 2010
LA CONTRE-MESURE
(HASARDEUSE) EN PHP
Ce réglage remplace toutes les « quote » par « antislash quote »
dans tout ce qu'envoie l'utilisateur (GET, POST, COOKIES).
Impossibilité de contourner les processus d'authentification
« This feature has been DEPRECATED as of PHP 5.3.0 and
REMOVED as of PHP 6.0.0. Relying on this feature is highly
discouraged. » (http://php.net/manual/en/
security.magicquotes.php)
mercredi 13 janvier 2010
ATTAQUES « COMPLEXES »
mercredi 13 janvier 2010
SQL INJECTION
Les solutions :
UNION query (inband) SQL Injection
Blind SQL Injection
Full blind SQL injection (ou time based SQL Injection)
mercredi 13 janvier 2010
UNION QUERY (INBAND)
SQL INJECTION
Considérons le code suivant dont le résultat est ensuite affiché par le serveur
Avec MySQL (et la plupart des bases de données), les comparaisons sur les nombres se
font sans « quote ».
commande renverra le premier « login » de la table « utilisateurs ».
mercredi 13 janvier 2010
ATTAQUE
champ dans notre exemple).
Présences de parenthèses...
mercredi 13 janvier 2010
ATTAQUE
Certaines bases (telles que PostgreSQL mais pas MySQL) attendent le
même type de données à gauche et à droite du UNION.
Facile si on possède les sources de l'application.
Sinon cela dépend de la base de données et de sa version :
META données.
Sinon par « bruteforce » avec des chances de succès très aléatoire.
mercredi 13 janvier 2010
ATTAQUE
pour aller plus vite :
111,password) from utilisateurs limit 1
offset 0
mercredi 13 janvier 2010
BLIND SQL INJECTION
On est juste capable de savoir si la commande renvoie
relativement souvent (et pas seulement dans les requêtes
liées à une identification).
mercredi 13 janvier 2010
ATTAQUE
Considérons le code suivant utilisé pour afficher le nombre de
clients ayant réalisé plus de « nb » achats.
Injections :
mercredi 13 janvier 2010
ATTAQUE
Récupération du contenu de la variable @@version
Récupération octet par octet par dichotomie :
Puis (passage au second octet) :
mercredi 13 janvier 2010
ATTAQUE
Cela peut sembler compliqué et long
Il faut cibler les données à récupérer (par exemple login/
mots de passe).
mercredi 13 janvier 2010
FULL BLIND SQL
INJECTION
les exécutions conditionnelles (IF sous MySQL).
mercredi 13 janvier 2010
ATTAQUE
Cela peut sembler compliqué et long
Il faut très précisément cibler les données à récupérer
(par exemple, le mot de passe MySQL « root »).
mercredi 13 janvier 2010
SQL INJECTION
ajouter (INSERT), supprimer (DELETE), modifier (UPDATE).
La plupart des bases de données, dont MySQL, permettent de lire
SELECT LOAD_FILE('/etc/passwd')
Il est même possible, avec certaines bases de données (mais pas
MySQL), d'exécuter directement des commandes systèmes.
mercredi 13 janvier 2010
devenir «administrateur» des applications web:
Permet assez souvent de déposer du code (ajout de fichiers,
plugin, ...)
Mais aussi (avec de la chance) :
Exécution de commandes systèmes.
Ou possibilité de déposer un shell php.
mercredi 13 janvier 2010
Pour les attaques manuelles :
Paros (http://www.parosproxy.org), Burb (http://portswigger.net/)
Les cheat sheets (http://pentestmonkey.net/cheat-sheets/)
Pour MySQL, PostgreSQL, Oracle, DB2, Informix, MSSQL, Ingres
nième octet, de lire/écrire un fichier...
sqlmap (http://sqlmap.sourceforge.net)
mercredi 13 janvier 2010
CONTRE MESURES
Granularité des privilèges
mysql_real_escape_string
Utilisation de « Prepared Statements »
mercredi 13 janvier 2010
HTTP://XKCD.COM/327/
mercredi 13 janvier 2010
Attaque
Impact
Contre mesures
mercredi 13 janvier 2010
XSS : PRINCIPE DE
arbitraire (en général du JavaScript) navigateur Web.
XSS persistant : le pirate piège une page en déposant un code sur la page
Dépôt de code hostile sur un forum, email malicieux lu sur un webmail
mercredi 13 janvier 2010
XSS : IMPACT
Historiquement (ie début des années 2000) :
Vol des sessions utilisateurs (cookie de session envoyé sur
la page du pirate)
http://site.fr/index.php?
Phishing
« iframe »
mercredi 13 janvier 2010
XSS : IMPACT
« We're entering a time when XSS has become the new Buffer Overflow and
Javascript Malware is the new shellcode » (Jeremiah Grossman, Whitehat Security)
Quelques exemples :
Redirige le navigateur vers une page contenant des exploits pour prendre le contrôle
de la machine de la victime.
victime.
Attaquer les sites web du réseau interne à la recherche de XSS et SQL Injection
(«proof of concept» Jikto)
Trouver le hash NTLM (mot de passe Windows) du poste sur lequel tourne le
navigateur (http://code.google.com/p/squirtle/)
Et envoyer les résultats de tout ceci au pirate...
mercredi 13 janvier 2010
XSS : IMPACT
Samy Worm touche MySpace en 2007
Un utilisateur visitant un profil infecté (ie code JavaScript
1.000.000 de profils infectés en 20 heures.
mercredi 13 janvier 2010
Permet la prise de contrôle totale du navigateur
mercredi 13 janvier 2010
CONTRE MESURE
Filtrer les entrées utilisateurs
Par exemple en PHP, utilisation de htmlentities()
mercredi 13 janvier 2010
POUR ALLER PLUS LOIN
Présentation de Pierre Gardenat à la SSTIC 2009 :
alert('XSS')
XSS - de la brise à l'ouragan
voir http://actes.sstic.org/SSTIC09/
mercredi 13 janvier 2010
MALICIOUS
EXECUTION
Cette attaque était A3 en 2007
Attaque
Impact
Contre mesures
mercredi 13 janvier 2010
MALICIOUS FILE
EXECUTION
Faire exécuter au serveur un fichier malveillant
Typiquement un PHP Shell (c99.php, r57.php...), un « payload »
metasploit ou sqlmap en PHP, ASP, JSP...
Accès en écriture sur le serveur (FTP, SSH, HTTP PUT, WebDav...)
Application permettant le dépôt de fichier et qui ne vérifie pas (ou
mercredi 13 janvier 2010
MALICIOUS FILE
EXECUTION
Particularité de PHP
URL... (de même que toutes les fonctions relatives à
Le pirate réussit à écraser le contenu de la variable et
l'initialise à « http://pirate.com/c99.gif »
mercredi 13 janvier 2010
EXEMPLE DE CODE
mercredi 13 janvier 2010
mercredi 13 janvier 2010
IMPACT & CONTRE
MESURES
Impact
Prise en main du système
Contre mesure
Désactiver allow_url_fopen.
Interdire, si possible, l'exécution de commandes (exec,
system, ...) dans les pages web.
Durcissement de la configuration système.
mercredi 13 janvier 2010
AUTHENTICATION
AND SESSION
MANAGEMENT
mercredi 13 janvier 2010
RAPPELS SUR HTTP
HTTP est un protocole sans états :
Par conséquent, la gestion des états est du ressort du code
applicatif (cookies, GET, POST...)
du serveur via des « variables de session ».
mercredi 13 janvier 2010
Les SESSION ID doivent être aléatoires et ne pas pouvoir être devinées par un
pirate :
Elles ne doivent pas transiter en claire.
sont stockés en claire dans les logs...
Par exemple, pas un MD5 de la date de connexion...
force brute.
utilisé.
mercredi 13 janvier 2010
VARIABLES DE
SESSIONS
variables de sessions
HTTP est un protocole sans états, par conséquent on ne
variables cachées.
mercredi 13 janvier 2010
ATTAQUE
ses privilèges.
variable de sessions (par un programmeur incompétent :))
Par exemple sur un site marchand, le prix des achats est
géré par une variable cachée...
mercredi 13 janvier 2010
INSECURE
DIRECT OBJECT
REFERENCE
mercredi 13 janvier 2010
INSECURE DIRECT
OBJECT REFERENCE
user, simply changes a parameter value that directly refers to a
Par exemple dans une application de gestion de stocks, pour
un problème...
mercredi 13 janvier 2010
REQUEST
FORGERY (CSRF)
mercredi 13 janvier 2010
CSRF : PRINCIPE
Sur ce site, conduire son navigateur à réaliser des actions sur un site sur
lequel il est authentifié (par exemple en lui faisant charger des images).
Exemple :

Sécurité Web (introduction)
Publier sur Facebook Publier sur Twitter
Informations
Date :

09/10/2010


Langue :

Français


Pages :

60


Consultations :

5700


Note :  
  • Votre email n'est pas valide

    Vous devez valider les conditions d'utilisation

Résumé

Auteur : Cédric Foll


Tags : Sécurité, web, vulnérabilités, attaques, faille web, serveur, injection flaw, SQL, union query
Sur le même thème
Vues : 5876
Description :
I] Qu'est ce que la sécurité d'un système? II] Pourquoi sécuriser les systèmes informatiques III] Comment et avec quoi les...
Vues : 1067
Description :
Guide de sensibilisation à la sécurité informatique
Vues : 913
Description :
Authentification sur réseau sans-fil. Utilisation d'un serveur radius.
Vues : 871
Description :
La cryptographie, un outil au service de la sécurité des systèmes d'information.
Vues : 621
Description :
notre thèse est une application d'une formule mathématique réalisent par M.Savola et H.abie qui permet de mesurer...
Vues : 599
Description :
Les dangers sur Internet en chiffres
Du même contributeur
Vues : 21715
Description :
Les étapes et les acteurs clés de la création du géant Facebook. Des informations chiffrées, des anecdotes et des...
Vues : 5347
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-nc-nd/3.0/us/. Twitter for beginners.
Vues : 2084
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/. 7 stratégies e-marketing illustrées - Votre...
Vues : 712
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-nc-sa/2.0/be/. Une Fan page sur Facebook : mode d’emploi.
Vues : 464
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-nc-sa/2.0/fr/. L'opendata - Tout savoir (ou presque).
Vues : 401
Description :
Document sous licence CC: http://creativecommons.org/licenses/by-nc-nd/2.0/fr/. Principes du référencement SEO (version 2010)
Commentaires
Aucun commentaire pour cette publication
Ajouter un commentaire
Envoyer
Pour envoyer la page de votre document, notez ici les emails destinataires de votre demande :
Séparez les emails par des virgules
Signaler un abus
Vous devez vous connecter ou vous inscrire pour noter un document.
Cliquez ici pour vous inscrire.
Vous devez vous connecter ou vous inscrire pour ajouter un commentaire.
Cliquez ici pour vous inscrire.
Vous devez vous connecter ou vous inscrire pour envoyer le document.
Cliquez ici pour vous inscrire.
Vous ne pouvez pas acheter de documents sur Needocs.
Vous pouvez vous référer aux conditions générales de vente et d'achat du portail pour connaître les modalités d'achat.