PhishGuard AI
Chegou um e-mail estranho e alguém precisa dizer, com fundamento, se é golpe — antes que o usuário clique.
O PhishGuard recebe um e-mail, URL ou mensagem suspeita e devolve um veredito com nota de risco, os indicadores extraídos, a explicação em português e a ação recomendada. A análise é passiva por decisão de projeto: o sistema não clica no link, não faz GET na URL e não baixa nada. Ele lê o conteúdo que você enviou e trabalha em cima dele.
A primeira camada é determinística e sempre roda. O extrator refanga os disfarces comuns de phishing (hxxp://, [.], [at], [dot]) e tira URLs, domínios, IPs, e-mails e hashes de arquivo, com teto de 40 por tipo. Os domínios encontrados são cruzados contra as marcas que o tenant monitora, usando o gerador determinístico de sósias já existente na plataforma (erro de teclado, homóglifo, troca de TLD) — é assim que o typosquat da sua marca aparece. Se for útil resolver o nome do domínio, a resolução passa antes pelo portão de SSRF: endereço privado, loopback, link-local ou metadata é recusado, e mesmo resolvendo nenhum pacote HTTP sai para o alvo.
A segunda camada é a IA, e ela é fail-closed. O corpo de um e-mail de phishing é conteúdo controlado pelo atacante e pode carregar credencial e dado pessoal, então a task é classificada como SENSITIVE: o gateway bloqueia o envio ao provedor por padrão e só libera se o tenant tiver aprovado explicitamente em tenant_settings. Sem aprovação, o veredito sai da heurística e a justificativa diz, com todas as letras, que o conteúdo não foi enviado ao modelo. Todo o conteúdo suspeito entra no prompt embrulhado como dado não confiável, nunca como instrução. E o corpo cru não fica no banco: só um trecho redigido de até mil caracteres.
Capacidades em operação
Cada item corresponde a funcionalidade que existe no código e é alcançável por um usuário com o escopo correto.
-
Análise síncrona com cobrança justa
POST /phishguard/reports roda a análise na hora, com Idempotency-Key obrigatório e rate-limit por IP e por tenant. O crédito é reservado antes, capturado só no sucesso e devolvido em qualquer falha — você nunca paga por análise que não produziu veredito. Saldo insuficiente responde 402.
-
Extração determinística de indicadores
URL, domínio, IP, e-mail e hash de arquivo, com refang de hxxp://, [.], (.), [at] e [dot]. Deduplicado e limitado a 40 por tipo. Roda sem rede e sem IA.
-
Detecção de typosquat da sua marca
Os domínios do e-mail são cruzados contra o conjunto de sósias de cada marca monitorada pelo tenant (erro de teclado, homóglifo, troca de TLD). O acerto entra como indicador de origem 'typosquat' e leva o veredito heurístico direto para malicioso.
-
Resolução de domínio com portão de SSRF
Até 5 domínios são resolvidos passando pelo gate fail-closed da plataforma: RFC1918, loopback, link-local e 169.254.169.254 são recusados. O domínio bloqueado é registrado como sinal e não contribui IP.
-
Veredito e explicação por IA
Veredito e explicação por IA — Veredito (benigno/suspeito/malicioso/precisa_info), nota de risco de 0 a 100, justificativa em português e ação recomendada. O veredito do modelo tem precedência quando existe; caso contrário vale a heurística. (O modelo também produz uma lista de sinais observados, mas ela é descartada no serviço: não é gravada em phishguard_reports nem devolvida pela API.)
-
Egress fail-closed por tenant
A task é SENSITIVE. O conteúdo só chega ao provedor se tenant_settings.settings.ai_egress estiver aprovado. Linha ausente, valor não reconhecido ou qualquer falha de leitura negam o envio.
-
Anti prompt-injection
Assunto, corpo, URL, indicadores e typosquats entram no prompt embrulhados em <untrusted_context>, e o blob montado passa por uma neutralização extra caso o conteúdo tente forjar a própria cerca.
-
Corpo redigido em repouso
O que persiste em phishguard_reports é um recorte redigido de até 1000 caracteres, produzido pelo redator de segredos da plataforma. O corpo cru do e-mail não fica gravado.
-
Override do analista
PATCH no report corrige o veredito e registra a anotação. Não chama IA e não movimenta crédito.
-
Marcas monitoradas
PUT e GET de brand-watch substituem e leem a lista de marcas do tenant que alimentam a detecção de typosquat.
Entregáveis
- Tela de análise em /app/phishguard: envio do suspeito, veredito com nota de risco, justificativa em português e ação recomendada
- Lista de indicadores materializados por report (domínio, IP, URL, hash, e-mail) com a origem de cada um
- Gestão de marcas monitoradas em /app/phishguard/marca
- Histórico de reports com veredito, status e override do analista
- Trilha de auditoria em audit_log e movimentação de crédito rastreável (hold, capture, release)
O que este módulo não faz
Não há ingestão por caixa de correio. Não existe conector IMAP, Exchange ou Microsoft Graph, nem endpoint de ingestão automática: todo report entra pelo POST /phishguard/reports autenticado por JWT com o escopo phishguard:report:write — na prática, alguém cola o suspeito ou um sistema seu o envia. O tipo 'qr' é aceito no vocabulário, mas não há decodificação de imagem nem de QR code: o que é analisado é o texto de assunto, corpo e URL que você enviar. Não há consulta a feeds de reputação — o vocabulário prevê a origem 'feed' para indicadores, mas nenhum código produz indicador com essa origem. Não há anexo: o schema não recebe arquivo, e hashes só são reconhecidos quando aparecem escritos no texto. Não há ação de resposta: o produto não remove a mensagem das caixas afetadas, não bloqueia domínio na borda e não avisa o usuário final — a saída é veredito mais recomendação em texto. O preço é fixo em 1 crédito por análise, definido no código (PHISHGUARD_CREDIT_PRICE = 1.0), com um TODO explícito para derivá-lo do custo real; a chave de configuração JC_PHISHGUARD_CREDIT_PRICE existe mas não é lida por esse caminho. A flag JC_PHISHGUARD_ENABLED está declarada na configuração mas nenhum código do módulo a lê: o controle de acesso real é o escopo RBAC, não uma chave de desligamento.
Declaramos o limite porque software de segurança que promete tudo não é auditável. Se o que falta aqui é o que você precisa, o serviço consultivo cobre — ou dizemos que não cobre.
Conecta com
- Gateway de IA da plataforma (task phishguard_analyze, classe SENSITIVE)
- ShadowSignal (reuso de brand_variants para o conjunto de sósias de marca)
- Scan passivo da plataforma (gate de SSRF resolve_public_ips e redator de segredos)
- Carteira de créditos da plataforma (hold, capture, release)
- RBAC e RLS FORCE, audit_log e Idempotency-Key da fundação
Controle de acesso
O acesso é concedido por escopo, não por perfil genérico. Quem só precisa ler não recebe permissão de escrita, e a barreira é o banco de dados, não a interface.
- phishguard:report:read
- phishguard:report:write
- phishguard:brand:read
- phishguard:brand:write
Quer ver funcionando?
Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.