Cahier 2016 groupe n°10

De Wiki d'activités IMA
Révision datée du 29 novembre 2016 à 16:05 par Mobeissa (discussion | contributions) (Séance 7 (28/11/2016))

Schématisation du réseau

Réseau à mettre en place lors du module PRA

Tâche particulière

Présentation

Notre tâche particulière consiste en la configuration d'un point d'accès Wifi avec filtrage des adresses MAC.

Matériel utilisé

Cisco Aironet 2600

Avancement du travail

Nous commencerons par réaliser notre tâche particulière, celle-ci étant nécessaire pour l'ensemble de la promotion.

Séance 1 (03/10/2016)

  • Prise de connaissance du sujet et lecture de celui-ci
  • Répartition des tâches particulières entre les différents groupes
  • Connexion via le port série au point d'accès Cisco (grâce à minicom)
  • Configuration : ajout de l'adresse IP 172.26.79.5 dans l'interface bvl 1

Séance 2 (10/10/2016)

  • Configuration du ssid
   ap(config)#dot11 ssid Wolverine
   ap(config-ssid)#authentication open
   ap(config-ssid)#guest-mode
  • Configuration de l'interface radio dot11Radio0
   ap(config)#interface dot11Radio0 
   ap(config-if)#ssid Wolverine
   ap(config-if)encryption vlan 1 key 2 size 40 0123456789 transmit-key
   ap(config-if)#encryption vlan 1 mode ciphers wep40
   ap(config-if)#no shutdown

Séance 3 (13/10/2016)

  • Création de la machine virtuelle

On se connecte d'abord sur le serveur cordouan

    ssh root@cordouan.insecserv.deule.net

On créé ensuite la machine avec tous les renseignements souhaités

   xen-create-image --hostname=Wolverine --ip=193.48.57.170 --netmask=255.255.255.240 --gateway=193.48.57.172
   --dir=/usr/local/xen --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie

On démarre la machine virtuelle

   xl create /etc/xen/Wolverine.cfg

Et nous la lançons

   xl console Wolverine

En parallèle, nous avons réservé notre nom de domaine sur Gandi : robico.space

Séance 4 (24/10/2016)

  • Reconfiguration du point d'accès via l'interface web
  • Installation des paquets nécessaires sur l'eeePC
  • Craquage de la clé wep (non-terminé)

Séance 5 (07/11/2016)

  • Ajout d'un filtrage par adresse MAC : seuls la moitié de la classe peut s'associer à notre point d'accès wifi

Si on remplace notre adresse MAC par une adresse non-autorisée, l'association n'est plus possible. Autrement dit, le filtrage par adresse MAC n'est pas du tout efficace pour sécuriser le Wifi.

Cassage clé wep

Wep intro

Wep est un protocole cryptographique dont l’abréviation est Wired Equivalent Privacy. Cette dénomination soulignerait la « robustesse » du cryptage des données et le désir d’assurer des communications sans fil aussi sécurisés que par liens filaires. Pour essayer de répondre à cette objectif, WEP se base sur un checksum pour contrôler l’intégrité de la trame et sur un algorithme de type RC4 pour chiffrer les données. RC4 est constitué d'un générateur de données pseudo-aléatoire dont la sortie dépend d'une clé de 64 ou 128 bits avec lequel on l'initialise. Pour le chiffrement, un XOR est réalisé entre la sortie du RC4 et la trame à chiffrer. Pour déchiffrer les données il suffit de refaire un XOR entre ce flux arrivant et la même sortie du RC4. On voit déjà là un problème, en effet, les trames chiffrées et non chiffrées sont exactement de même taille. Comme on utilise des XOR, il faudra donc réinitialiser RC4 à chaque envoi de trame pour éviter la réutilisation des clés. La solution a été de découper la clé RC4 en deux. La première partie de la clé est transmise en claire en entête (24 bits) appelé vecteur d'initialisation (IV). La seconde partie de la clé, sera une clé fixe connue par l’utilisateur et le point d’accès (de 40 ou 104 bits). Mais pour que le client puisse déchiffrer les paquets il lui faut le même vecteur d’initialisation, c’est pourquoi les 24 premiers bits (bien qu’aléatoire à la base) sont envoyé en clair.

Lors de l'identification, une phrase P est envoyée en clair par le point d’accès et le client renvoie une réponse cryptée C. L’opération suivante est réalisée C = RC4(IV||clé_WEP) (+) P . Maintenant que l’on comprend globalement le fonctionnement de WEP, nous allons utiliser un outil qui exploite les failles de WEP afin de récupérer la clé fixe.

Crack wep

Pour cela, nous avons à disposition un EeePC équipé d’un module WiPi. L’appareil n’étant pas configurer il nous a fallu réaliser les diverses configurations suivantes. La première chose a été de connecter le PC à Internet.

Dans /etc/network /interfaces on ajoute les lignes suivantes :
Auto eth0
Iface eth0 inet static
Address 172.26.79.24
Netmask 255.255.240.0
Gateway 172.26.76.254

On relance avec ces nouvelles règles /etc/init.d/network restart

Toutefois cela ne permet pas encore de se connecter à internet, en effet l’horloge interne du PC est dérèglée et ne permet pas de rendre valide les certificats des sites web. Pour cela on écrit les lignes suivantes :

date -s hh:mm:ss
date -s mm/dd/yyyy
hwclock --systohc

Ensuite une fois cela réalisé nous pouvons installer la suite aircrack-ng.

apt-get install aircrack-ng

Maintenant pour sniffer le réseau, il faut utiliser le module WiPi en mode monitoring. Un nouveau problème apparaît car le module n’est pas reconnu. On observe alors les différents messages d’erreur à travers la commande dmesg. On en déduit qu’il faut installer le driver de ce module. On effectue la commande suivante :

apt-get install firmware-ralink

Le module est maintenant reconnu en tant que wlan0 et le crackage peut commencer. On débute en vérifiant qu’aucun processus pourrait gêner le mode monitor du module avec :

airmon-ng check (s’il y a des processus gênant -> airmon-ng check kill)

Passons maintenant notre WiPi en mode monitoring:

airmon-ng start wlan0 la commande nous indique que l’interface mon0 a été créé pour le monitoring (on parle toujours du même module)

Maintenant nous allons un peu observer le traffic et cibler notre recherche en n’observant que les point d’accès utilisant wep avec :

airodump-ng –encrypt wep mon0

On observe donc les SSID, le canal d’échange et les adresses MACs des différents point d’accès. Cracotte05 sera notre victime pour cet exercice. Maintenant nous récupérons tous les paquets associés à Cracotte05 avec :

airodump-ng –w cracotte05 –c 2 –bssid 04:DA:D2:9C:50:54 mon0
Enfin avec la commande aircrack-ng cracotte05-01.cap nous obtenons la clé fixe.


  • Installations des paquets ssh, apache2 et bind9 sur notre machine virtuelle
  • Configuration du serveur DNS

Modification du fichier /etc/bind/named.conf.local :

zone "robico.space" {
     type master;
     file "/etc/bind/zones/robico.space.db";
     };

zone "57.48.193.in-addr.arpa" IN {
            type master;
            file "/etc/bind/zones/db.57.48.193.in-addr.arpa";
       };

Création des fichiers /etc/bind/zones/robico.space.db et /etc/bind/zones/db.57.48.193.in-addr.arpa :

$TTL    604800
@       IN      SOA     ns.robico.space. root.robico.space. (
                             2         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.robico.space.
@       IN      NS      ns6.gandi.net.
ns      IN      A       193.48.57.170
www     IN      A       193.48.57.170
@       IN      A       193.48.57.170
ns      IN      AAAA    2001:660:4401:60ba:216:3eff:fea6:173a
www     IN      AAAA    2001:660:4401:60ba:216:3eff:fea6:173a
@       IN      AAAA    2001:660:4401:60ba:216:3eff:fea6:173a
$TTL    604800
@       IN      SOA     robico.space. root.robico.space. (
                             2         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
57.48.193.in-addr.arpa.         IN      NS      ns.robico.space.
57.48.193.in-addr.arpa.         IN      NS      ns6.gandi.net.
170                             IN      PTR     robico.space.
  • Sécurisation de serveur DNS par DNSSEC

Nous commençons par créer les clés KSK et ZSK

dnssec-keygen -a RSASHA1 -r /dev/urandom -b 2048 -f KSK -n ZONE robico.space
dnssec-keygen -a RSASHA1 -r /dev/urandom -b 1024 -n ZONE robico.space

Nous incluons les clés publiques dans notre fichier de zone

$include /etc/bind/robico.space.dnssec/robico.space-ksk.key
$include /etc/bind/robico.space.dnssec/robico.space-zsk.key

Nous signons les enregistrements de la zone (on se place dans le dossier où se trouve nos clés)

dnssec-signzone -o robico.space -k robico.space-ksk ../robico.space.db robico.space-zsk

Nous modifions le fichier named.conf.local afin d'utiliser la zone signée

zone "robico.space" {
    type master;
    file "/etc/bind/zones/robico.space.db.signed";
    };

Enfin, il nous reste à communiquer la partie publique de la KSK à gandi.net. Cependant, lorsque nous avons réalisé le test sur dns viz en fin de séance, nous avons obtenu de nombreuses erreurs. L'erreur vient probablement du fait que nous avons omis d'incrémenter le numéro de version de la zone et également du fait que nous avons choisi le mauvais algorithme de signature lorsque nous avons communiqué la clé à gandi.net.

Séance 6 (14/11/2016)

Cassage de clé WPA

Introduction du WPA

WPA (Wi-Fi protected access) est un protocole de sécurité créé comme solution intermédiaire pour palier les problèmes de WEP en attendant la norme 802.11i. Pour cet exemple nous parlerons du protocole WPA-PSK (Pre-Shared Key) à destination des particuliers. De même que WEP, WPA utilise l’algorithme RC4 pour chiffrer les trames. De plus, il a été mis en place le protocole TKIP (Temporal Key Integrity Protocol) qui confère la principale sécurité à WPA. La faille de TKIP que l’on va exploiter pour cette attaque nécessite de récupérer le 4-way Handshake. Cette étape est réalisée à la connexion entre une station et un AP comme l’illustre cette image.

Connexion wpa.JPG

La PSK est une chaîne de caractères de 256 bits ou une phrase secrète comprise entre 8 et 63 caractères et peut être égale à la PMK si l’on n’utilise pas de serveur d’authentification. On peut extraire la chaîne de caractères par l’algorithme PSK= PMK = PBKDF2 (phrase secrète, SSID, longueur du SSID, 4096, 256) où 4096 est le nombre de hachage successifs et 256 la taille de la sortie. La PTK est dérivée de la PMK et donc sa force repose uniquement sur la valeur de la PMK. Après la transmission du second message, l'attaquant connait ANonce et SNonce et peut commencer à essayer une PSK pour calculer la PTK et dériver les clés temporelles. Ensuite on teste la PSK pour que le MIC (fonction de @dest, @src, PMK et des données) du second message soit obtenu avec la KCK correspondante.

Crack WPA

De la même manière nous passons notre interface en mode monitoring. Nous intéressons aux AP utilisant wpa avec:

airodump-ng --encrypt wpa mon0

Nous retrouvons notre cracotte05 qui sera de nouveau notre victime et l'on récupère dans un fichier de capture.

 airodump-ng –w cracotte05 –c 13 –bssid 04:DA:D2:9C:50:54 mon0

Par pur hasard, nous voyons qu'une station est connecté à l'AP. Grâce à cela nous allons pouvoir récupérer le 4-way handshake nécessaire à notre attaque. Pour accélérer sa récupération, dans deux nouveaux shells, nous allons le forcer à se déconnecter et se reconnecter grâce à:

aireplay-ng -0 0 -a 04:DA:D2:9C:50:54 -c station mon0
aireplay-ng -0 0 -a 04:DA:D2:9C:50:54 mon0

Nous observons que le handshake a bien été récupéré. Il ne nous reste plus qu'à réaliser un dictionnaire avec l'utilitaire crunch:

crunch 8 8 0123456789 -o dico.txt

Maintenant nous pouvons tester des clés par bruteforce en hors-ligne avec

aircrack-ng -w dico.txt cracotte05-01.cap

Séance 7 (28/11/2016)

DNSSEC

Nous avons corrigé l'erreur que nous avions lors de la séance précédente (à savoir incrémenter le numéro de version du fichier de zone°. Désormais, cela fonctionne comme on peut le voir ici https://www.zonemaster.fr/test/95f88fcf940ea52c

Sécurisation des données

On commence par créer les trois partitions :

lvcreate -L 1G -n /dev/virtual/wolverine-1 -v
lvcreate -L 1G -n /dev/virtual/wolverine-2 -v
lvcreate -L 1G -n /dev/virtual/wolverine-3 -v

On ajoute ces partitions dans notre fichier /etc/xen/Wolverine.cfg

'phy:/dev/virtual/wolverine-1,xvdd,w',
'phy:/dev/virtual/wolverine-2,xvde,w',
'phy:/dev/virtual/wolverine-3,xvdf,w',

On installe le paquetage mdadm :

apt-get install mdadm

Il faut faut entrer cette commande pour charger le module MD-subsystem :

apt-get install linux-image-3.16.0-4-amd64

On peut maintenant créer le volume /dev/md0 grâce à la commande suivante :

mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf

Une fois l'opération terminée, nous pouvons voir les détails de /dev/md0 :

/dev/md0:
       Version : 0.90
 Creation Time : Thu Nov 24 18:49:38 2016
    Raid Level : raid5
    Array Size : 2096128 (2047.34 MiB 2146.44 MB)
 Used Dev Size : 1048064 (1023.67 MiB 1073.22 MB)
  Raid Devices : 3
 Total Devices : 3
Preferred Minor : 0
   Persistence : Superblock is persistent
   Update Time : Thu Nov 24 18:49:38 2016
         State : clean 
Active Devices : 3
Working Devices : 3
Failed Devices : 0
 Spare Devices : 0
        Layout : left-symmetric
    Chunk Size : 512K
          UUID : 08b277ec:9bc350cc:1a990226:71941cb3 (local to host Wolverine)
        Events : 0.1
   Number   Major   Minor   RaidDevice State
      0     202       48        0      active sync   /dev/xvdd
      1     202       64        1      active sync   /dev/xvde
      2     202       80        2      active sync   /dev/xvdf

Nous sauvegardons notre configuration :

mdadm --detail --scan >> /etc/mdadm/mdadm.conf

Nous formatons un système du fichier et nous le montons :

mkfs /dev/md0
mount /dev/md0 /home/raid/

Cryptage de données

Nous souhaitons, dans cette partie, chiffrer entièrement les données inscrites sur une carte SD. Les outils dont nous aurons besoin sont Gparted et cryptsetup. Nous commençons d'abord par nous assurer qu'il existe une unique partition sur la carte SD avec Gparted. Maintenant, que nous connaissons la partition de notre carte SD, on initialise une partition Luks avec un chiffrage AES et un hashage sha256 et l'on indique le mot de passe:

 cryptsetup luksFormat -c aes -h sha256 /dev/sdb1

On ouvre la partition Luks et on l'a formate dans un système de fichier lisible par le système d'exploitation:

cryptsetup luksOpen /dev/sdb1 USB_crypt
mkfs.ext3 /dev/mapper/USB_crypt 

Montage et démontage de la partition:

mount /dev/mapper/USB_Crypt /mnt 
umount /mnt

Fermeture du volume chiffré:

cryptsetup luksClose USB_Crypt

Sécurisation de site web par certificat

On commence par installer les paquetages nécessaires :

apt-get install postfix
apt-get install mail

Nous générons ensuite la clé pour le certificat :

root@Wolverine:~# openssl req -nodes -newkey rsa:2048 -sha256 -keyout robico.space.key -out robico.space.csr
Generating a 2048 bit RSA private key
...................................................+++
................+++
writing new private key to 'robico.space.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:Nord 
Locality Name (eg, city) []:Lille
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PolytechLille
Organizational Unit Name (eg, section) []:IMA
Common Name (e.g. server FQDN or YOUR name) []:robico.space
Email Address []:admin@robico.space
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Nous envoyons ensuite la requête à Gandi : nous attendons son retour.

Références

http://www.hsc.fr/ressources/articles/hakin9_wifi/hakin9_wifi_FR.pdf

http://www.crack-wifi.com/

http://sid.rstack.org/blog/index.php/