Yahooのログインシール

Yahoo! Japanが新たなフィッシング対策を導入したそうです(産総研との共同実験のとは別物です)。

ヤフーは26日、フィッシング詐欺対策として、Yahoo! JAPAN IDのログイン画面に、ユーザーが設定した写真や文字列を表示する「ログインシール」機能を追加した。ログイン時にこれがきちんと表示されるているかどうか確認することで、偽のログイン画面に気付きやすくなるとしている。

ヤフー、フィッシング対策として“マイログイン画面”の設定機能

シール画像を登録した際に、永続的なCookieをブラウザにセットする仕組みです。ログイン画面にアクセスすると、Cookieがサーバに送信され、サーバは対応する画像をログインフォームの隅に付けた画面をレスポンスします*1

通常、フィッシングを避けるためにユーザがすべきことは、①アドレスバーのURL(ドメイン)を目視確認、②SSL証明書のエラーが出ない、の二つですが、ログインシールを使うと①の面倒で間違いやすいステップを簡単にすることができます。

これは、Cookieは保存の際に指定されたドメインのページにしか送信されないからです(yafuu.co.jpにはCookieは送られません)。ユーザは、Cookieが送信された(=正しいドメインである)事を、シール画像が適正であることで確認します。

Cookieを使うことによって生じる制約はあるものの、ユーザにとってはプラグインの類が不要で、また判りやすいというメリットがあります。サイト運営者側の負担も、それ程大きくはないでしょう。

色々な工夫

実際に使ってみましたが、色々な工夫がされていて面白いです。

シール画像のURLを推測困難に

仮に、シール画像のURLが固定であり、シール画像を返すCGICookieだけをチェックしているとします。その場合、imgタグでシール画像を返すCGIのURLを指定するだけで、偽ページ上に本物のシール画像を表示できてしまいます。

(当然ですが)Yahooではシール画像のURLを推測困難なものにしています。

がぶせる攻撃を困難に

正規のログイン画面のID/パスワードのフォーム部分に、CSSのレイヤーやポップアップウィンドウなどで偽フォームをかぶせる攻撃手法があります。元のフォームは隠れて、画像は隠れないよう、正確な位置に偽フォームをかぶせなければなりませんが、不可能な攻撃ではありません。

特に、偽ページ内のiframeにログイン画面をロードして、CSSレイヤーを使って偽フォームをかぶせた場合、見た目上で偽物と見破るのは困難です。

対策は難しいところですが、Yahooでは、フォームの背景に画像が掛かるようにし、偽フォームをかぶせた際に、表示が不自然になるようにしています。また、ログイン画面がiframe内にロードされないよう、JavaScriptで制御しています*2

ドメインの設計

Cookieはログイン画面と同じドメインに発行されます。ドメインを限定することで、漏洩の可能性は少なくなります。

一方シール画像は、yahoofs.jp ドメインに置かれています。細工されたシール画像ファイルをアップロードして、XSSに悪用する類の攻撃を防ぐためかもしれません。

最後に

安全性については、一長一短というところでしょうか。

前述したように、ログインシールは、アドレスバーのURLを目視確認する作業を、シール画像を確認する作業にすりかえます。

URLの目視確認では、技術的な要件は、「アドレスバーのURLが改竄されない」ことだけです。これはとてもシンプルです。

ログインシールは仕組みが少々複雑な分、Cookie、画像のURL、画像そのものを盗む(単純なショルダーハックなど)、あるいは上記の「かぶせる」方法など、攻撃のバリエーションが多いです。ただ、URLの目視確認よりも、人間系のミスが起きにくいと言えます。

最後に、Yahooの実装で気になったのは、非SSLでもログインシールが使えてしまうことです。これは結果的に、SSLでの信頼性を下げることとなります。

*1:昨年末の日記で紹介した、バンクオブアメリカが採用したSiteKeyと似た仕組みです。

*2:このJavaScriptの制御は回避可能かもしれませんが。