La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Seguridad en equipos Linux

Presentaciones similares


Presentación del tema: "Seguridad en equipos Linux"— Transcripción de la presentación:

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

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

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

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

5 Seguridad en equipos Linux
Usuarios y grupos

6 Conceptos básicos Archivos Superficie de ataque Contraseñas seguras
/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

7 Manejo de cuentas Desplegar info Acción inmediata
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

8 Manejo de cuentas /etc/passwd /etc/shadow /etc/group
usuario:pw:uid:default gid:desc:home:shell /etc/shadow usuario:[!]pw:ultimoCambio*:min:max:warn:gracia:dis*: (*días desde 1970) /etc/group grupo:pw:gid:usuario[,usuario…]

9 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

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

11 Seguridad en equipos Linux
Permisos

12 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-x carácter usuario grupo otros octal Modificación de permisos: chmod [opts] <modo> <archivo>

13 chmod [4|2]xxx | [u|g]+s <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>

14 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

15 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.

16 umask <máscara>
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>

17 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

18 Seguridad en equipos Linux
sudo

19 Conceptos básicos Delegación de privilegios “sin root”
Modalidad con y sin contraseña Last match and exit Terriblemente desperdiciado

20 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.

21 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

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

23 user_list host_list = cmd_SPEC_LIST [: host_list = cmd_SPEC_LIST]
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

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

25 Conjuntando… ¡Y aún faltaron más opciones!
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!

26 Ejemplos sergio ALL = (ALL) NOPASSWD:ALL sergio kuechenberg = vi
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 (…)

27 No es lo mismo… sergio kuechenberg = (www-data) vi, (root) NOPASSWD:less,cat sergio kuechenberg = (www-data) vi : buoniconti = (root) NOPASSWD:less,cat

28 Minimización de servicios
Seguridad en equipos Linux Minimización de servicios

29 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

30 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

31 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

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

33 Seguridad en equipos Linux
firewall

34 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

35 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

36 Breviario TCP/IP

37 Esquema completo

38 Simplificado En la entrada, prerouting tiene prioridad*
En la salida, postrouting siempre se ejecuta al final * Excepto sobre conntrack

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

40 [especificación] <acción>
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

41 [ <-j [ACCEPT|DROP|QUEUE|RETURN]> | <-g cadena> ]
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> ]

42 Seguridad en equipos Linux
Apache

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

44 Niveles de configuración
Generales httpd.conf De sitio <VirtualHost> … </VirtualHost> Usualmente, sites-enabled/sitio De carpeta Archivos .htaccess Requiere AllowOverride en VirtualHost

45 Configuraciones útiles
ServerName UseCanonicalName on ServerSignature off ServerTokens Prod <Directory “/”> Order allow, deny Deny from all … </Directory>

46 Configuraciones útiles
Options -Indexes -FollowSymlinks … Order Allow, Deny Allow from … Deny from… Order Deny, Allow

47 Seguridad en equipos Linux
MySQL

48 Conceptos básicos Parte esencial de LAMP MySQL != phpMyAdmin
Rápido, escalable, comercial Usualmente, solo requiere localhost

49 my.cnf -- [mysqld] bind-address=127.0.0.1 set-variable=local-infile=0
Deshabilita acceso remoto set-variable=local-infile=0 Deshabilita lectura a archivos log =/var/log/mylogfile Habilita bitácoras

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

51 Más tips mysql> use mysql; mysql> select * from users;
mysql> show grants for mysql> drop database test; mysql> select * from mysql.user where user=""; Si no regresa vacío: mysql> DROP USER "“;

52 Seguridad en equipos Linux
ssh

53 Tips (muy breves!) Deshabilitar acceso root Cambiar puerto 22
Usar llaves privadas (con ssh-agent) Deshabilitar port forwarding

54 Seguridad en equipos Linux
monitoreo

55 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

56 Finalmente… Actualiza, actualiza, actualiza La flojera es tu amiga
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

57 Gracias! Sergio A. Becerril


Descargar ppt "Seguridad en equipos Linux"

Presentaciones similares


Anuncios Google