Nuclei: Scanner de Vulnerabilidades Automatizado para PME
Neste artigo
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