HTTPへのダウングレードと混在コンテンツのリスク
攻撃者がHTTPへのフォールバックを悪用する仕組みと、混在コンテンツがセキュリティ保証を損なう理由を理解します。
「HTTPへのダウングレードと混在コンテンツのリスク」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
HTTP Strict Transport Security
HTTP Strict Transport Security(HSTS)ヘッダーは、指定した期間、ブラウザーにサイトへの接続をHTTPS経由に限定するよう指示します。HSTSを受信すると、ブラウザーはHTTP接続を拒否し、http:// URLを自動的にhttps://へアップグレードします。
典型的なHSTSヘッダーは、"Strict-Transport-Security: max-age=31536000; includeSubDomains; preload"です。max-ageは秒単位で指定します(31536000 = 1年)。いったんキャッシュされると、ブラウザーはサーバーの関与なしに1年間HTTPSを強制します。
HSTSのmax-ageとincludeSubDomains
max-ageパラメーターは、ブラウザーがHTTPSのみの接続を強制する期間を秒単位で設定します。本番サイトでは、少なくとも1年(31536000)にすることが推奨されます。
includeSubDomainsディレクティブは、HSTSの適用範囲をすべてのサブドメインに拡張します。これにより、攻撃者がサブドメインの接続をHTTPにダウングレードし、メインドメインでSecureフラグなしに設定されたCookieを盗む攻撃を防ぎます。
HSTSプリロードリスト
ブラウザーには、初回のアクセスであっても常にHTTPSのみを使用するドメインのハードコードされたリストが組み込まれています。hstspreload.orgで管理されているこのリストには、数千の主要Webサイトが含まれています。
プリロードにより、初回アクセス時の脆弱性がなくなります。プリロードがなければ、初めて訪問したユーザーはHSTSヘッダーを受信する前に傍受される可能性があります。プリロードされたサイトは、HSTSのキャッシュ状態に関係なく、最初のリクエストからHTTPSのみになります。
SSLストリッピング攻撃
SSLストリッピングは、Black Hat 2009でMoxie Marlinspikeが発表した、HTTPS接続をHTTPにダウングレードするMITM攻撃です。攻撃者はユーザーの最初のHTTPリクエストを傍受し、ユーザーに代わって実際のサーバーへHTTPSリクエストを送り、コンテンツをHTTP経由でユーザーに転送します。
被害者には通常どおりコンテンツが表示されますが、接続はHTTPです。入力した認証情報は攻撃者に送られます。HSTSが登場する前は、ユーザーが南京錠アイコンの欠落に気付かなかったため、この攻撃は非常に効果的でした。
HSTSがSSLストリッピングを防ぐ仕組み
HSTSは、ブラウザーがHSTSに登録されたドメインへのHTTP接続を拒否するため、SSLストリッピングを防ぎます。攻撃者がHTTPでページを提供しようとしても、ブラウザーは接続を拒否してエラーを表示します。
ブラウザーによるHSTSの適用はネットワークリクエストより前に行われるため、攻撃者は介入できません。残る脆弱性は、HSTSを受信する前の初回アクセスだけですが、プリロードによってこの脆弱性もなくなります。
アクティブ混在コンテンツとパッシブ混在コンテンツ
混在コンテンツとは、HTTPSページがHTTP経由でリソースを読み込む状態です。パッシブ混在コンテンツには、HTTP経由で読み込まれる画像、音声、動画が含まれます。これらはページを直接変更できませんが、HTTPヘッダーを通じてユーザー情報を漏えいさせたり、追跡を可能にしたりします。
アクティブ混在コンテンツには、HTTP経由で読み込まれるスクリプト、スタイルシート、iframe、XMLHttpRequestsが含まれます。HTTP経由のスクリプトはDOMに完全にアクセスでき、Cookieやフォームデータを読み取れるため、HTTPSページのセキュリティを完全に侵害する可能性があります。
ブラウザーによる混在コンテンツスクリプトのブロック
最新のブラウザーは、外側のページがHTTPSの場合、アクティブ混在コンテンツ(HTTP経由のスクリプト、スタイルシート、iframe)をデフォルトでブロックします。コンソールにエラーが表示され、リソースは読み込まれません。
Chrome 81(2020)以降、ブラウザーはパッシブ混在コンテンツをHTTPSへ自動的にアップグレードするようになりました。HTTPS版が存在する場合は、それが読み込まれます。存在しない場合、リソースはブロックされます。
ブラウザーの開発者ツールで確認する混在コンテンツ
ブラウザーの開発者コンソールには、混在コンテンツに関する警告とエラーが表示されます。ChromeではDevToolsを開き、Consoleタブに移動して、"Mixed Content"でフィルタリングします。ブロックされた各リソースには、更新が必要な安全でないURLが表示されます。
DevToolsのSecurityパネルには、証明書の詳細、接続情報、ページ上のすべての安全でないリソースの一覧など、包括的なセキュリティ概要が表示されます。
Upgrade-Insecure-Requests CSPディレクティブ
Content Security Policy(CSP)の"upgrade-insecure-requests"ディレクティブは、ページからのすべてのHTTPリクエストをHTTPSへ自動的にアップグレードするようブラウザーに指示します。これにより、HTTP URLがハードコードされたレガシーコンテンツにも対応できます。
混在コンテンツをブロックする場合とは異なり、upgrade-insecure-requestsはまずHTTPS版の取得を試みます。レガシーコンテンツに埋め込まれたすべてのURLを更新するのが現実的でない場合に、HTTPからHTTPSへ移行する際に役立ちます。
HTTPにおけるISPの広告挿入
HTTPSを使用しない場合、ISPはHTTPレスポンスにコンテンツを挿入できます。複数のISPが、広告のないWebページに広告を挿入したり、トラッキングピクセルを追加したり、ユーザーがデータ上限に近づいたときに警告ページを挿入したりしていたことが発覚しています。
このようなコンテンツの挿入は、HTTPSページでは不可能です。レスポンスは認証および暗号化されているため、変更するとTLS MAC検証に失敗し、変更されたコンテンツが提供されるのではなく接続エラーになります。
初回のHTTPアクセスが依然として危険な理由
ブラウザーがドメインのHSTSヘッダーをまだ受信していない場合、HTTPによる最初のアクセスは脆弱です。攻撃者はこの最初のリクエストを傍受し、ブラウザーに警告を表示させずにSSLストリッピングを実行できます。
この「初回使用時の信頼(trust on first use)」の脆弱性が、HSTSプリロードリストが存在する理由です。サイトをプリロードリストに登録すると、ブラウザーは最初のリクエストからそのドメインにHTTPSを適用し、初回アクセス時の隙を完全になくせます。
HSTSのクイズ
HTTP Strict Transport Securityについての理解度を確認しましょう。
要点:HSTSと混在コンテンツ
HSTSは、指定した期間、ブラウザーにドメインへのHTTPSのみの接続を強制します。プリロードリストは、ブラウザーにHSTSポリシーをハードコードすることで、初回アクセスから保護します。
SSLストリッピング(Moxie Marlinspike、2009年)はHTTPSをHTTPにダウングレードしますが、HSTSはこれを防ぎます。アクティブ混在コンテンツ(HTTPSページ上のHTTPスクリプト)はブラウザーによってブロックされます。upgrade-insecure-requests CSPディレクティブは、レガシーコンテンツのHTTPからHTTPSへの移行を自動化します。
よくある質問
「HTTPへのダウングレードと混在コンテンツのリスク」レッスンは無料ですか?
はい。「HTTPへのダウングレードと混在コンテンツのリスク」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「HTTPへのダウングレードと混在コンテンツのリスク」で何を学びますか?
攻撃者がHTTPへのフォールバックを悪用する仕組みと、混在コンテンツがセキュリティ保証を損なう理由を理解します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「HTTPへのダウングレードと混在コンテンツのリスク」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 南京錠アイコンが本当に意味すること
- WebサイトがSSL証明書を取得する仕組み
- TLS証明書の警告と対処法
- HTTPへのダウングレードと混在コンテンツのリスク