Secure Shell (SSH) kasutamine ja turvalisus
SSH on võrguprotokoll arvutitevaheliste krüpteeritud tunnelite loomiseks. Üks selle peamisi kasutusalasid on üle võrgu teistesse arvutitesse sisse logimine ning arvutite kaughaldamine. Selles praktikumis vaatame missuguseid turvaaspekte tuleb meeles pidada SSH kasutamisel ning mängime läbi mõned ründestsenaariumeid. Lisaks vaatame, kuidas SSH'd kasutada võrgu liikluse ümber suunamiseks läbi krüpteeritud SSH tunnelite.
NB! Kontrollige üle, et teie virtuaalmasina hostname
on muudetud unikaalseks. See peaks sisaldama teie perekonnanime. Püsiva muudatuse tegemiseks tuleks modifitseerida järgmisi faile: /etc/hostname
ja /etc/hosts
ning teha arvutile restart
. Ajutise muudatuse tegemiseks: sudo hostname SINU_NIMI
. Täpsemalt saab hostname muutmise kohta lugeda siit: How to Change Your Hostname (Computer Name) on Ubuntu Linux.
Lisaks on mugavam, kui sooritate antud praktikumi kasutades oma läpakaid. Klassis olevate arvutitega peate tegema paar lisasammu.
Töö toimub Linux Mint virtuaalmasinas.
5.1 Ligipääs teise masinasse üle SSH
Kasutage SSH'd, et logida sisse math.ut.ee
serverisse. Teil on selleks vaja teada enda TÜ kasutajatunnust <ut_login>
ja TÜ parooli
.
Avage oma Linux virtuaalmasinas terminal ning kasutage järgmist käsku:
$ ssh <ut_login>@math.ut.ee
kus <ut_login>
asendage oma TÜ kasutajatunnusega ja pärast käsu sisestamist küsitakse teie ÕISi parooli (sisestage see). Õnnestunud sisenemise järel logige välja tagasi kasutades käsku exit
, et edaspidine oma arvutis toimuks. Alati on tähtis jälgida tähelepanelikult, mis arvutisse te hetkel olete sisse loginud.
Kasutaja parooli asemel on võimalik sisse logimiseks kasutada ka avaliku võtme krüptograafial põhinevat lahendust. Avaliku võtme krüptograafias on kasutusel kaks võtit: avalik võti ja salajane võti. Need genereeritakse korraga nii, et need on omavahel seotud, kusjuures on oluline, et avalikust võtmest ei saa tuletada saljast võtit. Täpsemalt räägime avaliku võtme krüptograafiast järgmise praktikumi alguses.
Järgnevate ülesannete jaoks läheb vaja avaliku võtme krüptograafial põhinevat autentimist. Genereerige enda arvutis enda kasutajale uus RSA võtmepaar (selle käigus luuakse nii avalik kui salajane võti). Salajase võtme kaitsmiseks pange sellele parool ning jätke parool meelde!:
$ ssh-keygen -t rsa
NB: kasutage vaikimisi pakutud failinime!
Selleks, et niisugune autentimine toimiks peab usaldusväärse serveriga jagama enda avalikku võtit. Hetkel ei ole vaja vastavat käsku sisestada, aga seda tegevust läheb praktikumis mitmel korral vaja. Enda avalikku võtit saab teise masinasse kopeerida käsuga:
$ ssh-copy-id <username>@<server>
Kommentaar: Seda saab ka käsitsi teha, aga siis on vaja võtta oma masinast võtme avalik pool (cat ~/.ssh/id_rsa.pub
) ja lisada teise masina/teise kasutaja .ssh/authorized_keys
faili (võti on üks rida, ettevaatust nano
kasutajad, kasutage nano -w
reamurdmise vältimiseks!).
5.2 SSH ja port forwarding näide
SSH'd saab kasutada võrgu liikluse ümber suunamiseks, läbi krüpteeritud SSH tunnelite, kasutades portide edastamist. Kahe arvuti vahel luuakse SSH tunnel ning ühe arvuti porti saabuv liiklus suunatakse ümber teise masina porti läbi SSH tunneli.
Portide edastamise kohta saab rohkem lugeda siit: SSH/OpenSSH/PortForwarding ja siit: Bypassing corporate firewall with reverse ssh port forwarding.
Läbi tunneli on võimalik suunata võrgu liiklus kas samas suunas tunneli loomise suunaga, või siis vastupidises suunas:
LPF ja RPF Demo
Et paremini mõista LPF (Local Port Forwarding) ja RPF (Remote Port Forwarding) erinevust ka on juhendajad teile üles seadnud 2 illustreerivat näidet.
Mõlema lahenduse jaoks peaksite olema väljaspool TÜ sisevõrku ehk kasutama ut-public
nimelist WiFi võrku ja kasutama Linux käsurida (Soovitavalt praktikumi Mint virtuaalmasin).
- TÜ tööarvutisse sisselogimine (Tegu on andmeturve õppejõu tööarvutiga J. Liivi 2 ruumis 306)
- Avage Linuxi käsurida ja sisestage käsk
ssh -L 2323:172.17.37.172:22 <ut_login>@math.ut.ee
, kus<ut_login>
asendage oma TÜ kasutajatunnusega ja pärast käsu sisestamist küsitakse teie ÕISi parooli (sisestage see). - Avage teine Linux virtuaalmasina käsurida paralleelselt ja sisestage käsk
ssh -p 2323 tudeng@localhost
- Teilt küsitakse
tudeng
kasutaja parooli, milleks on1234567890
- Kontrollige, milline on teie sisselogitud arvuti IP
ip addr l eth0
ja arvuti nimihostname
- Kontrollige
mtr
käsuga, et olete TÜ sise-võrgusmtr -b 8.8.8.8
- Eelnev lahendus on sama väärne kui logiksite ssh-ga või VPN-iga TÜ avalikku serverisse ja siis sealt omakorda "tööarvutisse"
- Linux käsurealt sisestage
ssh <ut_login>@math.ut.ee
, kus <ut_login> teie TÜ kasutajatunnus ja kui küsitage sisestage enda TÜ ÕISi parool. - math.ut.ee serveri käsurealt sisestage
ssh tudeng@172.17.37.172
- kontrollige
mtr
jahostname
käsuga, et tegu on sama arvutiga
- Avage Linuxi käsurida ja sisestage käsk
- Andmeturve arvutiklassi arvutisse sisse logimine (J. Liivi 2-123 arvutiklassi arvuti)
- Linux käsurealt sisestage
ssh <ut_login>@math.ut.ee
, kus <ut_login> teie TÜ kasutajatunnus ja kui küsitage sisestage enda TÜ ÕISi parool. - math.ut.ee serveri käsurealt sisestage
ssh -p 23123 tudeng@localhost
- Kontrollige, milline on teie sisselogitud arvuti IP
ip addr l eth0
ja arvuti nimihostname
- Kontrollige
mtr
käsuga, et olete J.Liivi2-123 arvutiklassi võrgusmtr -b 8.8.8.8
(esimene rida peaks olemaL2-123NAT-ruuter
(192.168.10.1)
- Linux käsurealt sisestage
5.3 SSH Tagurpidi edastamine Ülesanne
Teie eesmärgiks on ligi pääseda oma Andmeturve virtuaalmasinasse
kasutades SSH ühendust. Selleks suuname nüüd liikluse läbi SSH tunneli, sellele vastupidises suunas.
Tunneli sihtpunktiks olevas arvutis (math.ut.ee) suunatakse lokaalsesse porti (233XX) saabuv liiklus ümber tunneli allika arvuti porti (22).
Pordinumbriks valige oma arvuti 233XX, kus XX on teie praktikumi arvuti koha number ja endamasin olgu teie enda virtuaalmasina IP.
$ ssh -R pordinumber:endamasin:22 <username>@math.ut.ee
Seejärela peate oma virtuaalmasinasse installima ssh serveri.
$ sudo apt install openssh-server
Nüüd on teil suvalisest masinast juurdepääs enda virtuaalmasinasse. Selleks tuleb kõigepealt teha ssh ühendus serverisse math.ut.ee. Selle illustreerimiseks minimaliseerige virtuaalmasina aken ning host masinast avage ssh sessioon math.ut.ee
serverisse. Juhul kui teie host masinas jookseb Windows, siis saab ssh jaoks kasutada programmi PuTTy
. Kui olete math.ut.ee
-s (vaikimisi IPv6!), siis sisestage järgnev käsk:
$ ssh kasutaja@localhost -p 233XX
Praktikumi arvestus - Tehke ekraanivaade terminali aknast. Vajalik et oleks näha masina nimi
, ssh käsk
ning ssh käsu väljund
5.4 Praktikumi järgnevate tegevuste ettevalmistus
- PS , juhul kui kasutate klassis olevaid lauaarvuteid, siis peate edasiseks praktikumiks ümber lülitama end võrgutehnoloogia kasutaja alla.
1. Ühendage enda virtuaalmasin klassi võrku. Selleks peab virtuaalmasina võrguadapteri tüübiks olema bridged adapter.
- Lülitage enda Andmeturve Linux mint virtuaalmasin välja
power off
. - Ühendage enda sülearvuti Wifi võrku võrku nimega
Andmeturve-2GHz
võiAndmeturve-5GHz
salasõnaLTAT.06.002
. - Juhul kui te kasutate klassi võrku ühendamiseks WiFi, siis valige
Andmeturve Linux Mint
virtuaalmasina võrguseadete altAttached to: Bridged Adapter
ja valigeWiFi adapter
(näiteks IT akadeemia sülearvutite puhul "Broadcom 802.11n Network Adapter"). - Juhul kui te kasutate klassi võrku ühendamiseks
võrgukaablit
, siis valige vastava virtuaalmasina võrguseadete altEthernet adapter
jaAttached to: Bridged Adapter
. - Igaks juhuks genereerige oma virtuaalmasina võrgukaardile ka uus
MAC aadress
(Advanced valikute all).
2. Installige virtuaalmasinasse telneti server, mida meil hiljem testimiseks vaja läheb, ja xkey
kompileerimiseks vajalikud päised.
sudo apt-get update sudo apt-get install telnetd libx11-dev libxt-dev
5.5 SSH Õigetpidi edastamise ülesanne
Selles ülesandes on teil on vaja valida kahe teise tudengi virtuaalmasinad arvuti_2 ja arvuti_3 ja küsida nende IP aadressid.
Loome uue SSH tunneli masinasse arvuti_2 ning määrame võrgu liikluse edasi suunamise tunneliga samas suunas. Tunneli alustanud arvutis suuname porti 2323 saabuva liikluse (läbi tunneli) ümber masina arvuti_3 porti 23.
$ ssh -L 2323:arvuti_3:23 kasutaja@arvuti_2
(asendage arvuti_2 ja arvuti_3 reaalsete ip-aadressitega). Nüüd teie virtuaalmasina teises terminali aknas jooksutage "telnet 127.0.0.1 2323
". Mis masinasse telnet suunati?
Praktikumi arvestus 2 - Tehke ekraanivaade terminali aknast. Vajalik et oleks näha teie masina nimi
, telnet käsk
ning telnet käsu väljund
5.6 Kasutage avaliku võtme krüptograafial põhinevat autentimist
Saatke oma parempoolse naabri arvutisse enda ssh avalik võti (käsk koos selgitusega on praktikumijuhendi alguses). Kontrollige, et nüüd saate vastava naabri masinasse logida omades võtit ja teades enda salajase võtme parooli (naabri kasutaja parooli pole vaja).
Kui ei saa oma võtmega ligi, parandage, kuni saate.
5.7 SSH võtme varguse rünne
Moodustage 3-liikmeline ründestsenaarium:
- Võtme genereerija
- Server
- Ründaja
Vaatame, mis juhtub olukorras kus ründaja saab juurdepääsu SSH salajasele võtmele. See on täiesti reaalne ründe olukord, sest sisevõrku tunginud ründaja võib saada juurdepääsu SSH salajasele võtmele.
1. Võtme genereerija peab olema jaganud enda avalikku võtit serveriga, et teha võimalikuks võtmepaariga serverisse logimine.
2. Ründaja kopeerib ohvri (võtme genereerija) arvutist võtme salajase poole (.ssh/id_rsa
) (aga ei kirjuta enda salajast võtit üle) ning arvab ära ka parooli (vajadusel aidake). Parooli äraarvamine võib samuti olla reaalne juhul kui parool on nõrk või juhul kui ründaja saab paigaldada ohvri arvutisse keyloggeri.
$ scp kasutaja@masin.kus.see.võti.asub:.ssh/id_rsa .
3. Ründaja kasutab kopeeritud salajast võtit ja logib serverisse:
$ ssh -i id_rsa kasutaja@masin.kus.see.võti.kehtib
4.Ründe vältimine: Ohver kirjutab serveri .ssh/authorized_keys
faili võtme rea algusse: from="lubatud.masina.ip"
NB! See peab olema sama rea algusses, kus võti!
5. Ründaja proovib rünnet korrata.
PS! Võtme genereerija peaks endiselt ligi pääsema ilma kasutaja parooli sisestamata. Ründaja peaks ka endiselt ligi pääsema, aga mitte avaliku võtme krüpto abil vaid kasutaja parooliga, sest from
parameeter mõjutab ainult avaliku võtme krüptograafial põhinevat autentimist. Seetõttu keelatakse sellel põhjusel parooliga sisselogimine ära ning lubatakse ainult turvalisemat avaliku võtme krüptograafial põhinevat autentimist. (Praktikumis et vältida enda väljalukustamist me siiski seda ei tee).
SSH võtme parooli vahetamine:
$ ssh-keygen -p
Mida tuleb teha võtme kompromiteerumisel?
5.8 SSH agendi kasutamine
Pidev parooli sisestamine on tülikas (tekib kiusatus panna lühike parool, muutub tõenäoliseks parooli pealtkuulamine/klaviatuurilt mahalugemine). Uurime kas ssh-agent nimeline programm töötab (SSH_AGENT_PID
ja SSH_AGENT_SOCK
keskkonnamuutujad!)
$ env | grep SSH
(kui ei tööta, siis tehke exit
kuni olete oma masinas shellis, kus töötab). Masinates, kus ssh-agent ei tööta, tuleks see käivitada:
$ eval `ssh-agent`
Lisame oma võtme autentimisagendile (see hoiab lahtikrüptitud võtit mälus, kettale ei kirjuta, masinast välja ei anna). Kõik antud kasutaja protsessid saavad läbi UNIX socketi seda teenust kasutada:
$ ssh-add
Hetkel laaditud võtmeid saab vaadata
$ ssh-add -l
Võtme eemaldamine agendist:
$ ssh-add -d /home/kasutaja/.ssh/id_rsa
Kõigi võtmete eemaldamine:
$ ssh-add -D
Pärast seda tehke uuesti ssh-add
, et võti järgmiste ülesannete tarvis mälus oleks.
5.9 SSH agendi edasisuunamine (Agent forwarding)
Selles ülesandes on teil on vaja valida kahe teise tudengi virtuaalmasinad arvuti_2 ja arvuti_3 ja küsida nende IP aadressid.
Tekita vajalikud võtmete usaldused nii, et sinu masinast on võimalik mõlemasse masinasse sisse logida sinu võtit kasutades:
$ ssh-copy-id kasutaja@arvuti_2 $ ssh-copy-id kasutaja@arvuti_3
SSH agenti on võimalik edasi suunata läbi mitme masina selleks, et vahendada autentimise teenust. Selle abil saab krüptograafilist võtit kasutada teistes serverites autentimiseks, ilma et seda peaks liigutama esialgsest masinast.
Logige sisse teise tudengi masinasse kasutades võtme autentimist ning lisades SSH käsule agendi edasisuunamiseks -A
lipu:
$ ssh -A kasutaja@arvuti_2
Nüüd uuri selles masinas kasutaja aktiivseid võtmed
$ ssh-add -l
arvuti_2 masinas peate nägema oma kohaliku masina võtit. Parandage, kui ei näe.
Nüüd proovi, as on võimalik arvuti_2 masinast otse liikuda masinasse arvuti_3:
$ ssh masin3
Seda käsku tuleb käivitada masinas arvuti_2!
Keda huvitab, kuidas SSH võtmetega autentimine ja SSH agent tagaplaanil töötavad, võib lugeda seda illustratsioonidega artiklit: http://unixwiz.net/techtips/ssh-agent-forwarding.html
5.10 SSH agendi kasutamise ohud
Demonstreerime SSH agendi ohtusid (sihtmasina administraator saab sessioonile ligi). Selles ülesandes on kaks osapoolt: server ja klient. Tehke paaris ning leppige rollid omavahel kokku.
Server: kontrolli, et X11 edastamine on lubatud serveri konfis (/etc/ssh/sshd_config
on "X11Forwarding yes
"), vajadusel muuda ümber ja restardi SSH server. Paigalda enda masinasse xterm:
sudo apt install xterm
Klient: Kui server on ettevalmistusega valmis saanud, siis logi serverisse ja kontrolli, kas saad käivitada X rakendust (xterm
näiteks). Uuri xtermi aknas, mis on keskkonnamuutuja DISPLAY
väärtus (echo $DISPLAY
).
$ ssh -X kasutaja@server xterm
Server: tõmba programm xkey.txt (nimeta ümber xkey.c
), vajadusel installeeri libx11-dev ja libxt-dev paketid. Kompileeri programm:
$ gcc -o xkey xkey.c -L /usr/X11R6/lib/ -lX11 -lm
Käivita programm xkey
selle kasutaja õigustes, kellena teie masinasse on Klient ssh'ga sisse loginud, DISPLAY
väärtuseks sea see number, mida kasutatakse ssh sessiooni sees. Selle saate leida käsu w
väljundist (kindlasti kontrollige, see võib olla ka suurem number kui 10)
$ ./xkey localhost:10.0
Klient: kasutades avanenud xtermi akent, logi nüüd serverist omakorda mõnda kolmandasse masinasse kasutades ssh'd. Sisesta mõned käsud, aga ole ettevaatlik, teid kuulatakse pealt!
Veel SSH võimalusi
SSH kaudu teises masinas programmide käivitamine (sisend/valjund on ümbersuunatavad!): enne katsetamist tekitage vastavad failid!
$ ssh kasutaja@teinemasin "cat fail.tar | tar xf -" $ ssh kasutaja@teinemasin "tar cf - /mingi/kataloog | dd of=fail.tar" $ ssh root@teinemasin "find / -user root -perm +4000 -print0 | xargs -0 ls -l"
Lisaülesanne proovimiseks - Failide kopeerimine
scp
- failide kopeerimine üle SSH tunneli. Kuidas kopeerida faile oma masinast teise, teisest omale, kahe kauge masina vahel?
sftp
- FTP moodi asi. Olemas palju ilusaid graafilisi kliente. Tehke kindlaks, kas linuxi programmid nautilus, konquror oskavad sftp'd kasutada - vajadusel installeerige puuduv tarkvara!
Lisaülesanne proovimiseks - ProxyCommand
ProxyCommand'i kasutamine SSH Agendi või PortForwarding'u asemel
- Lugege lehekülge
- Konfigureerige OpenSSH ümber kasutama ProxyCommand'i nii, et ühte serverisse ühendades loodaks tunnel läbi kolmanda masina.
- Modifitseerida tuleb
~/.ssh/config
faili
- Modifitseerida tuleb
- Käsuga
who
saab kontrollida kust masinast on sisse tulev ssh sessioon pärit. - Praktiliselt on sellest kasu näiteks ülikooli serveritele ligi pääsemiseks, mis tavaliselt ei ole välisvõrgust otse kättesaadavad. Kasutada näiteks math.ut.ee serverit niiöelda väravana, kuna see on kätte saadav välisvõrgust.
Tagasiside
Praktikumi lõpus palume anda tagasisidet, sest see võimaldab meil antud praktikumi ja ka järgmisi praktikume paremaks muuta. Tagasiside on anonüümne ja tagasiside vormi leiate järgneva lingi abil: tagasiside ankeet.
Praktikumi ülesanded
Praktikumi ülesannete lahendamine annab ühe punkti. Praktikumi ülesanne võiks valmis saada praktikumi lõpuks, aga juhul kui see ei õnnestu, siis on võimalik lahendust esitada ühe nädala jooksul pärast praktikumi toimumist.
Antud praktikumi eest on võimalik saada maksimaalsed punktid ainult siis kui te osalesite praktikumis. Seda praktikumi ei saa iseseisvalt läbi teha.
- Ülesanne: Praktikumi arvestuse saamiseks tuleb esitada kaks ekraanipilti mis on tehtud ülesannetes 5.3 SSH Tagurpidi edastamine ja 5.5 SSH õigetpidi edastamine (Praktikumi arvestus 1 ja Praktikumi arvestus 2). Pakkige need kaks pilti kokku .zip faili ning laadige praktikumi lahendusena üles.
Lahendusi võtame vastu järgmistes failiformaatides: .zip, .pdf.
5. 5. SSH - praktikumi ülesanneKodune ülesanne
Koduse ülesande lahendamine annab ühe punkti. Lahenduse esitamiseks on aega nädal, s.t esitada tuleks selle päeva lõpuks, mil on järgmine praktikum. Koduse ülesande lahendus tuleb esitada aine kodulehelt. Küsimustele vastuste leidmiseks võib vaja minna lisamaterjalide, mille leiate allpool olevatest viidetest.
Ülesanded: vastake järgnevatele küsimusele:
- Millised ründed on võimalikud või lihtsamini teostatavad kui rünnatavas masinas kasutatakse portide edastamist? Defineeri võimalikud ründed ja sõnasta üldisi soovitusi nende vältimiseks (Praktikumi ülesande "5.2 LPF ja RPF Demo" kontekstis)
- Millised on praktikumis katsetatud läbi mitme masina logimisel ohud? Milliste rünnete suhtes on vastuvõtlikum SSH agendi edasisuunamise kasutamine ja milliste suhtes klassikaline parooli kasutamine? (Praktikumi ülesannete "5.8 SSH agendi edasisuunamine" ja "5.9 SSH agendi kasutamise ohud" kontekstis)
Juhul kui lahendus on ainult teksti kujul, siis saate lisada selle kommentaarina. Sellisel juhul on lahenduse esitamiseks vaja lisada tühi fail, sest antud vorm nõuab lahenduse esitamisel faili esitamist. Lahendusi võtame vastu järgmistes failiformaatides: .txt, .pdf.
20. 5. SSH kodune ülesanneKasulikud viited
- SSH Agent Forwarding ja sellega seotud probleemid
- SSH Port Forwarding
- ProxyCommand