
Um script Python para coletar dados de campanha do Gophish e gerar um relatório
Este script aceita o(s) ID(s) da sua campanha Gophish como parâmetro e então coleta os resultados da campanha para apresentar as estatísticas e realizar a análise de user-agent e consultas de geolocalização para endereços IP. O Goreport gera listas de endereços IP, sistemas operacionais, tipos e versões de navegadores, e locais com contagens do número de vezes que cada um foi visto durante a campanha.
Uma nota sobre estatísticas: O Goreport reportará o número total de eventos e o número de destinatários de e-mail que participaram de cada evento. Em outras palavras, o Goreport mostrará quantas vezes o Gophish registrou um evento de "Link Clicado" e quantos destinatários clicaram em um link. Esses são números muito diferentes. Uma campanha enviada para 10 pessoas poderia ter 9 eventos de Link Clicado quando apenas 3 destinatários clicaram em um link. Saber que os destinatários clicaram em um link ou enviaram dados mais de uma vez é uma informação valiosa, mas certifique-se de manter os números corretos.
Este script requer um servidor Gophish, uma campanha ativa ou concluída e a chave de API para sua aplicação Gophish. Obtenha esta chave clicando na aba Configurações. A chave de API será encontrada na primeira página. Cada conta de usuário do Gophish tem sua própria chave de API que atua como método de autenticação para aquele usuário na API do Gophish. Se você usa várias contas com o Gophish, certifique-se de pegar a chave de API do usuário correto.
Estas bibliotecas Python também são necessárias:
Você precisa fazer algumas coisas para começar:
pip install -r requirements.txt.Este exemplo assumirá que o Gophish está em outro servidor e que HTTPS está sendo usado. Para acessar o endpoint da API, você precisará usar o encaminhamento de porta SSH com a porta 3333 (ou qualquer outra porta local que desejar usar):
[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
Isso buscaria os resultados da campanha 26 de https://localhost:3333/api/campaigns/26/?api_key=<Your_API_Key> e geraria os resultados em um arquivo xlsx.
Vários IDs podem ser fornecidos de uma só vez para múltiplos relatórios. Os IDs podem ser fornecidos usando uma lista separada por vírgulas, um intervalo, ou ambos.
Exemplo: python3 Goreport.py --id 26,29-33,54 --format csv
Se você usa várias contas de usuário ou servidores Gophish, então terá várias chaves de API. Para facilitar a alternância entre chaves, a opção --config do Goreport permite substituir o arquivo de configuração padrão, gophish.config, por um arquivo de configuração que você nomear. Se este argumento for fornecido com um arquivo de configuração válido e legível, o Goreport o usará em vez de gophish.config para configurar as conexões da API.
Você pode usar esta opção se tiver, por exemplo, três servidores de phishing executando Gophish. Você poderia configurar três arquivos de configuração, cada um com uma chave de API Gophish diferente, e então usá-los conforme necessário.
Exemplo: python3 Goreport.py --id 26,29-33,54 --format csv --config phish_server_2.config
Se você executou várias campanhas usando as mesmas configurações para diferentes grupos-alvo, pode querer executar o Goreport contra essas campanhas de uma só vez e depois combinar os resultados em um único relatório. Isso pode ser feito adicionando a flag --combine do Goreport.
Exemplo: python3 Goreport.py --id 26,29-33,54 --format excel --combine
Este comando coletaria os resultados das campanhas 26, 29, 30, 31, 32, 33 e 54. Normalmente, o Goreport geraria sete arquivos xlsx, mas a adição de --combine instrui o Goreport a combinar os resultados e gerar apenas um relatório como se fossem todos uma grande campanha.
O Goreport pode gerar uma planilha Excel (xlsx) ou um documento Word (docx). Há também uma opção de relatório "rápido". Basta selecionar o formato desejado usando o argumento de linha de comando --format, conforme mostrado acima na seção Exemplo de Uso. Não há muito o que dizer sobre o formato csv.
O documento Word é construído a partir de um modelo, template.docx. Coloque seu arquivo de modelo, chamado template.docx, no diretório do Goreport junto com o script principal. Seu modelo deve incluir um estilo de tabela que você deseja usar e estilos de cabeçalho para Cabeçalho 1 e Cabeçalho 1. Nomeie seu estilo de tabela preferido como "Goreport" e configure seus estilos de Cabeçalho 1 e 2.
Sinta-se à vontade para criar um estilo personalizado ou usar um estilo existente. A única coisa que importa é que um arquivo template.docx exista e que ele tenha um estilo de tabela "Goreport".
Para renomear um estilo, clique com o botão direito no estilo, selecione Modificar Estilo de Tabela e defina um novo nome.
A opção Excel gera uma pasta de trabalho Excel bem formatada com várias planilhas para as diferentes coleções de resultados e estatísticas. Esta é uma boa opção se você quiser classificar ou filtrar facilmente as tabelas de resultados.
Finalmente, há uma opção "rápida". Isso não gera um relatório em documento. Em vez de um relatório, ele exibe informações básicas sobre a campanha no seu terminal. Isso é útil para verificar rapidamente o progresso da campanha ou consultar os resultados após a conclusão da campanha.
Se você quiser definir o status de uma campanha como "Concluída" ao executar seu relatório, o Goreport pode ajudá-lo a fazer isso automaticamente com a flag --complete. Se você fornecer esta flag, o Goreport usará a API para marcar cada ID de campanha como "Concluída" para encerrar a campanha e atualizar o status no Gophish.
O Gophish realiza suas próprias consultas de geolocalização com endereços IP e retorna latitude e longitude. Isso funciona razoavelmente bem, mas pode falhar e retornar coordenadas de 0,0 ou pode retornar informações antigas.
O Goreport tem duas opções que podem ser usadas para melhorar os resultados de localização. A primeira, e recomendada, é a API do ipinfo.io. O acesso à API é gratuito desde que você faça menos de 1.000 consultas por período de 24 horas. Isso não deve ser muito difícil para uma campanha de phishing.
Se uma chave de API do ipinfo.io for adicionada ao arquivo de configuração, o Goreport usará automaticamente o ipinfo.io para coletar informações de geolocalização atuais para cada endereço IP único.
A segunda opção é a API do Google Maps. O Goreport v1.0 usava a API Maps quando era gratuita. O Google agora cobra $0.005/requisição pela API Geolocate (como é agora chamada). Se você preferir não usar o ipinfo.io, ative a API Maps Geolocate em uma conta do Google e adicione a chave da API ao arquivo de configuração do Goreport. Em seguida, adicione a flag --google ao seu comando Goreport sempre que quiser que o Goreport use a API para consultar as coordenadas do Gophish e obter um endereço formatado.
Se você gostaria de revisar o código, aqui está um esboço básico do processo:
O Goreport.py usa Python 3 e a biblioteca Command Line Interface Creation Kit (CLICK). Quando o script é executado, um novo objeto Goreport é criado. A função __init__ da classe Goreport cria uma conexão com seu servidor Gophish usando a chave de API fornecida para autenticação. Em seguida, a função run() é chamada.
Run() usa as opções de linha de comando para iniciar a geração de relatórios. Um loop For é usado para percorrer todos os IDs de campanha fornecidos com --id. O servidor Gophish é contatado para obter detalhes da campanha para cada ID individual.
Primeiro, collect_all_campaign_info() é chamado para armazenar informações básicas da campanha em variáveis. Isso inclui dados como o nome da campanha, quando foi executada, seu status, o servidor SMTP usado, o nome do modelo e muito mais.
Segundo, process_timeline_events() é chamado para obter o modelo de timeline do Gophish para o ID. Isso inclui os eventos registrados pelo Gophish. Esta função é executada em segundo lugar porque preenche algumas listas que são revisadas por process_results().
Terceiro, process_results() é chamado para obter o modelo de resultados do Gophish para o ID. Isso fornece dados como o número de alvos na campanha.
O Goreport usa essas etapas para configurar algumas listas a fim de determinar os resultados básicos da campanha, por exemplo, quem recebeu com sucesso um e-mail, quais destinatários clicaram em um link e quais destinatários forneceram dados.
Com essa base, o Goreport pode organizar os dados de várias maneiras para um relatório. A qualquer momento, as listas podem ser consultadas para verificar se um determinado endereço de e-mail no modelo de resultados aparece na lista targets_clicked para confirmar se aquele destinatário clicou em um link. Isso pode então iniciar uma revisão do modelo de timeline para coletar detalhes. O Gophish mantém os detalhes como endereço IP e user-agent no modelo de timeline e as informações básicas no modelo de resultados.