openssh

36
Dani Gutiérrez Porset [email protected] Protocolo ssh y openssh

Transcript of openssh

Page 1: openssh

Dani Gutiérrez [email protected]

Protocolo sshy

openssh

Page 2: openssh

2

Índice● Introducción

● Arquitectura del protocolo

● Usos

● Autenticación de cliente, de servidor. Agente de autenticación

● Otras funcionalidades

● Comandos varios. Ficheros y directorios

● Software

● Información adicional

● Licencia de uso

Page 3: openssh

3

Introducción● ssh = secure shell

● Establece canales seguros (confidencialidad, autenticidad, integridad) para distintos usos (shell remota, túneles TCP, transmisión de ficheros,...).

● Basado en claves públicas con comprobación manual (no en certificados X.509 y CAs).

● Puerto por defecto: 22

● 2 versiones del protocolo:

– v1:1995. RSA, no DSA. Obsoleto.

– v2: 1998. RSA y DSA. Mejor para confidencialidad (AES, 3DES, Blowfish, CAST128, ArcFour) e Integridad (hmac-md5, hmac-sha1).

Page 4: openssh

4

Introducción● Implementaciones principales del servidor:

– OpenSSH: versión libre, principalmente desarrollada por el proyecto OpenBSD

– SSH Secure Shell (“SSH2”; no confundir con SSH-2, la versión 2 del protocolo)

● Diferencias entre implementaciones:

– Licencia

– Sistemas operativos sobre los que corre

– Funcionalidades

– Formatos de fichero ej. OpenSSH y SSH2 para las claves del protocolo SSH-2.

Page 5: openssh

5

Arquitectura del protocolo● rfc4251

● La arquitectura tiene tres niveles:

Transporte

Conexión

Autenticación

Page 6: openssh

6

Arquitectura del protocolo● Nivel de Transporte (rfc4253): encriptación,

integridad y (opcionalmente) compresión de la comunicación.

– Fase inicial:● Autenticación del servidor● Gestión de intercambio de clave inicial● Negociación de algoritmos:

– Intercambio de clave (Diffie-Hellman)– Autenticación del servidor (rsa, dsa)– Encriptación simétrica– MAC– Compresión

– Renovaciones de clave de sesión (tiempo o volumen de datos)

Page 7: openssh

7

Arquitectura del protocolo● Nivel de Autenticación (rfc4252): autentica al

cliente en base a distintos métodos:

– Contraseña (“password”)

– Clave pública (“publickey”)

– En base a equipo (“hostbased”)

– Interactiva por teclado (“keyboard-interactive”): el servidor solicita datos al usuario, quien responde a través del teclado.

● Permite extender la autenticación sin modificar programas

● Ej: challenge response, OTP=one-time password (ej. S/Key, SecurID)

– “gssapi”, “gssapi-keyex”, “gssapi-with-mic”: kerberos, NTLM,...

Page 8: openssh

8

Arquitectura del protocolo● Nivel de Conexión (rfc4254): gestión (apertura,

multiplexación,...) de distintos tipos de canales:

– "session": terminal interactivo, ejecución remota, subsistema (sftp, scp).

● Solicitudes: pty-req, x11-req, env, shell, exec, subsystem, window-change, xon-xoff, signal, exit-status, exit-signal

– "x11"

– "forwarded-tcpip": reenvío en sentido cliente-srv

– "direct-tcpip": reenvío en sentido srv-cliente

Page 9: openssh

9

Arquitectura del protocolo● Capas de transporte y autenticación:

Page 10: openssh

10

Arquitectura del protocolo

-L 10000:localhost:80 -L 10001:192.168.2.9:110

-L 9000:localhost:80 -R 10001:192.168.1.10:110

● Capa de conexión

Page 11: openssh

11

Usos● Shell remota (sustituto del telnet, rlogin, rsh)

● Ejecución de comandos remotos (sustituto del rexec). Reserva de pseudoterminal.

● Copia de ficheros por red: scp, sftp (sustituto del ftp,rcp), rsync

● Montaje de sistemas de ficheros: sshfs

● Proxy o intermediario:

– Reenvío de las X.

– Túneles tcp (nivel 4) directos e inversos.

– VPNs (túneles de nivel 2 y 3).

– Proxy SOCKS.

– Reenvío de agente de autenticación.

Page 12: openssh

12

Usos: Reenvío de las X● Al reenviarlas, en el servidor ssh se lanza el cliente

X que es presentado en el cliente ssh (servidor X).

● Opciones:

– Habilitar (-X) o deshabilitar (-x) el reenvío de las X. Opción X11Forwarding.

– -Y / ForwardX11Trusted: antigua.

● Peligro: si en el servidor ssh alguien (root) accede al fichero .Xauthority del usuario, podría acceder al escritorio del cliente ssh y ej. capturar teclas.

● Detalles en apartado 9.3 de http://www.unix.org.ua/orelly/networking_2ndEd/ssh/index.htm

Page 13: openssh

13

Usos: Túneles TCP directos● Por cada túnel directo se abre un puerto en el

servidor ssh de modo que si un equipo se conecta a dicho puerto, se establece una conexión a otro puerto de una máquina accesible desde dicho servidor ssh, incluido el mismo servidor ssh.

● Se hacen túneles directos para conectar:

– Desde el cliente o desde equipos con acceso a éste

– Al servidor o a equipos con acceso desde éste

● Posibles utilidades:

– Saltarse firewalls que no permiten acceder a otros servicios

– Encriptación de protocolos no seguros.

● Ej: ssh usr@srv_ssh -L 11020:srv_pop3:110 -L 11025:srv_smtp:25

Page 14: openssh

14

Usos: Túneles TCP directos

Proceso

Proceso

Clientessh

Servidorssh

ssh usrB@B -p p1 -L p

3:localhost:p

4 -L p

2:D:p

5 [-g]

A B

C Dp

5

p1

p2

p3

p4

Page 15: openssh

15

Usos: Túneles TCP inversos● Por cada túnel inverso se abre un puerto en el

servidor ssh de modo que si un equipo se conecta a dicho puerto, se establece una conexión a otro puerto de una máquina accesible desde el cliente ssh, incluido el mismo cliente ssh.

● Se hacen túneles inversos para conectar:

– Desde el servidor o desde equipos con acceso a éste

– Al cliente o a equipos con acceso desde éste

● Posibles utilidades:

– Acceso a máquinas que no tengan IP fija

– Encriptación de protocolos no seguros

● Ej: ssh usr@srv_ssh -R 2200:localhost:22 -R 11000:srv_pop3:110

Page 16: openssh

16

Usos: Túneles TCP inversos

Proceso

Clientessh

Servidorssh

ssh usrB@B -p p1 -R p

3:localhost:p

4 -R p

2:C:p

5 [-g]

A B

C Dp

5

p1

p2

p3

Proceso

p4

Page 17: openssh

17

Usos: Túneles TCP● Se pueden establecer varios túneles directos e

inversos en una misma conexión

● Los protocolos a tunelizar han de ir sobre tcp (no udp). Ej. sí pop3, no dns.

● Conexión desde otros equipos. Opciones:

– Túneles directos: en cliente, -g o GatewayPorts=yes

– Túneles inversos: en servidor, GatewayPorts a yes o clientspecified.

● En ambos casos de túneles directo e inverso se puede especificar por cuál de las interfaces IP del equipo destino se va a habilitar una escucha:

-L [bind_address:]port1:host:port2

Page 18: openssh

18

Usos: VPNs● Se crea un enlace punto a punto entre el cliente y

el servidor (mediante tun), a través del cual se pueden enrutar las comunicaciones entre las dos redes.

● Opciones:

– En cliente: -w, Tunnel, TunnelDevice

– En servidor: PermitTunnel indica el tipo permitido: punto a punto (nivel 3), ethernet (nivel 2) o ambos

● No es una VPN de mucha calidad (sobrecarga, latencia). Mejor emplear otras soluciones.

● Para entrar a una máquina remota suele haber más disponibilidad con ssh (ej. openssh, putty.exe) que con un cliente VPN (openssh, openvpn, ipsec,...).

Page 19: openssh

19

Usos: proxy SOCKS● Permite que otros equipos se conecten a un cliente

ssh que hace de SOCKS proxy. Ej:

ssh -D 1080 srv_ssh

Page 20: openssh

20

Autenticación de cliente● Tipos de autenticaciones. Las principales son:

– PubkeyAuthentication: basada en claves públicas y privadas. Permite agente de autenticación.

– PasswordAuthentication. Tiene interface a PAM.

– HostbasedAuthentication: peligro de spoofing● La clave pública del host cliente ha de ponerse

previamente en uno de los fichero de hosts conocidos.● (RSAAuthentication y RHostRSAAuthentication no

aplican en la versión 2)

– ChallengeResponseAuthentication (corresponde al “keyboard-interactive” del protocolo ssh). Tiene interface a PAM.

● En el servidor se puede indicar una lista de cuáles se habilitan o no.

Page 21: openssh

21

Autenticación de cliente● Claves públicas/privadas:

– Host. La clave privada nunca está encriptada.

– Usuario:● Se pueden tener varias claves para entrar a distintas

máquinas (si una está comprometida, el resto no).● Su clave privada puede estar o no encriptada con una

contraseña. Si no lo está:– Útil para conexiones no interactivas, ej. cron– Peligro: si alguien tiene el fichero, puede entrar a otros

equipos sin necesidad de saber una contraseña.– Solución: limitar los comandos ejecutables en

authorized_keys, ej.command="/usr/local/backup.sh", from="cliente" ssh-dss ...

Page 22: openssh

22

Autenticación de servidor● Autenticación antispoofing del servidor (en el

cliente): basada en la clave pública del servidor y su huella:

– ¿Se ha conectado alguna vez al servidor S?● No: se muestra la huella de la clave pública del

servidor. Comprobación “humana”.● Sí: el fichero known_hosts guarda correspondencias de

equipos (nombres DNS y/o IPs), puertos y sus claves públicas. Se detecta si ha habido cambio.

– Otros métodos para ver la huella de la clave pública:● A partir del fichero de la clave pública:

ssh-keygen -l -f fich_clave_publica● Con registros DNS de tipo SSHFP:

ssh-keygen -r host

Page 23: openssh

23

Autenticación de servidor● Opciones de interés (cliente):

– StrictHostKeyChecking: formas de añadir nuevos servidores a known_hosts (sí/no/preguntar)

– VerifyHostKeyDNS: chequeo con registros DNS SSHFP.

– CheckHostIP: además de la clave se verifica la IP

Page 24: openssh

24

Agente de autenticación● En el lado cliente, válido sólo para autenticación

por clave pública.

● Es un proceso residente en memoria que gestiona las conexiones ssh (al llamar a ssh hay una conexión con éste), almacenando las claves privadas que se le van añadiendo con ssh-add.

● Usos:

– Sólo es necesario introducir la contraseña de la clave privada la primera vez (cuando se añade), y en el resto de conexiones ssh no.

– El servidor se puede configurar para permitir un reenvío del agente de autenticación hacia otras conexiones ssh, de modo que siempre se haga la validación contra el cliente inicial.

Page 25: openssh

25

Agente de autenticación● Para la comunicación local con el agente se emplea

un socket unix y las variables de entorno SSH_AUTH_SOCK y SSH_AGENT_PID, siendo el uso de dos formas posibles:

– Trabajar desde procesos hijos del ssh-agent:ssh-agent xterm &

– Emplear eval:eval $(ssh-agent)

● Problema de seguridad "agent hijacking": si el usuario root establece SSH_AUTH_SOCK al socket de otro usuario podría entrar a sistemas remotos.

● Opciones de reenvío: ForwardAgent, permitir (-A) o denegar (-a) el reenvío del agente.

Page 26: openssh

26

Otras funcionalidades● Escucha por múltiples puertos (en servidor)

● Compresión: -C, Compression

● Pseudo-terminal: -t. Necesario para:

– lanzar programas que requieran pty, ej. emacs, vi, ncurses

– sentencias de escape

● Uso de proxy: ProxyCommand. Especifica un comando de conexión de modo que se puede indicar el establecimiento de una conexión vía proxy.

– Utilidad, ej: si en una red sólo hay habilitada una conexión hacia el exterior vía proxy

Page 27: openssh

27

Otras funcionalidades●Multiplexación de sesiones

– Múltiples conexiones interactivas en una misma sesión ssh.

– Conexiones establecidas por socket unix. Ventajas:● Más rápido: sin tener que establecer la autenticación

inicial e intercambio de claves.● Menos recursos: sin necesidad de abrir otra conexión

tcp/ip

– La lógica está en el lado cliente (desde v4) y el servidor puede ser más antiguo

– Opciones:● ControlMaster y ControlPath (path del socket unix)● -M (activación), -O (comandos), -S (path del socket)

Page 28: openssh

28

Otras funcionalidades● Modos de ejecución:

– -f: queda en background tras pedir la contraseña y ejecutar un comando remoto (obligatorio). Ej. para sólo redirigir túneles sin lanzar shell. Implica -n.

– -n: impide leer de stdin (redirección a /dev/null)

– -N: no ejecutar ningún comando ni lanzar shell. Si se usa -f es necesario. Si no útil ej. para redirigir túneles y mantener ventana abierta.

Page 29: openssh

29

Comandos varios● Más empleados:

– sshd: servidor

– ssh: cliente ssh

– scp: copia ficheros entre máquinas

– ssh-keygen: gestión de claves

– ssh-agent: agente ssh

– ssh-add: añadir clave a agente ssh

Page 30: openssh

30

Comandos varios● Menos empleados:

– ssh-keyscan: se conecta a servidores para obtener las claves públicas dsa o rsa. Si el fichero ssh_known_hosts se construye a partir de este comando y sin verificación, riesgo de ataque "man in the middle"

– sftp: semejante a cliente ftp encriptado a través de ssh

– ssh-copy-id: se conecta a un equipo remoto por ssh e instala la clave pública en el destino

– ssh-argv0: obvia el comando ssh para conexiones a máquinas por ssh

– slogin: softlink a /usr/bin/ssh

Page 31: openssh

31

Ficheros y Directorios● /etc/ssh/ contiene:

– Configuración del cliente (ssh_config) y del servidor (sshd_config)

– Claves privada y pública del servidor: ssh_host_rsa_key,ssh_host_dsa_key,ssh_host_rsa_key.pub,ssh_host_dsa_key.pub

– Equipos (nombre, IP) y claves públicas desde los que se quiere conectar con autenticación Host based: ssh_known_hosts.

– Comandos que se ejecutan tras la conexión: sshrc

● Otros para autenticación por host:● /etc/hosts.equiv, /etc/ssh/shosts.equiv● Para TCP wrappers: /etc/hosts.allow, /etc/hosts.deny

Page 32: openssh

32

Ficheros y Directorios● ~/.ssh/ contiene información asociada al usuario:

– Configuración del usuario: config

– Claves privada y pública del usuario: id_dsa, id_rsa, id_dsa.pub, id_rsa.pub:

– Claves públicas de otros equipos autorizados a entrar: authorized_keys

– Equipos (nombre, IP), puerto y claves públicas a los que se ha conectado previamente: known_hosts. La opción HashKnownHosts hace que estén encriptados.

– Comandos que se ejecutan tras la conexión: rc

– Variables de entorno: environment

● Otros para autenticación por host: ~/.rhosts, ~/.shosts

Page 33: openssh

33

Software● Clientes ssh: http://en.wikipedia.org/wiki/Comparison_of_SSH_clients

● Paquetes ubuntu(apt-cache search ssh | grep -i ssh)

– Básicos:● openssh-client - Secure shell client, an rlogin/rsh/rcp replacement

● openssh-server - Secure shell server, an rshd replacement

● ssh - Secure shell client and server (transitional package)

– Interesantes:● autossh - Automatically restart SSH sessions and tunnels

● sshfs - filesystem client based on SSH File Transfer Protocol

– Password agents: para Xwindow, gnome, no interactivos,...(apt-cache search ssh | grep -i ssh | grep pass)

– Librerías para distintos lenguajes: C, perl, ruby, python...

Page 34: openssh

34

Software● Otros paquetes ubuntu:

– clusterssh - administer multiple ssh or rsh shells simultaneously– denyhosts - an utility to help sys admins thwart ssh hackers– dpsyco-ssh - Automate administration of access via ssh– dropbear - lightweight SSH2 server and client– gstm - Gnome SSH Tunnel Manager– jta - Java telnet/ssh applet– kdessh - ssh frontend for KDE– keychain - key manager for OpenSSH– kssh - KDE front end to ssh– libpam-ssh - enable SSO behavior for ssh and pam– lsh-...– putty... - Telnet/SSH client for X– python-twisted-conch - The Twisted SSH Implementation– rssh - Restricted shell allowing only scp, sftp, cvs, rsync and/or rdist– scanssh - get SSH server versions for an entire network– secpanel - A graphical user interface for SSH and SCP– ssh-krb5 - Secure shell client and server (transitional package)– sshguard– sshm - A command-line tool to manage your ssh servers– zssh - interactive file transfers over ssh

Page 35: openssh

35

Información adicional● openssh: http://www.openssh.org

● http://www.unix.org.ua/orelly/networking_2ndEd/ssh/index.htm

● Grupo de trabajo del IETF: http://www.ietf.org/html.charters/OLD/secsh-charter.html

● http://www.linuxjournal.com/article/9566

Page 36: openssh

36

Licencia de uso

http://creativecommons.org/licenses/by-sa/3.0/