SYNとは何か:TCPハンドシェイクから攻撃・対策まで詳解(初心者〜運用者向け)
概要:SYNとは何か
SYNは、ネットワークプロトコルTCP(Transmission Control Protocol)における制御フラグの一つで、接続の開始を示します。TCPは信頼性の高い通信を提供するために、3ウェイ・ハンドシェイク(three-way handshake)という手順で接続を確立します。その最初のパケットがSYNフラグを立てたTCPセグメントです。
TCPの3ウェイ・ハンドシェイク(詳細)
3ウェイ・ハンドシェイクは次の3つのステップで構成されます。
- クライアント → サーバ:SYN — クライアントは初期シーケンス番号(ISN)を指定したTCPセグメントのSYNビットを1にして送信する。
- サーバ → クライアント:SYN/ACK — サーバは受け取ったISNに基づく確認応答(ACK)と自身のISNを含むSYNを返す(SYNとACK両方のフラグが1)。
- クライアント → サーバ:ACK — クライアントがサーバのISNを確認し、応答のACKを送ると接続は確立(ESTABLISHED)する。
この手順により両端はお互いの初期シーケンス番号を確認し、パケットの受信順序や再送制御に必要な状態を構築します。相手のISNはTCPセッションの同期に重要で、予測されにくいランダムなISNを使うことでセッションハイジャックのリスクを低減します。
SYNパケットの役割と中身
SYNパケットは通常ペイロード(データ)を伴わないことが多く、TCPヘッダにISNやウィンドウサイズ、オプション(MSS、ウィンドウスケール、SACK許可、タイムスタンプなど)が含まれます。SYNが立っているパケットはコネクションの初期ネゴシエーションに使われ、オプションのやり取りで両端が今後の通信パラメータを決めます。
TCP状態遷移とSYN
- LISTEN — サーバが接続要求(SYN)を待っている状態。
- SYN_RECEIVED — サーバがSYNを受け取り、SYN/ACKを送り初期接続情報を保持している状態(まだ確立前)。この状態は半開き(half-open)とも呼ばれ、リソースを消費する。
- ESTABLISHED — 3ウェイ完了後の確立状態。
SYNを受け取った段階(特にSYN_RECEIVED)では、サーバは接続に関するエントリ(ソケット、バッファ、タイマなど)を保持します。多数のSYNが来るとこれらのリソースが枯渇し、正当な接続の受け入れが出来なくなる可能性があります(SYNフラッド)。
SYNフラッド攻撃(SYN Flood)
SYNフラッドは、サーバに大量のSYNを送り続けて半開きの接続を蓄積させ、リソースを枯渇させるDDoS(あるいはDoS)の代表的手法です。攻撃者は送信元IPを偽装(IPスプーフィング)することが多く、サーバが返すSYN/ACKに対するACKが返らないため、SYN_RECEIVEDのまま状態が残ります。
影響:
- 接続キュー(backlog)の枯渇
- CPU/メモリ/ソケット資源の消費
- 正当なユーザーからの接続拒否(サービス不能)
SYNフラッドの検出方法
- ネットワーク監視ツールでSYNパケットの急増を検出(例:tshark/tcpdump で tcp[tcpflags] & tcp-syn != 0 のカウント)
- サーバ上でのソケット状態確認:ss -s, ss -tan | grep SYN_RECV, netstat -an | grep SYN_RECV
- IDS/IPSログ(SYN率の急増や送信元IPの偏り)
対策(運用/設計レベル)
SYN攻撃対策は複数レイヤで行うのが効果的です。以下は主要な手法です。
- SYN cookies(サーバ側のスタック実装)
SYN cookiesは、SYN_RECEIVED状態で接続情報を大量に保持する代わりに、ISNに情報を埋め込んで一時的に状態を保持しない手法です。クライアントがACKして戻ってきたときにISNを検証して接続を復元します。これによりSYNによるリソース消費を回避できます。ただし一部TCPオプションのネゴシエーションが制限される場合があります。
- バックログやタイムアウトの調整
カーネルパラメータ(Linuxならnet.ipv4.tcp_max_syn_backlog, somaxconn, tcp_synack_retriesなど)を調整して短期の負荷に耐える設定にします。ただし無制限に増やすとメモリ消費や他の影響が出るため、慎重なチューニングが必要です。
- ネットワークレベルでのフィルタリング
ファイアウォール(iptables/nftables)で短時間に多数のSYNを送るIPをレート制限する、あるいは疑わしい送信元をブロックする。外部のDDoS保護サービスを利用するのも有効です。
- SYNプロキシ・SYNキャッシュ
一部のロードバランサや専用機はSYNプロキシを使い、クライアントとサーバの間でSYNハンドシェイクを代理してサーバを保護します。SYNキャッシュは短期的にSYNを効率よく管理するメカニズムです。
- ネットワーク設計の冗長化
ロードバランサ、複数のエンドポイント、クラウドベースの分散防御を組み合わせ可用性を高めます。
実践的な防御設定例(概要)
- LinuxでSYN cookiesを有効化:sysctl -w net.ipv4.tcp_syncookies=1
- バックログ増加:sysctl -w net.ipv4.tcp_max_syn_backlog=4096(環境により調整)
- iptablesで簡単なレート制限:iptables -A INPUT -p tcp --syn -m limit --limit 25/min --limit-burst 100 -j ACCEPT(注:環境依存のため本番投入前に検証すること)
- ロードバランサでSYNプロキシを有効にする(F5、NGINXなどの製品やクラウドL7/L4サービス)
関連するセキュリティ注意点
- ISNのランダム性 — ISNが予測可能だとTCPセッション乗っ取り(ハイジャック)やリセット攻撃に使われる。現代の実装はランダム化を強化している。
- IPスプーフィング — SYNフラッドではよく行われる。受信側での接続の妥当性確認やネットワーク境界でのフィルタリング(ルートフィルタリングやBCP 38準拠)で緩和可能。
- ログとメトリクス — SYNの異常増加は早期検出が可能。SYN/ACK再送やSYN_RECVの蓄積などのメトリクスを監視する。
診断とトラブルシューティングの実践例
問題発生時に取るべき代表的なステップ:
- ネットワークトラフィック確認:tcpdump -n -i
'tcp[tcpflags] & (tcp-syn) != 0' でSYNの発生を観察 - ソケット状態:ss -tan | awk '{print $1,$2,$3,$4,$5}' | grep SYN_RECV や ss -s で概要を確認
- システムログ、ファイアウォールログを参照して異常IPやパターンを検出
- 一時的にSYN cookiesを有効化し、効果を評価
SYN以外の関連技術トピック
- TCP Fast Open(TFO) — パフォーマンス向上のために、クライアントが事前にTFOクッキーを持っていれば最初のSYNにデータを載せて送ることができる。これによりラウンドトリップが1回分削減される場合があるが、セキュリティ・インタロップの検討が必要。
- TCPオプション(SACK、ウィンドウスケール、タイムスタンプ) — これらはSYN時にネゴシエートされる。SYN cookies使用時には一部オプションが利用不可になるケースがあるため影響を理解しておく。
まとめ(運用者への提言)
SYNはTCP接続の基礎であり、その理解はネットワーク設計・運用・セキュリティ対策の出発点です。SYNフラッドは依然として実用的な攻撃手法の一つですが、適切なカーネル設定、SYN cookiesやプロキシ、ネットワークレベルでのレート制限やクラウド防御を組み合わせることで十分に緩和できます。監視とログの自動化、そしてテスト環境での対策検証を必ず行ってください。
参考文献
- RFC 793 - Transmission Control Protocol
- RFC 4987 - TCP SYN Flooding Attacks and IP Spoofing
- Linux kernel networking: TCP documentation
- SYN flood — Wikipedia
- RFC 1948 - Defending Against Sequence Number Attacks (ISN randomization)
投稿者プロフィール
最新の投稿
建築・土木2025.12.26内装工事の完全ガイド:設計・材料・施工手順・法規・維持管理まで詳解
建築・土木2025.12.26外壁の基礎と最新トレンド:素材・性能・維持管理の実践ガイド
建築・土木2025.12.26RC造(鉄筋コンクリート造)徹底解説:設計・施工・維持管理のポイント
建築・土木2025.12.26木造建築のすべて:構造・耐震・環境性から最新技術まで徹底解説

