
credential-attacks-toolkit — Updated!
認可されたセキュリティテストのための完全なクレデンシャル攻撃スイート — SSH、FTP、Webログイン、ブルートフォース、辞書攻撃
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, … | 1ユーザーに対するワードリスト |
| スプレー | spray | ユーザーリストに対する1つのパスワード(ロックアウト安全) |
| コンボ | combo | 全ユーザー × 全パスワード |
| スマート | smart | ユーザー名/会社由来のパターン生成 |
| デフォルト | defaults | 200以上の既知のサービスデフォルトを試行 |
| マルチターゲット | multi | ホストリストに対する同一攻撃 |
| フルパイプライン | full | 全プロトコル、1つのレポート |
対応プロトコル
| # | プロトコル | モジュール | デフォルトポート | 備考 |
|---|---|---|---|---|
| 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 | Raw 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インストール(編集可能またはホイールから)
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
プロキシローテーション
プロキシファイルを渡します(1行に1プロキシ、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: lint + テストマトリックス + 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を提出する前に、まずissueを開いてください。
すべてのコントリビューションは、SECURITY.md の倫理的使用ポリシーに従う必要があります。
責任を持って使用してください。倫理的にテストしてください。法的に遵守してください。