
Un script de Python para recopilar datos de campañas de Gophish y generar un informe.
Este script acepta como parámetro el ID o IDs de tu campaña de Gophish y luego recopila los resultados de la campaña para presentar las estadísticas y realizar el análisis del agente de usuario y las búsquedas de geolocalización de direcciones IP. Goreport genera listas de direcciones IP, sistemas operativos, tipos y versiones de navegadores, y ubicaciones con recuentos del número de veces que cada uno fue visto durante la campaña.
Una nota sobre las estadísticas: Goreport informará el número total de eventos y el número de destinatarios de correo electrónico que participaron en cada evento. En otras palabras, Goreport mostrará cuántas veces Gophish registró un evento "Enlace clickeado" y cuántos destinatarios hicieron clic en un enlace. Son números muy diferentes. Una campaña enviada a 10 personas podría tener 9 eventos de "Enlace clickeado" cuando solo 3 destinatarios hicieron clic en un enlace. Saber que los destinatarios hicieron clic en un enlace o enviaron datos más de una vez es información valiosa, pero asegúrate de mantener los números claros.
Este script requiere un servidor Gophish, una campaña activa o completada, y la clave de API para tu aplicación Gophish. Obtén esta clave haciendo clic en la pestaña Configuración. La clave de API se encuentra en la primera página. Cada cuenta de usuario de Gophish tiene su propia clave de API que actúa como método de autenticación para ese usuario en la API de Gophish. Si usas varias cuentas con Gophish, asegúrate de tomar la clave de API del usuario correcto.
También se requieren las siguientes bibliotecas de Python:
Necesitas hacer algunas cosas para empezar:
pip install -r requirements.txt.Este ejemplo asumirá que Gophish está en otro servidor y se utiliza HTTPS. Para acceder al endpoint de la API, necesitarás usar el reenvío de puertos SSH con el puerto 3333 (o cualquier otro puerto local que desees usar):
[Gophish]
gp_host: https://127.0.0.1:3333
api_key: <TU_CLAVE_API>
[ipinfo.io]
ipinfo_token: <TOKEN_API_IPINFO>
[Google]
geolocate_key: <CLAVE_API_GEOLOCALIZACION>
python3 Goreport.py --id 26 --format excel
Eso obtendría los resultados de la campaña 26 desde https://localhost:3333/api/campaigns/26/?api_key=<Tu_Clave_API> y generaría los resultados en un archivo xlsx.
Se pueden proporcionar varios IDs a la vez para múltiples informes. Los IDs se pueden proporcionar usando una lista separada por comas, un rango, o ambos.
Ejemplo: python3 Goreport.py --id 26,29-33,54 --format csv
Si usas varias cuentas de usuario de Gophish o servidores, entonces tendrás múltiples claves de API. Para facilitar el cambio entre claves, la opción --config de Goreport te permite sobrescribir el archivo de configuración predeterminado, gophish.config, con un archivo de configuración que nombres. Si se proporciona este argumento con un archivo de configuración válido y legible, Goreport lo usará en lugar de gophish.config para configurar las conexiones API.
Podrías usar esta opción si, por ejemplo, tienes tres servidores de phishing ejecutando Gophish. Podrías configurar tres archivos de configuración, cada uno con una clave API de Gophish diferente, y luego usarlos según sea necesario.
Ejemplo: python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
Si ejecutaste varias campañas usando la misma configuración para diferentes grupos objetivo, es posible que desees ejecutar Goreport contra todas estas campañas a la vez y luego combinar los resultados en un solo informe. Esto se puede lograr agregando el indicador --combine de Goreport.
Ejemplo: python3 Goreport.py --id 26,29-33,54 --format excel --combine
Este comando recopilaría los resultados de las campañas 26, 29, 30, 31, 32, 33 y 54. Normalmente, Goreport generaría siete archivos xlsx, pero la adición de --combine le dice a Goreport que combine los resultados y genere solo un informe como si todas fueran una gran campaña.
Goreport puede generar una hoja de cálculo de Excel (xlsx) o un documento de Word (docx). También hay una opción de informe "rápido". Simplemente selecciona tu formato preferido usando el argumento de línea de comandos --format, como se muestra arriba en la sección de Uso de ejemplo. No hay mucho que decir sobre el formato csv.
El documento de Word se construye a partir de una plantilla, template.docx. Coloca tu archivo de plantilla, llamado template.docx, en el directorio de Goreport junto con el script principal. Tu plantilla debe incluir un estilo de tabla que desees usar y estilos de encabezado para Título 1 y Título 2. Nombra tu estilo de tabla preferido "Goreport" y configura tus estilos de Título 1 y 2.
Siéntete libre de crear un estilo personalizado o usar un estilo existente. Lo único que importa es que exista un archivo template.docx y que tenga un estilo de tabla "Goreport".
Para renombrar un estilo, haz clic derecho en el estilo, selecciona Modificar estilo de tabla y establece un nuevo nombre.
La opción de Excel genera un libro de Excel bien formateado con múltiples hojas de trabajo para las diferentes colecciones de resultados y estadísticas. Esta es una buena opción si deseas ordenar o filtrar fácilmente las tablas de resultados.
Finalmente, hay una opción "rápida". Esto no genera un documento de informe. En lugar de un informe, muestra información básica sobre la campaña en tu terminal. Esto es útil para verificar rápidamente el progreso de la campaña o consultar los resultados después de la finalización de la campaña.
Si deseas establecer el estado de una campaña como "Completada" cuando ejecutes tu informe, Goreport puede ayudarte a hacer esto automáticamente con el indicador --complete. Si proporcionas este indicador, Goreport usará la API para marcar cada ID de campaña como "Completada" para finalizar la campaña y actualizar el estado en Gophish.
Gophish realiza sus propias búsquedas de geolocalización con direcciones IP y devuelve latitud y longitud. Esto funciona aceptablemente, pero puede fallar y devolver coordenadas de 0,0 o puede devolver información desactualizada.
Goreport tiene dos opciones que podrían usarse para mejorar los resultados de ubicación. La primera opción, y recomendada, es la API de ipinfo.io. El acceso a la API es gratuito siempre y cuando realices menos de 1,000 consultas por período de 24 horas. Eso no debería ser demasiado difícil para una campaña de phishing.
Si se agrega una clave de API de ipinfo.io al archivo de configuración, Goreport usará automáticamente ipinfo.io para recopilar información de geolocalización actualizada para cada dirección IP única.
La segunda opción es la API de Google Maps. Goreport v1.0 usaba la API de Maps cuando era gratuita. Google ahora cobra $0.005/solicitud por la API de Geolocalización (como se llama ahora). Si prefieres no usar ipinfo.io, activa la API de Geolocalización de Maps en una cuenta de Google y agrega la clave de API al archivo de configuración de Goreport. Luego agrega el indicador --google a tu comando de Goreport cada vez que quieras que Goreport use la API para buscar las coordenadas de Gophish y obtener una dirección formateada.
Si deseas revisar el código, aquí hay un esquema básico del proceso:
Goreport.py usa Python 3 y la biblioteca Command Line Interface Creation Kit (CLICK). Cuando se ejecuta el script, se crea un nuevo objeto Goreport. La función __init__ para la clase Goreport crea una conexión a tu servidor Gophish usando la clave de API proporcionada para la autenticación. Luego se llama a la función run().
Run() usa las opciones de línea de comandos para iniciar la generación de informes. Se utiliza un bucle For para recorrer todos los IDs de campaña proporcionados con --id. Se contacta a tu servidor Gophish para obtener los detalles de la campaña para cada ID individual.
Primero, se llama a collect_all_campaign_info() para almacenar información básica de la campaña en variables. Esto incluye datos como el nombre de la campaña, cuándo se ejecutó, su estado, el servidor SMTP utilizado, el nombre de la plantilla y más.
Segundo, se llama a process_timeline_events() para obtener el modelo de cronología de Gophish para el ID. Esto incluye los eventos registrados por Gophish. Esta función se ejecuta en segundo lugar porque completa algunas listas que son revisadas por process_results().
Tercero, se llama a process_results() para obtener el modelo de resultados de Gophish para el ID. Esto proporciona datos como el número de objetivos en la campaña.
Goreport usa estos pasos para configurar algunas listas y determinar los resultados básicos de la campaña, por ejemplo, quién recibió correctamente un correo electrónico, qué destinatarios hicieron clic en un enlace y qué destinatarios proporcionaron datos.
Con esta base, Goreport puede organizar los datos de varias formas para un informe. En cualquier momento, se pueden consultar las listas para verificar si una dirección de correo electrónico determinada en el modelo de resultados aparece en la lista targets_clicked para confirmar si ese destinatario hizo clic en un enlace. Eso puede luego iniciar una revisión del modelo de cronología para recopilar detalles. Gophish guarda los detalles como la dirección IP y el agente de usuario en el modelo de cronología y la información básica en el modelo de resultados.