Búsqueda de sitios web

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


Como todos sabemos, el usuario root es el rey y ejerce 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 son escalados a root sin querer. Se trata de un grave riesgo de seguridad que podría provocar infracciones, modificaciones no deseadas y, en el peor de los casos, la caída 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 corromperse fácilmente, lo que provocaría un sistema dañado.

Si bien podemos implementar seguridad física, de red y de datos, un usuario malintencionado puede eludir las medidas de seguridad y aprovechar dichas lagunas de seguridad. Es por este motivo 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 usuario y grupo.
  • Haga cumplir las políticas de contraseñas con el módulo PAM.

Derechos de acceso: separación de usuarios y grupos

Probablemente hayas oído 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 archivos 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 la sección de conceptos básicos de Linux, puede ver los permisos de archivos usando el formato largo del comando ls como se muestra.

ls -l

Para resumir, los permisos suelen estar representados por nueve caracteres. Los primeros tres caracteres representan los derechos de acceso del usuario real propietario del archivo. El segundo conjunto de caracteres representa los permisos del grupo propietario 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 las propiedades del usuario y del grupo, seguidas del tamaño del archivo o directorio, la fecha de modificación y, por último, el nombre del archivo.

Cambiar permisos y propiedades de archivos/directorios

Los permisos de usuario de archivos y directorios se pueden modificar según se considere conveniente. 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 de acceso o permisos 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 aprovechando una cuenta de usuario de bajo nivel. También reduce la superficie de ataque y limita la propagación de malware en caso de que el atacante tome el control de su sistema.

Por lo tanto, si un usuario sólo necesita ver el contenido de un archivo o directorio, no se le deben conceder permisos de ejecución o escritura. En un nivel muy básico, solo otorgue la menor cantidad de permisos y propiedades 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 comandos básicos de Linux.

Modo de permiso de bits fijos

Para que al administrador del sistema le resulte más fácil 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.

poco pegajoso

En un escenario en el que todos los usuarios del sistema o la red pueden acceder a un directorio compartido, existe un 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. Otorga sólo 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 fijo 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 prueba. En el caso de un directorio, todos los contenidos heredarán los permisos de bits fijos. Puede verificar los permisos de los bits adhesivos utilizando 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, recibirá un error Permiso denegado.

Y esa es la esencia del permiso del archivo Stick Bit.

Monitoreo de permisos SUID y SGID

El SUID (Establecer ID de usuario) es otro permiso de archivo especial que permite a otro usuario normal 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 de los permisos de archivo del usuario 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 normal heredar los permisos de grupo del propietario del grupo de archivos. En lugar de 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 encuentra un archivo ejecutable propiedad del usuario root con un bit SUID configurado, puede utilizar esa vulnerabilidad y explotar el sistema.

Para buscar todos los archivos con el bit SUID configurado en Linux, ejecute el comando de búsqueda como usuario root.

find / -perm -4000 type -f

Para directorios ejecute:

find / -perm -4000 type -d

Para encontrar todos los archivos con el bit SGID configurado, ejecute:

find / -perm -2000 type -f

Para directorios ejecute:

find / -perm -2000 type -d

Para eliminar el bit SUID de 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

Aplicar políticas de contraseñas con el módulo PAM

No es raro que los usuarios establezcan contraseñas débiles. Un buen número establece contraseñas breves, sencillas y fáciles de adivinar para evitar olvidarlas al iniciar sesión. Si bien son convenientes, las contraseñas débiles se pueden violar fácilmente mediante 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 de sistemas aplicar políticas de contraseñas en sistemas Linux. Para lograr esto, necesita el módulo pam_pwquality proporcionado por la biblioteca libpam_pwquality. El módulo pam_pwquality comprueba la seguridad de una contraseña comparándola con un conjunto de reglas y un diccionario del sistema e identifica opciones de contraseñas 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 sistemas RedHat: /etc/pam.d/system-auth

Configurar la política de contraseñas

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

Detalles de antigüedad de la contraseña

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 que se dan antes de que caduque una contraseña.

Los valores predeterminados se indican a continuación.

El atributo PASS_MAX_DAYS limita el número de días que un usuario puede utilizar su contraseña. Cuando se alcanza este valor o la contraseña caduca, el usuario se ve obligado a cambiar su contraseña para poder iniciar sesión en el sistema. De forma predeterminada, este valor está establecido en 99999, lo 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 establecerlo en un valor significativo, digamos 30 días, como se muestra.

PASS_MAX_DAYS  30

Transcurridos 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é quiere decir 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 el número de días que un usuario recibirá una advertencia sobre la inminente caducidad de su contraseña antes de que caduque. Por ejemplo, puede configurarlo en 7 días como se muestra.

PASS_MAX_DAYS  7

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

Configuración de la complejidad de la contraseña con el módulo PAM

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 abra el archivo.

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

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

password        requisite          pam_pwquality.so retry=3

La opción reintentar establece el número máximo de veces que debe ingresar la contraseña correcta antes de recibir un error. De forma predeterminada, está configurado 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=10: establece el tamaño mínimo aceptable para la contraseña. En este caso, 10 caracteres.
  • difok=3: Este es el número máximo de caracteres que están presentes en la contraseña anterior.
  • lcredit=-1: Este es el número mínimo de caracteres en minúscula que deben estar presentes en la contraseña.
  • ucredit=-1: es el número máximo de caracteres en minúscula que deben estar presentes en la contraseña.
  • dcredit=-1: El número mínimo de caracteres numéricos que se deben definir en la contraseña.
  • ocredit=-1: el número mínimo de caracteres especiales, por ejemplo @, #, & que deben definirse en la contraseña.
  • reject_username: 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 cumple con las políticas de contraseña, se encontrará con errores como los que se muestran.

Resumen

Con esto concluye el tema sobre la seguridad del sistema y los 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.