前回の続き(V2)からです。
今回の記事を書くにあたっての経緯などです。
ASVSとは
本記事で紹介している内容(各No)は自分で作った資料のNoをもとにしています。
※資料は最下部に記載
※前回からマークダウン記法を変更しました。
#V2:認証に関する検証要件
No.6 アカウントへのアクセス回復に使用できるすべてのアカウントID認証機能(プロファイルの更新機能,パスワードの再設定,トークンの無効化や紛失,ヘルプデスク,IVRなど)が,一義的な認証機構として攻撃耐性を持つ
アカウントの乗っ取りがされた場合の救済措置しての上記機能が、
ハッカーによる攻撃でシステムダウンしないこと
ここが潰されてしまうとアカウントの復旧ができなくなります。
No.7 パスワード変更機能に,古いパスワード,新しいパスワード,パスワードの確認が含まれている
一部を除く(メールアドレスからの変更)は上記3項目でパスワード変更を承認すること。
これはログイン中に限っての話になります。
ログイン前では「古いパスワード」がそもそもわからないので、
メールアドレスによる変更機能を用意してあげる必要があります。
(もしくは、サポートセンターなど)
No.9 アカウントパスワードに十分な強度を持つ暗号化ルーチンを使われており,この暗号化ルーチンがブルートフォース攻撃に耐えられる
レベル2の項目です。
パスワードを平文でDBに入れることはまず無いので、
その際の暗号化ルーチン(hashやcryptなどなど)がブルートフォース(総当たり)攻撃に耐えられるか。
ログイン画面はWEBサービスの入り口なのでブルートフォース攻撃を受けやすいです。
そのため、複雑な暗号化(2重3重など)をしていると返って、
その箇所が脆弱になります。(システムダウンなど)
対策としては、
・堅牢かつ軽い処理で暗号化を行う。
・暗号化ルーチンに入る前にアカウントロックの処理を行う。
No.10 認証情報は暗号化された適切なリンクを使用して転送され,ユーザに資格情報の入力を求めるすべてのページや機能は暗号化されたリンクを使用して転送されている
「暗号化された適切なリンク」はおそらく「https」のことだと思います。
もし「http」でアクセスされた場合は、
「https」にリダイレクトするか、4xx系の画面を表示すれば問題ありません。
No.11 パスワード再設定機能やその他のパスワード回復経路から現在のパスワードが露呈せず,
新しいパスワードが平文でユーザに送信されない
「現在のパスワードが露呈せず」はパスワード変更画面にて、
現在のパスワードをもう一度設定した場合のエラーメッセージで
「現在と同じパスワードは設定できません」のようなに意味のメッセージを出さないこと。
これにより現在のパスワードが判明し乗っ取りが行われる可能性があります。
なので、エラーメッセージとして表示するのであれば「過去に使用された~」などとした方が良いかもしれません。
(そもそもメッセージの表示をせずにエラーとしても問題ないと思います。)
「新しいパスワードが平文でユーザに送信されない」について、パスワードの通知はしなくて結構です。
No.12 ログイン機能,パスワード再設定機能,またはアカウントを忘れた場合の機能を使ってアカウント情報の取得はできない
上記の機能からアカウントの情報(氏名、住所、電話番号)が取得できないこと。
アカウント情報はあくまでもログイン後以降で表示させましょう。
No.13 アプリケーションのフレームワークやアプリケーションが使用するすべての構成要素でデフォルトパスワード("admin/password"など)を使用しない
管理者権限などのアカウントにはWEBサイト独自のものを使用しましょう。
ブルートフォース攻撃により突破される可能性があります。
No.14 ブルートフォース攻撃やDoS攻撃など認証機構に対する一般的な自動攻撃を防止するために,リクエスト制限機能が存在する
アカウントロックやIP制御を掛けれる仕組みを作っておきましょう。
外部ファイル形式で実装できればなお良しです。
No.16 パスワードの再設定やその他のパスワード復帰方法において,ソフトトークン,モバイルプッシュ,またはオフラインのパスワード回復機構が使用されている
ネットワークを使った回復機構以外にSMSなどを使った認証方法を用意する。
メールアドレスや外部アプリなどの使用でも大丈夫かも?
またV2の続きは次回で~
▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽
ASVS 3.0.1まとめ - Google スプレッドシート
▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△▲△