openssh

Post on 24-Jun-2015

1.582 views 1 download

Transcript of openssh

Dani Gutiérrez Porsetjdanitxu@gmail.com

Protocolo sshy

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

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).

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.

5

Arquitectura del protocolo● rfc4251

● La arquitectura tiene tres niveles:

Transporte

Conexión

Autenticación

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)

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,...

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

9

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

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

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.

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

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

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

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

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

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

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,...).

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

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.

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 ...

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

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

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.

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.

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

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)

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.

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

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

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

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

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...

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

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

36

Licencia de uso

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