
반복적인 수동 작업을 자동화하기 위해 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에서 우선 순위가 지정된 발견 결과와 즉시 실행 가능한 후속 명령을 표시합니다.
사용 가능한 모든 모듈 목록 보기:
cygor enum --list
http 호스트 목록에 대해 lockon 실행:
cygor enum lockon web -f results/parsed-hostlists/http/http-hostlist.txt -o results/enum/lockon
웹 콘텐츠 발견 실행 (다중 도구, 스크린샷 포함):
cygor enum webenum -f results/parsed-hostlists/http-https/http-https-hostlist.txt --screenshot
NFS 대상에 대해 nfsexplorer 실행 (내보내기만):
cygor enum nfsexplorer -i results/parsed-hostlists/nfs/nfs-hostlist.txt --info
smbexplorer 실행 및 파일 목록 표시:
cygor enum smbexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --list-files
MSRPC 열거 (널 세션) - 암호 정책 및 RID 순환 포함:
cygor enum rpcexplorer -i results/parsed-hostlists/smb/smb-hostlist.txt --rid-cycle
데이터베이스에 대해 인증되지 않은 접근 프로브 (모든 DB 서비스 호스트 목록 대상):
cygor enum dbprobe -i results/parsed-hostlists/mysql/mysql-hostlist.txt
각 모듈의 전체 옵션 참조는 cygor enum <module> --help를 실행하세요.
Cygor는 확장 가능합니다 — Python 파일을 ~/.cygor/plugins/에 넣으면 내장 모듈처럼 cygor enum --list (및 웹 UI)에 나타납니다. 자신의 도구를 래핑하고, 팀 내부 스캐너를 배포하거나, 특정 업무를 위해 Cygor를 포크하지 않고 확장할 수 있습니다.
새 플러그인 스캐폴드 생성 (~/.cygor/plugins/my_scanner.py 작성):
cygor plugin create "My Scanner"
로컬 파일 또는 git URL에서 플러그인 설치:
cygor plugin install ./my_scanner.py
cygor plugin install https://github.com/example/cygor-myscanner
검증, 목록, 업데이트, 제거:
cygor plugin validate ./my_scanner.py
cygor plugin list
cygor plugin update --all
cygor plugin remove my_scanner
설치된 플러그인 실행 (내장 모듈과 동일):
cygor enum my_scanner -t 10.10.10.5
세 가지 참조 플러그인이 docs/examples/modules/에 있습니다: 최소 예제, 외부 도구 래퍼, 완전한 주석 템플릿. 전체 플러그인 형식, 옵션/열/뷰, 종속성 처리, 버전 호환성, 선택적 플러그인 허용 목록에 대해서는 **플러그인 개발 가이드**를 참조하세요.
데이터를 수집한 후, Cygor의 웹 UI에 로드하여 스캔 결과를 호스트, 서비스 및 기타 주요 발견 사항에 대한 명확한 시각화로 변환할 수 있습니다. Cygor는 cygor.db라는 파일을 생성하며, 여기에는 Cygor 웹 UI에 모델링하는 데 필요한 데이터가 포함됩니다.
# 기본 사용법 - 기본 호스트/포트에서 시작 (127.0.0.1:8000)
cygor web start
# 모든 인터페이스, 포트 8080에서 시작
cygor web start -H 0.0.0.0 -p 8080
# 사용자 지정 결과 디렉터리로 시작
cygor web start --load-dir /path/to/results
# 상세 출력으로 시작
cygor web start -vv
# 모든 옵션으로 시작
cygor web start -H 0.0.0.0 -p 8080 --load-dir ~/scan-results -vv
전체 옵션 목록은 cygor web start --help를 실행하세요.
# 웹 서버가 실행 중인지 확인
cygor web status
# 실행 중인 웹 서버 중지
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) | 널/인증 세션: 서버 정보, 도메인 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에서 인증 없이 접근 가능한지 확인하고 버전 탐색. |