Lancer une simulation d’hameçonnage à visée pédagogique sur un Tenant Microsoft 365 avec Gophish

Mon objectif

Afin de sensibilisé les utilisateurs du tenant Microsoft 365 que j’utilise, j’ai cherché comment créer une campagne de Phishing (hameçonnage) pour les “piéger” et déclencher une formation sur ce sujet.

Les messages de prévention et les campagnes d’hygiène numérique ne suffisent pas, il faut un fait concret pour tenter de déclencher une prise de conscience.

Disclaimer

Au risque de me répéter, mon objectif n’est pas de lancer de campagne de publipostage ni de phishing, c’est bien à visée pédagogique.

A noter que les éléments expliqués ci-dessous ne fonctionneront pas si vous n’êtes pas administrateur du Tenant à attaquer puisqu’il faut autoriser l’IP de GoPhish, sans cette autorisation, la campagne de phishing est bloqué par les systèmes de sécurité de Microsoft (Merci !!)


Outils utilisés

  • Evidemment, j’utilise le Tenant Microsoft 365 à qui je vais demander d’autoriser l’IP d’envoi de ma campagne ainsi que le fameux 5321.MailFrom (ou expéditeur d’enveloppe).

  • GoPhish dans sa version 0.12.1 au jour d’écriture de ce RetEx

  • La plateforme AWS d’Amazon et plus spécifiquement les instances EC2

Je crée un compte Amazon AWS 

Passer les 5 étapes puis :

Je crée une instance sur EC2

Tout ce que j’explique sur cette partie est totalement gratuite, on peut bénéficier de l’offre 1 an, cela est suffisant pour mon besoin.


Il faut avoir créé un compte sur AWS puis aller sur Amazon EC2

puis


Je télécharge le fichier de clé, attention de bien prendre un fichier ppk et non pem.

Une fois tout installé et lancé, j’ai tout au vert :

Je configure le groupe de sécurité de mon instance

Par mesure de sécurité, j’ai déjà réservé l’accès SSH à ma seule adresse IP via l’assistant de création de l’instance, il faut maintenant que je configure les ports devant être utilisés par GoPhish.

Je vais dans Réseau et sécurité puis Groupes de sécurité, je sélectionne le groupe launch-wizard, règles entrantes, modifier les règles entrantes

J’ajoute une entrée TCP personnalisé avec un numéro de port autre que 3333 qui sera le numéro de port que j’utiliserai pour GoPhish, je mets 8531 par exemple.

J’utilise une Adresse IP Elastic (facultatif)

Pour avoir toujours la même adresse IP, j’utilise cette fonctionnalité.

J’installe Putty 

Putty va me permettre de me connecter en SSH à mon instance EC2, cela de manière sécurisé avec un jeu de clé (privée/publique).

Il me faut récupérer les paramètres de connexion sur l’instance.

Pour cela, je fais un clic droit sur l’instance, puis “se connecter” / Client SSH.

Je note le DNS public qui m’est donné, il me servira pour le host de Putty

Je lance Putty, j’ajoute le Host :

puis je spécifie le fichier de clé privé créé plus haut :

Pour que ce soit plus simple, j’ajoute le user ubuntu comme Auto-login dans Connection/Data

Je lance la connexion, c’est bon, j’ai la ligne de commande d’Ubuntu.

J’installe GoPhish

Je vais chercher la dernière version qui doit être téléchargée sur le dépôt Github officiel.

Au jour de création de ce RetEx, la dernière version est ici :
https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip

Sur la ligne de commande d’Ubuntu, je charge le fichier zip et je le décompresse dans opt/ :

wget https://github.com/gophish/gophish/releases/download/v0.12.1/gophish-v0.12.1-linux-64bit.zip
sudo apt install unzip
unzip gophish-v0.12.1-linux-64bit.zip -d ./gophish
rm gophish-v0.12.1-linux-64bit.zip
sudo chmod +x ./gophish/gophish


Je vais devoir configurer l’IP de gophish et son port.
Pour cela, je modifie le fichier config.json

cd gophish
vim config.json

Je remplace 127.0.0.1:3333 par 0.0.0.0:8531 sur la ligne listen_url

Je lance gophish

./gophish

J’obtiens un message d’erreur, probablement une sécurité sur l’écoute du port 80 par un utilisateur non root, j’ai rapidement essayé de corriger cela avec ipfw mais il n’est pas sur ma machine et avec iptables, je n’ai rien eu de plus satisfaisant. C’est plutôt moche et non conseillé, mais comme mon instance Ec2 ne restera pas en prod, je lance un :

sudo ./gophish

C’est bon, mon GoPhish est lancé 

dans le texte de la ligne de commande, je récupère le mot de passe qui m’est donné sur la ligne

Please login with the username admin and the password xxx

Je souhaite utiliser Gophish sans garder ma fenêtre SSH ouverte (facultatif)

J’ajoute ce paragraphe ici pour plus de cohérence mais il peut être exécuté plus tard quand Gophish fonctionnera manuellement.

J’autorise le lancement de Gophish sans être root (sudo)

Pour éviter d’avoir à utiliser une commande sudo pour lancer Gophish, je vais autoriser l’utilisateur ubuntu à interagir sur le port 80 qui est un port privilégié. En effet la commande cap_net_bind_service permet à cet exécutable (gophish) de lier des sockets réseau à des ports dont le numéro est inférieur ou égal à 1024, même s’il n’est pas exécuté en tant qu’utilisateur root.

sudo setcap 'cap_net_bind_service=+ep'  /home/ubuntu/gophish/gophish

Ainsi, à partir de maintenant, inutile de taper sudo pour lancer gophish, la commande peut être :

./gophish

Je déclare gophish comme un service

Je vais ajouter un fichier gophish.service dans /etc/systemd/system/gophish.service

[Unit]
Description=GoPhish Service
After=network.target

[Service]
ExecStart=/home/ubuntu/gophish/gophish
Type=simple
PIDFile=/var/run/gophish
User=ubuntu
WorkingDirectory=/home/ubuntu/gophish

[Install]
WantedBy=default.target

Pour ne pas avoir à tout taper, j’ai mis cela sur un gist, pour le récupérer directement :

sudo wget https://gist.githubusercontent.com/sigalou/267349eada979e07c99dc5944253169c/raw/e5d8769bb86b40e15ad0c4631629d575e440199a/gophish.service -O /etc/systemd/system/gophish.service

Cela peut être testé par :

systemctl daemon-reload
systemctl enable gophish
systemctl start gophish
systemctl status gophish

Je relance mon instance, c’est bon, Gophish se lance automatiquement.

Je lance GoPhish

De retour dans mon navigateur, je relève l’ip élastique ou ip public de l’instance, je colle cette adresse suivi de :8531 qui est le port définit plus haut

Je vais donc par exemple sur https://13.36.81.72:8531

Ici on utilise donc “admin” et le mot de passe relevé en ligne de commande au moment du lancement. Immédiatement GoPhish demande de changer le mot de passe et on est ainsi connecté sur GoPhish.

J’ajoute un utilisateur “piégeur” sur le Tenant 365

En me connectant en administrateur ayant les droit de gérer les utilisateurs, j’ajoute un nouvel utilisateur.

J’ai choisi d’utiliser un utilisateur que je maquille comme si c’était un compte officiel de microsoft de gestion des comptes.

Je lui ai même mis un joli logo qui fait sérieux.

Evidemment, je lui affecte une licence qui permet d’avoir un compte mail puis je vais dans l’onglet Courrier de cet utilisateur puis logiciels de courrier et je vais cocher au minimum la case SMTP authentifié.

(Facultatif) Pour me simplifier la vie et ne pas à avoir à ajouter cette boite au lettre, j’ai mis un transfert de tous les mails reçus sur cette boite vers mon adresse mail dans Courrier/Transfert des courriers.

Je configure Microsoft Defender pour autoriser GoPhish

Microsoft a tout prévu. Ils ont pensé à proposé sur une licence payante une campagne de phishing pédagogique (licence Defender Plan 2) mais ils ont aussi pensé aux bidouilleurs désargentés en permettant de manuellement autoriser cela.

Je lance Microsoft Defender.

Puis Stratégies et règles

Puis Stratégies de menace / Remise avancée

Et enfin Onglet Simulation d’hameçonnage

Merci Sigalou !!! Il fallait le trouver cet onglet 

Ensuite, il faut configurer le domaine et l’IP.

Le Domaine est l’adresse du domaine qui va envoyer le mail, cela correspond au domaine du SMTP From que je vais spécifier dans GoPhish.

L’IP est l’IP élastique ou public de l’instance.

Je configure le SMTP de GoPhish

De retour dans GoPhish, je vais dans Sending Profiles et je vais créer un profil d’envoi des messages :

Grace au bouton Send Test Email, je peux vérifier que tout fonctionne parfaitement, je reçois un message

A ce stade, c’est déjà une très belle victoire personnelle, j’ai su configurer une machine virtuelle, y installer GoPhish, le configurer, trouver comment ne pas se faire coincer par les sécurités de Microsoft en autorisant cette manipulation et victoire… le mail de test arrive !!! Pour ceux qui découvrent mes RetEx, n’imaginez pas que cela s’est fait le temps d’écrire cette page, c’est des heures de manip (et d’apprentissage).

Je vais récupérer tous les utilisateurs du Tenant Microsoft 365

Deux manières de récupérer les utilisateurs, le plus simple avec l’interface graphique du centre d’administration de M365, sinon cela peut se faire avec une commande powershell.

Je ne vais pas expliquer cette seconde manière de faire, Florian l’a expliquée sur son excellent tuto.

Je prends la formule la plus simple, je vais dans le panneau d’administration puis Utilisateurs actifs puis Exporter les utilisateurs.

L’export se passe bien, je travaille un peu le fichier dans Excel pour supprimer les colonnes inutiles et les lignes qui ne sont pas des utilisateurs. J’ai donc un fichier Excel parfait avec 4 colonnes, je lance un enregistrement en CSV avec une virgule en séparateur pour pouvoir effectuer l’import dans GoPhish.

J’injecte les utilisateurs dans un groupe GoPhish

J’ajoute un nouveau groupe, je lance l’import de mon fichier CSV.

J’ai maintenant un nouveau groupe tout prêt !

Je configure le mail de phishing

Il s’agit du mail que vont recevoir les destinataires de la campagne.

Pour cela, je suis allé demander à Microsoft de m’envoyer un message, j’ai gardé ainsi le format du message. Au final, cela donne :

Je rappelle que c’est à vertu pédagogique, ne me demandez pas le code HTML de la page, je considère que c’est à chacun de faire le travail.

Je configure la page de hameçonnage

Appelée Landing page, cette page de hameçonnage est la page sur laquelle l’utilisateur qu’on souhaite piéger va atterrir quand il cliquera sur le lien qui lui est proposé dans le mail qu’il a reçu.

Je suis allé chercher des modèles pour ne pas réinventer l’eau chaude (merci souleiman)

Voici le meilleur lien qui m’a été utile pour faire la page de connexion M365 la plus réaliste possible.

Je pense bien à la fin de la configuration de la landing page à cocher la récupération de l’email et du mot de passe. J’ai dans l’idée de pouvoir afficher les deux premiers caractères par exemple et le dernier des mots de passe “volés” lors de la formation/sensibilisation des utilisateurs. A noter que les mots de passe récupérés sont donnés en clair, je vais donc déclencher un changement de tous les mots de passe de tous les utilisateurs quelques jours après la campagne de phishing pédagogique.

Quand l’utilisateur clique sur le lien reconnecter ou sur le bouton bleu Se reconnecter, il atterrit sur :

Ne me demandez pas plus le code HTML de cette page.

Je lance la campagne d’hameçonnage

Pour résumer, j’ai créé un groupe d’utilisateurs, un modèle de mail, une page d’hameçonnage, je peux donc aller dans Campagnes pour lancer la campagne.

Quand j’appuie sur Launch Campaign, les mails partent…

 

Je reviens dans quelques temps donner des nouvelles de la campagne ici…

Bibliographie