Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.
-
Upload
ria-viloria -
Category
Documents
-
view
14 -
download
2
Transcript of Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.
Seguridad en equipos Linux
Sergio A. BecerrilSSI / 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”• …
USUARIOS Y GRUPOSSeguridad en equipos Linux
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:default gid:desc:home:shell
• /etc/shadowusuario:[!]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,N4max=#passphrase=#match=#similar=permit|denyrandom=#[,only]enforce=none|users|everyone[non-unix]retry=#[ask_oldauthtok[=update] | use_first_pass][check_oldauthtok][use_authtok]
PERMISOSSeguridad en equipos Linux
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 permisosrwx r-x r-x carácterusuario 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
umask u=rwx,g=rx,o=rx
• Escrito en octal, funciona como filtro• Define qué impide
umask 22
SUDOSeguridad en equipos Linux
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_list host_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_list host_list = [(runas_list[:runas_list])] [tag:[tag...]] cmd_list ellos 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
• sergio ALL = (ALL) NOPASSWD:ALL• El usuario sergio puede ejecutar todos los comandos en todos los equipos
con privilegios de root, sin necesidad de escribir su contraseña (!)
• sergio kuechenberg = vi• El usuario sergio puede ejecutar vi en kuechenberg con privilegios de root,
previa introducción correcta de su contraseña (!!)
• sergio kuechenberg = (www-data) vi, (root) NOPASSWD:less,cat• El usuario sergio puede ejecutar vi en kuechenberg con 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…
sergio kuechenberg = (www-data) vi, (root) NOPASSWD:less,cat
sergio kuechenberg = (www-data) vi : buoniconti = (root) NOPASSWD:less,cat
MINIMIZACIÓN DE SERVICIOSSeguridad en equipos Linux
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 -natpps -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>
FIREWALLSeguridad en equipos Linux
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. iptables no es un firewall)
• Establece tablas de cadenas de reglas de filtrado
Breviario TCP/IP
Esquema completo
Simplificado
• En la entrada, prerouting tiene prioridad*
• En la salida, postrouting siempre 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.] [--dport pto. 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> ]
APACHESeguridad en equipos Linux
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 útilesServerName www.sitio.com
UseCanonicalName on
ServerSignature offServerTokens Prod
<Directory “/”>Order allow, deny
Deny from all…
</Directory>
Configuraciones útiles
Options -Indexes -FollowSymlinks …
Order Allow, DenyAllow from …Deny from…
Order Deny, AllowDeny from…
MYSQLSeguridad en equipos Linux
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> update user set user="new_user" where user="root";mysql> flush privileges;
• (inferiores)
Más tips
mysql> use mysql;mysql> select * from users;mysql> show grants for ‘root’@’localhost’;
mysql> drop database test;
mysql> select * from mysql.user where user=""; • Si no regresa vacío: mysql> DROP USER "“;
SSHSeguridad en equipos Linux
Tips (muy breves!)
• Deshabilitar acceso root
• Cambiar puerto 22
• Usar llaves privadas (con ssh-agent)
• Deshabilitar port forwarding
MONITOREOSeguridad en equipos Linux
Más tips!
• Bitácora no monitoreada = bitácora inútil
• No te conformes con un baseline
• Si tienes recursos, simplifica (e.g. Splunk)
• Apóyate de tu experiencia, confía en tu instinto
Finalmente…• Actualiza, actualiza, actualiza
• Nada con “security” es opcional
• La flojera es tu amiga• Scriptea todo
• Asume tu rol• Los usuarios no siempre tienen la razón
• No eres Dios• Nadie nace sabiendo; preguntar no te hace menos