Arvutiteaduse instituut
  1. Kursused
  2. 2017/18 kevad
  3. Andmeturve (LTAT.06.002)
EN
Logi sisse

Andmeturve 2017/18 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Referaat
  • Kirjandus
  • Uudised
  • Lingid

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:


Portide edastamise illustratsioon (allikas)

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).

  1. TÜ tööarvutisse sisselogimine (Tegu on andmeturve õppejõu tööarvutiga J. Liivi 2 ruumis 306)
    1. 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).
    2. Avage teine Linux virtuaalmasina käsurida paralleelselt ja sisestage käsk ssh -p 2323 tudeng@localhost
    3. Teilt küsitakse tudeng kasutaja parooli, milleks on 1234567890
    4. Kontrollige, milline on teie sisselogitud arvuti IP ip addr l eth0 ja arvuti nimi hostname
    5. Kontrollige mtr käsuga, et olete TÜ sise-võrgus mtr -b 8.8.8.8
      1. Eelnev lahendus on sama väärne kui logiksite ssh-ga või VPN-iga TÜ avalikku serverisse ja siis sealt omakorda "tööarvutisse"
      2. 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.
      3. math.ut.ee serveri käsurealt sisestage ssh tudeng@172.17.37.172
      4. kontrollige mtr ja hostname käsuga, et tegu on sama arvutiga
  2. Andmeturve arvutiklassi arvutisse sisse logimine (J. Liivi 2-123 arvutiklassi arvuti)
    1. 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.
    2. math.ut.ee serveri käsurealt sisestage ssh -p 23123 tudeng@localhost
    3. Kontrollige, milline on teie sisselogitud arvuti IP ip addr l eth0 ja arvuti nimi hostname
    4. Kontrollige mtr käsuga, et olete J.Liivi2-123 arvutiklassi võrgus mtr -b 8.8.8.8 (esimene rida peaks olema L2-123NAT-ruuter (192.168.10.1)

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õi Andmeturve-5GHz salasõna LTAT.06.002.
  • Juhul kui te kasutate klassi võrku ühendamiseks WiFi, siis valige Andmeturve Linux Mint virtuaalmasina võrguseadete alt Attached to: Bridged Adapter ja valige WiFi 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 alt Ethernet adapter ja Attached 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
    • https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/
  • Konfigureerige OpenSSH ümber kasutama ProxyCommand'i nii, et ühte serverisse ühendades loodaks tunnel läbi kolmanda masina.
    • Modifitseerida tuleb ~/.ssh/config faili
  • 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.

  1. Ü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 ülesanne
Sellele ülesandele ei saa enam lahendusi esitada.

Kodune ü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 ülesanne
Sellele ülesandele ei saa enam lahendusi esitada.

Kasulikud viited

  • SSH Agent Forwarding ja sellega seotud probleemid
    • http://unixwiz.net/techtips/ssh-agent-forwarding.html
  • SSH Port Forwarding
    • SSH/OpenSSH/PortForwarding
  • ProxyCommand
    • https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused