SSH Tunneling, alebo ako pašovať službu v službe
SSH je program, ktorý
nahrádza nám už známi program telnet. Je to preto, lebo telnet nedokáže
prenášať údaje šifrovane a ak by niekto odchytával komunikáciu (typický
útok MITM – Man in the Middle, o tom trocha neskôr) a človek sa
autorizoval na nejakú službu, login a heslo by boli v textovej
podobe...
Preto vznikla služba
SSH, ktorá pracuje na porte 22. Ma nahrádzať nielen telnet, ale aj napríklad
rlogin, teda dá sa povedať, že sa jedná o šifrovaný príkazový riadok,
ktorým sa dá ovládať vzdialený počítač. Tento popis vyplýva aj z názvu
„Secure shell“.
Keďže sa jedná
o bezpečnú formu komunikácie, takmer všetky brány ju majú otvorenú. Ak sa
pozrieme na prvý obrázok zo všeobecnej kapitoly o tunelovaní po demonštračnom
príklade bude jasné, ako takýto „útok“ zrealizovať:
PuTTY
V prvom rade si
musíme downloadnúť program putty napríklad z tohto miesta: http://www.devnet.sk/modules.php?name=Downloads&d_op=getit&lid=18
(Linuxáci majú zaintegrované pomôcky pre prácu s SSH v bežnej výbave
a keďže tie pracujú cez príkazový riadok, majú omnoho viacej možností, ale
o týchto programoch neskôr) a ideme na to. Predstavme si, že máme
blokovaný prístup ku nejakým službám vo vnútri našej siete. Často sa stáva, že
sú to DC++ porty. My sa však pozrieme na nejakú službu, za ktorú by ma nemuseli
stíhať administrátori internátnych sietí :) Ale kto pochopí základom, dokáže
tunelovať takmer (napr. pozor na dvojkanálové FTP) hoci čo.
Internátna
brána nás nemá veľmi v láske a firewall ma nastavený tak, aby si
nikto nemohol sťahovať poštu z protokolu POP3. Nebaví nás však webové
rozhranie „Horde“ a tak sa snažíme vykorčuľovať z tejto šlamastiky.
Keďže sa kapitola venuje SSH tunnelingu, je logické, že brána nebrzdí SSH
komunikáciu. Tá je však prístupná na každej rozumnej sietí, pretože je
šifrovaná a tak sa nejaví ako nebezpečenstvo pre vnútornú sieť. Ďalej
potrebujeme počítač „vonku“, na ktorom máme spusteného SSH démona (áno, bude to
pravdepodobne server s Unix like systémom). Takéto kontá bežne študenti
dostávajú na školách, alebo dokonca priamo na Internátnych sieťach. Ak nie,
šikovný človek požiada svojho kamaráta, ktorý spravuje nejaký server, aby mu to
konto vytvoril. Tak, či onak, ku takémuto kontu nie je problém získať prístup.
Pri SSH
protokole sa prihlasujeme klasickou autentifikáciu (login + heslo). Keďže sa
jedná o nový protokol, bolo doň zaintegrovaných aj pár „bonusových“
funkcií. Medzi ne patrí aj práca s certifikátmi, teda dá sa autorizovať aj
pomocou nami vygenerovaného certifikačného kľúča, ktorý si vzájomne so serverom
vymeníme. Po prvom prihlásení si „nás“ server zapamätá a pri ďalších sa
server bude správať priateľský a pustí nás do svojich útrob bez zbytočných
rečí. O certifikátoch a ich generovaní sa porozprávame tiež pri
nejakej inej príležitosti a zatiaľ sa budeme prihlasovať na svoje konto
tak ako sme zvyknutí. Zapnime si PuTTY a začnime konečne pracovať. Privíta
známe okno (PuTTY bude spoločník každého, iba ak chce pracovať
s Internetom na úrovní sekretárok a „honičov“ z predchádzajúcej
kapitoly):

Obrázok 1 PuTTY v celej svojej kráse
Okno je rozdelené na
dve vertikálne časti. Na ľavo máme možnosť nastavovania rôznych funkcií, ktoré
si vo voľnom čase naštudujeme sami... Dnes nás bude zaujímať pole Session
a SSH/Tunnels. Ak chceme vyskúšať naše konto, zadáme názov servera
do poľa Host Name (or IP address) v pravej časti okna položky Session.
Protokol necháme nastavený na SSH a prípadne zmeníme port, ak naše konto
pracuje na inom, ako implicitnom porte 22. Klikneme na tlačidlo Open
v dolnej ľavej časti obrazovky.
Zobrazí sa spomínané
hlásenie o výmene certifikačných kľúčov (neskôr pri konfigurácií poštového
klienta pri zahájení presmerovaného sťahovania taktiež nabehne okno o tom,
že preberáme certifikát). Každý server, má pridelený svoj kľúč a tak sa
nás služba spýta, či chceme komunikovať práve s ním a nie
s niekým, kto sa nám „podvrhol“ po ceste. Odklikneme hlásenie (ktoré sa už
nebude zobrazovať pri ďalšom prihlásení ku tomuto serveru), autentifikujeme sa
a sme pripravení pracovať s SSH. Ak všetko funguje ako na dolnom
obrázku, začíname tunelovať!

Obrázok 2 Po autentifikáciu ku SSH kontu cez PuTTY
Prenášame zakázanú službu z Internetu do vnútra LAN
Vráťme sa ku nášmu
demonštračnému problému so „zlým“ adminom a zakázanou službou vonku na
Internete POP3. Musíme mať predstavu, ako ju prepašovať do vnútra. SSH umožňuje
elegantné riešenie, ktoré sa najlepšie vyčíta z obrázka:

Obrázok 3 SSH Tunel pre pašovanie služby z vonku do vnútra
Možno sa to zdá
komplikované, ale je to banalita. Server, na ktorom máme konto, (ten, čo je
„vonku“ na Internete), proste poštu ktorú chceme vyzdvihnúť vyzdvihne sám,
pošle ju cez SSH port 22 a tento port urobí akísi „obraz“ vonkajšej služby
na lokálnom počítači! Vytvoríme teda zdanie, že port, ktorý je na poštovom
servery sa bude javiť akoby bol nainštalovaný priamo na našom stroji!
Ale ako to spraviť?
Ešte jednoduchšie... Spustíme si PuTTY a prepneme sa v ľavej časti
okna do položky tunel. Ako Source port (už v pravej časti) uvedieme
číslo 110, bude to číslo, ktoré sa bude vytvárať na našej strane – teda na
tomto čísle sa bude javiť služba poštového servera ako „vlastná“. Do poľa Destination
zadáme adresu nášho poštového klienta (buď IP, alebo podľa DNS – ak ešte
v tomto máme medzery, radím, preštudovať si úvodne kapitoly od začiatku,
aby sme sa nemotali hlbšie a hlbšie). Za adresou napíšeme ešte dvojbodku
a číslo portu, ktorý chceme presmerovať do vnútra. POP3 je ako vieme na
porte 110. Takže celý riadok môže vyzerať takto: devnet.sk:110. Stlačíme
tlačidlo Add a takto sme pridali informáciu o tomto
forwardovaní, ktoré sa nám zobrazilo v listboxe nad miestom, kde sme
vypĺňali polia:

Obrázok 4 Konfigurácia PuTTY na presmerovanie služby z Internetu na lokálny počítač
Vráťme sa do okna Session
a zahájme reláciu, ako sme si to skúšali na začiatku práce s programom.
Musím však upozorniť, že ak sme uložili reláciu a spustíme práve ju,
vynuluje sa záznam o forwardovaní, ktorý sme práve nastavili, lebo sme
celú reláciu neuložili s týmto nastavením! Takže pre istotu, znova zadajme
názov servera, kde máme SSH konto. Prihlásime sa ako pred tým, s tým, že
pokiaľ necháme otvorené okno (zapnutú reláciu), máme vytvorený tunel,
o ktorom na prvý pohľad nevieme! Tiež by som však upozornil, že ak dlhšie
pracujeme s otvorený shellom, môže sa stať, že sa relácia zruší, pretože
pri nečinnosti (zdanlivej) na konzole, sa vykoná „time out“.
Teraz by to chcelo
dôkaz, že? OK (nezabúdajme, že spojenie SSH musíme nechať otvorené). Ešte sme
si nepovedali o systémovom príkaze netstat. Tak je na čase. Určite
aj vás neraz zaujímalo, aké porty sú práve otvorené práve na našom lokálnom
stroji. Vieme, že keď komunikujeme so svetom, otvárame aj mi port, cez ktorý
vysielame požiadavky na port servera. Teda by sa dalo povedať, že sa jedná o
„klientsky“ port. Šupni sa do príkazového riadku a napíšme príkaz netstat
–a a dostaneme výpis portov, podobný tomuto:
Microsoft
Windows XP [Verzia 5.1.2600]
(C)
Copyright 1985-2001 Microsoft Corp.
C:Documents
and Settings
oot>netstat -a
Aktívne
pripojenia
Protokol
Miestna adresa Cudzia adresa Stav
TCP server:epmap server:0 LISTENING
TCP server:microsoft-ds server:0 LISTENING
TCP server:1027 server:0 LISTENING
TCP server:1035 server:0 LISTENING
TCP server:3306 server:0 LISTENING
TCP server:44334 server:0 LISTENING
TCP server:44501 server:0 LISTENING
TCP server:pop3 server:0 LISTENING
TCP server:1025 localhost:44334 ESTABLISHED
TCP server:1027 localhost:1029 ESTABLISHED
TCP server:1029 localhost:1027 ESTABLISHED
TCP server:1030 server:0 LISTENING
TCP server:1033 localhost:44334 ESTABLISHED
TCP server:1035 localhost:1037 ESTABLISHED
TCP server:1037 localhost:1035 ESTABLISHED
TCP server:1047 localhost:3306 ESTABLISHED
TCP server:3306 localhost:1047 ESTABLISHED
TCP server:4693 localhost:4694 ESTABLISHED
TCP server:4694 localhost:4693 ESTABLISHED
TCP server:10110 server:0 LISTENING
TCP server:44334 localhost:1025 ESTABLISHED
TCP server:44334 localhost:1033 ESTABLISHED
TCP server:netbios-ssn server:0 LISTENING
TCP server:5016 XXX CLOSE_WAIT
TCP server:5129 XXX:22 ESTABLISHED
TCP server:netbios-ssn server:0 LISTENING
UDP server:microsoft-ds *:*
UDP server:isakmp *:*
UDP server:1026 *:*
UDP server:1028 *:*
UDP server:1032 *:*
UDP server:1034 *:*
UDP server:1036 *:*
UDP server:3850 *:*
UDP server:4500 *:*
UDP server:4847 *:*
UDP server:4850 *:*
UDP server:44334 *:*
UDP server:ntp *:*
UDP server:1900 *:*
UDP server:ntp *:*
UDP server:netbios-ns *:*
UDP server:netbios-dgm *:*
UDP server:1900 *:*
UDP server:ntp *:*
UDP server:netbios-ns *:*
UDP server:netbios-dgm *:*
UDP server:1900 *:*
C:Documents
and Settings
oot>
Vidíme v tejto
spleti informácií dôkaz o lokálnom rozbehaní POP3? Myslím, že áno (čiernym
zvýraznené písmo bez kurzívy). Pre niekoho tento výpis však nemusí byť dôkazom.
Tak dobre, skúsme sa telnetnúť na lokálny port 110 (telnet localhost 110)
a uvidíme zázrak:
+OK
Hello there.
Ozval sa POP3
protokol z nášho počítača, ktorý je len obrazom toho „reálneho“ na
poštovom servery. Alebo ešte lepší dôkaz, pošlime si na naše e-mailové konto
mail z nejakého iného a nakonfigurujme si nejakého e-mailového
klienta tak, že mail server označíme náš počítač (localhost alebo
127.0.0.1). Vyplňme všetko čo potrebujeme, adresu, login, prípadne heslo,
uložme konfiguráciu a hurá, stlačme tlačidlo na príjem pošty. Tá skutočne
príde!

Obrázok 5 Príklad konfigurácie programu Eudora na príjem pošty z pretunelovaného portu
To však nie je
až také bežné, aby sa blokovalo POP3. Ale permanentne sa stáva, že je blokované
odosielanie pošty na SMTP. Postup už vieme, ako na to. Vytvoríme si tunel, kde Source
port bude číslo SMTP portu na našom stroji, teda 25 a do Destination
vpíšeme poštový server, dvojbodka, 25. Pridáme forwardovaný port (Add).
Zahájime spojenie Session/Host name (or IP address) so strojom, kde máme
SSH konto a v klientovi si prestavíme SMTP Server (Outgoing)
na 127.0.0.1 alebo localhost. Ak funguje POP3 a len takto
prestavíme SMTP, máme plnohodnotnú poštovú komunikáciu a administrátor sa
môže aj potrhať. A má to ešte jednu výhodu – celá komunikácia je
šifrovaná!
V prípade,
že sme zablokovaný na oboch portoch, pre PuTTY to nie je žiaden problém (resp.
pre SSH). Nastavíme SMTP, pridáme medzi forwardovacie porty a potom znova
vypíšeme hlavičku, ale už pre POP3 a znova pridáme. V PuTTY to bude
vyzerať asi takto:

Obrázok 6 Príklad viacportového forwardovania v PuTTY
A klienta nakonfigurujeme napríklad takto:

Obrázok 7 Konfigurácia programu Eudora pre tunelovanie všetkých mailových protokolov
Ako môžeme postrehnú,
zatiaľ sme preniesli zakázanú službu z internetu do vnútra siete.
V budúcnosti si ukážeme, ako prenesieme službu z vnútra, na Internet
vonku. Teda si napríklad na internátnom PC urobíme webový server, necháme PC
pustené 24h denne, zaevidujeme sa u SK-Nic (dómenu niečo.sk, ktorú
presmerujeme na našu bránu) a budeme sami, kto si bude hostovať stránky!
Už žiadne kvóty, žiadne obmedzenia (absencia PHP, ASP...), ale všetko má svoj
čas!
PuTTY v príkazovom riadku (Linux aj Windows)
Na začiatku sme si
povedali, že v Linuxe je priamo program pre prácu s SSH integrovaný.
Ovláda sa, ako ináč, cez príkazový riadok a po pravde, je lepší ako GUI
nadstavba PuTTY, pretože je, myslím prehľadnejšie písať ako klikať. Jedná sa
o príkaz SSH so svojimi prepínačmi. Obdobne existuje aj jeho ekvivalent
pre Windows a je to program PLinke (link: http://www.devnet.sk/modules.php?name=Downloads&d_op=getit&lid=19
).
Takže keď si chceme
vyskúšať prácu aj my, Windowsáci, pozrime sa na to (pre Linux to bude
ekvivalentný zápis, len namiesto plink sa bude písať ssh). Tak, šup do
príkazového riadku, tak, aby sme mali v ceste plink (teda napríklad ísť
tam, kde sme ho stiahli, alebo ho nakopírovať do adresára Windows, aby sme
nemuseli ku nemu stále písať cestu).
Syntax je jednoduchá.
Ak chceme vytvárať lokálny port (ako v celom článku), napíšeme prepínač
–L, potom nasleduje port, ktorý bude obrazom portu, ktorý chceme forwardovať na
našom stroji, dvojbodka, stroj z ktorého chceme port forwardovať,
dvojbodka, port tohto stroja, a nakoniec SSH klient, na ktorý sa
prihlasujeme:
Takže napríklad
ekvivalentný zápis forwardovania POP3 protokolu je takýto:
Microsoft
Windows XP [Verzia 5.1.2600]
(C)
Copyright 1985-2001 Microsoft Corp.
D:!Temp!!>plink
-L 110:devnet.sk:110 liborbes@213.160.X.X
Using
username "liborbes".
Using
keyboard-interactive authentication.
Password:
Last
login: Wed Feb 1 12:40:08 2006 from xxx
$_