
nerva v1.69.2
高速サービスフィンガープリンティングCLI - 170+プロトコル (TCP/UDP/SCTP) 対応 - Praetorian 製
Nerva
Nerva: 高速サービスフィンガープリンティングCLI
機能 • インストール • クイックスタート • 使用方法 • プロトコル • ライブラリ • ユースケース • トラブルシューティング
Goで書かれた高性能サービスフィンガープリンティング。 TCP、UDP、SCTPトランスポートにわたる170以上のネットワークプロトコルを識別し、豊富なメタデータを抽出します。
Nervaは、開いているネットワークポートで実行されているサービスを迅速に検出・識別します。Naabuのようなポートスキャナと併用して検出されたサービスのフィンガープリントを取得したり、セキュリティパイプラインに統合して自動偵察を行ったりできます。
機能
- 170以上のプロトコルプラグイン — データベース、リモートアクセス、Webサービス、メッセージング、産業用、通信プロトコル
- 76のHTTPフィンガープリンタ — ファイアウォール、データベース、AI/LLMサーバーなど、Webテクノロジーを検出
- セキュリティ設定ミスの検出 — 認証されていないAPIや平文プロトコルなど、一般的なセキュリティ問題を特定 (
--misconfigs) - マルチトランスポート対応 — TCP (デフォルト)、UDP (
--udp)、SCTP (--sctp、Linuxのみ) - プロキシ対応 — 設定可能なDNS解決により、SOCKS5またはHTTPプロキシを介してスキャントラフィックを透過的にルーティング
- 豊富なメタデータ — 各サービスからバージョン、設定、セキュリティ関連の詳細を抽出
- 高速モード — 迅速な偵察のためにデフォルトポートのみをスキャン (
--fast) - 柔軟な出力 — JSON、CSV、または人間が読める形式
- パイプライン対応 — Naabu、Nmap、または
host:portを出力する任意のツールからパイプ - Goライブラリ — Goアプリケーションに直接インポート可能
インストール
リリース
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
完全なリファレンス — すべてのサブコマンド、エイリアス、フラグ(--help から隠されているものも含む)— は docs/CLI.md に生成されます。
使用方法```
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スキャン**(root権限が必要な場合があります):```sh
sudo 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 | 重大度 | 説明 |
|---|---|---|
docker-unauth-api | Critical | 認証なしでアクセス可能な Docker API |
x11-unauth-access | Critical | X11 サーバーが未認証接続を許可 |
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)
カテゴリ別に整理されたWebサービスの技術検出:
ファイアウォール & ネットワークセキュリティ (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 Remote Management |
AI/LLM & 機械学習 (6)
| モジュール | 説明 |
|---|---|
| Ollama | セルフホスト型LLM推論サーバー |
| LocalAI | セルフホスト型LLM推論 (OpenAI互換) |
| Open WebUI | LLM Webインターフェース (ChatGPTスタイル) |
| Triton | NVIDIA Triton Inference Server |
| Weaviate | AI向けベクトルデータベース |
| ChromaDB | ベクトルデータベース |
データベース & データストア (12)
| モジュール | 説明 |
|---|---|
| ArangoDB | マルチモデルデータベース |
| CockroachDB | 分散SQLデータベース |
| CouchDB | Apacheドキュメントデータベース |
| Elasticsearch | 検索・分析エンジン |
| etcd | 分散キーバリューストア |
| Milvus | ベクトルデータベース |
| MinIO | S3互換オブジェクトストレージ |
| Pinecone | ベクトルデータベース |
| Redis Commander | Redis Web管理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シークレット管理 |
Webサーバー & フレームワーク (10)
| モジュール | 説明 |
|---|---|
| Apache HTTPD | Apache HTTP Server |
| Express.js | Node.js Webフレームワーク |
| GoAhead | 組み込みWebサーバー |
| Gotenberg | PDF生成サービス |
| Guacamole | Apacheリモートデスクトップゲートウェイ |
| SOAP | Webサービス |
| Tengine | Alibaba Webサーバー |
| Tomcat | Apache Tomcat |
| WordPress | CMSプラットフォーム |
| UPnP | Universal Plug and Play |
エンタープライズ & ビジネス (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ネットワークデバイス |
その他 (2)
| モジュール | 説明 |
|---|---|
| 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 |
Web & 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 inter-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 |
ライブラリの使用
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/main/examples/service-fingerprinting-example.go) を参照してください。
## ユースケース
### ペネトレーションテスト
偵察中に発見されたサービスを迅速にフィンガープリントし、潜在的な攻撃ベクトルを特定します。
### アセットディスカバリパイプライン
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対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 フラグで有効化します(root 権限が必要な場合があります):```sh
sudo nerva -t example.com:53 -U
### SCTP が動作しない
**原因**: SCTP は Linux でのみサポートされています。
**解決策**: Linux システムまたはコンテナ上で実行してください:```sh
docker run --rm nerva -t telecom:3868 -S
用語
- サービス: ポート上で動作するネットワークサービス (SSH、HTTP、PostgreSQL など)
- フィンガープリンティング: サービスの種類、バージョン、設定を検出および識別すること
- プラグイン: プロトコル固有の検出モジュール
- 高速モード: 各プロトコルのデフォルトポートのみをスキャンする (80/20 最適化)
- トランスポート: ネットワーク層プロトコル (TCP、UDP、または SCTP)
サポート
Nerva が役に立つと思われた場合は、スターを付けてご検討ください:
コントリビューション
コントリビューションを歓迎します! ガイドラインについては CONTRIBUTING.md をご覧ください。
ライセンス
Apache 2.0 — 詳細は LICENSE をご覧ください。
謝辞
Nerva は fingerprintx のメンテナンスされたフォークであり、元々は Praetorian の 2022 年のインターンクラスによって開発されました: