プライバシーモードでもiPhoneでも追跡? エンジニアが知っておくべき「HSTS Super Cookies」

ssl-with-hsts
361件のシェア(そこそこ話題の記事)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、せーのです。
みなさんは数日前から軽く話題になっているクッキーについてご存知でしょうか。その名も「HSTS Super Cookies」と言います。このクッキーは通常のブラウザモードはもちろん、クッキーなどを残さない「プライバシーモード」果ては同一iCloudアカウントのiPhoneまで追跡できる、というではないですかなにそれこわい
ということで今日はこの「HSTS Super Cookies」とは何者で、どういう仕組みでこうなっているのか、現時点での対応状況をご紹介します。

まずは見てください。

まずは百聞は一件に如かず、ということでこちらを御覧ください。


何か数字と文字が合わさったパスワード的なものが出てきていますでしょうか。これがいわゆる「HSTS Super Cookies」を使用した追跡のデモとなります。
この数字と文字の組み合わせはHSTSという機能を使用してブラウザから生成した固有値となります。リロードしても同じ組み合わせが表示されるかと思います。Chromeでこの記事を見ている方はこのURLをコピーしてプライバシーモードで開いてみてください。同じ組み合わせが表示されるかと思います。プライバシーモードで開いた方は設定からクッキーを削除してリロードしてみてください。同じ組み合わせが表示されるかと思います(プライバシーモードで開く前にクッキーを削除すると変わります)。
このしつこさが今ちょっとした問題になっておりまして、同じ組み合わせが表示される=追跡可能、ということですから、プライバシーモードでも追跡可能な悪質なクッキーを使ってプライバシーモードでもユーザーの行動が筒抜けになる可能性がある、と話題になってるわけです。

仕組み

さてこのクッキー、一体どういう仕組みになっているのでしょうか。
まず前提として抑えておきたい技術は「HSTS」という技術です。最近のHTTPSで接続するWebサイトはHTTPで接続してもHTTPSにリダイレクトして繋ぎ直すものが多いですが、これは仕組み的にはHTTPで一旦つないで、HTTPSの同URLに飛ばすわけなのでその間に攻撃されるリスクがあります。HSTSという機能を実装しているブラウザは[Strict-Transport-Security]というヘッダがついているWebサイトを記録し、次回にそのサイトへのHTTPアクセスがあった場合はブラウザ側で判断し、直接HTTPSで接続しに行くというセキュリティ技術です。

この概要を聞いてピン、と来る人もいるかと思いますがHSTSは「ブラウザ内に情報を保存する」という仕組みになっていまして、それが今回の現象につながっています。
HSTSではアドレスの一文字一文字に対してtrueかfalseのbitに変換、それをバイナリ値(PIN、と言います)としてブラウザ内に保存します。そうすることで20億以上のタグ付けが可能になります。上で表示した組み合わせはこのバイナリ値をbase36変換したものです。

経緯

Sam Greenhalghさんというイギリスのコンサルティングの方がこのHSTSという仕組みを悪用することでプライバシーの危険に晒すことができることを発見致しました。通常のクッキーはクライアント内に保存され、ブラウザのプライバシーモードではそのクッキーは参照されない仕様になっています。ですがHSTSはブラウザ内にクッキーとは別の形式で保存されるためプライバシーモードでも参照が可能になるのです。そして更にこのHSTSの値は発行元のWebサイトだけではなく、他のWebサイトからもreadが可能、という事です。この2つの特徴を組み合わせてユーザーがどのサイトを閲覧したかをプライバシーモードからでも取得することが可能になるわけです。

各ブラウザの対応状況

Chrome

Chromeチームは早くからこの問題について議論を重ね、結果をchroniumプロジェクトに反映させてきました。

  • https://code.google.com/p/chromium/issues/detail?id=104935
  • https://code.google.com/p/chromium/issues/detail?id=258667

Chromeチームの結論としては「プライバシーとセキュリティはトレードオフの関係にある」というものでした。
つまりこの問題は「通常モードでのHSTSのPINをプライバシーモードから参照することは出来るが、逆は出来ない。だからいんじゃね」という、とてもGoogleっぽい結論を出しています。

Firefox

Firefoxの考えはGoogleとは違い、バージョン34.0にて改善されています。ですのでFirefoxの場合は最新バージョンにアップデートすればOKです。

IE

IEの場合はもっと単純。そもそもHSTSに対応していないのでPINも保存しようがない、というものです。いいのか悪いのか。。。

Safari

Safariは今のところノータッチ、という現状です。ですので一番やっかいなのはSafariかも知れません。特にiPhoneやiPadに入っているSafariはHSTS PINをiCloudに保存するため、どうやっても消えない、とGreenhalghさんは言っています。が、実機で試してみたところ数分ごとにPINが変わっている事を確認しました。Appleがこっそり改善したのでしょうか。実験の結果は安全だ、と言えるかと思います。結論としては、、、自己責任で。

まとめ

いかがでしたでしょうか。ひとまず各ブラウザとも対策や見解を出していますので、ひとまず安心と言ったところでしょうか。
私はどちらかと言うとHSTSという技術そのものに未来を感じました。これからのWebシステムはhttpsで繋ぐことは常識となりつつあります。HSTSもそのうち常識と言われる技術になっていくかと思います。また、PINを利用した別の面白いことも出来そうな気がします。これからもこの技術をチェックしていきたいと思います。

参考サイト