ブルートフォースアタック完全ガイド:仕組み・対策・検出・実践的防御

ブルートフォースアタックとは

ブルートフォースアタック(総当たり攻撃)は、攻撃者が考え得る全てのパスワードや鍵候補を自動的に試すことで認証を突破しようとする攻撃手法です。オンラインサービスのログインフォームやSSH、Webアプリの認証APIに対して行われる「オンライン型」と、パスワードハッシュや暗号鍵のダンプデータを入手した上でオフラインで何千万・何十億もの候補を高速に照合する「オフライン型」に大別されます。

歴史的背景と実用性

初期のコンピュータでは試行回数が限られていましたが、近年のGPUやASICの計算性能向上、クラウドの安価なコンピューティング資源の普及により、総当たりの現実性は格段に高まりました。また、パスワード使い回しや辞書語をパターン化した攻撃(ディクショナリ攻撃、ハイブリッドアタック、レインボーテーブル攻撃など)が組み合わさることで成功率はさらに上昇します。

攻撃の種類

  • 単純総当たり(Pure Brute-Force):可能な文字列すべてを順に試す。文字種と長さにより総組合せ数が指数的に増える。
  • ディクショナリ攻撃:共通パスワードリストや辞書、リークデータを用いる。人間が選びやすいパスワードを狙う。
  • ハイブリッド攻撃:辞書語に数字や記号の付加、文字の置換(@→a, 3→e など)を組み合わせて効率化。
  • クレデンシャルスタッフィング:他サービスから流出したメールアドレス/パスワードの組を用いてログインを試みる。ブルートフォースに似るが、既知の組合せを使う点で区別される。
  • オフライン攻撃:ハッシュ化されたパスワードデータを入手した場合、認証サーバーの制約を受けずに非常に大量の試行が可能。

技術的原理:なぜ成功するのか

人間が覚えやすいパスワードは総当たりに対して脆弱です。例えば短く英字のみ、または辞書語そのままのパスワードは組合せ空間が小さく、攻撃成功までの平均試行回数が低くなります。加えて、パスワードがハッシュ化されていても、適切なソルトや計算コストの対策が取られていないと、オフラインでは高速に多数の候補を照合できます。

パスワード強度とエントロピー

パスワードの強度は「エントロピー(情報量)」で表現できます。文字種が増え、長さが長ければエントロピーは上がります。例えば英小文字26文字で長さ8では理論上の空間は26^8ですが、実際のユーザーは辞書語や生年月日など偏った選択をするため実効的強度は低くなります。パスワードポリシーは複雑さだけでなく、長さ(パスフレーズ)とランダム性を重視すべきです。

ハッシュ化・ソルト・ペッパーとKDF

パスワード保護のベストプラクティスは、平文保存を避け、以下を組み合わせることです:

  • 一意のソルト(Salt):各ユーザーごとにランダムなソルトを付与し、レインボーテーブルや同一パスワード検出を防ぐ。
  • 鍵導出関数(KDF):bcrypt、scrypt、Argon2などの計算コスト・メモリコストを持つ関数でハッシュ化。これによりオフライン試行のコストを増加させる。
  • サーバ側の秘密(Pepper):ソルトとは別にアプリケーション側で保持する短い秘密値。データベースが漏洩してもPepperが別途保護されているとオフライン攻撃の成功率を下げる。

オンライン攻撃の制限と検知

オンライン攻撃は認証システムの応答を制限することで防ぎます。一般的な対策は次の通りです:

  • レートリミット:同一IPやアカウントへの短時間の試行回数を制限する。
  • アカウントロック/遅延応答:一定回数失敗したら一時ロック、あるいは応答を遅延させる。
  • MFA(多要素認証):パスワードが破られても追加認証で防御。
  • CAPTCHAやリスクベース認証:異常なアクセスには追加の検証を要求する。
  • IPレピュテーションとWAF:既知の悪性IPやボットのトラフィックを遮断する。

オフライン攻撃への防御設計

オフライン攻撃はサーバー側の設計で抑止します。具体的には:

  • 強力なKDF(Argon2推奨)を採用し、適切なコストパラメータを設定する。定期的にコストを引き上げる計画を持つこと。
  • 各ユーザーにユニークなソルトを使用し、ソルトは十分長いランダム値にする。
  • データベースのアクセス制御・暗号化を強化し、ダンプ流出自体を防ぐ。
  • 可能ならPepperを別システム(例:HSMや別途管理された構成)で管理する。

検出技術とログの活用

ブルートフォース攻撃の兆候を早期に検出するには、詳細なログと分析が必要です。監視ポイントは次のとおりです:

  • 短時間に失敗したログイン試行の急増(IP単位・アカウント単位)
  • 異常な地理的位置やUser-Agentの変化
  • パスワードリセットや多量の2FA登録要求の増加
  • 失敗ログに共通のパターン(同じパスワード候補や辞書語)

SIEMやログ解析ツールを用い、閾値アラートや機械学習による異常検知を組み合わせることが有効です。

実運用での対策チェックリスト

  • パスワードの平文保存を禁止し、Argon2/bcrypt/scrypt等を使用する。
  • ソルトはユニークで適切な長さのランダム値にする。
  • MFAを必須または高リスク取引で強制する。
  • ログイン試行に対してレート制限とアカウントロック方針を実装する。
  • ログを保存・監視し、異常検知を行い、自動対応ルールを整備する。
  • ユーザー教育を行い、パスワード使い回しの危険性とパスワードマネージャーの利用を推奨する。
  • 定期的に侵入テストやレッドチーム演習で攻撃シナリオを検証する。

法的・倫理的考慮

ブルートフォースは多くの国で不正アクセス禁止法等に抵触します。防御や検出のために攻撃トラフィックをシミュレートする際は、組織のポリシーと法規制を遵守し、明確な許可のもとで実施してください。

事例と教訓

過去の多数のインシデントでは、旧弱いハッシュやソルトの不備、あるいはMFA未導入、パスワードポリシーの欠如が被害を増幅させています。流出データの二次被害(クレデンシャルスタッフィング)を防ぐためにも、速やかなパスワードリセット、流出通知、影響範囲の調査が重要です。

今後の動向

計算能力の向上に伴い、より強力なKDFや多要素認証の普及が進む一方で、攻撃側もボットネットやクラウドリソースを利用して規模を拡大しています。パスワードに依存しない生体認証やパスワードレス技術(WebAuthnなど)の採用が進むと予想されますが、移行期間中の旧システム保護が課題です。

開発者向け具体的実装アドバイス

  • 認証APIは失敗時に詳細な情報を返さない(ユーザー存在の有無を明かさない)。
  • レートリミットはIPだけでなく、ユーザー、デバイス指紋、トークンベースで多次元に実施する。
  • KDFパラメータは運用監視とコスト試算の上でチューニングし、定期的に値を更新する仕組みを組み込む。
  • パスワード強度チェックはクライアントとサーバ双方で実施し、既知のリークリストと照合する。

まとめ

ブルートフォースアタックはシンプルだが効果的な攻撃手法であり、オンライン・オフラインの双方で現実的な脅威です。対策は単一の施策では不十分で、ハッシュ化・ソルト・KDF・MFA・レートリミット・ログ監視・ユーザー教育を組み合わせた多層防御が必要です。加えて、脅威の進化に合わせてKDFパラメータの見直しやパスワードレス認証の検討を継続することが重要です。

参考文献