SYN フラッドは DoS 攻撃の一種で、攻撃者がターゲットのサーバーに連続したSYN
リクエストを送信して、十分なサーバー リソースを消費してシステムが正規のトラフィックに応答しなくなるようにします[1] 。
SYN
リクエストとSYN
パケットは同じものです
SYN フラッド攻撃は、TCP 接続のハンドシェイク プロセスを悪用して機能します。通常の状態では、TCP は接続を確立するために 3 つの異なるプロセスを実行します (図 1a)。
SYN
(同期) パケットをサーバーに送信して接続を要求します。ACK
(肯定応答) するために、 SYN-ACK
パケットで応答します。ACK
パケットを送信して、サーバーからのパケットの受信を確認し、接続が確立されます。この一連のパケット送受信が完了すると、TCP 接続が開き、データを送受信できるようになります。これは TCP スリーウェイ ハンドシェイクと呼ばれます。この技術は、TCP を使用して確立されるすべての接続の基礎です。
DoS を作成するために、攻撃者は、最初のSYN
パケットを受信した後、サーバーが 1 つ以上のSYN-ACK
パケットで応答し、ハンドシェイクの最後のステップを待機するという事実を利用します。 Cloudflare [2]では、その仕組みについて説明しています (図 1b)。
SYN
パケットを標的のサーバーに送信します。ACK
パケットを待っている間、それは到着しませんが、攻撃者はさらにSYN
パケットを送信し続けます。新しいSYN
パケットが到着するたびに、サーバーは一時的に新しいオープン ポート接続を一定期間維持し、使用可能なポートがすべて使用されると、サーバーは正常に機能できなくなります。 このリポジトリへの攻撃は VM で実行されました。攻撃を実行するには 3 台のマシンが必要です。 1 台のマシンは攻撃者として使用され、もう 1 台のマシンは被害者(つまりサーバー) として使用され、3 番目のマシンはオブザーバー(つまりクライアント) として使用されます。
攻撃をセットアップするには、同じホスト コンピューター上に 3 つの VM をセットアップできます。あるいは、ホスト コンピューター自体を 3 番目のコンピューターとして機能させて、2 つの VM をホスト コンピューター上にセットアップすることもできます。
この攻撃は、攻撃者が被害者と同じ物理ネットワーク上にいるという想定に基づいて実装されたため、TCP シーケンス番号と送信元ポート番号を決定するタスクが簡素化されました。スニッファー ツールを使用して、必要な情報を収集できます。
このリポジトリへの攻撃は、 netwox
ツールを使用して実行されました。次に、Wireshark [3]などのスニファー ツールを使用して、攻撃パケットをキャプチャしました。攻撃の進行中、被害者のマシン上でnetstat -na
が実行され、結果が攻撃前の結果と比較されました。
# check the size of the queue for holding half-open connections
sudo sysctl -q net.ipv4.tcp_max_syn_backlog
# check the current usage of the queue;
# i.e., the number of half-open connections associated with some listening port
netstat -na
# one netwox tool that may be useful is tool number 76: synflood
netwox 76 --help
SYN クッキー:
このリポジトリへの攻撃は、SYN Cookie を操作することによって行われました。
SYN Cookie を使用すると、サーバーは SYN キューがいっぱいになったときに接続が切断されることを回避できます。追加の接続を保存する代わりに、SYN キュー エントリは SYN-ACK 応答で送信されるシーケンス番号にエンコードされます。その後、サーバーがクライアントからインクリメントされたシーケンス番号を持つ後続の ACK 応答を受信すると、サーバーは TCP シーケンス番号にエンコードされた情報を使用して SYN キュー エントリを再構築し、通常どおり接続を続行できます。
この軽減策により TCP 接続に関する一部の情報が失われますが、攻撃の結果として正当なユーザーが DoS にさらされるよりは優れています。
SYN Cookie は、SYN フラッディングに直接対応して DJ Bernstein [4]によって作成されました。
sysctl
コマンドを使用して、SYN Cookie メカニズムをオン/オフにします。
sudo sysctl -a | grep cookie # Display the SYN cookie flag
sudo sysctl -w net.ipv4.tcp_syncookies=0 # turn off SYN cookie
sudo sysctl -w net.ipv4.tcp_syncookies=1 # turn on SYN cookie
SYN Cookie は、SYN フラッディングを阻止するために実装できる多くの対策のうちの 1 つです。その他の緩和策には、キューの最大サイズを増やす、 SYN-RECEIVED
タイマーを減らす、最も古いハーフオープン TCP 接続をリサイクルするなどがあります。
^ 「CERT アドバイザリー CA-1996-21 TCP SYN フラッディングと IP スプーフィング攻撃」カーネギーメロン大学
^ 「SYNフラッド攻撃」 Cloudflare
^ 「Wireshark について」 Wireshark Foundation
^ 「SYNクッキー」 DJバーンスタイン
ご興味をお持ちいただきありがとうございます。このプロジェクトは楽しくて洞察力に富んだものでした。