【サービス別】SYNフラッド (Flood) 攻撃 対策機能
趣旨
前回の記事で、SYNフラッド(Flood)攻撃とSYN Cookieについて、紹介しました。
しかし、対策となる機能は、SYN Cookieの中でも様々な種類があり、SYN Cookie以外にもあります。
そこで今回は、各サービス別の対策機能と設定方法を紹介していきたいと思います。
Linux
大半のLinux ディストリビューションでは、デフォルトでSYN Cookieが有効になっています。
設定ファイルを見てましょう。
$ cat /proc/sys/net/ipv4/tcp_syncookies
1
1で有効、0で無効です。
無効にする場合は、vimコマンドやechoコマンドを使います。
$ vim /proc/sys/net/ipv4/tcp_syncookies
1
# Insertモードから0に変更
$ echo 0 > /proc/sys/net/ipv4/tcp_syncookies
AWS
AWSでは、AWS Shieldというサービスが該当し、SYNCookieとは別物の対策機能になります。
AWS Shieldとは、SYNフラッド攻撃をはじめとするDDos攻撃専用のセキュリティサービスです。
Standard と Advancedに分かれており、Standardはレイヤ3・4層の保護機能で、全ユーザが無料で使うことができます。
SYNフラッド攻撃はレイヤ4層なので、Standardで充分ですね。
Standardに関しては、ユーザ側から設定する必要はありません。
Cloud Front とRoute53を使用すれば、自動で適用されます。
各エッジロケーションに配置されているため、上記2つのサービスどちらかを使えば、通信が勝手に経由してくれるという仕組みです。
逆に、いずれのサービスも使わないと利用は不可能ということですね。
図解すると以下の通りです。
攻撃の自動検知・自動緩和は、AWS独自のシステムによって成り立っており、攻撃の96%を緩和します。詳細な情報は、下記ブラックベルトの資料が参考になるかと思います。
【AWS Black Belt Online Seminar】AWS Shield
Ciscoルータ
Ciscoルータでも、SYNCookieとは異なる対策機能を持っています。
TCPインターセプトといい、着信したTCPパケットをすべて検査する機能です。
ルータに高負荷がかかるため、一般的には採用されませんが、参考情報として説明します。
TCPインターセプトは、InterceptモードとWatchモードの2種類に分かれています。
Interceptモードは、リバースプロキシのような役割を果たします。
まず、背後にいるサーバ向けのTCPパケットを横取りし、クライアントと3wayハンドシェイクを行います。
クライアントから正常にACKパケットが返ってきたら、横取りしたSYNパケットをサーバに送信し、ルータ-サーバ間で3wayハンドシェイクを行います。
オリジナルのSYNパケットを保持しておけば、シーケンス番号がずれないため、コネクション確立後はクライアント-サーバ間で直接通信ができます。
図解すると以下の通りです。
Interceptモードでは閾値が設定されており、ハーフオープン状態のパケット数が一定数を越えたら、新規パケットを受け取るごとに古いものを削除していきます。
これによって、ACKパケットが送信されないSYNフラッド攻撃を見極め、サーバを保護することができます。
Wacthモードは、その名の通り監視機能です。
クライアントとサーバの3wayハンドシェイクを監視し、30秒以内にコネクションが確立されなかった場合は、ルータからRSTパケットを送信して、通信を切断するという機能です。
コネクション確立までの時間によって、SYNフラッド攻撃を検知するという仕組みですね。
設定方法は以下の通りです。
まず、TCPインターセプトを適用するパケットを決めます。
例では、192.168.1.0/24 宛のTCPパケットに対して適用しています。
(config)# access-list 任意の番号 permit tcp any 対象のセグメント
-例
(config)# access-list 100 permit tcp any 192.168.1.0 0.0.0.0.255
次に、TCPインターセプトを有効化し、モードを選択します。
デフォルトでは、Interceptモードが適用されます。
例では、wachモードを選択しています。
(config)# ip tcp intercept mode intercept/watch
-例
(config)# ip tcp intercept mode watch
次に、最初に設定した「access-list」を、番号を指定して紐づけます。
例では、「access-list 100」で作成したため、「list 100」になっています。
(config)# ip tcp intercept list access-listの番号
-例
(config)# ip tcp intercept list 100
最後に、「access-list」を着信するインターフェイスに紐づけて終わりです。
(config)# Interface 対象のインターフェイス名
(config-if)# ip access-group 100 in
-例
(config)# Interface GigabitEthernet0/0
(config-if)# ip access-group 100 in
まとめ
Linux,AWS,Ciscoの紹介をしました。
また新たなものがあったら追加していきます!
Discussion