SSH este un acronim pentru „Secure Shell” sau „Secure Socket Shell” fiind un protocol de administrare la distanta care permite utilizatorilor sa-si controleze si sa modifice serverele la distanta prin Internet.

Serviciul a fost creat ca un inlocuitor sigur pentru Telnet (necriptat) si foloseste tehnici criptografice pentru a se asigura ca toate comunicatiile catre si de la serverul de la distanta au loc intr-o maniera criptata (sigura).

Orice utilizator Linux sau macOS poate utiliza SSH pe serverul sau de la distanta, direct din fereastra terminalului. Utilizatorii Windows pot profita de clienti SSH (software specializat) precum Putty.

SSH este utilizat de catre administratorii de retea pentru a gestiona sistemele si aplicatiile de la distanta, permitandu-le sa se conecteze la un alt computer printr-o retea, sa execute comenzi si sa mute fisiere de pe un computer pe altul.

Versiuni

Exista doua versiuni principale ale SSH: SSH-1 si SSH-2 care sunt utilizate pentru a identifica serverele care sunt compatibile cu anumite versiuni SSH.

SSH este cel mai frecvent utilizat de variantele sistemelor de operare Unix (de exemplu Linux si macOS). Este utilizat cu Microsoft Windows (Windows 10 foloseste OpenSSH ca si client SSH implicit).

In comparatie cu SSH-1, SSH-2 vine cu imbunatatiri de securitate si noi caracteristici dar versiunile nu sunt compatibile. Una dintre imbunatatirile de securitate ale SSH-2 este utilizarea schimbului de chei Diffie-Hellman, o metoda de schimb a cheilor criptografice pe un canal public precum Internetul.

Datorita defectelor de proiectare, SSH-1 este in general considerat invechit. Majoritatea sistemelor moderne accepta SSH-2.

Cum functioneaza SSH?

SSH utilizeaza o arhitectura client-server pentru comunicarea securizata prin retea, prin conectarea unui client ssh cu serverul ssh. In mod implicit, serverul SSHh ruleaza pe portul TCP standard 22.

SSH foloseste o tehnica de criptografie cu cheie publica pentru autentificare intre client si server. In plus, protocolul foloseste criptare simetrica puternica si algoritmi de hashing pentru schimbul de mesaje intre client si server, pentru a asigura confidentialitatea si integritatea datelor.

Majoritatea sesiunilor SSH vor avea doar urmatoarele doua operatii:

  • Autentificare
  • Executarea comenzii

Serverele SSH pot autentifica clientii folosind o varietate de metode; cele doua moduri de autentificare frecvent utilizate sunt:

  • Pe baza parolei (metoda implicita utilizata pentru clientii OpenSSH, cea mai simpla autentificare dar nu cea mai sigura)
  • Pe baza de cheie (imbunatateste securitatea sistemului prin generarea de perechi de chei SSH,  o alternativa mai sigura)

Dupa ce serverul autentifica clientul cu succes, se stabileste o conexiune sigura intre ei.

La ce este utilizat SSH (Secure Shell)?

SSH creeaza unui canal sigur intre computerele locale si la distanta. Este utilizat si pentru a gestiona routerele, hardware-ul serverelor, platformele de virtualizare, sistemele de operare (OS) si aplicatiile de gestionare a sistemelor si de transfer de fisiere.

Secure Shell este utilizat pentru conectarea la servere, efectuarea de modificari, incarcari si iesiri, utiizand fie anumite instrumente sau direct prin terminal. Cheile SSH pot fi utilizate cu scopul automatizarii accesului la servere. Acestea sunt deseori utilizate in scripturi, instrumente de gestionare a configuratiei sau sisteme de backup. Cheia SSH ofera conectare simpla (SSO), astfel incat utilizatorii sa se poata „deplasa” intre conturile lor fara a introduce o parola de fiecare data.

Pentru fiecare gazda implicata in comunicare se genereaza o pereche de chei publice unice. O sesiune necesita doua perechi de chei publice: o pereche de chei publice pentru autentificarea masinii la distanta pentru masina locala si inca o pereche de chei publice pentru a autentifica masina locala pentru masina la distanta.

Avantajele utilizarii SSH

Functiile permise de SSH includ:

  • utilizarea criptarii pentru a asigura transferul sigur de informatii intre client si server
  • permite utilizatorilor sa execute comenzi shell pe un computer la distanta in acelasi mod ca si cum ar fi asezat in fata computerului fizic
  • stratul de conexiune SSH permite mai multe fluxuri de date printr-o singura conexiune TCP (multiplexare)
  • accesul securizat de la distanta la sistemele sau dispozitivele de retea cu SSH pentru utilizatori, precum si accesul la procesele automate
  • tunelele SSH ofera o cale sigura pe Internet printr-un firewall catre o masina virtuala
  • sesiunile de transfer de fisiere sigure si interactive
  • transferurile automatizate si securizate de fisiere
  • emiterea sigura a comenzilor pe dispozitive sau sisteme la distanta
  • gestionarea in siguranta a componentelor infrastructurii de retea

Istoric SSH

SSH a fost dezvoltat de Tatu Ylonen, cercetator la Universitatea de Tehnologie din Helsinki, in 1995. Ylonen a creat prima versiune a protocolului dupa ce reteaua universitatii a fost sparta si mii de nume de utilizator si parole au fost furate. Obiectivul lui Ylonen era sa dezvolte o solutie pe care sa o poata utiliza pentru a se conecta de la distanta la Internet, in siguranta.

Ylonen a petrecut mai intâi ceva timp studiind criptografia, coloana vertebrala a SSH. Dupa ce SSH a fost standardizat de Internet Engineering Task Force (IETF), el a proiectat protocolul de transfer de fisiere SSH (SFTP) si apoi a fondat SSH Communications Security Corporation pentru a oferi suport comercial pentru versiunile platite ale SSH.

Proiectat pentru a inlocui Telnet (portul 23) si FTP (portul 21), Tatu Ylonen a reusit sa obtina pentru SSH alocarea portului 22 de catre Internet Assigned Numbers Authority (IANA).

SSH (Secure Shell): probleme de securitate

SSH-2 este considerat in general sigur. Cu toate acestea, toate implementarile de securitate au vulnerabilitati.

  • SSH accepta tunelarea, utilizata de exemplu de administratori pentru a tunela intr-o retea din locatii indepartate. Tunelarea poate crea insa portite pentru hackeri si poate incalca, de asemenea, unele reglementari de securitate, cum ar fi PCI si HIPAA.
  • Cheile SSH – utilizate adesea de utilizatori pentru a se conecta in loc de parole – nu expira niciodata. In organizatiile mari, pot exista sute de chei SSH pe mai multe servere. Gestionarea slaba a cheilor de utilizator SSH pot fi, din nou, porti de intrare pentru hackeri. Tunelarea SSH poate permite unui atacator sa foloseasca aceste chei SSH pentru a ocoli firewall-urile.
  • Unele gazde pot partaja aceeasi cheie deoarece a fost preconfigurata intr-un dispozitiv. Cheile private ale acestor dispozitive pot fi accesibile prin inginerie inversa. Cheile mai vechi, si mai scurte, pot permite, de asemenea, unui atacator sa obtina valorile cheilor private.
  • SSH poate fi lent in raspunsul la comenzile cu latime de banda mare prin conexiuni lente.

 

Telnet vs SSH

Telnet este unul dintre primele protocoale de aplicatii de Internet (celalalt este FTP). Este utilizat pentru a initia si mentine o sesiune de emulare a terminalului pe o gazda la distanta.

SSH si Telnet functioneaza similar, diferenta principala fiind ca protocolul SSH foloseste criptografie cu cheie publica pentru autentificarea punctelor finale atunci cand se configureaza o sesiune de terminal, precum si pentru a cripta comenzile si iesirile sesiunii.

SSL/TLS vs SSH

Amandoua se bazeaza pe perechi de chei publice/ private pentru autentificarea gazdelor. Insa sub TLS doar serverul este autentificat cu o pereche de chei. SSH foloseste o pereche de chei separata pentru a autentifica fiecare conexiune: o pereche de chei pentru conexiunea de la o masina locala la o masina la distanta si inca o pereche de chei pentru autentificarea conexiunii de la masina la distanta la masina locala.

Alta deosebire intre SSH si TLS este ca TLS permite criptarea conexiunilor fara autentificare sau autentificarea fara criptare. SSH cripteaza si autentifica toate conexiunile.

SSH ofera profesionistilor din domeniul IT si al securitatii informatiilor un mecanism sigur de gestionare a clientilor SSH de la distanta. In loc sa solicite autentificare prin parola pentru a initializa o conexiune intre un client SSH si server, SSH autentifica dispozitivele in sine. Acest lucru permite personalului IT sa se conecteze cu sistemele la distanta si sa modifice configuratiile SSH, inclusiv adaugarea sau eliminarea perechilor de chei gazda in fisierul known_hosts.

 

Comenzi SSH

Cu toate ca exista implementari grafice ale SSH, programul este de cele mai multe ori invocat din linia de comanda, ori executat ca parte a unui script. Daca veti rula comanda ssh fara argumente (precum o gazda de destinatie sau un ID de utilizator), veti primi o lista de parametrii si optiuni de comanda SSH.

Cea mai simpla forma de comanda SSH este invocarea programului si al numelui de gazda de destinatie sau adresa Internet Protocol (IP):

ssh server.example.org

Aceasta se va conecta la destinatie, server.exemplu.org. Gazda de destinatie va raspunde solicitand o parola pentru ID-ul de utilizator al contului pe care ruleaza clientul. Altfel spus, daca ID-ul de utilizator utilizat este „hostx”, atunci gazda la distanta va cere o parola asociata contului „hostx” de la gazda la distanta.

In multe cazuri, ID-ul utilizatorului pentru gazda la distanta va fi diferit. In aceasta situatie, comanda ar trebui sa fie emisa cu ID-ul utilizatorului gazdei la distanta:

ssh [email protected]

SSH poate fi utilizat si din linia de comanda pentru emiterea unei singure comenzi pe gazda la distanta si apoi a iesi:

ssh exemplu.org ls

Aceasta comanda executa comanda Unix ls, listand tot continutul directorului curent de pe gazda de la distanta. Desi acest exemplu este unul comun, ne arata ca SSH poate fi utilizat pentru executarea unor comenzi mai interesante pe o gazda la distanta.

Alte comenzi executabile SSH din linia de comanda includ:

  • sshd – initiaza serverul SSH, care asteapta solicitarile de conexiune SSH primite, permitand sistemelor autorizate sa se conecteze la gazda locala.
  • ssh-keygen – creează o pereche de chei pentru autentificarea cheii publice
  • ssh-copy-id – configureaza o cheie publica ca autorizata pe un server
  • ssh-agent – agentul detine cheia privata pentru conectare unica
  • ssh-add – utilizat pentru adaugarea unei chei la agentul de autentificare
  • scp – transfer de fisiere cu interfață de comandă asemănătoare RCP
  • sftp – transfer de fisiere cu interfață de comandă de tip FTP

 

Ce este SSH tunneling?

SSH tunneling, cunoscut si sub numele de SSH port forwarding (redirectionare de porturi SSH), este o tehnica care permite utilizatorului sa deschida un tunel sigur intre o gazda locala si o gazda la distanta.

SSH port forwarding redirectioneaza traficul de retea catre un anumit port/ adresa IP, astfel incat o gazda la distanta sa fie accesibila direct de aplicatiile de pe gazda locala. Destinatia poate fi pe serverul SSH la distanta sau serverul respectiv poate fi configurat pentru a fi redirectionat catre inca o alta gazda la distanta.

Tunelurile SSH sunt instrumente puternice pentru administratorii IT, precum si pentru actorii rau intentionati, deoarece pot tranzita un firewall de intreprindere in mod nedetectabil. Ca urmare, exista instrumente disponibile pentru a preveni utilizarea neautorizata a tunelurilor SSH printr-un firewall corporativ.