
Python製のモジュール式アセットディスカバリーフレームワーク。反復的な手動作業を自動化します。
Cygorは、スキャン、パース、サービス列挙を1つのワークフローに統合したモジュール式アセットディスカバリフレームワークです。個別ツールの寄せ集めに代わり、発見、エンリッチメント、ターゲットを絞った列挙をシームレスに処理する自動化プロセスを提供し、手作業のオーバーヘッドを削減して、ツール管理ではなく結果に集中できるようにします。
CygorのWeb UIは、生のスキャンデータの混沌を整理し、単一の視覚的なコマンドセンターにまとめます。延々とXML、JSON、フラットテキストを探し回る代わりに、結果は自動的にパース、エンリッチメントされ、迅速なトリアージと意思決定のために設計された1つのスペースに表示されます。
FastAPIとBootstrap 5を搭載したダッシュボードでは、以下が簡単に行えます:
Web UIは単なる表示のためだけではありません — 効率性と明確さのためのものです。収集したすべてのデータを単一のインタラクティブなワークスペースにまとめることで、ファイルのパースや出力の突き合わせに費やす時間を削減し、テスターが重要なこと、つまり環境の理解とそれに基づく行動に集中できるようにします。
私が作成するツール、テクニック、トレードクラフトの多くは、スポーン・ユニバースから着想を得ています。スポーンのコミックを読んだことがなくても大丈夫です。このツールの名前にこのキャラクターを選んだ理由をいくつか共有します。
Cygorという名前は、スポーンの世界に登場する悲劇的なアンチヒーロー、Cy-Gorに由来します。元々は政府工作員であり、アル・シモンズの親友だったマイケル・コニェチュニーは、シモンズ殺害後に汚職を暴こうとしました。しかし、彼は捕らえられ、フレデリック・ウィルハイム博士の類人猿実験であるプロジェクト・シムに強制的に参加させられ、ゴリラの体とコニェチュニーの意識が侵襲的サイバネティクスによって融合されました。その結果生まれたのが、サイバネティック・ゴリラの略であるCy-Gorという獣でした。
捕虜から脱出したCy-Gorは、混乱と怒りに任せて暴れ回り、政府のデータセンターを破壊することもありました。何度も狩られ、再捕獲されましたが、最終的には自分を支配しようとするシステムに反抗し、追跡インプラントを除去して自らの道を切り開き、機械と獣と人間の間で引き裂かれました。
webenumモジュールによって並列でオーケストレーションされます(インストールされているツールのみが実行されます)。Cygorのインストールには、pip、pipx、uv、dockerのいくつかの方法がサポートされています。
一部の依存関係(例:Kerberos/WinRM用のgssapi)はC拡張をビルドするため、まずビルドツールチェーンとKerberosヘッダーをインストールしてください:
# Debian/Ubuntu/Kali:
sudo apt install -y build-essential python3-dev libkrb5-dev
# Stable version:
pipx install cygor
# Install from source:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
CygorのDockerセットアップには、アプリケーションとPostgreSQLデータベースサービスの両方が含まれています。PostgreSQLが利用できない場合、システムは自動的にSQLiteにフォールバックします。
本番環境(推奨):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh up --build
# Option 2: Direct docker compose (uses default ports)
docker compose up --build
開発環境(ソースコードをマウント):
# Option 1: Use the wrapper script (automatically handles port conflicts)
./docker-compose-up.sh dev up --build
# Option 2: Direct docker compose (uses default ports)
docker compose -f docker-compose-dev.yaml up --build
Docker Composeセットアップには以下が含まれます:
results/: スキャン出力、credrecon結果、データベースファイルcygor-config/: ローカル設定ボリューム(自動作成)デフォルトでは:
5432で公開(利用可能な場合)5434で公開(利用可能な場合)5432を使用(Dockerネットワーク)ポートが使用中の場合は、以下の方法があります:
ラッパースクリプトを使用(推奨 - 利用可能なポートを自動検出):
./docker-compose-up.sh up --build
ポートを手動設定:
export POSTGRES_HOST_PORT=5435
docker compose up --build
ポートマッピングを削除(外部からのPostgreSQLアクセスが不要な場合):
docker-compose.yamlのports:セクションをコメントアウトしてください
Dockerイメージを手動でビルドするには:
docker build -t cygor .
シングルコンテナで実行する場合(PostgreSQLサービスなし):
docker run --rm -v ./results:/opt/cygor/results \
-e CYGOR_RESULTS_DIR=/opt/cygor/results \
cygor web --host 0.0.0.0 --port 8080 --load-dir /opt/cygor/results
CYGOR_DB_URLが設定されている場合を除く)Docker用の主要な環境変数:
データとワークスペース:
CYGOR_RESULTS_DIR: 結果ディレクトリ(デフォルト: /opt/cygor/results)CYGOR_WORKSPACE: ワークスペースディレクトリ(デフォルト: /opt/cygor/results)CYGOR_RESULTS_PATH: 結果ボリュームのホストパス(デフォルト: ./results)CYGOR_CONFIG_PATH: 認証設定ボリュームのホストパス(デフォルト: ./cygor-config)データベース:
CYGOR_DB_URL: データベース接続文字列(docker-composeが自動設定)CYGOR_DB_USER: PostgreSQLデータベースユーザー(デフォルト: cygor)CYGOR_DB_PASSWORD: PostgreSQLデータベースパスワードPOSTGRES_HOST_PORT: PostgreSQLホストポートマッピング(ポート競合解決用)デバッグと冗長性:
CYGOR_DEBUG: デバッグモードを有効にする(有効にするには1に設定)CYGOR_VERBOSE: 冗長レベル(0=通常、1=詳細、2=デバッグ)詳細なガイドはcygor/wiki/にあります — インストール、11の組み込み列挙モジュール、プラグイン開発、ワークスペース管理など。GitHubはこのディレクトリをナビゲーション可能なドキュメントサイトとしてレンダリングします(cygor/wiki/README.mdから開始)。同じページは、cygor web startを実行するとWeb UIの/docsからも参照できます。
トップレベルのCygorコマンドを使用して、利用可能なツールにアクセスします。各サブコマンドには独自のヘルプ画面(Cygor --help)があり、フラグとアクションが文書化されています。
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Cygor tool banner (Warning it is large!)
scan Automated scanner to discover hosts and services. (Will require root/sudo privileges for scanning).
parse Analyze a NMAP scan file (nmap, gnmap, xml) and extract categorized hostlists by common service.
enum Loads enumeration modules that are located in the cygor modules directory.
workspace Manage workspaces (init/set-default/show).
web Control/launch the Cygor Web UI (start/stop/status) or run directly.
Environment:
CYGOR_WORKSPACE Override default workspace just for this run.
CYGOR_RESULTS_DIR Used by web and modules if set. (Auto-set from default workspace.)
cygorでスキャナーを実行するにはsudo(root)権限が必要です:
Run host discovery with Masscan only:
cygor scan -i eth0 -f scope.txt --discover masscan
Run host discovery with both Masscan and Naabu, then Nmap on merged results:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
Discovery only (no Nmap), save results in results/discovery/:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
Reuse saved discovery results for Nmap top ports scan:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
Run Nmap with custom ports on discovered hosts:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
Run Nmap with 10 parallel processes on full scope (Max is 100):
\cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
Run Cygor to discover hosts and scan them with Nmap with a provided lists of IP Addresses or CDRs:
cygor scan -i eth0 --ips 10.10.10.1 10.10.10.5 10.10.20.0/24 --discover naabu --processes 10 --scan-type fullscan
Exclude specific subnets or hosts from scan:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Parse a directory of Nmap results and print hostlists:
cygor parse results/nmap
Parse a single XML and write hostlists to results/parsed-hostlists:
cygor parse results/nmap/scan1.xml -o results
Recursively parse .xml/.nmap/.gnmap files and write outputs:
cygor parse /path/to/scans --out-dir results
Cygorには、プロトコル固有の列挙モジュールが増え続けています。各モジュールは実績のあるツールをラップし、出力を型付き行("parse-don't-dump")にパースして、インベントリ(DB + Web UI)に結果を格納し、ホストごとに検索・相関付けできるようにします。シグナル度の高い観察結果は自動的に次のステップエンジンにも供給され、優先順位付けされた発見事項と、すぐに実行可能なフォローアップコマンドがWeb UIに表示されます。
List all available modules:
cygor enum --list
Run lockon against an http hostlist:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
Run web content discovery (multi-tool, with screenshots):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
Run nfsexplorer against NFS targets (exports only):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
Run smbexplorer and list files:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
Enumerate MSRPC (null session) with password policy + RID cycling:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
Probe databases for unauthenticated access (point at any DB service hostlist):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
各モジュールの全オプションリファレンスは cygor enum <module> --help を実行してください。
Cygorは拡張可能です — Pythonファイルを~/.cygor/plugins/に置くだけで、組み込みモジュールと同じようにcygor enum --list(およびWeb UI)に表示されます。独自のツールをラップし、チーム内で内部スキャナーを配布したり、フォークせずに特定のエンゲージメント向けにCygorを拡張できます。
Scaffold a new plugin (writes ~/.cygor/plugins/my_scanner.py):
cygor plugin create "My Scanner"
Install a plugin from a local file or a git URL:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
Validate, list, update, remove:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
Run an installed plugin (same as a built-in module):
cygor enum my_scanner -t 10.10.10.5
docs/examples/modules/の下に3つのリファレンスプラグインがあります:最小限の例、外部ツールラッパー、完全な注釈付きテンプレートです。完全なプラグインフォーマット、オプション/カラム/ビュー、依存関係処理、バージョン互換性、オプションのプラグイン許可リストについては、プラグイン開発ガイド を参照してください。
データを収集した後、CygorのWeb UIに読み込むことで、スキャン結果をホスト、サービス、その他の重要な発見事項の明確な可視化に変換できます。Cygorはcygor.dbというファイルを作成し、CygorのWeb UIでモデリングするために必要なデータを格納します。
# Basic usage - start on default host/port (127.0.0.1:8000)
cygor web start
# Start on all interfaces, port 8080
cygor web start -H 0.0.0.0 -p 8080
# Start with custom results directory
cygor web start --load-dir /path/to/results
# Start with verbose output
cygor web start -vv
# Start with all options
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
全オプションの一覧は cygor web start --help を実行してください。
# Check if the web server is running
cygor web status
# Stop a running web server
cygor web stop
CygorはPostgreSQLが利用可能な場合は自動的に検出して使用し、それ以外の場合はSQLiteにフォールバックします:
PostgreSQL(本番環境に推奨):
psqlが利用可能な場合に自動検出postgresql+psycopg_async://user:pass@host/dbSQLite(デフォルトのフォールバック):
cygor.dbCygorはセキュリティ研究および教育用フレームワークです。ペネトレーションテスト、レッドチーム運用、教室ラボ、個人用テスト範囲など、明示的な書面による許可がある環境でのみ使用することを意図しています。
このソフトウェアは、自分が所有または管理していないシステムへの不正アクセス、侵入、または妨害に使用してはなりません。そうした行為は、お住まいの地域の法律や規制に違反する可能性があり、刑事訴追や民事罰につながる可能性があります。
Cygorをダウンロード、実行、または変更することにより、以下に同意したものとみなされます:
Cygorの著者および貢献者は、このソフトウェアの使用から生じる誤用、損害、または結果について一切の責任を負いません。
特定の環境でCygorを使用する権限があるかどうか不明な場合は、実行しないでください。
| モジュール | サービス | 機能 |
|---|
lockon | HTTP/S, RDP, VNC, X11 | 高速な視覚的トリアージのため、プロトコル横断でスクリーンショットを撮影。 |
webenum | HTTP/S | 並列マルチツールによるコンテンツ発見(ffuf、feroxbuster、gobuster、dirsearch)。ツール間の重複排除/相関付けと、オプションのスクリーンショットに対応。 |
smbexplorer | SMB (445) | 共有、権限、アクセス可能なファイルを列挙。NTLM/Kerberos/pass-the-hashに対応。 |
nfsexplorer | NFS (2049) | エクスポート、バージョン、ファイルを列挙。UID/GIDスプーフィングとno_root_squashチェック。 |
rpcexplorer | MSRPC (445) | Null/認証セッション:サーバー情報、ドメインSID、ユーザー、グループ、完全なパスワードポリシー、RIDサイクリング。 |
ldapexplorer | LDAP/AD (389/636) | rootDSE、匿名バインド/検索、認証済みドメインダンプ。 |
snmpexplorer | SNMP (161) | v1/v2cコミュニティのブルートフォース、デバイスのシステム情報、MIBスイープ(ユーザー/プロセス/ソフトウェア/ポート/インターフェース)。 |
dnsexplorer | DNS (53) | バージョン、オープンリゾルバー検出、AXFRゾーン転送。 |
ftpexplorer | FTP (21) | バナー、匿名ログイン、ディレクトリリスト、FEAT、匿名書き込みテスト。 |
smtpexplorer | SMTP (25/587) | バナー、STARTTLS、AUTHメカニズム、VRFYユーザー列挙、オープンリレーテスト。 |
dbprobe | データベース | Redis/MySQL/PostgreSQL/MongoDB/Elasticsearch/CouchDBの未認証アクセスとバージョンをプローブ。 |