LPIC-1 Tema 110.1: realizar tareas de seguridad básicas

Último bloque temático de las certificaciones LPIC-1, el 110 dedicado a temas de seguridad básicos. En este artículo pasamos al tema 110.1, en el que aprenderás a realizar algunas tareas básicas de seguridad en el sistema. Es decir, cómo definir una serie de políticas de seguridad local para asegurar el host.

Las preguntas de esta parte de las certificaciones irán orientadas a comprobar si conoces los ficheros básicos para auditar la seguridad, sobre los bits SUID y SGID, cambiar contraseñas de usuarios y password aging, usar nmap para descubrir puertos abiertos que pudieran representar una amenaza, limitar los intentos de logins, limitar el uso de memoria, saber qué usuarios se registraron en el sistema y cuales lo están ahora, e incluso las configuraciones y usos básicos de sudo…

Auditoría elemental (ficheros y procesos

Aquí tienes algunas acciones básicas para detectar ciertos problemas de seguridad:

  • Localizar ficheros con los bits SUID y SGID activos, ya que podrían representar un peligro por la seguridad. Estos bits ya los deberías conocer de artículos anteriores. Para ello:
#Buscar ficheros con el SUID activo
find . -perm /4000 

#Buscar ficheros con el SGID activo
find . -perm /2000

#Buscar ficheros que tengan ambos activos
find . -perm /6000

#O con el sticky bit activo
find . -perm /1000

#Usar esta otra opción para localizar los ficheros con esos permisos y cambiar dichos permisos a otros que te interesan
#Debes ser muy cuidadoso con ésto o podrías terminar con ficheros con permisos inadecuados
find -perm -777 -exec chmod -R 744 {} \;

#Como extra, agrego la opción para buscar ficheros con permisos totales
find . -type f -perm 0777

#Puedes usar - para buscar ficheros y directorios con permisos al menos de esa categoría o superiores
find . -perm -644

#O encontrar ficheros y directorios con alguno de los permisos del set usando /
find . -perm /644

#También puedes ver permisos concretos con ls
ls -l | grep rwxrwxrwx

#O también ver permisos ACL
getfacl /home/usuario/nombre_fichero

#E incluso los atributos, para modificarlos si es necesario con chattr
lsattr
  • Otra acción interesante que podrías hacer en el sistema que auditas es listar los procesos que usan un directorio o un FS determinado. Eso podría ayudarte a encontrar algunos procesos que podrían ser maliciosos o que simplemente no deberían tener permisos para usar dicho directorio. Para ello:
#Listar los procesos que están usando el directorio /home
fuser -v /home

#Listar los procesos asociados a un sistema de ficheros
fuser -mv /mnt/datos
  • También podrías listar ficheros que tiene abiertos (está usando) un determinado proceso. A veces, un cierto programa debería tener acceso a algunos ficheros y no a otros, por lo que te podría ayudar a detectar posibles modificaciones en el código del programa, o si se está haciendo uso de ellos de forma remota, etc. Para ello:
#Listar los ficheros abiertos por el proceso con PID=4
lsof -c 4 

#Lista los procesos que están usando el directorio /home/prueba
lsof +D /home/prueba

#Muestra todos los ficheros de red usados por procesos de red
lsof -i

#Mostrar procesos que están operando tras el puerto 444
lsof -i :444

#Lista todos los hilos TCP con sus correspondientes procesos
lsof -i tcp

#Averigua cuantos ficheros tiene abiertos cada proceso
lsof | awk '{ print $1 }' | sort | uniq -c | sort -nr
  • Sería igualmente interesante que puedas comprobar los servicios activos y los puertos abiertos, ya que todos ellos pueden ser puntos de entrada para los atacantes, especialmente si existen vulnerabilidades. Para ello:
#Puedes usar alguno de estos comandos para ver los puertos y servicios
sudo netstat -lntup
sudo ss -lntu
sudo nmap -n -PN -sT -sU -p- localhost
sudo lsof -i

Evidentemente, si se detectan casos problemáticos en los ejemplos de comandos anteriores, habría que aplicar medidas correctivas para solucionarlos. Aunque esto no es importante de cara a este tema de las certificaciones…

Auditoría elemental (usuarios, contraseñas y grupos)

Lo anterior eran algunas acciones básicas para la seguridad del sistema, y aquí se complementan con algunas otras que tienen que ver con los usuarios, grupos, contraseñas y privilegios:

  • Una de las cosas que puedes hacer es localizar usuarios con UID=0, es decir, con privilegios. No debería haberlos más allá de la cuenta root, si los hay, pueden ser sospechosos y potencialmente peligrosos. Para ello:
grep ":0:" /etc/passwd
  • Otra de las acciones que pueden resultar interesantes son las de desactivar la cuenta de un usuario, cambiar contraseña, o poner caducidad a las contraseñas, e incluso hacer cambios en los grupos. Para ello:
#Deshabilitar o bloquear una cuenta de usuario con alguna de estas alternativas
passwd -l dani
usermod -L -e 2008-01-01 dani
chage -l dani
#Poner una contraseña a un usuario o cambiarla para el usuario
passwd edward
#Imponer límites de caducidad a una contraseña cada 90 días
chage -M 90 mayo

#Hacer que la contraseña caduque en una fecha concreta
chage -E "2020-12-30" jason

#Bloquear una cuenta de usuario a los 15 días
chage -I 15 admin 
  • Otra forma de asegurar un sistema sería comprobando los limites que tiene establecido un usuario y alterando dichos límites para acotar su capacidad. Para ello deberías usar un editor (con privilegios) para modificar la configuración establecida dentro del fichero /etc/security/limits.conf. Allí encontrarás todos los límites que puedes comprobar con ulimit.
  • Por último, puede ser importante comprobar quién se ha registrado en el sistema recientemente, los últimos registros de usuarios, los actuales, etc., intentando averiguar si hay sesiones sospechosas:
#Mostrar los usuarios registrados, los terminales empleados y datos del tiempo de sesión
who -H

#Ver el tiempo del último arranque por usuarios
who -bu

#Mostrar quién está registrado y qué está haciendo
w

#Puedes mostrar información solo de un usuario específico
w jack

#Ver todos los usuarios que se registraron en el sistema desde que se creó el fichero /var/log/wtmp 
last

#También puedes especificar un rango de tiempo a consultar
last -s yesterday -t today

Recuerda que también se pueden usar los registros del sistema para comprobar eventos sospechosos.

Como puedes comprobar, es cuestión de ir aplicando todas las herramientas que se han visto hasta el momento y también unos conocimientos esenciales de seguridad para tratar de buscar puntos débiles del sistema.

su, sudo y /etc/sudoers

Por último, también es importante que conozcas algunas cosas muy básicas sobre la administración de privilegios:

Como deberías saber, su es un comando para poder ejecutar órdenes con un ID de usuario o grupo diferente. Si no se especifica, se hará como root (superusuario). En cambio, sudo (SUperuser DO) te permite ejecutar órdenes como otro usuario (o el superusuario) también, solo que con ligeras diferencias y limitaciones…

  • su vs sudo: aunque estos comandos ya se han visto anteriormente, debes recordar que es preferible desactivar la cuenta root y hacer uso exclusivo de sudo cuando necesites privilegios. El motivo es que éste segundo requiere la contraseña del usuario actual, mientras que el otro necesita la contraseña root. Además, cuando te registras como root, los privilegios durarán durante toda la sesión (si olvidas cerrarla puede ser aprovechado por un tercero), mientras que con sudo serán puntuales. Tampoco necesitarás compartir la contraseña root con otros usuarios que necesiten privilegios, sino que todos los que pertenezcan al grupo sudoers podrán usar la suya propia. Incluso se pueden configurar algunas restricciones para los miembros de dicho grupo, algo que no tiene root, puesto que tendrá privilegios totales.
#Más información
man su
man sudo
  • /etc/sudoers: para la configuración de sudo, ya sabes que se debe hacer desde este fichero. Aquí definirás todas las reglas, y podrás agregar usuarios para que puedan usar el comando. La configuración no es demasiado compleja, y te puede permitir agregar o quitar usuarios con estos privilegios, además de acotar las posibilidades de cada uno de ellos. Para ello puedes usar preferiblemente visudo, aunque también se pueden usar otros editores de texto. Recuerda que al hacerlo con visudo se está invocando realmente al editor de texto que se tenga configurado por defecto, y que además bloqueará el fichero para que nadie más lo pueda usar mientras lo editas por razones de seguridad/integridad (por ejemplo, para evitar que dos administradores pudieran hacer cambios a la vez). Otra de sus características es que, una vez editado, al cerrar el fichero, verifica que esté bien configurado (detecta errores de sintaxis). Por eso es preferible usar este comando para la edición y no editar el fichero directamente con otro editor.
#Más información
man visudo
man sudoers

Configurar sudoers

Para poder modificar este fichero, antes tienes que conocer la sintaxis y lo que te puedes encontrar en él. Y para comprenderlo más fácilmente, lo dividiremos en tres partes fundamentales:

El fichero se basa en la notación EBNF (Extended Backus-Naur Form).

  • Alias: puede referirse a un usuario, comando o equipo. Es un nombre que luego se definirá en la parte de reglas será referido bajo ciertos criterios. Se pueden usar más alias si se separan por :. Los nombres de los alias pueden contener letras (mayúsculas o minúsculas), números y guion bajo, pero debe comenzar por una letra mayúscula. En cualquier caso, pueden ser:
    • Cmnd_Alias: define alias de comandos.
    • User_Alias: define alias de usuarios normales y grupos del sistema. Si son grupos, el nombre irá precedido de %. También se pueden usar indicaciones especiales, como ALL para indicar que se admiten todos, o ! delante de un nombre para indicar que alguno queda excluido.
    • Runas_Alias: alias para usuarios de administración o con privilegios. Funciona de forma similar al anterior, pero también se pueden usar UIDs con el prefijo #.
    • Host_Alias: para definir hosts o equipos por su nombre. También se puede usar el nombre de dominio o la IP.
#Ejemplo de sintaxis
tipo_alias NOMBRE_DEL_ALIAS = elemento1, elemento2, elemento3, ... elementoN
  • Opciones (Defaults): la siguiente sección es la de opciones, y todas ellas van precedidas por la palabra reservada Defaults. Sirven para definir características de comportamiento para los alias creados. Las opciones se granulan en 4 niveles:
    • Globales: afectan a todos.
    • Usuario: solo a un usuario concreto.
    • Usuario privilegiado: para usuarios con privilegios.
    • Equipo (host): afecta a equipos enteros.
  • Reglas de acceso: son definiciones para controlar la seguridad, indicando a los usuarios que usan sudo de los comandos que pueden o no ejecutar.

Por cierto, cuidado con las líneas tipo usuario ALL=(ALL:ALL) ALL, ya que significa que el usuario puede tener privilegios ilimitados y puede ejecutar cualquier comando en el sistema. Solo usuarios muy específicos deberían configurarse así:

  • usuario ALL=(ALL:ALL) ALL: el usuario que podrá usar sudo.
  • usuario ALL=(ALL:ALL) ALL: indica que la regla se aplica a cualquier anfitrión (host). Es decir, que se puede ejecutar sudo desde cualquier anfitrión.
  • usuario ALL=(ALL:ALL) ALL: podrá usar todos los comandos de cualquier otro usuario.
  • usuario ALL=(ALL:ALL) ALL: podrá usar todos los comandos de cualquier grupo.
  • usuario ALL=(ALL:ALL) ALL: las reglas se aplican a todos los comandos, es decir, todos los comandos pueden ser ejecutados.

Es decir, es sería algo así:

nombre_usuario HOST=(USUARIO:GRUPO) COMANDOS

Ejemplo de /etc/sudoers (comentado)

Aquí te dejo un fichero de configuración comentado que he creado para que puedas ver de una forma más intuitiva todo lo comentado hasta el momento:

# ***********************
# DEFINCION DE ALIAS
# ***********************

# administradores con todos los privilegios (isaac y nathalie), se excluye a smarta
User_Alias ADMINS = isaac, nathalie, !smarta

# supervisores del sistema
User_Alias SUPERV = lucas, keyla, %supervisores

# servidores web
Host_Alias WEBSERVERS = 10.0.1.100, 10.0.1.101

# comandos permitidos
Cmnd_Alias REDES = /usr/bin/shutdown, /sbin/ifconfig, /sbin/iptables

# ***********************
# DEFINCION DE OPCIONES
# ***********************

# Solo usuarios administradores, requieren autentificarse con la contraseña de 'root'
Defaults>ADMINS rootpw

# Para todos los usuarios: intentos y tiempo par la contraseña
Defaults passwd_tries = 4, passwd_timeout = 1

# Máscara de directorios y archivos por defecto, para los que ejecuten sudo de un grupo
Defaults @WEBSERVERS umask = 022

# ***********************
# DEFINCION DE REGLAS
# ***********************

# administradores todo se les permite en cualquier equipo
ADMINS ALL = (ALL) ALL

# administradores de red, se les permiten los comandos de red definidos anteriormente en los alias
WEBSERVERS ALL = REDES

# TAMBIÉN SE PUEDEN ESPECIFICAR DIRECTAMENTE ALGUNAS REGLAS NO DEFINIDAS EN LOS ALIAS:
# el usuario tecnico puede cambiar contraseñas de cualquier usuario menos de root
tecnico ALL = /usr/bin/passwd *, !/usr/bin/passwd root

# loli puede apagar los equipos WEBSERVERS
loli WEBSERVERS = /sbin/shutdown, /sbin/halt

# isaac puede reiniciar (no apagar)
isaac WEBSERVERS = /sbin/shutdown -r now

# añadimos el usuario karlek al sudoers para que pueda usar sudo con todos los privilegios
karlek ALL=(ALL:ALL) ALL

Isaac

Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto:

Si continuas utilizando este sitio aceptas el uso de cookies. más información

Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

Cerrar