Analýza hlavičiek protokolov s obojsmernou povahou
Úvod do problematiky
Skôr než začneme analyzovať hlavičky jednotlivých protokolov s obojsmernou povahou, mali by sme si niečo povedať o obojsmerných tokoch a o tokoch samotných.
Tok (Flow) je definovaný ako skupina IP paketov ktoré prechádzajú pozorovacím bodom v sieti počas istého časového intervalu. Všetky pakety patriace do konkrétneho toku majú skupinu spoločných vlastností. Každá vlastnosť je definovaná ako výsledok aplikovania funkcie na nasledujúce hodnoty:
- jednej alebo viacerých hodnôt políčok hlavičky paketu
- jednej alebo viacerých hodnôt charakteristík samotného paketu
- jednej alebo viacerých hodnôt políčok odvodených zo správania paketu
Paket patrí do daného toku ak spĺňa všetky definované vlastnosti toku.
Kľúčové políčka (Flow Key) - každé z políčok ktoré
- patria do hlavičky paketu
- sú vlastnosťou samotného paketu
- sú odvodené zo správania paketu
a ktoré sú použité na definíciu toku, sú Identifikátormi toku (Flow Keys).
Smerové kľúčové políčka (Directional Key Fields) sú jednotlivé políčka v identifikátore toku ktoré sú spojené s jedným koncovým bodom toku.
Nesmerové kľúčové políčka (Non-Directional Key Fields) sú jednotlivé políčka v identifikátore toku ktoré niesú spojené ani s jednym koncovým bodom toku.
Jednosmerný tok (Uniflow) je tok zložený z paketov vyslaných z jedného koncového bodu do druhého koncového bodu.
Obojsmerný tok (Biflow) je tok zložený z paketov vyslaných v oboch smeroch medzi dvoma koncovými bodmi. Obojsmerný tok je zložený z dvoch jednosmerných tokov ktorých:
- hodnoty každého nesmerového kľúčového políčka každého jednosmerného toku sú identické nesmerovým kľúčovým políčkam druhého jednosmerného toku.
- hodnoty každého smerového kľúčového políčka každého jednosmerného toku sú idetické obrátenému smeru smerovým kľúčovým políčkam druhého jednosmerného toku.
Z predchádzajúcich definícií nám vyplýva, že pri každom obojsmernom protokole budeme musiet určiť kľúčové políčka a ku každému kľúčovému políčku určiť či sa jedná o smerové alebo nesmerové. Na základe určených políčok budeme môcť vytvoriť pravidlá na klasifikáciu paketov do jednotlivých tokov.
Analýza hlavičky IP protokolu
Hoci sa nejedná o protokol obojsmernej povahy, je potrebné rozanalyzovať políčka hlavičky tohto protokolu pretože tento protokol je nosným protokolom pre protokoly obojsmernej povahy. Niektoré políčka tohto protokolu budú patriť do smerových a nesmerových kľúčových políčok obojsmerných protokolov ktoré používajú tento protokol.
Analýza jednoylivých políčok IP hlavičky:
- Version - políčko obsahujúce verziu IP paketu, kedže na sieti sa môžu vyskytnúť pakety s rôznou verziou, toto políčko by malo byť zahrnuté medzi kľúčové políčka. Verzia paketu by mala byť v oboch smeroch toku rovnaká, čiže políčko bude nesmerové.
- Header Length - políčko určujúce dĺžku hlavičky paketu. Dĺžka hlavičky sa môže meniť nezávisle od smeru alebo toku do ktorého paket patrí a preto nemôže byť kľúčovým políčkom.
- Type of Service - hodnoty určujúce prioritu a parametre spojené s kvalitou prenosu paketu ktoré nemajú nič spoločné s tokmi a ani smerom. Môžu sa meniť nezávisle od smeru alebo toku do ktorého paket patrí, preto ani toto políčko nemôže byť kľúčovým políčkom.
- Total Length - políčko obsahujúce počet bajtov v pakete. Hodnoty sa líšia v závislosti od veľkosti prenášaných dát. Veľkosť prenášaných dát nemá nič spoločné so smerom alebo s tokom do ktorého paket patrí, preto toto políčko nebudeme klasifikovať ako kľúčové.
- Identification -
- Flags - obsahuje kontrolné identifikátory spojené s fragmentáciou paketu. Toto políčko takisto nieje zaujímave z hľadiska smeru a toku paketu, čiže nebude brané ako kľúčové.
- Fragment Offset - políčko indikujúce pozíciu fragmentu v originálnom datagrame. Opäť ako predchádzajúce políčko, aj toto je spojené s fragmentáciou a nebude zaujímavé, čiže nebude brané ako kľúčové.
- Time To Live - políčko určujúce životnosť paketu. Z hľadiska topológie sa môže toto políčko meniť vzhľadom na pozorovací bod, a takisto nemá nič spoločné so smerom alebo tokom paketu. Preto nebude považované za kľúčové.
- Protocol - políčko indikujúce typ protocolu dalšej úrovne použitého v dátovej časti paketu. Podľa typu použitého protokolu môžme určiť či sa jedná o protokol obojsmernej povahy alebo nie. Takisto v rámci jedného toku musí byť použitý rovnaký protokol, preto toto políčko bude kľúčové. V oboch smeroch musí byť použitý rovnaký protokol, preto políčko nebude smerovým.
- Header Checksum - políčko obsahujúce kontrolný súčet hlavičky, obsah tohto políčka je závislý od obsahov iných políčok, a kedže nie každé políčko je kľúčové, nemôže byť ani toto.
- Source Address - políčko obsahujúce zdrojovú adresu paketu. Hodnota určuje odkial pochádza paket a takisto určuje kam má byť odoslaná odpoveď, čiže určuje smer. Toto políčko teda bude kľúčové a zároveň aj smerové.
- Destination Address - políčko obsahujúce cieľovú adresu paketu. Hodnota určuje kam má byť paket smerovaný, určuje smer. Preto aj toto políčko bude kľúčové a zároveň aj smerové.
- Options - políčko ktoré sa môže ale nemusí nachádzať v hlavičke, preto nemôže byť kľúčovým.
Analýza tohto protokolu je teda skončená a pre lepšiu predstavivosť som kľúčové políčka zvýraznil na nasledujúcom obrázku:
Analýza hlavičky TCP protokolu
Podľa predošlej analýzy sme dospeli k tomu, že tento protokol je obojsmerný. Budeme teda analyzovať jednotlivé políčka hlavičky tohto protokolu.
Analýza políčok hlavičky TCP protokolu:
- Source Port - obsahuje zdrojový port, taktiež určuje na ktorý port má byť odpoveď odoslaná, čiže určuje smer. Preto bude toto políčko považované za kľúčové a zároveň aj smerové.
- Destination Port - obsahuje cieľový port, určuje port na ktorý je odoslaný segment, určuje smer. Políčko podobne ako zdrojový port, bude považované za kľúčové a zároveň aj smerové.
- Sequence number - obsahuje sekvenčné číslo segmentu. V TCP protokole je používané označovanie jednotlivých segmentov aby sa vedeli zoradiť na druhej strane koncového bodu. Počas prenosu viacerých segmentov sa toto číslo lineárne zvyšuje o 1. Dá sa teda predpokladať hodnota sekvenčného čísla nasledujúceho segmentu. Dá sa odvodiť zo správania protokolu preto toto políčko môžme považovať za kľúčové. Nemá nič spoločné so smerovaním paketu, tak nemôže byť smerové.
- Acknowledgement number - obsahuje potvrdzovacie číslo. Je úzko späté so sekvenčným číslom. Jeho hodnota je závislá od hodnoty sekvenčného čísla segmentu na ktorý sa generuje odpoveď. V čase pomerne často lineárne rastie, až na zopár výnimiek keď sa segmenty počas transportu povymieňajú. Hodnota sa dá predpokladať, kedže je závislá od sekvenčného čísla. Dá sa odvodiť zo správania protokolu preto budeme políčko považovať sa kľúčové. So smerom nemá nič spoločné čiže smerové nebude.
- Data Offset - číslo označujúce začiatok dát v segmente od začiatku segmentu. Nedá sa povedať ako sa jeho hodnota mení, pretože závisí od toho, či bude daný segment obsahovať políčko Options. Nebudeme ho považovať za kľúčové.
- Reserved - rezervovaná oblasť ktorá by mala obsahovať 0. Nedá sa na to spoliehať, teda môže obsahovať náhodné hodnoty. Nemôžeme hodnotu predpokladať teda toto políčko nemôžeme brať ako kľúčové.
- Code/Flags - políčko príznakov. Obsahuje jednotlivé príznaky ako SYN, ACK, RST, FIN a iné. Príznaky určujú aktuálnosť jednotlivých políčok alebo správanie sa protokolu. FIN pre ukončenie spojenia, RST pre reštart spojenia. SYN a ACK určujú či sekvenčné a potvrdzovacie políčka obsahujú aktuálne hodnoty a aj ďalšie správanie sa protokolu. Tieto príznaky riadia správanie sa protokolu preto nepochybne patria medzi kľúčové. Neurčujú smer preto niesú smerové.
- Window - políčko obsahujúce veľkosť okna ktoré je odosielateľ segmentu pripravený prijať. Je ťažké povedať či sa táto hodnota bude počas jedného spojenia meniť alebo bude konštantná, záleží to od implementácie protokolu. Nemôžme teda jednoznačne predpokladať hodnotu políčka, teda nebudeme ho brať ako kľúčové.
- Checksum - kontrolný súčet segmentu, je pri každom segmente iný. Nedá sa predpokladať pretože je závislý na všetkých hodnotách hlavičky a nie všetky hodnoty môžme predpokladať. Teda políčko nebude patriť medzi kľúčové.
- Urgent Pointer - obsahuje číslo, ktoré určuje kedy v sekvencii segmentov prídu naliehavé dáta pre prijímateľa. Číslo je aktuálne len ak je prítomný príznak URG. Tieto naliehavé dáta sa môžu v sekvencii objaviť spontánne a nedajú sa predpokladať. Preto toto políčko nebudeme brať medzi kľúčové.
- Options - políčko ktoré sa môže ale nemusí nachádzať v hlavičke, preto ho nebudeme brať ako kľúčové.
Skončili sme analýzu, pre zvýraznenie kľúčových políčok uvádzam nasledujúci obrázok:
Na nasledujúcom obrázku máme možnosť vidieť kľúčové políčka TCP a IP protokolu:
Analýza hlavičky UDP protokolu
Z predošlej analýzy vyplynulo, že tento protokol nieje obojsmerný, ale niektoré protokoly z vyšších vrstiev ktoré používajú tento protokol sú obojsmernej povahy. Preto potrebujeme analyzovať aj tento protokol.
Analýza políčok hlavičky UDP protokolu:
- Source Port - obsahuje zdrojový port, taktiež určuje na ktorý port má byť odpoveď odoslaná, čiže určuje smer. Preto bude toto políčko považované za kľúčové a zároveň aj smerové.
- Destination Port - obsahuje cieľový port, určuje port na ktorý je odoslaný segment, určuje smer. Políčko podobne ako zdrojový port, bude považované za kľúčové a zároveň aj smerové.
- Length - políčko obsahujúce počet bajtov tohto datagramu vrátane hlavičky. Hodnoty sa líšia v závislosti od veľkosti prenášaných dát. Veľkosť prenášaných dát nemá nič spoločné so smerom alebo s tokom do ktorého paket patrí, preto toto políčko nebudeme klasifikovať ako kľúčové.
- Checksum - kontrolný súčet segmentu, je pri každom segmente iný. Nedá sa predpokladať pretože je závislý na všetkých hodnotách hlavičky a nie všetky hodnoty môžme predpokladať. Teda políčko nebude patriť medzi kľúčové.
Na nasledujúcom obrázku sú zvýraznené kľúčové políčka hlavičky UDP protokolu:
Analýza hlavičky ICMP protokolu
Z analýzy protokolu vyplýva, že protokol nieje obojsmerný, ale niektoré funkcie, konkrétne echo request a echo reply majú povahu obojsmernosti. Potrebujeme teda analyzovať túto funkciu protokolu.
Analýza políčok hlavičky ICMP protokolu:
- Type - políčko obsahujúce typ funkcie. Na základe typu funkcie budeme určovať či sa jedná o echo request alebo echo reply a teda môžme podľa typu rozlišovať smer. Preto toto políčko budeme považovať za kľúčové a smerové.
- Code - kód funkcie, bližšie špecifikuje vybranú funkciu. Pri funkciách typu echo request a echo reply by malo byť toto políčko vždy nulové. Nieje vždy zaručené že bude nulové, teda nemôžme ho uvažovať ako kľúčové.
- Checksum - políčko obsahujúce kontrolný súčet segmentu, je pri každom segmente iný. Nedá sa predpokladať pretože je závislý na všetkých hodnotách hlavičky a nie všetky hodnoty môžme predpokladať. Teda políčko nebude patriť medzi kľúčové.
- Identifier - toto políčko môže byť použité ako port v TCP alebo UDP na identifikáciu spojenia. Pár echo request a echo reply majú toto políčko rovnaké. Preto budeme považovať toto políčko ako kľúčové ale nesmerové.
- Sequence Number - toto políčko môže byť použité ako sekvenčné číslo v TCP na identifikáciu poradia v sekvencii. Čiže môže byť inkrementované každou ďalšiou echo request požiadavkou. Opäť ako pri Identifier, tak aj tu má pár echo request a echo reply toto políčko rovnaké. Preto budeme považovať toto políčko ako kľúčové ale nesmerové.
Na nasledujúcom obrázku sú zvýraznené kľúčové políčka ICMP protokolu:
--
LubosHusivarga - 24 Nov 2007