はじめに
サイバーセキュリティにおいて、 腕ずく とは、成功するまでクレデンシャルまたは暗号鍵を推測する、体系的で徹底的な試みのことである。ブルートフォースは、レッドチーム作戦、侵入テスト、パスワード回復演習の基礎となる技術である。ブルートフォースは「魔法のハッキング」ではなく、定義された境界内での持続性と体系的な探索の運用化である。辞書攻撃からAIを活用したハイブリッド・アプローチに至るまで、ブルートフォースは反復計算がいかに人間やシステムの防御を克服できるかを実証している。
自動化とAIの時代であっても、ブルートフォース(総当たり攻撃)は依然として重要である。ブルートフォースは、攻撃対象領域の露出、パスワード・ポリシーの有効性、レート制限メカニズムについてエンジニアに教えてくれる。さらに、最新のAI駆動型セキュリティ・プラットフォームは、これらのテクニックをベースに、制御、監査、再現可能な方法で攻撃を編成する。

ブルートフォースが重要な理由
ブルートフォースは、実用的なテストツールと概念的なベンチマークの両方の役割を果たす。認証の弱点を浮き彫りにし、パスワード・ポリシーのエントロピーを測定し、レート制限のような防御的コントロールを検証する、 MFAおよびロックアウト機構。
関連性の主要な次元:
- セキュリティ・コントロールの検証 - 防御が徹底的な攻撃の試みに耐えられるかどうかを確認する。
- AIトレーニング・グラウンド - AIを活用した侵入テストエージェントの実証データを提供。
- 赤と青のチーム編成 - オフェンステクニックの理解とディフェンス戦略の実行を橋渡しする。
ブルートフォース・ツールの分類と機能
ブルートフォース・オペレーションは、ターゲット、戦略、自動化レベルによって分類することができる。
| カテゴリー | コア機能 | 能力特性 | ツール例 |
|---|---|---|---|
| パスワード当て | アカウントに対するユーザーパスワードの試行 | 辞書とハイブリッド、並列実行、リトライ管理 | ヒドラ、メドゥーサ、パタトール |
| キークラッキング | 暗号キーの復元 | GPUアクセラレーション, ルールベース突然変異, 分散 | 切り裂きジョン、ハッシュキャット、カインとアベル |
| ウェブフォーム攻撃 | ブルートフォース・ログイン・エンドポイント | レート制限の認識、セッション管理、CAPTCHA処理 | Burp Suite Intruder、OWASP ZAP、wfuzz |
| プロトコル攻撃 | SSH、RDP、FTPなどの攻撃プロトコル | 接続プール、自動再試行、ステルス・チューニング | Ncrack、THC-Hydra、BruteSSH |
エンジニアリングの実践ブルートフォースの運用
運用することで、ブルートフォーステストの再現性、監査可能性、拡張性を確保する。
重要な実践
- アウトプット契約: パラメータ、タイムスタンプ、結果を含む構造化出力(JSON / SARIF / カスタムスキーマ)。
- コンテナ化された実行各ツールを隔離された環境で実行する。
- マイクロサービスとメッセージバスKafka/RabbitMQ経由でチェーンし、リモートで起動可能なジョブとしてツールをラップする。
- CI/CDの統合コントロールされた段階で攻撃を引き起こす。
- 証拠と監査証跡キャプチャコマンド、stdout/stderr、終了コード、ホスト情報。
Pythonの例 - 並列パスワード試行と統一JSON出力:
インポート サブプロセス、json、concurrent.futures、os、time
targets = ["10.0.0.5", "10.0.0.7"] ターゲット数
RESULT_DIR = "./out"
os.makedirs(RESULT_DIR, exist_ok=True)
def run_brute(tool_cmd):
meta = {"cmd": tool_cmd, "started_at": time.time()}。
try:
proc = subprocess.run(tool_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, timeout=600, text=True)
meta.update({
"rc": proc.returncode、
"stdout": proc.stdout、
"stderr": proc.stderr、
"duration": time.time() - meta["started_at"].
})
except Exception as e:
meta.update({"rc":-1, "stdout":"", "stderr": str(e), "duration": time.time() - meta["started_at"]})
リターンメタ
def brute_target(target):
hydra_cmd = ["hydra", "-L", "users.txt", "-P", "passwords.txt", f "ssh://{target}"]。
hashcat_cmd = ["hashcat", "-m", "0", "hashes.txt", "wordlist.txt"].
res = {"target": target, "runs":{}}
res["runs"]["hydra"] = run_brute(hydra_cmd)
res["runs"]["hashcat"] = run_brute(hashcat_cmd)
return res
def main():
out = {"generated_at": time.time(), "results":{}}
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as ex:
futures = {ex.submit(brute_target, t): t for t in TARGETS}.
for fut in concurrent.futures.as_completed(futures):
t = futures[fut].
out["results"][t] = fut.result()
with open(f"{RESULT_DIR}/brute_results.json", "w") as fh:
json.dump(out, fh, indent=2)
if __name__ == "__main__":
main()
Penligent:200以上のハッキングツールによるインテリジェントなペンテスト
Penligentは、ブルートフォースおよび広範なペンテストのワークフローを、AIによってオーケストレーションされた監査可能なプロセスに変換します。自然言語による指示を解析することで、このプラットフォームは自動的に適切なツール(Hydra/Hashcatのようなブルートフォースエンジンを含む)を選択し、調査結果を検証し、リスクに優先順位を付け、専門的なレポートを作成します。
シナリオの例:
命令だ: "サブドメインXに脆弱なパスワードとSSHの暴露がないかチェックする"
ワークフロー:資産の発見→エンドポイントの列挙→辞書/ハイブリッド総当たり→検証→レポート生成。すべてのメタデータ、ログ、出力はトレーサビリティのために記録されます。
CI/CD パイプラインにおいて、Penligent は継続的なセキュリティフィードバックを保証します。コードやインフラストラクチャの変更があれば、ターゲットスキャンが実行され、優先度の高い発見があればチケットが生成され、緩和ガイダンスが自動的に添付されます。ブルートフォース攻撃は、企業のコンプライアンス基準の範囲内で安全に運用されます。
ハードニング・プレイブック - 優先順位をつけたエンジニアリング対策
クイック優先順位マトリックス
| 優先順位 | コントロール | インパクト | 努力 |
|---|---|---|---|
| P0 | すべての特権アカウントにMFAを強制する | 非常に高い | ロー・ミディアム |
| P0 | 認証時に既知の漏えい認証情報(HIBP)をブロックする。 | 非常に高い | ミディアム |
| P0 | 認証エンドポイントにおけるアダプティブ・レート制限+ボット管理 | 非常に高い | ミディアム |
| P1 | 強力なパスワード・ハッシュ(Argon2idと調整されたパラメータ) | 高い | 低い |
| P1 | マルチIP/速度異常のSIEM検出 | 高い | ミディアム |
| P2 | セッションとデバイスのリスクスコアリング(SSO/リスクエンジン) | ミディアム | ミディアム-ハイ |
| P2 | 疑わしいフローに対するWAFルール+チャレンジページ | ミディアム | ミディアム |
| P3 | カナリア・アカウント/クレデンシャル・スタッフィング用偽装トラップ | ミディアム | ミディアム |
| P3 | SSH/RDPのハード化(ジャンプホスト、条件付きアクセス) | ミディアム | ロー・ミディアム |
多要素認証(MFA)の実施 - 実践的なポリシー
- 方針:すべての特権ロールと、プロビジョニング/インフ ラ/UI コンソールにアクセスするスタッフに MFA を義務付ける。徐々に全ユーザーに展開。管理者にはフィッシングに強い方法(FIDO2/WebAuthn、ハードウェアキー)を推奨。
- 導入のヒント:
- SSO(OIDC/SAML)の場合は、次のものが必要です。
アクアまたはauthnContextClassRefMFAを示す。 - リスクの高いアクション(パスワード変更、APIキー作成)に対してステップアップ認証を強制する。
- MFAをネイティブにサポートできないレガシーアプリの場合は、MFAを強制するSSOやプロキシを前面に出す。
- SSO(OIDC/SAML)の場合は、次のものが必要です。
- モニタリングMFAが有効な特権ユーザの%、失敗したMFA試行、およびステップアップイベントを追跡する。X%を超える特権ログインにMFAがない場合、アラートを出す。
既知の流出認証情報をブロック - HaveIBeenPwned(HIBP)統合の例
- アプローチ:登録時および各ログイン時(またはパスワード変更時)に、候補のパスワードを流出パスワードフィードと照合する。k-anonymity HIBP APIを使用して、完全なパスワードの送信を避ける。パスワードの漏洩が確認された場合、ブロックして強制的にローテーションさせる。
- HIBP k-匿名化フロー(スケッチ):
- SHA-1(パスワード)→プレフィックス(最初の5文字)とサフィックスを計算する。
- クエリー
https://api.pwnedpasswords.com/range/{prefix}→ 接尾辞+カウントのリストを受け取る。 - サフィックスが存在するかどうかをチェックし、存在する場合は違反として扱う。
- 方針リーク回数がしきい値以上(例えば100回以上)のパスワードは拒否する。発生をログに記録し、ユーザーに通知する。
コード(Python)スケッチ:
import hashlib, requests
def is_pwned(password):
s = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
prefix, suffix = s[:5], s[5:].
r = requests.get(f"")
return suffix in r.text
# 使用法: パスワード設定/変更時、または定期的に保存されたクレジット(ハッシュ化された)をチェックする。
適応型レート制限とボット管理 - 具体的な設定
- 原則(a)IP、(b)アカウント、(c)IP+アカウント、(d)ASN/ジオロケーションによるレート制限。トークン・バケットを組み合わせて、バースト耐性と繰り返し失敗時のプログレッシブ・バックオフを実現。
- Nginxの例 (IPによる基本レートの制限):
# nginx.conf スニペット
limit_req_zone $binary_remote_addr zone=auth_zone:10m rate=5r/s;
サーバ
ロケーション /login {
limit_req zone=auth_zone burst=10 nodelay;
proxy_pass http://auth_service;
}
}
- クラウドフレア / WAFボット管理を有効にし、不審なスコアに対するチャレンジを設定し、リクエスト速度が速い認証POSTに対するカスタムWAFルールを作成する。
- 進歩的な対応最初のしきい値→429またはCAPTCHAを提供、それ以上の重大度→一時的にブロック/パスワードのリセットを要求。
アカウントロックアウトとパスワード散布の緩和 - 調整されたポリシー
- 問題素朴なアカウントごとのロックアウトにより、攻撃者はアカウントに対するサービス拒否をテストすることができます。パスワードの散布は、多くのアカウントで共通のパスワードをいくつか試すことで、アカウントごとのロックアウトを回避します。
- 推奨される較正方針:
- アカウント単位N_failures = 10 分以内に 10 回失敗した後 → チャレンジを増やす(CAPTCHA / MFA ステップアップ)または一時的なソフトロック(例:15 分)。
- 噴霧検知同じIP / ASNから多くの異なるアカウントが単一の失敗を示す場合→IPスロットルをトリガーするか、発信元IPにCAPTCHAを要求する。
- プログレッシブチャレンジ→MFA→一時ロック→管理者レビュー。
- ルール例:
if failures(account) >= 10 && unique_ips(account) >= 5 -> パスワードリセットとMFAを要求する。.
パスワードの保存とハッシュ化 - Argon2id 推奨パラメータ
- 使用しないプレーンSHAまたは無塩化MD5。最新のKDFを使う。 アルゴン2イド 必要に応じてbcryptにフォールバックする。
- ベースラインパラメータの推奨値(2025年ガイダンス):
時間コスト = 3,メモリーコスト = 64 * 1024KB(64MB)、平行度 = 2- ハードウェアが許す限り、上向きに調整する。- ソルト(≥16バイト)とKDFパラメータをハッシュとともに格納する。
- ローテーションもしパラメータが古ければ、次回ログイン時に再ハッシュする。高価なハッシュによるDOSを避けるため、bcrypt/Argon2の平均的なタイミングをキャッシュ/モニターする。
SIEM / 検出ルール - Splunk & KQL の例
同一IPから異なるアカウントへの多数のログイン失敗を検出する(クレデンシャルスプレー指標):
index=auth_logs action=failure| stats dc(user as users, count as failures by src_ip| where users > 20 AND failures>50
ユニークIPの多い不審なアカウントを5分で検出:
index=auth_logs earliest=-5m | stats dc(src_ip as uniq_ips, count as fails by user | where uniq_ips > 5 AND fails > 10
KQL (Azure) の例
サインインログ
| where ResultType != 0 and TimeGenerated > ago(10m)
| 失敗 = count(), distinctIPs = dcount(ClientIP) by UserPrincipalNameを要約する。
| 失敗数 > 10かつdistinctIPs > 4の場合
ボット管理とWAFの統合 - プレイブック項目
- ボット管理ソリューション(Cloudflare Bot Management、Akamai、PerimeterX)を導入する。ボットのスコアを意思決定に関連付ける(例:スコア 80 以上 → チャレンジ、95 以上 → ブロック)。
- クリティカルな認証エンドポイントの場合:POSTボディのパターンを検査するようにWAFルールを設定し、既知のクレデンシャル・スタッフィング・シグネチャをブロックし、疑わしいIPをスロットルする。
- WAFのログが、再生/POC検証を実行するのに十分なリクエストコンテキストをSIEMに確実に供給する。
欺瞞とカナリア勘定 - 検出の増幅
- 強力だが現実的な名前で、監視対象の「カナリア」アカウントを作成する。このアカウントに対する試みが失敗した場合、(通常使用されていないため)信頼性の高い脅威となる。
- 優先度の高いアラートを生成し、ソースIPを自動ブロックするために、カナリアを計装化する。正当なトラフィックを受信しないおとりログイン・エンドポイントを使用する。
テスト、測定基準、SLA - 成功の測定方法
追跡すべき主な指標
- クレデンシャル・スタッフィング・イベントの平均検出時間(MTTD)。
- ソース IP のブロック/修復へのエスカレーションの平均応答時間(MTTR)。
- MFAが有効な%特権ログイン。
- ブルートフォース検出の偽陽性率(チューニング後の狙い<5%)。
- アカウント乗っ取り成功数(目標:0)、発見から阻止までの時間。
テスト
- レッドチームによるシミュレーション/エージェントによるペンテスト実行をスケジュールし、コントロールを検証する。管理されたクレデンシャル散布テストにステージング環境を使用する。インシデントのプレイブックと統合する。
結論
ブルートフォースは、教育ツールとしても、運用上の必要性としても、依然として基本的なテクニックである。ブルートフォースは、適切に設計され、監視され、AIによって制御されることで、単純な攻撃手法から、再現可能で監査可能なセキュリティテスト戦略へと進化します。Penligentのようなプラットフォームは、インテリジェントな自動化がいかにブルートフォースを安全に運用し、より広範なペンテストワークフローと統合し、継続的に防御を強化できるかを示しています。

