TP sysres IMA2a5 2018/2019 G1
Axel & Bastien COMMUTATEUR
Sommaire
- 1 Introduction
- 2 Installation des systèmes d'exploitation
- 3 Architecture réseau
- 4 Services internet
- 5 Tests d'intrusion
- 6 Recuperation de la clef WEP
- 7 Recuperation de la clef WPA
Introduction
Ce TP consiste en la réalisation d’une maquette de réseau permettant de manipuler les protocoles de redondance réseau ainsi que le protocole réseau IPv6. D’un point de vue système nous avons à installer une machine virtuelle Xen avec l'OS Devian ainsi qu'implanter un auto-commutateur et un point d'accès. Nous effectuerons pas la suite des tests d'intrusion sur ces points d'accès afin de voir la vulnérabilité des différents protocoles de clé (WEP / WPA-PSK).
Installation des systèmes d'exploitation
Configuration de l'accès internet sur la Zabeth08
L’accès internet ne fonctionnait pas car l’utilitaire bridge-utils n’était pas installé, on a donc modifié le /etc/network/interfaces pour se connecter au serveur DHCP et avoir un accès internet temporaire et télécharger les paquets de cet utilitaire. Une fois ces paquets installés la connexion de pont a pu être réalisée, on a donc essayé de se connecter de nouveau, mais la connexion ne fonctionnait toujours pas. On a donc modifié le fichier /etc/dhcp/dhclient.conf pour ajouter un timeout et un retry de 180.
Voici ces fichiers:
/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 # The primary network interface (IPv4) auto eth0 iface eth0 inet manual up ip link set dev $IFACE up # A secondary network interface (IPv4) auto eth1 iface eth1 inet manual up ip link set dev $IFACE up # Bridge auto bridge iface bridge inet dhcp bridge_ports eth0 eth1 bridge_hw 00:22:4d:7a:f0:70
/etc/dhcp/dhclient.conf # Configuration file for /sbin/dhclient. # # This is a sample configuration file for dhclient. See dhclient.conf's # man page for more information about the syntax of this file # and a more comprehensive list of the parameters understood by # dhclient. # # Normally, if the DHCP server provides reasonable information and does # not leave anything out (like the domain name, for example), then # few changes must be made to this file, if any. # option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; send host-name = gethostname(); request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, dhcp6.name-servers, dhcp6.domain-search, dhcp6.fqdn, dhcp6.sntp-servers, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers; #send dhcp-client-identifier 1:0:a0:24:ab:fb:9c; #send dhcp-lease-time 3600; #supersede domain-name "fugue.com home.vix.com"; #prepend domain-name-servers 127.0.0.1; #require subnet-mask, domain-name-servers; timeout 180; retry 180; #reboot 10; #select-timeout 5; #initial-interval 2; #script "/sbin/dhclient-script"; #media "-link0 -link1 -link2", "link0 link1"; #reject 192.33.137.209; #alias { # interface "eth0"; # fixed-address 192.5.5.213; # option subnet-mask 255.255.255.255; #} #lease { # interface "eth0"; # fixed-address 192.33.137.200; # medium "link0 link1"; # option host-name "andare.swiftmedia.com"; # option subnet-mask 255.255.255.0; # option broadcast-address 192.33.137.255; # option routers 192.33.137.250; # option domain-name-servers 127.0.0.1; # renew 2 2000/1/12 00:00:01; # rebind 2 2000/1/12 00:00:01; # expire 2 2000/1/12 00:00:01; #}
Instalation de Devuan sur le PC portable
Avec la clé usb de boot on a installé l’OS Devuan sur le pc portable “brochet”
Nom d’utilisateur :superbrochet / root
Mot de passe :glopglop
- Problèmes rencontrés
-
- Le proxy de polytech n'a pas été défini lors de l'installation —> Ajout de http:/proxy proxy.polytech-lile.fr:3128 OK
- le miroir devuan ne s’est pas configuré. On l’a donc ajouté
/etc/apt/sources.list deb http://fr.deb.devuan.org/merged/ ascii main non-free contrib deb-src http://fr.deb.devuan.org/merged/ ascii main non-free contrib deb http://auto-mirror.devuan.org/merged ascii-security main non-free contrib deb-src http://auto-mirror.devuan.org/merged ascii-security main non-free contrib
Installation de la machine virtuelle avec Xen
Installation de la VM
Nous avons ouvert une connection Secure Shell (SSH) sur cordouan : cordouan.insecserv.deule.net
Nous avons ensuite créé la machine virtuelle grâce à la commande suivante :
xen-create-image --hostname=coreff --dhcp --dir=/usr/local/xen --dist=ascii --apt-proxy=http://proxy.polytech-lille.fr:3128 --mirror=http://fr.deb.devuan.org/merged/ --force
On a ensuite modifié le fichier de configuration de la machine virtuelle de la façon suivante:
/etc/xen/coreff.cfg # Configuration file for the Xen instance coreff, created # by xen-tools 4.7 on Fri Sep 28 16:56:02 2018. # # # Kernel + memory size # kernel = '/boot/vmlinuz-4.14.0-3-amd64' extra = 'elevator=noop' ramdisk = '/boot/initrd.img-4.14.0-3-amd64' vcpus = '1' memory = '256' # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/coreff/disk.img,xvda2,w', 'file:/usr/local/xen/domains/coreff/swap.img,xvda1,w', ] # # Physical volumes # # # Hostname # name = 'coreff' # # Networking # dhcp = 'dhcp'vif = [ 'mac=00:16:3E:8B:FC:65' ]vif = [ 'mac=00:16:3E:8B:FC:65, bridge=StudentsInfo ' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Puis xl create coreff.cfg
pour parser la configuration de la VM.
Et xl console coreff
dans un autre terminal pour lancer la machine virtuelle.
On a modifié le mot de passe root de la VM : glopglop!
Montage du /var et du /home dans cordouan
En SSH sur cordouan, on a créé les volumes logiques de 10Go correspondant à ces deux répertoires:
lvcreate -L10G -n apIMA5-coreff-home virtual lvcreate -L10G -n apIMA5-coreff-var virtual
Nous avons ensuite créé le système de fichier sur ces volumes :
mke2fs /dev/virtual/apIMA5-coreff-home mke2fs /dev/virtual/apIMA5-coreff-var
Et modifier une nouvelle fois le fichier de configuration de notre machine virtuelle afin de lui indiquer que les répertoires correspondent à des points de montages physique:
/etc/xen/coreff.cfg [...] # # Disk device(s). # root = '/dev/xvda2 ro' disk = [ 'file:/usr/local/xen/domains/coreff/disk.img,xvda2,w', 'file:/usr/local/xen/domains/coreff/swap.img,xvda1,w', 'phy:/dev/virtual/apIMA5-coreff-home,xvdb1,w', 'phy:/dev/virtual/apIMA5-coreff-var,xvdb2,w', ] [...]
On vérifie sur Coreff que tout à fonctionner :
root@coreff:~# fdisk -l Disk /dev/xvda2: 4 GiB, 4294967296 bytes, 8388608 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvda1: 512 MiB, 536870912 bytes, 1048576 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdb1: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/xvdb2: 10 GiB, 10737418240 bytes, 20971520 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
Les volumes ont bien été créés ! ♥
On modifie le fstab de la VM pour indiquer au système d'exploitation que ces volumes sont à monter automatiquement au démarrage:
# /etc/fstab: static file system information. # # <file system> <mount point> <type> <options> <dump> <pass> proc /proc proc defaults 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 /dev/xvda1 none swap sw 0 0 /dev/xvda2 / ext4 noatime,nodiratime,errors=remount-ro 0 1 /dev/xvdb1 /home ext4 defaults 0 2 /dev/xvdb2 /var ext4 defaults 0 2
Petite vérification : On a bien un /home vide (mis à part le lost+found)
root@coreff:~# ls /home lost+found
Notre répertoire /var
n'étant pas vide, on ne peut pas procéder de la même maniere. Commençonc par monter le xvdb2 dans le répertoire de montage temporaire /mnt
:
root@coreff:~# mount /dev/xvdb2 /mnt
On déplace ensuite tout les fichiers du /var
dans le /mnt
!! ATTENTION !! Cette opération est très critique car à ce moment là, le système n'a plus de /var
root@coreff:~# mv /var/* /mnt
On démonte ensuite le /mnt
, puis on remonte le tout :
root@coreff:~# umount /mnt root@coreff:~# mount -a
On vérifie que toutes ces opération se sont bien passées :
root@coreff:~# df Filesystem 1K-blocks Used Available Use% Mounted on udev 75004 0 75004 0% /dev tmpfs 23824 76 23748 1% /run /dev/xvda2 4062912 459920 3376896 12% / tmpfs 5120 0 5120 0% /run/lock tmpfs 152500 0 152500 0% /run/shm /dev/xvdb1 10321208 23028 9773892 1% /home /dev/xvdb2 10321208 71076 9725844 1% /var
Tout est OK, passons à l'installation des paquetages.
Installation de Docker et création des containers
Pour faciliter l'installation des différents paquetages, il nous est proposé d'utiliser l'outil Docker. Docker est un outil permettant la création de containers contenant des services que nous pourrons moduler facilement en choisissant de démarrer ou non ces containers. Passons à l'installation :
Installation de Docker-Engine
- Prérequis
- Pour l'installation de Docker-Engine il nous faut premièrement installer les paquets apt-transport-https et dirmngr
apt-get install apt-transport-https dirmngr
Il nous faut ensuite rejouter le miroir pour pouvoir télécharger Docker-Engine :
echo 'deb https://apt.dockerproject.org/repo debian-stretch main' >> /etc/apt/sources.list
- Gestion des trousseaux de clés
- Lorsque l'on ajoute des dépots ppa à notre distribution et pour éviter l'erreur <<GPG "NO_PUBKEY">> il faut passer par la commande apt-key. apt-key gère les clés dont se sert apt pour authentifier les paquets. Les paquets authentifiés par ces clés seront réputés fiables.
- Cependant, le port HKP (11371/tcp) est filtré par un pare-feu, il faut donc passer en http:
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D Executing: /tmp/apt-key-gpghome.t2eVBZUjfM/gpg.1.sh --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys F76221572C52609D gpg: key F76221572C52609D: public key "Docker Release Tool (releasedocker) <docker@docker.com>" imported gpg: Total number processed: 1 gpg: imported: 1
Faisons une mise à jour : apt-get update
- Installation de Docker-Engine
- Après avoir installé Docker-Engine (
apt-get install docker-engine
) il nous faut renseigner le proxy de Polytech' dans docker : dans le fichier /etc/default/docker on a rajouter
export http_proxy="http://proxy.polytech-lille.fr:3128/"
On redémarre le service et le tour est joué : service docker restart
Installation des containers
Premièrement nous avons essayé de créer les containers "à la main" mais cette méthode est lourde et chronophage. Nous avons donc opté pour le téléchargement de containers sur la plateforme open-source de Docker. Ces containers sont stables et largement utilisés au travers du monde. (https://hub.docker.com/)
httpd
httpd est le programme du serveur HTTP d'Apache. Il a été conçu pour fonctionner sous forme de processus démon indépendant. Lorsqu'il est utilisé ainsi, il va créer un jeu de processus enfants ou de threads qui traiteront les requêtes.
- Téléchargement
docker pull httpd
- Vérification
root@coreff:/# docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest dabb52744997 9 days ago 178MB
- Lancement du container
docker run -d --name=apache -v /root/httpd/htdocs/index.html:/usr/local/apache2/htdocs/index.html \ -v /root/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -p 80:80 httpd
- Nous lançons le container httpd avec les options suivantes :
- -d Afin de lancer le container en mode détaché
- -i Afin de garder l'entrée standart STDIN ouverte même si le container est en mode détache
- -t Afin d'allouer un pseudo-tty
- --name apache Afin d'attribuer un nom à ce container. Ceci rend la tâche plus simple quand il s'agit d'appeler le container plutôt que l'utiliser son UUID qui se matérialise sous la forme d'une clé en SHA-256
- -v Afin de lier un point de montage. Ici nous lions
$PWD
qui correspond à notre répertoire /root/ au répertoire /usr/local/apache2/htdocs/ du container. Ceci nous permet de créer et modifier notre page web à la racine de notre répertoire /root et que les modifications se fassent directement dans le container, il en est de même pour le fichier de config httpd.conf.
bind9
bind est un logiciel open source qui permet de publier nos informations DNS (Domain Name System) sur Internet et de résoudre les requêtes DNS des utilisateurs. Le nom BIND signifie «Berkeley Internet Name Domain». Le service DNS (Domain Name System) est un service TCP/IP permettant la correspondance entre un nom de domaine qualifié (FQDN : Fully Qualified Domain Name) et une adresse IP.
- Téléchargement
docker pull ventz/bind
- Vérification
root@coreff:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE httpd latest dabb52744997 10 days ago 178MB ventz/bind latest c54ade396204 4 weeks ago 11.7MB
Nous avons créé les fichiers de configuration suivant:
- /etc/bind/named.conf.options
root@coreff:~/Bind# cat named.conf.options options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; allow-transfer { "allowed_to_transfer"; }; }; acl "allowed_to_transfer" { 217.70.177.40/32; };
- /etc/bind/named.conf.local
- C'est dans ce ficher que se trouvent nos déclarations de zones DNS. Il faut ajouter une zone par site internet que nous hégergeons.
root@coreff:~/Bind# cat named.conf.local // // Do any local configuration here // // Consider adding the 1918 zone here, if they are not used in your // organization // include "/etc/bind/zones.rfc1918"; zone "coreff.space" { type master; file "/etc/bind/coreff.space"; };
- /etc/bind/coreff.space
root@coreff:~/Bind# cat coreff.space $TTL 259200 @ IN SOA dns.coreff.space. admin.coreff.space. ( 10 ; Version 7200 ; Refresh (2h) 3600 ; Retry (1h) 1209600 ; Expire (14j) 259200 ; Minimum TTL (3j) IN NS dns.coreff.space. IN NS ns6.gandi.net. IN MX 100 dns.coreff.space. IN A 193.48.57.161 www IN A 193.48.57.161 IN MX 100 dns.coreff.space. dns IN A 193.48.57.161
- Explications
- IN Signifie internet, c’est à dire que la zone après le IN est destinée à internet
- SOA Signifie Star Of Authority, indiquant le serveur de nom faisant autorité c’est à dire votre DNS principal.
- dns.coreff.space. est le DNS principal de notre domaine
- admin.coreff.space. est une adresse email (non-valide ici mais il n'y a pas d'utilité spéciale)
- IN NS est utilisé pour définir quels serveurs répondent pour cette zone.
- IN MX est utilisé pour définir vers quel serveur de la zone un email à destination du domaine doit être envoyé, et avec quelle priorité.
- IN A est utilisé pour faire correspondre une adresse IP a une machine
- 193.48.57.161 est l'adresse IP de notre machine virtuelle coreff
- Problème rencontré
- Il était impossible de lancer des commandes dans le container avec la commande
docker exec
. Il nous a fallu du temps pour comprendre que le container executait juste une configuration et se fermait automatiquement après. Pour palier à ce problème, nous avons fait comme pour http, c'est à dire lier les montages des fichiers de configuration ci-dessus. - Lancement du container
docker run --name=dns -dit --dns=8.8.8.8 --dns=8.8.4.4 -p 53:53/udp -p 53:53 \ -v "$PWD"/Bind/named.conf.local:/etc/bind/named.conf.local \ -v "$PWD"/Bind/named.conf.options:/etc/bind/named.conf.options \ -v "$PWD"/Bind/coreff.space:/etc/bind/coreff.space
Architecture réseau
Services internet
Achat et configuration du nom de domaine sur GANDI
Achat
Nous devons réaliser un site web sécurisé. Pour commencer nous avons donc acheter un nom de domaine via le registrar GANDI. Notre nom de domaine est donc coreff.space
Configuration
Pour commencer nous avons dû ajouter un "glue record" qui est un enregistrement collé (pas très français) et permet d'associer un nom d'hôte avec une adresse IP au registre.
Une fois cela fait, nous avons pû configurer les serveurs ne noms sur GANDI: Nous avions 3 DNS proposé par défaut, on les a donc décalés et mit en 1ere position notre dns : dns.coreff.space
Tests d'intrusion
Recuperation de la clef WEP
Tout d'abord, installer le paquetage suivant, puis activer le mode moniteur de la carte wifi:
apt-get install aircrack-ng airmon-ng start wlx40a5ef0f68ce
Une fois installé, nous allons scanner l'ensemble des reseaux wifi disponible, nous avons le choix parmis x bornes
airodump-ng --encrypt wep wlx40a5ef0f68ce
Avec la "cracotte09" nous recupérons le BSSID et le canal (ch). l'objectif suivant est d'écouter les data qui circulent sur cracotte09, on se place dans un repertoire.
airodump-ng -w out -c 1 --bssid 04:DA:D2:9C:50:58 wlx40a5ef0f68ce
Sur un deuxieme terminal dans le même repertoire, nous allons lire le fichier out-01.cap afin de déchiffrer la clef WEP. l'opération peut durer plusieurs minutes.
aircrack-ng out-01.pcap
Recuperation de la clef WPA
Test avec une borne d'un telephone en partage de connexion :
Nous devons maintenant s'armer d'un bon fichier dictionnaire contenant les caractères souhaité. Copier le dictionnaire dans le dossier ou se trouve le fichier de capture.
Creation du dictionnaire :
Installer le paquetage crunch dans le repertoire, creer le fichier.txt contenant toutes les combinaisons possible d'une succesion de 8 chiffres
crunch 8 8 0123456789 >> Dico.txt
Dans un premier terminal