SSLと中間者の誤解


91

私はこの問題に関連するたくさんのドキュメントを読みましたが、まだすべてをまとめることができないので、いくつか質問します。

  1. まず、私が理解している認証手順について簡単に説明します。これについては誤解されているかもしれません。クライアントが接続を開始し、サーバーがそれに応答して公開鍵、メタデータ、およびデジタル署名の組み合わせで応答します。信頼できる機関。次に、クライアントは、サーバーを信頼するかどうかを決定し、ランダムなセッションキーを公開キーで暗号化して送信します。このセッションキーは、サーバーに格納されている秘密キーでのみ復号化できます。サーバーがこれを実行すると、HTTPSセッションが開始されます。

  2. したがって、上記が正しい場合、問題はそのようなシナリオで中間者攻撃がどのように発生するかです。つまり、誰かがサーバー(例:www.server.com)の応答を公開キーで傍受し、自分がwww.server.comであると思わせる何らかの手段があっても、私のキーを解読することはできません。秘密鍵なし。

  3. 相互認証について言えば、それはすべてクライアントIDに関するサーバーの信頼に関するものですか?つまり、クライアントはすでに適切なサーバーと通信していることを確認できますが、サーバーはクライアントが誰であるかを知りたがっています。

  4. そして最後の質問は、相互認証に代わるものです。上記の状況でクライアントとして機能する場合、SSLセッションの確立後にHTTPヘッダーでログイン/パスワードを送信するとどうなりますか?ご覧のとおり、接続は既にセキュリティで保護されており、サーバーはこの情報を使用して識別できるため、この情報を傍受することはできません。私が間違っている?相互認証と比較したこのようなアプローチの欠点は何ですか(実装の複雑さではなく、セキュリティの問題のみが重要です)?

回答:


103

SSLに対する中間者攻撃は、SSLの前提条件の1つが破られた場合にのみ実際に可能です。以下に例を示します。

  • サーバーキーが盗まれた-攻撃者がサーバーであるように見える可能性があり、クライアントが知る方法ないことを意味します。

  • クライアントは信頼できないCA(またはルートキーが盗まれたCA)を信頼します-信頼できるCAキーを保持している人はだれでも、サーバーを装った証明書を生成でき、クライアントはそれを信頼します。現在ブラウザーに存在するCAの数が多いため、これは実際の問題になる可能性があります。これは、サーバー証明書が別の有効な証明書に変更されたように見えることを意味します。これは、ほとんどのクライアントが非表示にするものです。

  • クライアントは、信頼できるCAのリストに対して証明書を正しく検証する必要はありません。誰でもCAを作成できます。検証がない場合、「ベンの車と証明書」はVerisignと同じように有効であるように見えます。

  • クライアントが攻撃され、偽のCAが信頼されたルート証明機関に挿入されました-攻撃者が好きな証明書を生成できるようになり、クライアントはそれを信頼します。マルウェアは、たとえば偽の銀行サイトにリダイレクトするためにこれを行う傾向があります。

特に#2はかなり厄介です。信頼性の高い証明書にお金を払っても、サイトがその証明書にロックされることはありません。クライアントのブラウザですべての CA を信頼する必要があります。同様に有効なあなたのサイト。また、サーバーまたはクライアントへのアクセスも必要ありません。


4
sslstripなどのツールもあり、httpsリンクをhttpリンクに透過的に書き換えようとします。
mpontillo 2013

3
証明書の検証に関するもう1つのポイントは、クライアントがホスト名を検証する必要があることです。証明書が本物であることを確認するだけでは不十分です。それは、話したいエンティティに発行する必要があります(ここここを参照)。sslstripについては、残念ながら、SSL / TLSを使用したいかどうかを確認するのは最終的にユーザー次第です(ただしHSTSは役立ちます)。
ブルーノ

ブラウザーが暗号化する前にデータをインターセプトするクロム(またはそのほかのブラウザー)プラグインを作成できますか?
Rosdi Kasim 2014

もう1つの理由は、TürkTrustの問題と同様に、「信頼の誤用」です。
ceremcem 2014

1
@Remover実は...#1はサーバー上の秘密鍵であり、本物の公開鍵とペアになっています。このシナリオでは、実サーバーと通信しますが、誰かが途中でトラフィックを解読する可能性があります。証明書を変更することはできません。#2は、完全に異なる証明書を送信することを含み、「信頼された」CAによって発行され、クライアントには正当であるように見えます。攻撃者はあなたに代わってリクエストをプロキシし、その方法でメッセージを見ることができます。どちらも妥協につながりますが、#1はあなたの管理下にあります。#2は残念ながらそうではありません。
基本的な

17

最初に、私が理解している認証手順を簡単に説明します。おそらく、その手順は間違っています。したがって、クライアントが接続を開始し、サーバーが公開鍵、一部のメタデータ、信頼できる機関のデジタル署名の組み合わせで応答します。

サーバーは、X.509証明書チェーンと独自の秘密鍵で署名されたデジタル署名で応答します。

次に、クライアントはサーバーを信頼するかどうかを決定します

正しい。

ランダムなセッションキーを公開キーで暗号化して送り返します。

いいえ。クライアントとサーバーは相互にセッションキーを生成するプロセスを行っており、セッションキー自体はまったく送信されません。

このセッションキーは、サーバーに格納されている秘密キーでのみ復号化できます。

番号。

サーバーはこれを行います

番号。

その後、HTTPSセッションが開始されます。

TLS / SSLのセッションが開始されますが、より多くの工程は、第1があります。

したがって、上記が正しい場合、問題はそのようなシナリオで中間者攻撃がどのように発生する可能性があるかです。

サーバーを偽装し、SSLエンドポイントとして機能します。クライアントは承認手順を省略しなければなりません。悲しいことに、ほとんどのHTTPSセッションでの唯一の承認手順は、ホスト名のチェックです。

つまり、誰かがサーバー(例:www.server.com)の応答を公開キーで傍受した後、何らかの手段で彼がwww.server.comだと思っても、セッションキーを解読することはできません。秘密鍵なし。

上記を参照。復号化するセッションキーはありません。SSL接続自体は安全です。あなたが話している相手が安全でない可能性があります。

相互認証について言えば、それはすべてクライアントIDに関するサーバーの信頼に関するものですか?つまり、クライアントはすでに適切なサーバーと通信していることを確認できますが、サーバーはクライアントが誰であるかを知りたがっています。

正しい。

そして最後の質問は、相互認証に代わるものです。上記の状況でクライアントとして機能する場合、SSLセッションの確立後にHTTPヘッダーでログイン/パスワードを送信するとどうなりますか?ご覧のとおり、接続は既にセキュリティで保護されており、サーバーはこの情報に基づいて識別できるため、この情報を傍受することはできません。私が間違っている?

番号。

相互認証と比較したこのようなアプローチの欠点は何ですか(実装の複雑さではなく、セキュリティの問題のみが重要です)?

ユーザー名/パスワードと同じくらい安全ですが、秘密鍵よりも漏洩がはるかに簡単です。


説明してくれて、ありがとうございます。私が取得できなかった唯一のことは、クライアントがサーバーにセッションキーを送信しないと言ったのはなぜですか?まあ、私は間違った用語を使用したかもしれません。ここでは、このデータの一部を「プレマスターシークレット」と呼んでいますが、とにかく、クライアントから送信され、サーバーの秘密キーで復号化されていませんか?
Vadim Chekry 2013

1
@VadimChekryプリマスターシークレットはセッションキーではありません。これは、両端で独立してセッションキーを生成するために使用されるいくつかのデータの1つです。プロセスは、RFC 2246に記載されている
ローンのマルキ

1
@Chris脆弱性ははるかに少なくなりますが、IPアドレスのスプーフィングが可能です。自分で証明書のピアIDをチェックする代わりはありません。
ローンの侯爵

1
+1これは、ほとんどの場合、かなり良い答えです。ただし、一言では説明が足りない点があります。主要な部分で上記のポイントを拡張または精緻化する場合(つまり、「いいえ」の代わりに、実際に起こるかを簡単に述べることができる場合)、それを決定的な答えにすることができます。それは本当にいくつかのことを明らかにするでしょう。ありがとう。
2016年

1
@ tjt263最初の「no」は、実際に何が発生するかを説明します。次の2つの「いいえ」は、最初の「いいえ」を引き起こしたのと同じ誤解を指し、同じ説明があります。次の最後の「いいえ」は「私は間違っている」を指し、OPから引用されたばかりの情報を指します。したがって、実際にここで欠けていると思うものを理解することは困難です。
ローン侯爵

17

クライアントとサーバーの間の道を行く人は誰でも、httpsで中間者攻撃を仕掛けることができます。これがありそうもまれでもないと思う場合は、インターネットゲートウェイ全体のすべての SSL トラフィックを体系的に復号化、スキャン、再暗号化する市販の製品があることを考慮してください。これらは、「実際の」ssl証明書からコピーされた詳細を使用してオンザフライで作成されたssl証明書をクライアントに送信することで機能しますが、別の証明書チェーンで署名されています。このチェーンがブラウザの信頼できるCAのいずれかで終了する場合、このMITMはユーザーには見えません。これらの製品は主に企業に「安全な」(警察の)企業ネットワークを提供するために販売されており、ユーザーの知識と同意を得て使用する必要があります。技術的には、ISPやその他のネットワークキャリアによる使用を止めるものは何もありません。(NSA が少なくとも1つの信頼されたルートCA署名鍵を持っていると想定しても安全です)。

ページを提供している場合は、ページの署名に使用する公開鍵を示すHTTPヘッダー含めることができます。これは、「安全な」接続についてMITMをユーザーに警告するのに役立ちますが、これは最初に使用するときの信頼技術です。ボブが「実際の」公開鍵ピンの記録をまだ持っていない場合、マロリーは文書のpkpヘッダーを書き換えるだけです。このテクノロジー(HPKP)を使用しているWebサイトのリストは非常に短いです。それは彼らの信用にgoogleとdropboxが含まれています。通常、httpsインターセプトゲートウェイは、HPKPを使用するいくつかの大きな信頼できるサイトのページを通過します。予期していないときにHPKPエラーが表示された場合は、注意してください。

パスワードに関しては、要求をルーティングできるように平文である必要があるドメイン名を除いて、https接続のすべてがhttpsによって保護されます。一般に、ログやブックマークなどでぶらぶらする可能性があるクエリ文字列にはパスワードを入れないことをお勧めします。ただし、httpsが危険にさらされない限り、クエリ文字列は表示されません。


しかし、これは、このMITM機器(トラフィックを復号化/スキャンして再暗号化する機器)が信頼できるCAの1つにアクセスする必要があることを意味しますか?(サーバー証明書を「偽造」するため)。これが起こったとしましょう。その後、誰かがこれをバストし、情報が公開され、プレスキャンダルが発生し、すべてのブラウザからCA証明書が削除されますよね?
つまり

2
いやいや。ゲートウェイの「SSLインスペクション」では、オンザフライで証明書を作成して署名する必要がありますが、これを行うためのルート証明書は必要ありません。チェーンを持つ中間証明書がいくつかあります。チェーンのルートがブラウザーによって信頼されているかどうかによって、証明書エラーが表示されるかどうかが決まります。職場では、フォーティネットルート証明書をインストールするように求められたため、ブラウザで証明書エラーが発生しませんでした。しかし、チェーンがすでに信頼された証明書で終了した場合、それは透過的です。
bbsimonbb 2016

職場の同僚は、これらの企業ネットワークMITMテクニックがGoogleにSSLを強制するのに悪い考えである理由について限られた理解しか使用していませんでした。
EmSixTeen 2018

1
すみません、質問がわかりません。
bbsimonbb 2018

2
  1. 正しい
  2. 正しくない。この種の攻撃では、反復サーバーが要求を受け取り、それを宛先に送信します。そして、その結果であなたに返答します。実際には、コミュニケーションを行う実際のサーバーではなく、中間者サーバーが安全な接続を確立します。そのため、証明書が有効で信頼されていることを常に確認する必要があります。
  3. 正しいかもしれない
  4. 安全な接続が信頼できると確信している場合は、ユーザー名/パスワードを送信しても安全です。

約2-私は、クライアントが接続確立の手順中にサーバーから送信されたメタデータを徹底的にチェックしており、クライアントがすべての証明書を信頼していないと想定しています。それで、そのようなシナリオは可能ではないでしょう-a)クライアントが私が上で言ったことをしていない、またはb)中間者が信頼できるCAによって署名された証明書をどこかに持っている?
Vadim Chekry 2013

1
中間サーバーが有効な証明書を送信することは非常にまれですが、昨年よく覚えていればComodo CAで発生しました。しかし、通常、それが信頼できる接続であれば、完全に安全です。
Boynux 2013

1

セッションキーに関する部分を除いて、あなたが言ったことはすべて正しいです。CAの目的は、中間者攻撃を無効にすることです。それ以外はすべてSSL自体によって行われます。クライアント認証は、ユーザー名とパスワードのスキームに代わるものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.