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スリーウェイハンドシェイクの図

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

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

ネットワーキングでは、サーバーが接続を開いたままにしているが、接続の反対側のマシンが開いていない場合、接続は半分開いたハーフオープン状態と見なされます。このタイプの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ネットワークに移します。CloudflareのDDoS攻撃対策の仕組みの詳細をご確認ください。

CloudflareがSYNフラッド攻撃を阻止する図