570 likes | 751 Views
Seguridad en equipos Linux. Sergio A. Becerril SSI / UNAM-CERT. ¿Para quién es este taller?. Administradores de sistemas UNIX/Linux Usuarios de sistemas UNIX/Linux con alguna experiencia Entusiastas de la seguridad informática. Temario. Usuarios y grupos Permisos s udo
E N D
Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT
¿Para quién es este taller? • Administradores de sistemas UNIX/Linux • Usuarios de sistemas UNIX/Linux con alguna experiencia • Entusiastas de la seguridad informática
Temario • Usuarios y grupos • Permisos • sudo • Minimización de servicios • Firewall • Apache • MySQL • ssh • Monitoreo
Qué *no* se verá en el taller • Minimización de paquetes • Centralización de configuraciones • Esquemas distribuidos/balanceados • HIDS • Análisis de bitácoras • _________ “a fondo” • …
Seguridad en equipos Linux Usuarios y grupos
Conceptos básicos • Archivos • /etc/passwd -- No relativo a la contraseña • /etc/shadow -- Relativo a la contraseña • /etc/group -- Relaciones grupo(s)/usuario(s) • Superficie de ataque • Menos usuarios es mejor • Contraseñas seguras • Más (caracteres/clases) es mejor
Manejo de cuentas • Desplegar info • passwd -S [cuenta] • chage –l <cuenta> • Acción inmediata • Expirar pw: passwd -e <cuenta> • Deshabilitar pw: passw -l |usermod -L • Deshabilitar cuenta: usermod -e 1 <cta> • Implementación de políticas • passwd (-n, -x, -w, -i) • usermod (-e, -f, -s) • chage
Manejo de cuentas • /etc/passwd • usuario:pw:uid:defaultgid:desc:home:shell • /etc/shadow usuario:[!]pw:ultimoCambio*:min:max:warn:gracia:dis*: (*días desde 1970) • /etc/group • grupo:pw:gid:usuario[,usuario…]
Contraseñas • ¿Qué es una contraseña “segura”? • Pensemos en “más vulnerable” o “menos vulnerable” • Vulnerabilidades de las contraseñas • Ataques de diccionario (ya obtenido un shadow, p.ej.) • Ataques de fuerza bruta (ya obtenido un shadow, p.ej.) • Post-it
passwdqc • Implementa (algunas) políticas de contraseña • Fácil configuración: [config=ARCHIVO] min=N0,N1,N2,N3,N4 max=# passphrase=# match=# similar=permit|deny random=#[,only] enforce=none|users|everyone [non-unix] retry=# [ask_oldauthtok[=update] | use_first_pass] [check_oldauthtok] [use_authtok]
Seguridad en equipos Linux Permisos
Conceptos básicos • Objetivo: mínimo privilegio necesario • Al César lo que es del César… y ni un denario más • Todo “archivo” en UNIX tiene permisos rwx r-x r-xcarácter usuario grupo otros 7 5 5 octal • Modificación de permisos: chmod [opts] <modo> <archivo>
SetUID, SetGID • Bits para controlar archivos ejecutables • Permiten la ejecución con los privilegios del usuario o grupo dueño, respectivamente. chmod [4|2]xxx | [u|g]+s <archivo>
Permisos sobre directorios • Lectura • Permite listar archivos en el directorio • Ejecución • Permite leer archivos en el directorio • SetGID • Los archivos creados en el directorio tendrán de grupo el del directorio (no el del creador). Los subdirectorios heredarán el bit SetGID. *SetUID no tiene interpretación en directorios en Linux
Sticky bit • En Linux solo aplica a directorios • Para todos los archivos dentro del directorio, solo su dueño (y el dueño del directorio) pueda renombrarlo o borrarlo.
umask • Establece permisos predeterminados para el proceso en el que se ejecuta. • Incrustado en archivos de inicio de sistema, afecta los permisos predeterminados globales. umask <máscara>
umask • Escrito simbólicamente, funciona como guía • Define qué permite umasku=rwx,g=rx,o=rx • Escrito en octal, funciona como filtro • Define qué impide umask 22
Conceptos básicos • Delegación de privilegios “sin root” • Modalidad con y sin contraseña • Last match and exit • Terriblemente desperdiciado
sudoers • Archivo de configuración (usualmente bajo /etc) • Sintaxis básica: aliases (listas), defaults (opciones) y especificaciones (quién puede hacer qué) • La sintaxis del man… no ayuda mucho.
Aliases • De usuario: nombres, #uid, %grupos, %#gid, … • De runas (identidades asumidas): ib. • De hosts: hostname, dirección IP, red, … • De comando: comando*, directorio, sudoedit * Con parámetros, parámetros opcionales, o forzando sin parámetros • Todos los elementos de los aliases soportan negación (!) y se separan con coma
Defaults • Defaults [@ host_list] [ : user_list] [ ! cmd_list] [ > runas_list] parámetro [+|-]=valor[,parámetro…] !parámetro • ¿Qué parámetros (opciones de configuración) hay? • Más de 100 (consultar documentación, ‘sudo options’)
Especificaciones user_listhost_list = cmd_SPEC_LIST [: host_list = cmd_SPEC_LIST] ellos aquí pueden… … y también… • Esto implica que podemos tener especificaciones para el mismo usuario en diferentes hosts. • sudo no es centralizable*, pero sí podemos utilizar el mismo archivo en múltiples equipos. * Excepto bajo LDAP
…¿y qué es el “cmd_SPEC_LIST”? • Uno o más cmd_SPEC (separados por comas), que a su vez definen los comandos… y otros “detalles” • cmd_SPEC: [(runas_list[:runas_list])] [tag:[tag...]] cmd_list • El (opcional) segundo runas_list se utiliza para hacer sudo de grupo • Hay ocho tags: NOPASSWD, PASSWD, NOEXEC, EXEC, SETENV, NOSETENV, LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT y NOLOG_OUTPUT
Conjuntando… user_listhost_list = [(runas_list[:runas_list])] [tag:[tag...]] cmd_listellos aquí como ellos de esta manera pueden… [,[(runas_list[:runas_list])] [tag:[tag...]] cmd_list…] y también… como ellos de esta manera pueden… • La sintaxis completa es muy compleja • Desmenuzando, es más sencilla • ¡Y aún faltaron más opciones!
Ejemplos • sergioALL = (ALL) NOPASSWD:ALL • El usuario sergiopuede ejecutar todos los comandosen todos los equiposcon privilegios de root, sin necesidad de escribir su contraseña (!) • sergiokuechenberg = vi • El usuario sergiopuede ejecutar vi en kuechenbergcon privilegios de root, previa introducción correcta de su contraseña (!!) • sergiokuechenberg = (www-data) vi, (root) NOPASSWD:less,cat • El usuario sergiopuede ejecutar vi en kuechenbergcon privilegios de www-data, previa introducción correcta de su contraseña; además puede ejecutar less y cat(también en kuechenberg) con privilegios de root, sin necesidad de escribir su contraseña (…)
No es lo mismo… sergiokuechenberg = (www-data) vi, (root) NOPASSWD:less,cat sergiokuechenberg = (www-data) vi : buoniconti = (root) NOPASSWD:less,cat
Seguridad en equipos Linux Minimización de servicios
Conceptos básicos • ¿Sabes realmente qué está ejecutándose en tu equipo? • Superficie de ataque • Mientras más procesos, más lugares donde “picar” • Los sysadmins también son personas • Mientras más procesos, más difícil reconocer irregularidades
Baseline • Un estado “normal” con el cuál comparar • O también, un estado “ideal” al cual llegar • Mucho más sencillo “desde cero” a producción, que viceversa. • Puede estar predefinido • Políticas • Estándares • Post-its del sysadmin anterior
De producción al nirvana • ¿Qué estamos ejecutando? • RedHat (y variantes): chkconfig • Todos los demás: • netstat -natp • ps -fea • find -name “S*” /etc/rc`runlevel`.d/ • Más tiempo en producción – menos confiabilidad
Eliminar servicios innecesarios • RedHat • chkconfig • Todos los demás: • insserv • rm /etc/rc#.d/S##<servicio> • /bin/kill -s 15 <proceso>, /bin/kill -s 2 <proceso> • /bin/kill -s 9 <proceso>
Seguridad en equipos Linux firewall
Conceptos básicos • Buena idea en general, indispensable en servidores • Cuidar las entradas, pero también las salidas • Tres tipos básicos: de paquetes, de estado, de contenido
iptables • Disponible en *todas* las distribuciones de Linux • Permite modificar las reglas del firewall del kernel (i.e.iptablesno es un firewall) • Establece tablas de cadenas de reglas de filtrado
Simplificado • En la entrada, prerouting tiene prioridad* • En la salida, postroutingsiempre se ejecuta al final • * Excepto sobre conntrack
Conntrack • Convierte a iptables en un firewall de estado(-m state …) • Monitorea solo ciertos protocolos • Depende de módulos de kernel (usualmente, pero no siempre, montados “de fábrica”)
Sintaxis /ruta/a/iptables [-t tabla] <-operación> <cadena> <regla> • raw, mangle, filter, nat, <creadas por el usuario> • Add, Delete, Insert, Policy*, … • prerouting (raw, mangle, nat); input (mangle, filter); forward (mangle, filter); output (todas); postrouting (mangle, nat) [especificación] <acción> *en regla especificar ACCEPT o DENY
Reglas • Especificación • Define el paquete de interés [-s origen] [-d destino] [-p proto] [-i int. ent.] [-o int. sal.] [--sport pto. ent.] [--dportpto. sal.] [-m …] • Acción • Define el comportamiento del firewall, de coincidir el tráfico observado con la especificación [ <-j [ACCEPT|DROP|QUEUE|RETURN]> | <-g cadena> ]
Seguridad en equipos Linux Apache
Conceptos básicos • Más del 60% de sitios web • 90%+ en Linux • Soporta múltiples CGI, módulos • Amplia superficie de ataque • Compleja configuración • httpd.conf, apache2.conf, sites-enabled, …
Niveles de configuración • Generales • httpd.conf • De sitio • <VirtualHost> … </VirtualHost> • Usualmente, sites-enabled/sitio • De carpeta • Archivos .htaccess • Requiere AllowOverride en VirtualHost
Configuraciones útiles ServerName www.sitio.com UseCanonicalNameon ServerSignature off ServerTokensProd <Directory “/”> Orderallow, deny Denyfromall … </Directory>
Configuraciones útiles Options -Indexes -FollowSymlinks … OrderAllow, Deny Allowfrom … Denyfrom… OrderDeny, Allow Denyfrom…
Conceptos básicos • Parte esencial de LAMP • MySQL != phpMyAdmin • Rápido, escalable, comercial • Usualmente, solo requiere localhost
my.cnf -- [mysqld] • bind-address=127.0.0.1 • Deshabilita acceso remoto • set-variable=local-infile=0 • Deshabilita lectura a archivos • log =/var/log/mylogfile • Habilita bitácoras
Renombrar root • mysql> RENAME USER root TO new_user; • (5.0.2+) • mysql> use mysql;mysql> updateuser set user="new_user" whereuser="root";mysql> flushprivileges; • (inferiores)