Introdução — Caçando garantias e OSINT
Os portais SafeBase expostos servem a dois públicos ao mesmo tempo:
- Prospects que precisam de prova da sua postura de segurança
- Pesquisadores de segurança (equipes azul e vermelha)
Cada marca verde revela um controle que (supostamente) existe hoje; cada marca ausente é uma dica igualmente clara sobre o que não existe.
O que esse método de detecção faz
A abordagem descrita neste post:
- Coleta cada título de controle diretamente do corpo HTML usando Nuclei no modo headless
- Normaliza esses títulos em achados legíveis por máquina via um único template baseado em regex
- Gera correspondências JSON/CLI de controles de segurança internos
Por que coletar esses dados?
Frameworks de conformidade como:
- ISO 27001
- SOC 2
- PCI-DSS
- Regulamentações regionais de privacidade
…exigem evidências de que os controles de segurança estão implantados e funcionando.
O SafeBase simplifica isso eliminando a necessidade de intermináveis trocas de e-mails e solicitações de documentos.
Por que fazer scraping do próprio Trust Centre?
Mesmo que você tenha construído, há razões sólidas:
Garantia contínua
Auditores esperam cada vez mais evidências contínuas em tempo realDetecção de mudanças
Nomes de controles, agrupamentos ou políticas podem mudar após atualizações ou aquisiçõesMapeamentos de terceiros
A saída JSON permite mapeamento contra frameworks como NIST 800-53
Valor para equipe azul vs. equipe vermelha
| Equipe | Benefício |
|---|---|
| Equipe Azul | Garante que as declarações públicas permaneçam precisas |
| Equipe Vermelha | Identifica lacunas comparando com bibliotecas de controles internos |
Detecção
A revisão manual funciona, mas não escala.
Em vez disso, essa abordagem usa o ProjectDiscovery / Nuclei, uma ferramenta de varredura rápida baseada em templates YAML.
Por que o Nuclei?
- Detecção orientada a templates
- Varredura de alta velocidade
- Facilmente customizável
- Ideal para automação em larga escala
Matchers
O template inclui 70 matchers.
Exemplos de matchers com regex
- type: regex
name: firewall
regex: ['(?i)Firewall(?:[\s\S]{0,600}?data-testid="enabled")?']
- type: regex
name: incident-response-policy
regex: ['(?i)Incident\s+Response\s+Policy(?:[\s\S]{0,600}?data-testid="enabled")?']
Técnicas de regex utilizadas
| Problema | Solução |
|---|---|
| Capitalização diferente | Flag (?i) |
| Espaços/quebras de linha misturados | \s+ |
| Espaço desconhecido entre título e ícone | [\s\S]{0,600}? |
Eliminando falsos positivos
Um matcher DSL garante maior precisão:
- type: dsl
name: names
dsl:
- 'status_code == 200'
- 'contains_any(body, "Powered by SafeBase")'
condition: and
O que é verificado
Ambas devem ser verdadeiras:
- O código de status da resposta é 200
- O HTML contém "Powered by SafeBase"
Contornando o WAF do Cloudflare
A maioria dos portais SafeBase fica atrás do WAF do Cloudflare, que bloqueia tentativas de scraping.
Solução: Modo headless
Usando a execução em Chromium headless do Nuclei:
- Executa desafios JavaScript
- Contorna o Managed Challenge do Cloudflare
- Renderiza conteúdo dinâmico
Configuração headless
headless:
- steps:
- action: navigate
args:
url: "{{BaseURL}}"
- action: sleep
args:
duration: 1s
Detalhamento
navigate
Inicializa o Chromium e carrega a URL alvosleep (1s)
Permite:- Execução de JavaScript
- Definição de cookies
- Renderização completa da página
Aumente o atraso se o HTML aparecer incompleto.
Resolução de problemas
Se os resultados estiverem faltando:
- Seu IP pode estar bloqueado
- Use um proxy se necessário
Varredura em escala
1. Monte sua lista de alvos
# domains.txt
https://trust.gitlab.com
https://security.projectdiscovery.io
https://trust.your-vendor-here.com
Você também pode incluir:
- Subdomínios
- Endpoints rastreados
2. Execute o Nuclei com concorrência
nuclei \
-t safebase-checks-enabled.yaml \
-headless \
-l matches.txt \
-c 50 \
-o safebase-scan.json
Flags principais
| Flag | Propósito |
|---|---|
-l |
Arquivo de entrada |
-c 50 |
Navegadores paralelos (consome muitos recursos) |
-o |
Arquivo de saída |
Opções de saída
- JSON
- CSV
- Stdout
Você pode encaminhar os resultados para:
- S3
- Slack
- SIEM
Repositório de templates
https://github.com/rxerium/internal-security-detect
3. Automatizar via CI/CD
Exemplo com GitHub Actions
jobs:
safebase-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
nuclei -t safebase-checks-enabled.yaml -headless -l domains.txt -c 50 -o results.json
- name: Upload artefact
uses: actions/upload-artifact@v4
with:
name: safebase-results
path: results.json
Considerações finais
Essa técnica se limita a organizações que usam SafeBase, mas demonstra um conceito poderoso:
O OSINT passivo pode se cruzar com conformidade, garantia e detecção.
Ao aproveitar portais de confiança acessíveis publicamente, pesquisadores podem:
- Analisar frameworks de controle
- Validar declarações de segurança
- Detectar mudanças automaticamente
…tudo sem autenticação ou acesso direto ao sistema.