
빠른 서비스 핑거프린팅 CLI (170개 이상의 프로토콜 지원: TCP/UDP/SCTP) - Praetorian 제작
<img width="2976" height="1440" alt="Nerva - 네트워크 정찰을 위한 빠른 서비스 핑거프린팅 CLI로 170개 이상의 프로토콜 지원" src="https://assets.kitploit.com/production/public/readmes/12252/3a0b59e2929fa8fdc41aafe4cb8649e3e85f0ba5f9df8128f7f3f952d70b0018.webp" />
<h1 align="center">
Nerva
<br>
<sub>Nerva: 빠른 서비스 핑거프린팅 CLI</sub>
</h1>
<p align="center">
<a href="https://github.com/praetorian-inc/nerva/releases"><img src="https://img.shields.io/github/v/release/praetorian-inc/nerva?style=flat-square" alt="Release"></a>
<a href="https://github.com/praetorian-inc/nerva/actions"><img src="https://img.shields.io/github/actions/workflow/status/praetorian-inc/nerva/ci.yml?style=flat-square" alt="Build Status"></a>
<a href="https://goreportcard.com/report/github.com/praetorian-inc/nerva"><img src="https://goreportcard.com/badge/github.com/praetorian-inc/nerva?style=flat-square" alt="Go Report Card"></a>
<a href="https://opensource.org/licenses/Apache-2.0"><img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg?style=flat-square" alt="License"></a>
<a href="https://github.com/praetorian-inc/nerva/stargazers"><img src="https://img.shields.io/github/stars/praetorian-inc/nerva?style=flat-square" alt="Stars"></a>
</p>
<p align="center">
<a href="#features">기능</a> •
<a href="#installation">설치</a> •
<a href="#quick-start">빠른 시작</a> •
<a href="#usage">사용법</a> •
<a href="#supported-protocols">프로토콜</a> •
<a href="#library-usage">라이브러리</a> •
<a href="#use-cases">사용 사례</a> •
<a href="#troubleshooting">문제 해결</a>
</p>
> **Go로 작성된 고성능 서비스 핑거프린팅.** TCP, UDP, SCTP 전송을 통해 170개 이상의 네트워크 프로토콜을 식별하고 풍부한 메타데이터를 추출합니다.
Nerva는 열린 네트워크 포트에서 실행 중인 서비스를 신속하게 탐지하고 식별합니다. [Naabu](https://github.com/projectdiscovery/naabu)와 같은 포트 스캐너와 함께 사용하여 발견된 서비스를 핑거프린팅하거나, 보안 파이프라인에 통합하여 자동화된 정찰에 활용할 수 있습니다.
## 기능
- **170개 이상의 프로토콜 플러그인** — 데이터베이스, 원격 접속, 웹 서비스, 메시징, 산업용, 통신 프로토콜
- **76개의 HTTP 핑거프린터** — 방화벽, 데이터베이스, AI/LLM 서버 등을 포함한 웹 기술 탐지
- **보안 설정 오류 탐지** — 인증되지 않은 API 및 평문 프로토콜과 같은 일반적인 보안 문제 식별 (`--misconfigs`)
- **다중 전송 지원** — TCP(기본), UDP(`--udp`), SCTP(`--sctp`, Linux 전용)
- **프록시 지원** — 구성 가능한 DNS 확인을 통해 SOCKS5 또는 HTTP 프록시를 통해 스캔 트래픽을 투명하게 라우팅
- **풍부한 메타데이터** — 각 서비스에서 버전, 구성 및 보안 관련 세부 정보 추출
- **빠른 모드** — 신속한 정찰을 위해 기본 포트만 스캔 (`--fast`)
- **유연한 출력** — JSON, CSV 또는 사람이 읽을 수 있는 형식
- **파이프라인 친화적** — Naabu, Nmap 또는 `host:port`를 출력하는 모든 도구에서 파이프 가능
- **Go 라이브러리** — Go 애플리케이션에 직접 임포트 가능
## 설치
### 릴리스
[Releases](https://github.com/praetorian-inc/nerva/releases) 페이지에서 미리 빌드된 바이너리를 다운로드하세요.
### GitHub에서
```sh
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
```
### 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
```
## 빠른 시작
단일 대상 핑거프린팅:
```sh
nerva -t example.com:22
# ssh://example.com:22
```
자세한 JSON 메타데이터 가져오기:
```sh
nerva -t example.com:22 --json
# {"host":"example.com","ip":"93.184.216.34","port":22,"protocol":"ssh","transport":"tcp","metadata":{...}}
```
포트 스캐너에서 파이프:
```sh
naabu -host example.com -silent | nerva
# http://example.com:80
# ssh://example.com:22
# https://example.com:443
```
<!-- BEGIN generated: cli-subcommands -->
<!-- END generated: cli-subcommands -->
<!-- BEGIN generated: cli-aliases -->
전체 레퍼런스 — `--help`에서 숨겨진 항목을 포함한 모든 하위 명령, 별칭 및 플래그 — 는 [docs/CLI.md](https://github.com/praetorian-inc/nerva/blob/main/docs/CLI.md)에 생성됩니다.
<!-- END generated: cli-aliases -->
## 사용법
```
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
```
### 예시
**다중 대상:**
```sh
nerva -t example.com:22,example.com:80,example.com:443
```
**파일에서:**
```sh
nerva -l targets.txt --json -o results.json
```
**UDP 스캐닝**:
```sh
nerva -t example.com:53 -U
# dns://example.com:53
```
**SCTP 스캐닝** (Linux 전용):
```sh
nerva -t telecom-server:3868 -S
# diameter://telecom-server:3868
```
**빠른 모드** (기본 포트만):
```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
```
**탐지된 잘못된 구성:**
| Finding ID | Severity | Description |
|------------|----------|-------------|
| `docker-unauth-api` | Critical | 인증 없이 접근 가능한 Docker API |
| `x11-unauth-access` | Critical | X11 서버가 인증되지 않은 연결을 허용함 |
| `dotnet-remoting-http-exposed` | High | .NET Remoting HTTP 채널 노출 (역직렬화 위험) |
| `smb-signing-not-required` | Medium | SMB 서명이 요구되지 않음 (릴레이 공격 위험) |
| `telnet-cleartext` | Medium | Telnet이 자격 증명을 평문으로 전송함 |
| `vnc-detected` | Medium | VNC 탐지됨 (종종 취약한 인증) |
| `ssh-password-auth` | Medium | 서버가 비밀번호 인증을 허용함 |
| `ssh-weak-cipher` | Low | 서버가 취약한 암호( RC4, 3DES, Blowfish)를 제공함 |
| `ssh-weak-kex` | Low | 서버가 취약한 키 교환 알고리즘을 제공함 |
| `ssh-weak-mac` | Low | 서버가 취약한 MAC 알고리즘을 제공함 |
| `ftp-cleartext` | Low | FTP가 자격 증명을 평문으로 전송함 |
**잘못된 구성이 포함된 출력 예시:**
```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`):
| 옵션 | 전략 | 사용 사례 |
|--------|----------|----------|
| `l` | 로컬만 | 표준 로컬 DNS (기본값) |
| `p` | 프록시만 | 프록시 측 DNS 확인 강제 |
| `lp` | 로컬, 프록시로 폴백 | 로컬 먼저 시도, 실패 시 프록시 사용 |
| `pl` | 프록시, 로컬로 폴백 | 프록시 먼저 시도, 실패 시 로컬 사용 |
**참고:** `socks5h://` 스킴은 프록시 측 DNS를 자동으로 강제합니다 (`--dns-order p`와 동일)
**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:**
```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
```
## 지원 프로토콜
TCP, UDP, SCTP 전반에 걸친 **170개 이상의 서비스 탐지 플러그인**:
### HTTP 핑거프린트 모듈 (66)
카테고리별로 정리된 웹 서비스 기술 탐지:
#### 방화벽 및 네트워크 보안 (12)
| 모듈 | 설명 |
|--------|-------------|
| Checkpoint | Check Point Security Gateway |
| 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 원격 관리 |
#### AI/LLM 및 머신러닝 (6)
| 모듈 | 설명 |
|--------|-------------|
| Ollama | 자체 호스팅 LLM 추론 서버 |
| LocalAI | 자체 호스팅 LLM 추론 (OpenAI 호환) |
| Open WebUI | LLM 웹 인터페이스 (ChatGPT 스타일) |
| Triton | NVIDIA Triton 추론 서버 |
| Weaviate | AI용 벡터 데이터베이스 |
| ChromaDB | 벡터 데이터베이스 |
#### 데이터베이스 및 데이터 스토어 (12)
| 모듈 | 설명 |
|--------|-------------|
| ArangoDB | 멀티 모델 데이터베이스 |
| CockroachDB | 분산 SQL 데이터베이스 |
| CouchDB | Apache 문서 데이터베이스 |
| Elasticsearch | 검색 및 분석 엔진 |
| etcd | 분산 키-값 저장소 |
| Milvus | 벡터 데이터베이스 |
| MinIO | S3 호환 객체 스토리지 |
| Pinecone | 벡터 데이터베이스 |
| Redis Commander | Redis 웹 관리 UI |
| TiDB | 분산 SQL 데이터베이스 |
| YugabyteDB | 분산 SQL 데이터베이스 |
| Qdrant | 벡터 데이터베이스 |
#### DevOps 및 인프라 (14)
| 모듈 | 설명 |
|--------|-------------|
| 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 시크릿 관리 |
#### 웹 서버 및 프레임워크 (10)
| 모듈 | 설명 |
|--------|-------------|
| Apache HTTPD | Apache HTTP 서버 |
| Express.js | Node.js 웹 프레임워크 |
| GoAhead | 임베디드 웹 서버 |
| Gotenberg | PDF 생성 서비스 |
| Guacamole | Apache 원격 데스크톱 게이트웨이 |
| SOAP | 웹 서비스 |
| Tengine | Alibaba 웹 서버 |
| Tomcat | Apache Tomcat |
| WordPress | CMS 플랫폼 |
| UPnP | 범용 플러그 앤 플레이 |
#### 엔터프라이즈 및 비즈니스 (8)
| 모듈 | 설명 |
|--------|-------------|
| 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 Server |
#### 홈 및 IoT (2)
| 모듈 | 설명 |
|--------|-------------|
| Home Assistant | 홈 자동화 플랫폼 |
| UniFi/EdgeOS | Ubiquiti 네트워크 장치 |
#### 기타 (3)
| 모듈 | 설명 |
|--------|-------------|
| .NET Remoting HTTP | Microsoft .NET Remoting HTTP 채널 |
| Go pprof | Go 프로파일링 엔드포인트 |
| NATS | 메시지 브로커 |
### 데이터베이스 (20)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
### 원격 접속 (6)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| SSH | TCP | 22, 2222 |
| RDP | TCP/TLS | 3389 |
| Telnet | TCP | 23 |
| VNC | TCP | 5900 |
| AnyDesk | TCP | 7070 |
| TeamViewer | TCP | 5938 |
### 웹 및 API (2)
| 프로토콜 | 전송 | 비고 |
|----------|-----------|-------|
| HTTP/HTTPS | TCP | HTTP/2, Wappalyzer를 통한 기술 탐지 |
| Kubernetes | TCP | API 서버 탐지 |
### 메시징 및 큐 (10)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
### 파일 및 디렉터리 서비스 (7)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| FTP | TCP | 21 |
| SMB | TCP | 445 |
| NFS | TCP/UDP | 2049 |
| Rsync | TCP | 873 |
| TFTP | UDP | 69 |
| SVN | TCP | 3690 |
| LDAP | TCP/TLS | 389, 636 |
### 네트워크 서비스 (11)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
### 산업 제어 시스템 (18)
| 프로토콜 | 전송 | 기본 포트 | 비고 |
|----------|-----------|---------------|-------|
| 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 | 탱크 게이지 |
### 통신 및 VoIP (17)
| 프로토콜 | 전송 | 기본 포트 | 비고 |
|----------|-----------|---------------|-------|
| Diameter | TCP/SCTP | 3868 | LTE/5G AAA |
| M3UA | SCTP | 2905 | SS7 over IP |
| M2UA | SCTP | 2904 | MTP2 User Adaptation |
| M2PA | SCTP | 3565 | MTP2 Peer Adaptation |
| 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 사용자 평면 |
### VPN 및 보안 (11)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
### 원격 접속 및 관리 (10)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
### 개발자 도구 (8)
| 프로토콜 | 전송 | 기본 포트 |
|----------|-----------|---------------|
| 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 |
## 라이브러리 사용법
Go 애플리케이션에 Nerva를 임포트하세요:
```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)
}
}
```
See [examples/service-fingerprinting-example.go](https://github.com/praetorian-inc/nerva/blob/main/examples/service-fingerprinting-example.go) for a complete working example.
## 사용 사례
### 침투 테스트
정찰 중에 발견된 서비스를 신속하게 핑거프린팅하여 잠재적인 공격 벡터를 식별합니다.
### 자산 검색 파이프라인
대규모 자산 인벤토리를 위해 Naabu 또는 Masscan과 결합합니다:
```sh
naabu -host 10.0.0.0/24 -silent | nerva --json | jq '.protocol'
```
### CI/CD 보안 스캐닝
배포 파이프라인에 통합하여 예상된 서비스만 노출되는지 검증합니다.
### 버그 바운티 정찰
범위 대상 전반의 서비스를 신속하게 열거하여 흥미로운 엔드포인트를 찾습니다.
### 통신 네트워크 분석
SCTP 전송(Linux)을 사용하여 LTE/5G 네트워크의 Diameter 노드를 핑거프린팅합니다:
```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를 사용하는 이유
### Nmap과의 비교
- **더 스마트한 기본값**: Nerva는 포트 번호를 기반으로 가장 가능성 높은 프로토콜을 먼저 확인합니다
- **구조화된 출력**: 손쉬운 파싱과 파이프라인 통합을 위한 네이티브 JSON/CSV 지원
- **집중성**: 서비스 핑거프린팅 전용 — 탐색에는 전용 포트 스캐너와 함께 사용하세요
### zgrab2와의 비교
- **자동 감지**: 프로토콜을 미리 지정할 필요가 없습니다
- **더 간단한 사용법**: `nerva -t host:port` vs `echo host | zgrab2 http -p port`
## 문제 해결
### 출력 없음
**원인**: 포트가 닫혀 있거나 지원되는 서비스가 감지되지 않았습니다.
**해결 방법**: 포트가 열려 있는지 확인하세요:
```sh
nc -zv example.com 80
```
### 타임아웃 오류
**원인**: 기본 2초 타임아웃이 느린 서비스에 비해 너무 짧음.
**해결 방법**: 타임아웃 증가:
```sh
nerva -t example.com:80 -w 5000 # 5 seconds
```
### UDP 서비스가 감지되지 않음
**원인**: 기본적으로 UDP 스캔이 비활성화되어 있음.
**해결 방법**: `-U` 플래그로 활성화:
```sh
nerva -t example.com:53 -U
```
Nerva UDP 스캔은 연결된 데이터그램 소켓을 사용하며 root 권한이 필요하지 않습니다.
### SCTP가 작동하지 않음
**원인**: SCTP는 Linux에서만 지원됩니다.
**해결 방법**: Linux 시스템 또는 컨테이너에서 실행하세요:
```sh
docker run --rm nerva -t telecom:3868 -S
```
## 용어
- **Service**: 포트에서 실행되는 네트워크 서비스 (SSH, HTTP, PostgreSQL 등)
- **Fingerprinting**: 서비스 유형, 버전 및 구성을 감지하고 식별하는 것
- **Plugin**: 프로토콜별 감지 모듈
- **Fast Mode**: 각 프로토콜의 기본 포트만 스캔 (80/20 최적화)
- **Transport**: 네트워크 계층 프로토콜 (TCP, UDP 또는 SCTP)
## 지원
Nerva가 유용하다고 생각되시면, 스타를 눌러주시면 감사하겠습니다:
[](https://github.com/praetorian-inc/nerva)
## 기여
기여를 환영합니다! 가이드라인은 [CONTRIBUTING.md](https://github.com/praetorian-inc/nerva/blob/main/CONTRIBUTING.md)를 참조하세요.
## 라이선스
Apache 2.0 — 자세한 내용은 [LICENSE](https://github.com/praetorian-inc/nerva/blob/main/LICENSE)를 참조하세요.
## 감사의 글
Nerva는 원래 Praetorian의 2022년 인턴 클래스에 의해 개발된 [fingerprintx](https://github.com/praetorian-inc/fingerprintx)의 유지 관리되는 포크입니다:
* [Soham Roy](https://github.com/praetorian-sohamroy)
* [Jue Huang](https://github.com/jue-huang)
* [Henry Jung](https://github.com/henryjung64)
* [Tristan Wiesepape](https://github.com/qwetboy10)
* [Joseph Henry](https://github.com/jwhenry28)
* [Noah Tutt](https://github.com/noahtutt)
* [Nathan Sportsman](https://github.com/nsportsman)