DEV Community

Cover image for O Que é Maigret: Scanner OSINT Que Não Quebra
Lucas
Lucas

Posted on • Originally published at apidog.com

O Que é Maigret: Scanner OSINT Que Não Quebra

A maioria das ferramentas OSINT envelhece rápido: sites mudam endpoints, captchas evoluem e regras de detecção param de funcionar. O Maigret é uma exceção interessante para engenheiros porque continua útil há anos, suporta mais de 3.000 sites e mostra como construir um scanner baseado em assinaturas que resiste melhor a mudanças externas.

Experimente o Apidog hoje

Este guia é técnico e focado em implementação. Vamos ver o que o Maigret faz, onde ele pode ser usado de forma legítima, quais decisões de arquitetura o tornam escalável e como os mesmos padrões — assinaturas versionadas, detecção de desvio e verificações multi-sinal — se aplicam a testes de API com o Apidog.

Se você ainda não leu, o post Testes de API sem Postman em 2026 aborda ideias semelhantes de correspondência de padrões e detecção de desvios em um contexto mais direto para APIs.

TL;DR

  • Maigret coleta informações públicas associadas a um nome de usuário consultando mais de 3.000 sites.
  • A ferramenta usa um banco de dados versionado de assinaturas de sites para detectar contas existentes, contas ausentes e páginas ambíguas.
  • Casos legítimos incluem auditorias próprias, proteção de marca, jornalismo investigativo, busca por pessoas desaparecidas com autorização e red-team com escopo formal.
  • Usar Maigret contra indivíduos sem consentimento pode cruzar limites legais e éticos.
  • Os padrões de engenharia do Maigret também servem para testes de API: contratos versionados, asserções multi-sinal, fixtures conhecidos e detecção automática de desvio.
  • O Apidog permite aplicar esses padrões em coleções, contratos e suítes de teste de API.

O que Maigret é — e o que não é

Maigret é uma ferramenta Python, licenciada sob MIT e mantida por soxoj. A proposta do projeto é simples: receber um nome de usuário, consultar sites públicos e gerar um relatório com contas encontradas e informações públicas disponíveis.

Instalação básica:

pip install maigret
Enter fullscreen mode Exit fullscreen mode

Execução simples:

maigret username
Enter fullscreen mode Exit fullscreen mode

Execução verificando todos os sites disponíveis:

maigret username -a
Enter fullscreen mode Exit fullscreen mode

Maigret - pesquisa de nome de usuário em um navegador

Três pontos importantes:

  1. Maigret usa dados públicos.

    Ele não faz login, não usa credenciais vazadas e não exige chaves de API. Se um perfil está disponível para visitantes anônimos, a ferramenta tenta ler a página.

  2. Ele é usado em contextos legítimos.

    Jornalistas, equipes de fraude, proteção de marca, voluntários de busca e equipes autorizadas de red-team usam ferramentas OSINT para mapear exposição pública.

  3. Ele pode ser mal utilizado.

    Executar buscas sobre indivíduos privados sem consentimento pode violar leis de assédio, perseguição ou privacidade, dependendo da jurisdição.

O foco deste artigo é a engenharia por trás da ferramenta e os padrões transferíveis para testes de API, não o direcionamento de pessoas.

O banco de dados de assinaturas de sites

A principal decisão de arquitetura do Maigret é tratar cada site como uma assinatura declarativa.

Em vez de codificar manualmente lógica específica para milhares de sites, o projeto mantém um banco de dados JSON com regras como:

  • URL principal do site.
  • Template da URL de perfil.
  • Strings que indicam presença do usuário.
  • Strings que indicam ausência do usuário.
  • Regex para extração de dados.
  • Cabeçalhos personalizados.
  • Tags por categoria ou país.
  • Indicação de captcha, limite de taxa ou comportamento especial.

Na prática, cada entrada responde perguntas como:

  • Este nome de usuário existe neste site?
  • Como uma página válida se parece?
  • Como uma página de erro se parece?
  • Que dados públicos podem ser extraídos?
  • Existe algum comportamento específico, como rate limit ou captcha?

Esse padrão também é útil em testes de API.

Em vez de escrever verificações soltas em scripts, descreva cada endpoint como uma assinatura:

{
  "endpoint": "GET /users/{id}",
  "expectedStatus": 200,
  "requiredHeaders": {
    "content-type": "application/json"
  },
  "requiredBodyFields": [
    "id",
    "email",
    "createdAt"
  ],
  "forbiddenBodyFields": [
    "password",
    "passwordHash"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Esse tipo de estrutura torna o teste mais fácil de revisar, versionar e atualizar.

A mesma ideia aparece em fluxos de desenvolvimento de API contract-first e em testes de servidores MCP, como no manual de testes de servidor MCP.

Como Maigret detecta “encontrado” vs “não encontrado”

Um scanner ingênuo poderia fazer:

curl https://example.com/user/alice
Enter fullscreen mode Exit fullscreen mode

E decidir com base no status HTTP:

  • 200: usuário existe.
  • 404: usuário não existe.

Isso falha em muitos sites reais.

Muitos serviços retornam 200 OK mesmo quando o usuário não existe. Outros exibem uma página genérica, uma página inicial, uma tela de captcha ou uma mensagem de erro dentro do HTML.

Por isso, Maigret combina múltiplos sinais:

  • urlMain
  • Template de url
  • presenseStrs, ou strings esperadas quando o perfil existe
  • absenceStrs, ou strings esperadas quando o perfil não existe
  • Regex de extração
  • Cabeçalhos customizados
  • Tags e metadados

Um veredito confiável depende de mais de um sinal:

encontrado =
  todas as strings de presença existem
  e nenhuma string de ausência existe

não encontrado =
  strings de ausência existem
  ou strings de presença esperadas não aparecem

desconhecido =
  resposta ambígua, captcha, bloqueio ou mudança no site
Enter fullscreen mode Exit fullscreen mode

O mesmo vale para APIs.

Um teste fraco verifica apenas status:

pm.test("status is 200", function () {
  pm.response.to.have.status(200);
});
Enter fullscreen mode Exit fullscreen mode

Um teste melhor verifica contrato, conteúdo e ausência de campos sensíveis:

const json = pm.response.json();

pm.test("retorna usuário válido", function () {
  pm.response.to.have.status(200);
  pm.expect(json).to.have.property("id");
  pm.expect(json).to.have.property("email");
  pm.expect(json).to.have.property("createdAt");
});

pm.test("não expõe campos sensíveis", function () {
  pm.expect(json).to.not.have.property("password");
  pm.expect(json).to.not.have.property("passwordHash");
});
Enter fullscreen mode Exit fullscreen mode

No Apidog, essa abordagem pode ser modelada com asserções de status, headers, schema e corpo da resposta na mesma requisição.

Busca recursiva e extração de informações

Depois que o Maigret encontra uma conta, ele pode extrair identificadores públicos adicionais da página, como:

  • Outros nomes de usuário.
  • Nome exibido.
  • Links externos.
  • Endereços de e-mail públicos.
  • Números de telefone públicos, quando expostos.
  • Perfis relacionados.

Essas extrações também seguem assinaturas por site. Um perfil do GitHub expõe dados diferentes de um perfil do LinkedIn, Reddit ou fórum regional.

Depois disso, a ferramenta pode usar dados encontrados para novas buscas. Esse é o comportamento recursivo:

username inicial
  -> perfil encontrado
    -> outro identificador público
      -> nova busca
        -> novo perfil
Enter fullscreen mode Exit fullscreen mode

Em OSINT, isso transforma um resultado isolado em um grafo de presença pública.

Em testes de API, a mesma técnica ajuda a encontrar lacunas de cobertura.

Exemplo:

  1. Você testa GET /users/123.
  2. A resposta inclui um campo organizationId.
  3. Esse campo aponta para GET /organizations/{id}.
  4. A resposta da organização inclui billingAccountId.
  5. Você adiciona testes para o fluxo completo.

Ou seja: quando um endpoint retorna identificadores relacionados, use esses dados para expandir sua suíte.

Tratamento de captcha e limite de taxa

Maigret tenta lidar com bloqueios de forma conservadora. Ele pode detectar limites de taxa, captchas ou respostas incompatíveis com a assinatura esperada.

Estratégias mencionadas pelo projeto incluem:

  • Rotação de user agents.
  • Respeito a cabeçalhos de retry.
  • Uso de domínios móveis ou simplificados quando disponíveis.
  • Encaminhamento via Tor ou I2P quando o site permite.

Mas o ponto importante é: a ferramenta não tenta “derrotar” defesas agressivas.

Quando encontra captcha ou bloqueio, ela pode marcar o resultado como desconhecido ou exigir revisão manual.

Esse padrão também vale para clientes e testes de API.

Se sua suíte recebe 429 Too Many Requests, ela deve recuar:

if (response.status === 429) {
  const retryAfter = response.headers.get("retry-after");

  console.log(`Rate limit detectado. Tentar novamente após ${retryAfter}s.`);
}
Enter fullscreen mode Exit fullscreen mode

Em uma suíte robusta:

  • Não force chamadas em loop.
  • Respeite Retry-After.
  • Use backoff exponencial.
  • Separe testes funcionais de testes de carga.
  • Evite derrubar ambientes compartilhados.

O problema do desvio de assinatura

Um banco com mais de 3.000 assinaturas só é útil se permanecer atualizado.

Sites mudam:

  • URLs de perfil.
  • HTML.
  • Mensagens de erro.
  • Redirecionamentos.
  • Mecanismos anti-automação.
  • Domínios e marcas.

Quando uma assinatura fica obsoleta, dois problemas aparecem:

  • Falso negativo: a conta existe, mas a ferramenta não detecta.
  • Falso positivo: a ferramenta reporta uma conta que não existe.

Maigret reduz esse risco com:

  • Atualização automática do banco central no GitHub.
  • Pull requests da comunidade.
  • Flag --update para forçar atualização.
  • Testes de assinatura contra usuários conhecidos e existentes.

O último ponto é o mais importante para engenheiros.

Cada assinatura precisa de um caso conhecido que prove que ela ainda funciona. Em APIs, isso equivale a fixtures estáveis.

Exemplo de fixture:

{
  "request": {
    "method": "GET",
    "path": "/users/123"
  },
  "expected": {
    "status": 200,
    "body": {
      "id": 123,
      "role": "admin"
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

A execução recorrente compara a resposta atual com a resposta esperada. Se o formato mudar, a suíte acusa desvio antes que consumidores quebrem.

No Apidog, você pode aplicar esse padrão salvando respostas válidas por endpoint, executando coleções em sequência e verificando diferenças de contrato. O guia da API DeepSeek V4 mostra esse tipo de validação manual para um fornecedor específico.

O modo opcional de resumo com IA

A flag --ai permite transformar resultados brutos do Maigret em um resumo usando um endpoint LLM compatível com OpenAI.

A arquitetura é boa porque separa responsabilidades:

  • Regras determinísticas decidem se o usuário foi encontrado.
  • O LLM apenas resume os resultados.
  • A IA não é usada como fonte de verdade.

Esse padrão também faz sentido em observabilidade e testes de API.

Fluxo recomendado:

requisições de teste
  -> asserções determinísticas
    -> relatório estruturado
      -> resumo com LLM
        -> mensagem no Slack, issue ou comentário no PR
Enter fullscreen mode Exit fullscreen mode

Evite usar LLM para decidir se o contrato passou ou falhou. Use-o para explicar a falha de forma legível.

O post uso de computador vs. APIs estruturadas aprofunda por que a camada estruturada deve vir antes da camada generativa.

Casos de uso legítimos

Alguns cenários onde Maigret pode ser apropriado:

1. Recuperação de contas próprias

Você pode pesquisar nomes de usuário antigos que usou em fóruns, redes ou serviços legados.

Útil para:

  • Auditoria de privacidade.
  • Encerramento de contas antigas.
  • Redução de exposição pública.
  • Higiene de identidade digital.

2. Monitoramento de abuso de marca

Empresas podem buscar variações de seus nomes de marca ou produtos para detectar impersonificação.

Exemplos:

maigret minhaempresa
maigret minhaempresa-suporte
maigret produto-oficial
Enter fullscreen mode Exit fullscreen mode

3. Pessoas desaparecidas, com autorização

Equipes de busca, voluntários e organizações podem usar OSINT com autorização da família e coordenação com autoridades.

Aqui, processo importa tanto quanto ferramenta.

4. Red-team autorizado

Em pentests e exercícios de red-team, Maigret pode ajudar a mapear exposição pública da organização.

O escopo deve estar definido por contrato:

  • Quais domínios.
  • Quais marcas.
  • Quais funcionários ou contas autorizadas.
  • Quais limites técnicos.
  • Como reportar achados.

5. Jornalismo investigativo

Repórteres podem usar OSINT em investigações de fraude, crime organizado, corrupção ou má conduta de figuras públicas, normalmente com revisão editorial e jurídica.

O que não se encaixa aqui:

  • Pesquisar estranhos por curiosidade.
  • Vigiar ex-parceiros.
  • Criar bases de dados sobre pessoas sem consentimento.
  • Automatizar assédio ou doxxing.

Padrões do Maigret aplicáveis a testes de API

1. Use assinaturas em vez de verificações hardcoded

Descreva o comportamento esperado como dados.

Ruim:

if (response.status === 200 && response.body.includes("ok")) {
  pass();
}
Enter fullscreen mode Exit fullscreen mode

Melhor:

{
  "status": 200,
  "body": {
    "required": ["id", "email", "createdAt"],
    "forbidden": ["passwordHash"]
  },
  "headers": {
    "content-type": "application/json"
  }
}
Enter fullscreen mode Exit fullscreen mode

2. Combine múltiplos sinais

Não confie apenas em status HTTP.

Valide:

  • Status.
  • Headers.
  • Schema.
  • Campos obrigatórios.
  • Campos proibidos.
  • Tipos.
  • Regras de negócio.

3. Atualize contratos de forma controlada

Assim como Maigret atualiza assinaturas do GitHub, sua equipe deve manter contratos de API sincronizados.

Com o Apidog, use projetos compartilhados e sincronização para manter documentação, mocks e testes alinhados. O fluxo também é discutido em Testes de API sem Postman.

Apidog - Suíte de testes de API

4. Detecte desvio automaticamente

Execute testes recorrentes contra fixtures conhecidas.

Exemplo de agenda:

name: api-contract-regression

on:
  schedule:
    - cron: "0 * * * *"
  workflow_dispatch:
Enter fullscreen mode Exit fullscreen mode

O objetivo é detectar mudanças antes que consumidores percebam.

5. Use LLM como pós-processador

Deixe asserções determinísticas decidirem:

  • Passou.
  • Falhou.
  • Está ambíguo.
  • Precisa de investigação.

Depois, use IA para resumir:

A suíte falhou em 3 endpoints.
Dois falharam por mudança de schema.
Um falhou por status 500 intermitente.
Enter fullscreen mode Exit fullscreen mode

Armadilhas comuns ao executar Maigret

Executar sem -a e assumir completude

Por padrão, a ferramenta pode priorizar sites principais. Para verificar a cauda longa, use:

maigret username -a
Enter fullscreen mode Exit fullscreen mode

Isso leva mais tempo.

Ignorar tags

A flag --tags ajuda a restringir por categoria ou país.

Exemplo:

maigret username --tags jp
Enter fullscreen mode Exit fullscreen mode

Use tags quando o contexto regional importa.

Não atualizar assinaturas

Antes de uma investigação séria, rode:

maigret --update
Enter fullscreen mode Exit fullscreen mode

Assinaturas antigas geram falsos positivos e falsos negativos.

Interpretar bloqueio como ausência

Captcha, rate limit ou bloqueio de Tor não significam que a conta não existe.

Trate como resultado desconhecido.

Confiar cegamente em campos extraídos

Páginas públicas podem conter dados falsos.

Use achados como pistas, não como prova final.

Casos de uso no mundo real

Uma consultoria de segurança pode usar Maigret no início de um engajamento de red-team para mostrar ao cliente sua superfície pública antes da execução técnica.

Um investigador de fraude pode usar a flag --ai para transformar resultados de milhares de sites em um resumo curto para clientes não técnicos.

Uma equipe de engenharia pode aplicar os mesmos padrões — banco de assinaturas, fixtures conhecidas, execução periódica e detecção de desvio — para manter testes de API atualizados em centenas de microsserviços com o Apidog.

Conclusão

Maigret é um bom estudo de arquitetura para qualquer pessoa que constrói sistemas de validação em larga escala. Mesmo que você nunca execute uma investigação OSINT, os padrões são úteis para testes de API.

Principais pontos:

  • Maigret usa um banco de assinaturas versionado para verificar milhares de sites.
  • Detecção multi-sinal é mais confiável do que checar apenas status HTTP.
  • Desvio de contrato precisa ser testado continuamente.
  • LLM funciona melhor como pós-processador, não como juiz.
  • Os mesmos padrões podem ser aplicados em suítes de API no Apidog.

Próximo passo prático: escolha um endpoint crítico do seu projeto, documente sua assinatura esperada, salve uma resposta válida e crie uma execução recorrente para detectar mudanças. Essa disciplina compensa na primeira vez que um fornecedor renomeia um campo às 2 da manhã e sua suíte detecta antes dos usuários.

<!--kg-card-begin: html-->




<!--kg-card-end: html-->

FAQ

É legal usar Maigret?

Depende da jurisdição e do alvo. Usar em você mesmo, em contas que você possui, em uma empresa com autorização por escrito ou em contexto jornalístico aprovado geralmente é aceitável. Usar contra indivíduos sem consentimento pode violar leis de assédio, perseguição ou privacidade.

Maigret funciona sem Python?

O pacote oficial usa Python 3.10+. O autor também mantém um bot do Telegram e opções como Cloud Shell para quem não quer instalar localmente.

A afirmação de mais de 3.000 sites é precisa?

O repositório lista mais de 3.000 entradas no banco de sites. Nem todas estarão ativas ou funcionais o tempo todo, por isso a atualização de assinaturas e a filtragem por tags são importantes.

O que o modo IA adiciona?

A flag --ai usa um LLM compatível com OpenAI para resumir os resultados determinísticos. Ela não muda a busca nem decide correspondências.

Posso usar Maigret em CI?

Para investigações OSINT, normalmente não é o fluxo ideal. Mas os padrões arquitetônicos do Maigret — assinaturas, fixtures, detecção de desvio e execução recorrente — são diretamente aplicáveis a pipelines de CI para testes de API. O Apidog ajuda a implementar esse modelo.

Como isso é diferente do Sherlock?

Sherlock é uma ferramenta mais antiga e simples para busca de nomes de usuário. Maigret expande a ideia com extração de informações, busca recursiva, tratamento parcial de captcha, modo de resumo com IA e um banco de sites mais rico.

Onde reporto uma assinatura desatualizada?

Use issues ou pull requests no repositório do Maigret no GitHub. A manutenção comunitária das assinaturas é parte central do funcionamento da ferramenta.

Top comments (0)