GoogleはChromium BlogでGoogle Chrome内部設計の解説シリーズを展開している。17日(米国時間)に公開されたSecurity in Depth: The Password Managerではセキュリティマネージャの機能と使い方の指針が紹介された。結論から言えば、いつもは補完されているようなフィールドが補完されなかった場合には違和感を感じるように注意し、そのサイトが目的のサイトであるかよく考えてみてほしい、ということになる。
パスワードマネージャは主に次の2つの作業を担当するプログラム。
- ユーザに対して複雑で推測されにくいパスワードを使うように提案する
- フィッシング詐欺サイトなど問題のあるサイトを注意深く調査し、問題があると判断した場合にはパスワードの補完入力を防ぐ
パスワードマネージャはパスワードフィールドに以前入力したパスワードを自動的に入力する。その際に安全であるかどうかはSame origin policyと呼ばれる「同じサイトからしか読み込みを許可しない」ポリシーにしたがって行われる。Same origin policyを拡張して安全性を向上させようという取り組みはいくつもあるが、あまり意味がないことも多い。たとえばSame origin policyはスキーム、ホスト、ポートを対象としパスは対象としない。つまりhttps://example.com/loginでパスワードが保存された場合、https://example.com/blogでもパスワードは補完される。対象をパスまで拡張すればより厳密にチェックできるようになりそうな気がするが、その方法には次のような問題がある。
- Facebookのように複数のパスからログインできるサイトではパスワード管理が面倒くさいことになる
- パスを動的に生成しているサイトではパスワードマネージャとしての意味がない
- こうした拡張を実施してもJavaScriptなどほかの機能がSame origin policyをベースとしているため効果が低い
JavaScriptを使えないようにしておいても、HTMLを工夫することでパスワードを自動的に入力補完しユーザがボタンをクリックすることでパスワードを攻撃者のサイトへ送信させるという処理も可能だ。Chromeはパスワードのサブミットをチェックすることでこうした問題にも対処しているが、本質的にチェックを厳密にすれば使いにくくなり緩くすれば危険になる、どっちに転がってもユーザはブラウザを信用しなくなるというところに注目する必要がある。
パスワードマネージャは補完すべきではないと判断した場合、自動的に入力を補完しないようになるが、ここで問題はユーザがその動作を「ブラウザが正しく動作していない」と判断してしまい、パスワードを手動で入力してしまうことだ。これでは意味がない。パスワードマネージャはアルゴリズムに従ってページを判断する。補完されないといった違和感を感じたときは指をとめてよく考えてみたい。もしそれが正しいページだった場合には、バグとして報告することを検討してほしいとされている。