オフラインブルートフォース攻撃とは?「仕組み」や「対策」をわかりやすく解説!

パスワードを使った認証システムには、「ブルートフォース攻撃(Brute Force Attack)」という危険な攻撃手法が存在します。中でも特に警戒すべきなのが、サーバにアクセスすることなく攻撃できる「オフラインブルートフォース攻撃」です。

この記事では『オフラインブルートフォース攻撃』について、以下の内容をわかりやすく解説します。

  • オフラインブルートフォース攻撃とは?
  • オンラインブルートフォース攻撃との違い
  • オフラインブルートフォース攻撃の流れ
  • オフラインブルートフォース攻撃への対策

オフラインブルートフォース攻撃とは?

オフラインブルートフォース攻撃とは、攻撃対象のサーバにリアルタイムでアクセスせず、あらかじめ盗んだ「ハッシュ化されたパスワード(パスワードハッシュ値)」をもとに、攻撃者が自分の手元のPCなどで総当たり攻撃を行い、アカウントのパスワードを入手する攻撃です。

このように、ネットワーク越しにログインを試す必要がないため、オフラインブルートフォース攻撃は

  • 回数制限がない
  • アカウントロックがない
  • ログに残らない

という特徴があります。

補足

  • オフラインブルートフォース攻撃は「オフライン総当たり攻撃」や「オフラインブルートフォースアタック」とも呼ばれています。
  • オフラインブルートフォース攻撃は,攻撃者がアカウント名(ユーザーIDやメールアドレスなど)とパスワードハッシュ値の組み合わせを入手済であり、かつ使われているハッシュ関数やその他のパラメータも攻撃者に知られているのが前提です。

オンラインブルートフォース攻撃との違い

「オンラインブルートフォース攻撃」と「オフラインブルートフォース攻撃」の違いを以下に示します。

項目オンラインブルートフォース攻撃オフラインブルートフォース攻撃
攻撃場所実際のサーバに直接アクセスする手元のPCなどで実行する
試行速度遅い(通信による制限があるため)速い(制限なし)
アカウントロックの影響影響あり影響なし
必要な情報サーバが稼働中パスワードハッシュ値や使われているハッシュ関数等を入手済み
バレやすさ高い(ログに記録されるため)低い(外部から見えない、ログが残らないため)

あわせて読みたい

(オンライン)ブルートフォース攻撃』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

オフラインブルートフォース攻撃の流れ

オフラインブルートフォース攻撃は、以下のような流れで行われます。

  • データベースからパスワードハッシュ値を盗む
    • データベースの漏洩やSQLインジェクションなどにより、データベースからユーザーのパスワードハッシュ値が盗まれる。
  • アカウント名とハッシュ値の抽出
    • アカウント名(ユーザーIDやメールアドレスなど)とパスワードハッシュ値の組み合わせを得る。また、使われているハッシュ関数やその他のパラメータも得る。
  • あらゆる文字列のパターンを用意する
    • アルファベット、数字、記号を組み合わせた全ての文字列パターンを生成するプログラムを用意する。
  • ハッシュ関数でハッシュ化して照合する
    • 用意した文字列パターンを同じハッシュ関数で変換し、漏洩したパスワードハッシュ値と一致するかを調べる。
  • 一致したらパスワード特定成功
    • ログイン情報が復元され、不正アクセスが可能になる。

ユーザーIDやメールアドレスも一緒に漏洩していないと、後のログイン操作に使えないため、IDの流出も不可欠です。

オフラインブルートフォース攻撃への対策

オンラインブルートフォース攻撃と違って、オフラインブルートフォース攻撃は、速度制限アカウントロックが効かないため、非常に強力です。そのため、以下のようなセキュリティ対策が重要になります。

対策1:パスワードのハッシュに「ソルト」を使う

ソルト(Salt)は、パスワードに付け加えるランダムな値です。同じパスワードでも異なるソルトによりハッシュ値が変わるため、事前に生成した辞書で照合できなくなります。

  • ソルトを使わない場合
    • password → ハッシュ値
  • ソルトを使う場合
    • password + ソルト → ハッシュ値
    • ハッシュ値が分かっても、元のパスワードが分からない。

厳密には、ソルトは「オフラインパスワードリスト攻撃」や「レインボーテーブル攻撃」には有効だが、「オフラインブルートフォース攻撃」そのものを止める力は弱いです。オフラインブルートフォース攻撃は、攻撃者が「1つずつ全パターンを試す」やり方なので、たとえソルトが付いていても、攻撃者は「パスワード + ソルト」を毎回ハッシュして比較すればいいだけです。結局、試行回数自体が減るわけではありません。

あわせて読みたい

ソルト(Salt)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

対策2:計算コストが高いハッシュ関数を使う

SHA-256やMD5などの通常のハッシュ関数は、本来パスワード保存用に設計されていないため、高速すぎてオフライン攻撃に弱いです。そこで、次のような「意図的に重い処理」のハッシュ関数を使うことで、総当たり攻撃に要する時間を増やすことができます。

  • bcrypt
  • scrypt
  • Argon2(現代的かつ推奨される方式)

これらは、1回のハッシュに0.5秒〜数秒かかるように設計できます。そのため、攻撃者にとっては1億回試すのに何年もかかるような状況になります。

本記事のまとめ

この記事では『オフラインブルートフォース攻撃』について、以下の内容を説明しました。

  • オフラインブルートフォース攻撃とは?
    • サーバにアクセスせず、盗んだパスワードハッシュを手元で総当たり攻撃する手法
    • 特徴:回数制限なし・アカウントロックなし・ログに残らない
    • 前提:アカウント名とパスワードハッシュ、使用したハッシュ関数が漏洩している

お読み頂きありがとうございました。