HTTPS の中身は見えないけれど、推測できる!?
地図パズル製作所の都島です。今日は地図パズル製作所でも使っている、HTTPS の弱点の話を書きたいと思います。地図パズル製作所を始めて聞いたという方は、まず一度遊んでみてください!ログインすると、ランキングにも参加できます!!
はじめに
今日の記事は、古い論文ですが以下の論文に基づいて書いています。
この論文が書かれたときから、Web 技術も大きく変わりました。でも、HTTPS についてはあまり大きく変わっていないのではないかと思っていますが、もしかしたら、時代遅れになっていることもあるかもしれません。それと、この論文の英語は私にはなかなか難解で、理解できていないところもあります。なので、間違っていたらコメントで教えていただけないでしょうか。よろしくお願いいたします。
HTTPS とは
HTTPS とは HTTP Secure の略です。つまり、HTTP 通信を安心に行うためのものです。たいていの場合は、SSL/TLS を用いて実現されています。HTTP over SSL/TLS というわけです。なので、SSL/TLS に脆弱性がなければ、HTTPS の中身を覗き見ることはできない、ということになります。
では、HTTPS ではどこからどこまでが暗号化されるのでしょうか。HTTPS は TCP を用いて通信を行い、中の HTTP パケットを暗号化します。なので、TCPパケット、IPパケットは暗号化されていないので、ポート番号や IP アドレスは他の人に知られてしまって当然ですが、HTTP パケットに含まれるウェブサイトの URL や、リクエストメソッド(GET、POST、PUT)などは暗号化されているので分からないはず、ということになります。
HTTPS の弱点
今回は例として、とても簡単なウェブサイトを考えます。二つのウェブページしかないサイト(example.com)で、ページA (https://example.com/a.html) とページB (https://example.com/b.html) があります。最近の Web 技術ではクライアントサイドルーティング、プリフェッチ、キャッシュ、、、なんてものもありますが、今回はこういうことは無視して、ブラウザで指定した URL に対応する HTML を毎回サーバーに取りに行く、ということとします。画像ファイル、CSS ファイル、 JS ファイルもないものとします。HTML ファイルだけを取得します。
さて、私都島がこのサイトのどちらかのページにアクセスしたとします。その経路中に、攻撃者がいたとします。この攻撃者私がアクセスするパケットを全て取得でき、暗号化されていないTCP パケットまでは全て見ることができるものとします。そうすると、この攻撃者は IP アドレスは分かるので、私がどのドメインにアクセスしているかは分かります。(IP と ドメインは一対一対応しているものとします。)これは、HTTPS の仕様上当然のことです。でも、私がページA にアクセスしているか、ページ B にアクセスしているかは分からないはずだ、と多くの方が思っています。でも、ほとんどの場合、私がどちらのページにアクセスしているか、攻撃者が分かってしまうのです。なぜでしょうか?
攻撃者は事前にページ A とページ B にアクセスし、トラフィックを解析しておきます。ここでは、下りの TCP パケットの合計データサイズのみ解析するものとします。そうすると、ページ A が 1kB で、ページ B が 2kB だったとします。その場合、私がページ A にアクセスした場合も、暗号化されているので微妙に変わるとはいえ、たいてい 1kB くらいになります。ページ B にアクセスした時は、たいてい 2kB くらいになります。
ここで多くの方は気づかれたと思います。暗号化されていても、パケットサイズを用いることで、どちらのページにアクセスしているかを推測することができてしまうのです。
まとめ
今回は HTTPS の弱点を紹介しました。HTTPS は絶対安全、と多くの方が思っていますので、びっくりされた方も多いのではないでしょうか。
でも、現実は先ほど考えたように簡単ではありません。ウェブサイトのページ数は膨大ですし、JS や CSS、画像もあります。なので、見ているページを推測するのは、そう簡単にはいきません。でも、その代わり、攻撃者が攻撃に使用できるデータも、example.com からのダウンロードのデータサイズだけではありません。もちろんアップロードのデータサイズも利用できますし、他のドメインから JS をダウンロードしたりしていますので、そのドメインとのやり取りで発生するデータサイズ、なんてものも利用できたりします。なので、あるドメインのJS を特定のページだけで使っている、なんてことがあったら、一発で攻撃者にばれてしまいます。
最後に
HTTPS の弱点、どうだったでしょうか。私は最初に知った時、とてもびっくりしました。古い論文に書いてあることですが、私は今でもこの攻撃がある程度有効だと思っています。でも、キャッシュがあったり、プリフェッチがあったり、クライアントサイドルーティングがあったりするサイトだと、さすがに無理なような気もします。もし、詳しい方いらっしゃいましたら、最新の情報など教えてください。
Discussion
読み応えのある面白い記事を、ありがとうございます。
励みになります!コメントありがとうございます!
確かにパケットサイズからこちらの動向がバレてしまうケースがありますね!勉強になりました!
ただ、どのリソース(ページ)をリクエストしたのか?というユーザーのリクエスト情報が攻撃者にバレてしまうことはどのような脆弱性に繋がるのでしょうか?やりとりしているHTTPの機密データ(例えばパスワードなど)がバレなければ直接的な脆弱性はないように思えるのですが?
コメントありがとうございます!確かにそうですね、、、。私も専門家ではないので直感的な回答になってしまうのですが、私はブラウザの閲覧履歴って他の人に見られたくないです。どういう傾向のある人かとか、個人的なことがバレてしまうからです。そういう情報がいくらかでも覗き見されてしまうかと思うと、気持ち悪いです。(アクセスしているドメインがバレるのは、仕様上どうしようもありませんが、、) 特に病院などのサイトでどのページを見ているか判別できてしまうと、どういう病気を患っているか推測できてしまうので、今回の記事の攻撃で要配慮個人情報がばれてしまうこともあるように思います。
確かにそうですね!!!
そこから、脆弱性をつかれる可能性は大いにあり得るとおもいました!