パスワードを使った認証システムには、「ブルートフォース攻撃(Brute Force Attack)」という危険な攻撃手法が存在します。中でも特に警戒すべきなのが、サーバにアクセスすることなく攻撃できる「オフラインブルートフォース攻撃」です。
この記事では『オフラインブルートフォース攻撃』について、以下の内容をわかりやすく解説します。
- オフラインブルートフォース攻撃とは?
- オンラインブルートフォース攻撃との違い
- オフラインブルートフォース攻撃の流れ
- オフラインブルートフォース攻撃への対策
オフラインブルートフォース攻撃とは?
オフラインブルートフォース攻撃とは、攻撃対象のサーバにリアルタイムでアクセスせず、あらかじめ盗んだ「ハッシュ化されたパスワード(パスワードハッシュ値)」をもとに、攻撃者が自分の手元のPCなどで総当たり攻撃を行い、アカウントのパスワードを入手する攻撃です。
このように、ネットワーク越しにログインを試す必要がないため、オフラインブルートフォース攻撃は
- 回数制限がない
- アカウントロックがない
- ログに残らない
という特徴があります。
補足
- オフラインブルートフォース攻撃は「オフライン総当たり攻撃」や「オフラインブルートフォースアタック」とも呼ばれています。
- オフラインブルートフォース攻撃は,攻撃者がアカウント名(ユーザーIDやメールアドレスなど)とパスワードハッシュ値の組み合わせを入手済であり、かつ使われているハッシュ関数やその他のパラメータも攻撃者に知られているのが前提です。
オンラインブルートフォース攻撃との違い
「オンラインブルートフォース攻撃」と「オフラインブルートフォース攻撃」の違いを以下に示します。
項目 | オンラインブルートフォース攻撃 | オフラインブルートフォース攻撃 |
---|---|---|
攻撃場所 | 実際のサーバに直接アクセスする | 手元のPCなどで実行する |
試行速度 | 遅い(通信による制限があるため) | 速い(制限なし) |
アカウントロックの影響 | 影響あり | 影響なし |
必要な情報 | サーバが稼働中 | パスワードハッシュ値や使われているハッシュ関数等を入手済み |
バレやすさ | 高い(ログに記録されるため) | 低い(外部から見えない、ログが残らないため) |
あわせて読みたい
『(オンライン)ブルートフォース攻撃』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るブルートフォース攻撃(総当たり攻撃)とは?「仕組み」や「対策」をわかりやすく解説!
オフラインブルートフォース攻撃の流れ
オフラインブルートフォース攻撃は、以下のような流れで行われます。
- データベースからパスワードハッシュ値を盗む
- データベースの漏洩やSQLインジェクションなどにより、データベースからユーザーのパスワードハッシュ値が盗まれる。
- アカウント名とハッシュ値の抽出
- アカウント名(ユーザーIDやメールアドレスなど)とパスワードハッシュ値の組み合わせを得る。また、使われているハッシュ関数やその他のパラメータも得る。
- あらゆる文字列のパターンを用意する
- アルファベット、数字、記号を組み合わせた全ての文字列パターンを生成するプログラムを用意する。
- ハッシュ関数でハッシュ化して照合する
- 用意した文字列パターンを同じハッシュ関数で変換し、漏洩したパスワードハッシュ値と一致するかを調べる。
- 一致したらパスワード特定成功
- ログイン情報が復元され、不正アクセスが可能になる。
ユーザーIDやメールアドレスも一緒に漏洩していないと、後のログイン操作に使えないため、IDの流出も不可欠です。
オフラインブルートフォース攻撃への対策
オンラインブルートフォース攻撃と違って、オフラインブルートフォース攻撃は、速度制限やアカウントロックが効かないため、非常に強力です。そのため、以下のようなセキュリティ対策が重要になります。
対策1:パスワードのハッシュに「ソルト」を使う
ソルト(Salt)は、パスワードに付け加えるランダムな値です。同じパスワードでも異なるソルトによりハッシュ値が変わるため、事前に生成した辞書で照合できなくなります。
- ソルトを使わない場合
- password → ハッシュ値
- ソルトを使う場合
- password + ソルト → ハッシュ値
- ハッシュ値が分かっても、元のパスワードが分からない。
厳密には、ソルトは「オフラインパスワードリスト攻撃」や「レインボーテーブル攻撃」には有効だが、「オフラインブルートフォース攻撃」そのものを止める力は弱いです。オフラインブルートフォース攻撃は、攻撃者が「1つずつ全パターンを試す」やり方なので、たとえソルトが付いていても、攻撃者は「パスワード + ソルト」を毎回ハッシュして比較すればいいだけです。結局、試行回数自体が減るわけではありません。
あわせて読みたい
『ソルト(Salt)』については下記の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。 続きを見るハッシュ化で用いる「ソルト(Salt)」や「ペッパー(Pepper)」とは?わかりやすく解説!
対策2:計算コストが高いハッシュ関数を使う
SHA-256やMD5などの通常のハッシュ関数は、本来パスワード保存用に設計されていないため、高速すぎてオフライン攻撃に弱いです。そこで、次のような「意図的に重い処理」のハッシュ関数を使うことで、総当たり攻撃に要する時間を増やすことができます。
- bcrypt
- scrypt
- Argon2(現代的かつ推奨される方式)
これらは、1回のハッシュに0.5秒〜数秒かかるように設計できます。そのため、攻撃者にとっては1億回試すのに何年もかかるような状況になります。
本記事のまとめ
この記事では『オフラインブルートフォース攻撃』について、以下の内容を説明しました。
- オフラインブルートフォース攻撃とは?
- サーバにアクセスせず、盗んだパスワードハッシュを手元で総当たり攻撃する手法
- 特徴:回数制限なし・アカウントロックなし・ログに残らない
- 前提:アカウント名とパスワードハッシュ、使用したハッシュ関数が漏洩している
お読み頂きありがとうございました。