SSH võtmetega autentimine

Ettevalmistus

Installige rooduna telneti server, mida meil hiljem testimiseks vaja läheb, ja xkey kompileerimiseks vajalikud päised. Logige root välja.

# apt-get install telnetd libx11-dev libxt-dev

Ligipääs teise masinasse

Lihtne logimine teise masinasse (kes ei mäleta)

$ ssh kasutaja@praks18.local

ja logige välja tagasi, et edaspidine oma arvutis toimuks.

Puhastame SSH keskkonna varasematest praksidest:

$ rm -rf ~/.ssh

RSA võtme genereerimine (võtmele pange parool!):

$ ssh-keygen -t rsa 

NB: kasutage vaikimisi pakutud failinime!

Teise masinasse logimine:

$ ssh kasutaja@teinemasin.local

Võta oma masinast võtme avalik pool (cat ~/.ssh/id_rsa.pub) ja lisa teise masina/teise kasutaja .ssh/authorized_keys faili (võti on üks rida, ettevaatust nano kasutajad, kasutage nano -w reamurdmise vältimiseks!)
Kontrollige, et nüüd saab teise masinasse logida, omades võtit ja teades võtme parooli (kasutaja parooli pole vaja). Kui ei saa oma võtme parooliga ligi, parandage, kuni saate.

Rünne

Moodustage 3-liikmeline ründestsenaarium: võtme genereeria, server, ja "pahalane"

Pahalane kopeerib teie võtme salajase poole ära (.ssh/id_rsa) ning arvab ära ka parooli (vajadusel aidake). Pahalane kasutab teie kopeeritud võtmefaili ja logib masinasse:

$ scp masin.kus.see.võti.asub:.ssh/id_rsa .
$ ssh -i id_rsa kasutaja@masin.kus.see.võti.kehtib

Vältimine: kirjutame .ssh/authorized_keys faili võtme rea algusse:

from="lubatud.masina.ip"

NB! See peab olema sama rea algusses, kus võti!

SSH võtme parooli vahetamine:

$ ssh-keygen -p

Mida tuleb teha võtme kompromiteerumisel?

SSH agent

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 startida:

$ 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 tahate teha uuesti ssh-add, et võti mälus oleks.

Agent forwarding

Agent forwarding - autentimisteenuse vahendamine, võti püsib endiselt kohalikus masinas!

$ ssh -A kasutaja@teinemasin

Nüüd uuri teises masinas - meie võtmed

$ ssh-add -l

Teises masina peate nägema oma kohaliku masina võtit. Parandage, kui ei näe.

Tekita vajalikud võtmete usaldused ning veendu, et on võimalik selliselt läbi mitme masina oma võtit kasutada. (salajane võti masin1-s, ssh -A masin2, sealt edasi ssh masin3 ja masin3 autendib kasutaja masinas1 oleva võtme järgi)

Küsimus 1 Millised on taolisel läbi mitme masina logimisel ohud - milliste rünnete suhtes on vastuvõtlikum "agent" ja milliste suhtes klassikaline parooli kasutamine?

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

SSH ja port forwarding

ssh ja portforward - õigetpidi:

$ ssh -L2323:praks19.local:23 kasutaja@praks20.local

(asendage 19 ja 20 reaalsete arvutitega). Nüüd teises aknas "telnet 127.0.0.1 2323" - ja mis masin see on?

Tagurpidi: (pordinumbriks valige oma arvuti 233XX, kus XX on võtke oma arvuti IP aadressist, ja teinemasin olgu klassist mõni)

$ ssh -Rpordinumber:teinemasin.local:23 username@math.ut.ee

nüüd math'is (vaikimisi IPv6!)

$ telnet ::1 pordinumber

Küsimus 2 Millised ründed on võimalikud (lihtsamini teostatavad) kasutades sellist portide edastamist? (defineeri, sõnasta üldisi soovitusi nende vältimiseks)

Arvestuse saamiseks saatke 1. ja 2. küsimuse vastused oma praktikumijuhendaja aadressil.

SSH ohud

Demonstreerime SSH agendi ohtusid (sihtmasina administraator saab ligi). Kaks osapoolt: server ja klient (leppige kokku!) Server: kontroli, et X11 edastamine on lubatud serveri konfis (/etc/ssh/sshd_config on "X11Forwarding yes"), vajadusel muuda ja restardi server.

Klient: logi teise masinasse ja kontrolli, kas saad käivitada X rakendust (xterm näiteks). Uuri, mis on keskkonnamuutuja DISPLAY väärtus (echo $DISPLAY).

$ ssh -X kasutaja@server

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 paariline on ssh'ga sisse loginud, DISPLAY väärtuseks sea see, mida kasutatakse ssh sessiooni sees. (xauth -> list on abiks! (kontrollge, võib olla ka mingi suurem number, kui 10)

$ ./xkey localhost:10.0

Klient: kasutades mõnda olemasolevat kohaliku masina terminali, logi math.ut.ee'sse... või parem kuhugi mujale (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

Failide kopeerimine

scp - failide kopeerimine. Kuidas kopeerida faile oma masinast teise, teisest omale, kahe kauge masina vahel?

sftp - ftp moodi asi. Olemas palju ilusaid graafilisi kliente. Tehke kindlaks, kas nautilus, konquror oskavad - vajadusel installeerige puuduv tarkvara!

Proovimiseks

rsync üle ssh:

$ export RSYNC_RSH=ssh
...

Pange püsti CVS server ja kasutage seda üle ssh

Sidebar
Page edit