
반복적인 수동 작업을 자동화하기 위해 Python으로 작성된 모듈식 자산 발견 프레임워크
Cygor는 스캐닝, 파싱, 서비스 열거를 하나의 워크플로우로 통합한 모듈형 자산 발견 프레임워크입니다. 개별 도구들의 조합을 자동화된 프로세스로 대체하여 발견, 보강, 대상별 열거를 원활하게 처리함으로써 수작업 오버헤드를 줄이고 도구 관리 대신 결과에 집중할 수 있게 해줍니다.
Cygor의 웹 UI는 원시 스캔 데이터의 혼란을 하나의 시각적 명령 센터로 정리합니다. 끝없는 XML, JSON 또는 일반 텍스트를 뒤질 필요 없이 결과가 자동으로 파싱되고 보강되어 빠른 트리아지와 의사 결정을 위해 설계된 하나의 공간에 표시됩니다.
FastAPI와 Bootstrap 5로 구동되는 이 대시보드는 다음을 쉽게 할 수 있습니다:
웹 UI는 단순한 표현을 위한 것이 아닙니다 — 효율성과 명확성을 위한 것입니다. 수집된 모든 데이터를 하나의 대화형 작업 공간으로 모아 파일을 파싱하거나 출력을 조정하는 데 소요되는 시간을 줄이고 테스터가 중요한 것, 즉 환경을 이해하고 행동하는 데 집중할 수 있게 합니다.
제가 만드는 많은 도구, 기술, 방법들은 Spawn Universe에서 영감을 받았습니다. Spawn 만화를 읽어본 적이 없어도 괜찮습니다. 이 도구의 이름으로 이 캐릭터를 선택한 이유에 대해 설명드리겠습니다.
이름 Cygor는 Spawn 세계관의 비극적인 안티히어로 Cy-Gor에서 유래했습니다. 한때 정부 요원이자 Al Simmons의 절친이었던 Michael Konieczny는 Simmons가 살해된 후 부패를 폭로하려 했습니다. 그러나 그는 체포되어 Dr. Frederick Willheim의 유인원 실험인 Project Sim에 강제 투입되었고, 고릴라의 몸과 Konieczny의 정신이 침습적 사이버네틱스를 통해 결합되었습니다. 그 결과물이 Cy-Gor, 즉 사이버네틱 고릴라(Cybernetic Gorilla)의 줄임말로 알려진 야수였습니다.
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
# 안정 버전:
pipx install cygor
# 소스에서 설치:
git clone https://github.com/tjnull/cygor
cd cygor
pipx install .
Cygor의 Docker 설정에는 애플리케이션과 PostgreSQL 데이터베이스 서비스가 모두 포함됩니다. 시스템은 PostgreSQL을 사용할 수 없으면 자동으로 SQLite로 대체됩니다.
프로덕션 (권장):
# 옵션 1: 래퍼 스크립트 사용 (포트 충돌 자동 처리)
./docker-compose-up.sh up --build
# 옵션 2: 직접 docker compose 사용 (기본 포트 사용)
docker compose up --build
개발 (소스 코드 마운트):
# 옵션 1: 래퍼 스크립트 사용 (포트 충돌 자동 처리)
./docker-compose-up.sh dev up --build
# 옵션 2: 직접 docker compose 사용 (기본 포트 사용)
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를 실행한 후 웹 UI의 /docs에서도 제공됩니다.
최상위 Cygor 명령을 사용하여 사용 가능한 도구에 접근합니다. 각 하위 명령에는 자체 도움말 화면(cygor <command> --help)이 있어 플래그와 작업을 문서화합니다.
tjnull@kali:~$ cygor
Usage:
cygor <command> [args]
Commands:
banner Cygor 툴 배너 (경고: 큽니다!)
scan 호스트 및 서비스를 발견하는 자동화된 스캐너. (스캔을 위해 root/sudo 권한 필요).
parse NMAP 스캔 파일(nmap, gnmap, xml)을 분석하고 공통 서비스별로 분류된 호스트 목록 추출.
enum cygor 모듈 디렉터리에 있는 열거 모듈을 로드.
workspace 작업 공간 관리 (init/set-default/show).
web Cygor 웹 UI 제어/실행 (start/stop/status) 또는 직접 실행.
Environment:
CYGOR_WORKSPACE 이번 실행에만 기본 작업 공간을 재정의.
CYGOR_RESULTS_DIR 설정된 경우 웹 및 모듈에서 사용. (기본 작업 공간에서 자동 설정.)
cygor에서 스캐너를 실행하려면 sudo (root) 권한이 필요합니다:
Masscan만으로 호스트 발견 실행:
cygor scan -i eth0 -f scope.txt --discover masscan
Masscan과 Naabu로 호스트 발견을 실행한 후, 병합된 결과에 대해 Nmap 실행:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --nmap-source merge
발견만 수행 (Nmap 없음), 결과는 results/discovery/에 저장:
cygor scan -i eth0 -f scope.txt --discover masscan naabu --discover-only
저장된 발견 결과를 재사용하여 Nmap 상위 포트 스캔 실행:
cygor scan --use-discovery results/discovery/merged-discovered.txt --scan-type top-ports
발견된 호스트에 대해 사용자 지정 포트로 Nmap 실행:
cygor scan --use-discovery results/discovery/masscan-discovered.txt --ports 80,443,8443
전체 범위에 대해 10개의 병렬 프로세스로 Nmap 실행 (최대 100개):
\cygor scan -i eth0 -f scope.txt --discover naabu --processes 10 --scan-type fullscan:
IP 주소 또는 CDR 목록을 제공하여 Cygor로 호스트 발견 및 Nmap 스캔 실행:
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
스캔에서 특정 서브넷 또는 호스트 제외:
cygor scan -i eth0 -f scope.txt --exclusions exclusions.txt --discover masscan
Nmap 결과 디렉터리를 파싱하고 호스트 목록 출력:
cygor parse results/nmap
단일 XML을 파싱하고 호스트 목록을 results/parsed-hostlists에 작성:
cygor parse results/nmap/scan1.xml -o results
.xml/.nmap/.gnmap 파일을 재귀적으로 파싱하고 결과 출력:
cygor parse /path/to/scans --out-dir results
Cygor는 점점 늘어나는 프로토콜별 열거 모듈 세트를 제공합니다. 각 모듈은 검증된 도구를 래핑하고, 출력을 타입화된 행("parse-don't-dump")으로 파싱하며, 결과를 인벤토리(DB + 웹 UI)에 저장하여 검색 가능하고 호스트별로 상관 관계를 분석할 수 있게 합니다. 신호가 높은 관찰 결과는 다음 단계 엔진에 자동으로 전달되어, 웹 UI에서 우선 순위가 지정된 발견 결과와 즉시 실행 가능한 후속 명령을 표시합니다.