
CLI de fingerprinting rápido de serviços para 170+ protocolos (TCP/UDP/SCTP) - criado pela Praetorian
Funcionalidades • 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 rica de metadados.
Nerva detecta e identifica rapidamente serviços em execução em portas de rede abertas. Use-o junto com scanners de porta como Naabu para fazer fingerprinting de serviços descobertos, ou integre-o em seus pipelines de segurança para reconhecimento automatizado.
--misconfigs)--udp) e SCTP (--sctp, apenas Linux)--fast)host:portaBaixe um binário pré-compilado da página de Lançamentos.
go install github.com/praetorian-inc/nerva/cmd/nerva@latest
### A partir do código-fonte```sh
git clone https://github.com/praetorian-inc/nerva.git
cd nerva
go build ./cmd/nerva
./nerva -h
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
Identifique um único alvo:```sh
nerva -t example.com:22
# ssh://example.com:22
Obtenha metadados JSON detalhados:```sh nerva -t example.com:22 --json
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
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
### Flags
| Flag | Short | Descrição | Padrão |
|------|-------|-----------|---------|
| `--targets` | `-t` | Alvo ou lista de alvos separados por vírgula | — |
| `--list` | `-l` | Ficheiro de entrada contendo alvos | — |
| `--output` | `-o` | Caminho do ficheiro de saída | stdout |
| `--json` | | Saída no formato JSON | false |
| `--csv` | | Saída no formato CSV | false |
| `--misconfigs` | | Ativar deteção de configurações incorretas de segurança | false |
| `--proxy` | | URL do proxy (ex.: socks5://127.0.0.1:1080) | — |
| `--proxy-auth` | | Autenticação do proxy SOCKS5 (ex.: username:password) | — |
| `--dns-order` | | Ordem de resolução DNS: `p`, `l`, `lp`, `pl` | `lp` |
| `--fast` | `-f` | Modo rápido (apenas portas padrão) | false |
| `--capabilities` | `-c` | Listar capacidades disponíveis e sair | false |
| `--udp` | `-U` | Executar plugins UDP | false |
| `--sctp` | `-S` | Executar plugins SCTP (apenas Linux) | false |
| `--timeout` | `-w` | Tempo limite em milissegundos | 2000 |
| `--verbose` | `-v` | Saída detalhada para stderr | false |
| `--workers` | `-W` | Trabalhadores de análise concorrentes | 50 |
| `--max-host-conn` | `-H` | Máximo de conexões concorrentes por IP de anfitrião (0=sem limite) | 0 |
| `--rate-limit` | `-R` | Máximo de análises por segundo globalmente (0=sem limite) | 0 |
### 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 (somente Linux):```sh nerva -t telecom-server:3868 -S
**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ção Incorreta de Segurança
Nerva pode identificar configurações incorretas de segurança comuns quando ativada com `--misconfigs`:```sh
nerva -t example.com:2375 --misconfigs --json
Configurações incorretas detectadas:
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
Nerva suporta o roteamento do 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 de DNS (--dns-order):
Nota: O esquema socks5h:// força automaticamente a resolução de DNS pelo proxy (equivalente a --dns-order p)
Exemplo de varredura com Tor:```sh
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 de UDP: O UDP através de 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
**Desligamento 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
170+ plugins de detecção de serviços em TCP, UDP e SCTP:
Detecção de tecnologia para serviços web, organizados por categoria:
| Módulo | Descrição |
|---|---|
| Home Assistant | Plataforma de automação residencial |
| UniFi/EdgeOS | Dispositivos de rede Ubiquiti |
| Módulo | Descrição |
|---|---|
| Go pprof | Endpoints de perfil Go |
| NATS | Broker de mensagens |
| Protocolo | Transporte | Notas |
|---|---|---|
| HTTP/HTTPS | TCP | HTTP/2, detecção de tecnologia via Wappalyzer |
| Kubernetes | TCP | Detecção de servidor API |
Importe o Nerva para 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)
}
}
Veja [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/HEAD/examples/service-fingerprinting-example.go) para um exemplo completo funcional.
## Casos de Uso
### Testes de Penetração
Identifique rapidamente os serviços descobertos durante o reconhecimento para identificar possíveis 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'
Integre nos pipelines de implantação para verificar se apenas os serviços esperados estão expostos.
Enumere rapidamente serviços em alvos dentro do escopo para encontrar endpoints interessantes.
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]
nerva -t host:port vs echo host | zgrab2 http -p portCausa: Porta está fechada ou nenhum serviço suportado 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
Causa: Varredura UDP desabilitada por padrão.
Solução: Ative 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 ou contêiner Linux:```sh
docker run --rm nerva -t telecom:3868 -S
Se você acha o Nerva útil, considere dar uma estrela:
Aceitamos contribuições! Veja CONTRIBUTING.md para diretrizes.
Apache 2.0 — veja LICENSE para detalhes.
Nerva é um fork mantido do fingerprintx, originalmente desenvolvido pela turma de estagiários da Praetorian de 2022:
| ID da Descoberta | Gravidade | Descrição |
|---|
docker-unauth-api | Crítico | API Docker acessível sem autenticação |
x11-unauth-access | Crítico | Servidor X11 permite conexões não autenticadas |
smb-signing-not-required | Médio | Assinatura SMB não exigida (risco de ataque de relé) |
telnet-cleartext | Médio | Telnet transmite credenciais em texto claro |
vnc-detected | Médio | VNC detectado (autenticação frequentemente fraca) |
ssh-password-auth | Médio | Servidor permite autenticação por senha |
ssh-weak-cipher | Baixo | Servidor oferece cifras fracas (RC4, 3DES, Blowfish) |
ssh-weak-kex | Baixo | Servidor oferece algoritmos de troca de chaves fracos |
ssh-weak-mac | Baixo | Servidor oferece algoritmos MAC fracos |
ftp-cleartext | Baixo | FTP transmite credenciais em texto claro |
| Opção | Estratégia | Caso de uso |
|---|
l | Apenas local | DNS local padrão (padrão) |
p | Apenas proxy | Forçar resolução de DNS pelo proxy |
lp | Local, com fallback para proxy | Tentar local primeiro, usar proxy em caso de falha |
pl | Proxy, com fallback para local | Tentar proxy primeiro, usar local em caso de falha |
| Módulo | Descrição |
|---|
| Checkpoint | Gateway de Segurança Check Point |
| Cisco ASA/FTD | Dispositivos 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 | Cisco AnyConnect SSL VPN |
| Cisco Expressway | Gateway de colaboração Cisco |
| BigIP | Balanceador de carga F5 BIG-IP |
| WinRM | Windows Remote Management |
| 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 LLM (estilo ChatGPT) |
| Triton | NVIDIA Triton Inference Server |
| Weaviate | Banco de dados vetorial para IA |
| ChromaDB | Banco de dados vetorial |
| Módulo | Descrição |
|---|
| ArangoDB | Banco de dados multimodelo |
| CockroachDB | Banco de dados SQL distribuído |
| CouchDB | Banco de dados documento Apache |
| Elasticsearch | Mecanismo 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 |
| Módulo | Descrição |
|---|
| Artifactory | Repositório de artefatos JFrog |
| Consul | Malha de serviço HashiCorp |
| Docker Registry | Registro de imagens de contêiner |
| Gitea | Serviço Git auto-hospedado |
| Grafana | Plataforma de observabilidade |
| Harbor | Registro de contêiner |
| Jaeger | Rastreamento distribuído |
| Jenkins | Automação CI/CD |
| Kubernetes | API de orquestração de contêiner |
| Portainer | Interface de gerenciamento Docker |
| Prometheus | Sistema de monitoramento |
| Swagger/OpenAPI | Documentação de API |
| TeamCity | Servidor CI/CD |
| Vault | Gerenciamento de segredos HashiCorp |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| Protocolo | Transporte | Portas Padrão | Notas |
|---|
| Modbus | TCP | 502 | SCADA/PLC |
| S7comm | TCP | 102 | Siemens PLC |
| EtherNet/IP | TCP | 44818 | Rockwell/Allen-Bradley |
| PROFINET | TCP | 34962-34964 | Siemens industrial |
| BACnet | UDP | 47808 | Automação predial |
| OPC UA | TCP | 4840 | Interoperabilidade industrial |
| OMRON FINS | TCP/UDP | 9600 | OMRON PLC |
| MELSEC-Q | TCP | 5006, 5007 | Mitsubishi PLC |
| 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 PLC |
| Fox | TCP | 1911 | Tridium Niagara |
| PC WORX | TCP | 1962 | Phoenix Contact |
| ProConOS | TCP | 20547 | Runtime PLC |
| HART-IP | TCP | 5094 | Automação de processos |
| EtherCAT | UDP | 34980 | Controle de movimento |
| Crimson v3 | TCP | 789 | Red Lion HMI |
| PCOM | TCP | 20256 | Unitronics PLC |
| GE SRTP | TCP | 18245 | GE PLC |
| ATG | TCP | 10001 | Medidores de tanque |
| 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 peer MTP2 |
| SGsAP | SCTP | 29118 | Fallback de circuito comutado |
| 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 | Cobrança GPRS |
| PFCP | UDP | 8805 | Plano de usuário 5G |
| 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 |
| 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 |
| 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 |