
Framework de simulação de phishing e conscientização para campanhas baseadas em nós, captura de credenciais, entrega via SMTP, CAPTCHA e replay opcional de credenciais no navegador.
Framework de simulação de phishing e conscientização de segurança com fluxos de trabalho configuráveis, gerenciamento de campanhas e proxy de credenciais opcional.
cd../deploy.sh - isso configurará os pré-requisitos para você, assumindo que você está no Ubuntu../start.sh --preload-ml. Isso iniciará os servidores e pré-carregará os modelos de ML que usamos.Você obtém a interface de administração em http://localhost:8000 e o servidor de phishing em http://localhost:1234. Login padrão: admin / admin123. Altere a senha após o primeiro login.
Encaminhe a porta 8000 para sua máquina local via ssh para acessar o painel de administração. NÃO exponha o painel de administração nem o servidor flask (porta 1234) diretamente à internet.
O deploy.sh instalará um servidor caddy no mesmo host. Tudo é construído assumindo que você usará o caddy como proxy reverso. Você não precisa, mas aqui há dragões.
Flags opcionais para start.sh:
--with-caddy — Inicia o Caddy via Docker (apenas para testes locais).--preload-ml — Pré-baixar o modelo de detecção de phishing (~1.3GB); evita o atraso no primeiro uso ao usar o plugin Phishing Detector.--reset-db — Redefine o banco de dados e reinicializa.--admin-only — Inicia apenas o servidor de administração (porta 8000).--phishing-only — Inicia apenas o servidor de phishing (porta 1234).--skip-init — Pula a inicialização do banco de dados.--skip-setup — Pula a configuração de venv/dependências; apenas carrega o .env e inicia os servidores.Sem o start.sh, após instalar as dependências e inicializar o banco de dados, você pode executar ambos os servidores com: uv run python -m cli start.
Python: Consulte requirements.txt. A stack principal inclui Flask, SQLAlchemy, Jinja2, Pydantic, Flask-Login, python-jose, passlib, cryptography e Flask-WTF. O plugin Phishing Detector usa transformers e torch. O proxy de credenciais usa Playwright; integrações opcionais usam OpenAI/Anthropic e boto3 (AWS Connect).
Desenvolvimento: requirements-dev.txt adiciona pytest, pytest-cov e ferramentas de teste relacionadas. Instale com uv pip install -r requirements-dev.txt para executar testes e cobertura.
Sistema (produção): O script de deploy tem como alvo Ubuntu/Debian. Ele instala uv, Caddy (proxy reverso) e pacotes de sistema como libmagic1. Para o proxy de credenciais, o start.sh executa uv run playwright install chromium para instalar o Chromium.
Preparação para produção no Ubuntu. Idempotente. Ele:
requirements.txt..env a partir do .env.example se estiver ausente e gera SECRET_KEY e JWT_SECRET_KEY se não estiverem definidos.storage/caddy/data, storage/caddy/config, storage/uploads, storage/templates, storage/assets, instance).--init-db (executa uv run python -m cli init --force).Ele não inicia a aplicação. Para produção: inicie o Caddy (proxy reverso) e depois inicie a aplicação com ./start.sh ou um gerenciador de processos para que todo o tráfego chegue à aplicação por meio do proxy.
Inicialização de desenvolvimento e local. Ele:
.env e garante SECRET_KEY e JWT_SECRET_KEY (gera-os se valores padrão estiverem presentes).requirements.txt.uv run playwright install chromium para o proxy de credenciais.--preload-ml (~1.3GB).--skip-init). Use --reset-db para excluir e reinicializar.--with-caddy (apenas para testes locais).uv run python -m cli start; use --admin-only ou --phishing-only para executar apenas um.Em produção, a aplicação deve ser executada atrás de um proxy reverso. Não exponha os servidores de desenvolvimento Flask diretamente à internet.
O proxy reverso é responsável pela terminação TLS, cabeçalhos Host corretos, roteamento de caminho e domínio, e pela separação do tráfego de administração do tráfego de campanha. A aplicação escuta em localhost ou em uma porta interna; o proxy lida com HTTPS público e encaminha para o servidor de administração (ex.: porta 8000) e para o servidor de phishing (ex.: porta 1234) de acordo com sua configuração.
Recomendado: Use o Caddy como proxy reverso. O deploy.sh instala o Caddy via APT. O projeto inclui exemplos de Caddyfile (ex.: Caddyfile.minimal). Após executar o deploy.sh, inicie o Caddy (ex.: caddy run --config /path/to/Caddyfile.minimal) e depois inicie a aplicação com ./start.sh ou um gerenciador de processos. Qualquer proxy reverso equivalente (nginx, Traefik, etc.) é aceitável, desde que a aplicação não seja exposta diretamente.
Reel é um framework de simulação de phishing e conscientização de segurança. Operadores usam a interface de administração para gerenciar campanhas, fluxos de trabalho, templates e alvos. O servidor de phishing serve páginas de destino de campanhas e executa workflows—grafos de plugins baseados em nós—em cada solicitação.
Há dois pontos de entrada da aplicação em app.py: create_app() para o servidor de phishing e create_admin_app() para a interface de administração. As campanhas podem ser inbound (um visitante segue um link; os fluxos de trabalho GET e POST lidam com visualizações de página e envios de formulário) ou outbound (o sistema envia e-mails ou chamadas por meio de fluxos de trabalho de envio). O Caddy pode ser usado para roteamento de campanhas baseado em domínio. O proxy de credenciais usa Playwright para automação de navegador e reproduzir credenciais capturadas em sites-alvo.
Um usuário visita uma URL de campanha (ex.: /<campaign_uid>). O servidor de phishing roteia pelo UID da campanha. Para solicitações GET, ele executa o workflow GET da campanha (ex.: renderizar página de destino, CAPTCHA); para solicitações POST, executa o workflow POST (ex.: validar entrada, capturar credenciais, redirecionar). Fluxos de trabalho são do tipo campaign e declaram suporte a métodos HTTP (GET, POST ou BOTH). O contexto de execução inclui campaign, request, session e variables. A resposta é obtida de chaves de contexto como _response_html, _response_redirect ou _response_json. Fluxos de trabalho inbound são usados para páginas de destino, CAPTCHA, captura de credenciais, redirecionamentos e registro de logs.
Um operador executa um fluxo de trabalho de envio a partir da interface de administração, vinculado a uma campanha (o “Workflow” / fluxo de trabalho de envio da campanha). O executor de envio executa um único fluxo de trabalho do tipo sending: ele seleciona alvos (ex.: de CSV ou usuários rastreados), opcionalmente valida ou pré-renderiza o conteúdo e, em seguida, itera sobre os alvos—renderizando o e-mail, aplicando limites de taxa e enviando via um plugin (ex.: SMTP). Não há GET/POST de visitante; o fluxo de trabalho gera conteúdo e o envia para uma lista de alvos.
Resumo:
Ao criar fluxos de trabalho, use a sintaxe {{variable}} para interpolação. Caminhos aninhados usam notação por pontos: {{nested.key}}.
Exemplo de CSV: email,first_name,last_name,company,landing_page → use {{target.email}}, {{target.first_name}}, {{target.company}}, {{target.custom_data.landing_page}}.
URL Obfuscator: Use url ou target.landing_page como fonte, ou interpole: http://{{target.ip}}/login.
| Variable | Description |
|---|---|
{{template_html}} | HTML renderizado |
{{campaign.template_html}} | HTML do template da campanha |
Phishing Detector: Defina html_content como {{template_html}}, {{campaign.template_html}} ou {{email_html}}.
Target Selector (CSV) → Loop (array_source: targets, item_key: target) → Render Template → SMTP Sender
Tags típicas no template: {{target.email}}, {{target.first_name}}, {{target.last_name}}, {{target.custom_data.X}} para qualquer coluna extra do CSV.
Os fluxos de trabalho são construídos a partir de nós; cada nó é um plugin com configuração. Os seguintes plugins integrados estão disponíveis.
make test-fast ou ./run_tests.shmake test-coverage ou ./run_tests.sh --coveragemake lintmake format-checkConsulte o Makefile para alvos adicionais (divisões de testes unitários/integração/funcionais, init/reset do banco de dados, executar apenas o servidor de administração ou de phishing).
| Variable | Description |
|---|
{{target}} | Objeto completo do alvo para a iteração atual do loop |
{{target.email}} | E-mail do alvo |
{{target.first_name}} | Primeiro nome |
{{target.last_name}} | Sobrenome |
{{target.custom_data}} | Dicionário de outras colunas do CSV |
{{target.custom_data.column_name}} | Qualquer coluna extra do CSV (ex.: {{target.custom_data.company}}, {{target.custom_data.landing_page}}) |
{{target.name}} | Abreviação de first_name ou target.first_name |
{{target_name}} | Equivalente a target.name (alias) |
{{target_email}} | Equivalente a target.email (alias) |
{{_loop_index}} | Índice atual do loop (baseado em 0) |
| Variable | Description |
|---|
{{campaign.id}} | ID da campanha |
{{campaign.uid}} | UID da campanha |
{{campaign.name}} | Nome da campanha |
{{campaign.template_html}} | HTML do template da campanha |
{{url}} | URL de destino da campanha |
{{campaign_id}} | ID da campanha |
{{variables}} | Dicionário de variáveis da campanha |
| Variable | Description |
|---|
{{url}} | URL de destino da campanha (definida pela configuração ou padrão) |
{{target.landing_page}} | Se landing_page existe no CSV |
{{target.custom_data.landing_page}} | O mesmo que acima quando landing_page está em custom_data |
{{target.ip}} | Se ip está no CSV ou em dados personalizados |
{{email_html}} | HTML do e-mail renderizado (após Render Template) |
{{body_html}} | HTML do corpo do e-mail |
| Variable | Description |
|---|
{{phishing_detection.is_phishing}} | True/False do BERT |
{{phishing_detection.confidence}} | Pontuação de confiança do BERT |
{{captured_credentials.username}} | Apenas inbound |
{{captured_credentials.password}} | Apenas inbound |
{{_email_sent}} | Indica sucesso no envio via SMTP |
| Plugin | Purpose |
|---|
| CAPTCHA | Cloudflare Turnstile: validar tokens e/ou renderizar widget; proteger formulários contra bots. |
| Capture Credentials | Capturar credenciais de envios de formulário; armazenar no contexto e no banco de dados para plugins posteriores. |
| Conditional Logic | Ramificar o fluxo de trabalho em True/False usando contexto (igualdade, contenção, numérico, regex). |
| Data Transform | Definir, remover, copiar, renomear, mesclar ou filtrar dados de contexto para plugins posteriores. |
| Delay | Atraso fixo ou aleatório, ou adiar até um datetime; limitação de taxa e temporização. |
| Email Template Validator | Validar templates (Jinja2, qualidade, spam); IA opcional; ramificar com base no resultado. |
| Generate Device Code (GraphSpy) | Códigos de dispositivo do Azure AD via API GraphSpy; usar com AWS Connect para entrega por voz. |
| AWS Connect Dialer | Voz outbound via AWS Connect; SSML; integra-se com GraphSpy para códigos de dispositivo. |
| Log Event | Registrar eventos personalizados no banco de dados; dados de solicitação/sessão; auditoria e análises. |
| Phishing Detector (BERT) | Detecção de phishing baseada em ML em HTML; QA e análise de conteúdo. |
| Pushover | Notificações push (iOS, Android, desktop) via API Pushover. |
| Queue Credential Proxy | Após Capture Credentials, enfileirar um trabalho de automação de navegador para reproduzir em sites-alvo. |
| Redirect | Redirecionamento HTTP para uma URL com código de status configurável; interpolação de variáveis. |
| Render Template | Renderizar HTML a partir de template de campanha, personalizado ou da biblioteca, com Jinja2 e variáveis. |
| Send Slack Message | Enviar uma mensagem para o Slack via webhook ou bot; interpolação de variáveis. |
| SMTP Email Sender | Enviar e-mail via SMTP (TLS, autenticação, HTML/texto simples, variáveis); usado em fluxos de trabalho de envio. |
| Target Selector | Selecionar alvos de CSV, lista manual ou usuários rastreados; filtrar por domínio/contagem; alimentar fluxos de trabalho de envio. |
| URL Obfuscator | Ofuscar IPs/URLs (ex.: DWORD, hex, mapeado em IPv6); para testes e pesquisa. |
| User Agent Check | Permitir ou bloquear por regex de user-agent; bloquear, redirecionar ou ramificar com base no resultado. |
| Validate Input | Validar campos de formulário (obrigatório, tipo, comprimento, regex); bloquear, redirecionar ou continuar. |