SYN cookies

cookies 146
cookies 146Univ. Student at Univ. of Tokyo
ネコでも分かる
SYN cookies
こおしいず
このスライドは開発中版であり、たぶん嘘も含まれます
c o o k i e s
DNS, TCP, UDP, IP
OSI参照モデル
* HTTP, DNS
* SSL,TLS
* SIP
* TCP, UDP
* IP, IPsec, ICMP
* Ethernet, PPP, ATM
* 100BASE-TX
https://ansl-
blog.hatenablog.com/entry/2019/05/22/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8TCP%
EF%BC%8FIP%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6
Wikipedia調べ
IP
IP packet
https://ja.wikipedia.org/wiki/IPv4
IP packet
ここにTCP / UDPのパケット構造が載る
https://ja.wikipedia.org/wiki/IPv4
IP
1.2.3.4
5.6.7.8
IP packet
src: 1.2.3.4
dst: 5.6.7.8
data
IP
1.2.3.4
5.6.7.8
IP packet
src: 1.2.3.4
dst: 5.6.7.8
data
IP
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 1.2.3.4
data
IP
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 1.2.3.4
data
IP spoofing
1.2.3.4
5.6.7.8
IP packet
src: 4.3.2.1
dst: 5.6.7.8
data
IP spoofing
1.2.3.4
5.6.7.8
IP packet
src: 4.3.2.1
dst: 5.6.7.8
data
IP spoofing
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 4.3.2.1
data
IP spoofing
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 4.3.2.1
data
4.3.2.1
IP w/ TCP
TCP 3way handshake
1. SYN
2. SYN ACK
3. ACK
4. (実データ転送...)
https://www.infraexpert.com/study/tcpip9.html
TCP state
https://users.cs.northwestern.edu/~agupta/cs340/proj
ect2/TCPIP_State_Transition_Diagram.pdf
IP spoofing with TCP
1.2.3.4
5.6.7.8
IP packet
src: 4.3.2.1
dst: 5.6.7.8
SYN
SYN_SENT
LISTEN
IP spoofing with TCP
1.2.3.4
5.6.7.8
IP packet
src: 4.3.2.1
dst: 5.6.7.8
SYN
SYN_SENT
LISTEN
IP spoofing with TCP
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 4.3.2.1
SYN ACK
SYN_RCVD
SYN_SENT
IP spoofing with TCP
1.2.3.4
5.6.7.8
IP packet
src: 5.6.7.8
dst: 4.3.2.1
SYN ACK
4.3.2.1
CLOSED
は?誰?
SYN_RCVD
SYN_SENT
IP spoofing with TCP
1.2.3.4
5.6.7.8
4.3.2.1
CLOSED
は?誰?
SYN_RCVD
SYN_SENT
めでたし...?
IP spoofing with TCP
1.2.3.4
5.6.7.8
4.3.2.1
CLOSED
は?誰?
SYN_RCVD
5.6.7.8で資源枯渇する [SYN flood]
TCP stateの記憶のために、メモリ
を消費する。
SYN_SENT
SYN cookies
TCP 3way handshake
1. SYN
2. SYN ACK
3. ACK
4. (実データ転送...)
https://www.infraexpert.com/study/tcpip9.html
TCP 3way handshake
続きを読む
https://www.infraexpert.com/study/tcpip9.html
TCP 3way handshake
https://www.infraexpert.com/study/tcpip9.html
続きを読む
初期シーケンス番号(seq#)は任意。
clientからの初期seq#は任意が来る。
serverからの初期seq#は任意に選ぶ。
TCP seq#, ack#(確認応答番号)
https://www.infraexpert.com/study/tcpip9.html
互いに、
● seq#が来たら、
● データサイズを加算し、
● ack#に入れて
返答をする必要がある。
来たpacketのack#は、直前に送った
seq#と矛盾していてはならない。
(善人的に見れば、パケットが一部
遅延/欠損したことを示す)
SYN cookies
賢い人「任意で良いところの初期seq#をうまく調整すれば、SYN_RECV時点で
はメモリ確保しなくていいんじゃね?」
初期seq# := f (counter, MSS, Client IP, Client port#, Server IP, Server port#)
● MSS … クライアントとサーバー間で合意しなければならないTCPの最大ペ
イロード長。IPでいうMTU。
これで多少パフォーマンスを犠牲に
しながら、サーバー側のメモリ確保を
遅延できる。
http://cr.yp.to/syncookies.html
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
IP packet
src: 1.2.3.4
dst: 5.6.7.8
SYN
seq: x
SYN_SENT
LISTEN
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
SYN_SENT
LISTEN
IP packet
src: 1.2.3.4
dst: 5.6.7.8
SYN
seq: x
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
(stateless)
SYN_SENT
IP packet
src: 5.6.7.8
dst: 1.2.3.4
SYN ACK
seq: f(...)
ack: x+1
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
(stateless)
IP packet
src: 5.6.7.8
dst: 1.2.3.4
SYN ACK
seq: f(...)
ack: x+1
SYN_SENT
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
(stateless)
IP packet
src: 1.2.3.4
dst: 5.6.7.8
ACK
seq: x+1
ack: f(...)+1
ESTAB
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
(stateless)
IP packet
src: 1.2.3.4
dst: 5.6.7.8
ACK
seq: x+1
ack: f(...)+1
ESTAB
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
(stateless)
IP packet
src: 1.2.3.4
dst: 5.6.7.8
ACK
seq: x+1
ack: f(...)+1
ESTAB
Client IPなどから算出したf(...)の値
を使って、ack#の妥当性検査
IP with TCP with SYN cookies
1.2.3.4
5.6.7.8
ESTAB !!!
IP packet
src: 1.2.3.4
dst: 5.6.7.8
ACK
seq: x+1
ack: f(...)+1
ESTAB
サーバ側で初めてメモリを確保
SYN cookies
SYN後のSYN ACKレスポンスを受け取ってないと、適切なack#つきでのACKが
送れない。
secret functionが適切であれば、24bitの値を当てるのはむずかしい。
http://cr.yp.to/syncookies.html
1 of 37

More Related Content

Similar to SYN cookies(20)

Openstack+Ceph設定ガイドOpenstack+Ceph設定ガイド
Openstack+Ceph設定ガイド
OSSラボ株式会社4.7K views
Riscv+fpga200606Riscv+fpga200606
Riscv+fpga200606
たけおか しょうぞう670 views
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
Kiwamu Okabe3.1K views
Fpga local 20130322Fpga local 20130322
Fpga local 20130322
Takefumi MIYOSHI932 views
Scapy presentationScapy presentation
Scapy presentation
ashigirl ZareGoto2K views
Boost sg msgpackBoost sg msgpack
Boost sg msgpack
Takatoshi Kondo4K views
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
ashigirl ZareGoto2.5K views
TelemetryについてTelemetryについて
Telemetryについて
tetsusat978 views
FD.io VPP事始めFD.io VPP事始め
FD.io VPP事始め
tetsusat2.3K views
Visualizenetworktraffic 20181108Visualizenetworktraffic 20181108
Visualizenetworktraffic 20181108
Takashi Umeno401 views
IPsecについてIPsecについて
IPsecについて
Nomura Yusuke9.4K views
Starting qt5beta at_raspberry_pi Qtnagoya#6Starting qt5beta at_raspberry_pi Qtnagoya#6
Starting qt5beta at_raspberry_pi Qtnagoya#6
Kazuo Asano (@kazuo_asa)2.1K views
Container Networking Deep DiveContainer Networking Deep Dive
Container Networking Deep Dive
Hirofumi Ichihara11.2K views

SYN cookies