2.4. Používání programů PuTTY

Na cvičení věnovaném SSH mají studenti následující úkoly:

  • Přihlásit se na server bis.vse.cz pomocí SSH a hesla.

  • Vytvořit osobní dvojici soukromý/veřejný klíč, veřejný klíč nakopírovat na server a přihlásit se pomocí klíče.

  • Načíst soukromý klíč do paměti (pageant či ssh-agent) a přihlásit se pomocí klíče bez zadávání hesla. Zkopírovat soubory pomocí WinSCP.

  • Vyzkoušet tunely (lokální, vzdálený a dynamický).

Studenti, kteří mají již se SSH předchozí zkušenosti, mají následující doplňkové úkoly:

  • Spuštění příkazu na serveru a uložení výsledku do souboru na lokálním počítači.

  • Vytvořit Jump host – přihlásit se z jednoho serveru na další server.

V první části bude popsán postup řešení těchto úkolů za použití programů PuTTY pro operační systém Windows. Stručné řešení stejných úkolů z UNIXu či macOS, tj. používání programů ssh či ssh-keygen, bude popsáno v následující kapitole.

V příkladech budeme popisovat přístup na server bis.vse.cz s linuxovým operačním systémem Debian verze 9 (Debian Stretch), na kterém je spuštěn OpenSSH server.

Principy a postupy zde uvedené jsou stejné i při přihlašování na jiné servery. SSH je k dispozici téměř pro každý unixový systém. SSH servery existují i pro další operační systémy včetně OS Windows.

2.4.1. Konfigurační okno programu putty.exe

PuTTY je skupina bezplatných aplikací pro emulaci terminálu, komunikaci přes síť (protokol SSH a nezabezpečené protokoly telnet či rlogin) či přes sériovou linku a pro přenos souborů. Autorem programu je Simon Tatham, softwarový inženýr z Anglie. Aktuální verzi si můžete stáhnout ze http://www.chiark.greenend.org.uk/~sgtatham/putty/. S verzí 0.62 a staršími se nemusíte přihlásit na servery, neboť chybí podpora delších prvočísel pro algoritmus Diffie-Hellman. Distribuce obsahuje šest programů:

  • PuTTY 18 (putty.exe) – hlavní program, SSH a Telnet klient s emulací terminálu.

  • PSCP (pscp.exe) – přenos souborů pomocí příkazové řádky.

  • PSFTP (psft.exe) – přenos souborů s ovládáním podobným jako mají FTP klienti.

  • Plink (plink.exe) – řádkový SSH klient, obvykle pro provedení jednoho příkazu na vzdáleném serveru.

  • Pageant (pageant.exe) – uchovává SSH klíče v paměti, ostatní programy poté využijí pro autentizaci.

  • PuTTYgen (puttygen.exe) – generování a správa SSH klíčů.

Nejčastěji se používá terminálová emulace přes SSH protokol, pro program putty.exe je typické okno s černým pozadím a bílým písmem 19. Je to nejčastěji používaný SSH klient pro operační systém Windows, existuje i unixová verze.

Po spuštění programu putty.exe se objeví konfigurační okno, ve kterém lze zadat parametry pro připojení k serveru.

image7

Okno se skládá z několika částí. Vlevo je panel „Category“ pro konfiguraci parametrů budoucího připojení. V hlavní části nahoře se zadává cíl budoucího spojení (Specify the destination you want to connect to). Pod ní je správa sezení (sessions) – parametry spojení si můžete uložit (tlačítko „Save“) a příště je rychle použít pomocí dvojkliku na jméno sezení.

Dole jsou čtyři tlačítka – nejdůležitější z nich je „Open“, které otvírá (dává příkaz k zahájení) komunikaci dle nastavených parametrů.

Ve specifikaci cíle se do okénka „Host Name“ zadává IP adresa, nebo doménové jméno serveru, ke kterému se chcete připojit. V okénku „Port“ je již předpřipraveno číslo 22, to je výchozí port SSH. Nicméně lze se setkat i se servery, které využívají jiný port. Nabídka „Connection Type“ umožňuje vybrat způsob připojení, v našem případě použijeme předvolené SSH.

2.4.2. První přihlášení na server bis.vse.cz, autentizace heslem

Do okénka „Host Name“ vyplníme jméno serveru bis.vse.cz a pomocí tlačítka „Open“ zahájíme komunikaci.

Po zahájení komunikace se autentizuje server – pokud jste se serverem ještě nekomunikovali, zobrazí se Vám otisk (fingerprint) veřejného klíče serveru a výzva na jeho ověření.

image9

Pokud klíči (otisku klíče) věříte, stiskněte tlačítko „Ano“ (či „Yes“) a putty si klíč uloží do registru mezi důvěryhodné klíče. Při dalších připojeních putty ověřuje, zda se klíč serveru nezměnil – pokud ne, tak se připojí bez dodatečných dotazů.

Následně můžete získat dodatečné informace od serveru a jste vyzváni k zadání jména a hesla.

image8

Heslo můžete zadat třikrát, pokud se Vám ani jednou nepodaří zadat správné přihlašovací údaje, tak se SSH spojení ukončí.

Pokud se úspěšně přihlásíte na server bis.vse.cz, uvítá vás příkazový řádek (shell) bash.

image10

Pokud vše proběhlo správně, ovládáte přihlášení na server pomocí hesla.

2.4.3. Základy používání programu PuTTY, doporučená nastavení

Používání schránky pro kopírování textu z/do okna putty.

Program putty.exe podporuje v terminálovém okně kopírování do schránky a vkládání ze schránky. Ovládání se ale liší od běžných programů ve Windows. Kombinaci kláves Ctrl+C nelze použít, neboť tato kombinace se v UNIXu používá pro ukončení (kill) procesu. Ovládání z unixové grafické nadstavby X-Windows nebylo možné dlouhou dobu používat, neboť vyžaduje tři tlačítka na myši. Ve výchozím nastavení používá putty.exe v terminálovém okně následující kompromis:

  • Označení textu pomocí myši automaticky vloží text do schránky.

  • Obsah schránky se vloží do terminálového okna po stisknutí druhého (obvykle pravého) tlačítka myši.

Kontextové menu z horní lišty.

Po zobrazení terminálového okna klikněte druhým tlačítkem myši na horní lištu a zobrazí se Vám následující menu.

image11

Z nabízených možností nyní zdůrazním dvě nejčastěji používané:

Event Log – log z navazování a změny parametrů SSH spojení.

Change Settings… – můžete měnit parametry již vytvořeného spojení, např. volby pro terminálovou emulaci či přidávat/ubírat SSH kanály (viz kapitola 1.3.4).

Log Vám pomůže při hledání problémů. Následuje log při úspěšném připojení pomocí klíče uloženého v pageant (viz kapitola 1.4.5):

2016-07-24 12:50:58 Looking up host "bis.vse.cz"
2016-07-24 12:50:58 Connecting to 2001:718:1e02:18::87 port 22
2016-07-24 12:50:58 We claim version: SSH-2.0-PuTTY_Release_0.67
2016-07-24 12:50:58 Server version: SSH-2.0-OpenSSH_6.7p1 Debian-5+deb8u2
2016-07-24 12:50:58 Using SSH protocol version 2
2016-07-24 12:50:58 Doing Diffie-Hellman group exchange
2016-07-24 12:50:58 Doing Diffie-Hellman key exchange with hash SHA-256
2016-07-24 12:50:58 Host key fingerprint is:
2016-07-24 12:50:58 ssh-rsa 2048 30:14:af:4b:64:89:4f:42:86:aa:92:63:....
2016-07-24 12:50:59 Initialised AES-256 SDCTR client->server encryption
2016-07-24 12:50:59 Initialised HMAC-SHA-256 client->server MAC algorithm
2016-07-24 12:50:59 Initialised AES-256 SDCTR server->client encryption
2016-07-24 12:50:59 Initialised HMAC-SHA-256 server->client MAC algorithm
2016-07-24 12:50:59 Pageant is running. Requesting keys.
2016-07-24 12:50:59 Pageant has 1 SSH-2 keys
2016-07-24 12:50:59 Trying Pageant key #0
2016-07-24 12:50:59 Sending Pageant's response
2016-07-24 12:51:00 Access granted
2016-07-24 12:51:00 Opening session as main channel
2016-07-24 12:51:00 Opened main channel
2016-07-24 12:51:00 Allocated pty (ospeed 38400bps, ispeed 38400bps)
2016-07-24 12:51:00 Started a shell/command

Emulace terminálu

UNIX historicky podporuje různé terminály, které používají různé sekvence pro nastavení pozice kurzoru, pro volbu barvy textu či posílají různé sekvence na server při stisknutí funkčních kláves. Při vytvoření kanálu typu session s emulací terminálu putty posílá na server typ terminálu, a server dle tohoto typu interpretuje obdržené sekvence znaků a odesílá sekvence pro zobrazení v terminálovém okně programu putty.exe.

Typ emulovaného terminálu. Program putty posílá typ xterm s podporou 16 barev. Pro připojení na linuxové servery doporučuji typ putty-256color či xterm-256color. Odesílaný typ terminálu se nastavuje v Connection -> Data -> Terminal-type string. Některé aplikace budou automaticky používat 256 barev, u jiných musíte upravit nastavení.

Změna barvy. Text v modré barvě občas nebývá v černém okně putty k přečtení. Ve Window -> Colours měním odstín pro barvu ANSI Blue.

Klávesnice. Pokud Vám v aplikaci nefungují správně některé funkční klávesy, zkuste v Terminal -> Keyboard změnit emulaci funkčních kláves na Linux.

Panel s číslicemi a šipkami vpravo na klávesnici se používal jako aplikační panel – aplikace ke klávesám může přiřadit speciální význam a poté nelze vkládat číslice. To je v současnosti většinou matoucí a proto doporučuji v Terminal -> Features zatrhnout volbu „Disable application keypad mode“.

Ve Window -> Appearance si můžete změnit font a velikost písma.

UTF-8. Pokud se Vám chybně zobrazují české znaky či čáry, zkontrolujte ve Window -> Translation, že máte zvolenu znakovou sadu UTF-8 a zatrženu volbu „Use Unicode lie drawing code points”.

Sezení (sessions) - uložení parametrů spojení.

Nastavené parametry spojení můžete uložit jako sezení (session) a příště dvojklikem na název snadno vytvořit spojení. Před stisknutí tlačítka Save pro uložení zadejte jméno sezení do políčka Saved Sessions.

V sezení si můžete přednastavit i uživatelské jméno – vložte ho do adresy v poli Host Name ve formě: login@bis.vse.cz.

2.4.4. Vygenerování klíčů v programu PuTTYgen

Přihlašování pomocí hesla umožňuje jejich hádání útočníky. V logách serveru se často setkáte s velkým počtem neúspěšných přihlášení z různých částí světa. Nejčastěji se snaží uhádnout heslo pro uživatele root (administrátorský účet v UNIXu), z toho důvodu bývá přihlašování přes SSH na účet root zakázáno či omezeno na přihlášení pomocí klíče.

Přihlašování pomocí klíče je bezpečnější, neboť:

  • Entropie hesel se pohybuje mezi 30 a 50, u klíčů se entropie odhaduje na 120 a výše. Útočníci nemají reálnou šanci uhodnout klíč.

  • Klíče jsou bezpečné vůči některým útokům obvyklým u hesel. Uživatel si klíče neopisuje na papír, není schopen je někomu sdělit na potkání, samotné sledování klávesnice kamerou nevede ke kompromitaci klíčů.

  • Na serveru je uložen pouze veřejný klíč. Kompromitace serveru nevede k prozrazení soukromého klíče. Privátní klíč neopouští klientský počítač – nehrozí zcizení při přenosu po síti.

Přihlašování pomocí klíče podporuje většina SSH aplikací a SSH serverů 20. SSH klíč se obvykle využívá pouze pro přihlašování (autentizaci) 21.

Uživatel si musí nejdříve vygenerovat dvojici soukromý/veřejný klíč. vytvořit. Pro generování a správu klíčů je součástí PuTTY program PuTTYgen.

image12

Po spuštění programu PuTTYgen si můžete zvolit typ klíče a jeho délku. Nejvhodnější je použít předvolenou možnost – generovat RSA klíče pro verzi 2 protokolu SSH o délce 2048 bitů.

Následují pravidla pro výběr klíčů.

  • RSA / SSH-2 RSA – nejvhodnější. Lze zadat i jinou délku klíče – volte hodnoty 2048 či 4096. Kratší či delší nemusí být na některých serverech podporovány.

  • ECDSA - některé starší servery nemusí podporovat.

  • ED25519 - některé starší servery nemusí podporovat.

  • DSA NEPOUŽÍVAT – od verze 7 programu OpenSSH přestávají být podporovány 22.

  • SHA-1 (RSA) NEPOUŽÍVAT – první verze protokolu SSH není bezpečná a prakticky se s ní již nesetkáte.

Po stisknutí tlačítka „Generate“ se vygeneruje pár klíčů. Pro generování jsou potřeba náhodné hodnoty – jedním ze vstupu je pohyb kurzoru myši nad aplikací PuttyGEN.

image13

Po vygenerování je vhodné upravit komentář (Key comment), neboť při používání více klíčů Vám datum vygenerování příliš nepomůže. Doporučuji uvést vlastní e-mailovou adresu a účel, např. pavlicek@vse.cz github.

Soukromý klíč je silně doporučeno chránit heslovou frází 23, neboť jinak může nezvaný návštěvník Vašeho počítače snadno zneužít Váš soukromý klíč. Heslová fráze se zadává do polí „Key passphrase“ a „Confirm passphrase“.

Pomocí tlačítka „Save private key“ uložíte soukromý i veřejný klíč do souboru s koncovkou .ppk. Samotné uložení veřejného klíče je zbytečné a spíše matoucí, neboť vytvořený soubor nemá smysluplné využití.

V programu PuTTYgen můžete též otevřít existující soubor se soukromým klíčem a poté např. změnit heslovou frázi. Lze též importovat soukromý klíč vygenerovaný v UNIXu či exportovat soukromý klíč z PuTTY do formátu používaném v UNIXu.

2.4.5. Přihlašování pomocí klíčů

Uživatel musí svůj veřejný klíč umístit na server, v UNIXu se obvykle zapisuje do souboru authorized_keys v podadresáři .ssh domovského adresáře uživatele (cesta k souboru se zapisuje jako ~/.ssh/authorized_keys). Veřejný klíč ve formátu pro server je zobrazen v programu PuTTYgen v okénku nahoře, odkud jej lze zkopírovat do schránky.

Před přihlášením musíte programu putty.exe zpřístupnit soukromý klíč. Existují dvě možnosti:

  • Do konfigurace spojení napíšete jméno souboru se soukromým klíčem. Při každém připojení musíte zadat heslo k soukromému klíči. image14image15

  • Soukromý klíč nahrajete do paměti do programu pageant. Program putty.exe poté automaticky vyzkouší přihlášení pomocí všech soukromých klíčů v paměti. Heslo k soukromému klíči zadáváte pouze jednou při jeho nahrání do paměti.

_images/ssh_image33.png

Použití programu pageant.exe je jednoduché – spustíte ho, přidáte klíč a poté se v putty.exe přihlásíte na server.

Spuštění a přidání klíče – kliknete na soubor s koncovkou .ppk (při instalaci se program pageant.exe přiřadí k souborům s koncovkou .ppk). Spustí se aplikace a zeptá se na heslo k soukromému klíči.

Po spuštění se vytvoří ikona v oznamovací oblasti Windows, kde přes kontextové menu můžete prohlížet a přidávat klíče.

_images/ssh_image35.png

V kontextovém menu jsou i volby pro spuštění putty.exe s novou konfiguraci (New Session) či s existujícím uloženým sezením (Saved Sessions). V uložených sezeních by mělo být uživatelské jméno – jinak ho musíte při přihlašování zadat.

Nahrání klíčů do programu pageant je preferovaná a pohodlnější cesta s bezpečnostním rizikem – když opustíte přihlášený počítač, tak si kdokoliv může sednout za Vaši klávesnici a přihlásit se na vzdálený server jako Vy. Opatření je jednoduché – při každém odchodu od klávesnice počítač uzamknout. Ve Windows pomocí kombinace Win+L či pomocí kombinace Ctrl+Alt+Del a následně vybrat z nabídky volbu Uzamknout.

2.4.6. Kopírování souborů přes SSH

V SSH jsou dva protokoly pro kopírování souborů – protokol scp a protokol sftp. V PuTTY jsou dva odpovídající řádkové programy: pscp.exe a psftp.exe.

Program pscp má podobnou syntaxi jako příkaz cp pro kopírování souborů v UNIXu – při spuštění musíte zadat zdroj i cíl kopírování, poté se soubor či soubory zkopírují a program skončí. V následujících ukázkách se předpokládá klíč v paměti (pageant).

# zkopírování soubor seznam ze serveru bis.vse.cz do lokálního adresáře
pscp pavlicek@bis.vse.cz:seznam .
# zkopírování adresáře obrazky na server bis.vse.cz do domovského adresáře
pscp -r obrazky pavlicek@bis.vse.cz:

Program pstfp emuluje chování programu ftp – vytvoříte spojení se serverem a poté se Vám zobrazí prompt psftp> pro zadávání příkazů.

psftp pavlicek@bis.vse.cz
Using username "pavlicek".
Remote working directory is /home/pavlicek
psftp> help
! run a local command
bye finish your SFTP session
cd change your remote working directory
chmod change file permissions and modes
close finish your SFTP session but do not quit PSFTP
del delete files on the remote server
dir list remote files
exit finish your SFTP session
get download a file from the server to your local machine
help give help
lcd change local working directory
lpwd print local working directory
ls list remote files
mget download multiple files at once
mkdir create directories on the remote server
mput upload multiple files at once
mv move or rename file(s) on the remote server
open connect to a host
put upload a file from your local machine to the server
pwd print your remote working directory
quit finish your SFTP session
reget continue downloading files
ren move or rename file(s) on the remote server
reput continue uploading files
rm delete files on the remote server
rmdir remove directories on the remote server
psftp>

Pohodlnější je pro kopírování souborů používat grafický program WinSCP 24, který má buď dvou panelové ovládání obdobně jako Total Commander (Midnight Commander) či jeden panel podobně jako průzkumník ve Windows.

2.4.7. Tvorba tunelů a přesměrování portů

Protokol SSH není omezen na sezení s terminálovým oknem či na přenos souborů. Lze jej využít ke komunikaci programů prostřednictvím vytvořeného bezpečného kanálu. To se v praxi používá k:

  • obejití firewallu prostřednictvím bezpečného tunelu,

  • zašifrování komunikace, která jinak šifrování nepodporuje.

Oba případy se vzájemně doplňují, oba používají schopnost přesměrování portů (port forwarding) SSH. Přesměrování portů lze nastavit při připojení, i v průběhu jíž navázaného spojení. V putty.exe se přesměrování nastavuje v záložce Connection -> SSH -> Tunnels .

image18

Existují čtyři základní druhy přesměrování:

  • Lokální (Local, Forward) tunel zpřístupní jinak nepřístupný vzdálený TCP server pro lokální klienty.
    Např. MySQL databáze není dostupná z Vašeho domácího počítače, tak vytvoříte tunel se vstupem na lokální stanici (např. port 7000) a cílem v MySQL databázi (port 3306) na serveru. A poté na stanici spustíte MySQL klienta, který připojíte na lokální port 7000. SSH tunel TCP rámce přenese na port 3306 MySQL databáze a zpět klientovi doručí TCP odpovědi.
    Tunel může končit na jiném interním serveru – spojení ze SSH serveru k internímu serveru není šifrováno.
  • Vzdálený (Remote, Reverse) tunel zpřístupní informace pro vzdálený server. Vytvoříte SSH spojení na server a v něm tunel, jehož vstupní port bude na serveru a cíl bude na lokální stanici či v síti lokální stanice.
    Server bis.vse.cz má blokován přístup na Internet a Vy se z něho chcete přihlásit na server telehack.com na port 23. Ze své stanice vytvoříte tunel, který otevře vstupní port 6000 na serveru bis.vse.cz a cíl bude na serveru telehack.com na portu 23. Poté na serveru bis.vse.cz spustíte program telnet s cílem localhost:6000.
  • Dynamický (Dynamic, Proxy) zobecňuje lokální tunely – aplikace si sama může určit cílový server a port. Pro zadání cíle musí aplikace podporovat protokol SOCKS 5. Ve webových prohlížečích podpora většinou je, v mnoha jiných aplikacích chybí.

  • X11 (X11 forwarding) – na serveru spustíte grafickou aplikaci a vlastní grafické okno se zobrazí na lokálním počítači. Stisky kláves a pohyby myši se přenášejí z lokálního počítače do grafické aplikace na serveru. Na lokálním počítači musíte mít spuštěn tzv. X-Server – aplikaci, která umí zobrazovat grafiku z grafických unixových aplikací. Příkladem takové aplikace může být VcXsrv Windows X Server 25, která využívá X11 tunely vytvořené pomoci PuTTY. Jinou možností je aplikace MobaXterm 26, která v sobě integruje X-Server se SSH klientem.

2.4.7.1. Lokální tunel

V obou příkladech na lokální tunel budeme přistupovat na databázi MySQL (TCP port 3306). V prvním případě poběží na serveru bis.vse.cz, ve druhém případě na serveru kitscm.vse.cz.

image19

Tunel se nastavuje v záložce Connection -> SSH -> Tunnels – zdrojový port (Source port) bude 7000, cíl (Destination) bude localhost:3306, necháte předvolený lokální (Local) tunel a automatickou volbu protokolu. Poté přidáte (Add) tunel do seznamu (Forwarded ports). Pro připojení k mysql databázi na serveru kitscm.vse.cz bude cíl kitscm.vse.cz:3306.

image20

Jaký volit lokální port? Nesmí být již obsazen 27. Nelze vytvořit tunel na obsazené číslo lokálního portu. Obvykle se volí čísla portů nad 1024, vhodné je volit ještě o kus dále, neboť mnohé nižší porty jsou přiřazeny ke známým službám.

Jméno cíle se vyhodnocuje na vzdáleném konci tunelu. Většinou to nepředstavuje komplikace, výjimkou je jméno localhost, které se převádí na IPv4 adresu 127.0.0.1. Tato adresa existuje na každém počítači s podporou protokolu IPv4 28, localhost na notebooku je jiný než localhost na serveru bis.vse.cz.

Nejčastější chybou je nestisknutí tlačítka Add pro přidání návrhu do seznamu tunelů.

V logu (Event Log) si můžete zkontrolovat, že se tunel vytvořil.

image21

Pokud máte na stanici nainstalovaného řádkového klienta, tak se na mysql server připojíte následujícím příkazem

mysql --host localhost --port 7000 --user abcd01 --password

V grafických klientech je to podobné 29.

Na tunelované komunikaci s MySQL serverem si ukážeme, jak se v posílané zprávě mění adresy a porty. MySQL klient spuštěný na notebooku posílá tcp datagram s následujícími parametry:

Zdrojová IP adresa: 127.0.0.1
Cílová IP adresa: 127.0.0.1
Zdrojový TCP port: náhodný, např. 37256
Cílový TCP port: 7000

Datagram převezme SSH klient, který ve vytvořeném kanálu SSH spojení na druhou stranu pošle data z TCP datagramu. Na druhém konci vytvoří následující TCP datagram:

Zdrojová IP adresa: 146.102.18.87 (bis.vse.cz)
Cílová IP adresa: 146.102.18.2 (kitscm.vse.cz)
Zdrojový TCP port: náhodný, např. 56102
Cílový TCP port: 3306

Důsledkem je, že server kitscm.vse.cz si myslí, že spojení na MySQL databázi vzniklo na bis.vse.cz a o SSH tunelování a notebooku nic neví.

2.4.7.2. Vzdálený (remote) tunel

Vzdálené (remote, reverse) přesměrování portů si ukážeme na přístupu z bis.vse.cz ke službě telnet (port 23) na serveru telehack.com. Server bis.vse.cz má blokovaný přístup mimo školu a z toho důvodu příkaz telnet telehack.com 23 nebude úspěšný.

image22

Notebook má přístup na server telehack.com a tak pouze nastavíme vzdálený tunel v putty. V konfiguraci nastavíme zdrojový port 8000, cílem bude telehack.com:23 a pod tím vybereme typ Remote. Opět nezapomenout na tlačítko Add.

Todo

Doplnit snímek s konfigurací remote tunelu v putty

Po vytvoření tunelu se k portu 8000 mohou připojit všichni uživatelé přihlášení na bis.vse.cz pomocí příkazu

telnet localhost 8000

image24

Komunikace mezi notebookem a serverem telehack.com šifrována není.

Nutno zdůraznit, že v případě vzdáleného přesměrování musíte zvolit zdrojový port, který není již na serveru použit. Pokud dva uživatelé použijí stejný zdrojový port, tak vznikne kolize 30. Zda se tunel vytvořil, zjistíte z logu putty.exe (Event Log).

2.4.7.3. Dynamický tunel

V posledním příkladu vytvoříme dynamický tunel na portu 1000.

image25

Stačí vyplnit zdrojový port a typ Dynamic.

image23

Pouze některé aplikace podporují SOCKS proxy verze 5, příkladem mohou být webové prohlížeče 31. Obrázek 1‑29 ukazuje nastavení SOCKS proxy verze 5 ve firefoxu.

image26

2.4.9. Přihlašování skrz bastion

Není vhodné všechny servery vystavovat na Internet. Můžete vystavit pouze jeden server (bastion) a z něho se hlásit na ostatní servery. Existují dva základní přístupy – řetězení a tunelování spojení. V každém přístupu je více variant realizace. Řetězení je méně bezpečné.

V logách na interním serveru je zapsáno, že se uživatel přihlásil z bastionu. Je potřeba projít i logy z bastionu, pro zjištění z jaké IP adresy se uživatel přihlásil.

2.4.9.1. Řetězení serverů (SSH chaining)

Při řetězení serverů se z domova pomocí klíče přihlásíte na bastion a získáte shell (příkazovou řádku). Na bastionu spustíte program ssh a připojíte se na interní server.

image27

Při řetězení serverů musíte řešit autentizaci pro spojení z bastionu na interní server. Máte několik možností:

  • Autentizace heslem. Musí být povoleno. Při častějším připojování to začne uživatelům vadit. Je zde nebezpečí hádání hesel, byť jen od uživatelů s přístupem dovnitř sítě.

  • Druhá dvojice klíčů. Na bastionu vygenerujete další dvojici soukromý/veřejný klíč a veřejný klíč umístíte na server. Při vytváření spojení z bastionu zadáte heslo k soukromému klíči či nahrajete klíč do ssh-agent spuštěného na bastionu.

  • Soukromý klíč nahrajete na bastion. Na bastion zkopírujete svůj soukromý klíč z domácího počítače a na server umístíte svůj veřejný klíč. Podobně jako v předchozím případě musíte na bastionu zadat heslo k soukromému klíči. Toto řešení porušuje bezpečnostní pravidlo – jedna dvojice klíčů pro jeden účel.

  • Agent-forwarding. Na domácím počítači máte soukromý klíč nahraný v agentovi (pagent, ssh-agent), veřejný klíč máte na bastionu. Stejný klíč zkopírujete i na interní server. Před vytvořením spojení na bastion zapnete v klientovi na domácím počítači agent-forwarding.
    image32
    Součástí spojení na bastion poté bude vytvoření virtuálního ssh agenta na bastionu, který všechny požadavky na klíč přepošle agentovi na domácím počítači. Při vytvoření spojení z bastionu na interní server se díky forwardingu uživatel ověří na domácím počítači.
    Výhodou je, že soukromý klíč nikdy neopustí domácí počítač.
    Nevýhodou je, že správce bastionu (či útočník, který kompromituje bastion) může zneužít agent-forwarding konkrétního uživatele a prostřednictvím jeho klíčů na domácím počítači se připojit na další server. Obrana je jednoduchá – ssh-agent na domácím počítači si při každém použití soukromého klíče vyžádá od uživatele potvrzení. Pageant bohužel tuto funkcionalitu nemá.

Všechny varianty řetězení mají několik bezpečnostních nedostatků. Pokud útočník kompromituje bastion, tak se může hlásit na interní servery pod cizí identitou. Útočník též může sledovat celou komunikaci, neboť při řetězení se na bastionu údaje předávají z jednoho zašifrovaného spojení do druhého. Postup útočníka je poměrně jednoduchý - upraví ssh klienta či ssh server a přenášené údaje loguje (stačí zapnout ladící volby v konfiguraci).

Dalším problémem je, že uživatel má plnohodnotný přístup k shellu bastionu. Díky tomu může na bastionu spouštět různé programy, může si na něm uschovávat soubory – tím se zvyšuje nebezpečí úspěšného útoku na bastion i zvyšují nároky na správu bastionu.

2.4.9.2. Tunelování ssh spojení

Alternativou k řetězení je tunelování, které umožňuje bezpečné připojení na server i v případě kompromitovaného bastionu.

image28

Při tunelování vytvoříte ssh spojení na bastion a v něm tunel. Druhé ssh spojení bude ze stanice do tunelu a z bastionu bude pokračovat dál na server. U tohoto typu spojení se bastion označuje pojmem Jump host či ssh proxy server. Na bastionu není potřeba vytvářet spojení s emulací terminálu, uživatel nemusí mít možnost spouštění programů 32. Na bastionu i na serveru musí mít uživatel uložen svůj veřejný klíč. Existuje opět několik variant realizace tohoto principu.

  • Klasický lokální tunel. Připojíte se na bastion a vytvoříte klasický lokální tunel. Ve druhém ssh spojení se připojíte na lokální konec tunelu. V případě většího počtu interních serverů je správa tunelů obtížná.

  • Dynamická proxy. Opět máte dvě spojení. V prvním se připojíte na bastion a vytvoříte dynamický tunel (SOCKS proxy) např. na portu 1000. Ve konfiguraci spojení na server nastavíte v Connection -> Proxy typ proxy na Socks 5, hostname na localhost a port na 1000.
    image29
  • Proxy command. V obou předchozích způsobech uživatel musí spustit dva programy (dvakrát Putty). Vytvoření tunelu a navázání spojení lze zapsat do jedné konfigurace (sezení), viz následující příklad.

2.4.9.3. Proxy command v Putty

Ze svého počítače se chci připojit na server bis144.vse.cz, který je dostupný pouze přes server bis.vse.cz (tj. bastion). Na obou serverech mám již veřejný klíč, je uložen v .ssh/authorized_keys. Na stanici používám pageant a mám v něm nahrán příslušný klíč (či klíče pokud se liší).

image30

V putty do Host Name zadám jméno cílového serveru včetně přihlašovacího jména na tomto serveru, tj. zadám pavlicek@bis144.vse.cz

Poté v Connection -> Proxy nastavím typ proxy na local a dále do local proxy command dole doplním příkaz:

plink pavlicek@bis.vse.cz -agent -nc %host:%port\n

image31

Před navázáním spojení na server bis144.vse.cz se spustí program plink, který vytvoří spojení na bis.vse.cz s uživatelským jménem pavlicek a vytvoří potřebný proxy tunel (parametr -nc) na bis144.vse.cz a port 22 (zadáno odkazem na hodnoty vyplněné v položce Host Name a port na úvodní stránce konfigurace). Parametr -agent u programu plink určuje způsob autentizace – bude číst klíč z programu pageant. V poslední verzi PuTTY není nutné tento parametr zadávat.

Další informace o proxy najdete v dokumentaci putty 33.

18

Autor používá název PuTTY jak pro celou sadu programů, tak pro hlavní program. Já se to budu snažit odlišit a pro označení programu používat název putty či putty.exe.

19

Od studentů jsem zaslechl slangové označení „černé okénečko“.

20

Přihlašování pomocí klíče je dle RFC 4252 povinná autentizační metoda. Ověření uživatele pomocí hesla nemusí být implementováno. V případě některých specializovaných zařízení, jako síťové prvky, autentizace pomocí klíče často chybí.

21

Vygenerovanou dvojici klíčů lze použít i k dalším účelům, např. jako osobní certifikát pro S/MIME. Musíte ale překonat praktickou překážku v obtížné dostupnosti vhodného nástroje pro konverzi mezi formáty. Je to i proti bezpečnostním doporučením – pro každý účel by se měly používat odlišné klíče. Jiná situace je v případě vygenerování soukromého klíče na čipové kartě – zde není neobvyklé použití stejné dvojice klíčů pro různé účely.

22

Důvody ukončení podpory DSA klíčů – viz http://security.stackexchange.com/questions/112802/why-openssh-deprecated-dsa-keys.

23

Zabezpečení souboru .ppk se soukromým klíčem pro program PuTTY je zastaralé – pokud útočník získá soubor se soukromým klíčem, tak je schopen zkoušet stovky tisíc hesel za vteřinu, viz kapitola 1.5.8 TODO ověřit po spojení dokumentů dohromady

24

http://winscp.net/

25

https://sourceforge.net/projects/vcxsrv/

26

http://mobaxterm.mobatek.net

27

Ve Windows vypíšete seznam obsazených TCP portů na příkazové řádce pomocí netstat -a -p TCP

28

Jméno localhost se též překládá na IPv6 adresu ::1 – ta je též na každém počítači a používá se stejně jako 127.0.0.1 v IPv4.

29

Připojování přes SSH tunel k databázi je tak rozšířené, že mnohé grafické nástroje integrovali vytvoření SSH tunelů. Často využívají řádkový program plink.exe z PuTTY.

30

V Linuxu zjistíte obsazené TCP porty pomocí příkazu netstat -ltn

31

Pokud v aplikaci chybí podpora pro SOCKS 5 proxy, můžete zkusit proxy programy typu proxifier (https://en.wikipedia.org/wiki/Comparison_of_proxifiers).

32

Omezení účtu pouze na tunelování je popsáno v manuálových stránkách „man sshd“, v sekci věnované souboru authorized_keys.

33

http://tartarus.org/~simon/putty-snapshots/htmldoc/Chapter4.html#config-proxy.