SNI検閲下の方法と偽ウォール攻撃分析
いくつかの専門用語の紹介
HTTP(Hyper Text Transfer Protocol)
ハイパーテキスト転送プロトコル、日常的に閲覧するさまざまな Web ページは HTTP プロトコルを介して送信されますが、その送信プロセスは暗号化されておらず、安全ではありません。 現在、HTTP をサポートするということは、一般的に HTTP と HTTPS の両方の機能を実装できることを意味し、HTTP だけをサポートするわけではありません。
TLS(Transport Layer Security)
トランスポートレイヤーセキュリティ、その前身は SSL です。メッセージを暗号化してから TCP に渡して送信する機能を実装しています。つまり、HTTP + TLS = HTTPS
SNI(Server Name Indication)
サーバー名表示。SNI は、1 つのサーバーが複数のドメインと証明書を使用する問題を解決するための SSL/TLS の拡張機能です。同じ IP アドレスと TCP ポートで複数の証明書をサポートでき、TLS 上の複数の HTTPS やその他のサービスが同じ IP アドレスで異なるサービスを要求できます。
簡単に言えば、サーバーの同じポートに異なる証明書を展開する方法です。サーバーは受信したリクエストの SNI ドメイン名に基づいてリクエストを処理します。SNI ドメインが空の場合、事前に設定されたデフォルトドメインに従ってリクエストを処理します。
CDN(Content Delivery Network)
コンテンツ配信ネットワーク、各地域に展開されたサーバーが一緒になって形成する高速ネットワークトポロジで、ユーザーがすべての地域で高速アクセスを実現できます。CDN は SNI を通じて異なる Web サイトに応答しながら、オリジンサーバーのセキュリティも保護します。
Nginx
主流の高性能オープンソース HTTP リバースプロキシツール、主にリバースプロキシ、負荷分散、静的/動的リソース分離に使用されます。
リバースプロキシ
オリジンサーバーの前にゲートウェイとして外部サーバーを展開します。ユーザーは外部サーバーにのみアクセスでき、内部ネットワークサーバーが公開されることを防ぎます。ゲートウェイとして、メッセージの分析と変更も可能です。
プロキシサーバーとオリジンサーバーが同じホストに展開されている場合、ローカルリバースプロキシと呼ばれます。
現在の主流ブロック技術
ここでは技術の概要を説明します。詳細については百度で検索してください。
現在の生活において、GFW は主に 2 つの方法で違反 Web サイトをブロックしています:1. DNS 汚染、2. TCP リセット攻撃。
DNS 汚染
主に HTTP メッセージのキーワードをチェックして対応する Web サイトのコンテンツをインターセプトします。ブラウジング時にERR_CONNECTION_TIMED_OUTエラーが表示されます。これは DNS がアクセス不可能なアドレスに向けられ、アクセスがタイムアウトするためです。DNS クエリは DNS サーバーに到達できますが、禁止されたキーワードと一致する場合、**ファイアウォールは正当な DNS 応答の前に偽の DNS 応答を注入します。解決策は、ローカル Hosts ファイルを変更して直接 IP 接続を行い、ローカルで解決することです。
ただし、現在の生活では、主要な Web サイトのブロックに DNS 汚染方法が使用されることはまれです。主な理由は、HTTPS がブラウジングコンテンツを暗号化するため、メッセージのキーワード検出が無効になるからです。
SNI 検閲方法
通常の状況では、TLS ハンドシェイクには以下の段階が必要です:

最初の Client Hello フェーズでは、両者はまだ暗号化方法について合意していないため、メッセージは平文です。Extension フィールドには、現在要求されているドメインである SNI 情報が含まれており、この情報はパケットキャプチャで取得できます。
通常の状況では、サーバーは SNI に含まれるドメインに基づいて対応するドメイン証明書をクライアントに送信し、後続のハンドシェイク手順を進めます。交渉が終了すると、暗号化された通信が開始されます。
ただし、このプロセスでは、GFW は SNI のドメインをインターセプトして、クライアントが要求している Web サイトの合法性を判断し、検出とブロックを実行できます。ブロック方法はTCP リセット攻撃です。この技術はディープパケットインスペクションに基づく SNI ブロックと呼ばれます。
TCP リセット攻撃は単一のパケットで実行されます。攻撃者は偽造された TCP リセットパケットを作成して送信し、ユーザーと Web サイト間の接続を妨害し、両者をだまして TCP 接続を終了させます。 現在、GFW は RST パケットを先制送信してこのような接続を中断します。この技術は TCP キーワードブロックとも呼ばれます。
実行可能な解決策
SNI はサーバーの同じポートに異なる証明書を展開する方法です。CDN を有効にした後に Cloudflare が提供する証明書は SNI に基づいて展開されています。SNI を実装する重要なプロセスの 1 つは、クライアントとサーバー間の接続を確立するときに接続するドメインを送信することで、サーバーが指定されたドメインに発行された証明書を返すことができます。
このプロセスで、ユーザーが存在しないドメインを要求した場合、サーバーは接続を続行できるようにデフォルト証明書をクライアントに送信します。
サーバー名を難読化してブロックをバイパスするこの方法はドメインフロンティングと呼ばれます。簡単に言えば、Client Hello フェーズで SNI を持たないか、無効な SNI を持つことで、実際の接続 Web サイトを隠してインターネット検閲を回避することです。
現在、Steam、Pixiv、Github などの大規模 Web サイトに効果的です。
ドメインフロンティングの仕組み
ユーザーは正当なドメインを使用して DNS に CDN IP を要求し、CDN にリクエストを開始します。HTTPS リクエストを処理する際、CDN は最初にそれを復号化し、HTTP Host の値に基づいてリクエストを転送するため、ユーザーが違法な Web サイトにアクセスしたい場合、CDN 上の正当なドメインを SNI として使用し、HTTP Host として CDN と HTTPS で通信できます。HTTP Host は転送者にのみ見え、検閲者には見えないため、CDN はこのリクエストを通過させ、HTTP Host に基づいて HTTP リクエストを再パッケージ化し、実際に要求されたサーバーに送信します。この場合、クライアントは実際には違法な Web サイトと通信していますが、トラフィック監視機器にとっては、クライアントは正当な Web サイトと通信しているように見えます。つまり、クライアントはトラフィックを正当な通信トラフィックに偽装することに成功しています。

この方法は、ブロックされたサイトと無害なサイトが同じ大規模サービスプロバイダー(コンテンツ配信ネットワークが提供するサービスなど)である場合に比較的実行可能です。この場合、検閲者は通常、偽装されたトラフィックと正当なトラフィックの特性を区別することが困難であり、検閲者はすべての無害に見えるトラフィックを通過させるか、このドメインのすべてのトラフィックを完全にブロックすることを選択せざるを得ません。完全なブロックは重大な付随的損害を引き起こす可能性があります。
偽ウォール(疑似ウォール)攻撃の解決策大全
1. 偽ウォール攻撃とは?
偽ウォール攻撃とは、GFW の機能を利用して Web サイトを攻撃する方法です。
ハッカーは中国にサーバー A、海外にサーバー B を設置します。そしてサーバー A の hosts ファイルを変更して、攻撃対象の Web サイト(www.xxx.comなど)をサーバーBに向けます。次にサーバーBに違法コンテンツのWebサイトを作成し、ドメインwww.xxx.comをバインドします。
これにより、サーバー A を経由してwww.xxx.comにアクセスすると、www.xxx.comが設定した正しいサーバーではなく、ハッカーが設置した違法Webサイトに「誤って」リダイレクトされます。
その後、ハッカーはサーバー A でパケット送信ソフトウェアを使用して、違法キーワードを含む大量のリクエストをwww.xxx.comに送信します。これにより、違法なリクエストがあり、実際に違法な結果にアクセスできるため、GFWはTCPブロックによってwww.xxx.comを一時的にブロックします。ハッカーがこのパケット攻撃を続けると、Webサイトは繰り返し一時的に禁止され、長期間アクセス不能になります。
2. 偽ウォール攻撃を受けているかどうかを判断する方法
Web サイトが頻繁にまたは長期間アクセスできず、検査でドメイン解決が正常、WEB サービスが正常、海外アクセスが正常、ドメインがブロックも汚染もされていないが、サーバーのポート 80 と 443 にアクセスできない場合、基本的に偽ウォール攻撃を受けています。
検出 URL:https://www.boce.com および https://support.dnspod.cn
前者で国内アクセス状況とドメインがブロックまたはハイジャックされているか、DNS が汚染されているかを確認します。後者でポート 80 と 443 のサービスが正常かを確認します。
3. 偽ウォール攻撃を解決する方法
本サイトは実践を通じて以下の 3 つの解決策を見つけました:
解決策 1:ドメイン ICP 登録と国内サーバーの使用
偽ウォール攻撃は GFW の機能を利用しているため、最も効果的な方法は攻撃されたドメインを登録して国内サーバーを使用することです。GFW は海外にサーバーがある Web サイトを対象に設計されているためです。
長所:一度で永久的、絶対に効果的。
短所:登録に時間がかかる、特に偽ウォール攻撃の対象となる Web サイトは多かれ少なかれ違反があり、登録できない可能性がある。
解決策 2:スマート DNS 解決 + 複数 IP サーバー
この解決策には大量の IP(少なくとも 100 以上)と API をサポートする DNS が必要です。アリババクラウドエンタープライズ DNS を例にすると、解決策は 2 つに細分化できます:
1 つは API 解決を循環させ、毎分 IP を切り替えるように設定する。
2 つはアリババクラウドのグローバルトラフィック管理機能を使用し、複数の解決 IP プールを設定し、各解決 IP を毎分チェックする。IP にアクセスできない場合、他の正常な IP に自動的に切り替えて解決する。
これにより偽ウォールの問題を効果的に解決できます。IP が多いため、ウォールの速度を超えます。
長所:完全に制御可能、運命は自分の手の中、いじるのが好きな Web マスターに適している。
短所:コストが高い、DNS と大量の IP はすべてお金がかかる。また、API を呼び出すコードの開発やグローバルトラフィック管理とスマート解決機能の設定が必要なため、かなり技術的に要求が高い。また、各地域の DNS サーバーキャッシュ時間の影響を受け、一部のユーザーは必然的に影響を受ける。
解決策 3:偽ウォール対策 CDN を使用
需要があるところには市場がある。現在、偽ウォール対策機能を提供する CDN サービスプロバイダーがすでにいくつか存在しています。
変更履歴
f8f53-add database section日
