本記事は、ネットワークセキュリティ初心者向けに「ファイアウォール」とは何か、特にセッションの監視と制御という観点から解説しています。セッションの概念について例を交えつつ解説し、ファイアウォールがどのように通信を監視・制御しているのか、またセッション管理方法の種類について説明しています。
- ライター:佐藤 周磨
- ネットワンシステムズに入社以来、セキュリティエンジニアとしてファイアウォールを中心に各メーカ製品の評価・検証・技術サポート業務に従事。
目次
はじめに、セッションって何?
一般的にTCP/IPにおけるセッションとは、クライアントとサーバ間で目的のデータの伝搬開始から終了までの一連のやりとりのことであり、プロトコル階層におけるトランスポート層での接続状態を指します。
トランスポート層のプロトコルとして最も普及しているのは、コネクション型のTCP (Transmission Control Protocol)やコネクションレス型のUDP (User Datagram Protocol)と言えるでしょう。他にもトランスポート層で標準化されているプロトコルとしては、SCTP (Stream Control Transmission Protocol)やDCCP (Datagram Congestion Control Protocol)などが存在していますが、本記事ではTCPをベースに解説していきます。
野球のキャッチボールに例えてみる
TCPセッションを野球のキャッチボールに例えてみましょう。
キャッチボールがしたい選手(クライアント)は、まずキャッチボール相手(サーバ)を探します。相手が見つかったら「キャッチボールしませんか?」と問いかけて、相手から「いいですよ」と返答があれば、「では、ボールを投げます」という認識合わせをして、ボールの送捕球(データの送受信)を始めることができます。何もやりとりせずにいきなりボールを投げてしまったら誰もボールを捕ってくれません。
この最初のやりとりこそがTCPにおけるセッションの始まりであり、3ウェイハンドシェイクに該当します。キャッチボールが終わったら、またお互い合意したうえでボール(データ)の送捕球を終了しますが、これはTCPセッションの終了に相当します。
実際のTCP通信にも当てはめてみます。クライアントが目的のサーバに対して通信の開始を要求します。この時サーバに送信されるのが、SYNパケットです。サーバはSYNパケットを受け取り問題がなければ、その旨をクライアントに通知します。この時クライアントに送信されるのが、SYN-ACKパケットです。SYN-ACKパケットを受け取ったクライアントは、トランスポート層の接続完了をサーバに通知します。この時サーバに送信されるのが、ACKパケットです。その後、クライアントとサーバ間でデータの送受信が可能になります。
TCPセッションを正常に終了させる場合は、同じ要領でクライアントとサーバの間で4ウェイハンドシェイクと呼ばれる終了プロセスを実施します。そして、この交渉の開始からデータの送受信および終了までの一連のやりとりが一般的にセッションと呼ばれています。
なお、何らかのエラーでセッションを途中で終了させる場合は、クライアントまたはサーバからリセットパケットを送信します。
ファイアウォールって何?
では、ファイアウォールとは一体何なのでしょうか?
様々な定義があると思いますが、一般的には、「ネットワークの境界に設置して、内部ネットワークとインターネットなどの外部ネットワークとの通信を監視・制御するセキュリティシステム」と認識されています。
この定義はもちろん正しいですが、もう少しプロトコルレベルに落とし込んで定義すると、「セッションを監視して制御するセキュリティシステム」というのが筆者の認識です。
ファイアウォールは野球の監督!?
先ほどの、野球のキャッチボールの例に当てはめてみます。
野球チームの監督が選手のキャッチボールを監視しているとしましょう。選手同士でキャッチボールのペアが成立しそうな時に、監督がペアとしてふさわしくないと判断すればキャッチボールをさせないように指示することができるでしょう。
また、キャッチボールが始まってから、選手が暴投ばかりしていたり、相手の要求を無視して捕球できないような速いボールばかり投げていたりすれば、監督はそのキャッチボールを中止させることができます。
このように監督はキャッチボール(セッション)を監視して制御する立場にあり、これはファイアウォールに該当する働きであると言えます。
実際のTCP通信にも当てはめてみます。3ウェイハンドシェイクが行われる場合、セッションを監視するファイアウォールは、一般的にその情報をセッションテーブルに記録して識別可能なセッションIDを割り振ります。記録したセッション情報からその通信がセキュリティのポリシーに反する通信であれば、通信を遮断することができますし、問題がなければその後のパケットの通過を許可します。
ステートフルインスペクションとは
ファイアウォール製品では、セッションの制御方法を記述したルールを設定します。
この制御ルールは一般的に、「ファイアウォールポリシー」や「セキュリティポリシー」と呼ばれていますが、本記事では単にポリシーと呼ぶこととします。なお、多くのファイアウォールはセッションの方向性を認識できるため、例えば内部ネットワークからインターネットへのセッションのみ許可したい場合は、内部ネットワークからインターネットへの一方向の許可ポリシーのみ記述すればよく、反対方向の許可ポリシーを記述する必要はありません。これは、ファイアウォールがセッション情報を記録しているため、インターネット側からのパケットがクライアント側から始められた適切なセッション上のものであると判断できるためです。
この仕組みはステーフルインスペクションと呼ばれており、ポリシーの設定ミスによるセキュリティリスクを低減する仕組みとして、現在多くのファイアウォール製品で実装されています。
ファイアウォールの進化
現在ほとんどのファイアウォール製品はトランスポート層の情報だけでなく、アプリケーションの情報まで考慮してセッションを監視・制御しています。
例えば、デフォルトポート3389ではなくポート80を使用するRDP (Remote Desktop Protocol)の識別や、HTTPS (HyperText Transfer Protocol Secure)上で使用されるSNS・Web会議ツールなど、プロトコル内部でトンネリングされている別のアプリケーションを監視・制御することができます。これらは従来のトランスポート層の情報だけでセッション管理を行うファイアウォールと区別するために、次世代ファイアウォール(Next Generation Firewall)と呼ばれることがあります。
また、ファイアウォール機能に加えて、アンチウイルスやIPS(侵入防御)といったセキュリティ機能を1台で提供する機器は一般的にUTM(Unified Threat Management)と呼ばれています。
セッションの管理方法を分類してみる
ファイアウォールがどのようにセッションを管理してマッチするポリシーを検索しているのか、もう少し掘り下げていきます。セッション管理およびポリシー検索の方法は、大きく分けて以下の2つのタイプがあります。
トランスポート層以下の情報でポリシー検索
まずタイプ①のファイアウォール製品は、トランスポート層以下の情報のみでマッチするポリシーを検索してセッションを管理します。このタイプのファイアウォールは、セッションが通過する受信/発信インターフェースや送信元/宛先IPアドレス・ポート番号、プロトコル番号(6=TCP, 17=UDP, 33=DCCP, 132=SCTP)といったトランスポート層以下の情報で、マッチするポリシーを検索します。
マッチしたポリシーでアクションが拒否に設定されていれば、ファイアウォールでパケットをドロップしたり、クライアントやサーバの代わりにリセットパケットを生成したりすることで通信を拒否します。アクションが許可に設定されていれば、その後のパケットの送受信が許可されます。
タイプ①では、ポリシーの検索条件にアプリケーション層の情報を含めないため、作成するポリシーの行数は少なくなる傾向にあります。また、セッションの開始から終了まで適用されるポリシーが変わらないため、トランスポート層で暗号化された通信の復号(以下、SSL復号)やNAPT (Network Address Port Translation)といった他のトランスポート層の処理もポリシーの設定項目の一部として含まれていることがあり、設計がシンプルになります。
ポリシーを検索する要素としてアプリケーション情報を含めることはできませんが、アプリケーション層での制御ができないわけではありません。製品によっては、許可されたセッションに対して、アンチウイルスやDLP(データ漏洩防止)、アプリケーション制御といったアプリケーション層でのセキュリティ対策を行うことが可能です。ただし、トランスポート層までの条件が同じトラフィックには同じポリシーが適用されるため、アプリケーション単位で適用するセキュリティチェックのレベルを変えることが難しいです。このタイプのセッション管理を行う製品としては、FortiOS(profile-based mode)ベースのファイアウォール(Fortinet社)などが挙げられます。
アプリケーションの情報でポリシー検索
次にタイプ②のファイアウォール製品は、URLカテゴリやアプリケーション単位でマッチするファイアウォールポリシーを検索してセッションを管理します。このタイプのファイアウォールでは、指定したURLカテゴリやアプリケーションが識別されるまでは、トランスポート層以下の情報をセッションテーブルに記録して最初のポリシー検索を行います。
セッション確立後にアプリケーションの識別を開始し、アプリケーションが判明するとポリシーの再検索を行って、マッチしたポリシーのアクションを実行します。
タイプ②では、ポリシーの検索条件にアプリケーション層の情報を含めるため、きめ細かなポリシー設計が可能な分、粒度が高くなり作成するポリシーの行数は多くなる傾向にあります。また、SSL復号やNAPTといったトランスポート層の処理についてはポリシーとは別でルールを記述する必要があり、設計が複雑になる可能性があります。
アクションが許可に設定されていれば、その後のパケットの送受信も許可されます。許可されたセッションに対して、アンチウイルスやDLPといった追加のセキュリティ対策を行うことも可能です。URLカテゴリ・アプリケーション単位で適用するポリシーを分けることができるため、宛先のURLカテゴリ・アプリケーションによって適用するセキュリティチェックのレベルに差を付けることが可能です。
例えば、特定の信頼できるURLカテゴリについてはアンチウイルスといったセキュリティ機能の適用をバイパスし、該当通信のスループット低下を抑えることができます。
必ずしも上記の特徴が全て当てはまるわけではありませんが、このタイプのセッション管理を行う製品としては、FTD-OSベースのファイアウォール(Cisco社)やFortiOS(policy-based mode)ベースのファイアウォール(Fortinet社)、PAN-OSベースのファイアウォール(Palo Alto Networks社)などが挙げられます。
両タイプの使い分け
どちらのタイプのファイアウォールでもアプリケーションレベルのセキュリティ機能を適用することができる製品はあります。その意味で、両タイプに本質的な違いはありません。
タイプ①のメリットは、SSL復号やNAPTといった処理もポリシー単位で設定が可能で、設計がシンプルになりコンフィグ管理が容易になる点です。トランスポート層までの条件が同じセッションに対しては、同じセキュリティ機能が適用されます。インターネット宛の不特定のURL・アプリケーションに対してセッションが発生する環境において、ネットワークの境界に設置するファイアウォールとして適しているというのが筆者の意見です。
一方で、タイプ②のメリットは、宛先のURLカテゴリ・アプリケーション単位で適用するセキュリティチェックのレベルを細かく設定できる点です。保護したい通信のアプリケーションがあらかじめ分かっている場合は、後者のようなセッション管理を行う製品が適しているでしょう。ただし、ファイアウォール製品の選定理由はこれだけではありません。実際には、周辺機器との組み合わせやサポートしているルーティングプロトコル、セキュリティ機能などを考慮して選定を進めていきます。
まとめ
ファイアウォールは、ネットワークの境界で通信を監視・制御するセキュリティシステムであり、特にセッション単位で通信の許可や遮断を行うという特徴があります。
ポリシーのマッチング方法としては、「トランスポート層以下の情報で検索する」タイプと「URLカテゴリ・アプリケーション単位で検索する」タイプの2種類があり、それぞれにメリット・デメリットがあります。
2つのタイプに本質的な違いはありませんが、仕組みを理解し、設計や運用の目的に応じて適切なファイアウォール製品を選択することが重要です。
※本記事の内容は執筆者個人の見解であり、所属する組織の見解を代表するものではありません。