○SYN floodとは
SYN flood attackはTCP接続の接続確立手順の3way handshakeを利用している
[3way handshake 手順]
手順1) クライアント -- SYNパケット --> サーバ
手順2) クライアント <-- SYN/ACKパケット -- サーバ
手順3) クライアント -- ACKパケット --> サーバ
SYN flood attackは「手順2」で終わらせて放置プレー。
これで何が困るか?
「手順1」の時点でサーバは接続情報を保持するメモリを確保する。
「手順2」で放置されると、無駄にメモリを確保している状態をタイムアウトまで保持することとなる。
で、これを繰り返すとメモリを圧迫していく
○ SYN flood attackを受けているかどうかは、どうやって見分ける?
攻撃の特性上、netstatで「SYN_RECV」の状態で止まっているものが多いとあやしい。
○ SYNクッキーを使う
# cat /proc/sys/net/ipv4/tcp_syncookies
# 1
になっている場合、SYNクッキーが使われている。
○ SYNクッキーが使われている場合の動作
SYN food状態になる前 = 通常通り、SYN要求があった時点でメモリを確保
SYN food状態になった後 = SYN要求があった時点でメモリは確保せず、SYN/ACKパケットを返す
以下のメッセージが出たら SYN flood状態 ?
# cat /var/log/messages
# kernel: possible SYN flooding on port xxxx. Sending cookies.
SYN flood attackはTCP接続の接続確立手順の3way handshakeを利用している
[3way handshake 手順]
手順1) クライアント -- SYNパケット --> サーバ
手順2) クライアント <-- SYN/ACKパケット -- サーバ
手順3) クライアント -- ACKパケット --> サーバ
SYN flood attackは「手順2」で終わらせて放置プレー。
これで何が困るか?
「手順1」の時点でサーバは接続情報を保持するメモリを確保する。
「手順2」で放置されると、無駄にメモリを確保している状態をタイムアウトまで保持することとなる。
で、これを繰り返すとメモリを圧迫していく
○ SYN flood attackを受けているかどうかは、どうやって見分ける?
攻撃の特性上、netstatで「SYN_RECV」の状態で止まっているものが多いとあやしい。
○ SYNクッキーを使う
# cat /proc/sys/net/ipv4/tcp_syncookies
# 1
になっている場合、SYNクッキーが使われている。
○ SYNクッキーが使われている場合の動作
SYN food状態になる前 = 通常通り、SYN要求があった時点でメモリを確保
SYN food状態になった後 = SYN要求があった時点でメモリは確保せず、SYN/ACKパケットを返す
以下のメッセージが出たら SYN flood状態 ?
# cat /var/log/messages
# kernel: possible SYN flooding on port xxxx. Sending cookies.