
nerva v1.69.2
CLI de fingerprinting rápido de serviços para 170+ protocolos (TCP/UDP/SCTP) - criado pela Praetorian
Nerva
Nerva: CLI rápida de fingerprinting de serviços
Recursos • Instalação • Início Rápido • Uso • Protocolos • Biblioteca • Casos de Uso • Solução de Problemas
Fingerprinting de serviços de alto desempenho escrito em Go. Identifique mais de 170 protocolos de rede nos transportes TCP, UDP e SCTP com extração avançada de metadados.
O Nerva detecta e identifica rapidamente serviços em execução em portas de rede abertas. Use-o em conjunto com scanners de portas como o Naabu para fazer fingerprinting dos serviços descobertos, ou integre-o aos seus pipelines de segurança para reconhecimento automatizado.
Recursos
- Mais de 170 Plugins de Protocolo — Bancos de dados, acesso remoto, serviços web, mensageria, protocolos industriais e de telecomunicações
- 76 Fingerprinters HTTP — Detecte tecnologias web, incluindo firewalls, bancos de dados, servidores de IA/LLM e muito mais
- Detecção de Configurações de Segurança Incorretas — Identifique problemas de segurança comuns, como APIs não autenticadas e protocolos em texto claro (
--misconfigs) - Suporte a Múltiplos Transportes — TCP (padrão), UDP (
--udp) e SCTP (--sctp, somente Linux) - Suporte a Proxy — Encaminhe o tráfego de varredura de forma transparente por proxies SOCKS5 ou HTTP com resolução DNS configurável
- Metadados Ricos — Extraia versões, configurações e detalhes relevantes para segurança de cada serviço
- Modo Rápido — Escaneie apenas as portas padrão para reconhecimento rápido (
--fast) - Saída Flexível — Formatos JSON, CSV ou legível por humanos
- Compatível com Pipelines — Receba dados via pipe do Naabu, Nmap ou qualquer ferramenta que produza
host:port - Biblioteca Go — Importe diretamente em suas aplicações Go
Instalação
Releases
Baixe um binário pré-compilado na página de Releases.
Do GitHub```sh
go install github.com/praetorian-inc/nerva/cmd/nerva@latest
### Do Código-Fonte```sh
git clone https://github.com/praetorian-inc/nerva.git
cd nerva
go build ./cmd/nerva
./nerva -h
Docker```sh
git clone https://github.com/praetorian-inc/nerva.git cd nerva docker build -t nerva . docker run --rm nerva -h docker run --rm nerva -t example.com:80 --json
## Início Rápido
Fingerprint de um único alvo:```sh
nerva -t example.com:22
# ssh://example.com:22
Obtenha metadados JSON detalhados:```sh nerva -t example.com:22 --json
{"host":"example.com","ip":"93.184.216.34","port":22,"protocol":"ssh","transport":"tcp","metadata":{...}}
Pipe de um scanner de portas:```sh
naabu -host example.com -silent | nerva
# http://example.com:80
# ssh://example.com:22
# https://example.com:443
A referência completa — cada subcomando, alias e flag, incluindo os que estão ocultos de --help — é gerada em docs/CLI.md.
Uso```
nerva [flags]
TARGET SPECIFICATION: Requires host:port or ip:port format. Assumes ports are open.
EXAMPLES: nerva -t example.com:80 nerva -t example.com:80,example.com:443 nerva -l targets.txt nerva --json -t example.com:80 cat targets.txt | nerva
### Exemplos
**Múltiplos alvos:**```sh
nerva -t example.com:22,example.com:80,example.com:443
Do arquivo:```sh nerva -l targets.txt --json -o results.json
**Varredura UDP** (pode exigir root):```sh
sudo nerva -t example.com:53 -U
# dns://example.com:53
Varredura SCTP (apenas Linux):```sh nerva -t telecom-server:3868 -S
diameter://telecom-server:3868
**Modo rápido** (apenas portas padrão):```sh
nerva -l large-target-list.txt --fast --json
Roteamento de proxy com resolução DNS remota:```sh nerva -t target.internal:80 --proxy socks5://127.0.0.1:1080 --dns-order p
### Detecção de Configurações de Segurança Incorretas
O Nerva pode identificar configurações de segurança incorretas comuns quando ativado com `--misconfigs`:```sh
nerva -t example.com:2375 --misconfigs --json
Configurações incorretas detetadas:
| ID da descoberta | Gravidade | Descrição |
|---|---|---|
docker-unauth-api | Crítica | API do Docker acessível sem autenticação |
x11-unauth-access | Crítica | O servidor X11 permite ligações não autenticadas |
smb-signing-not-required | Média | Assinatura SMB não exigida (risco de ataque relay) |
telnet-cleartext | Média | O Telnet transmite credenciais em texto simples |
vnc-detected | Média | VNC detetado (frequentemente com autenticação fraca) |
ssh-password-auth | Média | O servidor permite autenticação por palavra-passe |
ssh-weak-cipher | Baixa | O servidor oferece cifras fracas (RC4, 3DES, Blowfish) |
ssh-weak-kex | Baixa | O servidor oferece algoritmos de troca de chaves fracos |
ssh-weak-mac | Baixa | O servidor oferece algoritmos MAC fracos |
ftp-cleartext | Baixa | O FTP transmite credenciais em texto simples |
Exemplo de saída com configurações incorretas:```json { "host": "example.com", "port": 2375, "protocol": "docker", "anonymous_access": true, "security_findings": [ { "id": "docker-unauth-api", "severity": "critical", "description": "Docker API accessible without authentication", "evidence": "Successfully queried /version endpoint without credentials" } ] }
### Suporte a Proxy
O Nerva oferece suporte ao roteamento de tráfego de varredura através de proxies SOCKS5 e HTTP com resolução DNS configurável.
**Esquemas de proxy suportados:**
- `socks5://` - Proxy SOCKS5 com resolução DNS local
- `socks5h://` - Proxy SOCKS5 com resolução DNS do lado do proxy (sempre)
- `http://` - Proxy HTTP CONNECT
- `https://` - Proxy HTTPS CONNECT
**Autenticação de proxy:**```sh
# Inline authentication (URL format)
nerva -t example.com:80 --proxy socks5://username:[email protected]:1080
# Separate authentication flag
nerva -t example.com:80 --proxy socks5://127.0.0.1:1080 --proxy-auth username:password
Estratégias de resolução DNS (--dns-order):
| Opção | Estratégia | Caso de Uso |
|---|---|---|
l | Apenas local | DNS local padrão (predefinido) |
p | Apenas proxy | Forçar resolução DNS do lado do proxy |
lp | Local, fallback para proxy | Tentar local primeiro, usar proxy em caso de falha |
pl | Proxy, fallback para local | Tentar proxy primeiro, usar local em caso de falha |
Nota: O esquema socks5h:// força automaticamente o DNS do lado do proxy (equivalente a --dns-order p)
Exemplo de varredura Tor:```sh
Scan .onion services through Tor (SOCKS5 proxy on port 9050)
nerva -t http://example.onion:80 --proxy socks5h://127.0.0.1:9050
**UDP através de proxy:**```sh
# UDP scanning through SOCKS5 proxy (limited support)
nerva -t target.com:161 --proxy socks5://127.0.0.1:1080 --udp
⚠️ Limitações do UDP: O UDP através do SOCKS5 tem suporte limitado. Nem todos os servidores SOCKS5 suportam associação UDP. Pode ocorrer fallback para UDP local.
Varredura paralela com limitação de taxa:```sh nerva -l large-target-list.txt -W 100 -H 5 -R 50 -v
**Encerramento gracioso** (Ctrl+C retorna resultados parciais):```sh
nerva -l huge-target-list.txt -W 50 -v
# Press Ctrl+C to stop — collected results are still printed
Protocolos Suportados
Mais de 170 plugins de detecção de serviços em TCP, UDP e SCTP:
Módulos de Fingerprint HTTP (66)
Detecção de tecnologia para serviços web, organizada por categoria:
Firewalls e Segurança de Rede (12)
| Módulo | Descrição |
|---|---|
| Checkpoint | Check Point Security Gateway |
| Cisco ASA/FTD | Appliances de firewall/VPN Cisco |
| FortiGate | Firewall/VPN Fortinet |
| GlobalProtect | VPN Palo Alto Networks |
| Juniper | Firewalls Juniper SRX |
| OPNsense | Firewall OPNsense |
| pfSense | Firewall pfSense |
| SonicWall | Firewalls SonicWall |
| AnyConnect | VPN SSL Cisco AnyConnect |
| Cisco Expressway | Gateway de colaboração Cisco |
| BigIP | Balanceador de carga F5 BIG-IP |
| WinRM | Windows Remote Management |
IA/LLM e Machine Learning (6)
| Módulo | Descrição |
|---|---|
| Ollama | Servidor de inferência LLM auto-hospedado |
| LocalAI | Inferência LLM auto-hospedada (compatível com OpenAI) |
| Open WebUI | Interface web para LLM (estilo ChatGPT) |
| Triton | NVIDIA Triton Inference Server |
| Weaviate | Banco de dados vetorial para IA |
| ChromaDB | Banco de dados vetorial |
Bancos de Dados e Armazenamento de Dados (12)
| Módulo | Descrição |
|---|---|
| ArangoDB | Banco de dados multimodelo |
| CockroachDB | Banco de dados SQL distribuído |
| CouchDB | Banco de dados de documentos Apache |
| Elasticsearch | Motor de busca e análise |
| etcd | Armazenamento chave-valor distribuído |
| Milvus | Banco de dados vetorial |
| MinIO | Armazenamento de objetos compatível com S3 |
| Pinecone | Banco de dados vetorial |
| Redis Commander | Interface web de gerenciamento Redis |
| TiDB | Banco de dados SQL distribuído |
| YugabyteDB | Banco de dados SQL distribuído |
| Qdrant | Banco de dados vetorial |
DevOps e Infraestrutura (14)
| Módulo | Descrição |
|---|---|
| Artifactory | Repositório de artefatos JFrog |
| Consul | Service mesh HashiCorp |
| Docker Registry | Registro de imagens de contêiner |
| Gitea | Serviço Git auto-hospedado |
| Grafana | Plataforma de observabilidade |
| Harbor | Registro de contêineres |
| Jaeger | Rastreamento distribuído |
| Jenkins | Automação CI/CD |
| Kubernetes | API de orquestração de contêineres |
| Portainer | Interface de gerenciamento Docker |
| Prometheus | Sistema de monitoramento |
| Swagger/OpenAPI | Documentação de API |
| TeamCity | Servidor CI/CD |
| Vault | Gerenciamento de segredos HashiCorp |
Servidores Web e Frameworks (10)
| Módulo | Descrição |
|---|---|
| Apache HTTPD | Apache HTTP Server |
| Express.js | Framework web Node.js |
| GoAhead | Servidor web embarcado |
| Gotenberg | Serviço de geração de PDF |
| Guacamole | Gateway de desktop remoto Apache |
| SOAP | Serviços web |
| Tengine | Servidor web Alibaba |
| Tomcat | Apache Tomcat |
| WordPress | Plataforma CMS |
| UPnP | Universal Plug and Play |
Corporativo e Empresarial (8)
| Módulo | Descrição |
|---|---|
| AEM | Adobe Experience Manager |
| Dynamics 365 | Microsoft Dynamics 365 / Power Apps |
| Oracle Service Cloud | Plataforma CRM Oracle |
| SAP NetWeaver | Plataforma empresarial SAP |
| Splunk | Plataforma de gerenciamento de logs |
| VMware Horizon | Infraestrutura de desktop virtual |
| QNAP QTS | Gerenciamento NAS |
| Exchange | Microsoft Exchange Server |
Casa e IoT (2)
| Módulo | Descrição |
|---|---|
| Home Assistant | Plataforma de automação residencial |
| UniFi/EdgeOS | Dispositivos de rede Ubiquiti |
Outros (2)
| Módulo | Descrição |
|---|---|
| Go pprof | Endpoints de profiling Go |
| NATS | Broker de mensagens |
Bancos de Dados (20)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| PostgreSQL | TCP | 5432 |
| MySQL | TCP | 3306 |
| MSSQL | TCP | 1433 |
| Oracle | TCP | 1521 |
| MongoDB | TCP | 27017 |
| Redis | TCP/TLS | 6379, 6380 |
| Cassandra | TCP | 9042 |
| InfluxDB | TCP | 8086 |
| Neo4j | TCP/TLS | 7687 |
| DB2 | TCP | 446, 50000 |
| Sybase | TCP | 5000 |
| Firebird | TCP | 3050 |
| Memcached | TCP | 11211 |
| ZooKeeper | TCP | 2181 |
| Milvus | TCP | 19530, 9091 |
| CouchDB | HTTP | 5984 |
| Elasticsearch | HTTP | 9200 |
| ArangoDB | HTTP | 8529 |
| ChromaDB | HTTP | 8000 |
| Pinecone | HTTP | 443 |
Acesso Remoto (6)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| SSH | TCP | 22, 2222 |
| RDP | TCP/TLS | 3389 |
| Telnet | TCP | 23 |
| VNC | TCP | 5900 |
| AnyDesk | TCP | 7070 |
| TeamViewer | TCP | 5938 |
Web e API (2)
| Protocolo | Transporte | Notas |
|---|---|---|
| HTTP/HTTPS | TCP | HTTP/2, detecção de tecnologia via Wappalyzer |
| Kubernetes | TCP | Detecção de servidor de API |
Mensageria e Filas (10)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| Kafka | TCP/TLS | 9092, 9093 |
| MQTT 3/5 | TCP/TLS | 1883, 8883 |
| AMQP | TCP/TLS | 5672, 5671 |
| ActiveMQ | TCP/TLS | 61616, 61617 |
| NATS | TCP/TLS | 4222, 6222 |
| Pulsar | TCP/TLS | 6650, 6651 |
| SMTP | TCP/TLS | 25, 465, 587 |
| POP3 | TCP/TLS | 110, 995 |
| IMAP | TCP/TLS | 143, 993 |
| SMPP | TCP | 2775, 2776 |
Serviços de Arquivos e Diretórios (7)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| FTP | TCP | 21 |
| SMB | TCP | 445 |
| NFS | TCP/UDP | 2049 |
| Rsync | TCP | 873 |
| TFTP | UDP | 69 |
| SVN | TCP | 3690 |
| LDAP | TCP/TLS | 389, 636 |
Serviços de Rede (11)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| DNS | TCP/UDP | 53 |
| DHCP | UDP | 67, 68 |
| NTP | UDP | 123 |
| SNMP | UDP | 161 |
| NetBIOS-NS | UDP | 137 |
| STUN | UDP | 3478 |
| OpenVPN | UDP | 1194 |
| IPsec | UDP | 500 |
| IPMI | UDP | 623 |
| CoAP | UDP | 5683 |
| Echo | TCP/UDP | 7 |
Sistemas de Controle Industrial (18)
| Protocolo | Transporte | Portas Padrão | Notas |
|---|---|---|---|
| Modbus | TCP | 502 | SCADA/PLC |
| S7comm | TCP | 102 | PLC Siemens |
| EtherNet/IP | TCP | 44818 | Rockwell/Allen-Bradley |
| PROFINET | TCP | 34962-34964 | Industrial Siemens |
| BACnet | UDP | 47808 | Automação predial |
| OPC UA | TCP | 4840 | Interoperabilidade industrial |
| OMRON FINS | TCP/UDP | 9600 | PLC OMRON |
| MELSEC-Q | TCP | 5006, 5007 | PLC Mitsubishi |
| KNXnet/IP | UDP | 3671 | Automação predial |
| IEC 104 | TCP | 2404 | SCADA de rede elétrica |
| DNP3 | TCP | 20000 | SCADA de rede elétrica |
| Codesys | TCP | 1200, 2455 | Runtime de PLC |
| Fox | TCP | 1911 | Tridium Niagara |
| PC WORX | TCP | 1962 | Phoenix Contact |
| ProConOS | TCP | 20547 | Runtime de PLC |
| HART-IP | TCP | 5094 | Automação de processos |
| EtherCAT | UDP | 34980 | Controle de movimento |
| Crimson v3 | TCP | 789 | HMI Red Lion |
| PCOM | TCP | 20256 | PLC Unitronics |
| GE SRTP | TCP | 18245 | PLC GE |
| ATG | TCP | 10001 | Medidores de tanque |
Telecom e VoIP (17)
| Protocolo | Transporte | Portas Padrão | Notas |
|---|---|---|---|
| Diameter | TCP/SCTP | 3868 | AAA LTE/5G |
| M3UA | SCTP | 2905 | SS7 sobre IP |
| M2UA | SCTP | 2904 | Adaptação de Usuário MTP2 |
| M2PA | SCTP | 3565 | Adaptação de Par MTP2 |
| SGsAP | SCTP | 29118 | Fallback de comutação de circuitos |
| X2AP | SCTP | 36422 | Inter-eNodeB LTE |
| IUA | SCTP | 9900 | ISDN sobre IP |
| SIP | TCP/UDP/TLS | 5060, 5061 | Sinalização VoIP |
| MEGACO/H.248 | UDP | 2944, 2945 | Gateway de mídia |
| MGCP | UDP | 2427, 2727 | Gateway de mídia |
| H.323 | TCP | 1720 | Videoconferência |
| SCCP/Skinny | TCP | 2000, 2443 | Telefones IP Cisco |
| IAX2 | UDP | 4569 | Protocolo Asterisk |
| GTP-C | UDP | 2123 | Controle GPRS |
| GTP-U | UDP | 2152 | Plano de usuário GPRS |
| GTP' | UDP | 3386 | Tarifação GPRS |
| PFCP | UDP | 8805 | Plano de usuário 5G |
VPN e Segurança (11)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| SSH | TCP | 22, 2222 |
| OpenVPN | UDP | 1194 |
| WireGuard | UDP | 51820 |
| IPsec/IKEv2 | UDP | 500, 4500 |
| L2TP | UDP | 1701 |
| SSTP | TCP | 443 |
| GlobalProtect | HTTP | 443 |
| AnyConnect | HTTP | 443 |
| FortiGate | HTTP | 443 |
| STUN/TURN | UDP | 3478, 5349 |
| Kerberos | TCP | 88 |
Acesso Remoto e Gerenciamento (10)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| RDP | TCP/TLS | 3389 |
| VNC | TCP | 5900 |
| Telnet | TCP | 23 |
| WinRM | HTTP | 5985, 5986 |
| IPMI | UDP | 623 |
| SNMP | UDP | 161 |
| Zabbix Agent | TCP | 10050 |
| NRPE | TCP/TLS | 5666 |
| Docker | TCP/TLS | 2375, 2376 |
| X11 | TCP | 6000-6063 |
Ferramentas de Desenvolvimento (8)
| Protocolo | Transporte | Portas Padrão |
|---|---|---|
| HTTP/HTTPS | TCP | 80, 443, 8080, 8443 |
| Java RMI | TCP | 1099 |
| JDWP | TCP | 5005 |
| RTSP | TCP | 554 |
| Linux RPC | TCP | 111 |
| JetDirect | TCP | 9100 |
| CUPS/IPP | TCP | 631 |
| SonarQube | TCP | 9000 |
Uso da Biblioteca
Importe o Nerva em suas aplicações Go:```go package main
import ( "context" "fmt" "log" "net/netip" "time"
"github.com/praetorian-inc/nerva/pkg/plugins"
"github.com/praetorian-inc/nerva/pkg/scan"
)
func main() { // Configure scan config := scan.Config{ DefaultTimeout: 2 * time.Second, FastMode: false, UDP: false, Proxy: "socks5://127.0.0.1:1080", // optional ProxyAuth: "username:password", // optional DNSOrder: "p", // resolver strategy }
// Create target
ip, _ := netip.ParseAddr("93.184.216.34")
target := plugins.Target{
Address: netip.AddrPortFrom(ip, 22),
Host: "example.com",
}
// Run scan
results, err := scan.ScanTargets(context.Background(), []plugins.Target{target}, config)
if err != nil {
log.Fatal(err)
}
// Process results
for _, result := range results {
fmt.Printf("%s:%d - %s (%s)\n",
result.Host, result.Port,
result.Protocol, result.Transport)
}
}
Consulte [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/main/examples/service-fingerprinting-example.go) para um exemplo completo e funcional.
## Casos de Uso
### Testes de Penetração
Identifique rapidamente os serviços descobertos durante o reconhecimento para identificar potenciais vetores de ataque.
### Pipelines de Descoberta de Ativos
Combine com Naabu ou Masscan para inventário de ativos em larga escala:```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'
Verificação de Segurança em CI/CD
Integre em pipelines de implantação para verificar se apenas os serviços esperados estão expostos.
Reconhecimento em Bug Bounty
Enumere rapidamente serviços em alvos do escopo para encontrar endpoints interessantes.
Análise de Redes de Telecomunicações
Identifique nós Diameter em redes LTE/5G usando transporte SCTP (Linux):```sh nerva -t mme.telecom.local:3868 -S --json
## Arquitetura```mermaid
graph LR
A[host:port input] --> B[Target Parser]
B --> C[Scan Engine]
C --> D{Transport}
D -->|TCP| E[TCP Plugins]
D -->|UDP| F[UDP Plugins]
D -->|SCTP| G[SCTP Plugins]
E --> H[Service Detection]
F --> H
G --> H
H --> I[Metadata Extraction]
I --> J[JSON/CSV/Text Output]
Por que Nerva?
vs Nmap
- Padrões mais inteligentes: Nerva verifica o protocolo mais provável primeiro com base no número da porta
- Saída estruturada: Suporte nativo a JSON/CSV para facilitar a análise e integração em pipelines
- Focado: Apenas fingerprinting de serviços — combine com scanners de portas dedicados para descoberta
vs zgrab2
- Detecção automática: Não é necessário especificar o protocolo antecipadamente
- Uso mais simples:
nerva -t host:portvsecho host | zgrab2 http -p port
Solução de problemas
Sem saída
Causa: A porta está fechada ou nenhum serviço suportado foi detectado.
Solução: Verifique se a porta está aberta:```sh nc -zv example.com 80
### Erros de timeout
**Causa**: O timeout padrão de 2 segundos é muito curto para serviços lentos.
**Solução**: Aumente o timeout:```sh
nerva -t example.com:80 -w 5000 # 5 seconds
Serviços UDP não detectados
Causa: varredura UDP desabilitada por padrão.
Solução: Habilite com a flag -U (pode exigir root):```sh
sudo nerva -t example.com:53 -U
### SCTP não está funcionando
**Causa**: SCTP só é suportado no Linux.
**Solução**: Execute em um sistema Linux ou contêiner:```sh
docker run --rm nerva -t telecom:3868 -S
Terminologia
- Serviço: Um serviço de rede em execução numa porta (SSH, HTTP, PostgreSQL, etc.)
- Fingerprinting: Deteção e identificação do tipo de serviço, versão e configuração
- Plugin: Um módulo de deteção específico de protocolo
- Modo Rápido: Digitalizar apenas a porta predefinida para cada protocolo (otimização 80/20)
- Transporte: Protocolo da camada de rede (TCP, UDP ou SCTP)
Suporte
Se considera o Nerva útil, por favor considere dar-lhe uma estrela:
Contribuir
Acolhemos contribuições! Consulte CONTRIBUTING.md para orientações.
Licença
Apache 2.0 — consulte LICENSE para detalhes.
Agradecimentos
O Nerva é um fork mantido de fingerprintx, originalmente desenvolvido pela turma de estagiários da Praetorian de 2022: