
Ferramenta OSINT que detecta squatting de domínios, typosquatting e phishing de aparência semelhante ao monitorar domínios recém-registrados em relação a palavras-chave de marca, com validação DNS e VT
openSquat é uma ferramenta de segurança Open Source Intelligence (OSINT) que identifica ameaças de cybersquatting direcionadas à sua marca ou domínios:
"Um canivete suíço poderoso para proteção de marca" — WhoisXML API Blog, Agosto de 2022
"Uma ferramenta com poder insano para combater typosquatting e todos os tipos de travessuras cibernéticas relacionadas." — WhoisXML API Blog, Agosto de 2022
"Uma ferramenta útil para coletar informações sobre domínios recém-registrados." — Classificada entre as 5 principais ferramentas de detecção de phishing — SOCRadar Blog, Julho de 2022
"O openSquat fornece proteção essencial contra ataques de squatting e phishing por meio de monitoramento e detecção automatizados." — Prince Yadav, TutorialsPoint, Março de 2026
"O OpenSquat identificou 103 domínios de squatting, 960 sites de phishing ativos e 53 domínios com certificados suspeitos." — Sharma et al., Journal of Information Security and Cybercrimes Research (JISCR), Vol. 7, Edição 1, Junho de 2024
O openSquat segue um modelo open-core:
Esse modelo permite transparência e colaboração da comunidade, ao mesmo tempo que suporta os requisitos de escala, confiabilidade e operação corporativa.
pip install opensquat
opensquat -k keywords.txt
git clone https://github.com/atenreiro/opensquat
cd opensquat
pip install -r requirements.txt
python3 opensquat.py -k keywords.txt
Usuários do repositório: em todos os exemplos abaixo, substitua
opensquatporpython3 opensquat.pypara executar a partir do checkout clonado.
confusable_homoglyphs, homoglyphs, colorama, requests, dnspython, beautifulsoup4# Execução padrão
opensquat
# Mostrar todas as opções
opensquat -h
# Usar arquivo de palavras-chave personalizado
opensquat -k my_keywords.txt
# Validação DNS via Quad9
opensquat --dns
# Verificar logs de Transparência de Certificados
opensquat --ct
# Escanear portas abertas (80/443)
opensquat --portcheck
# Cruzar referências com bancos de dados de phishing
opensquat --phishing results.txt
# Salvar como JSON
opensquat -o results.json -t json
# Salvar como CSV
opensquat -o results.csv -t csv
Nota: No lado da API (
--api), os cinco níveis de confiança correspondem a quatro valores de difusão (exact,low,auto,high) —-c 3e-c 4ambos mapeiam parahigh. Veja Modos Premium e API para o mapeamento completo e como sobrescrever com--api-fuzziness.
O openSquat suporta três modos. O padrão (Comunidade) não muda — usuários existentes não precisam de nenhuma bandeira. Os dois modos Premium compartilham uma única chave API openSquat; escolha Feed Premium se quiser o mesmo pipeline de detecção local com um feed maior, ou API Premium se quiser detecção no lado do servidor sem baixar o feed local.
Cadastre-se em opensquat.com para obter uma chave. A mesma chave funciona tanto para Feed Premium (--premium) quanto para API Premium (--api).
--api-key SUA_CHAVE na linha de comandoOPENSQUAT_API_KEYapi_key.txt no diretório atual (uma chave por arquivo, comentários # permitidos)A bandeira CLI é visível na saída do
ps. Prefira a variável de ambiente ou o arquivo de chave em ambientes compartilhados.
# Modo Feed Premium — mesmo pipeline local, feed maior
export OPENSQUAT_API_KEY=os_xxxxxxxxxxxx
opensquat -k keywords.txt --premium
# Modo API Premium — detecção no servidor por palavra-chave
opensquat -k keywords.txt --api
# API Premium + verificação de reputação DNS em cada domínio retornado
opensquat -k keywords.txt --api --dns
# API Premium com saída JSON agrupada por palavra-chave
opensquat -k keywords.txt --api -t json -o results.json
# Ajustar a pesquisa da API Premium
opensquat -k keywords.txt --api --api-fuzziness high --api-history-days 7 --api-max-results 200
Quando --premium ou --api carregam uma chave com sucesso, a CLI imprime uma linha de confirmação mascarada para que você possa verificar qual chave foi captada sem vazá-la:
[*] Chave API carregada: os_gL...L5Mb
No modo API Premium, o resumo da execução informa o modo ativo, o número de chamadas de API feitas e seu saldo restante com o delta de uso (por exemplo, 4972 (usou 4 de 4976 nesta execução)). Linhas de progresso por palavra-chave aparecem na mesma ordem do seu arquivo de palavras-chave, mesmo que as chamadas sejam executadas em paralelo. A exaustão de cota (HTTP 429) retorna resultados parciais de forma graciosa; erros de autenticação (401) e erros de plano (403) abortam com uma mensagem clara.
Se o backend limitar sua requisição (HTTP 429 com cabeçalho Retry-After), a ferramenta distingue isso da exaustão de cota: você verá um aviso amarelo [!] Limite de taxa atingido (repetir em Ns) em vez da mensagem vermelha cota esgotada, resultados parciais ainda são retornados, e o resumo preserva seu saldo real da API para que você veja exatamente quantos créditos realmente usou. Para evitar disparar limites de taxa em varreduras grandes, passe --api-rate-limit N para limitar requisições de saída por segundo em todos os workers. Um valor de 8 é um ponto de partida seguro para a maioria dos backends.
# Limitar a 8 requisições/segundo em todos os workers
opensquat -k keywords.txt --api --api-rate-limit 8
JSON é o formato de saída recomendado para o modo API Premium porque a API retorna metadados por domínio que os outros formatos não conseguem transportar tão claramente: o TLD registrado, a data da primeira aparição no NRD, uma bandeira de homógrafo IDN e a renderização unicode do homógrafo quando o domínio é um.
opensquat -k keywords.txt --api -t json -o results.json
Exemplo da saída mais rica no modo API Premium (truncado):
[
{
"keyword": "microsoft",
"domains": [
{"domain": "securite-microsoft.fr", "tld": "fr", "date": "09-04-2026", "idn": false},
{"domain": "xn--mirosoft-hw7c.com", "tld": "com", "date": "09-04-2026", "idn": true, "unicode": "miᴄrosoft.com"}
]
}
]
A bandeira idn mais a renderização unicode permitem ver rapidamente que xn--mirosoft-hw7c.com é na verdade ᴄ (Letra Latina Minúscula C maiúscula) se passando pelo c em "microsoft" — informação que uma string punycode simples esconde completamente.
A saída CSV também é suportada e produz uma linha por domínio com as mesmas colunas de metadados, adequada para analistas trabalhando em Excel ou pandas:
opensquat -k keywords.txt --api -t csv -o results.csv
O CSV é escrito com um BOM UTF-8 para que o Excel no Windows renderize corretamente a coluna unicode de homógrafos.
Os modos Comunidade e Feed Premium emitem a mesma forma JSON de alto nível para consistência entre modos, mas apenas com o campo domain preenchido por entrada — o feed NRD não carrega os metadados por domínio que apenas a API hospedada possui:
[
{
"keyword": "microsoft",
"domains": [
{"domain": "mirosoft.com"},
{"domain": "mcrosoft.net"}
]
}
]
Se você passar --api-key sem também selecionar --premium ou --api, a CLI imprime uma dica de uma linha informando que a chave será ignorada no modo Comunidade (sem troca silenciosa de modo).
No modo API Premium, -c/--confidence é mapeado automaticamente para difusão da API (0→exact, 1→low, 2→auto, 3→high, 4→high). Use --api-fuzziness para sobrescrever.
A API Premium (--api) é incompatível com --doppelganger e -d/--domains.
keywords.txt)# Linhas começando com # são comentários
mycompany
mybrand
myproduct
vt_key.txt)Para usar --vt ou --subdomains, adicione sua chave API:
# Obtenha sua chave API gratuita em https://www.virustotal.com
sua_chave_api_aqui
api_key.txt)Necessária para --premium e --api. Crie um arquivo api_key.txt no diretório de trabalho:
# Obtenha sua chave em https://opensquat.com
# Linhas começando com # são ignoradas; a primeira linha não comentada é usada.
os_sua_chave_aqui
A CLI resolve a chave nesta ordem: bandeira --api-key → variável de ambiente $OPENSQUAT_API_KEY → arquivo api_key.txt. Os métodos de variável de ambiente e arquivo são preferíveis à bandeira CLI em ambientes compartilhados, pois argumentos CLI são visíveis via ps.
Execute diariamente via crontab:
# Instalado via pip (recomendado) — todos os dias às 8h, feeds atualizam ~7h30 UTC
0 8 * * * cd /caminho/para/dir-de-trabalho && opensquat -k keywords.txt -o results.json -t json
# Checkout do repositório — invoque opensquat.py diretamente com python3
0 8 * * * cd /caminho/para/opensquat && python3 opensquat.py -k keywords.txt -o results.json -t json
O
cdpara um diretório de trabalho é importante se você depende deapi_key.txt(resolvido a partir do diretório atual) ou deseja queresults.jsonseja escrito em um local específico.
Aceitamos contribuições! Veja nosso Guia de Contribuição para detalhes.
Andre Tenreiro — LinkedIn · Chave PGP
Este projeto está licenciado sob a GNU GPL v3.
| Tipo de Ameaça | Descrição |
|---|
| 🎣 Phishing | Domínios fraudulentos imitando sua marca |
| 🔤 Typosquatting | Domínios com erros de digitação comuns (ex.: gooogle.com) |
| 🌐 IDN Homograph | Caracteres visualmente semelhantes de outros alfabetos |
| 👥 Doppelgänger | Domínios contendo o nome da sua marca |
| 🔀 Bitsquatting | Erros de um único bit em nomes de domínio |
| Nível | Bandeira | Descrição |
|---|
| 0 | -c 0 | Muito alto (menos resultados, alta precisão) |
| 1 | -c 1 | Alto (padrão) |
| 2 | -c 2 | Médio |
| 3 | -c 3 | Baixo |
| 4 | -c 4 | Muito baixo (mais resultados, mais falsos positivos) |
| Modo | Bandeira | O que faz |
|---|
| Comunidade (padrão) | (nenhuma) | Baixa o feed gratuito de NRD (~100k domínios/dia) e executa a detecção local Levenshtein. |
| Feed Premium | --premium | Baixa o feed pago de NRD (nrd-lite, muito maior) usando sua chave API openSquat, depois executa a mesma detecção local Levenshtein. |
| API Premium | --api | Pula o download do feed local. Consulta a API REST de similares do openSquat por palavra-chave e retorna correspondências do lado do servidor. |
| Argumento | Padrão | Descrição |
|---|
-k, --keywords | keywords.txt | Arquivo de palavras-chave a pesquisar |
-o, --output | results.txt | Nome do arquivo de saída |
-t, --type | txt | Formato de saída: txt, json, csv |
-c, --confidence | 1 | Nível de confiança (0-4). No modo --api, é mapeado automaticamente para difusão (-c 3 e -c 4 ambos → high). |
-d, --domains | — | Usar arquivo de domínios local em vez de baixar |
-u, --url | feed opensquat | URL para baixar o feed de domínios |
--dns | — | Ativar validação DNS Quad9 |
--doppelganger | — | Modo apenas Doppelgänger (palavra-chave no domínio + verificação de acessibilidade) |
--ct | — | Pesquisar logs de Transparência de Certificados |
--phishing | — | Cruzar referências com banco de dados de phishing |
--subdomains | — | Obter subdomínios via VirusTotal |
--portcheck | — | Verificar portas abertas 80/443 |
--vt | — | Validar contra VirusTotal |
--premium | — | Modo Feed Premium — usar o feed NRD pago (requer chave API openSquat) |
--api | — | Modo API Premium — consultar a API REST de similares do openSquat por palavra-chave (sem feed local) |
--api-key | — | Chave API openSquat (ou definir $OPENSQUAT_API_KEY, ou usar api_key.txt) |
--api-fuzziness | (de -c) | Modo API Premium: exact, low, high ou auto |
--api-history-days | — | Modo API Premium: janela de histórico NRD em dias (limitada ao teto do plano) |
--api-max-results | — | Modo API Premium: máximo de resultados por palavra-chave (limitado ao teto do plano) |
--api-rate-limit | (ilimitado) | Modo API Premium: máximo de requisições de saída por segundo em todos os workers |