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バックアップ
- サーバ上
-
メディア
- 物理的に破壊してから処分していますか?
-
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メールはインターネット上を通る
- 傍受されうる
- 制御下におけない
-
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
- 押し返す、先送りする