
Un script Python pour collecter les données de campagne depuis Gophish et générer un rapport.
Ce script accepte un ou plusieurs ID de campagne Gophish en paramètre, puis collecte les résultats de la campagne pour présenter les statistiques et effectuer l'analyse des user-agents ainsi que la géolocalisation des adresses IP. Goreport génère des listes d'adresses IP, de systèmes d'exploitation, de types et versions de navigateurs, et de lieux, avec des compteurs indiquant combien de fois chaque élément a été observé pendant la campagne.
Note sur les statistiques : Goreport indique le nombre total d'événements et le nombre de destinataires d'e-mails ayant participé à chaque événement. En d'autres termes, Goreport affiche combien de fois Gophish a enregistré un événement « Lien cliqué » et combien de destinataires ont cliqué sur un lien. Ce sont des chiffres très différents. Une campagne envoyée à 10 personnes peut avoir 9 événements « Lien cliqué » alors que seulement 3 destinataires ont cliqué sur un lien. Savoir qu'un destinataire a cliqué sur un lien ou soumis des données plus d'une fois est une information précieuse, mais assurez-vous de bien distinguer ces chiffres.
Ce script nécessite un serveur Gophish, une campagne active ou terminée, et la clé API de votre application Gophish. Obtenez cette clé en cliquant sur l'onglet Paramètres. La clé API se trouve sur la première page. Chaque compte utilisateur Gophish possède sa propre clé API qui sert de méthode d'authentification pour cet utilisateur auprès de l'API Gophish. Si vous utilisez plusieurs comptes avec Gophish, assurez-vous de récupérer la clé API du bon utilisateur.
Ces bibliothèques Python sont également requises :
Vous devez effectuer quelques opérations pour commencer :
pip install -r requirements.txt.Cet exemple suppose que Gophish se trouve sur un autre serveur et que HTTPS est utilisé. Pour accéder au point de terminaison de l'API, vous devrez utiliser le transfert de port SSH avec le port 3333 (ou tout autre port local de votre choix) :
[Gophish]
gp_host: https://127.0.0.1:3333
api_key: <VOTRE_CLE_API>
[ipinfo.io]
ipinfo_token: <CLE_API_IPINFO>
[Google]
geolocate_key: <CLE_API_GEOLOCALISATION>
python3 Goreport.py --id 26 --format excel
Cela récupérera les résultats de la campagne 26 depuis https://localhost:3333/api/campaigns/26/?api_key=<Votre_Cle_API> et produira les résultats dans un fichier xlsx.
Plusieurs ID peuvent être fournis à la fois pour plusieurs rapports. Les ID peuvent être fournis sous forme de liste séparée par des virgules, d'une plage, ou des deux.
Exemple : python3 Goreport.py --id 26,29-33,54 --format csv
Si vous utilisez plusieurs comptes utilisateur Gophish ou plusieurs serveurs, vous aurez plusieurs clés API. Pour faciliter le changement de clés, l'option --config de Goreport vous permet de remplacer le fichier de configuration par défaut, gophish.config, par un fichier de configuration de votre choix. Si cet argument est fourni avec un fichier de configuration valide et lisible, Goreport l'utilisera à la place de gophish.config pour configurer les connexions API.
Vous pouvez utiliser cette option si, par exemple, vous avez trois serveurs de phishing exécutant Gophish. Vous pourriez configurer trois fichiers de configuration, chacun avec une clé API Gophish différente, puis les utiliser selon les besoins.
Exemple : python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
Si vous avez lancé plusieurs campagnes en utilisant les mêmes paramètres pour différents groupes cibles, vous souhaiterez peut-être exécuter Goreport sur toutes ces campagnes à la fois, puis combiner les résultats en un seul rapport. Cela peut être réalisé en ajoutant le drapeau --combine de Goreport.
Exemple : python3 Goreport.py --id 26,29-33,54 --format excel --combine
Cette commande collecterait les résultats des campagnes 26, 29, 30, 31, 32, 33 et 54. Normalement, Goreport produirait sept fichiers xlsx, mais l'ajout de --combine indique à Goreport de combiner les résultats et de produire un seul rapport comme s'il s'agissait d'une seule grande campagne.
Goreport peut produire soit un tableur Excel (xlsx), soit un document Word (docx). Il existe également une option de rapport « rapide ». Il suffit de sélectionner votre format préféré à l'aide de l'argument de ligne de commande --format, comme illustré ci-dessus dans la section Exemple d'utilisation. Il n'y a pas grand-chose à dire sur le format csv.
Le document Word est construit à partir d'un modèle, template.docx. Placez votre fichier modèle, nommé template.docx, dans le répertoire de Goreport avec le script principal. Votre modèle doit inclure un style de tableau que vous souhaitez utiliser et des styles de titre pour Titre 1 et Titre 2. Nommez votre style de tableau préféré « Goreport » et configurez vos styles Titre 1 et Titre 2.
N'hésitez pas à créer un style personnalisé ou à utiliser un style existant. La seule chose importante est qu'un fichier template.docx existe et qu'il possède un style de tableau « Goreport ».
Pour renommer un style, faites un clic droit sur le style, sélectionnez Modifier le style de tableau et définissez un nouveau nom.
L'option Excel produit un classeur Excel bien formaté avec plusieurs feuilles de calcul pour les différents ensembles de résultats et statistiques. C'est une bonne option si vous souhaitez trier ou filtrer facilement les tableaux de résultats.
Enfin, il existe une option « rapide ». Celle-ci ne génère pas de document de rapport. Au lieu d'un rapport, elle affiche des informations de base sur la campagne dans votre terminal. C'est pratique pour vérifier rapidement la progression d'une campagne ou consulter les résultats après la fin de la campagne.
Si vous souhaitez définir le statut d'une campagne sur « Terminée » lorsque vous exécutez votre rapport, Goreport peut vous aider à le faire automatiquement avec le drapeau --complete. Si vous fournissez ce drapeau, Goreport utilisera l'API pour marquer chaque ID de campagne comme « Terminée » afin de mettre fin à la campagne et de mettre à jour le statut dans Gophish.
Gophish effectue ses propres recherches de géolocalisation avec les adresses IP et renvoie la latitude et la longitude. Cela fonctionne plutôt bien, mais peut échouer et renvoyer des coordonnées 0,0 ou des informations obsolètes.
Goreport propose deux options qui peuvent être utilisées pour améliorer les résultats de localisation. La première, et recommandée, est l'API ipinfo.io. L'accès à l'API est gratuit tant que vous effectuez moins de 1 000 requêtes par période de 24 heures. Cela ne devrait pas être trop difficile pour une campagne de phishing.
Si une clé API ipinfo.io est ajoutée au fichier de configuration, Goreport utilisera automatiquement ipinfo.io pour recueillir les informations de géolocalisation actuelles pour chaque adresse IP unique.
La deuxième option est l'API Google Maps. Goreport v1.0 utilisait l'API Maps lorsqu'elle était gratuite. Google facture désormais 0,005 $/requête pour l'API Geolocate (comme elle s'appelle maintenant). Si vous préférez ne pas utiliser ipinfo.io, activez l'API Maps Geolocate sur un compte Google et ajoutez la clé API au fichier de configuration de Goreport. Ajoutez ensuite le drapeau --google à votre commande Goreport chaque fois que vous souhaitez que Goreport utilise l'API pour rechercher les coordonnées de Gophish et obtenir une adresse formatée.
Si vous souhaitez examiner le code, voici un aperçu de base du processus :
Goreport.py utilise Python 3 et la bibliothèque CLICK (Command Line Interface Creation Kit). Lorsque le script est exécuté, un nouvel objet Goreport est créé. La fonction __init__ de la classe Goreport crée une connexion à votre serveur Gophish en utilisant la clé API fournie pour l'authentification. Ensuite, la fonction run() est appelée.
Run() utilise les options de ligne de commande pour lancer la génération de rapports. Une boucle For est utilisée pour parcourir tous les ID de campagne fournis avec --id. Votre serveur Gophish est contacté pour obtenir les détails de la campagne pour chaque ID individuel.
D'abord, collect_all_campaign_info() est appelée pour stocker les informations de base de la campagne dans des variables. Cela inclut des données telles que le nom de la campagne, sa date d'exécution, son statut, le serveur SMTP utilisé, le nom du modèle, etc.
Ensuite, process_timeline_events() est appelée pour obtenir le modèle de chronologie de Gophish pour l'ID. Cela inclut les événements enregistrés par Gophish. Cette fonction s'exécute en deuxième car elle remplit certaines listes qui sont examinées par process_results().
Troisièmement, process_results() est appelée pour obtenir le modèle de résultats de Gophish pour l'ID. Cela fournit des données telles que le nombre de cibles dans la campagne.
Goreport utilise ces étapes pour configurer certaines listes afin de déterminer les résultats de base de la campagne, par exemple, qui a reçu l'e-mail avec succès, lesquels des destinataires ont cliqué sur un lien, et lesquels ont fourni des données.
Sur cette base, Goreport peut organiser les données de différentes manières pour un rapport. À tout moment, les listes peuvent être interrogées pour vérifier si une certaine adresse e-mail du modèle de résultats apparaît dans la liste targets_clicked afin de confirmer si ce destinataire a cliqué sur un lien. Cela peut alors déclencher un examen du modèle de chronologie pour collecter les détails. Gophish conserve les détails tels que l'adresse IP et le user-agent dans le modèle de chronologie et les informations de base dans le modèle de résultats.