TP sysres IMA2a5 2015/2016 G1

De Wiki de Projets IMA

Projet Sys&Res IMA2A S9


Partie I - Réalisation en monome : Configuration du routeur

a) Affectation des Vlan et des adresses aux élèves

Ci-dessous, le tableau regroupant Les adresses et Vlan associés aux élèves :

Vlan N°NomPlage d'adresseAdresse VlanAdresse Passerelle
1Network172.20.99.0/24172.20.99.253172.20.99.254
2Puduc172.20.100.0/24172.20.100.253172.20.100.254
3Nounours172.20.101.0/24172.20.101.253172.20.101.254
4Jeuno172.20.102.0/24172.20.102.253172.20.102.254
5Relax172.20.103.0/24172.20.103.253172.20.103.254
6John172.20.104.0/24172.20.104.253172.20.104.254
7Loki172.20.105.0/24172.20.105.253172.20.105.254
8Papy172.20.106.0/24172.20.106.253172.20.106.254
10Hub193.48.57.176/28193.48.57.189193.48.57.190
131Interco192.168.222.8/29192.168.222.10/29X


Explication :
Chaque élève obtient une plage d'adresse allant de 172.20.10X.0 à 172.20.10X.254 (172.20.10X.255 étant le broadcast).
Deux routeur sont sur le réseau en redodance. Un seul suffit pour router. C'est pourquoi, pour chaque Vlan, on associe l'adresse par défaut 172.20.10X.254.
Puis, le routeur disponible change cette adresse par : 172.20.100.252 pour le routeur d'Eric et 172.20.100.253 pour le miens.
Dans le cas où les deux routeurs sont disponibles, alors c'est celui qui a la plus grande priorité qui fera l'action. La priorité se change avec la comande suivante : Switch(config-if)#stanby 1 priority 110 // pour une priorité égale à 110 (par défaut, la priorité est de 100).
Pour que le routeur de l'école connaît toutes ces adresses et vis-versa, on effectue un échange de table de routage par le protocole de routage OSPF.

b) Implantation des éléments dans le routeur

Astuce pour trouver le numéro de port usb connecté au routeur : taper la commande ls /dev/ttyUSB*. Puis, connecter le routeur au PC via la liaison série. Enfin retaper la même commande
Le port usb recherché est celui qui vient d’apparaître.
Passer en root pour pouvoir accéder au routeur. Puis minicom -os.
Pour sortir de minicom : CTRL + A ; q
Astuce 2 : En sortie de minicom -os, le terminal peut déconner. Dans ce cas, taper la commande stty sane
Une fois en dialogue avec le routeur, les lignes à taper sont les suivantes :


/*****Affectation adresse IP et netmask*****/

Switch>en  //passage en administrateur
Switch#conf t  //configuration
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#int vlan 2  //Entrer dans la config du vlan 2
Switch(config-if)#ip address 172.20.100.253 255.255.255.0  //Affectation de l'adresse du Vlan
Switch(config-if)#standby 1 ip 172.20.100.254  //Affectation de l'adresse du Vlan connu par les machines
Switch(config-if)#standby 1 preempt  //Utilisation du protocole HSRP (pour la redondance)
Switch(config-if)#standby 1 priority 100  //Affecte le niveau de priorité. (Inutile pour priorité = 100 car valeur par défaut)
Switch(config-if)#exit
Switch(config)#exit
Switch#write  //Avec cette commande, la config ne sera pas perdu si le routeur est éteint électriquement.


/*****Affecter un nom au Vlan*****/
Switch#conf t  //configuration
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#vlan 3
Switch(config-vlan)#name Nounours
Switch(config-vlan)#exit
Switch(config)#exit
Switch#write


/*****Affecter un port pour internet*****/
Switch#conf t 
Enter configuration commands, one per line.  End with CNTL/Z.
Switch(config)#int GigabitEthernet 0/47  //on entre dans la config du port GigabitEthernet 0/47
Switch(config-if)#Switchport mode acess Vlan 131  //On définit que ce port est associé au Vlan 131 (internet)
Switch(config-if)#exit
Switch(config)#exit
Switch#write


/*****Echange des tables de routages*****/
Switch(config)#router ospf 1
Switch(config-router)#log-adjacency-changes
Switch(config-router)#router-id 172.20.100.253
Switch(config-router)#log-adjacency-changes   
Switch(config-router)#summary-address 172.20.96.0 255.255.240.0
//Nos adresses allant de 172.20.100.0/24 à 172.20.106.0/24, j'ai ciblé l'échange en associant le masque 255.255.240.0.
Switch(config-router)#summary-address 193.48.57.0 255.255.255.0
Switch(config-router)#redistribute connected subnets
Switch(config-router)#redistribute connected metric 30 subnets
/*Pour que le routeur de l'école connaît le routeur à utiliser pour contacter nos machines,
on attribue sur chaque routeur une priorité. Comme j'ai le routeur "de secoure", je mets donc moins de priorité au miens.
J'ai donc attribué un metric 30 et Eric un metric 20.*/
Switch(config-router)#network 192.168.222.8 0.0.0.7 area 2
Switch(config-router)#exit
Switch(config)#exit
Switch#write

Avant le write, il est possible de voir l'ensemble de la config grâce à show run.

Dans cette configuration, le niveau de priorité pour la redondance et à chaque fois en dessous du routeur d'Eric.
Cela veut dire que tant que son routeur fonctionne, le miens ne va pas travailler.
Ce que nous auriont pu faire c'est équilibrer le nombre de Vlan sur les deux routeurs, afin que chacun se charge de la moitier des Vlan.


Partie II - Réalisations communes

a) Installation des systèmes d'exploitation

a1) Installation sur l'eeePC

Il a tout d'abord fallu trouver une image debian sur internet qui est adapté à notre eeePc, puis la mettre sur une clé USB bootable.
Avant de booter sur cette clé, j'ai dû désactiver l'option de démarrage sécurisé (option qui vérifie que l'OS est authentique).
Puis j'ai démarré l'eeePc sur cette clé est installé le linux.

Configuration réseau manuelle :

Adresse IP de la machine (une adresse dans ma zone réservé qui est 172.20.100.0/24) : 172.20.100.10
Masque du réseau : 255.255.255.0 (/24)
Passerelle : 172.20.100.254
Serveur de nom : 193.48.57.34
Nom de la machine : zebrasoma
Domaine : Deule.net

Configuration de la partition manuelle :
J'ai changé la partition de windows initialement de 22.0 GB à 8GB.
Il me reste donc 14GB de libre, j'ai pu donc mettre linux sur cette espace.

Pour continuer l'installation il faut renseigner les points suivant :
Nom du miroir de l'archive Debian : debian.polytech-lille.fr
Mandataire HTTP : http ://proxy.polytech-lille.fr:3128

a2) Installation dans la machine virtuelle Xen

Puis, j'ai créé une machine virtuelle en me connectant sur root@cordouan.insecserv.deule.net
La commande pour creer la machine virtuelle est la suivante :
xen-create-image --hostname Troll --ip 193.48.57.177 --netmask 255.255.255.240 --dir /usr/local/xen

Hostname  : Troll
Distribution  : jessie
MAC Address  : 00:16:3E:9F:A4:0A
IP Address(es)  : 193.48.57.177
RSA Fingerprint : 9b:68:20:bf:bc:04:d1:2f:85:2d:8a:2e:52:e8:38:e2
Root Password  : tenue secret non mais oh!

Commande utile :


Pour ouvrir la machine : xl create /etc/xen/Troll.cfg
Pour voir les machine d'ouverte : xl list
Pour acceder à la machine : xl console Troll
Pour la fermer : halt
nano /etc/ssh/sshd_config allow route login (without password)->yes
apt -get purge network-manager systemd
Attention, avant de rebooter, taper cette commande impérativement
init tab , puis trouver tout en bas 1:??45:tty1 remplacer par 1:??45:hvc0



b) Service Internet

b1) Serveur ssh

Pour que mon Eee PC se connecte automatiquement à une borne wifi, il est nécessaire de modifier le fichier /etc/network/interfaces
Pour ma part, je me connecte sur la borne de Marrouane. Ci dessous, la modification apporté au fichier :

uto wlan0
iface wlan0 inet static
        wireless-mode managed
        wireless-essid T1  //Borne de marouanne
        wireless-key 0000000000  //Mot de passe de la borne wifi de marrouane
        address 172.26.79.63   //adresse de mon pc
        netmask 255.255.240.0
        gateway 172.26.79.254

Les deux machine sont maintenant connectés et accessibles par ssh

b2) Serveur DNS

Afin de configurer notre serveur DNS, il est necessaire de modifier les trois fichiers suivant :

  • named.conf.local
  • db.Clem
  • named.conf.options

En voici les modifications :

named.conf.local :
zone "clement-millet.work" {
        type master; // dns maître (l'esclave sera gandi)
        file "/etc/bind/db.Clem";  //On met la conf dans ce fichier et on garde la conf par defaut dans le fichier /etc/bind/db.

-----------------------------------------------------------------------------------------------------------------------------------

db.Clem :
;
; BIND data file for local loopback interface
;
$TTL    3600
@       IN      SOA     ns admin (
                              3         ; Serial  //Numéro qu'on incrémente à chaque modif de façon à ce que ce soit pris en compte
                           3600         ; Refresh  //Données en seconde
                            600         ; Retry
                          36000         ; Expire
                           3600 )       ; Negative Cache TTL
;
@       IN      NS      ns
@       IN      NS      ns6.gandi.net.
@       IN      MX      100 mail

ns      IN      A       193.48.57.177 //adresse de ma machine virtuel
mail    IN      A       193.48.57.177
www     IN      CNAME   ns // = alias de ns
};

-----------------------------------------------------------------------------------------------------------------------------------

named.conf.options :
options {
        directory "/var/cache/bind";

        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; //On autorise toutes les adresses dans cette plage, sachant que L'adresse de www.gandi.net est 217.70.184.1
};


Infos pratiques :


Les fichiers /var/log/apache2/secure_access.log et access.log permette de visualiser les resuêtes qui ont été effectués.
Nous pouvons également y voir l'adresse IP des machines qui se sont connectés sur mon site internet.

Pour faire une redirection du site internet, ouvrir le fichier /etc/apache2/sites-available/000-default.conf puis ajouter la ligne : Redirect permanent / "https://www.clement-millet.work/"
Puis, pour que ce soit pris en compte, taper la commande : service apache2 restart



b3) Sécurisation de site web par certificat

Je me connecte sur ma machine virtuelle puis j'installe les packages suivants :

  • postfix
  • mailx
  • bsd-mailx

Je modifie le fichier /etc/aliases et j'ajoute la ligne : admin: root
Je recompile en tapant la commande newaliases
J'envoie ensuite un mail à admin@clement-millet.work
Puis, je vérifie si j'ai bien reçu le mail en tapant mailx => mail bien reçu
Je peux donc maintenant creer un certificat ssl pour mon nom de domaine et recevoir la confirmation par mail.
Puis, je créer les fichiers suivant qui vont stocker les certificats donnés par gandi.net :
troll.crt //certificat intermédiaire
gandi.crt

Il est ensuite nécessaire de créer le fichier /etc/apache2/sites-available/000-domain.tld-ssl.conf puis y écrire les lignes suivantes :

  <VirtualHost 193.48.57.177:443>

        ServerName www.clement-millet.work
        ServerAlias clement-millet.work
        DocumentRoot /var/www/
        CustomLog /var/log/apache2/secure_access.log combined

        SSLEngine on
        SSLCertificateFile /root/troll.crt //clé publique + signature de gandi
        SSLCertificateKeyFile /root/troll.key //private key
        SSLCertificateChainFile /root/gandi.crt
        SSLVerifyClient None

  </VirtualHost>

Enfin, il faut taper les commandes suivantes pour prendre en compte le serveur https:

a2ensite 000-domain.tld-ssl
a2enmod ssl
service apache2 reload
service apache2 restart
b4) Sécurisation de serveur DNS par DNSSEC

Je modifie tout d’abord le fichier /etc/bind/named.conf.options et j'y ajoute la ligne dnssec-enable yes;
Je créer ensuite le répertoire /etc/bind/clement-millet pour y stocker les clefs.
J’exécute ensuite les commande suivantes :

dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE -r /dev/urandom clement-millet.work //création de la clef asymétrique de signature de clefs de zone
mv *.key clement-millet-ksk.key //Je renome les clefs générées
mv *.private clement-millet-ksk.private
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE -r /dev/urandom clement-millet.work //création de la clef asymétrique de la zone pour signer les enregistrements
mv Kclement-millet.work.+005+18675.key clement-millet-zsk.key
mv Kclement-millet.work.+005+18675.private clement-millet-zsk.private

Puis, je modifie le fichier db.Clem en y incluant mes deux cléf publiques précédemment générées.
Je signe les enregistrements de la zone en tapant la commande :
dnssec-signzone -o clement-millet.work -k clement-millet-ksk ../db.Clem clement-millet-zsk
Dans mon fichier named.conf.local, je remplace la ligne
file "/etc/bind/db.Clem"; par file "/etc/bind/db.Clem.signed";
Enfin, je communique ma clef publique KSK à gandi.net
Pour tester mon nom de domaine : http://dnsviz.net ou encore : https://www.zonemaster.fr/

c) Tests d'intrusion

c1) Intrusion par changement d'adresse MAC

En changeant le fichier /etc/network/interfaces de façon à me connecter à la borne de maxime, je n'ai plus de connexion internet
Cela est normale vu que dans la config de sa borne, mon adresse mac n'est pas autorisé.
En changent mon adresse mac par celle de Nour par exemple, je peux me connecter.
Changement d’adresse mac :

# ifconfig wlan0 down
# ifconfig wlan0 hw ether 00:15:af:e7:19:f3  //adresse mac de Nour
# ifconfig wlan0 up


c2) Cassage de clef WEP d'un point d'accès Wifi

En premier lieu, j'ai installé le paquetages utile à la manipulation : aircrack-ng
Après avoir installé tous ce qu'il faut, nous avons remarqué qu'il était impossible de passer nos carte wifi en mode monitor.
Nous utiliserons donc une clé Wifi pour faire cette manipulation, puis je l'identifie (wlan4).
Je passe donc cette clé en mode monitor grâce à la commande airmon-ng start wlan4 après avoir fait un apt-get install firmware-ralink
Ceci me génère le mon0 qui permet de voir passer toute les trames wifi passer, et pas uniquement les trame ethernet.
Afin d'augmenter le trafique du point d'accès, je peux utiliser la commande aireplay-ng
Puis j'écoute toues les trames wifi avec la commande airodump-ng mon0
Lorsque les différents réseaux sont identifiés, je me focalise sur celui qui m'intéresse (cracotte02) grâce à la commande airodump-ng -d BSSID mon0 -- channel 5
avec BSSID de cracotte02 = 04:DA:D2:9C:50:51
afin de tout enregistrer dans des fichier pour ensuite annaliser les capture, je rajoute à la fin -w nom_fichier
Après avoir obtenue au moins 50 000 données capturées, je lance l'algorithme de craquage aircrack-ng nom_fichier*.cap.
KEY FOUND! [AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:AA:BB]

c3) Cassage de mot de passe WPA-PSK par force brute

Ici, le cassage de clés fonctionne différemment. Nous devons tout d'abord établir un dictionnaire regroupant tous les clés possible. (en supposant que la clé est de 8 octets n'ayant que des chiffres)
Pour générer ce dictionnaire, j’exécute le programme suivant :

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
   int i=0;
   for(i=0;i < pow(10,8);i++) //10⁸-1
   {
      printf("%08d\n",i);
   }
   return 0;
}

Je l'execute avec une redirection vers le fichier dictionnaire.txt.
Puis, il faut maintenant attendre que quelqu'un se connecte à la borne afin de récupérer le handshake (que je place dans un fichier)
Je tape donc la commande : airodump-ng --channel 7 -d 04:DA:D2:9C:50:51 mon0 -w handshake
Je copie les fichiers générés sur une zabeth afin de cracker plus rapidement.
Je lance ensuite l'algorithme de craquage : aircrack-ng -w dictionnaire.txt handshake*.cap, puis j'attends
KEY FOUND! [ 12399902 ]

d) Réalisation

d6) Sécurisation Wifi par WPA2-EAP

Avant tout, il faut installer le package FreeRaduis sur la VM.
Dans le fichier /etc/freeradius/eap.conf, je change la ligne "default_eap_type = md5" en "default_eap_type = peap".
Dans le fichier /etc/freeradius/client.conf,

je remplace les ligne suivantes :Par la ligne :Ainsi que la ligne :
client 192.168.0.0/24 { client 172.20.99.5/32 {client 172.20.99.6/32 {
secret = testing123-1secret = BigSecretsecret = BigSecret
shortname = private-network-1 }shortname = wifi1 }shortname = wifi2 }

Ainsi, je sécurise mieux que si j'avais créé qu'une seule ligne avec les adresses 172.20.99.0/24

Dans le fichier users, j'ajoute un nom d'utilisateur et un mot de passe en y insérant la ligne suivante :
clement Cleartext-Password := "MasterPassword"

Puis, je configure le point d'accès :

ap>en
ap#conf t
ap(config)#ap(config)#aaa authentication login eap_Troll group radius_Troll
ap(config)#radius-server host 193.48.57.177 auth-port 1812 acct-port 1813 key BigSecret
ap(config)#aaa group server radius radius_Troll
ap(config-sg-radius)#server 193.48.57.177 auth-port 1812 acct-port 1813
ap(config-sg-radius)#exit

ap(config)#dot11 ssid PUDUC        
ap(config-ssid)#vlan 2
ap(config-ssid)#authentication open eap eap_Troll   
ap(config-ssid)#authentication network-eap eap_Troll   
ap(config-ssid)#authentication key-management wpa
ap(config-ssid)#mbssid guest-mode
ap(config-ssid)#exit

ap(config)#interface Dot11Radio0
ap(config-if)#encryption vlan 2 mode ciphers aes-ccm tkip
ap(config-if)#ssid PUDUC
ap(config-if)#exit
ap(config)#do write
Building configuration...
[OK]

ap(config)#interface Dot11Radio0.2
ap(config-subif)#encapsulation dot1Q 2
ap(config-subif)#no ip route-cache
ap(config-subif)#bridge-group 2
ap(config-subif)#bridge-group 2 subscriber-loop-control
ap(config-subif)#bridge-group 2 spanning-disabled      
ap(config-subif)#bridge-group 2 block-unknown-source   
ap(config-subif)#no bridge-group 2 source-learning
ap(config-subif)#no bridge-group 2 unicast-flooding
ap(config-subif)#exit
ap(config)#do write
Building configuration...
[OK]

ap(config)#interface GigabitEthernet0.2
ap(config-subif)#encapsulation dot1Q 2
ap(config-subif)#no ip route-cache
ap(config-subif)#bridge-group 2
ap(config-subif)#bridge-group 2 spanning-disabled
ap(config-subif)#no bridge-group 2 source-learning
ap(config-subif)#exit
ap(config)#exit
ap#write
Building configuration...
[OK]

Enfin, je configure mon fichier interfaces :

auto wlan0
iface wlan0 inet static
  wpa-ssid PUDUC
  wpa-key-mgmt WPA-EAP
  wpa-identity clement
  wpa-password MasterPassword

  adress 172.20.100.10
  netmarsk 255.255.255.0
  gateway 172.20.100.254



Nom de domaine reservé : clement-millet.work