<style>body {text-align: justify}</style> # Rapport - Sécurité dans les réseaux ## Étudiants - CARLENS Jean Philippe - PREVOST Thomas - MARSAIS-LACOSTE Marcel ## Contexte Nous allons prendre le rôle d'une petite association humanitaire nécessitant d'avoir un serveur web, mail et VPN. Nous avons donc besoin d'instances sécurisées sans pour autant devoir "serrer les vis au maximum". # Réalisation d'un serveur web sécurisé Nous allons employer une machine tournant sur LXLE, une distribution Linux basée sur la dernière version LTS Ubuntu utilisant LXDE. ## Génération des clefs et certificats pour le HTTPS Notre serveur web va utiliser HTTPS et pour ce fait nous allons devoir générer avec `openssl` la clef privée et le certificat qui va être employé par la couche TLS/SSL. ```sh openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout server.key -out server.crt sudo mv server.key /etc/ssl/private sudo mv server.crt /etc/ssl/certs ``` ## Installation et configuration de Apache Nous nous assurons que les modules `ssl`, `headers` et `cgid` sont activés, et que les chemins vers la clef et le certificat dans `/etc/apache2/sites-available/default-ssl.conf` sont à jour. Puis nous relançons le serveur avec la commande suivante. ```sh sudo systemctl restart apache2 ``` Le serveur est en ligne. ![Pasted image 20230122231316](https://user-images.githubusercontent.com/1645347/213945017-abb88d6e-be77-460e-be33-9c69b1528ef9.png) ## Configuration du firewall Nous allons autoriser uniquement le trafic HTTP et HTTPS entrant et sortant, et bloquons le reste. Nous n'ouvrons pas le port SSH car nous voulons accéder à la machine uniquement physiquement dans les locaux de l'association. ```sh sudo ufw allow http sudo ufw allow https ``` --- # Configuration du routeur pfSense Nous allons configurer un routeur pfSense afin de pouvoir gérer nous-mêmes l'adressage IP des machines sur le réseau de l'association ainsi que les requêtes DNS. Cela peut, entre autres, nous permettre de réguler un minimum les sites auxquels il est possible d'accéder au sein de nos locaux, et bien sûr de pouvoir configurer nos paramètres réseau à notre guise. ## Configuration de l'interface réseau Nous allons créer sur un réseau virtuel de type Host-Only. Nous allons prendre soin de ne pas demander au logiciel de VM de gérer le DHCP sur ce réseau car nous allons par la suite léguer ce rôle à pfSense. Ainsi, nous pouvons voir ci dessous que le réseau à pour adresse IP `192.168.126.0`. ![Pasted image 20230122233444](https://user-images.githubusercontent.com/1645347/213945040-c826d4db-75a0-46d0-b9c1-9971dc50834e.png) IP du pfSense : **192.168.126.10** WAN : NAT, **192.168.5.130** ## Configuration de pfSense Nous utilisons l'ISO officiel, basée sur FreeBSD de pfSense, et suivons la procédure d'installation. Au démarrage, nous pouvons voir que le routeur à pour IP LAN `192.168.126.10`. Nous allons donc maintenant configurer le routeur pour utiliser les DNS Cloudflare `1.1.1.1` en primaire et Google `8.8.8.8` en secondaire. Les futures machines connectées au retour utilisant le DNS local utiliseront donc en réalité ces derniers. ### DHCP Tout d'abord récupérons l'adresse MAC du serveur LXLE : `00:0c:29:37:e1:6b`. Nous définissons un mapping DHCP statique pour celui-ci en faisant attention de ne pas être dans la range DHCP d'allocation d'IP dynamique. ![Pasted image 20230122233057](https://user-images.githubusercontent.com/1645347/213945043-ba541ab2-21e6-49a4-b8a4-7899b2870ca8.png) ### DNS Maintenant, nous définissons les noms de domaine de nos machines locales dans notre serveur DNS. ![Pasted image 20230122233200](https://user-images.githubusercontent.com/1645347/213945047-92133455-26b7-4fa6-84d5-96b91d6a1bad.png) Cela va nous permettre, au sein de l'association, d'accéder à nos machines sur le réseau sans utiliser d'adresses IP brutes. Par exemple nous pourrons accéder à l'interface de configuration pfSense via l'URL `pfsense.cs.sr`. Nous définissons également les champs MX pour permettre la future configuration d'un serveur mail sur la machine LXLE. ```sh server: local-zone: "cs.sr" typetransparent server: local-data: "cs.sr IN MX 10 lxle.cs.sr." server: local-data: "lxle.cs.sr IN A 192.168.126.11" ``` ## Test de bon fonctionnement Nous redémarrons notre serveur LXLE en nous assurant qu'il a pour seule interface réseau l'interface connectant au réseau privé `Host-Only` que nous avons créé précédemment. Auparavant, il ne pas oublier sur Windows de supprimer la route créée par défaut depuis l'host. ```sh route delete 0.0.0.0 mask 0.0.0.0 192.168.126.10 (en tant qu’administrateur) ``` Une fois redémarré, nous pouvons constater que l'host possède bel et bien l'adresse IP que nous avons définie dans notre mapping DHCP statique `192.168.126.11`. ![](https://i.imgur.com/A9fn5QY.png) De plus, nous pouvons également voir que notre configuration DNS fonctionne, car l'adresse `pfsense.cs.sr` est atteignable et pointe bien vers le routeur pfSense. ![Pasted image 20230122233923](https://user-images.githubusercontent.com/1645347/213945068-548c222d-1f00-434c-b6a9-c361b88abbfc.png) Nous configurons le firewall et les règles NAT de pfSense pour pouvoir accéder au serveur web uniquement via le routeur et un port forwarding. ![Pasted image 20230122234118](https://user-images.githubusercontent.com/1645347/213945072-bfe9c34a-7107-444d-a72c-be0016b46fa3.png) Et le tout fonctionne. ![](https://i.imgur.com/JwgvCZt.png) ![](https://i.imgur.com/fpzry0f.png) Avec la configuration actuelle, le serveur web de notre association est vulnérable à l'ARP-poisoning. Par exemple, il est possible d’intercepter le login et le mot de passe envoyés par le formulaire http simple. Pour empêcher la connexion non sécurisée de s’établir, il faut que le virtualhost qui écoute sur le port 80 n’ait pour seule utilité que de rediriger le navigateur vers la connexion HTTPS. On peut aussi activer HSTS (HTTP Strict Transport Secure). ![image](https://user-images.githubusercontent.com/24313857/215259009-57b22294-d342-46f9-bd96-2ae1f208fd85.png) Client : **192.168.5.1**, serveur : **192.168.5.128**, pirate : **192.168.5.129**. Lorsque l’attaque MITM n’est pas active, la table ARP du client correspond bien aux adresses physiques des machines. ![image](https://user-images.githubusercontent.com/24313857/215259032-8f35e5d0-adf2-4a3c-ba05-525151c47755.png) Il est en de même pour le serveur : ![image](https://user-images.githubusercontent.com/24313857/215259037-983d2d5f-7fc6-495f-b455-f1adb7c3c489.png) Lorsque l’attaque MITM est active, le client croit que l’adresse MAC du serveur est celle du pirate. ![image](https://user-images.githubusercontent.com/24313857/215259051-ada22c73-1a4d-42c4-852a-9c9c6b709413.png) Le serveur croit que l’adresse MAC du client est celle du pirate : ![image](https://user-images.githubusercontent.com/24313857/215259058-9ffd0693-0826-4f2d-87dd-6fdd3472220b.png) Afin de procéder à une attaque MITM sur une connexion SSL, il est nécessaire d’activer les redirections iptables dans le fichier /etc/ettercap/etter.conf. Cette configuration faisant planter l’interface graphique d’ettercap, il est nécessaire d’utiliser la version en ligne de commande : ```sh sudo ettercap -T -q -M arp:remote /192.168.5.1// /192.168.5.128// -w result ``` Il est nécessaire d’accepter le nouveau certificat dans le navigateur, puisque ce dernier a changé. C’est le certificat d’ettercap (les empreintes sont différentes) : |Certificat avant l’attaque | Certificat pendant l’attaque | |---------------------------|------------------------------| |![image](https://user-images.githubusercontent.com/24313857/215259119-6ebf4aab-cc49-4f0a-95ab-356812ab9caf.png) |![image](https://user-images.githubusercontent.com/24313857/215259129-38a5a24c-b919-4ae4-9d59-f6420193be0c.png) | Les identifiants sont bien interceptés. ![image](https://user-images.githubusercontent.com/24313857/215259138-73b38c54-777a-48a3-826a-ff9ea281935f.png) Il faut donc éviter d'accepter un certificat inconnu. Nous allons donc préinstaller les certificats signés sur les machines de l'association et utiliser une chaîne de certification. # Ajout d'un serveur de mails ## Introduction Nous allons ajouter un serveur mail au sein de notre association. C'est un serveur essentiel car les mails sont un outil indispensable pour nos bénévoles, permettant de communiquer avec le reste du monde. Au vu de son importance, c'est également un des plus grands vecteurs d'attaque pour les personnes malintentionnées. ## Configuration Après avoir configuré Postfix, nous pouvons envoyer un email en telnet sur le port 25 ou avec la commande mail, et nous nous apercevons que le mail a été traité dans /var/log/mail.log. Alice peut lire son mail dans /var/mail/alice. ![image](https://user-images.githubusercontent.com/24313857/215318144-eaea6bbe-a0fc-4098-92d5-e6a1a52bf26c.png) ![image](https://user-images.githubusercontent.com/24313857/215318152-b429ba48-7a51-4762-ac6a-2e6c8227d6f1.png) ![image](https://user-images.githubusercontent.com/24313857/215318165-12afebac-78c7-461f-8ff7-1b8e08237f04.png) Nous changeons ensuite les interfaces d’écoute. ![image](https://user-images.githubusercontent.com/24313857/215318174-46e6215d-0e47-4716-a255-9e7724509087.png) L'adresse est inconnue : ![image](https://user-images.githubusercontent.com/24313857/215318179-938b60a0-f0d0-47db-b2e6-7a592b931f7b.png) Pour se connecter depuis kali, il ne faut pas oublier d’ouvrir le port 25 sur le parefeu : ```sh sudo ufw allow 25 ``` L’envoi de mail fonctionne correctement. Si nous changeons la configuration de ssmtp, nous pouvons utiliser sendmail. ![image](https://user-images.githubusercontent.com/24313857/215318188-a3676122-6a95-492b-887a-641262084f79.png) ![image](https://user-images.githubusercontent.com/24313857/215318191-a614b390-2986-4869-991f-48b9e2c3f4b7.png) Après avoir configuré Thunderbird pour utiliser STARTTLS sur le port 443, avec le nom d’utilisateur alice, nous avons : ![image](https://user-images.githubusercontent.com/24313857/215318202-b6e86c3b-7c53-4b86-8a30-868c6f97c83d.png) Si le serveur SMTP n’est pas correctement configuré, cela semble très imprudent de le laisser ouvert à l’extérieur. Il doit être possible de retrouver son mot de passe si Alice se connecte par IMAP dans le cas où le mot de passe n’est pas hashé, ou bien d’intercepter la connexion pour la forcer à envoyer ses mots de passe en clair. ### Tunnel SSH : On ouvre le port sur LXLE : ```sh sudo ufw allow 22 ``` Sur kali, on crée le tunnel suivant : ```sh ssh -L 2023:localhost:143 thomas@192.168.126.11 ``` Il ne reste plus qu’à utiliser le port 2023 et l’hôte localhost sur Thunderbird sur kali. On observe sur Wireshark que tout le trafic transite via SSH. ## Conclusion Il est important de s'assurer de la sécurisation du serveur mail. C'est la plus grande porte d'entrée vers notre association, et donc la plus grande cible d'attaques extérieures. Il faut mettre en place différents filtres anti-phishing et autres, et s'assurer de former les membres aux éventuels risques. Dans notre cas, notre trafic est chiffré, sous un firewall, et sera à l'avenir écouté par un antivirus. # Installation d'un service OpenVPN ## Introduction Nous allons ajouter un service OpenVPN pour permettre aux membres de notre association de pouvoir travailler notamment à distance, en utilisant ce service. Ce dernier s'occupera de les connecter via un tunnel au réseau interne (pfSense) de l'association à distance de manière sécurisée. ## Configuration de OpenVPN Nous commençons par créer le certificat d’autorité. ![image](https://user-images.githubusercontent.com/24313857/215318332-6ff0b998-6f36-4339-aed1-493509e6d885.png) Nous nous en servons ensuite pour signer un nouveau certificat de serveur. ![image](https://user-images.githubusercontent.com/24313857/215318336-8ce82832-efb2-4286-8a3f-cd3089114351.png) Nous créons l’utilisateur Alice, avec un certificat signé par le certificat d’autorité. ![image](https://user-images.githubusercontent.com/24313857/215318346-2f56ca4a-814f-4a56-ac99-785695584796.png) Nous créons la configuration OpenVPN sur le serveur. ![image](https://user-images.githubusercontent.com/24313857/215318350-f7be3d58-c835-4e7e-b231-7a1e65adee05.png) Il ne faut pas oublier de configurer en « remote access user » : ![image](https://user-images.githubusercontent.com/24313857/215318359-52d338e5-b68c-4022-bea1-3d9c82741d47.png) Pour installer le paquet **openvpn-client-export**, nous avons dû reconfigurer les adresses DNS dans la configuration pfSense afin qu’elles fonctionnent sur la connexion de l’université. Configuration réseau : |Réseau | Adresses | |-----------------------|-------------------------------| |WAN | 192.168.5.130 | |LAN | 192.168.126.10 | |IPv4 tunnel net | 192.168.189.0/24 | Nous n’oublions pas d’autoriser le port OpenVPN dans le parefeu : ![image](https://user-images.githubusercontent.com/24313857/215318500-cf0b12d1-76e9-4454-bf04-6d7ba57f353d.png) On peut considèrer le réseau interne OpenVPN comme sûr parce qu’il n’y a que des administrateurs qui vont s’y connecter. Nous laissons donc passer tout le trafic : ![image](https://user-images.githubusercontent.com/24313857/215318506-d211cca4-0caa-444a-be0d-e827f958033c.png) Nous téléchargeons le fichier de configuration client, nous le lançons avec les identifiants d’Alice et nous nous retrouvons connectés avec l’adresse 192.168.189.2 (gateway = 192.168.189.1). Maintenant, lorsque nous tentons de communiquer avec l’hôte LXLE (192.168.126.11), tout le trafic transite par OpenVPN (capture Wireshark). ![image](https://user-images.githubusercontent.com/24313857/215318509-1745c4c3-4cc2-42ac-a52b-0a72ea943439.png) ## Conclusion En utilisant un VPN, nous évitons d'exposer notre parc de machines au monde, avec par exemple un site public disposant d'une page d'authentification. Ici, nous exigeons un accès double-authentifié, et sécurisé pour pouvoir interagir avec le réseau. Nous allions sécurité et praticité car nous sommes ainsi littéralement au sein du réseau. Avec cela, nous pouvons ainsi réduire la surface d'attaque envers le réseau informatique de notre association. # Réalisation d'audits de sécurité ## Introduction Nous allons maintenant scanner le réseau, chercher des vulnérabilités et mettre en place des correctifs avec l'aide de différents outils. ## Nessus - Scanning L'utilisation de Nessus est important pour scanner les vulnérabilités d'un réseau. <!-- ![](https://i.imgur.com/3AWRaZu.png) --> Nous pouvons créer 2 scans, un pour l'interface WAN, et un autre pour le réseau LAN. ![](https://i.imgur.com/y9hlRrM.png) ### WAN - Scanning de 192.168.186.128 (interface WAN du routeur pfSense) <!-- ![](https://i.imgur.com/4tw4xrf.png) --> ![](https://i.imgur.com/8MIUB6D.png) ### LAN - Scanning de 192.168.59.0/24 (réseau LAN) <!-- ![](https://i.imgur.com/65q9hTS.png) --> La machine tournant sur Kali Linux et scannant le réseau est donc celle qui a l'adresse IP 192.168.59.129. ![](https://i.imgur.com/Glv8q2V.png) Par exemple, pour la machine 192.168.59.3, Nessus a trouvé quelques vulnérabilités et fait certaines suggestions de correctifs. ![](https://i.imgur.com/Q6ieuTc.png) ## Metasploit - Pentesting Avec Metasploit, nous pouvons identifier les machines du réseau LAN et voir s'il y a des faiblesses sur celles-ci. <!-- ![](https://i.imgur.com/bqOmjSY.png) ### Premier scan ![](https://i.imgur.com/lzErPSK.png) ### Deuxième scan pour essayer d'avoir plus d'informations --> ![](https://i.imgur.com/PkXq5cI.png) ## Lynis - Audit et sécurisation Nous pouvons utiliser Lynis pour faire des audits et nous aider dans la sécurisation des machines en corrigeant les failles signalées. <!-- ![](https://i.imgur.com/zBvm2EU.jpg) --> <!-- ### Possibilité de faire des audits en remote en suivant quelques étapes [](https://i.imgur.com/XWcxlXp.png) ### Audit local par machine --> Lynis permet de faire des audit en local comme en remote. Nous avons ici opté pour l'audit en local sur la machine lxle. ![](https://i.imgur.com/aIXhwUo.jpg) ![](https://i.imgur.com/tfV8JGu.jpg) Nous remarquons par exemple qu'aucun mot de passe n'a été utilisé pour déverrouiller la machine. Les informations de test et de debug sont ensuite mises dans le fichier /var/log/lynis.log. Le rapport se trouve, quant à lui, dans le fichier /var/log/lynis-report.dat. ## Conclusion Il est donc important de mettre à jour les services, d'utiliser des certificats SSL de confiance, de configurer des mots de passe, de se pencher sur toute faille potentielle sur le réseau LAN. Finalement, en utilisant ces différents outils d'audit et de suggestion de correctifs, nous pouvons rendre la surface d'attaque du réseau LAN beaucoup plus complexe pour l'attaquant, et ainsi mieux sécuriser notre association.