Skip navigation

2.3. Secure SHell (SSH)

SSH és un protocol de xarxa que permet l’intercanvi d’informació de manera segura. Utilitza encriptació i criptografia de clau pública per tal de fer l’autenticació de l’estació remota.

Una de les funcions més emprades és iniciar una sessió remota per tal d’executar ordres. Però les seves capacitats són més àmplies, ja que també permet:

  • Transmetre fitxers de manera segura.
  • Fer túnels per assegurar qualsevol servei que no es transmeti encriptat (HTTP, SMTP, VNC, etc.) o per travessar tallafocs que estiguin bloquejant el protocol.
  • Reenviament automàtic de sessions X11.
  • Fins i tot, en fer servir SSHFS, actuar com a sistema de fitxers en xarxa.

Les seves possibilitats es poden combinar de moltes maneres diferents. Donades les seves capacitats criptogràfiques, SSH és una eina fonamental per a l’administrador de xarxa.

1. Com funciona l'encriptació en SSH

El protocol SSH empra un model client-servidor per autenticar les dues parts i xifrar les dades entre ells.

El servidor escolta en un port designat per a les connexions. És responsable de la negociació de la connexió segura, l'autenticació, i preparar l'entorn si s'accepten les credencials.

El client és responsable de començar la connexió inicial de TCP amb el servidor, de negociar de la connexió segura, de verificar que la identitat del servidor coincideix amb la informació prèviament gravada, i de proporcionar credencials per autenticar-se.

Una sessió SSH s'estableix en dues etapes separades. La primera és la d'aprovar i establir el xifrat per a protegir les comunicacions futures. La segona etapa és per autenticar a l'usuari.

La negociació del xifrat per a la sessió SSH

Quan un client es connecta, el servidor respon amb les versions de protocol que suporta. Si el client accepta alguna de les versions de protocol suportades, la connexió continua. El servidor també proporciona la seva clau pública, que el client pot utilitzar per comprovar si el servidor és realment el que diu ser. En aquest punt, les dues parts negocien una clau de sessió.

La clau de sessió (simètrica) serà utilitzada per xifrar tota la sessió. Els parells de claus públiques i privades que s'utilitzen en aquesta negociació són totalment independents de les claus SSH utilitzades per autenticar un client al servidor. Aquestes claus públiques s'usaran per a compartir la clau de sessió creada i per a xifrar totes de les comunicacions que es duguen a terme durant la sessió.

Esquema de negocació SSH
Llicència: CC BY

2. Mètodes d'autenticació del servei SSH

L’autenticació és l’acció de comprovar la identitat del remitent en una comunicació. El servidor SSH, en rebre una sol·licitud de connexió nova, necessita autenticar l’origen d’aquesta connexió com a pas previ per autoritzar o denegar la connexió.

El servidor SSH pot emprar  diversos mecanismes diferents d’autenticació. Entre aquests mecanismes destaquem, per ordre de preferència:

  1. Autenticació basada en l’amfitrió
  2. Autenticació de clau pública
  3. Autenticació desafiament-resposta
  4. Autenticació basada en la contrasenya

És molt important aclarir que abans de l’autenticació, tant a SSH1 com a SSH2, s’establirà una comunicació encriptada entre el client i el servidor. Per establir aquesta connexió encriptada es fan servir tècniques criptogràfiques de clau pública. Una vegada acordada una clau comuna s’utilitzarà una encriptació simètrica per a la resta de la sessió.

Autenticació basada en l'amfitrió

Aquesta és la tècnica més segura, impedeix els atacs basats en la suplantació d’adreces IP, de DNS i de la taula de rutes.

SSH genera una parella de claus, pública i privada, durant la seva instal·lació en cada equip. Aquestes claus identifiquen l’estació en què s’executa SSH, no els seus usuaris. Són les anomenades claus d’amfitrió (host) i, si el compte de superusuari (root) no està compromès (és a dir, si ningú no s’ha convertit en superusuari de manera fraudulenta), no és necessari canviar-les.

SSH2 pot emprar els algorismes RSA i DSA, mentre que SSH1 només pot fer servir RSA.

Per tal de que l’autenticació basada en l’amfitrió permeti a l’usuari iniciar sessió mitjançant SSH, cal:

  1. Que el servidor pugui verificar la clau d’amfitrió del client. Aquesta verificació es produeix si el servidor registra en el fitxer known_hosts la clau d’amfitrió pública del client. (Aquest fitxer es troba a /etc/SSH/ SSH_known_hosts per a tot el sistema o bé a /.SSH/known_hosts per a cada usuari).
  2. Que la màquina que inicia la connexió estigui llistada en el fitxer /etc/ SSH/shosts.equiv (o la seva versió insegura /etc/hosts.equiv) i el nom d’usuari en l’estació client i en el servidor sigui el mateix. O bé que en servidor, en el directori de l’usuari que intenta iniciar sessió, hi hagi el fitxer .shosts (o la seva versió insegura .rhosts), en què apareguin la màquina client i el nom d’usuari en aquella estació.

Autenticació de clau pública

Aquest sistema es basa, com el seu nom indica, en tècniques criptogràfiques de clau pública en què el que s'encripta mitjançant la clau pública només es pot desencriptar mitjançant la clau privada associada, i en què la clau privada es pot emprar per signar els missatges per tal que el receptor pugui autenticar l'emissor.

Cal que l'usuari que vol iniciar una sessió remota al servidor construïsca una parella de claus, normalment fent ús de l'eina SSH-keygen. Aquestes claus s'emmagatzemaran en el directori /.SSH/ (en els fitxers id_rsa/id_rsa.pub, id_dsa/id_dsa.pub per a SSH2 o bé identity/identity.pub per a SSH1).

En construir la parella de claus, l’eina SSH-keygen ens permetrà definir si volem emprar una clau RSA o DSA. També serà possible protegir les claus mitjançant un mot de pas que serà necessari escriure per desbloquejar la clau i poder emprar-la. De fet, aquesta és una opció molt recomanable; només es deixaran claus sense protegir si es tracta de les claus d'amfitrió o bé si es vol iniciar sessió de manera automatitzada (mitjançant scripts) sense que sigui necessària la intervenció de l'usuari per desbloquejar les claus.

Una vegada s'han generat les claus serà necessari transportar la clau pública a l'estació en què es vol iniciar sessió i afegir-la al fitxer /.SSH/authorized_keys de l'usuari corresponent.

A partir d'aquest moment l'usuari podrà iniciar una sessió SSH sense haver d'especificar la seva contrasenya. Però si ha especificat una frase de pas per bloquejar les claus, encara serà necessari introduir-la per poder fer servir les claus.

RSA i DSA

Són dos algorismes que fan servir l’encriptació de clau pública.RSA són les inicials dels investigadors que van desenvolupar l’algorisme: Ron Rivest, Adi Shamir i Leonard Adleman.DSA són les sigles dedigital signature algorithm, és a dir, algoritme de signatura digital.

Fitxer known_hosts

Quan un client SSH estableix una connexió per primera vegada amb un amfitrió, enregistra en fitxer known_hosts la clau pública de l’estació. La propera vegada que s’estableixi una connexió es comprovarà aquesta clau pública.