Seguridad de Clusters Linux Juan Luis Chaves Sanabria Centro Nacional de Cálculo Científico (CeCalCULA) Latin American School in HPC on Linux Clusters Mérida, Venezuela. Octubre 27 Noviembre 07 2003 Principios de seguridad de la información Confidencialidad: La información sólo deben ser conocida y accedida por quienes estén debidamente autorizados. Integridad: La información sólo puede ser modificada y/o eliminada por quienes estén autorizados para ello. Esto incluye: Autenticidad No repudiación Auditoría Disponibilidad: Los sistemas que albergan datos e información deben garantizar que estos podrán accederse cuando así se requiera por quienes tienen derecho a ello
Buenas prácticas en seguridad de la información No existen recetas para garantizar la absoluta seguridad de un sistema. Existen unas recomendaciones básicas de amplia aplicabilidad: Compartamentalización (defensa en profundidad) Mínimo privilegio Desactivar todas las aplicaciones, puertos y servicios que no se utilicen, ni necesiten Eliminar cuentas preconfiguradas o cambiarles el password Buenas prácticas en seguridad de la información (2) Existen unas recomendaciones básicas de amplia aplicabilidad (2): Mantener servicios y sistemas actualizados: en cuanto a parches y bug fixes. Definir y emplear puntos y procedimientos de acceso (mecanismos de autenticación, autorización, etc.) Normar y controlar el acceso a las instalaciones físicas de los sistemas de computación Implementar sistemas de respaldo (y verificar periódicamente su buen funcionamiento).
Buenas prácticas en seguridad de la información (3) Existen unas recomendaciones básicas de amplia aplicabilidad (3): Educar a los empleados sobre los riesgos de la ingeniería social. Preparar a los usuarios para protegerse de potenciales fallas de seguridad. Cifrar y/o proteger con passwords los datos e información estratégica de la organización y sus usuarios. Desarrollar y escribir una política de seguridad para la organización. Políticas de Seguridad de la Información Son las reglas, normas y procedimientos que regulan la forma en que una organización previene, protege y maneja los riesgos de daño sobre la información almacenada en sus sistemas de computación. Unas buenas políticas de seguridad de la información deben tener como objetivo garantizar los principios de seguridad de la información dentro de los sistemas de la organización El éxito de un política de seguridad depende de sus objetivos, no de las herramientas utilizadas para implantar la política. Ésta debe dar respuestas para la defensa, la detección y la prevención de ataques e incluir mecanismos de recuperación ante incidentes de seguridad.
Componentes de una política de seguridad de la información (RFC1244) Una política de intimidad (confidencialidad) Una política de autenticación Una política de acceso Una política de contabilidad Planes para satisfacer las expectativas de disponibilidad de los recursos del sistema Una política de mantenimiento para la red y los sistemas de la organización Directrices para identificar y adquirir tecnología con rasgos de seguridad requeridos y/o deseables. Sanciones para quien infrinjan la política de seguridad Una política de reporte de incidentes y de divulgación de información Servicios, procedimientos y mecanismos de seguridad Los servicios y procedimientos de seguridad implementan políticas de seguridad. Los servicios y procedimientos de seguridad son implementados a través de mecanismos de seguridad que han sido desarrollados para prevenir, proteger y neutralizar una o más amenazas a la seguridad de un sistema
Mecanismos de seguridad aplicables a clusters de linux Para la configuración más comúnmente empleada en un cluster linux: Nodos internos (de cálculo) Nodo de entrada frontend INTERNET Mecanismos de seguridad aplicables a clusters de linux (2) Para la configuración más comúnmente empleada en un cluster linux (2): El enfasis debe ser colocado en asegurar el(los) nodo(s) de entrada, pues es(son) la puerta de comunicación de un cluster con Internet Basicamente deben emplearse mecanismos para: Garantizar la conexión (login) y transmisión remota de información de manera segura al y dentro del cluster Controlar, registrar y filtrar: el acceso al cluster el tráfico (request) a servicios en el nodo de entrada
Secure Shell (ssh) Mecanismo parar garantizar la conexión (login) y transmisión remota de información de manera segura al y dentro del cluster. http://www.openssh.org http://www.ssh.org ssh habilita el establecimiento de conexiones completamente cifradas Ofrece herramientas de conectividad equivalentes a: telnet, rlogin, rsh ssh ftp sftp rcp scp Conexiones de tipo X11 y cualquier puerto TCP/IP puede ser encaminado (forwarded/tunneling) sobre el canal cifrado Secure Shell (ssh) (2) Eavesdropping Man in the middle Sniffing
Secure Shell (ssh) (3) Criptografía de llave asimétrica para autenticar sesiones de trabajo. (RSA,DSA) Criptografía de llave simétrica para cifrar los datos que se transmiten por la red (después de establecer la sesión de trabajo). (IDEA, DES, 3DES, ARCFOUR, TSS, AES). Secure Shell (ssh) (4) Funcionamiento de ssh: Modelo cliente-servidor El cliente inicia la conexión con el servidor El cliente verifica que se está conectando a la máquina correcta (autenticación del servidor) El cliente transmite su información de autenticación al servidor de manera cifrada: login y password Basada en llaves Basada en host Todos la información transmitida durante la sesión es cifrada
Secure Shell (ssh) (5) Funcionamiento de ssh (2): Cliente Servidor Host key { /etc/ssh/ssh_host_<algoritmo>_key /etc/ssh/ssh_host_<algoritmo>_key.pub Server key <algoritmo>: dsa o rsa ~/.ssh/authorized_keys ~/.ssh/known_hosts ~/.ssh/id_<algoritmo> ~/.ssh/id_<algoritmo>.pub Secure Shell (ssh) (6) El cliente ssh ssh [-c idea blowfish des 3des arcfour none] [-l <login>] \ <máquina_remota> [<comando>] El cliente sftp sftp [-c idea blowfish des 3des arcfour none] \ <máquina_remota> [<login>] El cliente scp scp [-p] [-c idea blowfish des 3des arcfour none] [-r] \ [[<login_fuente>@]<máquina_fuente>:]<archivo/directorio>\ [<login_destino>@]<máquina_destino>:<archivo/directorio> Encaminando (forward) sesiones TCP/IP a través de ssh ssh f N L<puerto local>:localhost:<puerto remoto> \ [usuario@]<máquina (servidor) remota>
Controlando el acceso a servicios Todo servicio de red que no sea pertinente o necesario para el funcionamiento del cluster debe ser inhabilitado o apagado para reducir la exposición del sistema a amenazas o ataques En general, los servicios en linux son gestionados a través: del programa xinetd de scripts que controlan la activación o apagado de servicios standalone en diferentes niveles de arranque (runlevels) El programa xinetd Es un servicio que controla la invocación de otros servicios. xinetd está operando permanentemente en el sistema (demonio), pendiente de todas las peticiones a servicios (puertos) que gestiona El funcionamiento de xinetd es configurado en el archivo /etc/xinetd.conf y, generalmente, incluye una instrucción que indica el directorio donde se localizan los archivos de configuración de los servicios bajo su control http://www.xinetd.org
El programa xinetd (2) Servidor Programa xinetd Cliente Solicitud de servicio tipo Z Evalua condiciones de acceso al servicio Z Solicitud Aceptada Solicitud Negada Acciones de Aceptación de Servicio. Acciones de Negación de Servicio. Enviar Solicitud Servidor Z El programa xinetd (3) Archivos de configuración de xinetd /etc/xinetd.conf defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST } includedir /etc/xinetd.d Otras opciones de registro: ATTEMPT, DURATION, EXIT, RECORD, USERID
El programa xinetd (4) Archivos de configuración de xinetd (2) Archivos en el directorio /etc/xinetd.d (uno por cada servicio controlado por el demonio xinetd) Por ejemplo: el archivo /etc/xinetd.d/wu-ftp service ftp { socket_type = stream wait = no user = root server = /usr/sbin/in.ftpd server_args = -l -a log_on_success += DURATION USERID log_on_failure += USERID nice = 10 cps = 2 max_load = 3.5 only_from = 192.168.0.0/24 access_times = 08:30-14:30 } TCP Wrappers Interfaz para controlar el acceso a servicios de red (TCP y UDP) Es una biblioteca (libwrap.a) que ofrece servicios de control y registro de acceso a servicios de red ssh, telnet, ftp, portmap, xinetd, pop, imap, entre otros, emplean los servicios de libwrap.a Cualquier servicio de red gestionado por xinetd puede utilizar el formato de control de acceso ofrecido por tcpwrappers ftp://ftp.porcupine.org/pub/security/index.html
TCP Wrappers (2) Funciones de tcpwrappers Registro (log) de servicios solicitados Estación cliente, servicio solicitado Se apoya en el servidor syslogd para realizar el registro Protección contra hostname spoofing Basado en el resultado de las consultas DNS hostname Dirección IP Direccion IP hostname Protección contra IP spoofing Basado en la detección de opciones de enrutamiento en la dirección IP de origen de la solicitud de un servicio TCP En sistemas UNIX modernos este tipo de protección puede realizarla directamente el kernel TCP Wrappers (3) Funciones de tcpwrappers (2) User name lookup (Sólo para servicios TCP) Basado en el protocolo definido en RFC 931 o en algunos de sus derivados: IDENT, TAP, RFC1413 Control de Acceso Controlado por host (o grupos de hosts) Controlado por servicio (o grupos de servicios) Una combinación de ambos Envío de mensajes informativos o de advertencia (banners)
TCP Wrappers (4) Control de acceso en TCP Wrappers Datos utilizados por tcpwrappers para definir reglas de filtrado: Nombre o dirección IP de la máquina cliente Identidad del usuario que realizó la solicitud de servicio Nombre del servicio solicitado Las reglas de aceptación de solicitudes de servicio se definen en el archivo /etc/hosts.allow Las reglas de negación de solicitudes de servicio se definen en archivo /etc/hosts.deny TCP Wrappers (5) Algoritmo General del Control de Acceso 1. Extraer nombre o dirección IP de la máquina cliente (host) 2. Extraer nombre del servicio solicitado (daemon) 3. Revisar en /etc/hosts.allow la existencia de una regla para el par (host, daemon). Si la regla existe la solicitud es aceptada. 4. En caso de no haber éxito en la búsqueda del paso anterior, revisar en /etc/hosts.deny la existencia de una regla para el par (host, daemon). Si la regla existe la solicitud es negada. 5. Si no hay éxito en las busquedas realizadas en los pasos 3 y 4, la solicitud de servicio es aceptada.
TCP Wrappers (6) Formato de una regla de control de acceso: Lista de servidores : Lista de máquinas cliente \ [: spawn Comando o script] Los elementos del cualquier lista son separados por espacios en blanco Lista de servidores: compuesta por nombres de servicios definidos en /etc/services y que hagan uso de libwrap.a. La palabra reservada ALL se refiere a todos los servicios. TCP Wrappers (7) Formato de una regla de control de acceso: (2) Lista de máquinas cliente: compuesta por nombres de máquinas (hostnames) o direcciones IP. Pueden utilizarse las siguientes palabras reservadas o patrones: ALL LOCAL UNKNOWN KNOWN usuario@maquina PARANOID.subdominio.dominio xxx. xxx.yyy. xxx.yyy.zzz. @<nombre_grupo_de_red_nis> r.r.r.r/m.m.m.m
TCP Wrappers (8) Formato de una regla de control de acceso: (3) spawn Comando o script: El comando a ejecutar puede estar parametrizado con: %a %A %h %H %c %d %n %N %p %s %u %% a,a : ip address h,h : hostname c : client info d : daemon process name n,n : hostname unknown paranoid p : process id s : server info u : user name unknown TCP Wrappers (9) Formato de una regla de control de acceso: (4) Operador EXCEPT: Puede ser utilizado en listas de servidores y en listas de máquinas clientes. Lista_1 EXCEPT Lista_2 Ejemplos: /etc/hosts.deny in.telnetd : ALL : spawn (/bin/echo `date` %c >> /var/log/telnet.log ) & /etc/hosts.allow sshd2 : ALL EXCEPT.dominio.denegado
Firewalls con iptables Internet Firewall Red Privada Alcabala de control y gestión de acceso a redes y sus servicios Firewalls con iptables (2) A partir de la serie 2.4.X de kernels de linux se introdujo un mecanismo que permite agregarle (pluging) cualquier sistema con capacidades de firewall Netfilter es el mecanismo y permite: Utilizar de manera excluyente cualquiera de los subsistemas de firewalls creados para el kernel de linux: ipfadm (kernels series 2.0.X) ipchains (kernels series 2.2.X) iptables (kernels series 2.4.X)
Firewalls con iptables (3) iptables: Software para configurar firewalls bajo Linux con kernels 2.4 http://www.netfilter.org iptables: ofrece tres diferentes tablas para manipular los paquetes que pasen por el firewall filter: para filtrado de paquetes nat: para manipular la cabecera de paquetes mangle: para marcar o asignar opciones dentro de paquetes que serán revisados en otros subsistemas Firewalls con iptables (4) La manipulación de paquetes se realiza a través de reglas de filtrado. Las reglas de filtrado son almacenadas en listas (cadenas) de filtrado. (Firewall Chains)
Firewalls con iptables (5) La tabla filter: tiene tres cadenas de filtrado predefinidas Cadena de entranda (input chain): revisa y filtra los paquetes que llegan al equipo y van dirigidos a una dirección ip definida en esa máquina Cadena de reenvío (forward chain): revisa y filtra los paquetes que pasan por el equipo, pero van dirigidos a otra red (paquetes enrutados entre dos interfaces de red del firewall) Cadena de salida (output chain): revisa y filtra los paquetes originados localmente en el equipo antes de dejarlo Firewalls con iptables (6) La tabla filter (2): Paquete entrante decisión de ruteo forward Paquete saliente input proceso local output
Firewalls con iptables (7) Manejo básico de cadenas en iptables: Crear una cadena nueva iptables -N <nombre cadena nueva> Eliminar una cadena vacía (a excepción de las predefinidas) iptables -X <nombre cadena eliminar> Vaciar una cadena (flushing) iptables -F [<nombre cadena a vaciar>] Asignar la política de filtrado predeterminada en una cadena predefinida (input, forward, output) iptables -P <input forward output> \ <ACCEPT DROP REJECT> Reportar todas las reglas definidas en una cadena iptables L [-v] [<nombre cadena a reportar>] Firewalls con iptables (8) Manejo básico de reglas de filtrado en iptables: Agregar una nueva regla a una cadena iptables -A <nombre cadena> <condiciones de la regla> \ [<acción u objetivo de la regla>] Insertar una nueva regla en una posición específica de una cadena iptables -I <nombre cadena> [<posición en cadena>] \ <condiciones de la regla> <acción u objetivo de la regla> Eliminar una regla de una cadena iptables -D <nombre cadena> <posición en cadena> iptables -D <nombre cadena> <condiciones de la regla> \ <acción u objetivo de la regla>
Firewalls con iptables (9) Definición de reglas de filtrado en iptables: Dirección IP fuente de un paquete: Opción -s (source), puede ser especificada de tres formas diferentes: Nombre del host: Por ejemplo: localhost, maquina.dominio Dirección IP: Por ejemplo: 127.0.0.1, 172.16.10.32 Dirección de Red/Mascara de Red: De esta manera se puede definir un rango de direcciones IP. Por ejemplo: 172.16.10.0/255.255.255.0 y 172.16.10.0/24 Para indicar que la dirección IP puede ser cualquiera, basta con colocar 0/0 como argumento de la opción -s. Dirección IP destino de un paquete: Opción -d (destination). La dirección IP destino puede ser especificada de manera similar a la dirección IP fuente. Firewalls con iptables (10) Definición de reglas de filtrado en iptables: (2) Protocolo de un paquete: Opción -p (protocol). El argumento que acompaña a la opción -p debe ser un número (de acuerdo a los protocolos TCP/IP definidos en /etc/protocols). Para los casos especiales de los protocolos TCP, UDP e ICMP, las etiquetas tcp, udp e icmp pueden ser utilizadas respectivamente. Puerto de origen de un paquete TCP o UDP: Opción sport. El puerto de origen de un paquete TCP o UDP puede ser especificado de tres formas diferentes: Nombre del puerto: De acuerdo a las definiciones conseguidas en el archivo /etc/services. Por ejemplo: www, telnet, ftp. Número de puerto: Permite especificar el puerto de origen de un paquete por su número. Por ejemplo: 80, 23, 21. Rango: Número de puerto inferior : Número de puerto superior
Firewalls con iptables (11) Definición de reglas de filtrado en iptables: (3) Puerto de destino de un paquete TCP o UDP: Opción dport. El puerto de destino de un paquete TCP o UDP puede ser especificado de manera similar a como se hace con el puerto de origen. Interfaz de red por la cual llega o sale un paquete: Opción i (input interface): -i <interfaz de red que debe poseer un paquete>. Para la cadena input, es la interfaz por la cual entran los paquetes al firewall. Opcion -o (output interface) -o <interfaz de red que debe poseer un paquete>. Para la cadena output, es la interfaz por la cual salen los paquetes del firewall. Para la cadena forward ambas opciones son permitidas. El nombre de la interfaz que acompaña a las opciones i o -o, puede ser cualquier nombre de dispositivo de red que soporte el kernel de Linux. Por ejemplo: eth0 Especifica a la interfaz ethernet 0 sl0 Especifica a la interfaz slip 0 ppp+ Especifica todas las interfaces ppp definidas en el equipo Firewalls con iptables (12) Definición de reglas de filtrado en iptables: (4) Paquetes que sean fragmentos. La opción -f se emplea para detectar paquetes que son fragmentos de paquetes (datagramas) más grandes. Indica que la regla aplica unicamente a partir del segundo fragmento de un paquete fragmentado Invertir (negar) una opción de filtrado. El símbolo! se emplea para negar el significado de una regla de filtrado. Por ejemplo: -p TCP -d! 192.168.1.10 dport! ftp Detecta todos los paquetes TCP que no vayan dirigidos al host 192.168.1.10 y que su puerto de destino no sea un servicio ftp.
Firewalls con iptables (13) Definición de reglas de filtrado en iptables: (5) Concordancia (match) de paquetes: Opción m (match). Proporciona capacidades adicionales para discriminar paquetes Su empleo más común es para analizar el trazo o estado de la conexión del paquete analizado. Opción --state iptables define cuatro estados de conexión: NEW ESTABLISHED RELATED INVALID Firewalls en iptables (14) Definición de reglas de filtrado en iptables: (6) acción u objetivo de la regla (target): opción -j (jump-to). Los objetivos predefinidos son: ACCEPT DROP REJECT LOG RETURN QUEUE Si una regla posee un nombre de objetivo distinto a los predefinidos, es porque el paquete será enviado a una cadena creada por el administrador del firewall
Firewalls en iptables (15) Recorrido de un paquete dentro de una cadena: Cadena X Regla 1 Regla 2 Cadena Y Regla 1 Regla 2 Regla J -j cadena Y Regla K Regla N Regla H Regla M Recorrido de un paquete Firewalls con iptables (16) La tabla nat (network address translation): Permite modificar: La dirección IP fuente o destino de un paquete (NAT) El puerto fuente o destino de un paquete (PAT) Utilizado principalmente para hacer ip masquerading tiene tres cadenas de filtrado predefinidas Cadena de pre-enrutamiento (prerouting chain): revisa y modifica los paquetes no originados localmente (en el firewall) antes de que el sistema intente enrutarlos. Cadena de salida (output chain): revisa y modifica los paquetes originados localmente en el equipo antes de dejarlo Cadena de post-enrutamiento (postrouting chain): es la última cadena por donde pasan los paquetes antes de salir del sistema. Es donde se revisa y modifica al paquete después de haberse tomado todas las decisiones de su encaminamiento
Firewalls con iptables (17) Realizando ip masquerading con iptables: Hacia una ip estática iptables t nat A postrouting o eth0 j SNAT --to 150.185.139.25 Hacia una ip dinámica: iptables t nat A postrouting o eth0 j MASQUERADE Firewalls con iptables (18) Almacenado y restaurando información de configuración de iptables iptables-save iptables-restore
Firewalls con iptables (19) Reglas definidas por NPACI ROCKS version 2.3.2 para iptables Archivo /etc/sysconfig/iptables # more iptables *nat -A POSTROUTING -o eth1 -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i eth0 -o eth1 -j ACCEPT -A OUTPUT -o eth1 -p udp -m udp --sport bootps -j DROP -A INPUT -i eth1 -p tcp -m tcp --dport ssh -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport ntp -j ACCEPT -A INPUT -i eth1 -p udp -m udp --dport ntp -j ACCEPT # Uncomment the line below to activate web access to the cluster. #-A INPUT -i eth1 -p tcp -m tcp --dport www -j ACCEPT -A INPUT -i eth1 -p tcp -m tcp --dport 0:1024 -j DROP -A INPUT -i eth1 -p udp -m udp --dport 0:1024 -j DROP -A INPUT -i eth1 -p tcp -m tcp --sport sunrpc -j DROP -A INPUT -i eth1 -p udp -m udp --sport sunrpc -j DROP -A INPUT -p udp -s 192.168.2.0/255.255.255.0 -d 0/0 -m udp --dport 9123 -j ACCEPT -A INPUT -p udp -s 0/0 -d 0/0 -m udp --dport 9123 -j DROP COMMIT Firewalls con iptables (20) Herramientas para asistir en la gestión de firewalls con iptables: knetfilter http://expansa.sns.it/knetfilter Bifrost http://bifrost.heimdalls.com (no license free) Firewall Builder http://www.fwbuilder.org pfilter http://pfilter.sourceforge.net
Referencias de seguridad en Internet http://www.cert.org http://csrc.nist.gov http://www.securityfocus.com http://www.sans.org http://escert.upc.es http://www.insecure.org http://groups.google.com sección de grupos de seguridad (comp.security. )