SYNアタックとは、インターネットサーバを機能停止に追い込むDoS(サービス不能)攻撃の一種で、大量に中途半端なTCP接続を発生させる攻撃手法のことをいう。
TCPはUDPと異なり、通信相手の応答を受けて通信を開始する、コネクション型プロトコルである。
そのため、データ転送の前にコネクションの確立を行う必要がある。
具体的には下図のように、3ウェイハンドシェイクによってコネクションを確立する。
- クライアントは通信先サーバに対して、SYNフラグを立てたパケットを送信する
- SYNパケットを受け取ったサーバは、ACKフラグとSYNフラグを立てたSYN-ACKパケットをクライアントに返す。
これはSYNパケットへの応答と、サーバからクライアントへの通信要求を意味することとなる。
- サーバからのSYN-ACKパケットを受け取ったクライアントは、サーバにACKフラグを立てたパケットを返す。
この手順の終了後、クライアントとサーバは実際のデータ通信を行うこととなる。
SYNアタック (SYN Flood)では、このプロトコルを悪用し、クライアントが(3)のACK応答を返さないようにして、サーバのACK待ちの状態を作りだすことによる攻撃手法である。
もちろん、ACKを返さないクライアントが少数であったり、ACKパケットがたまたま消失してしまった程度ではサーバは何の影響も受けることはない(30秒程度でACK待ちを破棄してしまうため)が、攻撃者はさまざまな手法を用いて膨大な量のSYNパケットを集中させ、それによりサーバは極めて多数のACK待ちを作ることとなり、結果としてリソースを使い果たしてしまうことになる。
SYNアタックに使用されるパケットは正当なTCP SYNパケットと相違点がないため、区別することが困難であり、SYNアタックの防御は困難である。一方攻撃側に立つと、多数のSYNパケットを発生させることさえできれば容易に攻撃ができるため、DoS攻撃の約90%がSYNアタックによるものと言われている。
SYN floodに対する防御手法として、サーバ側ではSYN cacheやSYN cookieと呼ばれる手法がとられる場合があるが、ネットワーク機器側でも「代理応答」と呼ばれる手法によりSYNアタックを防御することができる。
代理応答による防御手法は以下の通り。
代理応答が設定され、防御ノードとなったネットワーク機器の動作は次のようになる。
- 防御ノードはクライアントからサーバへのSYN パケットを代理で受信する。
- 防御ノードはSYNパケットをサーバに転送せず、クライアントに対してサーバの代理となってSYN-ACKパケットを返送する。
- SYN/ACK パケットを受信したクライアントは、サーバに向かってACKを返す。
- 防御ノードはクライアントからサーバへのACKパケットを代理で受信し、サーバに対してクライアントの代理としてSYNパケットを送信する。
- SYNパケットを受信したサーバは、クライアントに向かってSYN-ACKを返送する。
- 防御ノードはサーバからのSYN-ACKをクライアントに転送せず、サーバに対してクライアントの代理としてACKパケットを送信する。
SYN flood攻撃の場合は、SYN-ACKに対するクライアントの応答以下の手順がなくなるため、サーバに対してSYNパケットが届かなくなるので、SYN
floodを防御することができる。
AR560S, AR550S等のアライドテレシスのルータでは、ファイアウォールを設定すると、自動的にWAN側からのSYNに対する代理応答機能が有効となる仕様となっており、この機能が不要なときはコマンドで代理応答を停止する必要がある。
(この下は自動配信されるネット広告スペースです)