SYNフラッド攻撃(SYNFlood)とは?
SYNフラッドとは、DoS攻撃の一種で、大量のSYNパケットをサーバに送り込む攻撃です。
では、「SYNパケット」って何でしょう?
これを理解するには、まず「TCP」の通信の流れを見る必要があります。
Webで使うHTTPや、メールで使うSMTPは、「TCP」というプロトコル(通信手段)の一つです。
このTCPは、通信を開始するときに、「3ウェイハンドシェイク」という手法を用いて、通信を確立します。
例えば、クライアントがWebサーバに通信を行うとき、まず最初に「SYNパケット」をサーバに送ります。
これは、「通信を開始していいかどうかのお伺いだと思ってください。
(1) [クライアント] —(SYNパケット)—> [Webサーバ]
SYNパケットを受け取ったWebサーバは、「いいですよ」という応答パケットである「ACKパケット」を送信します。また、同時に自分からも「SYNパケット」を送信します。
(2) [Webサーバ] —(SYNパケット/ACKパケット)—> [クライアント]
そして最後にクライアントがWebサーバに「ACKパケット」を投げて、ようやく通信が開始されるという仕組みになっています。
(3) [クライアント] —(ACKパケット)—> [Webサーバ]
で、例えば上記の(1)で、クライアントが送信元IPアドレスを詐称したとします。
そうすると、Webサーバは(2)で全然別の相手に、SYNパケットとACKパケットを送ってしまい、最後の(3)のACKパケットを永遠に受け取ることが出来ず、「応答待ち」の状況が続いてしまうことになります。
悪意のある攻撃者が、詐称したSYNパケットを大量に送ることで、この「応答待ち」の状態を作り出し、その結果、サーバ側のメモリが食い尽くされ、接続を受け付けられない状態に陥ってしまうわけです。
SYNフラッド攻撃は、TCPの基本的な仕組みを利用しているため、なかなか防御が難しいと言われています。
たとえば、同じIPアドレスから大量にSYNパケットが来た場合に、そのIPアドレスからの攻撃を防御するといった方法も考えられますが、大量のコンピューターから別々に送られて来た場合は、防ぐのは難しいと思います。