Risques critiques des applications Web
Risques critiques des applications Web
[Link]
Yasser ABOUKIR
OWASP WebGoat Project Contributor
yaboukir@[Link]
The OWASP Foundation
[Link]
Plan
1) OWASP, késako?
3) WebGoat Project
| 2
The OWASP Foundation
[Link]
1) OWASP, késako?
3) WebGoat Project
| 3
OWASP World
OWASP
Conferences
OWASP Governance
OWASP
Wiki
OWASP
Tools
OWASP Chapter OWASP Foundation
(501c3)
Leaders
OWASP
Lists
Board of
Directors Board of Operations Technical
OWASP Books (Williams, Wichers, Advisors Director (McNamee) Director (Casey)
OWASP Project Brennan, Cruz, and
Leaders Deleersnyder)
OWASP
Community
Finances and Grants
OWASP Grants
100%
55%
OWASP Foundation
45%
7
L‟OWASP
420 000 pages vues par mois
15 000 téléchargements par mois
11 335 membres sur les listes
3 687 utilisateurs du Wiki
1 500 MAJ du Wiki par mois
110 chapitres mondiaux
100 membres individuels
48 outils/projets/documents
38 membres entreprise
25 projets fondés et soutenus dans
la communauté
1 employé
OWASP KnowledgeBase
• 3,913 total articles
• 427 presentations
• 200 updates per day
• 179 mailing lists
• 180 blogs monitored
• 31 doc projects
• 19 deface attempts
• 12 grants
OWASP Tools and Technology
• Vulnerability • Penetration • ESAPI
Scanners Testing Tools
• Static Analysis • Code Review
Tools Tools
• Fuzzing
Automated Manual
Security
Security Security
Architecture
Verification Verification
10
Les publications
Toutes les publications sont disponibles sur le site
de l‟OWASP: [Link]
L‟ensemble des documents est régi par la licence
GFDL (GNU Free Documentation License)
Les documents sont issus de différentes
collaborations :
• Projets universitaires
• Recherche & développements des membres
Les publications majeures
• Le TOP 10 des vulnérabilités applicatives
• Le guide de conception d‟applications Web
sécurisées
• Le FAQ de la sécurité des applications
• Le guide « les 10 commandements sur
l‟écriture d‟une application non sécurisée »
Les Guides
100% Libres!
Issus de l‟expérience de milliers d’experts à travers le
monde
OWASP guide:
• Un ouvrage pour la création d‟applications Web sécurisées à l‟intention
des :
Développeurs
Architectes
…
• Inclus les meilleurs pratiques dans différents langages
(PHP, Java, .Net, …)
• Plusieurs centaines de pages
OWASP Testing guide:
• Ouvrage dédié à l‟audit sécurité des applications Web à l‟intention des
pen-testeurs principalement.
OWASP Enterprise Security API (ESAPI)
• Un framework de sécurité pour
les développeurs
• Permettre de créer une
application Web Sécurisée
Classes Java
Disponible sur le site de l‟OWASP
En cours de portage pour le SoC
2008 sur .NET et PHP
WebGoat - WebScarab
WebGoat :
• Application Java serveur (JSP, JEEE) non sécurisé.
• Sert à démontrer les failles, leur principe et à éduquer.
WebScarab :
• Application Java permettant d‟effectuer des tests de sécurité:
• Sur les applications Web
• Sur les WebServices
Quelques outils
Outil de génération de données aléatoires
(Fuzzer) permettant d‟injecter des données
pour les tests
• JBroFuzz :
Fuzzer destiné à tester les applications Web
• WS Fuzz :
Fuzzer destiné à tester les WebServices.
Sprajax
Outil destiné a tester la sécurité des applications AJAX
Et bien d‟autres :
[Link]
Le Top 10
Liste les 10 vulnérabilités des applications Web les plus
rencontrées
• Le titre devient donc : “ Les 10 risques les plus critiques des applications Web”.
A7 – Broken Authentication and Session Management A3 – Broken Authentication and Session Management
=
A4 – Insecure Direct Object Reference A4 – Insecure Direct Object References
=
A5 – Cross Site Request Forgery (CSRF) A5 – Cross Site Request Forgery (CSRF)
A6 – Information Leakage and Improper Error Handling - <dropped from T10 2010>
Méthode d‟évaluation du risque de l‟OWASP Top 10
1.3 * 2
[Link]
1) OWASP, késako?
3) WebGoat Project
|22
Environnement typique de l‟entreprise
23
A1 – Injection
L‟injection
Les Interpréteurs
Impact
• Souvent très sévère. Le plupart du temps l‟ensemble des données de la base sont
lisibles ou modifiables.
• Cela peut même aller jusqu‟au schéma de la base, les comptes ou un accès OS….
Exemple sur l‟injection SQL
Account Summary
Account:
"SELECT * FROM
Knowledge Mgmt
Communication
Legacy Systems
Bus. Functions
Administration
Human Resrcs
E-Commerce
Application Layer
Transactions
Web Services
SKU:
Directories
Databases
HTTP
Accounts
Acct:5424-6066-2134-4334
accounts WHERE
Finance
DB Table
Billing
HTTP response SQL Acct:4128-7574-3921-0192
request query acct=‘’ OR 1=1 --’"
Acct:5424-9383-2039-4029
APPLICATION
ATTACK
Acct:4128-0004-1234-0293
Custom Code
1. L’application fourni un
formulaire
2. L’attaquant envoi son attaque
dans les données du formulaire
App Server
3.L’application transfère les
Web Server
données à la requête SQL
Hardened OS
Network Layer
5. L’application renvoie ce
résultat à l’utilisateur
A1 – Comment se protéger
Recommandations
1. Se passer des interpréteurs,
2. Utiliser une interface permettant de préparer les requêtes (ex,
prepared statements, or les procédures stockées),
• Toujours effectuer une validation de type “white liste” sur les données
utilisateurs.
• Minimiser les privilèges dans les bases pour limiter l‟impact de la faille.
References
• Plus de détails sur
[Link]
A2 – Cross-Site Scripting (XSS)
Se retrouve à chaque audit/pentest
• Des données venant d‟un attaquant sont envoyées à l‟innocent navigateur d‟un utilisateur
• Stockées en base,
• Réfléchies depuis une entrée d‟une page Web (champ de formulaire, champ caché, URL,
…)
• Envoyées directement à un client Riche (Javascript, Flash, …)
Impact
• Vol des sessions utilisateur, de données sensibles, réécriture de la page Web, redirection
vers un site d‟hameçonnage ou autre code malveillant
• De manière plus grave : installation d‟un proxy XSS permettant à un attaquant d‟observer
le poste client voire de forcer l‟utilisateur vers un site particulier
Cross-Site Scripting Illustré
L’attaquant découvre le script vulnérable
1
Application
disposant de faille
L’attaquant entre un script XSS
malicieux sur la page
web(stocké) ou bien
utilise un lien(réfléchi)
Knowledge Mgmt
Communication
permettant d’envoyer vers
Bus. Functions
Administration
E-Commerce
Transactions
Accounts
Finance
la page
La victime se rend sur la page
2
Custom Code
Client malicieux
Post id message
1 Hello
2 Bien fait ...
3 <script
type="text/javascript
">[Link].
href=“[Link]
"</script>
<script type="text/javascript">[Link]=“[Link]
id message
Guestbook messages: 1 Hello
Hello
Bien fait ... 2 Bien fait ...
3 <script
<h1>Guestbook messages:</h1> type="text/javascript">d
Hello<br>
Bien fait<br> [Link]=“
<script [Link]
type="text/javascript">[Link]
ef=“[Link]
...
32
A2
Recommandations
– Contre mesures
• Supprimer la faille
• Ne pas inclure de contenu fourni par l‟utilisateur dans la page de sortie !!!
• Défenses possibles
1. Encoder toutes les entrées et sorties utilisateurs (utilisez l‟OWASP ESAPI pour l‟encodage
de sortie) [Link]
2. Effectuer de la validation de type « white liste » pour les données utilisateurs entrantes
qui sont inclues dans une page.
3. Pour des grosses portions de code HTML fourni par un utilisateur, utiliser le filtre OWASP
Anti-Sammy de manière à nettoyer l‟HTML
Voir: [Link]
Référence
• Pour effectuer un encodage propre, se référer à [Link] Site
Scripting) Prevention Cheat Sheet
A3 – Mauvaise gestion des sessions et de l‟authentification
HTTP est un protocole sans état
• Des ID de sessions sont utilisés pour maintenir la session dans HTTP car il ne le
peut lui.
• Cela suffit à un attaquant, c‟est aussi intéressant qu‟un identifiant
• Les ID de sessions sont souvent exposés dans les sessions réseau, dans les
browsers (cookies), dans les logs, ….
Impact
Communication
Bus. Functions
Administration
Transactions
E-Commerce
Knowledge
identifiants
Accounts
Finance
Mgmt
[Link]?JSESSIONID=9FA1DB9EA...
Le site récrit l’URL
Custom Code
(i.e., mise dans l’URL de 2
l’ID de session)
• Utiliser le mécanisme standard de gestion des cookies du framework (ils sont globalement
fiables)
Vérifier l‟implémentation
• Oublier l‟analyse automatique
Impact
de la manière suivante
?acct=6066
L‟attaquant visualise un
autre compte.
A4 – Contre Mesure
Eliminer la référence directe.
• La remplacer par une valeur temporaire aléatoire (e.g. 1, 2, 3)
[Link] [Link]
Access
[Link] Reference
[Link] Map
Acct:9182374
[Link]
Valider la référence directe à l‟objet
• Vérifier que le contenu est correctement formaté.
• Vérifier que le mode d‟accès à l‟objet est autorisé (e.g., read, write, delete)
A5 – Cross Site Request Forgery (CSRF)
• C‟est une attaque ou le navigateur de la victime génère une requête vers une
application Web vulnérable
• Cette vulnérabilité est causée par la capacité que les navigateurs ont d‟ envoyer
automatiquement des données d‟authentification (session ID, IP adresse,
comptes de domaine Windows, ..) dans chaque requête.
Imaginez
• Que se passerait-il si un attaquant pouvait utiliser votre souris pour effectuer des
clicks sur votre site de banque en ligne à votre place.
• Que pourrait-il faire ?
Impact
[Link]
m
POST [Link]
Cross-Site Request Forgery
Utilisation normale (2/2)
Client légitime Server Web
[Link]
m
<a href="[Link]?action=acheter&id=1">Acheter</a>
Liste des objets:
ION Drum [Acheter]
AudioTek [Acheter]
Trump Sonesta [Acheter]
<html>
<head></head>
<body>
<img
src="[Link] [Link]
action=acheter&id=1">
</body>
</html>
Server Web
[Link]
A5 – Contre Mesure
Ajouter un jeton, non envoyé automatiquement, a toutes les requêtes sensibles.
Options
• Stocker un seul jeton dans la session et l‟ajouter à tous les formulaire et liens
• Il est recommandé d‟ajouter un second niveau d‟authentification pour une transaction sensible
[Link]
POST [Link]
Protection contre le Cross-Site Request Forgery
Utilisation normale (2/2)
Client légitime Server Web
[Link]
<a href="[Link]
Liste des objets:
?action=acheter&id=1&secureToken=431fwap8rawddf...">Acheter</a>
<html>
<head></head>
<body>
<img
src="[Link] [Link]
action=acheter&id=1">
</body>
</html>
Vérification de la variable
secureToken échouée.
Session fermée.
Server Web
[Link]
1) OWASP, késako?
3) WebGoat Project
|49
WebGoat
50
Organismes utilisant WebGoat
Utilisé par source code analysis and web application security
scanning vendors pour les demos
51
Origine du mot WebGoat
52
Histoire du WebGoat
• Don à OWASP par Aspect Security ~2002
• Project Lead : Bruce Mayhew
• Premières contributions externes dès 2005
• V.5 produite comme AoC
2006 project
53
Objectifs
• Comprendre l'interaction de haut niveau des processus au
sein d'une application WEB.
• Déterminer quelles informations au sein des données
visibles du client, pourraient être utiles dans une attaque.
• Identifier et comprendre les données et les interactions de
l'utilisateur qui pourraient exposer l‟application à une
attaque.
• Effectuer les tests contre ces interactions afin d‟exposer les
failles dans leur fonctionnement.
• Exécuter des attaques contre l'application pour démontrer
et exploiter ses vulnérabilités
54
Let‟s have a demo!
55
1) OWASP, késako?
3) WebGoat Project
|56
HTTP Parameter Pollution
(HPP)
• Présentées pour la première fois en 2009 par
l'OWASP.
• Constat: les navigateurs interprétaient différemment
le fait qu'une variable soit envoyée plusieurs
fois dans la même requête.
• Certains vont ne considérer que la 1ère , d'autre la
dernière et les plus intéressants vont concaténer les
deux.
57
HPP
Réaction des serveurs Web à la requête
Source: HPP: First OWASP Paper by Luca Carettoni and Stefano di Paola
GET /target/foo?par1=val1&par1=val2
58
HPP
Source: Automated Discovery of Parameter Pollution Vulnerabilities in Web Applications
59
HPP pour contourner la sécurité des Web
Applications Firewalls (WAF)
60
Simple PoC of HPP
La redirection se fera vers [Link]
ou plutôt vers [Link] ?
[Link]
.org&h=3e88d&u=[Link]
De même si on essaie 3 valeurs pour « u »:
[Link]
.org&h=3e88d&u=[Link]
ps://[Link]/[Link]/Morocco
61
Clickjacking
détournement de clic, est une
technique malveillante visant à pousser
un internaute à fournir des
informations confidentielles ou à
prendre le contrôle de son ordinateur
en le poussant à cliquer sur des pages
apparemment sûres.
62
Clickjacking
• Les propriétés HTML permettent de manipuler
lʼaffichage dʼune page web. Il est possible
de positionner des calques (élément HTML DIV) à
des endroits prédéfinis dʼune page, et de jouer
sur la profondeur lors de la superposition de
plusieurs calques.
• Placer un calque transparent en première position,
afin que lʼutilisateur ne visualise que le calque
en arrière-plan.
63
Clickjacking
64
Clickjacking
Proof of Concept
Vous feriez à ma page
sans s‟en rendre compte :p
65
Bypassing CSRF protections with HPP &
Clickjacking
Cette technique transforme une attaque par Clickjacking en
une attaque CSRF efficace par l'envoi de formulaires à travers
des domaines avec un contenu malveillant contrôlé à l'aide
des paramètres HTTP polullés (utilisant leHPP).
HTTP Request:
POST /[Link]?email=evil@[Link] HTTP/1.1
Host: [Link]
email=&csrf-token=a0a0a0a0a0
Server Interpretation:
[Link]("email") ===> evil@[Link]
Clickjacking part of the attack
How attacker’s
site looks to the
victims
(Harmless)
Proof of Concept
Votre email de login sera
modifié sans que vous le
sachiez :p
Les 5 risques les plus critiques
des applications Web
72
References
• OWASP Top 10 - 2010 rc1: Les 10 risques les plus critiques des
applications Web. Par Sébastien GIORIA.
• Bypassing CSRF protections with HPP & Clickjacking, By, par Lavakumar
Kuppan