Skip to content

SSL is not about encryption

fujieda edited this page Aug 19, 2012 · 2 revisions

これはTroy Hunt氏によるSSL is not about encryptionの和訳である。@ten_forward氏による翻訳もあるが訳がわかりづらいので、ほとんど参考にせずに翻訳し直した。 SSL is not about encryption.The basic purpose of SSL is not encryption. のように訳す。同様な文例に Copyright is not about copying. がある。@ten_forward氏による「SSLは暗号化のためのものではありません」は誤訳である。ここでは「主目的ではない」と訳す。

SSLの主目的は暗号化ではない

SSLの主目的は保証することである。サイトが本物であることにある程度の信頼性を与えることで、データの送受信を行う際にデータが横取りされることも改ざんされることもなく意図した相手に届くと確信できるようにする。

先週私は(やや)冗談めいたパスワードの悪い運用例名鑑という記事を書いた。その記事で、SSLのしるしがブラウザに表示されないSSLを用いていないサイトを批判した。それに対して「HTTPSでPOSTされるからデータは暗号化される。不安や誤解を広めるのをやめろ。」と強くたしなめるコメントがいくつかあった。

私はこれらの反応を慎重に検討して、その記事の最後を少し更新した。しかし、HTTPからHTTPSへのデータのPOSTに関する議論を単なる注釈にとどめるのはもったいない。この議論における重大な誤解は、資格情報が転送される際に暗号化されてさえいれば、SSLが正しく運用されていると信じていることだ。では、そう信じることの何が間違いなのかと、なぜSSLには暗号化以外の要素があるのかをよく見てみよう。

明確な表示のない仮定の保証

まず暗号化の要素だけについて、よく知られているサイトをいくつか見てみよう。あなたの資格情報をネットワーク上で保護してくれるのはこれらのサイトのうちどれだろうか?

Facebook logon page Twitter logon page Dropbox logon page

どれでも? 確かにどのサイトも資格情報を転送するときにSSLを用いている。しかし当然、上に示したイメージからそれを知る方法はない。いくらか技術力があれば、そのページのソースコードを調べて、HTTPSのアドレスにフォームがPOSTしていることを確認できたかもしれない。あるいは、リクエストが行われたときにFiddlerを見てプ、ロトコルがHTTPからHTTPSに変わることを確認できたかもしれない。

問題は、ほとんどの人たちがあなたのようにはできないことだ。彼らがサイトの相対的なセキュリティを判断するために使えるのは、ほとんどのブラウザにあるSSLインジケーターが示す情報だけである。それがなければ、おそらくサイトの経歴に基づいて、そのサイトが本物であり資格情報が適切に保護されると彼らは仮定する

明確な表示の有無によらない暗黙的な保証

少し異なった視点でほかのサイトをいくつか見てみよう。

Returning users logon with a padlock Signing in with a padlock

Logging in securely with a padlock Logon with a padlock

これらのサイトが築こうとしている保証は暗黙的なものだ。これらのサイトは「ログインフォームに南京錠のイメージがあるから安全だよ。」と言っている。もちろん、これにはそんな意味はない。このよくある南京錠のイメージは、リクエストがSSL上で本当に行われているときにブラウザが直接表示するものに奇妙に似ている。しかし、これは正統性とセキュリティを暗示しようとしているだけだ。

ここで言いたいのは、ブラウザがSSLの存在をはっきり示して証明書を調べられるようにしていないなら、これらのアイコンには何の意味もないということだ。実際に、SSLの有無にかかわらずこれらのアイコンは正しくないものを暗示しているため、とても誤解を招きやすくセキュリティについて誤った認識を生んでいる。

明確な表示を行う明示的な保証

すべてのメジャーなブラウザは、明示的な保証を示すことでサイトの有効性と正統性をユーザーに能動的に伝える機能を持っている。これは一般にURLバー上で最も良さそうな方法で行われる。実装ごとに独自性があるがそのコンセプトは一致している。

Chrome showing the presence of PayPal SSL Firefox showing the presence of PayPal SSL Safari showing the presence of PayPal SSL Opera showing the presence of PayPal SSL Internet Explorer showing the presence of PayPal SSL iPhone showing the presence of PayPal SSL

これらのブラウザのいずれも、ただしiPhoneのSafari (その点ではiPhoneのOperaも)を除けば、保証をより確かにするためにSSL証明書の詳細を簡単に表示できる。

Details of an SSL certificate

この例題の意義は、サイトの正統性の検証を容易に行えることと、データが暗号化されて転送される確証が―明示的に―与えられていることである。そしてこの問題の核心、すなわち「HTTPSでログオンフォームをロードしないと、資格情報を送信する前のサイトの出所の保証がまったくない」ことを示している。

HTTPからHTTPSへのパターンを悪用する

この方法のリスクを説明するもっとも簡単な方法は典型的な中間者攻撃を観察することである。

攻撃者が犠牲者間に独立した接続を作り犠牲者間のメッセージを中継して、実際にはすべての会話が攻撃者によって制御されているのにプライベートな接続で互いに直接対話していると犠牲者に信じさせる。

中間者攻撃のシナリオにはPCとサーバーの間のどこかに攻撃者が必要である。インターネットは本質的にデータを中継する箇所が非常に多い。

ワイヤレスLANを利用できる喫茶店の典型的な状況を想定してみよう。そこではクライアントがワイヤレスルーターに接続して、インターネットゲートウェイから建物を出て、ISPを経由してたくさんのインターネットノードを伝わり目的のサーバーに到達する。

HTTPでログオンフォームをリクエストすることが問題なのは、これらの地点のどこでもそれを改ざんできるし、我々にはそのことがわからないことである。最近の例であるチュニジア政府によるユーザー名とパスワードの収集を取り上げよう。

チュニジアインターネット庁(Agence tunisienne d'InternetすなわちATI)が、ユーザー名とパスワードを獲得するJavaScriptを埋め込んでいるのが見つかって非難されている。そのコードはGmail、YahooとFacebookのログインページから見つかっていて、チュニジアの活動家のアカウントの乗っ取りが最近多発している原因であると言われている。

このケースでは、これらのサイトのログオンページに小さなスクリプトをISPが埋め込んでいた。この影響が完全に明らかではなかった場合のために…

Tech Heraldが依頼した4人の別々の専門家が、それぞれに我々の見解、つまり埋め込まれたコードがログイン資格情報を吸い出していることを認めた。

しかし、この記事に関係する重要な話は少し下のほうにある。

埋め込まれたJavaScriptは、サイトがHTTPSの代わりにHTTPでアクセスされたときにだけ現れる。各テストケースで、GmailとYahooはHTTPを用いたときだけ危険にさらされることが確認できた。一方Facebookは、デフォルトのアクセス方法がHTTPなので、チュニジアのユーザーは手動でHTTPSのアドレスを入力する必要がある。

これらのサイトがHTTPSでPOSTするかは問題ではなく、セキュアでない方法でログオンフォームを読み込むことを許していたことが、ISPがコンテンツを細工してHTTPSでPOSTされる前に資格情報をJavaScriptで奪い取れた原因である。ログオンフォームがHTTPSでセキュアにリクエストされていたら(Facebookの例のように)、悪用はまったく行らなかっただろう。

独裁国家の悪者のISPは一つだけだが、公衆Wi-Fiに接続するときにいつでも起こることを考えよう。喫茶店のインターネットアクセスのシナリオを見てほしい。

やや驚きではあるが、インターネットはそのように設計されているので、ゲートウェイルーターがHTTPリクエストを乗っ取ることができるし、それを止めることもできない。この場合、リダイレクトならブラウザでURLが変わっているのを確認できる。しかし、悪意のあるゲートウェイが透過プロキシで、HTTPリクエストを凶悪なマルウェアを満載したwww.google.comのクローンに振り向けても、それに気づく方法はない。リダイレクトではないし、URLも変わらないからである。

これは少々のやっかいごとではすまない。我々は公衆Wi-Fiに接続するたびにこの危険に身をさらしている。当然、サイトの出所の明確な保証を、資格情報を渡す前に得られないと問題は一層ひどくなる。

HTTPからHTTPSへのパターンを悪用する方法はほかにもある。それはDNS汚染である。たとえば、正統なアドレスへのリクエストをまったく別のホストに振り向けられるなら、悪者のホストが悪影響があるようにコンテンツをねつ造できる、たとえばFacebookのログオンページの偽物を作ることができる。しかし、そのホストで正統なSSL証明書を提供することは当然できないし、証明書がないなら何かがおかしいとわかる。しかしもう一度繰り返すが、それが可能なのはSSL証明書がログオン前に当てにできる場合であり、HTTPからHTTPSでPOSTするパターンには当てはまらない。

OWASPの見解

もちろん、これらの問題については常にほかの見解があるので、Security Stack Exchangeに「HTTPからHTTPSへのポストは悪い習慣か」という質問をしてフィードバックを求めた。受理された回答はOWASP SSLベストプラクティスを参照している。

ログインのために訪問するページはSSLを用いなければならない

ユーザーがフォームを埋めるページそのものがHTTPSのページでなければならない。そうでなければ攻撃者がユーザーに送られるページを改変して、フォームが送信される場所を変更したり、入力されたときにユーザー名とパスワードを盗むJavaScriptを挿入するかもしれない。

聞き覚えがあるだろう。これまでの議論を通じて立証してきた論点を思い出させる。ログオンページがSSLでリクエストされていないなら、その出所について何の保証もない。

セキュリティはSSLが始まりでも終わりでもない。

(常に一人はいるが)ほかの誰かに言われなくてもそれはその通りで、適切にSSLを運用したとしてもトランスポート層より上のどんな種類のセキュリティも保証されない。ウェブサーバーから先は完全な修羅場かもしれない。

SSLはフールプルーフでもない。SSLが部分的に悪用された例は数多く存在する(例えば、200台のPS3がMD5を破るために使われた)。それは簡単ではないが可能である。

それでもなお重要なのは、SSLが我々の持つ外部に対する唯一の保証であることだ。我々が扱うデータの一貫性とサイトの保証に信頼を与えるために、どこででも使える唯一のものである。

ログオンページのロードにあえて使わずに資格情報をPOSTするためにSSLを運用するのは、このセキュリティに必須の層をその潜在力よりずっと安く安売りするようなものだ。Facebookの同類たちやTwitterやDropboxでさえもこのアプローチを取っているのは実に奇妙なことである。

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 3.0 非移植 ライセンスの下に提供されています。