LFCA: Cómo mejorar la seguridad del sistema Linux - Parte 20


Como todos sabemos, el usuario root es el rey y tiene privilegios ilimitados sobre el sistema Linux. Sin embargo, los usuarios no root están limitados a tareas básicas. Además, a los usuarios de sudo solo se les concede un cierto grado de privilegios de root según lo considere adecuado el usuario root para realizar tareas elevadas específicas.

Los problemas surgen cuando los usuarios habituales tienen acceso incontrolado a los recursos o se escalan a root sin querer. Este es un riesgo de seguridad grave que podría causar infracciones, modificaciones no deseadas y, en el peor de los casos, el bloqueo del sistema. Otro riesgo potencial es cuando los archivos tienen permisos de archivo menos seguros. Por ejemplo, los archivos de arranque con permisos de escritura para usuarios globales podrían modificarse o dañarse fácilmente, lo que daría como resultado un sistema roto.

[También le puede interesar: Consejos útiles para proteger los datos y Linux]

Si bien podemos implementar seguridad física, de red y de datos, un usuario malintencionado puede eludir las medidas de seguridad y aprovechar tales lagunas de seguridad. Es por esta razón que la seguridad del sistema de archivos debe tomarse en serio. Proporciona una capa adicional de defensa frente a ataques o amenazas internas de empleados malintencionados que no tienen que hacer el trabajo pesado de eludir las medidas de seguridad para acceder a los archivos.

En seguridad del sistema, nos concentraremos en los siguientes puntos clave:

  • Derechos de acceso: permisos de usuarios y grupos.
  • Haga cumplir las políticas de contraseñas con el módulo PAM.

Derechos de acceso: separación de usuarios y grupos

Probablemente debe haber escuchado que todo en Linux se considera un archivo. Y si no es así, es un proceso. Cada archivo en un sistema Linux es propiedad de un usuario y un usuario de grupo. También tiene permisos de archivo para 3 categorías de usuarios: Usuario (u), Grupo (g) y Otros (o). Los permisos se representan en lectura, escritura y ejecución (rwx) para cada categoría de usuario.

rwx        rwx	     rwx
User       Group     Others

Como se vio antes, en el comando ls como se muestra.

$ ls -l

Solo para recapitular, los permisos suelen estar representados por nueve caracteres. Los primeros tres caracteres representan los derechos de acceso del usuario real que posee el archivo. El segundo conjunto de caracteres representa los permisos del propietario del grupo del archivo. Finalmente, el último conjunto para otros usuarios o usuarios globales. Estos caracteres están perpetuamente en el orden de lectura, escritura y ejecución (rwx).

Después de los permisos, tenemos la propiedad de usuarios y grupos, seguidos del tamaño del archivo o directorio, la fecha de modificación y, por último, el nombre del archivo.

Cambio de propiedad y permisos de archivos/directorios

Los permisos de usuario de archivos y directorios se pueden modificar según se considere oportuno. La regla general es utilizar el principio de seguridad de privilegios mínimos. En pocas palabras, asegúrese de que los usuarios obtengan los derechos o permisos de acceso mínimos necesarios para realizar el trabajo.

El principio de privilegios mínimos restringe a los usuarios a ciertos roles únicamente y, al hacerlo, minimiza el riesgo de que los atacantes accedan y modifiquen datos críticos al aprovechar una cuenta de usuario de bajo nivel. También reduce la superficie de ataque y limita la propagación del malware en caso de que el atacante tome el control de su sistema.

Por lo tanto, si un usuario solo necesita ver el contenido de un archivo o directorio, no se le deben otorgar permisos de ejecución o escritura. En el nivel más básico, solo otorgue los permisos y propiedades mínimos requeridos por el usuario para realizar las tareas. Hemos abordado cómo modificar los permisos y las propiedades de los usuarios en archivos/directorios usando los comandos chmod y chown en el tema de los comandos básicos de Linux.

Para que el administrador del sistema tenga más facilidad para administrar los permisos, se pueden otorgar permisos especiales o derechos de acceso a directorios completos. Uno de los permisos especiales que se pueden aplicar para restringir la eliminación y modificación de un archivo o directorio es el bit adhesivo.

En un escenario en el que todos los usuarios del sistema o la red pueden acceder a un directorio compartido, existe el riesgo potencial de que algunos usuarios puedan eliminar o modificar los archivos dentro del directorio. Esto no es deseado si desea mantener la integridad del contenido del directorio. Y aquí es donde entra la parte pegajosa.

Un bit adhesivo es un permiso de archivo especial establecido en un archivo o directorio completo. Solo le otorga al propietario de ese archivo/directorio el permiso para eliminar o realizar cambios en el contenido del archivo o directorio. Ningún otro usuario puede eliminar o modificar el archivo/directorio. Tiene el valor simbólico de t y un valor numérico de 1000.

Para activar un bit pegajoso en un directorio, use el comando chmod de la siguiente manera:

$ chmod +t directory_name

En el siguiente ejemplo, hemos aplicado un bit adhesivo al directorio llamado test. En el caso de un directorio, todo el contenido heredará los permisos del bit adhesivo. Puede verificar los permisos de los sticky bit usando el comando ls -ld. Asegúrese de notar el símbolo t al final de los permisos del archivo.

$ ls -ld test

Si otro usuario intenta eliminar el directorio o modificar el archivo dentro del directorio, recibe un error de Permiso denegado.

Y esa es la esencia del permiso de archivo de bits de palo.

El SUID (Establecer ID de usuario) es otro permiso de archivo especial que permite a otro usuario regular ejecutar un archivo con los permisos de archivo del propietario del archivo. Por lo general, se indica con un valor simbólico s en la parte del usuario de los permisos de archivo en lugar de un x que representa los permisos de ejecución. El SUID tiene un valor numérico de 4000.

El SGID (Establecer ID de grupo) permite a un usuario regular heredar los permisos de grupo del propietario del grupo de archivos. En lugar del x para los permisos de ejecución, verá un s en la parte del grupo de los permisos del archivo. El SGID tiene un valor numérico de 2000.

Por muy convenientes que resulten, los permisos SUID y SGID están asociados con riesgos de seguridad y deben evitarse a toda costa. Esto se debe a que otorgan privilegios especiales a los usuarios habituales. Si un intruso que se hace pasar por un usuario normal se encuentra con un archivo ejecutable propiedad del usuario root con un bit SUID configurado, puede usar esa laguna y explotar el sistema.

Para encontrar todos los archivos con el bit SUID configurado en Linux, ejecute el comando find como usuario root.

$ find / -perm -4000 type -f

Para directorios ejecutados:

$ find / -perm -4000 type -d

Para encontrar todos los archivos con el conjunto de bits SGID, ejecute:

$ find / -perm -2000 type -f

Para ejecutar directorios:

$ find / -perm -2000 type -d

Para eliminar el bit SUID en un archivo, ejecute el comando chmod como se muestra:

$ chmod u-s /path/to/file

Para eliminar el bit SGID en un archivo, ejecute el comando:

$ chmod g-s filename /path/to/file

No es raro que los usuarios establezcan contraseñas débiles. Un buen número establece contraseñas cortas, sencillas y fáciles de adivinar para evitar olvidarlas durante el inicio de sesión. Si bien es conveniente, las contraseñas débiles se pueden violar fácilmente utilizando scripts de ataque de fuerza bruta.

El módulo PAM (Módulo de autenticación conectable) es un módulo que permite a los administradores del sistema hacer cumplir las políticas de contraseña en los sistemas Linux. Para lograr esto, necesita el módulo pam_pwquality proporcionado por la biblioteca libpam_pwquality. El módulo pam_pwquality verifica la fuerza de una contraseña con un conjunto de reglas y un diccionario del sistema y señala las opciones de contraseña débiles.

Para instalar el módulo pam_pwquality en Ubuntu 18.04 y versiones posteriores, ejecute:

$ sudo apt install libpam_pwquality

Para RHEL/CentOS 8, ejecute el comando:

$ sudo dnf install libpwquality

El archivo de configuración se encuentra en la siguiente ubicación:

  • En sistemas Debian: /etc/pam.d/common-password
  • En RedHat Systems: /etc/pam.d/system-auth

Antes de comenzar a modificar el archivo de configuración de PAM, consideremos primero recopilar información sobre los controles de antigüedad de las contraseñas.

Estos se pueden encontrar en el archivo /etc/login.defs.

El archivo contiene los siguientes controles de contraseña clave:

  • PASS_MAX_DAYS: número máximo de días que se puede utilizar una contraseña.
  • PASS_MIN_DAYS: número mínimo. de días permitidos entre cambios de contraseña.
  • PASS_WARN_AGE: número de días de advertencia antes de que caduque una contraseña.

Los valores predeterminados se indican a continuación.

El atributo PASS_MAX_DAYS limita la cantidad de días que un usuario puede usar su contraseña. Cuando se alcanza este valor o la contraseña caduca, el usuario se ve obligado a cambiar su contraseña para iniciar sesión en el sistema. De forma predeterminada, este valor se establece en 99999, que se traduce en 273 años. Esto no tiene mucho sentido en lo que respecta a la seguridad, ya que el usuario puede seguir usando su contraseña durante toda su vida.

Puede establecer esto en un valor significativo, digamos 30 días como se muestra.

PASS_MAX_DAYS  30

Transcurridos los 30 días, el usuario se verá obligado a cambiar su contraseña por otra diferente.

El atributo PASS_MIN_DAYS detalla la duración mínima que los usuarios pueden usar su contraseña antes de cambiarla. ¿Qué significa esto? Si, por ejemplo, este valor se establece en 15 días, el usuario no podrá volver a cambiar su contraseña antes de que transcurran 15 días.

PASS_MAX_DAYS  15

El atributo PASS_WARN_AGE especifica la cantidad de días que un usuario recibirá una advertencia sobre el vencimiento inminente de su contraseña antes de que caduque. Por ejemplo, puede establecer esto en 7 días como se muestra.

PASS_MAX_DAYS  7

NOTA: Estos controles de contraseña no funcionan con cuentas preexistentes. Solo se aplican a las nuevas cuentas creadas después de definir las reglas.

Antes de editar el archivo /etc/pam.d/common-password, cree una copia de seguridad. En este ejemplo, hemos creado el archivo de copia de seguridad common-password.bak.

$ sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

Luego abre el archivo.

$ sudo vim /etc/pam.d/common-password 

Busque la línea que se muestra a continuación.

password        requisite          pam_pwquality.so retry=3

La opción de reintento establece el número máximo de veces que debe ingresar la contraseña correcta antes de recibir un error. De forma predeterminada, se establece en 3. Esta es solo una opción y vamos a incluir varias opciones.

Agregue los siguientes atributos a la línea:

minlen=10 difok=3 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1 reject_username 

Desarrollemos estos atributos.

  • minlen u003d 10: establece el tamaño mínimo aceptable para la contraseña. En este caso, 10 caracteres.
  • difok u003d 3: este es el número máximo de caracteres que están presentes en la contraseña anterior.
  • lcredit u003d -1: este es el número mínimo de caracteres en minúscula que debe estar presente en la contraseña.
  • ucredit u003d -1: es el número máximo de caracteres en minúscula que debe estar presente en la contraseña.
  • dcredit u003d -1: el número mínimo de caracteres numéricos que se deben definir en la contraseña.
  • ocredit u003d -1: el número mínimo de caracteres especiales, por ejemplo, @, #, & que deben definirse en la contraseña.
  • rechazar_nombre_usuario: esta opción activa el rechazo de la contraseña si la contraseña es el nombre de usuario, ya sea en formato directo o inverso.

Si intenta crear un nuevo usuario que no cumpla con las políticas de contraseñas, se encontrará con los errores que se muestran.

Con esto concluye el tema sobre seguridad del sistema y fundamentos de seguridad en general. En todo el capítulo, hemos arrojado luz sobre las medidas de seguridad básicas que puede implementar para proteger su sistema Linux de usuarios malintencionados, como piratas informáticos o empleados descontentos.