📶

TCPのスリーウェイハンドシェイク

に公開

転職エージェントから面談の提案があったとする。あなたはスケジュールを仮押さえして「面談できますよ」と返答する。それから音沙汰はない。別々のエージェントから何度も何度も同じような提案が来る。まもなくスケジュールは仮押さえで埋まり、本来の面談をする時間はなくなってしまう。
パケットを大量に送りつけてサーバーの処理能力を飽和させるDDoS攻撃の一種である「SYNフラッド攻撃」はたとえばこのような攻撃だ。

インターネットの基盤となる通信プロトコルの一つであるTCP(Transmission Control Protocol)は、信頼性の高いデータ通信のために「スリーウェイハンドシェイク」という手順を踏む。適切なアポイントメントになぞらえれば以下のように行われる。

処理順 TCP 面談のアポイントメント
1 クライアントは初期シーケンス番号を含む SYNパケットをサーバーに送信する。 エージェントはオンライン面談で使うツールを書いた面談の申し込みをあなたに送信する。
2 サーバーはクライアントのSYNパケットを受信し、クライアントの初期シーケンス番号に+1した値と、サーバーの初期シーケンス番号を含むSYN-ACKパケットをクライアントに返信する。 あなたは面談のツールを使えること、当日面談ができることをエージェントに返信する。
3 クライアントはサーバーのSYN-ACKパケットを受信し、サーバーの初期シーケンス番号に +1 した値を含む ACKパケットを返す。 エージェントは面談の約束が確定したということをあなたに返信する。

このような攻撃に対抗するため、サーバー側では以下のような軽減策がある。

対策名 対策内容 たとえ
バックログキューの増加 クライアントから SYN パケットを受信するとサーバーが用意するバックログキューの数をシンプルに増やす。 スケジュールを調整して仮押さえできる枠を増やす。
最も古いハーフオープンのTCP接続を再利用 バックログがいっぱいになったら最も古いキューを上書きして再利用する。 枠がいっぱいになったら、応答がなくて一番前の仮押さえをキャンセルして、そこに仮押さえを入れる。
SYN Cookie サーバーはSYN受信時に接続情報を保存しない。暗号化されたクッキーをSYN-ACKのシーケンス番号として送信してクライアントから返信されたACKのクッキーを検証してから初めて接続情報を割り当てる。 エージェントが申し込みがあってもすぐに仮押さえはしない。返信に合言葉を含めて、その合言葉を含む連絡が来たらスケジュールを抑える。

とはいえ大規模なサイバー攻撃では秒間に10億パケットまたは1テラバイトを超えるアクセスがあり、最大で 5.6テラビットを記録したこともあるそうだ。ここまでの規模だと一事業会社での対応は現実的ではないので、Cloudflare のような CDN やクラウドサービスで攻撃元を自動的に遮断してもらうなど、専門の事業者による自動的な対策が必要になりそうだ。
https://blog.cloudflare.com/ddos-threat-report-for-2024-q4/

Discussion