
빠른 서비스 핑거프린팅 CLI (170개 이상의 프로토콜 지원: TCP/UDP/SCTP) - Praetorian 제작
기능 • 설치 • 빠른 시작 • 사용법 • 프로토콜 • 라이브러리 • 사용 사례 • 문제 해결
Go로 작성된 고성능 서비스 지문 인식 도구. TCP, UDP, SCTP 전송에서 170개 이상의 네트워크 프로토콜을 식별하고 풍부한 메타데이터를 추출합니다.
Nerva는 열린 네트워크 포트에서 실행 중인 서비스를 신속하게 감지하고 식별합니다. Naabu와 같은 포트 스캐너와 함께 사용하여 발견된 서비스의 지문을 인식하거나, 보안 파이프라인에 통합하여 자동화된 정찰을 수행할 수 있습니다.
--misconfigs)--udp), SCTP(--sctp, Linux 전용)--fast)호스트:포트를 출력하는 모든 도구에서 파이프 입력릴리즈 페이지에서 사전 빌드된 바이너리를 다운로드하세요.
go install github.com/praetorian-inc/nerva/cmd/nerva@latest
### 소스에서```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
## 빠른 시작
단일 대상 지문 스캔:```sh
nerva -t example.com:22
# ssh://example.com:22
자세한 JSON 메타데이터 가져오기:```sh nerva -t example.com:22 --json
포트 스캐너에서 파이프:```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
### 플래그
| 플래그 | 약어 | 설명 | 기본값 |
|------|-------|-------------|---------|
| `--targets` | `-t` | 대상 또는 쉼표로 구분된 대상 목록 | — |
| `--list` | `-l` | 대상이 포함된 입력 파일 | — |
| `--output` | `-o` | 출력 파일 경로 | stdout |
| `--json` | | JSON 형식으로 출력 | false |
| `--csv` | | CSV 형식으로 출력 | false |
| `--misconfigs` | | 보안 설정 오류 감지 활성화 | false |
| `--proxy` | | 프록시 URL (예: socks5://127.0.0.1:1080) | — |
| `--proxy-auth` | | SOCKS5 프록시 인증 (예: username:password) | — |
| `--dns-order` | | DNS 해석 순서: `p`, `l`, `lp`, `pl` | `lp` |
| `--fast` | `-f` | 빠른 모드 (기본 포트만) | false |
| `--capabilities` | `-c` | 사용 가능한 기능 나열 후 종료 | false |
| `--udp` | `-U` | UDP 플러그인 실행 | false |
| `--sctp` | `-S` | SCTP 플러그인 실행 (Linux 전용) | false |
| `--timeout` | `-w` | 밀리초 단위 타임아웃 | 2000 |
| `--verbose` | `-v` | stderr로 상세 출력 | false |
| `--workers` | `-W` | 동시 스캔 작업자 수 | 50 |
| `--max-host-conn` | `-H` | 호스트 IP당 최대 동시 연결 수 (0=무제한) | 0 |
| `--rate-limit` | `-R` | 전역 초당 최대 스캔 수 (0=무제한) | 0 |
### 예제
**다중 대상:**```sh
nerva -t example.com:22,example.com:80,example.com:443
파일에서:```sh nerva -l targets.txt --json -o results.json
**UDP 스캔** (루트 권한이 필요할 수 있습니다):```sh
sudo nerva -t example.com:53 -U
# dns://example.com:53
SCTP 스캐닝 (Linux 전용):```sh nerva -t telecom-server:3868 -S
**빠른 모드** (기본 포트만):```sh
nerva -l large-target-list.txt --fast --json
프록시 라우팅 및 원격 DNS 해석:```sh nerva -t target.internal:80 --proxy socks5://127.0.0.1:1080 --dns-order p
### 보안 설정 오류 탐지
Nerva는 `--misconfigs` 옵션을 활성화하면 일반적인 보안 설정 오류를 식별할 수 있습니다:```sh
nerva -t example.com:2375 --misconfigs --json
감지된 잘못된 구성:
잘못된 구성이 포함된 예제 출력:```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" } ] }
### 프록시 지원
Nerva는 구성 가능한 DNS 확인을 통해 SOCKS5 및 HTTP 프록시를 통해 스캐닝 트래픽을 라우팅할 수 있습니다.
**지원되는 프록시 스키마:**
- `socks5://` - 로컬 DNS 확인을 사용하는 SOCKS5 프록시
- `socks5h://` - 프록시 측 DNS 확인을 사용하는 SOCKS5 프록시 (항상)
- `http://` - HTTP CONNECT 프록시
- `https://` - HTTPS CONNECT 프록시
**프록시 인증:**```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
DNS 해석 전략 (--dns-order):
참고: socks5h:// 스킴은 자동으로 프록시 측 DNS를 강제합니다 (--dns-order p와 동일)
Tor 스캐닝 예제:```sh
nerva -t http://example.onion:80 --proxy socks5h://127.0.0.1:9050
**UDP를 통한 프록시:**```sh
# UDP scanning through SOCKS5 proxy (limited support)
nerva -t target.com:161 --proxy socks5://127.0.0.1:1080 --udp
⚠️ UDP 제한 사항: SOCKS5를 통한 UDP는 제한적으로 지원됩니다. 모든 SOCKS5 서버가 UDP 연결을 지원하는 것은 아닙니다. 로컬 UDP 폴백이 발생할 수 있습니다.
속도 제한이 있는 병렬 스캔:```sh nerva -l large-target-list.txt -W 100 -H 5 -R 50 -v
**우아한 종료** (Ctrl+C는 부분 결과를 반환합니다):```sh
nerva -l huge-target-list.txt -W 50 -v
# Press Ctrl+C to stop — collected results are still printed
170개 이상의 서비스 탐지 플러그인 (TCP, UDP, SCTP):
카테고리별 웹 서비스 기술 탐지:
| 모듈 | 설명 |
|---|---|
| Home Assistant | 홈 자동화 플랫폼 |
| UniFi/EdgeOS | Ubiquiti 네트워크 장치 |
| 모듈 | 설명 |
|---|---|
| Go pprof | Go 프로파일링 엔드포인트 |
| NATS | 메시지 브로커 |
| 프로토콜 | 전송 | 비고 |
|---|---|---|
| HTTP/HTTPS | TCP | HTTP/2, Wappalyzer를 통한 기술 탐지 |
| Kubernetes | TCP | API 서버 탐지 |
Nerva를 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)
}
}
완전한 작업 예제는 [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/HEAD/examples/service-fingerprinting-example.go)를 참조하세요.
## 사용 사례
### 침투 테스트
정찰 중 발견된 서비스를 신속하게 지문 스캔하여 잠재적인 공격 벡터를 식별합니다.
### 자산 검색 파이프라인
대규모 자산 인벤토리를 위해 Naabu 또는 Masscan과 결합하세요:```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'
배포 파이프라인에 통합하여 예상된 서비스만 노출되는지 확인합니다.
범위 대상의 서비스를 빠르게 열거하여 흥미로운 엔드포인트를 찾습니다.
LTE/5G 네트워크에서 SCTP 전송을 사용하여 Diameter 노드 지문 추출 (Linux):```sh nerva -t mme.telecom.local:3868 -S --json
## 아키텍처```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 대 echo host | zgrab2 http -p port원인: 포트가 닫혀 있거나 지원되는 서비스가 감지되지 않았습니다.
해결 방법: 포트가 열려 있는지 확인하세요:```sh nc -zv example.com 80
### 시간 초과 오류
**원인**: 기본 2초 시간 초과는 느린 서비스에 비해 너무 짧습니다.
**해결 방법**: 시간 초과 증가:```sh
nerva -t example.com:80 -w 5000 # 5 seconds
원인: UDP 스캔이 기본적으로 비활성화되어 있습니다.
해결 방법: -U 플래그를 사용하여 활성화 (루트 권한 필요 가능):```sh
sudo nerva -t example.com:53 -U
### SCTP 작동 안 함
**Cause**: SCTP는 리눅스에서만 지원됩니다.
**Solution**: 리눅스 시스템 또는 컨테이너에서 실행하세요:```sh
docker run --rm nerva -t telecom:3868 -S
Nerva가 유용하다고 생각하신다면, 별표를 눌러주세요:
기여를 환영합니다! 가이드라인은 CONTRIBUTING.md를 참조하세요.
Apache 2.0 — 자세한 내용은 LICENSE를 참조하세요.
Nerva는 fingerprintx의 유지 관리 포크이며, 원래 Praetorian의 2022년 인턴 클래스가 개발했습니다:
| 찾기 ID | 심각도 | 설명 |
|---|
docker-unauth-api | 심각 | 인증 없이 접근 가능한 Docker API |
x11-unauth-access | 심각 | X11 서버가 인증되지 않은 연결을 허용함 |
smb-signing-not-required | 중간 | SMB 서명이 필요하지 않음 (릴레이 공격 위험) |
telnet-cleartext | 중간 | Telnet이 자격 증명을 평문으로 전송함 |
vnc-detected | 중간 | VNC 감지됨 (종종 약한 인증) |
ssh-password-auth | 중간 | 서버가 비밀번호 인증을 허용함 |
ssh-weak-cipher | 낮음 | 서버가 약한 암호화( RC4, 3DES, Blowfish)를 제공함 |
ssh-weak-kex | 낮음 | 서버가 약한 키 교환 알고리즘을 제공함 |
ssh-weak-mac | 낮음 | 서버가 약한 MAC 알고리즘을 제공함 |
ftp-cleartext | 낮음 | FTP가 자격 증명을 평문으로 전송함 |
| 옵션 | 전략 | 사용 사례 |
|---|
l | 로컬만 | 표준 로컬 DNS (기본값) |
p | 프록시만 | 프록시 측 DNS 해석 강제 |
lp | 로컬, 실패 시 프록시 | 로컬 우선 시도, 실패 시 프록시 사용 |
pl | 프록시, 실패 시 로컬 | 프록시 우선 시도, 실패 시 로컬 사용 |
| 모듈 | 설명 |
|---|
| Checkpoint | Check Point 보안 게이트웨이 |
| Cisco ASA/FTD | Cisco 방화벽/VPN 어플라이언스 |
| FortiGate | Fortinet 방화벽/VPN |
| GlobalProtect | Palo Alto Networks VPN |
| Juniper | Juniper SRX 방화벽 |
| OPNsense | OPNsense 방화벽 |
| pfSense | pfSense 방화벽 |
| SonicWall | SonicWall 방화벽 |
| AnyConnect | Cisco AnyConnect SSL VPN |
| Cisco Expressway | Cisco 협업 게이트웨이 |
| BigIP | F5 BIG-IP 로드 밸런서 |
| WinRM | Windows 원격 관리 |
| 모듈 | 설명 |
|---|
| Ollama | 자체 호스팅 LLM 추론 서버 |
| LocalAI | 자체 호스팅 LLM 추론 (OpenAI 호환) |
| Open WebUI | LLM 웹 인터페이스 (ChatGPT 스타일) |
| Triton | NVIDIA Triton 추론 서버 |
| Weaviate | AI용 벡터 데이터베이스 |
| ChromaDB | 벡터 데이터베이스 |
| 모듈 | 설명 |
|---|
| ArangoDB | 다중 모델 데이터베이스 |
| CockroachDB | 분산 SQL 데이터베이스 |
| CouchDB | Apache 문서 데이터베이스 |
| Elasticsearch | 검색 및 분석 엔진 |
| etcd | 분산 키-값 저장소 |
| Milvus | 벡터 데이터베이스 |
| MinIO | S3 호환 객체 스토리지 |
| Pinecone | 벡터 데이터베이스 |
| Redis Commander | Redis 웹 관리 UI |
| TiDB | 분산 SQL 데이터베이스 |
| YugabyteDB | 분산 SQL 데이터베이스 |
| Qdrant | 벡터 데이터베이스 |
| 모듈 | 설명 |
|---|
| Artifactory | JFrog 아티팩트 저장소 |
| Consul | HashiCorp 서비스 메시 |
| Docker Registry | 컨테이너 이미지 레지스트리 |
| Gitea | 자체 호스팅 Git 서비스 |
| Grafana | 옵저버빌리티 플랫폼 |
| Harbor | 컨테이너 레지스트리 |
| Jaeger | 분산 추적 |
| Jenkins | CI/CD 자동화 |
| Kubernetes | 컨테이너 오케스트레이션 API |
| Portainer | Docker 관리 UI |
| Prometheus | 모니터링 시스템 |
| Swagger/OpenAPI | API 문서화 |
| TeamCity | CI/CD 서버 |
| Vault | HashiCorp 비밀 관리 |
| 모듈 | 설명 |
|---|
| Apache HTTPD | Apache HTTP 서버 |
| Express.js | Node.js 웹 프레임워크 |
| GoAhead | 임베디드 웹 서버 |
| Gotenberg | PDF 생성 서비스 |
| Guacamole | Apache 원격 데스크톱 게이트웨이 |
| SOAP | 웹 서비스 |
| Tengine | Alibaba 웹 서버 |
| Tomcat | Apache Tomcat |
| WordPress | CMS 플랫폼 |
| UPnP | 유니버설 플러그 앤 플레이 |
| 모듈 | 설명 |
|---|
| AEM | Adobe Experience Manager |
| Dynamics 365 | Microsoft Dynamics 365 / Power Apps |
| Oracle Service Cloud | Oracle CRM 플랫폼 |
| SAP NetWeaver | SAP 엔터프라이즈 플랫폼 |
| Splunk | 로그 관리 플랫폼 |
| VMware Horizon | 가상 데스크톱 인프라 |
| QNAP QTS | NAS 관리 |
| Exchange | Microsoft Exchange 서버 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| SSH | TCP | 22, 2222 |
| RDP | TCP/TLS | 3389 |
| Telnet | TCP | 23 |
| VNC | TCP | 5900 |
| AnyDesk | TCP | 7070 |
| TeamViewer | TCP | 5938 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| FTP | TCP | 21 |
| SMB | TCP | 445 |
| NFS | TCP/UDP | 2049 |
| Rsync | TCP | 873 |
| TFTP | UDP | 69 |
| SVN | TCP | 3690 |
| LDAP | TCP/TLS | 389, 636 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |
| 프로토콜 | 전송 | 기본 포트 | 비고 |
|---|
| Modbus | TCP | 502 | SCADA/PLC |
| S7comm | TCP | 102 | Siemens PLC |
| EtherNet/IP | TCP | 44818 | Rockwell/Allen-Bradley |
| PROFINET | TCP | 34962-34964 | Siemens 산업용 |
| BACnet | UDP | 47808 | 빌딩 자동화 |
| OPC UA | TCP | 4840 | 산업 상호운용성 |
| OMRON FINS | TCP/UDP | 9600 | OMRON PLC |
| MELSEC-Q | TCP | 5006, 5007 | Mitsubishi PLC |
| KNXnet/IP | UDP | 3671 | 빌딩 자동화 |
| IEC 104 | TCP | 2404 | 전력망 SCADA |
| DNP3 | TCP | 20000 | 전력망 SCADA |
| Codesys | TCP | 1200, 2455 | PLC 런타임 |
| Fox | TCP | 1911 | Tridium Niagara |
| PC WORX | TCP | 1962 | Phoenix Contact |
| ProConOS | TCP | 20547 | PLC 런타임 |
| HART-IP | TCP | 5094 | 공정 자동화 |
| EtherCAT | UDP | 34980 | 모션 제어 |
| Crimson v3 | TCP | 789 | Red Lion HMI |
| PCOM | TCP | 20256 | Unitronics PLC |
| GE SRTP | TCP | 18245 | GE PLC |
| ATG | TCP | 10001 | 탱크 게이지 |
| 프로토콜 | 전송 | 기본 포트 | 비고 |
|---|
| Diameter | TCP/SCTP | 3868 | LTE/5G AAA |
| M3UA | SCTP | 2905 | SS7 over IP |
| M2UA | SCTP | 2904 | MTP2 사용자 적응 |
| M2PA | SCTP | 3565 | MTP2 피어 적응 |
| SGsAP | SCTP | 29118 | 회선 교환 폴백 |
| X2AP | SCTP | 36422 | LTE eNodeB 간 |
| IUA | SCTP | 9900 | ISDN over IP |
| SIP | TCP/UDP/TLS | 5060, 5061 | VoIP 시그널링 |
| MEGACO/H.248 | UDP | 2944, 2945 | 미디어 게이트웨이 |
| MGCP | UDP | 2427, 2727 | 미디어 게이트웨이 |
| H.323 | TCP | 1720 | 화상 회의 |
| SCCP/Skinny | TCP | 2000, 2443 | Cisco IP 전화 |
| IAX2 | UDP | 4569 | Asterisk 프로토콜 |
| GTP-C | UDP | 2123 | GPRS 제어 |
| GTP-U | UDP | 2152 | GPRS 사용자 평면 |
| GTP' | UDP | 3386 | GPRS 과금 |
| PFCP | UDP | 8805 | 5G 사용자 평면 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |
| 프로토콜 | 전송 | 기본 포트 |
|---|
| 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 |