web-dev-qa-db-ja.com

HSTSを使用したWebアプリケーションの保護

背景

ASP.Net MVCを使用してWebアプリケーションを開発しています。アプリケーションをIIS(V8)に展開し、Webアプリの強化プロセスを実行します。 IISでSSLを構成しましたが、WebアプリはSSLのみを使用して機能しています(保護されたCookieなどを使用)。

いくつかのセキュリティテストを行い、1つのテストはプロキシを使用してSSLトラフィックをインターセプトすることでした。このテストではBurpSuiteを使用し、ブラウザにBurpの証明書をインストールしました。

Burpツールを使用して、すべてのHTTPSトラフィックを簡単に検査できます。これは、インターセプターの証明書をクライアントブラウザーにインストールした場合にのみ可能であることを知っています。それ以外の場合は、SSLの破損を通知します。

問題

私の問題は、誰かがインターセプターの証明書をクライアントブラウザーにインストールしても、HTTPSトラフィックを分析するインターセプターをどのように防ぐことができるかです。

解像度

HSTS(HTTP Strict Transport Security)を実装すれば、この問題を解決できると聞きました。

質問

HSTSを実装すると問題が解決しますか?もしそうなら、それを実装する最も効果的な方法は何ですか(アプリケーションレベルまたはホスティング(IIS)レベルで実装する必要がありますか?)

HSTSがこの問題を解決しない場合、このシナリオを保護するために必要な他の選択肢は何ですか?

2
user3496510

インポートされたルート証明書でSSLトラフィックを傍受できることは、Webアプリケーションの弱点とは見なされません。カスタムローカルトラストアンカーのインポートを許可するのは、ブラウザー設計の決定です。

HSTSを実装すると問題が解決しますか?

いいえA HTTP Strict Transport Security ヘッダーはHTTPSを強制するだけです。 HSTSは、有効な限り、使用する証明書を気にしません。つまり、HSTSを使用すると、無効な証明書に対して[例外を追加]を選択できなくなります。しかし、証明書がインポートされたCAによって信頼されている場合(Burpルート証明書など)、HSTSは違いを生じません。

私の問題は、誰かがインターセプターの証明書をクライアントブラウザーにインストールしても、HTTPSトラフィックを分析するインターセプターをどのように防ぐことができるかです。

それはできません。信頼されたルート証明書をローカルにインポートする場合、Webサイトはブラウザーにそれを拒否するように指示できません。

サーバーが特定の証明書チェーンを実施するために送信できる HTTP公開鍵のピン留め (HPKP)ヘッダーもあることに注意してください。 (これはHSTSではなく、あなたが求める概念かもしれません。)しかし、このヘッダーでさえ、ローカルの信頼されたルート証明書を無効にしません。 (たとえば、理論的にはBurp CAを拒否するHPKPヘッダーを送信しても、Google、Facebook、GithubはすべてBurpプロキシを介してロードされます。)

" HPKPとは何か、そうではないもの "から:

HPKPは、マルウェアがトラフィックを傍受するなどのローカル攻撃から保護しません。マルウェアがマシンにインストールされているルート証明書を取得する能力を持っている限り、HPKPができることは何もありません。

これは Chromium Security FAQ でも説明されています:

証明書チェーンがプライベートトラストアンカーにチェーンされている場合、Chromeはピンの検証を実行しません。このポリシーの主な結果は、プライベートトラストアンカーを使用できることです。固定(サイト)へのプロキシ(またはMITM)接続。 「データ損失防止」アプライアンス、ファイアウォール、コンテンツフィルター、およびマルウェアは、この機能を使用して、キー固定の保護を無効にすることができます。


だから、あなたが望むものを達成するための一般的な方法はありません-あなたは本当にローカルルート証明書をブロックする必要があるのですか?ユーザーがブラウザにBurp証明書をインストールしてSSLトラフィックをインターセプトする場合、結局のところ、ユーザーは意識的に選択しました。 Chromium FAQがその動作を正当化する方法は次のとおりです:

プロキシまたはMITMは、クライアントのマシンがプロキシの発行証明書を信頼するようにすでに構成されている場合、つまり、クライアントがプロキシを制御する人物(例:企業のIT管理者)。クライアントがプライベートトラストアンカーを信頼していない場合、プロキシが接続を仲介しようとすると、本来どおり失敗します。

6
Arminius