Webサイトには、常にHTTPSを使用するようブラウザーに指示するために実装されたさまざまなメソッドがあります-HSTSヘッダー、HTTPSへのサーバーのリダイレクト、CSPポリシー。ただし、ユーザーが初めてサイトにアクセスするときは、HTTP経由で行うことができます。その後、ブラウザは、サイトがTLSを介する必要があることを認識して初めて、それを使用します。
しかし、攻撃が最初の訪問中にトラフィックにアクセスでき、中間者のように振舞っている場合はどうでしょうか?
たとえば、攻撃者はセッション固定攻撃を実行する可能性があります。攻撃者はサイトにアクセスし、セッションIDを含むCookieを割り当てられます。ユーザーがHTTP経由でサイトにアクセスすると、攻撃者はサーバーに代わって応答し、ユーザーにCookieを割り当てます。その後、攻撃者はすべてのトラフィックをそれ以降に通過させます。ユーザーは攻撃者のセッションIDを使用して要求を出し、情報を提供します。これで、攻撃者はそのIDでリクエストを作成し、ユーザーの情報を入手できるようになります。
この種の攻撃を阻止するにはどうすればよいですか?
ユーザーを常にHTTPからHTTPSにリダイレクトすると仮定すると、サーバーがHTTP経由で送信することのない安全なHTTP専用Cookieにセッション識別子を配置できます。
実際、私の場合、HTTPからHTTPSへの変換はApacheで行われるため、サーバーコードはHTTPのみを使用するユーザーにCookieを送信できません。
少なくとも、これは質問で説明したシナリオで機能します。ただし、最初のリクエストで停止するMITM攻撃については聞いたことがありません。 HTTPS要求はMITMによってプロキシされることもできるので、その時点でハッカーはとにかく安全なCookieを取得します。
StackzOfZtuffで述べたように、次のHTTPヘッダーを追加してサイトをHSTSに登録することにより、リクエストをHTTPSでのみ強制的に実行できます。
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
もちろん、これは常に有効な証明書があることを確認する必要があることを意味します。そうしないと、サイトにしばらくアクセスできなくなります。サブドメインを含めたくない場合もあります。
HSTSを使用すると、最初のHTTP要求は決して発生しません(少なくともHSTSリストを理解するブラウザーから。ただし、プロトコルが指定されていない場合、HTTPではなくHTTPSを使用して最初にテストするブラウザーが増えています)。