Citrix NetScalerによるSYNフラッド攻撃に対する防御

この内容をPDFで読む

[PDF] Citrix NetScalerによるSYNフラッド攻撃に対する防御

Citrix NetScalerが備えるSYNフラッド攻撃に対する防御システムは、TCP/IPのSYNクッキー機能を強化した独自の防御システムです。この防御システムが標準のSYNクッキーよりも効率性に優れ、高い効果が得られるのはいくつかの理由があります。以下のセクションでは、その理由を探ります。

SYNフラッドとは

これまで、SYNフラッド攻撃が甚大な被害をもたらしてきた主な理由として、サーバーを簡単にだまして、接続要求にリソースを割り当てさせることが挙げられます。これらの接続要求元のIPアドレスはほとんどの場合偽装されているため、サーバーは攻撃を受けていることを認識しません。また、サーバーはSYN確認応答を別の場所へ送信するため、そこもまた攻撃に晒されることになります。

1996年9月にSYNクッキーを世に送り出したD.J. Bernstein氏は、この防御策はTCP/IPプロトコルに変更を加えずに実装できると強調しました(http://cr.yp.to/syncookies.html)。この基本的な考えは、暗号技術を使用して、新しい接続要求に対して入場券のようなもの(クッキー)を渡すことでした。接続要求を受信すると、SYNクッキーが作成され、要求元に返されます。このSYNクッキー内の情報が、正しいクライアントであることを証明し、その接続にリソースを割り当てる最終的な確認応答に使用されます。SYNクッキーは小規模なSYNフラッドをせき止めるには有効でした。問題は、SYNクッキーを使用してもシステムが簡単に攻撃されてしまうこと、標準のSYNクッキーで保護されたサーバーでも偽装接続の被害にあう可能性があるということです。

NetScaler独自のSYNフラッド攻撃に対する防御

リソースの割り当て

まず、NetScalerは、クライアントがTCPのスリーウェイハンドシェイクを完了するまで、接続に対するリソースの割り当てを行いません。これはSYNパケットの大量フラッドに対処するために基本的に重要な動作です。接続が確立するまではリソースを割り当てないようにすることで、NetScalerはサーバー側での通信に関与しません。さらに、NetScalerは、クライアントから有効な要求を受信するまでは、サーバー上のリソースを接続に割り当てません。これにより、サーバーは、完全に接続が確立した正しいクライアントのみ扱うことができます。実際、有効な要求が受信されるまで、サーバーはクライアントを認知しません。

TCP/IPの効率

標準のSYNクッキーでは、すべてのクライアントが接続で使用する最大セグメントサイズ(MSS)の値は8個に制限されています。これは表面的にはあまり問題にならないように見えますが、サーバーに対するすべての接続の全体的な効率に影響を及ぼします。各クライアントに対して最適な値(通常、64~1460の範囲)になるようにMSSを調整することができれば、各接続で1回のデータストリームで送信するパケットの数が少なくなります。これは、高スループットおよび高パフォーマンスを意味します。利用可能な1397のMSS値のうち8個しか使用しない場合、ほとんどのクライアントは最適なMSS値よりも低い値を選ぶようになります。これは、同じデータ量を送信するのにパケット数が多くなることを意味します。つまり、処理するパケットの数が多くなり、ユーザーにとってパフォーマンスが低下するため、容量は最小限になります。