TCP のバックアップ(No.4)
TCP とは †
名称 †
- Transmission Control Protocol
概要 †
- トランスポート層(OSI参照モデル、TCP/IPモデル)の通信プロトコル
- コネクション型
- 通信の信頼性が高い
- 送信元IPアドレスの偽装が難しい(可能ではある)
- セグメント
- TCPでやりとりするデータの単位(PDU)
TCPの仕組み †
TCPコネクション †
- 通信の開始時に通信路を確立し、終了時に通信路を解放する
- 3つのフェーズで行われる
- コネクション確立フェーズ
- 通信フェーズ
- コネクション切断フェーズ
コネクション確立フェーズ †
- 3wayハンドシェイク
- 1. →(SYN)
- 2. ←(ACK + SYN)
- 3. →(ACK)
- ※SYN:コネクション確立要求
- ※ACK:肯定応答
コネクション切断フェーズ †
- 1. →(FIN + ACK)
- 2. ←(ACK)
- 3. ←(FIN + ACK)
- 4. →(ACK)
TCP のデータ構造 †
- TCPヘッダとペイロードで構成される
- TCPヘッダ(20バイト~)
- ペイロード(アプリケーション層のデータ)
TCPヘッダ †
- 1〜32bit
- 送信元ポート番号(16)
- あて先ポート番号(16)
- 33〜64bit
- シーケンス番号(32)
- 65〜96bit
- 確認応答番号(ACK番号)(32)
- 97〜128bit
- データオフセット(4)
- 予約(未使用)(6)
- コントロールフラグ(コードビット、コントロールビット)(6)
- ウィンドウサイズ(16)
- 129〜160bit
- チェックサム(16)
- 緊急ポインタ(16)
- 161〜192bit
- オプション(n)
- パディング(32-n)
シーケンス番号 †
- 送信データの連番)
確認応答番号(ACK番号) †
- 受信データの連番
コントロールフラグ(コードビット) †
ビット位置 | コードビット | 意味 |
1 | URG | urgent |
2 | ACK | acknowledgement。SYNパケットの場合"0"、SYNパケット以外の場合"1" |
3 | PSH | push |
4 | RST | reset。TCP接続を強制終了する場合"1" |
5 | SYN | synchronize。SYNパケットの場合"1"、SYNパケット以外の場合"0" |
6 | FIN | finish。TCP接続を終了する場合"1" |
SYNクッキー †
- TCP通信の正当性を確認するために、SYN + ACKパケットのシーケンス番号に埋め込むデータのこと
- TCPヘッダをハッシュ化した値などが使われる
TCPの脆弱性 †
- 発信元IPアドレスの偽装が難しい
- 発信元IPアドレスが偽装されていても、コネクションの確立が必要ない攻撃に対しては弱い
- 接続要求(SYN)に対する応答(SYN/ACK)を攻撃に悪用される
- 反射・増幅型DDoS攻撃
- 初期シーケンス番号を推測したセッション・ハイジャック
- TCP ACKスキャン
- 「ポートスキャン」参照