Post on 12-Jun-2015
description
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 determinal virtual, cuya función más corriente es la posibilidad deestablecer sesiones (i.e., login o shell remoto). Más propiamentedebiéramos hablar de ejecución remota de programas.
El mayor peligro inherente al uso de Telnet como shell remoto es que laautenticación (casi siempre por contraseña) está expuesta a escucha porterceras partes, al no blindar criptográficamente la conexión TCP. Estambién fácil suplir un servicio Telnet por un troyano. Es decir, sufrimos
autenticación débilausencia de confidencialidadautenticación nula del servidor
El objeto inicial del protocolo SSH (Secure Shell) es resolver estasdeficiencias, 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 deprogramas para ejecución remota de procedimientos y copia remota deficheros. 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 TatuYlönen (1996). Los programas ssh y scp presentan una interfaz similara rsh y rcp, pero envuelta en un protocolo de comunicaciones seguro ymecanismos de autenticación variadísimos y configurables a voluntad.
Existen dos versiones del protocolo, llamadas versión 1 y versión 2. Laprimera posee debilidades conocidas y se recomienda el uso exclusivo dela segunda. Ninguna de ellas es perfecta, sin embargo.
En conjunto, SSH proporciona
Privacidad por blindaje criptográfico de la conexión TCPAutenticación del cliente por una miríada de mecanismosAutenticación del servidor, idem.Protocolo de transferencia de ficheros (scp/sftp)Creación de túneles por port forwarding
Soporte de autenticación por agentes6
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
ssh (cliente) sshd (servidor)
22DH Key Agreement
cuenta
de pepe
pepe
miclave
OK
/etc/passwd
Canal SSH criptográficamente protegido
8
Autenticación por clave pública RSA
ssh (cliente)
22DH Key Agreement
cuenta
de pepe
pepe
miclave
OK
Canal SSH criptográficamente protegido
.ssh/id_rsa
sshd (servidor)
firma(id_sesion)id_sesion
.ssh/authorized_keys
9
Autenticación por rhosts con clave pública
ssh (cliente)
22DH Key Agreement
cuenta
de pepe
pepe
miclave
OK
Canal SSH criptográficamente protegido
/etc/ssh/id_rsa
sshd (servidor)
156.35.69.69
pepe,156.35.69.69,firma(id_sesion)
.ssh/known_hosts
10
Autenticación por dos factores
ssh (cliente)
22DH Key Agreement
cuenta
de pepe
pepe
miclave_para_id_dsa
OK
Canal SSH criptográficamente protegido
.ssh/id_rsa
sshd (servidor)
firma(id_sesion)id_sesion
.ssh/authorized_keys
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
ssh (cliente)
22DH Key Agreement
pepe
Canal SSH criptográficamente protegido
sshd (servidor)
.ssh/known_hosts
/etc/ssh/known_hosts
/etc/ssh/host_key
firma(session_id)
13
Transferencia de ficheros
Además de un protocolo de autenticación para login remoto que mejora laautenticación rhosts, SSH proporciona un mecanismo de transferenciade ficheros que reemplaza al clásico FTP para transferencias no anónimasmediante 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
ssh (cliente)
22DH Key Agreement
cuenta
de pepe
pepe
miclave_para_id_dsa
OK
Canal SSH criptográficamente protegido
sshd (servidor)
firma(id_sesion)id_sesion
.ssh/authorized_keys
.ssh/id_rsa
ssh−agent
.ssh/id_rsa
...
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
NetBIOS server
frodo.inforg.uniovi.es
di015.edv.uniovi.es
Sesion SSH
NetBIOS clnt
SSH clntSSHD Server
6969
139
micasa.telefonica.net
18
Forward remoto
7070
Mail clnt
di015.edv.uniovi.es
Sesion SSH
SSH clntSSHD Server
micasa.telefonica.net
smtp.telefonica.net
25
Mail server
22
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