Annonce

Rduire
Aucune annonce.

Malware JS : exfiltrez vos donnes via les DNS !

Rduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Malware JS : exfiltrez vos donnes via les DNS !

    Exfiltrez vos donnes via les DNS grce au Malware JS


    Quand on utilise un rseau wifi public, il faut toujours bien penser scuriser son accs internet.

    Comme tout bon hackadmicien, on pourrait se forcer utiliser des sites en HTTPS et, mieux encore, utiliser un plugin pour navigateur qui force ce protocole.
    Par exemple
    Code:
    <a href="https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/">HTTPS Everywhere</a>
    Cependant, nos accs internet sont ils vraiment scuriss de la sorte ?
    On pourrait penser que oui, que c'est un bon dbut et qu'une bonne protection est dj mise en place.

    Et bien cette anne, deux Hackers de la BlackHat nous ont montr que tel n'est en fait pas le cas.
    Certaines informations telles que des informations peuvent toujours tre drobes.

    Comment ? C'est ce que nous allons dcouvrir aujourd'hui.

    I - PAC et WPAD, ces acteurs mconnus
    Avant de prsenter la faille et son fonctionnement, replongeons nous un peu dans nos cours du rseau.
    Plus prcisment dans la configuration du proxy sur un navigateur d'une machine client.

    Vous avez sch vos cours de rseau et vous ne rappelez plus ce qu'est un proxy ?
    Venez ici pour un petit rappel.

    a va tout le monde voit ce que c'est maintenant ?
    Lanons nous !

    Pour configurer l'utilisation d'un proxy dans un browser, il existe plusieurs solutions :
    • On configure l'accs au proxy la main : Cette solution n'est pas pratique du tout, surtout en entreprise ou chaque machine devrait tre configure. Une par une. Imaginez le temps ncessaire.
    • On rcupre un PAC (proxy auto config) file sur le rseau : Cette solution est pratique. En effet, si on change les paramtres serveur du proxy. Il n'y a qu'un endroit modifier et ce sont tous les clients qui s'adaptent.


    1. Comment rcuprer un pac file ?
    Encore une fois, il existe deux manires de rcuprer un pac file.

    La premire consiste a entrer manuellement l'url du pac file sur le rseau via une URL.
    Grce cette url, le browser rcupre le fichier et l'utilise.
    Voici un exemple d'cran permettant de faire cette configuration :

    La seconde technique consiste utiliser la fonctionnalit nomme WPAD pour (Web Proxy Auto Discovery).
    De cette manire, le browser commencera par faire une requte au DHCP afin de savoir si ce dernier contient dans sa configuration un lien vers le pac file.
    Si le DHCP ne connait pas cette url, le browser fera en dernier recours une requte DNS l'url wpad.domain/wpad.dat

    Voici un cran de rglages pour cette seconde option :

    Comme on peut le voir ici, c'est le navigateur qui va faire tout le travail !

    2. Que contient un pac file ?
    Nous avanons.
    On sait maintenant quoi sert un pac file et galement comment en rcuprer un.
    Mais finalement, que contient il rellement ? Comment fait il pour faire toute la configuration ainsi tout seul ?

    Un pac file est compos de code Javascript.
    Cependant dans ce fichier, le langage est trs limit.
    En effet, dans celui-ci, pas d'objet Window ou mme document !
    Pas de fonction sur le DOM non plus donc.

    Les seules fonctions disponibles sont celles-ci :
    • Quelques fonctions rseaux : dnsDomainIs, isInNet, isPlainHostName, localHostOrDomainIs, dnsDomainLevels
    • Quelques autres : dnsResolve, isResolvable, myIpAddress
    • Quelques fonctions utilitaires : weekdayRange, dateRange, timeRange, shEpxMatch


    Mme la trs fameuse fonction alert(), connue par tous les dveloppeurs javascrit, n'est pas supporte par tout les browsers.

    Ce fichier reprsente donc un peu le dsert du javascript.
    Cependant, pour que le pac file soit valide une fonction particulire doit y tre implmente.
    C'est elle qui sera appele par le browser pour connaitre la configuration de proxy utiliser.

    videment, d'autres fonctions peuvent galement tre implmentes mais celle-ci est particulire et obligatoire.
    Voici son prototype :
    Code:
    FindProxyForURL(url, host)
    Elle doit retourner une chaine de caractre tel que (par exemple) celle-ci :
    Code:
    "PROXY proxy.example.com:8080; DIRECT"
    Cette chaine indique d'utiliser le proxy dfini l'adresse proxy.example.com et de s'y connecter sur le port 8080.
    Au cas o ce dernier n rpondrait pas, cette configuration dit au browser de tenter une connexion directe l'url demande.

    II - La faille
    La faille est lie au code javascript de ce fichier.

    Vous n'avez pas d'ide ?

    On sait que la fonction FindProxyForURL doit tre implmente et aussi que d'autres fonctions annexes peuvent tre dfinies et utilises.

    Souvenez vous, une des fonction utilisable est dnsResolve qui permet de faire des requtes DNS.
    Hors, une requte DNS pourrait aider faire transiter des donnes.

    Quelles donnes me direz vous ?
    Aprs tout, nous sommes en HTTPS non ?

    Et bien ces donnes peuvent celles dfinies dans l'URL par exemple.
    Et bien oui, FindProxyForURL reoit l'url demande par le navigateur !

    Hors, les urls contiennent des tokens de connexion, des informations de recherche Google, ...

    1. Un exemple simple
    Imaginons que nous sommes infects par un pac file frauduleux.

    Ce dernier nous renvoie vers un proxy mais en profite pour voler nos informations de la manire suivante :
    1. Il dcoupe l'url reue par FindProxyForURL afin de rcuprer les informations intressantes. Admettons qu'il rcupre mon pseudo (anonyme77) et mon mot de passe (SuperPassword) qu'un dveloppeur maladroit fait transiter dans l'url
    2. Il fait une requte DNS anonyme77.SuperPassword.serveurpirate.com
    3. Il envoie la requte au proxy
    4. Le proxy transfert la requte et nous envoie le rsultat


    Le rsultat attendu est l.
    Nous avons bien reu notre page et ce de manire totalement transparente.
    Cependant, dans l'entre fait l'identifiant et le mot de passe ont galement t vols !

    2. Et si on faisait encore plus fort ?
    Voler des informations dans des URLs, c'est dj trs bien.
    Le problme, c'est que tout les browsers et toutes les urls ne sont pas forms et ne ragissent pas de la mme manire.
    En plus, le dcoupage et l'envois des informations peut engendrer des latences dans le surf.

    Nos deux hackers sont donc alls encore plus loin dans leurs recherches.

    Ils ont permis un contrle de la machine du client.
    Comment ? Toujours via le DNS !

    Pour ce faire, ils ont modifis les rponses DNS (expliques prcdemment) envoyes par le serveur afin que ce dernier envois des commandes la machine client.

    Ces commandes sont ensuite interprtes par la function javascript eval.
    Cette fonction permet un maximum de flexibilit dans les commandes envoyes au client dans la mesure o cette fonction javascript permet d'valuer, ... du javascript.

    Ainsi, il pourrait tre possible de :
    • Voler bien des informations informations (cookies, sessions, ...)
    • Rcuprer des donnes sur la machine du client
    • Stocker des donnes sur la machine du client
    • ...


    3. Suis-je vulnrable ?
    Cette faille tant lie la configuration de proxys dans l'OS ou le navigateur, vous ne pouvez pas tre vulnrable si vous n'en utilisez pas.
    Si toutefois vous en utilisez quand mme un, soyez certains de bien utiliser un proxy que vous connaissez, en qui vous avez confiance et que vous configurez la main.

    III - Comment se protger de cette faille ?
    Pour se protger de cette faille, il existe plusieurs solutions et plusieurs niveaux :
    • Au niveau utilisateur : dsactiver WPAD dans les rseaux inconnus et si possible utiliser un browser qui affiche le moins possible d'informations dans l'URL
    • Au niveau de l'entreprise : Ne pas utiliser WPAD et vrifier qu'il est bien dsactiv dans le backend
    • Du ct serveur et dveloppement : Enlever les informations de connexions des URLs et en mettre le plus possible dans le corps de page ou les cookies.


    IV - Conclusion
    Cette attaque est une preuve de plus qu'il ne faut jamais faire confiance un rseau inconnu.
    Un peu de dfiance peut parfois vous sauver de bien lourds problmes.
    La scurit est une habitude prendre, une chose laquelle il faut toujours penser.

    Il faut ici bien se rendre compte qu'on ne parle pas ici d'une attaque sur HTTPS.
    On ne casse pas de chiffrement. On ne fait que rcuprer des informations dj disponibles et <b>non chiffres</b>.
    Le surf en HTTPS ne nous protge donc pas de tout.

    Comme toujours je suis disponible pour toutes vos questions.
    N'hsitez pas me contacter !

    Sources
    https://n0where.net/poc-javascript-malware-pacdoor/
    https://fr.wikipedia.org/wiki/Fichier_.PAC
    https://en.wikipedia.org/wiki/Web_Pr...overy_Protocol
    https://www.blackhat.com/docs/us-16/...Unholy-PAC.pdf
    https://github.com/SafeBreach-Labs/pacdoor
    http://arstechnica.com/security/2016...ows-and-linux/
Chargement...
X