Protocolo SSH - ¿Cómo Funciona?

Muchach@s, pensaba hacer esta clase más formal, pero la verdad escribiré lo que les daría en una clase presencial..., voy:

En el protocolo SSH, ¿qué es lo primero que ocurre al existir una solicitud de conexión?

¿Qué ocurre en los bastidores de una conexión segura y confiable cliente-servidor establecida por SSH?

Lo primero, es que se abre una conexión TCP entre dos máquinas. En rigor, esto no es limitativo, teoricamente pudiera ser un RS-232 o websockets, pero quedemos en un TCP (entiendo que uds. ya vieron el modelo OSI 2 millones de veces y el protocolo TCP 3 millones)

Entonces, sobre este canal, SSH divide los datos a ser transmitidos en Paquetes. 

¿Y cómo esta compuesto este paquete?

test_Image

(1) Es el tamaño del paquete.

(2) Tamaño del padding (?). Respuesta en 4.

(3) Binario de los datos

(4) El padding es el relleno que hace que la encriptación del paquete sea más fuerte. Su contenido es aleatorio.

(5) Texto útil para la verificación de autenticidad de lo transmitido.

Entonces, en el proceso de creación y transmisión de este paquete tendremos 4 sub-protocolos a SSH, que mencionaremos sin detallar escrupulosamente en ellos:

• SSH Transport Layer Protocol (SSH-TRANS)

Representa el bloque fundamental que se encarga de brindar la conexion inicial cliente-servidor al ejecutar el protocolo de registro, que básicamente el inicio de los servicios básicos de encriptación e integridad. De aquí resulta un canal único y seguro full-dúplex con el cliente.

https://tools.ietf.org/pdf/rfc4253.pdf

• SSH Authentication Protocol (SSH-AUTH)

Aquí se define el marco de trabajo en el cual se ejecutarán los mecanismos de autenticación que alberga a la autenticación de las credenciales (password, llaves DSA-RSA)

https://tools.ietf.org/pdf/rfc4252.pdf

Llaves RSA DSA

Cuando nos conectamos a un servidor SSH es necesario introducir usuario y contraseña. La transmisión de esa contraseña se hace al inicio de la conexión y en ese momento el cifrado, que aunque presente, es mas débil que cuando ya se ha autorizado la conexión, es decir, es la forma vulnerable de autenticación.

Es notablemente mejor la utilización de llaves RSA o DSA, que es un certificado digital compuesto de una parte pública y una privada. La combinación de ambas asegura que los dos extremos saben que su interlocutor es quién dice ser y que aquel para el que ha sido destinada la información será capaz de leerla. Las llaves RSA o DSA pueden asi mismo, estar protegidos por contraseña.

¿Cómo se genera una llave DSA?

Desde una consola en el servidor SSH tipee: 

ssh-keygen -t DSA

el resultado debiera ser:

Generating public/private DSA key pair.
Enter file in which to save the key (/root/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:/GHpGskU29kMUOqM6dsb/Cz4Fcwo+Q0mWLPdx4QixSI root@cbatalla
The key's randomart image is:
+---[DSA 1024]----+
|       .o..      |
|    E ...o .     |
|     .+.+ o .    |
|     o % X O     |
|    . B S @ =    |
|     . O B +     |
|      ..B =      |
|      .o.B       |
|      ..=oo      |
+----[SHA256]-----+

El nombre del archivo que nos pregunta ssh-keygen es para la parte privada. La parte pública se guardará en un archivo con el mismo nombre y la extensión .pub 

ls /root/.ssh/
id_dsa  id_dsa.pub  known_hosts
		

La contraseña solicitada será utilizada al momento de instalar la llave.

Instalación de la llave DSA en el servidor remoto

Cuando nos conectamos a un servidor SSH, este, en el directorio del usuario que solicita conexión busca el archivo ~/.ssh/authorized_keys.  Si existe, alli se encontrará la parte pública de una llave DSA. Se inicia entonces, la comprobación de que llaves tienen en común el cliente y el servidor. Si encuentra una para la que el cliente tiene la parte privada y el servidor la pública (en authorized_keys) se acepta la autenticación.

Entonces, ¿Cómo se instala la llave DSA en el servidor?

Es necesario copiar su parte pública (el .pub). Usaremos el comando ssh-copy-id

ssh-copy-id -i /root/.ssh/id_dsa user@host

 

• SSH Connection Protocol (SSH-CONN)

Aquí se definen e implementan los servicios que SSH ofrece, consola remota, transferencia de archivos etc.

https://tools.ietf.org/pdf/rfc4254.pdf

• SSH File Transfer Protocol (SSH-SFTP)

investigue por favor. :)

En el protocolo SSH existe la posibilidad de encapsular el tráfico de otros servicios, a esto se le llama 'Túneles SSH'.


EVALUACIÓN (20ptos.)

 

  • Googlee 'Túneles ssh' y con eso: Escriba un pequeño ensayo/tutorial en que cosiste los túneles ssh y para que sirve.

  • Haga ud. el mismo dibujo de la estructura de un paquete de datos SSH como el de esta clase. Tómele una foto, y envíesela a su prof.