Historia wymaga pasterzy, nie rzeźników.

attrition.org/mirror/attrition/
--------------------------------- PROTOKOLY --------------------------------
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
3.1 TCP
W protokole TCP (ang. Transmission Control Protocol) aby mozna bylo rozpoczac
transmisje wlasciwych danych nalezy uprzednio zainicjowac polaczenie - mowimy
wiec, ze protokol TCP jest tzw. protokolem polaczeniowym. Gdy to nastapi dane
moga byc przesylane w obu kierunkach.
Gdy nawiazujemy polaczenie wykonywane sa 3 kroki - jest to tzw. 3 stopniowe
polaczenie, z angielskiego zwane potrojnym potrzasnieciem dloni (3-way
handshake). Wyglada to tak:
1 A -SYN-> B
2 A <-SYN/ACK- B
3 A -ACK-> B
A - comp wysylajacy prosbe o polaczenie
B - comp odpowiadajacy na wezwanie
SYN,SYN/ACK,ACK - nazwy flag wysylanych pakietow
Przyjrzyjmy sie powyzszym flagom:
SYN - (SYNchronize Sequence Numbers) przesylana jest tylko przy
3-stopniowym polaczeniu i sluzy do przekazywania numerow komunikacji (initial sequence
number, w skrocie ISN). Numery te sa niezbedne do nawiazania i kontynuowania polaczenia.
ACK - (ACKnowledgment) potwierdza zgodnosc numerow komunikacji,
przekazuje kolejnu oczekiwany numer oraz numer odebrany +1.
Inne nie wymienione wczesniej flagi to:
FIN - (FINish) zakonczenie wysylania danych (nie odbierania!)
RST - (ReSeT) zerwanie polaczenia
URG - (URGent) jest to flaga wykorzystywana przy wysylaniu tzw. Out Of Band data
(OOB - pamietacie slynnego WinNuke?) lub inaczej Expedited data. Sa to dane
wysokopriorytetowe, ktore musza byc obsluzone w pierwszej kolejnosci (jak
naprzyklad nacisniecie podczas sesji telnetu Control-C czy Control-S)
PSH - (PuSH) Oznacza dane, ktore tez powinny byc dostarczone mozliwie
najszybciej. Wystepuje w polaczeniach interaktywnych jak telnet czy rlogin.
Oke, przejdzmy teraz ponownie do naszego polaczenia, oto jak to wyglada
step-by-step:
Krok 1: comp A sle do B prosbe o polaczenie przekazujac pakiet oznaczony flaga
SYN, zawierajacy ISN.
Krok 2: comp B odpowiada ysylajac pakiet SYN (zawierajacy jego wlasne ISN) i ACK
(zawierajacy potwiedzenie odebranego ISN compa A +1).
Krok 3: comp A rowniez wysyla potwierdzenie odebranai ISN compa B oznaczajac
pakiet flaga ACK w podany powyzej sposob.
Jezeli wszystko pojdzie jak opisalem to powyzej (to znaczy numerki ISN beda sie
zgadzaly) to moze rozpoczac sie transmisja wlasciwych danych.
Po co sa wlasciwie te ISN'y?
Gdy przekazywany jest kolejny ISN sprawdzane jest czy jest on kolejnym
oczekiwanym. Jezeli tak nie jest otrzymany pakiet zostanie zignorowany. To
wlasnie odgadniecie kolejnych numerow ISN stanowi caly trudnosc w technikach
takich jak spoofing czy hijacking.
Oto jak wyglada naglowek TCP i ile bitow zajmuja jego kolejne elementy:
32 bity
|0 15|16 31|
_____________________________________________________________
| port zrodlowy (16 bitow) | port docelowy (16 bitow) |
|-------------------------------------------------------------|
| numer sekwencji (32 bity) |
|-------------------------------------------------------------|
| numer potwierdzenia (32 bity) |
|-------------------------------------------------------------|
|dlugosc|zarezerwo-|U|A|P|R|S|F| |
| nagl. |wane |R|C|S|S|Y|I| rozmiar okna (16 bitow) |
|4 bity | 6 bitow |G|K|H|T|N|N| |
|-------------------------------------------------------------|
| suma kontrolna (16 bitow) | wskaznik URGent (16 bitow) |
|-------------------------------------------------------------|
= opcje <-|-> dopelnienie = opcjonalne
|-------------------------------------------------------------|
= D A N E = opcjonalne
| |
Przyjrzyjmy sie ponizszemu logowi ze sniffierki. Jak nie trudno zauwazyc
(port 23) jest to polaczenie telnet'owe:
10.0.0.2 - Windows NT
10.0.0.14 - Linux (RedHat 6.1) - na nim odpalilem sniffierke
---POCZATEK LOGU
Supported Network device found. (eth0)
Sniffit.0.3.7 Beta is up and running.... (10.0.0.14)
1
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C4B FLAGS: ----S-
2
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76113 ACK (hex): 12C4C
FLAGS: -A--S- Window: 7D78
3
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C4C ACK (hex): 22A76114
FLAGS: -A---- Window: 2238
4
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76114 ACK (hex): 12C4C
FLAGS: -AP--- Window: 7D78
5
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C4C ACK (hex): 22A76120
FLAGS: -AP--- Window: 222C
6
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76120 ACK (hex): 12C4F
FLAGS: -A---- Window: 7D78
7
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C4F ACK (hex): 22A76120
FLAGS: -AP--- Window: 222C
8
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76120 ACK (hex): 12C58
FLAGS: -AP--- Window: 7D78
9
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C58 ACK (hex): 22A76126
FLAGS: -AP--- Window: 2226
10
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76126 ACK (hex): 12C63
FLAGS: -AP--- Window: 7D78
11
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C63 ACK (hex): 22A76135
FLAGS: -AP--- Window: 2217
12
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76135 ACK (hex): 12C66
FLAGS: -A---- Window: 7D78
13
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C66 ACK (hex): 22A76135
FLAGS: -AP--- Window: 2217
14
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76135 ACK (hex): 12C72
FLAGS: -A---- Window: 7D78
15
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.14.23-10.0.0.2.1232
SEQ (hex): 22A76135 ACK (hex): 12C72
FLAGS: -AP--- Window: 7D78
16
TCP Packet ID (from_IP.port-to_IP.port): 10.0.0.2.1232-10.0.0.14.23
SEQ (hex): 12C72 ACK (hex): 22A7617F
FLAGS: -AP--- Window: 21CD
17