wasbook reading #8

「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」読書会の第8回。
なんとか年内には…。今回読んだのは以下の範囲。

  • 5章 代表的なセキュリティ機能
    • 5.1 認証

5章 代表的なセキュリティ機能

5.1 認証

認証は、めんどう。正直あまり作りたくない。
認証に必要な機能って、認証だけじゃなくて、いろいろ必要になる。最低でもこれくらい。

  • ログイン
  • アカウントロック
  • パスワード保存
  • パスワード再発行
  • ログアウト

これらを正しく実装するのは大変。

  • ログインできないと認証機能ではない。
  • アカウントロックできないと、ブルートフォース攻撃で不正にログインされる可能性が高まる。
  • パスワードの保存にはソルトとストレッチングが必須。
  • パスワードの再発行(パスワードの変更)は、次回の部分で解説されているので割愛。
  • ログアウトではちゃんとセッションを破棄しなくてはならない。

総当り攻撃もいろいろあって、こんな感じ。

  • 辞書攻撃
  • ジョーアカウント探索(IDとパスワードが同じアカウント)
  • 逆総当たり攻撃(パスワードを固定して、IDを変えてアタック)
  • 変形総当たり攻撃への対策

パスワードは通常はハッシュ化されて格納されている。平文で入っているのは論外。
単純にハッシュ化されているだけでは、総当たりで解析されてしまう可能性が高いので、ソルトやストレッチングを行う。ソルトはパスワードに文字列を追加してからハッシュ化すること。ストレッチングはハッシュ化を複数回繰り返すこと。ソルトとストレッチングは実装が簡単で非常に効果的なので、パスワードを保存する場合には必ず実施したい。

自動ログインについては、難しいからちゃんと本文を読みましょう。

レインボーテーブルについては、いまひとつ理解しきれていない。レインボーテーブル自体は知っている、仕組みもなんとなくわかった。レインボーテーブル - Wikipedia も読んだ。
でもレインボーテーブル自体の実装と、検索方法がいまひとつ理解しきれていない。特定のハッシュが、どうやって見つかるのかがわからない。特に還元関数が実際にはどのような関数なのか、ぴんとこない。ハッシュ関数はなんとなくわかるんだけど。
このあたりは id:Kango が調べてくれるので、楽しみに待つ。

まとめ

最近はOAuthやOpenIDで、認可や認証が行われることが多いけど、やっぱりユーザ管理を実装しなくてはならないこともある。ひとつ間違えると、非常に大きな問題になるので、しっかり設計して実装する必要がある。
また開発者の視点で考えると、どうやって実装するかも大事だけど、どうやってテストするかというのも大事だと思う。単純にログイン出来るかというだけでなく、アカウントロックされるか、パスワードはしっかり保護されているかといったことを十分に確認する必要がある。
ま、いっぺんには覚え切れないので、実装するときには読み返そうとおもう。


wasbookに関するものは、こちらのタグで。



電子書籍版はこちら。