SSLインスペクションについて

この記事で実現すること

XG Firewallなどの次世代Firewallで利用されているSSL/TLSインスペクションについて、PCやiPhone等(Windows/macOS/Linux/iOS)を防御する仕組み、および必要となる対応を説明します。

SSLインスペクションとは

https通信では、サーバーとクライアント間がSSLで暗号化されます。SSLというのは本来はTLS(Transport Layer Security)が正しい名称ですが、SSLという言葉が過去より定着しているので、今日でも”SSL証明書”などSSLという言葉は一般的に使われます。この暗号化された通信をIPS(Intrusion Prevension System)は暗号を解読しながらコンテンツの中身の検査を行います。暗号通信の復号化方法としてSSL/TLSインスペクションという方式が採用されています。ここではSSL/TLSインスペクションによりどのようにFirewallが暗号化された通信を「正当な方法で」解読するかをシーケンスで説明します。

ブラウザとサーバーのSSL/TLS通信のシーケンス


sequenceDiagram
participant cl as クライアント<br>(ブラウザ)
participant sv as Webサーバー

cl ->>+ sv : 1.Webサーバーへの接続
sv -->>- cl : 2.サーバー証明書と<br>公開鍵を送付
Note over cl: 3.ルート証明機関でサーバーの証明書の正当性を検証
Note over cl: 4.一時的な共通鍵を作成し、サーバーの公開鍵で暗号化
cl ->>+ sv : 5.暗号化された共通鍵を送信
sv -->>- cl : 6.共通鍵で暗号化されたデータの送信
Note over cl: 7.共通鍵で復号

上記のようにサーバーは公開鍵をクライアントに渡し、ブラウザ(クライアント)は保持しているルート証明書(ルート証明機関)への照合によってサーバーが正しいURLのものかを判別します。クライアントが生成した共通鍵はサーバーの公開鍵で暗号化されているため、サーバー自身が持つ秘密鍵でなければ解読できません。よって、クライアントとサーバーの間に第三者が割り込んでも電文の中身を解読できません。

Firewallを経由するSSL通信のシーケンス

正当な方法として、FirewallのCA証明書を予めクライアントに承認させることで、電文の検査を行う事ができます。実際にhttpsの通信を開始するシーケンスは以下の通りです。


sequenceDiagram
participant cl as クライアント<br>(ブラウザ)
participant xg as Firewall
participant sv as Webサーバー

cl ->>+ xg : 1.Webサーバーへの接続
xg ->>+ sv : 2.Webサーバーへの接続
sv -->>- xg : 3.サーバー証明書と<br>公開鍵を送付
Note over xg: 4.サーバー証明書に紐づくルート証明書でサーバー証明書の正当性を検証
xg -->>- cl : 5.FWのサーバー証明書と公開鍵を送付
Note over cl: 6.FWのルート証明書でFWの証明書の正当性を検証
Note over cl: 7.一時的な共通鍵を作成し、FWの公開鍵で暗号化
cl ->>+ xg : 8.暗号化された共通鍵を送信
Note over xg: 9.FWの秘密鍵で復号化、共通鍵を取得
Note over xg : 10.共通鍵をWebサーバーの公開鍵で暗号化
xg ->>+ sv : 11.暗号化された共通鍵を送信
sv -->>- xg : 12.共通鍵で暗号化されたデータの送信
Note over xg: 13.共通鍵で復号
Note over xg: 14.コンテンツの中身の検証
xg -->>- cl : 15.共通鍵で暗号化されたデータの送信
Note over cl: 16.共通鍵で復号

FirewallはクライアントとWebサーバーとの間に入り、SSLの解読を行います。クライアントはFirewallが暗号化した電文を解読する事になります。

このシーケンスのポイント

Firewallが間に入らない通常のシーケンスにおいては、間にFirewallが割り込んで共通鍵を取得しようとしてもWebサーバーの秘密鍵を持っていないため、解読できません。従い、共通鍵を取得するためにFiewallが自分自身の公開鍵をクライアントへ渡しますが、Firewallの独自証明書はクライアント側のルート証明機関の検証によって不正と扱われます。Firewallがセキュリティ対策のための正当なサーバーである事を明示するために、クライアントにはFirewallのCA証明書を事前に”ルート証明機関”としてインストールしておく必要があります。クライアントに、FirewallのCA証明書が登録されていない状態でSSLインスペクションを行うと、ブラウザは「信頼されないサイト」として警告を発します。このような仕組みでSSL通信は悪意を持った第三者攻撃を防ぎつつ、ユーザがFirewallのCA証明書を許可する事でSSL検査を可能にしています。

SSL/TLSインスペクションを行うためには、FirewallのCA証明書を端末毎にインストールする必要があります。

コンテンツの中身の検証

上記シーケンスの14番目がFirewallの大きな役割です。暗号化されたhttpsのデータを解読し、流れるデータの中にさまざまな脅威が無いか検証を行います。

CA証明書のインストール

上述した通り、SSL/TLSインスペクションを行うためには、FirewallのCA証明書をクライアントにインストールしなくてはなりません。復号化については、以下の端末で検証をしています。

  • Windows
  • macOS
  • iOS
  • Linux(ubuntu)

なお、Androidには証明書はインストール出来ますが、Chrome以外のアプリで証明書を信頼する事が出来ず、実質SSL/TLSインスペクションは使えません。他の家電TVなども難しいと考えてください。

SSL/TLSインスペクションを設定後、ブラウザのURLの鍵マークにカーソルを合わせるとそのサイトで利用している本来の認証局ではなく、以下のようにFirewall(この実例ではSophos XG Firewall)の認証局が有効となっている事が分かります。

SNIによる接続時検査

次世代FirewallでSSL/TLSの中身を検査するためにはCA証明書が必要と記載しましたが、URLの宛先サーバーのみのチェックであればSSL/TLSインスペクションを利用せずとも可能です。https通信では、最初の接続時にどのサーバーに接続するかの文字列情報をSNI(Server Name Indication)でWebサーバーに通知します。これは平文です。Firewallはこのhttpsの通信開始時に宛先の正当性を検査し、接続を拒否する事が可能です。Firewallが持つURLフィルタ(ドメインフィルタ)機能はどのFirewall製品でも一般的なものですが、これはCA証明書のインストールは不要です。但し電文の中に含まれるマルウェアや脆弱性に対する攻撃などを防ぐには完全な電文の解読が必要です。

余談ですが、”公衆WIFIでは、httpsを使えば安全”というWebサイト上の記載を見かけます。しかしながら、実際にユーザーがどのWebサイトを閲覧しているかは、こういったSNIの平文やDNSクリエストによって公衆WIFIの提供業者に把握されているのが実態です。