スイッチ
SYNとは
TCPにおいて、SYNとは、接続を開始するためにクライアントからサーバーへ送信されるパケットを指します。TCP接続は、次の手順で確立されます。
- クライアントは、最初にSYNパケットをサーバーへ送信します。
- サーバーはSYN/ACKパケットを返し、リクエストを受信したことを確認します。この時点で、サーバーは接続の詳細を保持するために接続テーブル内のリソースを確保し、ハーフオープン接続状態を確立します。
- SYN/ACKパケットを受信すると、クライアントはACKパケットを返します。
- サーバーがACKパケットを受信すると、接続が完全に確立されます。
3回のパケット交換を伴うこの接続プロセスは、3ウェイハンドシェイクと呼ばれます。これにより、サーバーは応答パケットがクライアントに到達したことを確認できます。しかし、クライアントが送信元IPアドレスを偽装すると、サーバーはSYN/ACKパケットに対する応答を受信できないため、問題が発生します。この場合、サーバーはタイムアウトするまでハーフオープン状態を維持し、リソースを不必要に消費します。悪意のある攻撃者は、DoS/DDoS攻撃の一種であるSYNフラッド攻撃でこの脆弱性を悪用します。
F5のBIG-IPプラットフォームはフルプロキシとして機能し、SYNパケットをサーバーに転送する前に検査することで、SYNフラッドを防ぎます。さらに、BIG-IPには、大量のSYNパケットから自身を保護するSYN Cookieという機能があります。この方式では、MD5で生成した数値(「Cookie」と呼ばれます)をSYN/ACKパケットのTCPシーケンス番号に埋め込みます。その後ACKパケットを受信すると、その内容からCookieを再計算します。これにより、SYN/ACKパケットの送信時に接続情報を保存する必要がなくなり、SYNフラッド攻撃を受けている間もメモリの枯渇を防止できます。
