【図解】ステートフル・インスペクションの仕組み

スポンサーリンク
スポンサーリンク

ステートフル・インスペクションとは

ステートフル・インスペクション(Stateful Inspection)とは、TCPコネクションや往復が必須のUDP(DNSやNTP等)を管理し、戻りの通信についてを動的に許可する仕組みのことです。

ステートフル・パケット・インスペクション(SPI)とも呼ばれます。

昔は高機能FWのみに実装されていましたが、最近ではバッファロー等の家庭用ブロードバンドルータにも大抵実装されています。

下記の図を例に、通信を会話として考えると、ホストAからWebサーバへ話しかけると、WebサーバはホストAに返事をすることができます。ですが、WebサーバはホストAに話しかけることができません。

つまり、PC AからはインターネットのWebサーバ(任意のIPのTCP80番ポート)への通信を許可した場合であっても、悪意ある人が送信元のTCPポートを80番にして通信を開始しようとする通信は防ぐことができます

スポンサーリンク

TCPは双方向でTCPコネクションを張り合うため、必ず戻りの通信が発生します。ポリシー(アクセス制御ルール)を決める際、 この戻りの通信まで定義することはかなり困難です。なぜならTCPのクライアント通信は1024番以降の ハイヤーポートをランダムで使うことが多く、あらかじめ決めておくことができないからです。また、UDPもDNSやNTP等は戻りの通信が必須となるものもありますが、これらも同様、あらかじめ定義するのは困難です。

そこで、TCPコネクションやUDPの往復を管理し、戻りの通信については動的に許可する仕組みができました。 この機能がステートフル・インスペクションなのです。

ステートフルとその対義語のステートレスについてはこちらを参照

1つの行きの通信と、それにより動的に許可される通信のパターンをひとまとめにセッションと呼びます。 また、セッションによりセキュリティを保つ方法を『セッション管理』と呼びます。TCPコネクションは1つのセッションとして数えられ、UDPも往復が必須となるDNSやNTPも、1往復で1セッションとして数えられます。

ステートフル・インスペクションの例

ステートフル・インスペクションの動作はどのようなファイアウォール(CiscoのASA、PaloAlto、FortiGate、SSG等)でもほぼ同じような動作をします。

そしてステートフル・インスペクションでは、TCPだけでなく様々なプロトコルの動作を把握し、そのContext(コンテキスト。会話で例えると、脈絡)に応じて動的に許可される設計となっています。Ciscoでは簡易なステートフル・インスペクト機能としてCBAC(Context Based Access Control)があります。

例えば、、、

スポンサーリンク


  • UDPでもDNSやNTPなど、多くのプロトコルで戻りの通信が発生しますが、これらをTCPと同様にセッション(UDP仮想コネクションと呼んだりもします)として管理し、戻りの通信も動的に許可することができます。
  • 通信が途中のNW機器で破棄されたりすると送信元にICMPのエラーが通知されますが、このICMPエラー(Time ExceededDestination Unreachable等)も動的に許可することができます。
  • FTPではActiveモードの場合、サーバからセッションを張りに来ますが、これを動的に許可します。もちろんPassiveモードの動的に決められるファイル転送用ポート番号も、通信の中身を見ることにより動的に開放を行います。他の動的ポートを使うプロトコルも同じように動的に許可します。ただし、機器によって対応プロトコルは異なるので、事前に確認が必要です。

つまり、脈絡のない話は遮られるけど、一連の流れとして関係する会話は継続されるといった動作になります。

セッション・タイムアウト

スポンサーリンク

ところで、TCP/UDPの返りの通信を動的に許可するのは良いのですが、いつまでも許可し続けると、悪意あるものからの侵入を許すセキュリティホールになってしまいます。そこで、許可する時間をあらかじめ決めておく必要があります。この時間をセッション・タイムアウト と呼び、セッション・タイムアウト後は例えホスト同士でTCPコネクションを維持していても、その間のFWが通信を破棄してしまいます。結果、PCのアプリ側もTCPのタイムアウトが発生し、TCP ResetやTCP Fin等によりコネクションが閉じられます。

非対称ルーティング

IPの役割はあくまで宛先IPへの経路指示のみですので、往路と復路が同じになることは保証されていません。経路上にFWがなければそれでも問題ないのですが、FWではステートフル・インスペクション機能のために通信の往復を見ていますので、問題になります。

具体的には、TCP synが来たけどTCP syn/ackが見えずTCP ackを返そうとした、もしくは逆に、いきなりTCP syn/ackが来た、等の場合はパケットを破棄します。

セキュリティの勉強については以下の書籍がお薦めです。

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク