Fingerprinting de Navigateurs


E. Abgrall, M. Monperusse, S. Gombault, Y. Le Traon, M. Heiderich, A. Ribault

SSTIC 2013

Usages du fingerprinting

Identification des utilisateurs


profiling des utilisateurs à des fins mercatiques, statistiques, smart ads, modification des prix en fonction du pays ou de la région d'origine, etc...

Cet aspect ne sera pas abordé pendant la présentation

Identification du navigateur


Exploit Kits: Le bon exploit pour le bon navigateur


Objectifs pour l'attaquant

L'étude de ces mécanismes permet de mieux les déjouer et de détecter plus efficacement les attaques.

Techniques de Fingerprinting

Exemples tirés d'Exploit Kits


Unpacking dépendant du User-Agent

 
var pipe=String.fromCharCode(184-navigator.userAgent.length); 

Condition sur la taille du user-agent pour permettre le ”déchiffrement” du code JS par la suite, correspondant à un ensemble de navigateurs firefox.
source

Exemples tirés d'Exploit Kits


Identification d'un plugin chrome

 
function fiddlercheck()
{
	var xmlParser = new DOMParser();
	var xmlDom = xmlParser.parseFromString("","text/xml");
	var temp=xmlDom.documentElement.nodeName;
	if(temp=="overlay"){ return "Fiddler";}
	else{return "";}
}
 

Technique similaire employée pour les handlers d'uri Steam et Origin (cf NSC2013)

Exemples tirés d'Exploit Kits


Identification du User-Agent

 
getBrowser: function () {
    if (this.browserName == null) {
        var n = navigator.userAgent.toLowerCase();
        g("[getBrowser()] navigator.userAgent.toLowerCase() -> " + n);
        if ((n.indexOf("msie") != -1) && (n.indexOf("opera") == -1)) {
            this.browserName = "MSIE";
            this.browserName2 = "MSIE"
        } else {
            if (n.indexOf("iphone") != -1) {
                this.browserName = "Netscape Family";
                this.browserName2 = "iPhone"
            } else {
                if ((n.indexOf("firefox") != -1) && (n.indexOf("opera") == -1)) {
                    this.browserName = "Netscape Family";
                    this.browserName2 = "Firefox"[...]

Exemples tirés d'Exploit Kits


Compilation conditionelle sous IE

 
alert(f("return /*@cc_on!@*/false")); 

Renvoie True sous IE.
!false==true
référence MSDN

Techniques académiques


Performance JavaScript (1)


Rendus graphiques via WebGL(2)

Techniques (moins) académiques


Tests de conformité ECMAScript(3)
Données NetFlow(4)
Structure des en-têtes HTTP(5)

yo dawng i heard u like dynamic web pages, so here at Google we put a JS engine in your browser so powerfull you'll be able to run a linux kernel in it while browsing the web !

pimp my browser

Fingerprinting à base de vecteurs de XSS

Principe de fonctionnement



Jouer sur les spécificité de comportement des moteurs HTML.


Exemple:

"Moi le HTML ça me fait Baliser" Pierre C.

Principe de fonctionnement



Jouer sur l'interprétation de certains caractères.

pourquoi des vecteurs de XSS ?

Jedi Mind Trick




prise d'empreinte


Exécution de N vecteurs de xss dans divers contextes influençant le comportement du moteur HTML du navigateur

Démo... (ou pas)

Identification du navigateur


Par arbre de décision

un peu comme un "qui est-ce" mais avec des iframes

Identification du navigateur


Par arbre de décision

=>
=>
=>
=>
=>
=>

Identification du navigateur


Par arbre de décision


Défauts

Avantages:

Identification du navigateur


Par mesure de distances

N résultats de tests = Signature
reste à déterminer le plus proche voisin par signature

Chaque résultat de test est une composante d'un vecteur à N dimensions

On utilise la distance de Hamming pour mesurer la similarité entre les deux signature

On l'a légèrement modifiée pour estimer la distance avec des signatures partielles

Relation distance comportementale - distance temporelle


credits


, google Html5 slides, XKCD, HTML5 Security Cheat Sheet, Shazzer

Questions ?

Et les sources?





Elles sont sur githubhttps://github.com/g4l4drim/xss_test_driver

Linkz

https://trac.webkit.org/wiki/Fingerprinting http://capec.mitre.org/data/definitions/472.html http://browserspy.dk/ http://fingerprint.pet-portal.eu/ http://programmers.stackexchange.com/questions/122372/is-browser-fingerprinting-a-viable-technique-for-identifying-anonymous-users https://wiki.mozilla.org/Fingerprinting

Identification du navigateur


Identification du navigateur


Identification du navigateur


Identification du navigateur