← Voltar para o Blog
2026-04-23@pad1ryoshi

Enumeração em Larga Escala de Tecnologias a partir do ASN

Reconhecimento ofensivo de infraestrutura usando Sistemas Autônomos como ponto de entrada para enumeração em larga escala.

Sumário

  1. Introdução e Contexto
  2. O que é um ASN?
  3. Fluxo Completo da Metodologia
  4. Fase 1 — Descoberta de Ranges via RADB
  5. Fase 2 — Port Scanning em Massa com Masscan
  6. Fase 3 — Extração de Hosts Ativos
  7. Fase 4 — Reverse DNS com dnsx
  8. Casos Especiais e Troubleshooting
  9. Próximos Passos após Enumeração
  10. Considerações Operacionais e OPSEC

Introdução e Contexto

Durante um programa de Bug Bounty ou um pentest com escopo amplo, um dos maiores desafios é mapear a superfície de ataque real de uma organização — não apenas os domínios que ela divulga publicamente, mas toda a infraestrutura IP que lhe pertence.

A abordagem tradicional de começar por subdomínios de empresa.com deixa passar uma quantidade enorme de ativos: ambientes de staging, APIs internas com acesso público inadvertido, serviços legacy, CDNs próprias e cloud assets que nunca foram linkados a um domínio canônico.

A técnica descrita neste artigo parte de um vetor diferente: o Autonomous System Number (ASN) da organização. Com ele, é possível:

  • Recuperar todos os blocos de IP (CIDRs) associados à empresa
  • Escanear esses ranges em busca de portas HTTP/HTTPS abertas
  • Resolver os IPs descobertos de volta para hostnames via PTR (rDNS)
  • Construir uma lista de subdomínios e endpoints que não aparecem em nenhum DNS forward

O que é um ASN?

Um Autonomous System (AS) é um conjunto de redes IP sob controle de uma única entidade administrativa — geralmente uma grande empresa, ISP ou provedor de cloud. Cada AS recebe um número único (ASN) atribuído pela IANA/RIRs (ARIN, RIPE, LACNIC, etc.).

Exemplos reais:

  • AS13335 → Cloudflare
  • AS15169 → Google
  • AS16509 → Amazon AWS
  • AS32934 → Meta (Facebook)

Para encontrar o ASN de um alvo:

# Via whois
whois -h whois.radb.net 'empresa.com'

# Via ferramentas online
curl "https://api.bgpview.io/search?query_term=empresa.com"

# Via amass
amass intel -org "Nome da Empresa"

# Via metabigor
echo "Nome da Empresa" | metabigor net --org

Fluxo Completo da Metodologia

ASN
 └─► RADB Whois ──► ranges.txt (CIDRs)
       └─► Masscan ──► masscan.gnmap (IPs com portas abertas)
             └─► awk ──► hosts (lista de IPs)
                   └─► dnsx (PTR lookup) ──► subs-hosts.txt (hostnames)
                         └─► [Próximas etapas de recon]

Fase 1 — Descoberta de Ranges via RADB

Comando

whois -h whois.radb.net -- '-i origin AS-NUMBER' | \
  grep -Eo '([0-9.]+){4}/[0-9]+' > ranges.txt

Explicação

ComponenteFunção
whois -h whois.radb.netConsulta diretamente o RADB (Routing Assets Database), que indexa informações de roteamento BGP globais
-- '-i origin AS-NUMBER'Os -- separam os argumentos do whois dos da query. -i origin filtra por registros onde o campo origin é o ASN especificado
grep -Eo '([0-9.]+){4}/[0-9]+'Extrai apenas os CIDRs do output (padrão: X.X.X.X/YY)
> ranges.txtPersiste os ranges para uso no masscan

Exemplo de uso real

# Substituir AS-NUMBER pelo número real (ex: AS15169 para Google)
whois -h whois.radb.net -- '-i origin AS15169' | \
  grep -Eo '([0-9.]+){4}/[0-9]+' | sort -u > ranges.txt

# Verificar quantidade de ranges encontrados
wc -l ranges.txt

# Estimar total de IPs
python3 -c "
import ipaddress, sys
total = sum(ipaddress.ip_network(l.strip(), strict=False).num_addresses
            for l in open('ranges.txt') if l.strip())
print(f'Total de IPs: {total:,}')
"

Fontes alternativas de ranges

Nem sempre o RADB tem todos os ranges. Fontes complementares:

# BGPView API
curl -s "https://api.bgpview.io/asn/AS-NUMBER/prefixes" | \
  jq -r '.data.ipv4_prefixes[].prefix' >> ranges.txt

# Hurricane Electric
curl -s "https://bgp.he.net/AS-NUMBER#_prefixes" | \
  grep -oP '\d+\.\d+\.\d+\.\d+/\d+' >> ranges.txt

# Deduplica e ordena
sort -u ranges.txt -o ranges.txt

Fase 2 — Port Scanning em Massa com Masscan

Comando

masscan -iL ranges.txt \
  -p80,443,8080,8000,8443,8081 \
  --rate=10000 \
  -oG masscan.gnmap

Explicação

FlagFunção
-iL ranges.txtLê os targets de um arquivo (suporta CIDRs)
-p80,443,8080,8000,8443,8081Portas comuns de aplicações web
--rate=10000Taxa de 10.000 pacotes/segundo — ajustar conforme capacidade da rede e OPSEC
-oG masscan.gnmapOutput no formato "grepable", similar ao Nmap -oG

Tuning de performance

# Scan agressivo (laboratório ou com permissão explícita)
masscan -iL ranges.txt -p80,443,8080,8000,8443,8081 \
  --rate=100000 \
  --adapter-ip 0.0.0.0 \
  -oG masscan.gnmap

# Scan stealth (Bug Bounty — menor footprint)
masscan -iL ranges.txt -p80,443,8080,8000,8443,8081 \
  --rate=1000 \
  --randomize-hosts \
  -oG masscan.gnmap

# Expandir portas para cobrir mais serviços web
masscan -iL ranges.txt \
  -p80,81,443,591,2082,2087,2095,2096,3000,4243,4567,4711,4712,\
4993,5000,5104,5108,5800,6543,7000,7396,7474,8000,8001,8008,8014,\
8042,8069,8080,8081,8083,8088,8090,8091,8118,8123,8172,8222,8243,\
8280,8281,8333,8443,8500,8834,8880,8888,8983,9000,9043,9060,9080,\
9090,9091,9200,9443,9800,9981,12443,16080,18091,18092,20720,28017 \
  --rate=10000 \
  -oG masscan.gnmap

Formato do output -oG

# Masscan 1.3.2 scan initiated ...
Host: 192.168.1.1 ()	Ports: 80/open/tcp//http//
Host: 192.168.1.2 ()	Ports: 443/open/tcp//https//
Host: 10.0.0.5 ()	Ports: 8080/open/tcp////

Fase 3 — Extração de Hosts Ativos

Comando

awk '/Host: / {print $4}' masscan.gnmap > hosts

Explicação

O awk busca linhas que contêm Host: e extrai o quarto campo ($4), que é o endereço IP no formato de output grepable do masscan.

Variações úteis

# Extrair IP + porta (para usar com httpx depois)
awk '/Host: / {
  split($5, ports, "/");
  print $4 ":" ports[1]
}' masscan.gnmap > hosts-with-ports.txt

# Filtrar apenas hosts com porta 443 (HTTPS)
grep "443/open" masscan.gnmap | awk '{print $4}' > hosts-https.txt

# Contar hosts únicos por porta
for port in 80 443 8080 8443; do
  count=$(grep "${port}/open" masscan.gnmap | awk '{print $4}' | sort -u | wc -l)
  echo "Porta $port: $count hosts"
done

Fase 4 — Reverse DNS com dnsx

Comando principal

cat hosts | dnsx -resp-only -ptr | grep -v "exacttarget.com" > subs-hosts.txt

Explicação

ComponenteFunção
dnsx -resp-onlyExecuta PTR lookup (DNS reverso) e exibe apenas as respostas, sem o IP original
-ptrForça consulta de registros PTR
grep -v "exacttarget.com"Remove falsos positivos — muitos IPs da Salesforce/ExactTarget resolvem para esse domínio, gerando ruído

Por que o rDNS é valioso?

Quando uma organização configura PTR records para seus IPs, ela essencialmente "nomeia" cada servidor. Esses nomes frequentemente revelam:

  • Ambientes internos: dev-api.empresa.com, staging-login.empresa.com
  • Serviços não documentados: old-vpn.empresa.com, jenkins.infra.empresa.com
  • Padrões de nomenclatura para enumeração posterior
  • Ativos cloud com hostnames gerados: ec2-X-X-X-X.compute-1.amazonaws.com

Flags adicionais do dnsx

# Resolução paralela com mais threads
cat hosts | dnsx -resp-only -ptr -t 100 > subs-hosts.txt

# Mostrar IP + hostname (útil para correlação)
cat hosts | dnsx -ptr -t 100 | tee subs-hosts-with-ip.txt | awk '{print $1}' > subs-hosts.txt

# Resolver IPs obtidos de volta (forward confirm)
cat subs-hosts.txt | dnsx -resp-only -a -t 100 > resolved-ips.txt

Casos Especiais e Troubleshooting

Quando o IP não responde a PTR lookup diretamente

Alguns IPs (especialmente em ranges de cloud ou CDN) não têm PTR configurado na zona reversa mas ainda possuem resolução via outros métodos:

# Método direto com dnsx
echo "13.227.219.100" | dnsx -ptr -resp-only

# Via dig para debug
dig -x 13.227.219.100 +short

# Via host
host 13.227.219.100

# Forçando um DNS resolver específico (Google)
echo "13.227.219.100" | dnsx -ptr -resp-only -r 8.8.8.8,1.1.1.1

# Usando resolvers alternativos para bypass de rate limiting
echo "13.227.219.100" | dnsx -ptr -resp-only -r resolvers.txt

Falsos positivos comuns e como filtrar

# Filtrar múltiplos domínios ruidosos
cat hosts | dnsx -resp-only -ptr | \
  grep -vE "(exacttarget\.com|amazonaws\.com|akamaitechnologies\.com|cloudfront\.net)" \
  > subs-hosts.txt

# Filtrar e manter apenas domínios do alvo
TARGET="empresa.com"
cat hosts | dnsx -resp-only -ptr | \
  grep "\.${TARGET}$" \
  > subs-hosts-filtered.txt

Masscan não encontra resultados esperados

# Testar conectividade com um IP específico do range
masscan 192.168.1.0/24 -p80 --rate=100

# Verificar se o masscan está funcionando
masscan 45.33.32.156 -p22 --rate=100  # scanme.nmap.org

# Checar permissões (raw sockets exigem root)
sudo masscan -iL ranges.txt -p80 --rate=1000 -oG test.gnmap

Próximos Passos após Enumeração

Com subs-hosts.txt em mãos, o pipeline natural de reconhecimento continua:

1. HTTP Probing com httpx

# Probe em todos os hosts descobertos
cat subs-hosts.txt | httpx -silent -status-code -title -tech-detect \
  -o httpx-results.txt

# Com screenshot
cat subs-hosts.txt | httpx -silent -screenshot -o screenshots/

2. Detecção de Tecnologias

# Web technologies fingerprinting
cat subs-hosts.txt | httpx -silent -tech-detect -json | \
  jq '.tech[]' | sort | uniq -c | sort -rn | head -20

# Nuclei para detecção de versões e CVEs
nuclei -l subs-hosts.txt -t technologies/ -o tech-findings.txt

3. Descoberta de Conteúdo

# Fuzzing com ffuf nos hosts ativos
cat httpx-results.txt | grep "200" | awk '{print $1}' | \
  while read url; do
    ffuf -u "${url}/FUZZ" -w /usr/share/wordlists/dirbuster/common.txt \
      -mc 200,301,302,401,403 -o "ffuf-$(echo $url | md5sum | cut -c1-8).json"
  done

4. Busca por Exposições Críticas

# Nuclei com templates de exposição
nuclei -l subs-hosts.txt \
  -t exposures/ \
  -t misconfiguration/ \
  -t default-logins/ \
  -severity medium,high,critical \
  -o critical-findings.txt

# Verificar headers de segurança
cat subs-hosts.txt | httpx -silent -include-response-header \
  -H "X-Frame-Options,Content-Security-Policy,Strict-Transport-Security" \
  -o security-headers.txt

Considerações Operacionais e OPSEC

Limites de Rate e Detecção

Taxa (pps)PerfilRisco de Detecção
< 1.000StealthBaixo
1.000 – 10.000NormalMédio
10.000 – 100.000AgressivoAlto
> 100.000LaboratorialMuito alto / bloqueio garantido

Boas práticas para Bug Bounty

  • Confirme o escopo: Verificar se os IPs dos ranges realmente pertencem ao alvo antes de escanear (WHOIS confirmatório)
  • Respeite exclusões: Ranges marcados como out-of-scope no programa devem ser removidos de ranges.txt
  • Evite IPs de terceiros: Ranges de cloud compartilhado podem afetar outros clientes
  • Documente tudo: Log de comandos + timestamps facilita o relatório e comprova que você agiu dentro do escopo

Infraestrutura recomendada

# VPS dedicada para scans (não use sua rede pessoal)
# Exemplo: Linode, DigitalOcean, Vultr — $5-10/mês

# Separar fases em sessões tmux
tmux new-session -s asn-recon
tmux new-window -t asn-recon -n masscan
tmux new-window -t asn-recon -n dnsx
tmux new-window -t asn-recon -n httpx

Referências e Ferramentas

FerramentaRepositórioUso neste pipeline
masscangithub.com/robertdavidgraham/masscanPort scanning em larga escala
dnsxgithub.com/projectdiscovery/dnsxResolução DNS em massa + PTR
httpxgithub.com/projectdiscovery/httpxHTTP probing
nucleigithub.com/projectdiscovery/nucleiDetecção de vulnerabilidades
amassgithub.com/owasp-amass/amassEnumeração de ASN e subdomínios
metabigorgithub.com/j3ssie/metabigorOSINT de rede corporativa
BGPViewbgpview.ioConsulta de ASN e prefixos

Este artigo descreve técnicas para uso exclusivo em programas de Bug Bounty com escopo autorizado ou engagements de pentest com contrato. Realizar varreduras em redes sem autorização explícita é ilegal em praticamente todas as jurisdições.

Sua infraestrutura está realmente protegida?

Não espere um ataque real para descobrir suas falhas. Agende um Diagnóstico com a KATRINASEC.

Solicitar Contato Agora