JustCyber

CyberIntel

Você precisa saber o que está exposto publicamente sobre um alvo antes de decidir alguma coisa.

CyberIntel abre uma investigação sobre um alvo (domínio, IP, e-mail, empresa, pessoa ou CNPJ) e devolve um dossiê. O dossiê tem duas partes separadas de propósito: a EVIDÊNCIA crua que três coletores públicos trouxeram, e a SÍNTESE que o modelo escreveu em cima dela. Quem lê consegue conferir a segunda contra a primeira.

Os coletores são passivos e não-intrusivos: consulta DNS pública (A, AAAA, MX, NS, CAA, TXT; PTR quando o alvo é IP), subdomínios por Certificate Transparency no crt.sh, e um único GET em `/` para ler cabeçalhos de segurança e o certificado TLS. Nada de port-scan, fuzzing ou sondagem de caminhos. O piso ético é mais alto que o do Scan de propósito: aqui não há gate de propriedade, o alvo pode não ser do cliente.

Antes de qualquer pacote HTTP, `resolve_public_ips` recusa IP privado, loopback ou de metadata, e a conexão fica pinada ao IP validado contra rebind. Os coletores são resilientes: um que falha vira uma entrada em `errors` e a investigação continua com evidência parcial. O que os coletores trouxeram entra no prompt embrulhado como dado não-confiável — um registro TXT com tentativa de injeção não vira instrução. A cobrança é hold-then-capture: falha da coleta ou da síntese libera a reserva e marca a investigação como `failed`. Quando quem falha é a síntese, a evidência já coletada fica preservada no dossiê; quando quem falha é a própria orquestração da coleta, a investigação fecha marcada como falha e sem evidência. Observação de manutenção: a docstring de `app/cyberintel/__init__.py` ainda descreve o módulo como STUB sem coletores reais — o texto ficou para trás do código.

O que faz hoje

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.

  • Investigação por alvo tipado

    POST /cyberintel/investigations com `target` e `target_type` fechado em empresa, pessoa, dominio, ip, email ou cnpj. Idempotency-Key obrigatória e rate-limit de 4 por minuto por IP e por tenant.

  • Coletor DNS próprio

    Resolvedor UDP/53 em stdlib, com correlação de txid e leitura de nomes comprimidos, teto de 15 registros por tipo. Cada tipo é isolado: falha em MX não zera A.

  • Subdomínios por Certificate Transparency

    Consulta ao crt.sh com host fixo (o alvo entra só na query string, sem risco de SSRF), teto de 5 MB de resposta e de 50 subdomínios devolvidos, mais a contagem total.

  • Fingerprint HTTP/TLS passivo

    Um GET em `/`, sem seguir redirect para rede interna: servidor, `x-powered-by`, cabeçalhos de segurança presentes e ausentes, emissor, sujeito, protocolo, validade e dias restantes do certificado, com marca de expirado.

  • Síntese ancorada na evidência

    Dossiê em JSON: resumo executivo, tipo de entidade, superfícies observadas, indicadores de risco, recomendações defensivas e confiança. O prompt proíbe inventar CVE, vazamento, credencial ou estatística.

  • Estado honesto quando não há base

    Alvo sem host (empresa, pessoa ou CNPJ em texto) não dispara coleta de rede: o dossiê volta com `collectors.ran` vazio e sem bloco `evidence` — é só a síntese do modelo, e isso é visível na leitura. (O carimbo `lite` aparece em todo dossiê e não serve para distinguir os dois casos.) Egress barrado pelo guardrail devolve dossiê vazio com `blocked: true`, não texto inventado.

  • Cobrança que não prende crédito

    hold na criação, capture no sucesso, release em falha de coleta ou de síntese. O custo real do turno de IA fica em `ai_cost_usd_micros` na investigação.

  • Leitura e trilha

    Lista paginada por cursor com filtro de status, detalhe com o dossiê completo, e `audit_log` na criação com o tipo de alvo e o id do hold.

O que fica com você

Entregáveis

  • Dossiê persistido em JSONB por investigação, com `evidence` por coletor, `collectors.ran`, `collectors.errors` e a síntese.
  • Tela /app/cyberintel: abertura do alvo, acompanhamento e leitura do dossiê com DNS, subdomínios e cabeçalhos.
  • Custo de IA por investigação e id do hold de crédito, para conciliação.

O que este módulo não faz

Não são "8 a 9 agentes paralelos": é uma chamada síncrona ao modelo sobre a evidência de três coletores. Não consulta fonte paga ou licenciada, rede social, registro societário nem base de CNPJ — alvo do tipo empresa, pessoa ou cnpj que não pareça um host não gera nenhuma coleta de rede, só texto do modelo marcado como `lite`. Não faz port-scan, fuzzing nem sondagem de caminhos (/.env, /.git). O crt.sh é a única fonte de subdomínio; se cair, a investigação segue com evidência parcial. PTR só para IPv4. Preço fixo de 1.0 crédito por investigação, sem derivar do custo real de IA. A investigação roda de forma síncrona no request — não há fila nem retomada.

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

  • app/scan/passive (guard SSRF e GET pinado)
  • app/scan/service (resolvedor TXT, apex_domain, host_of)
  • app/ai (AiGateway, sanitize, registry aditivo)
  • app/billing (hold/capture/release)
  • tela /app/cyberintel no app web

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.

  • cyberintel:investigation:read
  • cyberintel:investigation:write
CyberIntel

Quer ver funcionando?

Demonstração com dado do seu ambiente, não com base de exemplo. É a única forma de saber se serve.