Lecture 1

advertisement
Lecture 23: Network Primer
7/15/2003
CSCE 590
Summer 2003
TCP Header
0
1
2
Source Port
4
3
Destination Port
5
6
7
Sequence Number
8
9
10
11
Acknowledgement Number
12
13
Hdr Len
14
U A P R S F
R C S S Y I
G K H T N N
Reserved
16
17
Window Size
18
TCP Packet Checksum
20
21
15
19
Urgent Pointer
22
23
Options (Variable length padded with 0’s)
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
TCP Fields
• Source port and Destination port:
– 16 bit fields valid values (0)1-65535
– Destination port, some listening server
– Source port – random, usually chosen above
1023 and called ephemeral
– Source ports should change with each new
session/connection
What’s Weird?
22:08:48.495489
4096
22:08:48.495588
4096
22:08:48.495616
4096
22:08:48.495643
4096
22:08:48.495668
4096
22:08:48.495693
4096
22:08:48.495718
4096
22:08:48.495743
4096
22:08:48.495768
4096
22:08:48.495793
4096
129.252.41.100.62505 > 129.252.176.4.890: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.627: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.461: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.1000: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.199: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.265: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.7597: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.826: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.645: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.84: S 3938526924:3938526924(0) win
What’s Weird?
22:19:30.481578
22:19:31.478737
22:19:32.478824
22:19:33.478916
22:19:34.478995
22:19:35.479099
22:19:36.479179
22:19:37.479293
22:19:38.479382
22:19:39.479463
129.252.41.10.2140 > 129.252.176.4.0:
129.252.41.10.2141 > 129.252.176.4.0:
129.252.41.10.2142 > 129.252.176.4.0:
129.252.41.10.2143 > 129.252.176.4.0:
129.252.41.10.2144 > 129.252.176.4.0:
129.252.41.10.2145 > 129.252.176.4.0:
129.252.41.10.2146 > 129.252.176.4.0:
129.252.41.10.2147 > 129.252.176.4.0:
129.252.41.10.2148 > 129.252.176.4.0:
129.252.41.10.2149 > 129.252.176.4.0:
S
S
S
S
S
S
S
S
S
S
1860807593:1860807593(0) win 512
1456794212:1456794212(0) win 512
2100191735:2100191735(0) win 512
1628560220:1628560220(0) win 512
1658245839:1658245839(0) win 512
858387126:858387126(0) win 512
1898100889:1898100889(0) win 512
164501792:164501792(0) win 512
1225583647:1225583647(0) win 512
324333867:324333867(0) win 512
Sequence Numbers
• Uniquely identifies the intial byte of each TCP
segment sent
• Keeps track of all data sent and received
• Should change for all new TCP segments sent
(retries have the same since they are duplicates)
• ISN – Initial Sequence Number – 1st sequence
number in session (each side picks one)
ISN Prediction
• Can fingerprint operating systems by how
they generate ISNs
• If it is a predictable pattern, can hijack a
session
• Nmap keeps an OS fingerprint database and
with the –O option and judges how difficult
TCP Sequence Prediction might be
Now What’s Weird?
22:08:48.495489
4096
22:08:48.495588
4096
22:08:48.495616
4096
22:08:48.495643
4096
22:08:48.495668
4096
22:08:48.495693
4096
22:08:48.495718
4096
22:08:48.495743
4096
22:08:48.495768
4096
22:08:48.495793
4096
129.252.41.100.62505 > 129.252.176.4.890: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.627: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.461: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.1000: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.199: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.265: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.7597: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.826: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.645: S 3938526924:3938526924(0) win
129.252.41.100.62505 > 129.252.176.4.84: S 3938526924:3938526924(0) win
Acknowledgement Numbers
• Receiving host must tell sending host it got
the data with an acknowledgement (ack)
• 32 bit number representing the next byte of
data receiving host expects = last received
sequence number + 1
• Has to be > 0, zero is impossible
22:08:48.495489 129.252.41.10.62677 > 129.252.176.4.80: S 3938526924:3938526924(0)
win 2048
22:08:48.495588 129.252.176.4.80 > 129.252.41.10.62677: S 373851632:373851632(0)
ack 3938526925 win 8576 <mss 1460? (DF)
What’s Weird?
23:12:26.100485 hostA.48776 > machineB.25: . ack 0 win
2048 <wscale 10,nop,mss 265,timestamp 1061109567
0,eol>
TCP Flags
• Tells the state of a TCP segment
–
–
–
–
–
–
SYN – session establishment (tcpdump = S)
FIN – session termination (F)
RST – session abort (R)
ACK – acknowledgement of received data (ack)
PUSH – send buffered data up to application (P)
URG – send data with higher priority (interrupts like
<CTRL-C>) (urg)
• Flags only make sense in particular combinations
TCP Three-Way Handshake
Host A
Host B
Send SYN seq = x
Receive SYN
Send SYN seq = y;
ACK = x+1
Receive SYN + ACK
Send ACK = y+1
Receive ACK
TCP Three-Way Handshake
•
•
•
•
SYN
SYN + ACK
ACK
Thereafter SYN + ACKs
TCP Three-Way Handshake
23:49:23.440874 129.252.41.10.57839 > 129.252.41.2.80: S
440460922:440460922(0)win 5840 <mss 1460,sackOK,timestamp
114681793 0,nop,wscale 0> (DF)
23:49:23.441040 129.252.41.2.80 > 129.252.41.10.57839: S
431660388:431660388(0)ack 440460923 win 5792 <mss
1460,sackOK,timestamp 2458279816 114681793,nop,wscale 0>
(DF)
23:49:23.441084 129.252.41.10.57839 > 129.252.41.2.80: . ack
431660389 win 5840 <nop,nop,timestamp 114681793 2458279816>
(DF)
TCP Three-Way Handshake
23:49:23.440874 129.252.41.10.57839 > 129.252.41.2.80: S
440460922:440460922(0)win 5840 <mss 1460,sackOK,timestamp 114681793
0,nop,wscale 0> (DF)
23:49:23.441040 129.252.41.2.80 > 129.252.41.10.57839: S
431660388:431660388(0)ack 440460923 win 5792 <mss 1460,sackOK,timestamp
2458279816 114681793,nop,wscale 0> (DF)
23:49:23.441084 129.252.41.10.57839 > 129.252.41.2.80: . ack 1 win 5840
<nop,nop,timestamp 114681793 2458279816> (DF)
23:49:23.441212 129.252.41.10.57839 > 129.252.41.2.80: P 1:104(103) ack 1 win
5840 <nop,nop,timestamp 114681793 2458279816> (DF)
23:49:23.441370 129.252.41.2.80 > 129.252.41.10.57839: . ack 104 win 5792
<nop,nop,timestamp 2458279816 114681793> (DF)
23:49:23.442322 129.252.41.2.80 > 129.252.41.10.57839: . 1:1449(1448) ack 104
win 5792 <nop,nop,timestamp 2458279816 114681793> (DF)
23:49:23.442354 129.252.41.10.57839 > 129.252.41.2.80: . ack 1449 win 8688
<nop,nop,timestamp 114681793 2458279816> (DF)
Gracefully Ending a Connection
• Gracefully – FIN
–
–
–
–
One side sends a FIN/ACK
The other side sends an ACK (One side closed)
Then the other side sends a FIN/ACK
And the first side sends an ACK (Two sides closed)
• Both sides should close their half of the full
duplex connection
• Sometimes they don’t.
Gracefully Ending a Connection
23:49:23.443343 129.252.41.10.57839 > 129.252.41.2.80: F
440461026:440461026(0)ack 431662073 win 8688
<nop,nop,timestamp 114681793 2458279816> (DF)
23:49:23.443489 129.252.41.2.80 > 129.252.41.10.57839: F
431662073:431662073(0)ack 440461027 win 5792
<nop,nop,timestamp 2458279817 114681793> (DF)
23:49:23.443532 129.252.41.10.57839 > 129.252.41.2.80: . ack
431662074 win 8688 <nop,nop,timestamp 114681793 2458279817>
(DF)
Abruptly Ending a Connection
• RESET halts it abruptly
00:20:30.427166 129.252.41.2.22 > 129.252.41.10.57878: P
2398201982:2398202990(1008) ack 2394778362 win 16704
<nop,nop,timestamp 2458466499 114868474> (DF)
00:20:30.427265 129.252.41.10.57878 > 129.252.41.2.22: R
2394778362:2394778362(0) win 0 (DF)
Invalid Flag Combinations
• Why?
–
–
–
–
–
Evading detection systems
Network mapping
Port scanning
OS fingerprinting
Could just be a corrupt packet
• Ex. Can’t start and end a session in the same
packet
• Reserved bits are used for fingerprinting too
Hdr Len
Reserved
U A P R S F
R C S S Y I
G K H T N N
Window Size
What’s Weird?
23:12:26.100477 129.252.41.10.48775 > 129.252.176.4.25: SFP
1933921669:1933921669(0) win 2048 urg 0 <wscale 10,nop,mss
265,timestamp 1061109567 0,eol>
23:12:26.100850 129.252.176.4.25 > 129.252.41.10.48775: S
4253896955:4253896955(0) ack 1933921670 win 65535 <mss
1260,nop,wscale 0,nop,nop,timestamp 0 0> (DF)
23:12:26.100866 129.252.41.10.48775 > 129.252.176.4.25: R
1933921670:1933921670(0) win 0 (DF)
TCP Retries
• What if a packet doesn’t get acknowledged?
• Eventually sender resends the exact packet
• Waits a little longer between each retry:
– 3seconds, 6 seconds, 12 seconds, etc
– Different Oses use different backoff algorithms
• What might cause retries?
– Destination host went down, ICMP message didn’t get
through
– Packet filtering device silently dropping
– RESET sent, but we didn’t get it
TCP Retries – Guess Which
23:46:04.527781 10.10.33.4.1140 > 129.252.41.16.22: S
698192483:698192483(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:07.509678 10.10.33.4.1140 > 129.252.41.16.22: S
698192483:698192483(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:13.518688 10.10.33.4.1140 > 129.252.41.16.22: S
698192483:698192483(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:25.537689 10.10.33.4.1140 > 129.252.41.16.22: S
698192483:698192483(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
------------------------------------------------------------------23:46:40.529581 10.10.33.4.39344 > 129.252.41.16.22: S
698192483:698192483(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:41.509678 10.10.33.4.39345 > 129.252.41.16.22: S
698735981:698735981(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:53.518688 10.10.33.4.39378 > 129.252.41.16.22: S
698654463:698654463(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
23:46:53.923679 10.10.33.4.39379 > 129.252.41.16.22: S
699129230:699129230(0) win 16384 <mss 1460,nop,nop,sackOK> (DF)
TCP Options
• At the end of the header
– MSS: Maximum Segment Size
– Window Scale: allows window receive buffers to be >
65535
– Timestamp: carries a timestamp for each segment
– Selective Acknowledgement: non-contiguous segments
can be acknowledged
– No Operation: NOP, padding to 4-byte boundaries
– End of List Option: pad final option to 4 byte boundary
• More OS fingerprinting possibilities
– Not all OSes support all options
– OSes list options in different orders
TCP Window Size
• Receiving host’s TCP buffer size for connection
• Flow control
– Window size changes dynamically as data is received
– Size of zero means stop sending data for a while
– Gtes bigger than zero when it can take more data
• Initial window sizes can be used for OS
fingerprinting (surprise!)
• Labeled with a “win” in tcpdump
References
• Highly recommend:
• http://www.sans.org/resources/tcpip.pdf
Download