Archive pour la catégorie ‘Sécurité informatique’

HTTP Response Splitting ( Séparation de réponse HTTP )

Jeudi 6 août 2009

Bien le bonjour :)

Pour vous présenter cette technique somme toute assez méconnue, je vous propose de vous faire un min-rappel sur le protocole HTTP, ou plutôt sur ce qui se passe lorsque votre naviguateur va sur le site www.exemple.com .

Si vous entrez “http://www.exemple.com” dans votre navigateur préféré ( au hasard Internet Explorer 5 ), la requête envoyée au serveur sera la suivante ( je simplifie ici énormément la requête ):

GET / HTTP/1.1
Host: www.exemple.com

Avec les caractères de retour chariot ( \r ) et de saut de ligne ( \n ), celà donne :

GET / HTTP/1.1\r\n
Host: www.exemple.com\r\n\r\n

Maintenant, regardons une requête un peu plus complète ( demande d’affichage de la page http://localhost/http_splitting.php ) :

GET /http_splitting.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Et la réponse du serveur:

HTTP/1.x 200 OK
Date: Sun, 02 Nov 2008 10:55:25 GMT
Server: Apache/2.2.9 (Win32) DAV/2 mod_ssl/2.2.9 OpenSSL/0.9.8h mod_autoindex_color PHP/5.2.6
X-Powered-By: PHP/5.2.6
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
 Lire le reste de cet article »

Le protocole UpNp, sa presentation et ses problemes

Jeudi 6 août 2009

Nous allons nous interesser dans cet article au protocole UpNp .
Je vous propose tout d’abord l’introduction que nous donne Wikipedia :
L’Universal Plug and Play (UPnP) est un protocole réseau promulgué par l’UPnP Forum.
Le but de l’UPnP est de permettre à des périphériques de se connecter aisément et de simplifier l’implémentation de réseaux à la maison (partages de fichiers, communications, divertissements) ou dans les entreprises. UPnP le permet en définissant et en publiant les protocoles de commande UPnP au-dessus des standards de communication de l’Internet.

Plus clairement, lorsque vous connectez une imprimante, votre Box, etc…, ces produits, etant compatible UpNp, vont tenter de s’auto-configurer ( autant dire qu’ils y arrivent la plupart du temps :] ).
Ces produits doivent respecter des spécifications normalisées, mais peuvent contenir d’autres fonctions supplémentaires, relatives au produit ( une Box qui pourra activer son Wifi via UpNp.. ).
L’établissement d’une connection UpNp se déroule en plusieurs étapes :
-L’obtention d’une adresse IP lorsque l’équipement est connecté sur le réseaux
-Le produit va ensuite avertir les autres équipements sur le réseaux de sa présence via une requête NOTIFY. Cette requete contient un champ LOCATION, indiquant le chemin du fichier XML listant les services.
-Envoi de l’adresse du fichier de configuration ( XML )
-Controle du produit

Les équipements ou logiciels présent sur le réseaux peuvent aussi chercher à obtenir l’adresse d’un service, via une requete M-SEARCH.
Malheuresement, ce beau protocole ne contient absolument aucune sécurité…

Lire le reste de cet article »

ClickJacking : Comment on vous “vole” vos clics

Jeudi 6 août 2009

Avez-vous entendu parler du ClickJacking ? Cette technique qui permet d’utiliser vos clics à d’autres fins ?

Je vous propose dans cet article de voir le principe, les buts et le contexte d’utilisation de cette “attaque”. Nous pourrons aussi voir un exemple, plus proche du Proof Of Concept qu’autre chose, mais toujours intéressant à étudier :) .

Tout d’abord le principe. Certaines propriétés du langage HTML nous permettent de rendre des objets complètement transparents. Et d’autres nous permettent de superposer des pages les unes sur les autres.
Imaginons donc deux pages superposées l’une sur l’autre, une des deux étant transparente. Lorsque vous cliquez quelque part, les clics sont alors effectués sur les deux pages, même si vous ne “voyez” le résultat que sur une seule.

Mais une vidéo vous expliquera ça bien mieux que tout un pâté de texte :) . Voici donc la vidéo PoF, permettant d’autoriser une application flash à activer la webcam :
http://www.youtube.com/watch?v=gxyLbpldmuU

Maintenant, pourquoi utiliser une attaque de ce type ?

Eh bien pour toutes les choses requérant des clics à des endroits précis, et invariants ( c’est à dire en général tout ce qui est configuration de Flash ), faire valider des formulaires pré-remplis, …

Enfin, cette attaque a l’avantage d’être relativement discrète…
Pour vous protéger ( eh oui, sortez couvert :) ), je vous conseille l’excellente extension “NoScript” pour Firefox ( https://addons.mozilla.org/fr/firefox/addon/722 ).

Maintenant, essayons de mettre en place une attaque de ce style.

Imaginons une page clickjackme.html, de code source :

<html>
<head><title>ClickJackMe !</title></head>
<body>
<form action="http://www.perdu.com" method="POST">
<input type="submit" value="ClickJackMe!" />
</form>
</body>
</html>

Vous l’aurez compris, le but est que le visiteur clique sur notre bouton “ClickJackMe!”. Les propriétés HTML qui vont nous servir sont “z-index” permettant de régler la profondeur, et opacity pour l’opacitée des pages. Nous utiliserons en plus de ça un filtre ( alpha(opacity=0) ).

Pour inciter notre visiteur à cliquer, nous allons mettre un bouton pour “Skip intro” :)

Le code source de notre page lambda.html :

<html>
<head>
<title>Page Lambda</title>
</head>
<body>
    <div id="lambda" style="z-index:-10; position:absolute; top:1px; height:10px; padding-top:15px; width:100%; padding-left:35px; ">
        <input type="button" value="Skip Intro" />

    </div>
    <div id="evil" style="z-index:10; opacity:0; filter:alpha(opacity=0);">
        <iframe id="iframe" src="clickjackme.html" frameborder="O"  style="opacity:0; filter:alpha(opacity=0);" />
    </div>
</body>
</html>

J’imagine que vous voulez voir ce que cela donnerait si nous n’avions pas cacher la page clickjackme.html . C’est tout simple, remplacez opacity:0 par opacity:60 par exemple ( c’est en % ). Vous remarquerez que nos deux boutons ( Skip intro  et ClickJackMe! ) sont l’un sur l’autre.

Il n’y a pas très longtemps, il y avait possibilité de bypasser les filtres de Noscript, avec par exemple pour l’équivalent d’une iframe: <object data=”http://www.google.com” width=”200″ height=”200″></object>

Ce problème à été réglé dans la dernière version de NoScript ;)