Seguridad Diseño y Administración de Sistemas y Redes http://gsyc.es/docencia Curso 2007–2008 1 Problemas Privacidad o secreto. Mantener la información fuera de las manos de usuarios no autorizados Autenticación. Determinar de la identidad del interlocutor No repudio. Poder demostrar quien es el autor de un mensaje Control de integridad. Garantizar que un mensaje no ha sido modificado. c 2008 GSyC 2 Soluciones Nivel fı́sico: Proteger el cable de escuchas Nivel de enlace: Cifrar al enviar y descifrar al recibir Nivel de red: IPsec, cifrado en IPv6. Cortafuegos Nivel de transporte: Cifrado de conexiones. SSL c 2008 GSyC 3 Principios criptográficos Criptologı́a = criptografı́a (inventar códigos) + criptoanálisis (atacarlos) Principio de Kerckhoff: Los algoritmos deben ser públicos; sólo las claves son secretas Los mensajes cifrados deben incluir redundancia. Esto evita que una modificación de los mismos resulte en otro mensaje válido. El necesario controlar la frescura de los mensajes recibidos, para evitar ataques con mensajes antiguos. c 2008 GSyC 4 Criptografı́a de Clave Secreta La misma clave que cifra, descifra Muchos algoritmos: DES (obsoleto), triple DES, AES (o Rijndael. Oficial gobierno EEUU desde 2001), twofish, etc etc Problemas • Haces falta muchas claves: una por cada pareja de posibles comunicantes • ¿Cómo transmitir las claves de forma segura? c 2008 GSyC Criptografı́a de clave pública 5 Criptografı́a de clave pública Año 1976, Diffie y Hellman. Clave de cifrado o pública E y de descifrado o privada D distintas (asimétricas) D(E(P )) = P Muy dificil romper el sistema (p.e. obtener D) teniendo E. La clave privada sirve para descifrar. Debe mantenerse en secreto La clave pública sirve para cifrar. Puede conocerla todo el mundo (lo importante es que se conozca la clave correcta) Conociendo la clave pública de alguien, podemos cifrar un mensaje que solo él, con su clave privada, podrá descifrar c 2008 GSyC Seguridad Criptografı́a de clave pública (cont.) 6 RSA De Rivest, Shamir y Adleman. Los algoritmos de clave pública son mucho más lentos que los de clave secreta (100 a 1000 veces). Por eso se suelen usar sólo para el intercambio de claves simétricas de sesión. c 2008 GSyC Seguridad Criptografı́a de clave pública (cont.) 7 Autenticación con clave pública 1,2: A obtiene la clave pública de B 3: A envı́a su remite y un reto cifrados con la clave de B 4,5: B obtiene la clave pública de A 6: B cifra, con la clave de A: el reto de A, un reto nuevo y una clave simétrica 7: A envı́a el reto de B con la clave simétrica, que se empleará en la sesión c 2008 GSyC Seguridad Criptografı́a de clave pública (cont.) 8 Firmas digitales Algoritmos como RSA tienen la propiedad de que también puede usarse la clave privada para cifrar y la pública para descifrar E(D(P )) = P A partir de un mensaje, se genera un código hash El código se encripta con la clave privada y se transmite junto con el mensaje El receptor • Descifra el mensaje con la clave pública del emisor • Genera de nuevo el código hash • Si el código hash de la firma y del mensaje coinciden, el mensaje solo puedo enviarlo el origen c 2008 GSyC Seguridad Criptografı́a de clave pública (cont.) c 2008 GSyC 9 Seguridad open ssh 10 open ssh PGP: Pretty Good Privacy. Software criptográfico creado por Phil Zimmermann. Base de la norma Open PGP. GPG: GNU Privacy Guard. Herramienta para cifrado y firmas digitales, que reemplaza a PGP Desde Debian Woody (2002) se usa OpenSSH v2 Se puede emplear el algoritmo RSA o DSA Digital Signature Algorithm, año 1991 c 2008 GSyC Seguridad open ssh (cont.) 11 Además de para abrir una sesión en una máquina remota, ssh permite la ejecución de una única orden en la máquina remota ssh jperez@pantuflo ls Ejecuta ls en la máquina remota. Muestra en la máquina local el stdout. ssh jperez@pantuflo ’echo hola > /tmp/prueba’ Ejecuta en pantuflo echo hola > /tmp/prueba c 2008 GSyC Seguridad open ssh (cont.) 12 ssh jperez@pantuflo "echo $HOSTNAME > /tmp/prueba" Al poner comilla doble, la variable se expande en la máquina local ssh jperez@pantuflo echo $HOSTNAME > /tmp/prueba Al no poner comilla, la variable se expande en la máquina local. El resultado se redirige al fichero /tmp/prueba de la máquina local ssh jperez@pantuflo ’echo $HOSTNAME > /tmp/prueba’ Al poner comilla simple y recta, la variable se expande en la máquina remota c 2008 GSyC Seguridad open ssh (cont.) 13 Para evitar teclear contraseña en cada ssh, scp, sshfs, etc, podemos autentificarnos con criptografı́a asimétrica Generación de claves Se generan con ssh-keygen Se puede añadir una pass phrase. Es una contraseña adicional, tradicional. Equivalente a la llave del armario de las llaves c 2008 GSyC Seguridad open ssh (cont.) 14 Un usuario genera sus claves ejecutando en su home la orden ssh-keygen rsa: generar las claves: ssh-keygen -t rsa fichero clave privada: id_rsa fichero clave pública: id_rsa.pub dsa: generar las claves: ssh-keygen -t dsa fichero clave privada: id_dsa fichero clave publica: id_dsa.pub c 2008 GSyC Seguridad open ssh (cont.) 15 Para poder entrar en máquina remota sin emplear contraseña, añado mi clave pública al fichero $HOME/.ssh/authorized_keys de la máquina remota (o lo creo si no existe) Es necesario que el directorio ~/.ssh (local y remoto): Tenga el dueño y el grupo del usuario Tenga permisos 700 Contenga todos sus ficheros con permisos 600 Es necesario que en mi home solo yo pueda escribir c 2008 GSyC Seguridad open ssh (cont.) 16 ssh-agent La manera habitual de autentificarse es mediante el demonio ssh-agent ssh-agent contestará por nosotros, gestionando retos y repuestas cifrados ssh-agent tiene que ser el padre de nuestra shell, o nuestra sesión x • Las distribuciones Linux con X Windows suelen tenerlo instalado • Si no está funcinando (como en ubuntu server) exec ssh-agent /bin/bash Esto hace que nuestra shell actual sea reemplazada por ssh-agent, quien a su vez creará una shell hija suya c 2008 GSyC Seguridad open ssh (cont.) ssh-add 17 añade una identidad a ssh-agent ssh-add -l indica las identidades manejadas por el ssh-agent En ocasiones, por ejemplo si no empleamos pass phrase, el ssh-agent no es necesario Depuración En el cliente ssh -v o ssh -vv o -vvv en el servidor, consultar /var/log/auth.log c 2008 GSyC Seguridad iptables 18 iptables El nucleo de linux puede trabajar como un cortafuegos: manipula los datagramas (paquetes de red), para permitir algunos y descartar otros En rigor el nombre de la herramienta es Netfilter, aunque habitualmente se le llama iptables (que es la parte de Netfilter que ofrece el interfaz con el usuario) Para manejar los datagramas se usan reglas: IF condición THEN acción Las reglas se agrupan en cadenas: una regla tras otra c 2008 GSyC Seguridad iptables (cont.) 19 Hay tres cadenas principales: INPUT la recorren los paquetes que entran en la máquina con destino a la propia máquina OUTPUT la recorren los que salen (procedentes de la propia máquina) FORWARD la recorren los que atraviesan la máquina El administrador puede añadir subcadenas a cualquier cadena. P.e. MI CADENA. Desde las cadenas principales se llama a las subcadenas c 2008 GSyC Seguridad iptables (cont.) 20 SI un paquete cumple cierta condición ENTONCES hacer algo con el paquete: - DROP. descartarlo allı́ mismo - ACCEPT. permitirle que siga - Enviarla a otra cadena (subcadena) - ... Si el paquete no cumple la condición, sigue avanzando por la cadena Una vez recorrida una subcadena, el flujo vuelve a la cadena principal desde donde fue llamada Una vez recorrida una cadena principal, se aplica la polı́tica por defecto de esa cadena: ACCEPT o DROP c 2008 GSyC Seguridad iptables (cont.) 21 Camino de un datagrama por el núcleo Soy una máquina con Linux. El tratamiendo de un datagrama depende de si soy un router o no ¿Cómo se que si soy un router? Consultando el valor de /proc/sys/net/ipv4/ip_forward ¿Cómo hacer que me convierta en router? echo 1 > /proc/sys/net/ipv4/ip_forward Esto no es persistente, suele incluirse en un script de arranque Previamente debe haber tablas de encaminamiento, creadas a mano o mediante algoritmos de encaminamiento Decidir el encaminamiento: consultar mi tabla de encaminamiento y averiguar por cuál de mis interfaces debo enviar el datagrama Encaminar: enviar el datagrama por el interfaz adecuado c 2008 GSyC Seguridad iptables (cont.) 22 Soy una máquina conectada a la red. No tengo iptables Recibo un datagrama Si es para mı́, me lo quedo Si no es para mı́ - Si soy un router, decido su encaminamiento y lo encamino - Si no soy un router, tiro el paquete Envı́o un datagrama - Decido su encaminamiento y lo encamino c 2008 GSyC Seguridad iptables (cont.) c 2008 GSyC 23 Seguridad iptables (cont.) 24 Soy una máquina conectada a la red, tengo iptables Recibo un datagrama Si es para mı́, - Lo envio a la cadena INPUT. Si la supera, me lo quedo Si no es para mı́ - Si soy un router, decido su encaminamiento, lo paso por la cadena FORWARD, y si la supera, lo encamino - Si no soy un router lo tiro Envı́o un datagrama - Decido su encaminamiento, lo paso en la cadena OUTPUT y si la supera, lo encamino c 2008 GSyC Seguridad iptables (cont.) c 2008 GSyC 25 Seguridad uso de iptables 26 uso de iptables La manipulación de reglas se hace mediante opciones de la orden iptables Las reglas se borran al reiniciar la máquina. Ası́ que hay que cargarlas en un script en el arranque. Es conveniente activarlo antes de activar los interfaces de red La mayorı́a de las opciones pueden especificarse de dos formas alternativas, equivalentes 1. Con un guión y letra de opción 2. Con dos guiones y el nombre de la opción iptables -A INPUT -p tcp -s 193.186.21.6 -j DROP iptables --append INPUT --protocol tcp --source 193.186.21.6 -jump DROP c 2008 GSyC Seguridad uso de iptables (cont.) 27 Ver las reglas -L --list Listar las reglas de una(s) cadena(s) -n --numeric Mostrar las direcciones como números, sin intentar traducirlas en nombres iptables -nL FORWARD Listar la cadena FORWARD iptables -nL Listar todas las cadenas c 2008 GSyC Seguridad uso de iptables (cont.) 28 Poner y quitar reglas -A --append Añadir una regla a una cadena -F --flush Borrar todas las reglas iptables --flush INPUT Borra las reglas de la cadena input iptables --flush Borra las reglas de todas las cadenas Hay opciones para borrar reglas sueltas y para reordenar las reglas Pero ya que hay que cargar las reglas mediante un script, suele ser más práctico que el script borre todo y luego inserte las reglas adecuadas en el orden adecuado c 2008 GSyC Seguridad uso de iptables (cont.) 29 Especificar paquetes -s --source Dirección IP origen -d --destination Dirección IP destino -i --in-interface Interfaz de entrada -o --out-interface Interfaz de salida ! negación -s 193.147.71.1 Paquete proveniente de 193.147.71.1 -d ! localhost Paquete no destinado a localhost -i lo Paquete que entra por el interfaz lo -o ! eth0 Paquete que no sale por eth0 c 2008 GSyC Seguridad uso de iptables (cont.) -p --protocol --sport --source-port 30 Protocolo del paquete Puerto de origen --dport --detination-port Puerto de destino No basta decir el puerto 80. ¿El puerto 80 TCP? ¿El puerto 80 UDP? La opción --protocol debe preceder a --dport/--sport -p tcp Paquete de protocolo TCP --dport 80 Paquete destinado al puerto 80 --sport 1:1023 Paquete con origen en los puertos del 1 al 1023 --dport 1024: Paquete con destino al puerto 1024 o superior --sport :3000 Paquete con origen en el puerto 3000 o inferior El fichero /etc/services describe los well-known port numbers c 2008 GSyC Seguridad uso de iptables (cont.) 31 Destino de un paquete -j --jump -j -j -j -j DROP REJECT ACCEPT RETURN -j MI_CADENA c 2008 GSyC Enviar el paquete a DROP (descartarlo, sin más) Rechazar el paquete y enviar un error al origen Aceptar el paquete. No se evalúan más reglas El paquete abandona la cadena actual -Si está en una subcadena, vuelve a la cadena principal -Si está en la cadena principal se le aplica la polı́tica por defecto Enviar el paquete a MI_CADENA Seguridad uso de iptables (cont.) 32 Polı́tica por defecto Por una cadena pasan muchos datagramas Los que encajan en una regla de destino DROP o REJECT, serán eliminados Los que encajan en una regla ACCEPT, superarán la cadena ¿Y los que no sea explı́citamente aceptados ni explı́citamente rechazados? Se hará con ellos lo que indique la polı́tica por defecto Las subcadenas no tienen polı́tica por defecto -P --policy Fija la polı́tica por defecto de la cadena iptables --policy INPUT DROP iptables --policy FORWARD ACCEPT c 2008 GSyC Seguridad uso de iptables (cont.) 33 Añadir subcadenas -N --new-chain Crea una nueva cadena iptables --new_chain MI_CADENA Enlaces Para más información, googlear : badopi. Aprendiando a usar iptables Pello Altadill. iptables manual práctico linux 2.4 filtrado de paquetes COMO c 2008 GSyC Seguridad uso de iptables (cont.) 34 Ejemplos iptables --flush iptables --append INPUT --protocol icmp --source 127.0.0.1 --jump DROP root@mazinger:~# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source DROP icmp -- 127.0.0.1 destination 0.0.0.0/0 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination c 2008 GSyC Seguridad uso de iptables (cont.) 35 iptables --append INPUT --protocol icmp --source 192.168.1.15 \ --jump DROP iptables --append INPUT --protocl tcp --source 192.168.1.15 --dport 21 -jump DROP \ iptables --append INPUT --in-interface lo --source 127.0.0.1 \ --jump ACCEPT c 2008 GSyC Seguridad