SQL Antipatterns ch20 Readable Passwords
- Readable Password
- Objective: Recover or Reset Password
- Antipattern: Store Pasword in Plain Text
- How to Recognize the Antipattern
- Legitimate Uses of the Antipattern
- コラム: Ethics of Software Development
- Solution: Store a Salted Hash of the Password
- 英語
Readable Password
If you can read passwords, so can a hacker.
- 成りすましにパスワードを聞き出されてしまう運用者
Objective: Recover or Reset Password
- パスワードのあるアプリケーションにおいて、ユーザがパスワードを忘れるのは確実
- 本書執筆当時の大抵のアプリケーションは、パスワード復元、もしくはリセット機能で対処する
- 【補】今もそうね
- Eメール使う
Antipattern: Store Pasword in Plain Text
- Eメールに平文のパスワードを記載して返してしまう
- DB設計に起因する重大なセキュリティ欠陥
- なりすましを許してしまう
Storing Paswords
- 攻撃者がパスワードを盗む機会
- アプリケーションサーバからDBサーバに送信されるパケットを傍受してSQL文を盗み見る
- Wireshark等を使用すれば容易い
- SQLクエリログ漁る
- DBサーバへの侵入を許したらやられる
- DBバックアップ
- サーバ上
- メディア
- 物理的に破壊してから処分していますか?
- アプリケーションサーバからDBサーバに送信されるパケットを傍受してSQL文を盗み見る
Authenticating Passwords
- 平文のパスワードの比較
Don't Lump Together Two Different Conditions
SELECT * FROM Accounts WHERE account_name = 'bill' AND password = 'opensesame';
- 上記SQL文では、下記2種類のログイン失敗を区別できない
- アカウントが存在しない
- パスワードが誤っている
- 後者が繰り返されている場合、攻撃の可能性がある
Sending Passwords in Email
- DBに平文でパスワードが保存されているため、簡単に取得・返却できてしまう
- Eメールで送付するのは深刻なセキュリティリスク
- 傍受
- ログ
- etc.
- 安全なプロトコルを使用したり、メールサーバを厳格に運用したりするのでは不十分
- Eメールはインターネット上を通る
- 傍受されうる
- 制御下におけない
- Eメールはインターネット上を通る
How to Recognize the Antipattern
Legitimate Uses of the Antipattern
- サードパーティサービスとの連携
- 言い換えると、アプリケーションがクライアントである場合
- せめて可逆エンコードして格納
- identificationとauthenticationを明確に区別せよ
- authentication: 「私はXXです」と言っているその人がXXであることの証明
コラム: Ethics of Software Development
- パスワード復元機能を設計するように言われたら丁重に突っぱねろ
Solution: Store a Salted Hash of the Password
- そもそも読める形でパスワードを保存しているのが駄目
Understanding Hash Functions
- 知ってるので略
Using a Hash in SQL
- SHA2関数とかがある
- 使うな(後述)
Adding Salt to Your Hash
- 行ごとにランダムなバイナリ
- 辞書攻撃対策
- レインボーテーブル対策
- 印字不可能なbyteも含めると良い
Hiding the Password from SQL
- SQL文の中に平文のパスワードがあると駄目
- 傍受可能
- SQLログに残る
- アプリケーションコード側でハッシュ化してからSQL文を構築せよ
- salt取得
- 平文のパスワードとsalt結合
- ハッシュ関数適用
- クライアントからアプリケーションサーバまでの経路の傍受はどうするの
- クライアント側でハッシュ化するのは不便
- salt取得しないといけない
- HTTPS等で通信経路を暗号化して妥協する
- クライアント側でハッシュ化するのは不便
Resetting the Password Instead of Recovering the Password
- 平文のパスワードを保存しなくなったので、パスワード復元はできない
- パスワードを忘れたユーザに対してどうする
- 期限付きの仮パスワード発行
- 期限付きのパスワード変更リンクを発行
英語
- clean text
- 平文
- plaintextに同じ
- dire
- very bad
- 恐ろしい、ものすごい
- interpolate
- 改ざんする
- push back
- 押し返す、先送りする