Pcapファイルの内容を調べていると、HTTPSであるにもかかわらず、一部のURLが表示されているように見えました。これらは主に証明書URLを含むペイロードの内部でも発生しますが、HTTPペイロードのように見えるものの内部にHTTPS URLも表示されます。
HTTPS URLが本当に秘密にされているかどうかを誰かが決定的に言うことができますか?
いくつかのパラメータをURLに入れたいので、これらのパラメータが簡単に明らかにされたくないので、私はこれを心配しています。
HTTPSでは、URLのパスとクエリ文字列が暗号化されますが、クライアントがサーバー名表示(SNI)を使用している場合、ホスト名はSSLハンドシェイク内でプレーンテキストとして表示されます。これは、同じIPアドレスの背後に独自の証明書を持つ異なるホストを持つ唯一の方法であるため、最近のすべてのクライアントはSNIを使用しています。
URLの残りの部分(ホスト名を除くすべて)は、暗号化された接続内でのみ使用されます。したがって、理論的には、暗号化自体が破られない限り(秘密キーの侵害、中間者攻撃など)、攻撃者から隠されます。実際には、攻撃者はURLの残りの部分に関する情報を取得する間接的な方法を持っている可能性があります。
しかし、ほとんどの場合、HTTPSを使用すればかなり安全であり、少なくともプレーンなHTTPよりもはるかに安全です。
HTTPヘッダー(要求されたURLを含む)とHTTPSのアプリケーションデータの両方が暗号化されます。
ブラウザーはハンドシェイク中に Service Name Indication 拡張で送信するため、要求されたホスト名を確認できます。これにより、サーバーは一致するSSLを選択できます証明書。
Wiresharkを使用すると、他のいくつかの回答で述べられているように、SNIによりホスト名を見つけることができます。また、証明書の一部を見ることができます。あなたが見たhttps URLはおそらく [〜#〜] crl [〜#〜] sまたは [〜#〜] ocsp [〜#〜] のURLでしたs。
誰かがあなたのサイトを歩いてあなたのURLにアクセスし、返されたページのサイズと暗号化されたページで返されたページのサイズを比較することができるなら、彼らはあなたのプログラムがどのページを呼んだかを推測することができます。しかし、いくつかのパラメーターをURLに入れて非表示にしたいので、これはあなたのケースでは大きな攻撃ベクトルではありません。 URLがhttps://my.server/api?user=scott&password=tiger&highscore=12345
、そしてAPIは常に1000〜1010バイトのページを返します。1007バイトが返されても、ユーザーやパスワードを決定したり、ハイスコアを入力する方法はわかりません。
[〜#〜]ただし[〜#〜]
httpsは、MITM攻撃を防止する場合にのみ安全です。 fiddler 、 charles または mitmproxy などのツールは、トラフィックを自身にリダイレクトし、偽の証明書をクライアントに提示し、トラフィックを復号化し、ログに記録し、re -暗号化し、元のサイトに送信します。
クライアントがOSのトラストストアに依存している場合、攻撃者は自分の証明書をトラストストアに挿入でき、クライアントは何も認識しません。上記のツールのREADMEには、これを行う方法の説明があります。
したがって、復号化を防ぐためにhttpsにアクセスする場合、実際にURLを送信する前に、サーバーから返された証明書が正しいかどうかを確認する必要があります。 certificate pinning がOS /プログラミング言語でどのように機能するかを確認し、上記のツールを使用して、公開前にクライアントが偽の証明書を検出し、URLを送信しないことを確認します。
Webサイトをクロールしてパケットサイズを比較することなどにより、トラフィック分析を実行できます。存在する動的コンテンツの量、または [〜#〜] url [〜#〜] から参照される画像に応じてどのURLにアクセスしたかを正確に把握することができます。
プレゼンテーションSSLトラフィック分析攻撃-Vincent Berg(YouTube)がそれを説明し、いくつかの機能的なデモがあります。
攻撃者がクライアントにアクセスできる場合、可能性があります。概要については、以下を参照してください https://wiki.wireshark.org/SSL#Using_the_.28Pre.29-Master-Secret
たとえば、Javaクライアントでは、jSSLKeylogなどのエージェントをアタッチして、想定される暗号化されたコンテンツ/ URLを傍受してログに記録できます。通信のPreMaster-Secretがプロセスの任意の手段で取得できる場合、キャプチャされた暗号化通信は後でデコードできます。