GFWの仕組みを探る

GFWの仕組みを探る

GFWは単に出口のゲートウェイを監視するのではなく、通信経路の脇から国際通信を傍受します。出入国するIPパケットをクラスタへ複製し、詳しく分析・フィルタリングする仕組みです。どこで何をしているかを理解することは、検閲回避の検討に欠かせません。ネットワーク構成を調べることで、遮断の経路や技術、対処方法が見えてきます。

技術そのものに罪はありません。

グレート・ファイアウォール(Great Firewall、GFW)は中国の国家ファイアウォールで、「壁」や「ファイアウォール」とも呼ばれます。中国国家インターネット情報弁公室は「データ越境セキュリティゲートウェイ」と呼んでいます。中国政府が国際インターネットの出口でコンテンツをフィルタリングするために用いる、ハードウェアとソフトウェアのシステム群です。—— Wikipedia

GFWへ有効に対処するには、どのサイトが遮断されているかだけでなく、仕組みを理解する必要があります。Googleがブロックされていると知るだけでは、検閲回避には直結しません。GFWがどうやってGoogleを遮断するかを理解してこそ、適切な方法を選び、実装できます。そのため、回避方法の前に遮断の仕組みを詳しく見ていきます。

GFWはどこにあるのか

GFWは出口のゲートウェイ上にあり、そこで全通信を直接捕まえて検査している、と考えがちです。しかしgfwrev.blogspot.comの調査によれば、GFWは「3つの国際出口で経路の脇から傍受」し、光分岐によって出入国するIPパケットをクラスタへ複製して検査しています。推定される構成は次の図のとおりです(図の出典:gfwrev.blogspot.com)。

gfw topology

GFWは異なる回線の特性を吸収して統合するため、複数種類のリンクを結合する技術を研究しています(出典:高速ネットワーク環境における侵入検知システム構成の研究)。「国際通信出入口局管理弁法」によると、主要ISPは共用の国際光ケーブルで合流する一方、安全管理センターCNNISCには独立した交換拠点があり、各ISPがそこへ接続します。ISPごとに異なる回線仕様に対応するため、GFWの交換拠点が各リンクを統合し、各ISPは回線から分岐させてGFWへ接続します。主に光回線なので「経路の脇での光分岐」と呼ばれます。実験では接続地点が必ずしも最終ホップのすぐそばではないことがわかっているため、図では破線で示しています。

より厳密な研究として、Internet Censorship in China: Where Does the Filtering Occur?があります。

2010年の初期の研究では、GFWは「仮想計算環境テストベッド」計画を装って実施されたと考えられていました。

「仮想計算環境テストベッド」は、中国国家コンピュータネットワーク緊急対応技術処理調整センター(CNCERT/CC)とハルビン工業大学(HIT)が共同で構築したものです。CNCERT/CCが全国31省に持つネットワーク基盤と計算資源をもとに、分散した自律的資源を統合・活用し、開放的で安全、動的かつ制御可能な大規模仮想計算実験環境を構築します。仮想計算環境での集約と協調の仕組みを研究・検証するための基盤です。

このテストベッドが公開した論文計算グリッド環境における複数拠点協調に基づくジョブレベルのタスクスケジューリングアルゴリズムによると、2005年時点の構成は次のとおりです。

拠点所在地機種ノード数ノードあたりのプロセッサーノードあたりのメモリ
CNCERT/CC北京曙光4000L128ノード2*Xeon 2.4GRAM2G
HITハルビン曙光サーバー32ノード2*Xeon 2.4GRAM2G
CNCERT/CC上海Beowulfクラスタ64ノード2*AMDAthlon 1.5G

もちろん、これは2005年当時の構成にすぎません。現在のGFWのハードウェアやソフトウェアを確かめるのは難しくなっています。

データ処理

IPパケットを取得したGFWは、利用者とサーバーの通信を継続させるか判断します。ただし過剰に遮断することはできません。国外サイトを全国で一律に遮断してしまっては、存在意義に反するからです。パケットの意味を理解してから、国外サーバーとの接続を安全に遮断できるかを判断します。最初に行うのは再構成です。TCPを解析して完全なバイトストリームを復元し、その上でHTTPなどのアプリケーションプロトコルを解析します。そこで政治的に好ましくない内容があるかを調べ、対処を決めます。

説明を簡単にするため、次の3つのTCPパケットを考えます。

text
IP 包 1:包含 TCP 包:包含的数据:Get /inde
IP 包 2:包含 TCP 包:包含的数据:x.html H
IP 包 1:包含 TCP 包:包含的数据:TTP/1.1

再構成とは、IPパケット1のGET /inde、2のx.html H、3のTTP/1.1をつなぎ、GET /index.html HTTP/1.1にすることです。復元された内容は平文かもしれませんし、暗号化されたバイナリプロトコルかもしれません。それは利用者とサーバーとの取り決めです。盗聴する側のGFWは、何を話しているか推測しなければなりません。HTTPは標準化されていて暗号化もないため、簡単に推測できます。再構成すれば、HTTPを使ってどのサイトへアクセスしているかがすぐわかります。

こうしたバイトストリームを再構成する際の難題は、膨大な通信量をどう処理するかです。こちらのブログに詳しい説明があります。仕組みはWebサイトのロードバランサーと同様で、送信元と宛先をハッシュして担当ノードを決め、一致する通信をすべてそのノードへ送ります。これで1つのノードがTCPセッションの片方向のバイトストリームを復元できます。

補足として、あと2点あります。

  1. 再構成は光分岐による経路外の傍受で行われますが、GFWの全機器が経路外にあるわけではありません。後述するGoogleのHTTPS接続への断続的なパケット破棄などは、バックボーン上の機器が必要です。つまりGFWは一部のIPのルーティングにも関与します。
  2. 再構成するのは片方向のTCPストリームです。GFWは双方向の会話を突き合わせるのではなく、傍受した片方向の内容から判断します。ただし傍受自体は双方向で、中国国内から国外へも、国外から国内へも、それぞれ復元して解析します。そのため1本のTCP接続は、GFWから見ると2本のバイトストリームになります。

解析

バイトストリームを復元した次の段階が解析です。再構成では主にIPと、その上のTCPやUDPを扱えば済みます。一方、解析では多種多様なアプリケーション層のプロトコルを理解しなければなりません。私たちが自作の新しいプロトコルを考えることさえできます。

プロトコル解析には、似ているようで異なる2つの目的があります。1つ目は、Googleで「検索してはいけない」キーワードを検索するような、政治的に好ましくない内容の拡散を防ぐこと。2つ目は、検閲回避ツールによってGFWの検査をすり抜けられるのを防ぐことです。

1つ目の目的では、HTTPやDNSなどの平文を検査します。おおまかな流れは次のとおりです。

text
1. 特征检测
2. 拆包
3. 关键词匹配

HTTPのようなプロトコルには検出しやすい特徴があるので、最初の段階にあまり説明は要りません。HTTPだと判断すると、GFWは自分の理解するプロトコル規則に従って分解します。たとえばHTTP GETからリクエストURLを取り出し、そのURLにTwitterなどのキーワードが含まれるか照合します。なぜ先に分解するのでしょうか。より精密に遮断して誤検知を減らせますし、全文照合より資源を節約できる可能性もあります。liruqi/jjproxyは、このHTTP解析の欠陥を利用したものでした。現在は修正済みですが、GFWが余分な\r\nを正しく処理できない一方、google.comは処理できることを使っていました。この例からも、GFWが先にプロトコルを理解してからキーワード照合を行うとわかります。照合自体は効率のよい正規表現アルゴリズムだと思われ、特に掘り下げることはありません。

GFWが行うことが知られているプロトコル解析は次のとおりです。

DNS

GFWはUDPの53番ポートでDNSクエリを解析できます。ドメイン名がキーワードに一致するとDNSが改ざんされます。サブドメインは膨大なので、単純なブラックリストではなく正規表現に似た仕組みを使っていることは確かです。証拠として次の例があります。

  • 2010年3月、チリのドメイン登録業者の技術者が、中国にあるルートサーバーへfacebook.com、youtube.com、twitter.comなどを問い合わせると異常な応答が返ることを発見しました。運営するNetnodは、一時的にそのサーバーをグローバルインターネットから切り離しました。専門家はNetnod自体の問題ではなく、中国政府が別の箇所のネットワークを変更した影響と見ていました。
  • 2014年1月21日午後3時半、中国のDNS解決に異常が起き、多数のサイトが65.49.2.178へ誤って解決されました。このIPは米国カリフォルニア州フリーモントのHurricane Electricにあり、Dynamic Internet Technologyが検閲回避ソフトの接続ノード用に借りていました。同社と研究者はGFW担当者の操作ミスと考えましたが、実際の攻撃者がこのIPを踏み台にした可能性も否定できないという意見もありました。
  • 2015年1月2日、汚染の方式が変わりました。GFWは固定の遮断済みIPではなく、実在する国外サイトの到達可能なIPを注入するようになりました。その結果、国外サーバーに中国からDDoS通信が押し寄せ、一部サイトは中国のIPを遮断しました。同年4月、CNCERTはこの改ざんを国外からの攻撃によるものと発表しました。

出典:https://zh.wikipedia.org/wiki/%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E

HTTP

GFWはHTTPを識別し、GETのURLとHostを調べます。キーワードに一致するとTCP RSTで遮断します。

TLS

初期のTLSでは、証明書を含むサーバーのハンドシェイク応答が暗号化されておらず、GFWはそれを傍受して接続先を知ることができました。TLS 1.3以降はServerHello後のハンドシェイク情報とサイト証明書も暗号化して送るので、一般に証明書情報の検査を防げると考えられます。

ただし、広く使われるTLS拡張のSNIでは、複数のHTTPSサイトを提供するサーバーが適切な証明書を選べるよう、ハンドシェイクの開始時にクライアントが接続先ドメインを伝えます。この拡張も暗号化されていません。GFWは現在、このSNIの平文ドメインも調べて遮断します。HTTPSはHTTP + TLSなので、HTTPS接続の検出もHTTP検出の一種と整理できます。

注意:GFWは接続先ドメインの証明書を取得できないため、実際のHTTPSの内容を復号することは依然としてできません。

通信の特徴による識別

GFWの2つ目の目的は検閲回避ツールの遮断で、こちらにはより強引に対処します。HTTPの遮断を誤ると通常のインターネットを壊してしまいます。GFWはインターネットと共存するものなので、自分の存在を危うくすることはしません。一方、Torのようにほぼ検閲回避のために存在するプロトコルは、検出されれば容赦なく遮断されます。各プロトコルを具体的にどう遮断するかは私も詳しく知りませんし、状況は変わり続けています。それでも、技術力がわかる例を2つ挙げます。

1つ目はTorの自動遮断です。GFWがプロトコル自体を理解するために力を注いでいることがわかります。https://blog.torproject.org/blog/knock-knock-knockin-bridges-doors によると、中国のIPから米国のTorブリッジへ接続するとGFWが検知します。約15分後、GFW自身がクライアントを装ってTorでそのブリッジへ接続し、Torブリッジだと確認すると該当ポートを遮断します。ポートを変えるとしばらく使えますが、再び遮断されます。国際出口の大量の通信からTorブリッジへの接続を見抜く能力が示されています。Tor側によれば、ハンドシェイクの特徴が目立ちすぎるためだそうです。さらに、自らクライアントに化けて接続を試すという念の入れようです。

2つ目は、暗号化された内容に実際に敏感なキーワードがあるかをGFWは気にしていない、という例です。検閲回避の疑いだけで、特に商用サービスなら遮断されます。GFWは、検閲回避サービスらしい暗号化通信を機械的に識別できるようになっていると、ほぼ確実に考えられます。

最近のGFWは、通信を解析して検閲回避を見つけることに重点を置いているようです。この分野の研究はまだ少ないですが、個人で使う分には問題なくても、大規模に展開すると問題が起きやすいという特徴があります。

妨害の手段

プロトコル解析でバイトストリームを「脅威」と判定すると、GFWは次の方法で通信を妨害します。

IPの遮断

これは通常、人手の確認後に行われます。GFWの機械検知だけで即座にIPが遮断される方法は聞いたことがありません。一般には、まず機械検知でTCP RSTが発生し、しばらくしてからIPが遮断されます。明確な時間的規則もないので、全体に及ぶIP遮断には人が介在すると私は推測しています。「全体」と強調したのは、自分だけそのIPへ3分間アクセスできず、他人はアクセスできるような部分的な遮断と区別するためです。どちらもpingが通らないように見えても、仕組みはまったく異なります。全体遮断を見たければtwitter.comにpingしてみてください。ずっと前から遮断されています。

実装としては、バックボーンのルーティングテーブルへ無効なブラックホール経路を追加し、指定IP宛てのパケットをルーターに捨てさせます。ルーティングテーブルはBGPで動的に更新されるので、GFWは遮断IPリストを管理してBGPで広報するだけです。すると中国国内のバックボーンルーターがGFWの一部のように働き、共犯になります。

全体的に遮断されたIPをtracerouteで調べると、GFWのある国際出口へ着く前に、中国電信や中国聯通のルーターでパケットが破棄されているとわかります。これがBGP広報の効果です。

DNSの改ざん

これも人手の確認後によく行われます。問題視するサイトを見つけ、そのドメインを改ざんリストに追加します。DNSとIPがサーバーの正当性を検証せず、DNSクライアントが最初に届いた回答を信じる弱点を使います。facebook.comへの問い合わせなら、GFWは本物の回答より先に、問い合わせ先のDNSサーバーを装って誤った回答を返せばよいのです。

TCP接続のリセット

TCPではRSTを受信すると直ちに接続を中断します。ブラウザーには「接続がリセットされました」と出る、皆さんもおなじみのエラーです。私の印象では、今のGFWの主な対処はこれです。多くのRSTはURL内のキーワードなどを条件に発生し、Facebookをはじめ多くのサイトが対象です。一方、内容に関係なくRSTされるサイトもあります。特定のIPとポートなら、パケットの中身を問わずリセットします。有名な例はHTTPSのWikipediaです。このTCP層の対処は、ネットワーク上の誰でも他人を装ってパケットを送れるというIPv4の弱点を利用しています。GFWは、こちらにはGoogleがRSTを送ったと思わせ、Googleにはこちらが送ったと思わせることができます。

ポートの遮断

GFWの中心は、バックボーンルーターの脇に接続された侵入検知機器です。光分岐でパケットを複製し、IDSとして検査します。それだけでなく、ルーターはIPSとしてポート遮断にも使われます。GFWは検知した接続をTCP RSTで切るだけでなく、バックボーンルーターを使って指定のポートやIPを遮断し、選択的にパケットを捨てることもできます。ネットワーク層とトランスポート層をリアルタイムに分解・照合する、iptablesのような機能がルーターにあると考えればよいです。CiscoではこれをACL Based Forwarding(ABF)と呼びます。ルールは全国で同期され、1台でポートが遮断されると、GFWを備える全国のバックボーンルーターでも遮断されます。通常はSSHやVPNなどで検閲回避を提供しているサーバーが対象です。GFWは全国の国際出口のバックボーンルーターへACLを配り、そのサーバーとポートからの下りパケットを遮断します。具体的には、国外から中国国内へ向かうパケットで、srcが対象サーバーのIP、sportが対象ポートなら破棄します。この方式では上りはサーバーへ届き、下りだけが除去されます。

ポートを変えて対処しても、すぐに再び遮断されます。何度も試すとIPごと遮断されます。暫定的な推測ですが、ポート遮断は完全自動ではなく、ブラックリストと人手のフィルタリングによるのかもしれません。日中の勤務時間帯に起こるという報告が、その根拠の1つです。

逆方向の遮断

多くのプロキシサービスは中国国内の中継サーバーを使います。GFWが異常に大きな国外向け通信を検知すると、両会や国慶節などの特別な時期に、その中継サーバーを逆方向に遮断することがあります。国外サーバーからそのIPへアクセスできなくなり、pingの結果は国外では真っ赤、中国国内では緑になります。対策はあまりなく、IPを変えるか、敏感な時期が過ぎて自動回復するのを待つことになります。

以下の記事を転載し、編集・加筆しました。

  1. https://ednovas.xyz/2022/06/25/gfw/#%E4%B8%AD%E8%BD%AC
  2. https://gfwrev.blogspot.com/2010/02/gfw.html
Debianをサイドルーターにする
RISC-Vツールチェーンとエミュレーターのインストール