SYNフラッド攻撃の概要と対策
SYNフラッド攻撃の内容
SYNフラッド攻撃 は、3ウェイハンドシェイクというプロセスを悪用した攻撃です。
インターネットのコミュニケーションにおいて、TCPプロトコルは信頼性の高い接続を確立するために広く使用されています。
この接続の確立プロセスは「3ウェイハンドシェイク」として知られており、以下のステップで構成されます。
- クライアントからサーバーへのSYNパケットの送信(「通信させてよ」)
- サーバーからクライアントへのSYN/ACKパケットの送信(「いいですよ、準備はいいかい?」)
- クライアントからサーバーへのACKパケットの送信(「準備OK」)
フラグ | 意味合い | 説明 |
---|---|---|
SYN | 同期 | 新しい接続の開始を示し、シーケンス番号の初期値を指定します |
ACK | 確認応答 | 前のパケットが正常に受信されたことを示します |
このプロセスにより、クライアント・サーバーの両者間に信頼性のある接続が確立されます。
SYNフラッド攻撃ではこのプロセスを悪用します。
攻撃者は大量のSYNパケットをサーバーに送りますが、故意に最後のACKパケットを送信しません。
つまり、「準備はいいかい?」というサーバー側からの問いかけに対して悪意をもってダンマリを決め込んでいる状態です。
サーバーはそれぞれのSYNパケットに対して接続の準備を行い、応答を待っていますが、最終的なACKが来ないため各々の接続は「半開」状態になります。
結果としてサーバーが多数の半開接続を保持することになり、正規のユーザーの接続要求を処理できなくなります。
結果として、サービス拒否(DoS)状態が発生します。
SYNフラッド攻撃はDoS攻撃の一種であり、サーバーのリソースを枯渇させることで正常なサービスの提供を妨害することを目的としています。
SYNフラッド攻撃の対策
色々あるようですが、いくつか対策方法を挙げます。
SYN Cookie
サーバーはSYNパケットを受け取ったときに、接続を確立するためのリソースを割り当てずに、SYN-ACK応答に含まれるシーケンス番号を特別な方法で計算します。
クライアントが正しいACKを返すと、サーバーはそのシーケンス番号から元のSYNパケットの情報を再構築でき、接続を確立します。これにより、不完全な接続によるリソースの浪費を防ぎます。
RST Cookie
SYNフラッド攻撃を検出した場合、サーバーはSYN-ACKの代わりにRSTパケットを送信することで、攻撃者による偽の接続要求をすぐに終了させます。
フィルタリング
ネットワーク機器やファイアウォールを使用して、異常なSYNパケットの流量を検出し、フィルタリングすることができます。
例えば、特定のIPアドレスからの接続要求が異常に多い場合、それらをブロックすることができます。
リバースプロキシ
リバースプロキシを使用して、実際のサーバーの前に追加の保護層を設置します。
リバースプロキシは接続要求を検証し、正当なものだけをバックエンドのサーバーに転送することができます。
AWSでの対策例
AWS Shield
AWS Shieldは、DoS攻撃からAWS上でホストされているアプリケーションを保護するためのマネージドサービスです。
AWS Shield Standard はすべてのAWS顧客に無料で提供され、一般的なDoS攻撃からの保護に利用することができます。
より高度な保護が必要な場合は AWS Shield Advanced という有料のサービスを使用することもできます。
Amazon CloudFront
これはCDNサービスとして有名ですね。
CloudFrontは、SYNフラッド攻撃を含む多くのDoS攻撃から保護する機能を備えています。
配信ネットワークを通じてトラフィックを分散させることで、攻撃の影響を軽減し、サービスの可用性を維持することができます。
まとめ
- SYNフラッド攻撃は、TCPの3ウェイハンドシェイクというプロセスを悪用したDoS攻撃の一種
- 対策には、SYN Cookie、RST Cookie、フィルタリング、リバースプロキシの使用などがある
- AWSでは、AWS Shield というマネージドサービスで対策可能
参考書籍
Discussion