SYNフラッド攻撃

SYNフラッドはTCP/IPのハンドシェイクにある脆弱性を悪用し、Webサービスを破壊しようとします。

Share facebook icon linkedin icon twitter icon email icon

SYNフラッド

学習目的

この記事を読み終えると、以下のことができます。

  • SYNフラッドDDoS攻撃の定義
  • SYNフラッド攻撃の仕組みに関する説明
  • さまざまな種類のSYN攻撃における違い
  • SYNフラッドの軽減技術の理解

SYNフラッド攻撃とは

SYNフラッド(ハーフオープン攻撃)は、サービス拒否(DDoS)攻撃の一種で、利用可能なすべてのサーバーリソースを消費することにより、正当なトラフィックがサーバーを利用できないようにすることを目的としています。攻撃者は、初期接続要求(SYN)パケットを繰り返し送信することにより、標的となるサーバーマシンで利用可能なすべてのポートを圧倒し、標的となるデバイスが正当なトラフィックへの反応が非常に遅滞するか、まったく反応しないようにすることができます。

SYNフラッド攻撃の仕組みとは?

SYNフラッド攻撃は、 TCP接続のハンドシェイクプロセスを悪用することで機能します。通常の状態では、TCP接続は接続を確立するために3つの異なるプロセスを示します。

  1. まず、接続を開始するためクライアントがSYNパケットをサーバーに送信します。
  2. サーバーは、通信の受領を確認するために、SYN/ACKパケットでその初期パケットに応答します。
  3. 最後に、クライアントはACKパケットを返して、サーバーからのパケットの受信を確認します。この一連のパケットの送受信が完了すると、TCP接続が開かれ、データを送受信できるようになります。
TCP Three-way handshake diagram

サービス拒否を作り出すには、攻撃者は、最初のSYNパケットを受信した後、サーバーが1つ以上のSYN/ACKパケットを送付して返答し、ハンドシェイクの最後のステップを待機するという事実を利用します。仕組みは次のとおりです。

  1. 攻撃者は、多くの場合なりすましのIPアドレスを利用して、大量のSYNパケットを標的となるサーバーに送信します。
  2. サーバーが各接続リクエストに応答し、応答を受け取れるようポートを開いた状態にします。
  3. サーバーは最後のACKパケットを待ちますがこれは到着せず、攻撃者はさらにSYNパケットを送信し続けます。新しいSYNパケットが到着するたびに、サーバーは新しいオープンポート接続を一定期間一時的に維持します。使用可能なポートがすべて使用されると、サーバーは正常に機能できなくなります。
SYN flood DDoS attack animation

ネットワーキングでは、サーバーが接続を開いたままにしているが、接続の反対側のマシンが開いていない場合、接続は半分開いたハーフオープン状態と見なされます。このタイプのDDoS攻撃では、標的となるサーバーは開いている接続を継続的に残し、ポートが再び使用可能になる前に各接続がタイムアウトするのを待機しています。そのため、このタイプの攻撃は「ハーフオープン攻撃」と見なすことができます。

SYNフラッドには3つの発生方法があります。

  1. 直接攻撃: IPアドレスがスプーフィングされていないSYNフラッドは、直接攻撃として知られています。この攻撃では、攻撃者はIPアドレスをまったくマスクしません。攻撃者が実際のIPアドレスを持つ単一のソースデバイスを使用して攻撃を行った結果、攻撃者は発見と緩和に対して非常に脆弱です。ハッカーは、標的のマシンでハーフオープン状態を作成するために、自身のマシンがサーバーのSYN-ACKパケットに応答しないようにします。これは、多くの場合、SYNパケット以外の発信パケットを停止するファイアウォールルールによって、または悪意のあるユーザーのマシンに到達する前に着信SYN-ACKパケットを除外することによって実現されます。実際には、緩和はかなり単純であるため、この方法はめったに使用されません-各悪意のあるシステムのIPアドレスをブロックするだけです。攻撃者が Miraiボットネットなどのボットネットを使用している場合、感染したデバイスのIPのマスキングは気にしません。
  2. スプーフィング攻撃:悪意のあるユーザーは、送信する各SYNパケットのIPアドレスをスプーフィングして、軽減の取り組みを阻止し、身元を発見しにくくすることがあります。パケットはスプーフィングされていても、これらのパケットをソースにまでさかのぼることは不可能ではありません。こうした捜査を行うことは困難ですが、特にインターネットサービスプロバイダー(ISP)が協力に積極的な場合は不可能ではありません。
  3. 分散攻撃(DDoS):ボットネットを使用して攻撃が作成された場合、攻撃を追跡してソースをたどれる可能性は低くなります。難読化のレベルを高めるために、攻撃者は各分散デバイスでもパケットの送信元のIPアドレスをスプーフィングすることがあります。攻撃者がMiraiボットネットなどのボットネットを使用している場合、通常、感染したデバイスのIPのマスキングは気にしません。

SYNフラッド攻撃を使用することにより、悪意のある行為者は、他のDDoS攻撃よりも大幅に少ないトラフィックで、標的デバイスまたはサービスにサービス拒否を発生させることを試みることがあります。標的を取り巻くネットワークインフラストラクチャを飽和させることを目的とする帯域幅消費型攻撃とは異なり、SYN攻撃は、標的のオペレーティングシステムで利用可能なバックログよりも大きければよいだけです。攻撃者がバックログのサイズと各接続がタイムアウトするまでの時間を特定できる場合、攻撃者はシステムを無効にするために必要な正確なパラメーターをターゲットにできるため、サービス拒否を発生させるのに必要な最低限まで総トラフィックを削減できます。

SYNフラッド攻撃の対策とは?

SYNフラッドの脆弱性は長い間知られており、多くの軽減策が利用されています。以下のようないくつかのアプローチがあります。

バックログキューの増加

標的デバイスの各オペレーティングシステムには、一定数のハーフオープン接続が許可されます。大量のSYNパケットに対する応答の1つは、オペレーティングシステムが許可するハーフオープン接続の最大数を増やすことです。最大バックログを正常に増やすために、システムは追加のメモリリソースを予約して、すべての新しいリクエストを処理する必要があります。増加したバックログキューサイズを処理できる十分なメモリがシステムにない場合、システムのパフォーマンスは悪影響を受けますが、それでもサービス拒否よりもましかもしれません。

最も古いハーフオープンのTCP接続を再利用

別の軽減戦略には、バックログがいっぱいになると、最も古いハーフオープン接続を上書きする方法があります。この戦略では、バックログが悪意のあるSYNパケットで満たされるよりも短い時間で正当な接続が完全に確立される必要があります。この防御方法は、攻撃量が増加した場合、またはバックログサイズが小さすぎて実用的でない場合には有効ではありません。

SYN cookies

この戦略には、サーバーによるCookieの作成が含まれます。バックログがいっぱいになったときに接続をドロップするリスクを回避するため、サーバーは各接続要求にSYN-ACKパケットで応答しますが、そこでバックログからSYN要求をドロップし、メモリから要求を削除し、ポートを開いたままにして新しい接続を確立する準備をします。接続が正当な要求であり、最終的なACKパケットがクライアントマシンからサーバーに返送された場合、サーバーはSYNバックログキューエントリを(いくつかの制限付きで)再構築します。この軽減努力によりTCP接続に関する情報を一部失いますが、攻撃の結果として正当なユーザーにサービス拒否が発生するよりはましです。

CloudflareのSYNフラッド攻撃対策とは?

Cloudflareは、標的とされたサーバーとSYNフラッドの間に立つことにより、この種の攻撃をある程度軽減します。最初のSYN要求が行われると、Cloudflareはクラウド内のハンドシェイクプロセスを処理し、TCPハンドシェイクが完了するまで標的とされるサーバーとの接続を保留します。この戦略では、偽のSYNパケットとの接続を標的とされるサーバー外で、CloudflareのAnycast Networkに維持するためのリソースコストがかかります。CloudflareのDDoS 保護の仕組みの詳細をご覧ください。

Cloudflare stops SYN Flood attacks diagram