
Uno script Python per raccogliere dati delle campagne da Gophish e generare un report.
Questo script accetta uno o più ID delle campagne Gophish come parametro e poi raccoglie i risultati della campagna per presentare le statistiche, eseguire il parsing dello user-agent e le ricerche di geolocalizzazione per gli indirizzi IP. Goreport genera elenchi di indirizzi IP, sistemi operativi, tipi e versioni di browser e località con i conteggi del numero di volte in cui ciascuno è stato osservato durante la campagna.
Una nota sulle statistiche: Goreport riporterà il numero totale di eventi e il numero di destinatari email che hanno partecipato a ciascun evento. In altre parole, Goreport mostrerà quante volte Gophish ha registrato un evento "Clicked Link" e quanti destinatari hanno cliccato su un link. Sono numeri molto diversi. Una campagna inviata a 10 persone potrebbe avere 9 eventi "Clicked Link" quando solo 3 destinatari hanno cliccato su un link. Sapere che i destinatari hanno cliccato su un link o inviato dati più di una volta è un'informazione preziosa, ma assicurati di tenere i numeri separati.
Questo script richiede un server Gophish, una campagna attiva o completata e la chiave API per la tua applicazione Gophish. Ottieni questa chiave facendo clic sulla scheda Impostazioni. La chiave API si trova nella prima pagina. Ogni account utente Gophish ha la propria chiave API che funge da metodo di autenticazione per quell'utente verso l'API di Gophish. Se utilizzi più account con Gophish, assicurati di prendere la chiave API dell'utente corretto.
Sono richieste anche queste librerie Python:
Devi fare alcune cose per iniziare:
pip install -r requirements.txt.Questo esempio presuppone che Gophish sia su un altro server e che venga utilizzato HTTPS. Per accedere all'endpoint API, dovrai utilizzare il port forwarding SSH con la porta 3333 (o qualsiasi altra porta locale che desideri utilizzare):
[Gophish]
gp_host: https://127.0.0.1:3333
api_key: <YOUR_API_KEY>
[ipinfo.io]
ipinfo_token: <IPINFO_API_KEY>
[Google]
geolocate_key: <GEOLOCATE_API_KEY>
python3 Goreport.py --id 26 --format excel
Questo recupererà i risultati della campagna 26 da https://localhost:3333/api/campaigns/26/?api_key=<Your_API_Key> e restituirà i risultati in un file xlsx.
È possibile fornire più ID contemporaneamente per più report. Gli ID possono essere forniti utilizzando un elenco separato da virgole, un intervallo o entrambi.
Esempio: python3 Goreport.py --id 26,29-33,54 --format csv
Se utilizzi più account utente o server Gophish, avrai più chiavi API. Per facilitare il passaggio da una chiave all'altra, l'opzione --config di Goreport ti consente di sovrascrivere il file di configurazione predefinito, gophish.config, con un file di configurazione da te nominato. Se questo argomento viene fornito con un file di configurazione valido e leggibile, Goreport lo utilizzerà al posto di gophish.config per configurare le connessioni API.
Potresti utilizzare questa opzione se, ad esempio, hai tre server di phishing che eseguono Gophish. Potresti impostare tre file di configurazione, ciascuno con una chiave API Gophish diversa, e poi usarli secondo necessità.
Esempio: python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
Se hai eseguito più campagne utilizzando le stesse impostazioni per diversi gruppi di destinatari, potresti voler eseguire Goreport su queste campagne tutte insieme e poi combinare i risultati in un unico report. Questo può essere ottenuto aggiungendo il flag --combine di Goreport.
Esempio: python3 Goreport.py --id 26,29-33,54 --format excel --combine
Questo comando raccoglierebbe i risultati per le campagne 26, 29, 30, 31, 32, 33 e 54. Normalmente, Goreport produrrebbe sette file xlsx, ma l'aggiunta di --combine dice a Goreport di combinare i risultati e produrre un solo report come se fossero tutti un'unica grande campagna.
Goreport può produrre un foglio di calcolo Excel (xlsx) o un documento Word (docx). È disponibile anche un'opzione di report "rapido". Basta selezionare il formato preferito utilizzando l'argomento della riga di comando --format, come mostrato sopra nella sezione Esempio di utilizzo. Non c'è molto da dire sul formato csv.
Il documento Word è costruito a partire da un modello, template.docx. Inserisci il tuo file modello, denominato template.docx, nella directory di Goreport insieme allo script principale. Il tuo modello dovrebbe includere uno stile di tabella che desideri utilizzare e stili di intestazione per Heading 1 e Heading 1. Assegna allo stile di tabella preferito il nome "Goreport" e imposta gli stili Heading 1 e 2.
Sentiti libero di creare uno stile personalizzato o usarne uno esistente. L'unica cosa che conta è che esista un file template.docx e che abbia uno stile di tabella "Goreport".
Per rinominare uno stile, fai clic con il pulsante destro del mouse sullo stile, seleziona Modifica stile tabella e imposta un nuovo nome.
L'opzione Excel produce una cartella di lavoro Excel ben formattata con più fogli di lavoro per le diverse raccolte di risultati e statistiche. Questa è una buona opzione se desideri ordinare o filtrare facilmente le tabelle dei risultati.
Infine, c'è un'opzione "rapida". Questa non genera un documento di report. Invece di un report, restituisce le informazioni di base sulla campagna al terminale. È utile per controllare rapidamente l'avanzamento della campagna o per fare riferimento ai risultati dopo il completamento della campagna.
Se desideri impostare lo stato di una campagna su "Complete" quando esegui il report, Goreport può aiutarti a farlo automaticamente con il flag --complete. Se fornisci questo flag, Goreport utilizzerà l'API per contrassegnare ogni ID campagna come "Complete" per terminare la campagna e aggiornare lo stato in Gophish.
Gophish esegue le proprie ricerche di geolocalizzazione con gli indirizzi IP e restituisce latitudine e longitudine. Funziona abbastanza bene, ma potrebbe fallire e restituire coordinate di 0,0 o potrebbe restituire informazioni obsolete.
Goreport ha due opzioni che possono essere utilizzate per migliorare i risultati di localizzazione. La prima, e consigliata, è l'API di ipinfo.io. L'accesso all'API è gratuito purché si effettuino meno di 1.000 query per periodo di 24 ore. Non dovrebbe essere troppo difficile per una campagna di phishing.
Se una chiave API di ipinfo.io viene aggiunta al file di configurazione, Goreport utilizzerà automaticamente ipinfo.io per raccogliere informazioni di geolocalizzazione aggiornate per ciascun indirizzo IP univoco.
La seconda opzione è l'API di Google Maps. Goreport v1.0 utilizzava l'API Maps quando era gratuita. Google ora addebita $0,005/richiesta per l'API Geolocate (come è ora chiamata). Se preferisci non utilizzare ipinfo.io, attiva l'API Geolocate Maps su un account Google e aggiungi la chiave API al file di configurazione di Goreport. Quindi aggiungi il flag --google al tuo comando Goreport ogni volta che desideri che Goreport utilizzi l'API per cercare le coordinate di Gophish e ottenere un indirizzo formattato.
Se desideri rivedere il codice, ecco uno schema di base del processo:
Goreport.py utilizza Python 3 e la libreria Command Line Interface Creation Kit (CLICK). Quando lo script viene eseguito, viene creato un nuovo oggetto Goreport. La funzione __init__ per la classe Goreport crea una connessione al tuo server Gophish utilizzando la chiave API fornita per l'autenticazione. Quindi viene chiamata la funzione run().
Run() utilizza le opzioni della riga di comando per avviare la reportistica. Viene utilizzato un ciclo For per scorrere tutti gli ID campagna forniti con --id. Il tuo server Gophish viene contattato per i dettagli della campagna per ciascun ID individualmente.
Innanzitutto, viene chiamata collect_all_campaign_info() per memorizzare le informazioni di base della campagna in variabili. Questi includono dati come il nome della campagna, quando è stata eseguita, il suo stato, il server SMTP utilizzato, il nome del modello e altro ancora.
In secondo luogo, viene chiamata process_timeline_events() per ottenere il modello della timeline di Gophish per l'ID. Questo include gli eventi registrati da Gophish. Questa funzione viene eseguita per seconda perché popola alcuni elenchi che vengono esaminati da process_results().
In terzo luogo, viene chiamata process_results() per ottenere il modello dei risultati di Gophish per l'ID. Questo fornisce dati come il numero di target nella campagna.
Goreport utilizza questi passaggi per impostare alcuni elenchi al fine di determinare i risultati di base per la campagna, ad esempio chi ha ricevuto con successo un'email, quali destinatari hanno cliccato su un link e quali destinatari hanno fornito dati.
Con questa base, Goreport può organizzare i dati in diversi modi per un report. In qualsiasi momento, gli elenchi possono essere interrogati per verificare se un determinato indirizzo email nel modello dei risultati appare nell'elenco targets_clicked per confermare se quel destinatario ha cliccato su un link. Questo può quindi avviare una revisione del modello della timeline per raccogliere i dettagli. Gophish mantiene i dettagli come l'indirizzo IP e lo user-agent nel modello della timeline e le informazioni di base nel modello dei risultati.