webアプリケーションのセキュリティについて

http://security.c-inf.com/index.php?cmd=read&page=Web%20Application
Webアプリケーションのセキュリティ

ユーザ認証

* ブルートフォース攻撃(brute force attack)耐性
o 同一ユーザIDに対する連続ログイン試行に失敗した場合、アカウントをロックすること。
アカウントロックの解除は、サイト管理者へのメールや電話での連絡を必須とするのが望ましいですが、
シーケンシャルな文字列で構成されているといった理由で他人のユーザIDを容易に推測可能な場合、
無差別に他人のユーザIDに対してログインを試みてアカウントをロックさせるといった、サイト運用妨害行為を助長する恐れがあります。
アカウントロック後、一定時間*1ログイン試行が行われなかった場合に自動解除する方式を採用することで、
悪意のあるツールによるブルートフォース攻撃でアカウント情報を奪われる危険性を軽減しつつ、ユーザビリティを考慮したサイト運用が可能となります。
ただし、オンラインバンキングシステムやeコマースサイトといった、
預貯金口座情報やクレジットカード情報を含む個人情報を取り扱うサイトでは自動解除方式を採用すべきではありません。

o What’s My Pass? ? The Top 500 Worst Passwords of All Time
よく使われる危険なパスワードトップ500 – GIGAZINE
http://gigazine.net/index.php?/news/comments/20090105_bad_password/

日本のサイトの話ではないのですが、よく使われるパスワードワースト500だそうです。
公開をきっかけとして、ワースト500に含まれるパスワードを優先的に試行するブルートフォース攻撃が流行するかもしれません。
気休めにしか過ぎないかもしれませんが、上記サイトで紹介されている500個の脆弱なパスワードは登録できないようにしたほうが良いでしょう。

* リバースブルートフォース攻撃耐性
o パスワードを固定してユーザIDを次々と変更してのログイン試行を防止する。

* ユーザID
o 推奨:ユーザIDをシーケンシャルに生成しない。
ユーザIDが連番になっていると、別ユーザのユーザIDを容易に推測可能なので、
たとえばリバースブルートフォース攻撃によりアカウントを奪われる可能性が高まります。
o 参考:英大文字、英小文字、数字、記号のうち3種類以上を混在させることを強制する。
システムが自動発行する場合はもちろん、任意のユーザIDを登録可能な場合でもこの仕様を適用するのが望ましいです。
o 参考:メールアドレスをそのままユーザIDとして使用しない。
このような仕様のサイトは多いですが、セキュリティ上推奨できません。

* パスワード
o 必須:パスワードを平文で保存しない。
言わずもがなですが。データベースへ保存する場合は必ずハッシュ化すること。
万が一、SQLインジェクション脆弱性を突かれてユーザ情報が奪われた場合、パスワードまで流出すると被害が劇的に拡大します。
セキュリティに強い関心のあるユーザでなければ、同じパスワードを複数のサイトで使いまわしている可能性が高いためです。
o 必須:英大文字、英小文字、数字、記号のうち3種類以上を混在させることを強制する。
ユーザが任意に決める場合以外に、システムが自動発行する仮パスワードにもこの仕様の適用が必要です。
o 必須:8桁以上の桁数を強制する。
4桁のパスワードは論外です。長さが4桁で文字種が3種類以下なら、数分以内に破られてしまいます。
o 必須:ユーザIDと同一、もしくは一部にユーザIDが含まれるパスワードを禁止する。
ユーザIDが含まれているパスワードはパスワードの意味がありません。
o 必須:メールアドレスやメールアカウントと同一、もしくは一部を含むパスワードを禁止する。
ここでのメールアカウントとは、メールアドレスがsample@example.comの場合、”@”より前の部分のsampleのことです。
o 推奨:パスワードに有効期限を設定する。
同一パスワードを長期間使用させないために必要です。
o 推奨:旧パスワードへの変更禁止期間を設定する。
パスワードの変更を強制しても、旧パスワードへの変更禁止期間を設けていないと、
仮のパスワードに変更した直後に旧パスワードに戻され、結局同一パスワードを長期間使用することと同じになるためです。
o 推奨:パスワードの変更履歴を管理する。
少なくとも3世代分は記録します。記録に残っているパスワードへの変更を禁止します。