
柔軟なフィンガープリントシステムを搭載した、高速でカスタマイズ可能なサービス検出ツールです。インフラストラクチャ全体にわたるサービス、API、ネットワーク構成の特定に役立ちます。
柔軟なフィンガープリントシステムを搭載した、高速でカスタマイズ可能なサービス検出ツールです。インフラストラクチャ全体のサービス、API、ネットワーク構成を特定するのに役立ちます。
最新バージョンは Releases からダウンロードしてください
# 単一IPをスキャン
zscan -target 192.168.1.1
# CIDR範囲をスキャン
zscan -target 192.168.1.0/24
# 複数ターゲットをスキャン(セミコロンまたはカンマ区切り)
zscan -target "192.168.1.0/24;10.0.0.0/24"
zscan -target "192.168.1.1,192.168.1.2,192.168.1.3"
# 特定ポートをスキャン
zscan -target 192.168.1.1 -port 80,443,8080
# 結果をJSONファイルに保存
zscan -target 192.168.1.1 -output results.json
# 結果をリモートサーバーにレポート
zscan -target 192.168.1.0/24 -report http://server/api/assets
package main
import (
"flag"
"log"
"os"
"time"
"github.com/zcyberseclab/zscan/pkg/stage"
)
func main() {
target := flag.String("target", "", "IP address or CIDR range to scan")
configPath := flag.String("config", "config/config.yaml", "Path to config file")
templatesDir := flag.String("templates-dir", "templates", "Path to templates directory")
enableGeo := flag.Bool("geo", false, "Enable geolocation and IP info lookup")
enableCensys := flag.Bool("censys", false, "Enable Censys data enrichment")
censysAPIKey := flag.String("censys-api-key", "", "Censys API Key")
censysSecret := flag.String("censys-secret", "", "Censys API Secret")
flag.Parse()
if *target == "" {
log.Fatal("Target IP or CIDR range is required")
}
// Handle Censys credentials from environment if not provided
if *enableCensys {
if *censysAPIKey == "" || *censysSecret == "" {
*censysAPIKey = os.Getenv("CENSYS_API_KEY")
*censysSecret = os.Getenv("CENSYS_SECRET")
}
if *censysAPIKey == "" || *censysSecret == "" {
log.Printf("Warning: Censys integration enabled but credentials not provided. Skipping Censys data enrichment.")
*enableCensys = false
}
}
// Create scanner
scanner, err := stage.NewScanner(*configPath, *templatesDir, *enableGeo, *enableCensys, *censysAPIKey, *censysSecret)
if err != nil {
log.Fatalf("Failed to create scanner: %v", err)
}
defer scanner.Close()
// Perform scan
startTime := time.Now()
results, err := scanner.Scan(*target)
if err != nil {
log.Fatalf("Scan failed: %v", err)
}
// Print results
if err := stage.PrintResults(results); err != nil {
log.Printf("Error printing results: %v", err)
}
duration := time.Since(startTime)
log.Printf("\nScan completed in: %v\n", duration)
}
イメージをビルドするには docker build -t zscan . を実行します。
コンテナを起動するには docker run zscan --target 127.0.0.1 --config /app/config/config.yaml を実行します。
ZScanはYAML形式でのカスタムPOC開発をサポートしています。POC作成の詳細については、POC作成ガイドをご参照ください。
POCの例:
type: Path Traversal
cve-id: CVE-2021-41773
severity: critical
rules:
- method: GET
path: /icons/.%2e/%2e%2e/etc/passwd
expression: "response.status==200 && response.body.bcontains(b'root:')"
より多くの例と詳細な構文については、POC作成ガイドをご確認ください。
従来の資産スキャナや脆弱性スキャナは数十年前に作られました。クローズドソースで、非常に遅く、ベンダー主導です。今日の攻撃者は、かつては何年もかかっていた新たに公開されたCVEを、数日でインターネット全体で大量に悪用しています。この変化には、インターネット上の流行のエクスプロイトに取り組むための全く異なるアプローチが必要です。
私たちはこの課題を解決するためにZScanを構築しました。スキャンエンジンフレームワーク全体をオープンでカスタマイズ可能にし、世界中のセキュリティコミュニティが協力してインターネット上の流行の攻撃ベクトルや脆弱性に取り組めるようにしました。ZScanは現在、多くの企業、政府機関、大学で使用され、貢献されています。
コード、テンプレートライブラリへの貢献、またはチームへの参加を通じて参加できます。
PRを送り、このプロジェクトを最新に保ってくださっている素晴らしいコミュニティのコントリビューターの皆様に感謝します。❤️
ZScan は MIT ライセンスの下で配布されています。
| オプション | 説明 |
|---|
-target | IPアドレスまたはCIDR範囲(; または , 区切りに対応) |
-port | スキャンするカスタムポート(カンマ区切り) |
-config | 設定ファイルへのパス(デフォルト: config/config.yaml) |
-geo | ジオロケーションとIP情報の参照を有効化 |
-output | 出力形式: json、html、または md |
-report | スキャン結果をレポートするURL |
-apikey | レポート認証用のAPIキー(Bearerトークン) |
-version | バージョン情報を表示 |