>100 Views
June 16, 22
スライド概要
ネコでも分かる SYN cookies cookies こおしいず このスライドは開発中版であり、たぶん嘘も含まれます
DNS, TCP, UDP, IP OSI参照モデル * HTTP, DNS * SSL,TLS * SIP * TCP, UDP * IP, IPsec, ICMP * Ethernet, PPP, ATM * 100BASE-TX Wikipedia調べ https://a nslblog .ha ten ablog.com/en try/2019/05/22/OS I% E5%8F%8 2%E7% 85%A 7%E3% 83%A 2%E3% 83%8 7%E3% 83%A B%E3% 81%A 8TCP% EF%BC%8 FIP%E 3%81% AB%E 3%81% A4%E 3%81% 84%E 3%81% A6
IP
IP packet https://ja .wikipedia.org/wiki/IPv4
IP packet ここにTCP / UDPのパケット構造が載る https://ja .wikipedia.org/wiki/IPv4
IP 1.2.3.4 IP packet src: 1.2.3.4 dst: 5.6.7.8 data 5.6.7.8
IP 1.2.3.4 IP packet src: 1.2.3.4 dst: 5.6.7.8 data 5.6.7.8
IP 1.2.3.4 IP packet src: 5.6.7.8 dst: 1.2.3.4 data 5.6.7.8
IP 1.2.3.4 IP packet src: 5.6.7.8 dst: 1.2.3.4 data 5.6.7.8
IP spoofing 1.2.3.4 IP packet src: 4.3.2.1 dst: 5.6.7.8 data 5.6.7.8
IP spoofing 1.2.3.4 IP packet src: 4.3.2.1 dst: 5.6.7.8 data 5.6.7.8
IP spoofing 1.2.3.4 IP packet src: 5.6.7.8 dst: 4.3.2.1 data 5.6.7.8
IP spoofing IP packet src: 5.6.7.8 dst: 4.3.2.1 data 1.2.3.4 4.3.2.1 5.6.7.8
IP w/ TCP
TCP 3way handshake 1. SYN 2. SYN ACK 3. ACK 4. (実データ転送...) https://www.infraexper t.com/study/tcpip9.html
TCP state https://u ser s.cs.northweste rn.edu/~ag upta/cs340/proj ect2/TCPIP_State_Transitio n_Diagram.pdf
IP spoofing with TCP 1.2.3.4 SYN_SENT IP packet src: 4.3.2.1 dst: 5.6.7.8 SYN 5.6.7.8 LISTEN
IP spoofing with TCP 1.2.3.4 SYN_SENT IP packet src: 4.3.2.1 dst: 5.6.7.8 SYN 5.6.7.8 LISTEN
IP spoofing with TCP 1.2.3.4 SYN_SENT IP packet src: 5.6.7.8 dst: 4.3.2.1 SYN ACK 5.6.7.8 SYN_RCVD
IP spoofing with TCP 1.2.3.4 SYN_SENT は?誰? 4.3.2.1 IP packet src: 5.6.7.8 dst: 4.3.2.1 SYN ACK CLOSED 5.6.7.8 SYN_RCVD
IP spoofing with TCP 1.2.3.4 5.6.7.8 SYN_SENT めでたし...? は?誰? 4.3.2.1 CLOSED SYN_RCVD
IP spoofing with TCP 1.2.3.4 5.6.7.8 SYN_RCVD SYN_SENT は?誰? 5.6.7.8で資源枯渇する [SYN flood] TCP stateの記憶のために、メモリ を消費する。 4.3.2.1 CLOSED
SYN cookies
TCP 3way handshake 1. SYN 2. SYN ACK 3. ACK 4. (実データ転送...) https://www.infraexper t.com/study/tcpip9.html
TCP 3way handshake 続きを読む https://www.infraexper t.com/study/tcpip9.html
TCP 3way handshake 続きを読む 初期シーケンス番号(seq#)は任意。 clientからの初期seq#は任意が来る。 serverからの初期seq#は任意に選ぶ。 https://www.infraexper t.com/study/tcpip9.html
TCP seq#, ack#(確認応答番号) 互いに、 ● seq#が来たら、 ● データサイズを加算し、 ● ack#に入れて 返答をする必要がある。 来たpacketのack#は、直前に送った seq#と矛盾していてはならない。 (善人的に見れば、パケットが一部 遅延/欠損したことを示す) https://www.infraexper t.com/study/tcpip9.html
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 /synco okie s.html
IP with TCP with SYN cookies 1.2.3.4 SYN_SENT IP packet src: 1.2.3.4 dst: 5.6.7.8 SYN seq: x 5.6.7.8 LISTEN
IP with TCP with SYN cookies 1.2.3.4 SYN_SENT IP packet src: 1.2.3.4 dst: 5.6.7.8 SYN seq: x 5.6.7.8 LISTEN
IP with TCP with SYN cookies 1.2.3.4 SYN_SENT IP packet src: 5.6.7.8 dst: 1.2.3.4 SYN ACK seq: f(...) ack: x+1 5.6.7.8 (stateless)
IP with TCP with SYN cookies 1.2.3.4 SYN_SENT IP packet src: 5.6.7.8 dst: 1.2.3.4 SYN ACK seq: f(...) ack: x+1 5.6.7.8 (stateless)
IP with TCP with SYN cookies 1.2.3.4 ESTAB IP packet src: 1.2.3.4 dst: 5.6.7.8 ACK seq: x+1 ack: f(...)+1 5.6.7.8 (stateless)
IP with TCP with SYN cookies 1.2.3.4 ESTAB IP packet src: 1.2.3.4 dst: 5.6.7.8 ACK seq: x+1 ack: f(...)+1 5.6.7.8 (stateless)
IP with TCP with SYN cookies 1.2.3.4 ESTAB IP packet src: 1.2.3.4 dst: 5.6.7.8 ACK seq: x+1 ack: f(...)+1 5.6.7.8 (stateless) Client IPなどから算出したf(...)の値 を使って、ack#の妥当性検査
IP with TCP with SYN cookies 1.2.3.4 ESTAB IP packet src: 1.2.3.4 dst: 5.6.7.8 ACK seq: x+1 ack: f(...)+1 5.6.7.8 ESTAB !!! サーバ側で初めてメモリを確保
SYN cookies SYN後のSYN ACKレスポンスを受け取ってないと、適切なack#つきでのACKが 送れない。 secret functionが適切であれば、24bitの値を当てるのはむずかしい。 http://cr .yp.to /synco okie s.html