
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