Вы находитесь на странице: 1из 21

SSH (Secure Shell):

Telnet y FTP seguros


Juan David González Cobas
Mayo de 2005

0-0
Login remoto

El protocolo Telnet suministra una conexión TCP como servicio de


terminal virtual, cuya función más corriente es la posibilidad de
establecer sesiones (i.e., login o shell remoto). Más propiamente
debiéramos hablar de ejecución remota de programas.
El mayor peligro inherente al uso de Telnet como shell remoto es que la
autenticación (casi siempre por contraseña) está expuesta a escucha por
terceras partes, al no blindar criptográficamente la conexión TCP. Es
también fácil suplir un servicio Telnet por un troyano. Es decir, sufrimos
autenticación débil
ausencia de confidencialidad
autenticación nula del servidor
El objeto inicial del protocolo SSH (Secure Shell) es resolver estas
deficiencias, proporcionando además otros servicios adicionales.

1
Transferencia de ficheros FTP

El protocolo FTP (File Transfer Protocol) es en la práctica el medio


universal de transferencia de ficheros entre hosts, únicamente
reemplazado en parte por HTTP.
Permite la transferencia de ficheros entre un cliente y un servidor previa
autenticación del cliente. También permite sesiones anónimas para
recuperación de contenidos en servidores de ficheros.
FTP se distingue de otros servicios en que usa dos conexiones TCP para
la comunicación
control Es la conexión que transporta los comandos FTP y las respuestas
del servidor.
datos Es la portadora efectiva de los datos que se transfieren.
Esto influye en la posibilidad de tunelizar FTP (dificultándola).

2
Autenticación rhosts: rlogin/rsh/rcp

Aunque menos utilizada actualmente, existe una serie de programas muy


popular en UNIX para la ejecución de procedimientos remotos y la
transmisión de ficheros: la serie rsh/rcp/rlogin.
Su objeto era proporcionar una forma conveniente de login y transferencia
de ficheros entre hosts circunvalando la autenticación por contraseña.
Para ello, el usuario definía en su directorio $HOME un fichero .rhosts
indicando las direcciones de hosts remotos, y usuarios en ellos, en los que
confiaba para hacer login en su nombre.
Los hosts “de confianza” podían definirse también globalmente para todo
el sistema en /etc/hosts.equiv

3
Ejemplo de fichero .rhosts

#### fichero .rhosts en /home/cobas de di015.edv.uniovi.es


#### todos estos puede entrar como ’cobas’ en di015 via rlogin
#### o copiar ficheros via rcp

di011.edv.uniovi.es # cualquier usuario de di011 puede entrar


156.35.94.1 cobas # cobas en 156.35.94.1 puede entrar
156.35.31.1 cobas # cobas en 156.35.31.1 puede entrar
156.35.31.1 jdgc # jdgc en la misma maquina

No hace falta decir que este mecanismo es seriamente desaconsejable.

4
rsh y rcp

Además de rlogin (el equivalente a Telnet), se ofrecían un par de


programas para ejecución remota de procedimientos y copia remota de
ficheros. Suponiendo que yo sea cobas@di015
$ rsh cobas@156.35.171.71 cat datos.txt >> datos_aqui.txt
$ rcp cobas@156.35.171.71:datos.txt cobas@pinon:datos_alla.txt

funcionarán si di015 y mi identidad en él se encuentran registrados en el


fichero .rhosts de cobas de los sitios 156.35.171.71 y pinon,
respectivamente.

5
Secure Shell (SSH)

SSH es un reemplazo de los programas rlogin, rsh, rcp, escrito por Tatu
Ylönen (1996). Los programas ssh y scp presentan una interfaz similar
a rsh y rcp, pero envuelta en un protocolo de comunicaciones seguro y
mecanismos de autenticación variadísimos y configurables a voluntad.
Existen dos versiones del protocolo, llamadas versión 1 y versión 2. La
primera posee debilidades conocidas y se recomienda el uso exclusivo de
la segunda. Ninguna de ellas es perfecta, sin embargo.
En conjunto, SSH proporciona
Privacidad por blindaje criptográfico de la conexión TCP
Autenticación del cliente por una miríada de mecanismos
Autenticación del servidor, idem.
Protocolo de transferencia de ficheros (scp/sftp)
Creación de túneles por port forwarding
Soporte de autenticación por agentes
6
Autenticación del cliente

SSH puede autenticar autorizar el acceso al cliente mediante varios


métodos

rhosts al estilo BSD (basada en host)

rhosts con claves públicas de host

Clave pública

contraseñas (al modo clásico de Telnet, con transferencia cifrada).

desafío/respuesta

Para aportar conveniencia, SSH soporta el uso de un agente de


autenticación.

7
Autenticación por contraseña

DH Key Agreement 22

ssh (cliente) sshd (servidor)

Canal SSH criptográficamente protegido


OK

/etc/passwd

cuenta
de pepe

pepe
miclave

8
Autenticación por clave pública RSA

DH Key Agreement 22
sshd (servidor)
ssh (cliente) id_sesion
firma(id_sesion)

Canal SSH criptográficamente protegido


OK

.ssh/id_rsa .ssh/authorized_keys

cuenta
de pepe

pepe
miclave

9
Autenticación por rhosts con clave pública

156.35.69.69

DH Key Agreement 22
sshd (servidor)
ssh (cliente)
pepe,156.35.69.69,firma(id_sesion)

Canal SSH criptográficamente protegido


OK

/etc/ssh/id_rsa .ssh/known_hosts

cuenta
de pepe

pepe
miclave

10
Autenticación por dos factores

DH Key Agreement 22
sshd (servidor)
ssh (cliente) id_sesion
firma(id_sesion)

Canal SSH criptográficamente protegido


OK

.ssh/id_rsa .ssh/authorized_keys

cuenta
de pepe

pepe
miclave_para_id_dsa

11
Autenticación del servidor

En SSH, la autenticación fuerte es recíproca. Cada usuario mantiene un


registro de las claves de host con que ha “hablado” hasta el momento.
El cliente ssh emite una FUERTE advertencia (puede llegar a abortar la
sesión) si percibe un cambio en la clave de host. Esto previene
autenticación por contraseña contra un troyano (caza-claves)
ataques man-in-the-middle
No hay provisión para autenticación del servidor por dos factores.

12
Autenticación del servidor

DH Key Agreement 22
sshd (servidor)
ssh (cliente)
firma(session_id)

Canal SSH criptográficamente protegido

/etc/ssh/known_hosts

/etc/ssh/host_key

.ssh/known_hosts

pepe

13
Transferencia de ficheros

Además de un protocolo de autenticación para login remoto que mejora la


autenticación rhosts, SSH proporciona un mecanismo de transferencia
de ficheros que reemplaza al clásico FTP para transferencias no anónimas
mediante el comando scp, cuya sintaxis es semejante a la de rcp.
$ scp mi_fichero_de_aqui.txt infor24.epv.uniovi.es:nombre_alla.txt

La versión 2 de SSH incorpora un comando sftp similar al cliente FTP


clásico de línea de comandos.
Existen muchos programas sofisticados que implementan transferencia
SSH además del clásico FTP: lftp, yafc para Linux, WinSCP y la
serie de programas putty para Windows.

14
Agente SSH

Para facilitar la autenticación por dos factores durante una misma sesión,
SSH nos proporciona un agente de autenticación.
Esencialmente, se trata de un proceso que se mantiene vivo a la vez que
una sesión de un usuario, y mantiene un caché de claves privadas
descifradas.
Cada nuevo login remoto se efectúa solicitando la autenticación al agente,
sin que el usuario tenga que intervenir una vez más.
Es posible incluso que el agente autentifique remotamente, mediante un
proceso conocido como agent forwarding.

15
Agente de autenticación

DH Key Agreement 22
sshd (servidor)
ssh (cliente) id_sesion
firma(id_sesion)

Canal SSH criptográficamente protegido


OK
ssh−agent
.ssh/id_rsa

...
.ssh/authorized_keys

cuenta
de pepe
.ssh/id_rsa

pepe
miclave_para_id_dsa

16
Port forwarding

SSH permite realizar port forwarding o reenvío de puertos; en otras


palabras, tunelizar conexiones TCP a través de una sesión SSH.
Existen dos formas de port forwarding: local y remota.

forward local Ejemplo


$ ssh -L 6969:frodo.inforg.uniovi.es:netbios \
di015.edv.uniovi.es

forward remoto Otro ejemplo


$ ssh -R 7070:smtp.telefonica.net:smtp \
di015.edv.uniovi.es

17
Forward local

micasa.telefonica.net di015.edv.uniovi.es

SSHD Server
SSH clnt
Sesion SSH

6969

NetBIOS clnt

frodo.inforg.uniovi.es

139

NetBIOS server

18
Forward remoto

micasa.telefonica.net di015.edv.uniovi.es
22
SSHD Server
SSH clnt

Sesion SSH

7070

Mail clnt

smtp.telefonica.net

25

Mail server

19
Ficheros

Fichero Significado
$HOME/.ssh/id_rsa Clave privada RSA de un usuario
$HOME/.ssh/id_rsa.pub Clave pública correspondiente al mismo usuario
$HOME/.ssh/authorized_keys Lista de claves públicas e identidades que el usuario
considera autorizadas para autenticarse como él por cla-
ve pública
$HOME/.ssh/known_hosts Lista de claves públicas de hosts conocidos hasta ahora,
utilizadas para autenticación de host remoto.
/etc/ssh/ssh_known_hosts Misma lista válida para todos los usuarios del sistema.
/etc/ssh/ssh_host_key Clave del host, para autenticación del mismo ante los
usuarios que acceden a él

20

Вам также может понравиться