Úvod do sveta hackingu (4)

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Senri
Datum: 14.7.2014
Hodnocení/Hlasovalo: 3.82/17

V prvej kapitole bol načrtnutý obraz toho, ako celá sieť približne funguje. No ak ste z toho celý zmätení, nezúfajte! Jednotlivým veciam sa začneme postupne venovať a rozoberať ich do väčšej hĺbky. Táto kapitola vás predstaví bližšie k protokolom, nebudeme sa zaoberať len téoriou, ale aj niečo „naozaj“ urobíme. Hor sa do toho!

Protokoly – časť #1

Protokol:

Hacking tutorialProtokol je nejaký presne zadefinovaný štandard/postup, podľa ktorého prebieha komunikácia medzi 2 zariadeniami na sieti (napríklad počítače). Presne definuje ako sa ma v jednotlivých prípadoch postupovať (napríklad ak otvárame webovú stránku, ak posielame dáta a pod. – všetky tieto úkony majú svoj vlastny pevne stanovený postup, ktorý je popísaný v protokoloch). Napríklad aj samotné routery (zariadenia v sieti, ktoré usmerňujú „premávku“ v sieti) majú vlastné protokoly, ako majú pri routovaní (hľadaní ciest) postupovať. Protokol teda znamená presne to, čo v bežnom živote.

Ako sme už spomínali, dáta sa prenášaju vo forme tzv. packetov. Na základe toho, na čo má daný packet slúžiť, sa vytvorí aj jeho charakteristikcá forma. Napríklad ak sa chceme dostať na webovú stránku zasielame a príjmame „HTTP packety“ – pretože to je celá internetová komunikácia, výmena packetov. To značí, že zasielame packet, ktorý je „vyskladaný“ tak ako to popisuje HTTP (Hypertext Transfer Protocol) protokol, teda obsahuje to, čo mu protokol „prikazuje“. (pozn. protokoly neurčujú len to. Protokol zároveň popisuje ako samotnú komunikáciu nadviazať, zaoberá sa šifrovaním – ak je prítomné a podobne.)

Prečo je táto štandarizácia nutná? Predstavme si, že chceme z packetu vytiahnuť určitú informáciu, ktorá sa nachádza pod názvom „A“ (napr. „A: informácia“). Teraz si predstavme, že nejaký software-ový nadšenec sa rozhodne rozposielať packety, ktoré vyzerajú úplne inak a našu informáciu zaradí pod kolonku „B“ („B: informácia“). S tým by náš stroj už pravdepdoobne nevedel pracovať, respektíve lepšie povedané, nevedel by túto informáciu nájsť – kedže je štandarne naprogramovaný tak, aby túto informáciu hľadal pod „A“.

Neostaňme však len na úrovni jedného packetu. Pre TCP(Transmission Control Protocol) – čo je jeden zo základných protokolov figurujúcich takmer pri každej výmene dát – je pre nadviazanie komunikácie typický tazkvaný „handshake“ (potrasenie rukou),ktorého základom je zopár packetov obsahujúcich určité informácie, ktoré sa vymenia medzi strojmi a nadviaže sa komunikácia. Ak by sme tento postup porušili a začali používať náš vlastný, tak by počítače nevedeli vôbec komunikovať, pretože by nevedeli dáta spracovať.

Protokoly tak zaisťujú, že informácie v sieti vie každý človek/stroj (ak má samozrejme potrebné znalosti) spracovať a podať zrozumiteľnú odpoveď. Predstavme si, že by každý štát na svete mal vlastné dopravné značenia, ktoré by sa navzájom vôbec nepodobali. Šoférovať by tak ľudia mohli len v danej krajine, pretože zo značiek v zahraničí by sa pravdepodobne nevyznali (pokial by si ich samozrejme nenaštudovali). Naštastie tie sú (pravdepodobne) po celom civilozvanom svete rovnaké a tak môžeme viacmenej šoférovať bezpečne aj v iných krajinách. Značka „Zákaz vjazdu“ je všade rovnaká a tak aj nejaký TCP packet všade vo svete, v každej aplikácií ma rovnakú podobu.

Samotný zoznam protokolov a aj ich obsahy môžete nájsť na stránke : http://www.rfc-editor.org/search/standards.php

(Sieťový) Port:

Je to špeciálne číslo (1 až 65535) nachádzajúce sa v packetoch pri komuníkacií cez TCP alebo UDP protokol, ktoré slúži na rozlíšenie aplikácií v počítači.

Napríklad ktorýkoľvek browser cez ktorý sa chceme pripojiť na nejakú .html stránku odosiela požiadavky cez port 1087 do portu 80 na servery, kde sa daná stránka nachádza. Takéto základné porty su viacmenej štandarizované (no nemusí to platiť vždy). Taktiež berte na vedomie, že porty pre odchádzajúce a prichádzajúce údaje nemusia mať rovnaké číslo (t.j. posielam cez 1087 do 80, aj keď je to celé o http uplatňujú sa 2 rozdielne porty). Ak však na server pristupujeme cez port 80 (cieľový port) a server nám odpovie tak nám odozvu pošle zo svojho portu 80 (pri odozve je to teda zdrojový port – ide zo servera k nám). Teda z 1087 do 80 a potom nazad z 80 do 1087. Okrem toho existujú aj porty, ktoré niesú „rezervované“ pre žiaden program a môžu byť použité na rôznorodé účely.

Môžeme si predstaviť, že okolo našeho počítača existuje akýsi múr (prípadne rovno Firewall), v ktorom sú malé otvory (porty) a každý tento otvor nesie nejaké číslo a každým otvorom by sme sa dostali niekam inam. Prípadne si to predstavte ako čísla ciest/diaľníc, všetky sú v zásade rovnaké, majú rovnakú funkciu, ale vedú inam.

Port môže byť uzavretý alebo otvorený. Ak hostujeme nejaký web, tak s veľkou pravdepodobnosťou musí náš server mať port 80 (ktorý slúži na http komunikáciu) otvorený. Nepotrebujeme však nejaký port 531, ktorý je vyhradený pre AOL instant messenger, preto je port „uzavretý“. V inom prípade by nám na neho mohli chodiť rôzne požiadavky a prípadne by mohli aj zahltiť, či zbytočne zaťažiť server.

Poďme sa teda pozrieť na praktický príklad kde by sme mohli tieto znalosti zhrnúť: Chceme vytvoriť aplikáciu, ktorá by vedela komunikovať s IRC (Internet Relay Chat) servermi. Väčšina programovacích jazykov dnes už má potrebné knižnice na to, aby stačilo napísať pár riadkov a celá komunikácia je vybavená automaticky za nás. No ak by sme to robili celé od začiatku, písali každý riadok kódu postupne, museli by sme si najprv naštudovať protokol (nie len samotný IRC protokol, ale aj TCP/UDP, ktoré slúžia k prenosu dát), kde sa píše, ako sa komunikácia nadviaže (čo treba odoslať najprv), čo musia packety obsahovať a ako musia vyzerať, aby ich vedel server rozparsovať (proste vytiahnuť z nich dáta, ktoré potrebuje). Potom samozrejme musíme prideliť packetom správny port (toto si už ale väčšina IRC serverov nastavuje sama, to znamená že na nejaký irc.príklad.sk by ste sa pripájali cez port X ale na irc.example.com by sme sa mohli pripájať napríklad cez port Y, ak to správca tak nastavil), aby server vedel, kam ďalej údaje nasmerovať – na nejakú aplikáciu, ktorá celá IRC server riadi. Ak by sme poslali údaje na neotvorený port, tak by sa naše packety proste „zahodili“ (discard). Keď to všetko máme a aplikácia je hotová, tak my proste len klikneme na políčko „Pripojiť“ a aplikácia sama začne generovať packety (tak ako sme to my nastavili) a posielať ich na server. On si ich ďalej „rozbalí“, „prečíta“ a rozhodne čo ďalej.

V ďalšej časti prejdeme na už sľúbenú praktickú časť. Aby som len nekecal na „teoretickej úrovni“, odchytíme si zopar packetov, konečne uzrieme ako vlastne vyzerajú, pozrieme sa na pár základných charakteristických údajov, ktoré packet obsahuje, pozrieme sa hlbšie na jeden vybraný protokol a povieme si, ako by hacker tieto znalosti mohol využiť.