web-dev-qa-db-ja.com

Apache2のエラーコードAH02032(「SNIを介して提供されるホスト名とHTTPを介して提供されるホスト名が異なる」)によってどのような種類の攻撃が阻止されますか?

私は私のApache2サーバーで次のようなメッセージをログに記録しました

 [ssl:error] [pid 28482] AH02032: Hostname xxx.yyy.zzz.www:443 provided via SNI and hostname xxx.yyy.zzz.www provided via HTTP are different

これらのエラーメッセージの1つはresearchscan367.eecs.umich.eduからのリクエストによってトリガーされたため、既知の脆弱性をスキャンしていると思います。エラーにより、どのような脆弱性または攻撃経路が阻止されますか?

58

エラーにより、どのような脆弱性または攻撃経路が阻止されますか?

この攻撃は「仮想ホストの混乱」と呼ばれ、 2014年に複数のCDNが脆弱であることが判明しました 。主な考え方は、TLSハンドシェイクのターゲット名( "SNI経由で提供")とHTTPプロトコルのターゲット名( "HTTP経由で提供")を利用できます。サーバーの設定によっては、他のユーザーが所有するHTTPSサイトを偽装して、セッションCookieなどを盗むこともできます。

詳細については、ペーパー "HTTPS仮想ホスティングに対するネットワークベースのOrigin Confusion Attacks] を参照してください HackerOneの情報 を参照してください。 "Akamaiを使用してインターネットの検閲を回避" または Blackhat 2014での講演を参照 ここで、TLSに対するこの攻撃およびその他の攻撃が示されています。

62
Steffen Ullrich

サーバー名表示(SNI) は、TLSクライアントがどのホストに到達しようとしているのかを示すことができるTLS拡張です。これは、仮想ホスト(つまり、1つのボックスからホストされる複数のドメイン)を備えたWebサーバーにとって、どの証明書を返すかを決定できるようにするために重要です。通常、ターゲット仮想ホストはHost HTTPヘッダーを介して検出されますが、TLSトンネルが構築される前に送信することはできません。 SNIにより、TLSクライアントは名前を示すことができるため、基になるHTTP呼び出しが行われる前に、正しい証明書を提供できます。ほとんどのTLSサーバーのもう1つの機能は、SNIを使用して、各仮想ホストに構成されている異なるTLS構成を選択できることです。

これで、到達しようとしたホストの2つのインジケーター(SNIとホストヘッダー)が得られたので、それらを一致させないようにすると、奇妙な動作が発生する可能性があります。ここで、HTTPSを使用するサイトがあり、管理サブドメインもあり、両方が同じサーバーでホストされている状況を想像してください。管理サブドメインはSNI構成レベルでロックダウンされているため、クライアント証明書が必要です。つまり、通常のサイト使用では通常のHTTPSが実行されるだけですが、管理サブドメインに接続するにはクライアント証明書が必要です。

ただし、SNIがメインドメインをポイントし、Hostヘッダーが管理サブドメインをポイントするリクエストを作成する場合、クライアント証明書なしでTLSトンネルを構築できます(メインサイトのルールが使用されるため)。サーバーは、管理サブドメインに接続しているかのようにコンテンツを提供する場合があります。これにより、クライアント証明書の制限を回避できます。

71
Polynomial

軽量フロントエンドがSNIを使用して異なるHTTPSサーバー間でリクエストをディスパッチする設定の場合、Apacheによって実行される追加のチェックは、アクセスできないコンテンツへのアクセスに使用される無効なリクエストから保護します。

SNIフィールドは、サーバーから何かが送信される前にクライアントから送信されるTLSクライアントのhelloメッセージにあるため、HTTPについては何も知らず、TLSについてはほとんど知らないが、TLS接続をディスパッチできる軽量のフロントエンドを構築できます。ホスト名に応じて異なるバックエンド。

このようなフロントエンドは、クライアントのhelloメッセージを解析してホスト名を抽出するのに十分なTLSを知っている必要があるだけです。それが得られると、すべてのデータを変更せずに別々のHTTPSバックエンドに渡すことができます。 TLS接続の確立に必要なサーバーキーが必要なのはバックエンドだけです。

この設定では、フロントエンドはトラフィックを復号化できないため、HTTPホストヘッダーで送信されたホスト名を知ることはできません。したがって、そのようなフロントエンドが2つのホスト名を比較することは不可能です。

このセットアップでは、HTTPSサーバー自体がSNIについて何も認識していない場合でも、単一のIPアドレスの背後で複数のドメインをホストできます。ただし、HTTPSサーバーがSNIについて何も認識していない場合、クライアントが破損した要求を送信して、フロントエンドとバックエンドが同じHTTPS要求に対して2つの異なるホスト名を参照する可能性があります。

フロントエンドとバックエンドに異なるホスト名を通知することによってのみ特定の仮想ホストに到達できるように、フロントエンドとバックエンドを設定することが可能です。

すべての有効なHTTPSリクエストで仮想ホストに到達できない場合、無効なHTTPSリクエストを送信することで仮想ホストに到達できる場合、それは脆弱性と考えられます。バックエンドがSNIをサポートするApacheバージョンである場合、あなたが尋ねるチェックは脆弱性から保護します。

8
kasperd