Nuclei: Scanner de Vulnerabilidades Automatizado para PME

1. Introdução

As pequenas e médias empresas (PME) portuguesas enfrentam hoje um cenário de ameaças em constante evolução. Cada semana surgem novos CVEs, misconfigurations e vulnerabilidades de exposição que podem comprometer infraestruturas inteiras. A maioria das PME não dispõe de equipas de segurança dedicadas nem de orçamentos para ferramentas comerciais de pentesting, o que deixa servidores, aplicações web e serviços expostos a ataques automatizados.

O Nuclei, desenvolvido pela ProjectDiscovery, é uma ferramenta open-source que altera completamente esta realidade. Permite automatizar a detecção de vulnerabilidades conhecidas, más configurações e exposições indevidas usando modelos YAML mantidos pela comunidade. Com mais de 9 000 modelos disponíveis e atualizados regularmente, o Nuclei torna possível que qualquer técnico de informática realize auditorias de segurança profissionais sem custo de licenciamento.

Neste artigo vamos explorar como instalar, configurar e integrar o Nuclei no fluxo de trabalho de uma PME — desde auditorias manuais pontuais até integração em pipelines CI/CD para validação contínua de segurança.

2. O que é Nuclei

Nuclei é um verificaçãoner de vulnerabilidades rápido, baseado em modelos, escrito em Go pela equipa da ProjectDiscovery. Em vez de usar uma base de dados fechada de assinaturas, o Nucleibaseia-se em ficheiros YAML que descrevem exactamente como detectar cada vulnerabilidade — desde um pedido HTTP específico até padrões de resposta que indicam a presença de uma falha.

A abordagem baseada em modelos oferece várias vantagens sobre os verificaçãoners tradicionais: cada modelo é auditável, personalizável e pode ser criado pela comunidade. O repositório oficial nuclei-modelos contém milhares de modelos que cobrem CVEs, misconfigurations de serviços web, exposição de painéis administrativos, fuga de informação e muito mais.

ℹ Para que serve na prática

O Nuclei responde a perguntas concretas: “O meu servidor tem algum CVE conhecido?”, “O painel de administração está exposto?”, “Há ficheiros de backup acessíveis publicamente?”. Cada modelo é uma verificação autónoma que pode ser corrida individualmente ou em conjunto com milhares de outras.

As principais capacidades do Nuclei incluem:

Funcionalidade Descrição
Templates YAML Cada verificação é um ficheiro legível e editável em YAML
Multi-protocolo Suporta HTTP, DNS, TCP, SSL, File, WHOIS e outros
Severidade classificada Info, Low, Medium, High, Critical — filtragem por nível
Output estruturado JSON, JSONL, Markdown, SARIF para integração em SIEM
Rate limiting Controlo de concorrência e velocidade para não sobrecarregar alvos
Gratuito e open-source Licença MIT, sem custos de licenciamento

3. Instalação

O Nuclei está disponível para Linux, macOS e Windows. Existem vários métodos de instalação — o mais simples em ambientes Linux é via Go, Docker ou binário pré-compilado.

3.1 Instalação via Go

Se já tem Go instalado (versão 1.21 ou superior), a instalação é directa:

go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

3.2 Instalação via Docker

Para quem prefere contentores, a imagem Docker oficial inclui todos os modelos pré-instalados:

docker pull projectdiscovery/nuclei:latest

# Executar um scan sobre um alvo
docker run -t projectdiscovery/nuclei:latest -u https://exemplo.pt

3.3 Instalação via binário pré-compilado

Para servidores sem Go nem Docker, descarregar o binário directamente da página de releases no GitHub:

wget https://github.com/projectdiscovery/nuclei/releases/latest/download/nuclei_3.3.0_linux_amd64.zip
unzip nuclei_3.3.0_linux_amd64.zip
sudo mv nuclei /usr/local/bin/
nuclei --version

Após a instalação, o primeiro passo é actualizar os modelos da comunidade:

nuclei -update-templates

ℹ Verificação rápida

Após instalar, executar nuclei -version para confirmar a versão e nuclei -update-modelos para descarregar todos os modelos oficiais.

4. Templates e Perfis

Os modelos são o coração do Nuclei. Cada modelo é um ficheiro YAML que define um pedido de rede e os padrões de resposta que indicam uma vulnerabilidade. O repositório oficial organiza os modelos por categorias: CVEs, misconfigurations, exposições, takeovers de subdomínios, vulnerabilidades de aplicações web, entre outras.

Para listar as categorias e tags disponíveis nos modelos instalados:

# Listar todas as tags disponiveis
nuclei -tags

# Filtrar templates por severidade
nuclei -severity critical,high -tl

# Contar templates por categoria
nuclei -severity critical,high -tl | wc -l

4.1 Estrutura de um modelo

Um modelo típico tem esta estrutura:

id: painel-admin-exposto

info:
  name: Deteccao de Painel Administrativo Exposto
  author: kbase-pt
  severity: medium
  description: |
    Verifica se um painel de administracao esta acessivel sem autenticacao.
  tags: exposure,misconfig,admin

http:
  - method: GET
    path:
      - "{{BaseURL}}/admin"
      - "{{BaseURL}}/admin/login"
    matchers:
      - type: word
        words:
          - "Admin Login"
          - "Painel de Administracao"
        condition: or

4.2 Perfis personalizados

Para auditorias regulares numa PME, convém criar perfis que combinam conjuntos específicos de modelos. O Nuclei suporta perfis via ficheiro de configuração:

# perfil-pme.yaml - perfil de auditoria para PME
nuclei -t cves/ -t misconfiguration/ -t exposures/ \
  -severity medium,high,critical \
  -rl 50 -c 25 \
  -o resultado-pme.txt \
  -u https://exemplo.pt

O parâmetro -rl 50 limita a 50 pedidos por segundo e -c 25 define 25 ligações simultâneas — valores adequados para não degradar o desempenho do servidor em produção.

5. Scanning de Infraestrutura

O Nuclei pode analisar um único alvo, uma lista de URLs ou toda uma infraestrutura. Para uma PME típica com vários serviços web, a abordagem mais eficiente é usar um ficheiro de lista.

5.1 Scan de um único alvo

nuclei -u https://exemplo.pt -severity high,critical

5.2 Scan de múltiplos alvos

Crie um ficheiro alvos.txt com todos os serviços a auditar:

https://exemplo.pt
https://blog.exemplo.pt
https://loja.exemplo.pt
https://webmail.exemplo.pt
https://vpn.exemplo.pt

Depois execute o verificação sobre a lista completa:

nuclei -l alvos.txt \
  -severity medium,high,critical \
  -rl 30 -c 20 \
  -j -o resultados.json \
  -silent

5.3 Filtragem por categorias

Para auditorias focadas, filtrar por tags específicas reduz o tempo de verificação e o ruído nos resultados:

# Apenas CVEs criticos e altos
nuclei -l alvos.txt -t cves/ -severity critical,high -o cves.txt

# Apenas misconfigurations
nuclei -l alvos.txt -t misconfiguration/ -o misconfig.txt

# Apenas exposicoes de tecnologia
nuclei -l alvos.txt -t technologies/ -o tech.txt
Tag Tipo de Verificação Recomendado para
cves Vulnerabilidades conhecidas com CVE atribuído Auditorias mensais
misconfiguration Más configuraíes de serviços web, servidores, aplicações Auditorias semanais
exposures Exposição de ficheiros, painéis, informação sensível Auditorias quinzenais
takeovers Subdomínios vulneráveis a takeover Auditorias mensais

6. Integração CI/CD

Uma das maiores vantagens do Nuclei é a facilidade de integração em pipelines de integração e entrega contínuas (CI/CD). Em vez de fazer auditorias pontuais, a integração CI/CD permite validar automaticamente a segurança de cada deploy antes que chegue a produção.

6.1 GitHub Actions

Exemplo de um workflow que corre o Nuclei em cada pull request sobre o ambiente de staging:

name: Nuclei Security Scan

on:
  pull_request:
    branches: [ main ]
  schedule:
    - cron: "0 6 * * 1"

jobs:
  nuclei-scan:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Nuclei
        run: |
          go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest

      - name: Update templates
        run: nuclei -update-templates

      - name: Run scan on staging
        run: |
          nuclei -u https://staging.exemplo.pt \
            -severity high,critical \
            -j -o nuclei-results.json \
            -silent

      - name: Upload results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: nuclei-results
          path: nuclei-results.json

6.2 GitLab CI

Configuração equivalente para GitLab CI:

nuclei_scan:
  stage: security
  image: projectdiscovery/nuclei:latest
  script:
    - nuclei -u https://staging.exemplo.pt
        -severity high,critical
        -j -o nuclei-results.json
        -silent
  artifacts:
    when: always
    paths:
      - nuclei-results.json
  only:
    - main
    - schedules

ℹ Schedule semanal

O parâmetro cron: "0 6 * * 1" no GitHub Actions executa o verificação todas as segundas-feiras às 06:00 UTC. Ajuste o horário para fora do período de maior carga dos serviços.

7. Boas Práticas

A utilização eficaz do Nuclei numa PME exige alguns cuidados para garantir resultados úteis sem causar impacto nos serviços em produção.

⚠ Autorização obrigatória

NUNCA everificaçãoeie infraestruturas que não lhe pertencem ou para as quais não tem autorização explícita por escrito. Mesmo com rate limiting, verificaçãos agressivos podem ser interpretados como ataques e violar termos de serviço ou legislação aplicável.

7.1 Controlo de impacto

Para evitar degradar serviços em produção, use sempre rate limiting e concorrência controlada:

# Configuracao conservadora para producao
nuclei -l alvos.txt \
  -rl 30 -c 15 \
  -timeout 10 \
  -retries 1 \
  -severity high,critical \
  -o resultados.txt

7.2 Cadência de auditorias

Uma estratégia recomendada para PME combina verificaçãos de diferentes tipos em intervalos regulares:

Frequência Tipo de Scan Objetivo
Semanal Misconfigurations + Exposures Detectar alterações recentes
Mensal CVEs completos Verificar novas vulnerabilidades conhecidas
A cada deploy Scan CI/CD em staging Bloquear deploy se encontrar critical
Trimestral Scan completo com todos os modelos Auditoria exaustiva de segurança

7.3 Triagem e remediação

Os resultados do Nuclei em formato JSON facilitam a triagem e integração em sistemas de monitorização (SIEM). Cada resultado inclui o modelo-name, severidade, URL afectada e referência ao CVE quando aplicável. Priorize sempre a remediação por ordem de severidade: Critical primeiro, depois High, e assim sucessivamente.

Mantenha os modelos actualizados antes de cada auditoria com nuclei -update-modelos. A comunidade ProjectDiscovery adiciona novos modelos regularmente, incluindo detecção para CVEs recentes nas primeiras 48 horas após divulgação pública.

ℹ Recursos oficiais

O código-fonte, documentação e repositório de modelos estão disponíveis em github.com/projectdiscovery/nuclei e github.com/projectdiscovery/nuclei-modelos. Ambos são open-source sob licença MIT.

Artigos relacionados no kbase.pt