Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

57
Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT

Transcript of Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Page 1: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Seguridad en equipos Linux

Sergio A. BecerrilSSI / UNAM-CERT

Page 2: 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

Page 3: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Temario• Usuarios y grupos• Permisos• sudo• Minimización de servicios• Firewall• Apache• MySQL• ssh• Monitoreo

Page 4: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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”• …

Page 5: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

USUARIOS Y GRUPOSSeguridad en equipos Linux

Page 6: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 7: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 8: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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…]

Page 9: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 10: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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]

Page 11: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

PERMISOSSeguridad en equipos Linux

Page 12: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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>

Page 13: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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>

Page 14: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 15: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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.

Page 16: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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>

Page 17: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 18: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

SUDOSeguridad en equipos Linux

Page 19: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Conceptos básicos

• Delegación de privilegios “sin root”

• Modalidad con y sin contraseña

• Last match and exit

• Terriblemente desperdiciado

Page 20: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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.

Page 21: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 22: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 23: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 24: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

…¿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

Page 25: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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!

Page 26: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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 (…)

Page 27: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

No es lo mismo…

sergio kuechenberg = (www-data) vi, (root) NOPASSWD:less,cat

sergio kuechenberg = (www-data) vi : buoniconti = (root) NOPASSWD:less,cat

Page 28: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

MINIMIZACIÓN DE SERVICIOSSeguridad en equipos Linux

Page 29: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 30: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 31: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 32: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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>

Page 33: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

FIREWALLSeguridad en equipos Linux

Page 34: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 35: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 36: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Breviario TCP/IP

Page 37: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Esquema completo

Page 38: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Simplificado

• En la entrada, prerouting tiene prioridad*

• En la salida, postrouting siempre se ejecuta al final

* Excepto sobre conntrack

Page 39: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 40: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 41: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 42: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

APACHESeguridad en equipos Linux

Page 43: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 44: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Niveles de configuración

• Generales• httpd.conf

• De sitio• <VirtualHost> … </VirtualHost>• Usualmente, sites-enabled/sitio

• De carpeta• Archivos .htaccess• Requiere AllowOverride en VirtualHost

Page 45: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Configuraciones útilesServerName www.sitio.com

UseCanonicalName on

ServerSignature offServerTokens Prod

<Directory “/”>Order allow, deny

Deny from all…

</Directory>

Page 46: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Configuraciones útiles

Options -Indexes -FollowSymlinks …

Order Allow, DenyAllow from …Deny from…

Order Deny, AllowDeny from…

Page 47: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

MYSQLSeguridad en equipos Linux

Page 48: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Conceptos básicos

• Parte esencial de LAMP

• MySQL != phpMyAdmin

• Rápido, escalable, comercial

• Usualmente, solo requiere localhost

Page 49: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 50: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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)

Page 51: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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 "“;

Page 52: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

SSHSeguridad en equipos Linux

Page 53: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Tips (muy breves!)

• Deshabilitar acceso root

• Cambiar puerto 22

• Usar llaves privadas (con ssh-agent)

• Deshabilitar port forwarding

Page 54: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

MONITOREOSeguridad en equipos Linux

Page 55: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 56: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

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

Page 57: Seguridad en equipos Linux Sergio A. Becerril SSI / UNAM-CERT.

Gracias!

Sergio A. Becerril

[email protected]://sergiob.org