DB 漏えいに備えるペッパー
Web サービスでは,利用者のパスワードを,利用者ごとにランダムなソルトを用いて Argon2id でハッシュ化し,ソルトとともに DB に保存している。SQL インジェクションや DB のバックアップの流出によって DB の内容だけが漏えいした場合でも,攻撃者が推測したパスワードをハッシュ値と照合できないようにしたい。追加する対策として,最も適切なものはどれか。
- アソルトの長さを 16 バイトから 64 バイトに延ばし,事前計算したハッシュ値の表による解析を一層困難にする。
- イ全利用者に共通の秘密値(ペッパー)を DB とは別のシークレット管理サービスや HSM に保管し,ハッシュ化の際に組み合わせる。
- ウソルトをハッシュ値と同じテーブルではなく,同じ DB 内のアクセス権限を分けた別のテーブルに保存する。
- エ同一の利用者 ID で一定回数ログインに失敗した場合に,その ID を一定時間ロックする。
正解と解説を見る
正解 イ
この問題の基礎知識
- ソルトは利用者ごとのランダムな値でハッシュ値とともに DB に保存され,同じパスワードでもハッシュ値を変えて事前計算による解析を防ぐが,秘密の値ではない。
- DB を入手した攻撃者は,候補のパスワードをソルトとともにハッシュ化して保存値と比べるオフライン攻撃を行える。Argon2id などの計算コストの高い関数は,照合 1 回あたりの時間を増やす。
- オンライン攻撃はサービスのログイン機能に対して試行する攻撃,オフライン攻撃は入手したハッシュ値に対して手元で照合する攻撃であり,アカウントロックは前者にだけ効く。
アソルトの長さを 16 バイトから 64 バイトに延ばし,事前計算したハッシュ値の表による解析を一層困難にする。
ソルトはハッシュ値とともに DB に保存されるので,DB を入手した攻撃者はソルトを使って候補のパスワードを 1 件ずつ照合できる。ソルトを延ばしても事前計算への耐性が変わるだけで,この照合は防げない。
イ全利用者に共通の秘密値(ペッパー)を DB とは別のシークレット管理サービスや HSM に保管し,ハッシュ化の際に組み合わせる。正解
ペッパーは DB と分離して保管する秘密値なので,DB だけを入手した攻撃者はハッシュ値を計算できず,推測したパスワードを照合できない。OWASP は,SQL インジェクションやバックアップの入手で DB だけが漏えいした場合の追加の防御として挙げている。
ウソルトをハッシュ値と同じテーブルではなく,同じ DB 内のアクセス権限を分けた別のテーブルに保存する。
SQL インジェクションではアプリケーションの DB 接続の権限で読める範囲が漏えいし,照合に使うソルトのテーブルも通常は読める。バックアップの流出では DB 全体が流出するので,テーブルを分けても照合は防げない。
エ同一の利用者 ID で一定回数ログインに失敗した場合に,その ID を一定時間ロックする。
アカウントロックは,ログイン画面に対するオンラインの推測攻撃を抑える対策である。漏えいしたハッシュ値に対するオフラインの照合はサービスを経由しないので,試行回数の制限は効かない。
検証用の出典出典照合済み
OWASP Password Storage Cheat Sheet / OWASP Authentication Cheat Sheet照合の根拠(6 件)
- イ(正解): ペッパーは,SQL インジェクションやバックアップの入手で DB だけにアクセスされた場合にハッシュの解析を防ぐ
It prevents an attacker from being able to crack any of the hashes if they only have access to the database, for example, if they have exploited a SQL injection vulnerability or obtained a backup of the database.
OWASP Password Storage Cheat Sheet · Peppering(新しいタブで開きます) - イ(正解): ペッパーは DB とは別に保管する。ウ(誤り): 照合に必要な値を同じ DB 内に置いても DB の漏えいで一緒に流出する
Unlike a password salt, the pepper should not be public and should not be stored along with the generated hash . The pepper should be stored separately from the password database.
OWASP Password Storage Cheat Sheet · Common requirements for peppering strategies(新しいタブで開きます) - イ(正解): ペッパーはシークレット管理(vault)や HSM に保管する
Peppers are secrets and should be stored in "secrets vaults" or HSMs (Hardware Security Modules).
OWASP Password Storage Cheat Sheet · Common requirements for peppering strategies(新しいタブで開きます) - イ(正解): ペッパーは全利用者で共通の値である
A pepper is shared between stored passwords , rather than being unique to an individual password like a password salt.
OWASP Password Storage Cheat Sheet · Common requirements for peppering strategies(新しいタブで開きます) - ア(誤り): ソルトがあっても攻撃者は各ソルトを使って 1 件ずつ照合でき,ソルトの長さを延ばしてもこの照合は防げない
As the salt is unique for every user, an attacker has to crack hashes one at a time using the respective salt rather than calculating a hash once and comparing it against every stored hash.
OWASP Password Storage Cheat Sheet · Salting(新しいタブで開きます) - エ(誤り): アカウントロックを含むログインの試行制限は,通常の対話的な手段(ログイン画面)での推測を抑える仕組みであり,漏えいしたハッシュ値のオフライン照合には効かない
Login Throttling is a security mechanism used to prevent an attacker from making too many attempts at guessing a password through normal interactive means, it includes the following controls:
OWASP Authentication Cheat Sheet · Login Throttling(新しいタブで開きます)