Llegamos a ustedes gracias a:



Reportajes y análisis

15 pasos para un servidor Linux seguro

[02/02/2017] La mayoría de las personas asumen que Linux es seguro, y eso es una suposición falsa. Imagine que su computadora portátil sea robada sin haberla reforzado. Un ladrón probablemente asumirá que su nombre de usuario es "root" y su contraseña es "toor", ya que esa es la contraseña predeterminada en Kali y la mayoría de la gente sigue usándola. ¿Usted también? Espero que no.

Las consecuencias negativas de elegir no fortalecer su host Kali Linux son graves, por lo que voy a compartir las medidas necesarias para que su servidor Linux esté seguro, incluyendo la forma en que utilizo pruebas de penetración y Kali Linux, para hacer el trabajo. Es importante tener en cuenta que, si bien existen muchas distribuciones (también conocidas como distros) de Linux y cada una difiere de la perspectiva de la línea de comandos, la lógica es la misma. Utilice los siguientes consejos para fortalecer su propio cuadro de Linux.

1. Documentar la información del host

Cada vez que haga un nuevo trabajo de fortalecimiento de Linux, debe crear un nuevo documento que contenga todos los elementos de la lista de verificación enumerados en esta publicación, y debe activar cada elemento que haya aplicado. Además, en la parte superior del documento, debe incluir la información del host Linux:

  • Nombre de la máquina
  • Dirección IP
  • Dirección MAC
  • Nombre de la persona que está haciendo el fortalecimiento (lo más probable es que sea usted)
  • Fecha
  • Número de activo (si está trabajando para una empresa, debe incluir el número de activo que su empresa utiliza para etiquetar hosts).

2. Protección de BIOS

Es necesario proteger el BIOS del host con una contraseña para que el usuario final no pueda cambiar y anular la configuración de seguridad en el BIOS; Es importante mantener esta área protegida de cualquier cambio. Cada fabricante de equipo tiene un conjunto diferente de claves para entrar en el modo BIOS, entonces es una cuestión de encontrar la configuración donde se establece la contraseña administrativa.

A continuación, debe desactivar el arranque desde dispositivos de medios externos (USB/CD/DVD). Si omite cambiar esta configuración, cualquiera puede utilizar una memoria USB que contenga un sistema operativo de arranque y puede acceder a los datos de su sistema operativo.

Las placas base de los servidores más recientes tienen un servidor web interno a donde puede acceder de forma remota. Asegúrese de cambiar la contraseña predeterminada de la página de administración o desactivarla si es posible.

3. Encriptación de disco duro (confidencialidad)

La mayoría de las distribuciones de Linux le permitirán encriptar sus discos antes de la instalación. El cifrado del disco es importante en caso de robo, ya que la persona que robó su computadora no podrá leer sus datos si conectan el disco duro a su máquina.

En la imagen de abajo, elija la tercera opción de la lista: Guided -use de todo el disco y configure el cifrado LVM (LVM representa el administrador de volúmenes lógicos por sus siglas en inglés).

Servidores Linux

Si su distribución de Linux no admite el cifrado, puede elegir un software como TrueCrypt.

Servidores Linux

4. Protección de discos (disponibilidad)

Las copias de seguridad tienen muchas ventajas en caso de un sistema dañado, errores en la actualización del sistema operativo. Para los servidores importantes, la copia de seguridad debe transferirse fuera del sitio en caso de un desastre. La copia de seguridad también debe administrarse. Por ejemplo, ¿cuánto tiempo mantendrá las copias de seguridad viejas? ¿Cuándo necesita hacer una copia de seguridad de su sistema (todos los días, cada semana ...)?

Los sistemas críticos deben ser separados en diferentes particiones para:

  • /
  • /boot
  • /usr
  • /hogar
  • /tmp
  • /var
  • /opt

La partición de discos le da la oportunidad de rendimiento y seguridad en caso de un error del sistema. En la imagen de abajo, puede ver la opción de cómo separar las particiones en Kali Linux durante la instalación.

Servidores Linux

5. Bloquear el directorio de arranque

El directorio de arranque contiene archivos importantes relacionados con el kernel de Linux, por lo que debe asegurarse de que este directorio esté bloqueado a permisos de solo lectura siguiendo los siguientes pasos simples. Primero, abra el archivo "fstab".

Servidores Linux

A continuación, agregue la última línea resaltada en la parte inferior.

Servidores Linux

Cuando termine de editar el archivo, deberá configurar el propietario ejecutando el siguiente comando:

  • #chown raíz: root /etc/fstab
  • A continuación, establecí algunos permisos para proteger la configuración de inicio:
  • * Establezca el propietario y el grupo de /etc/grub.conf en el usuario root:
  • #chown root:root /etc/grub.conf
  • * Establecer permiso en el archivo /etc/grub.conf para leer y escribir solo para root:
  • #chmod og-rwx /etc/grub.conf
  • * Requerir autenticación para el modo de usuario único:
    • #sed -i "/SINGLE/s/sushell/sulogin/" /etc/sysconfig/init
    • #sed -i "/PROMPT/s/yes/no/" /etc/sysconfig/init

6. Desactivar el uso USB

Dependiendo de lo crítico que sea su sistema, a veces es necesario deshabilitar el uso de USB sticks en el host Linux. Hay varias formas de denegar el uso del almacenamiento USB; Aquí está uno popular:

Abra el archivo "blacklist.conf" usando su editor de texto favorito:

  • #nano/etc/modprobe.d/blacklist.conf
  • Cuando se abra el archivo, añada la siguiente línea al final del archivo (guardar y cerrar):
  • blacklist usb_storage
  • Después de esto, abra el archivo rc.local:
  • #nano/etc/rc.local

Por último, agregue las dos líneas siguientes:

  • modprobe-r usb_storage
  • exit 0

7. Actualización del sistema

Lo primero que hay que hacer después del primer arranque es actualizar el sistema. Esto debe ser un paso fácil. Generalmente, abre la ventana de terminal y ejecuta los comandos apropiados. En Kali Linux, se logra esto ejecutando los comandos en la siguiente imagen:

Servidores Linux
Servidores Linux

8. Compruebe los paquetes instalados

Liste todos los paquetes instalados en su sistema operativo Linux y elimine los innecesarios. Debe ser muy estricto si el host que intenta fortalecer es un servidor, porque los servidores necesitan el menor número de aplicaciones y servicios instalados en ellos. A continuación, se muestra un ejemplo de cómo enumerar los paquetes instalados en Kali Linux:

Servidores Linux

Recuerde que la inhabilitación de servicios innecesarios reducirá la superficie de ataque, por lo que es importante eliminar los siguientes servicios heredados si los encontró instalados en el servidor Linux:

  • Servidor Telnet
  • Servidor RSH
  • Servidor NIS
  • Servidor TFTP
  • Servidor TALK

9. Compruebe si hay puertos abiertos

Identificar conexiones abiertas a Internet es una misión crítica. En Kali Linux, utilizo el siguiente comando para detectar cualquier puerto abierto oculto:

Servidores Linux

10. Secure SSH

Sí, de hecho, SSH es seguro, pero necesita fortalecer este servicio también. En primer lugar, si puede deshabilitar SSH, es un problema resuelto. Sin embargo, si desea utilizarlo, tendrá que cambiar la configuración predeterminada de SSH. Para hacerlo, vaya a /etc/ssh y abra el archivo "sshd_config" utilizando su editor de texto favorito.

Servidores Linux

* Cambie el número de puerto predeterminado 22 a otra cosa, por ejemplo, 99.

* Asegúrese de que root no pueda iniciar sesión remotamente a través de SSH:

PermitRootLogin no

* Permita a algunos usuarios específicos:

AllowUsers [nombre de usuario]

La lista puede seguir y seguir, pero estos deben ser suficientes para empezar. Por ejemplo, algunas compañías añaden banners para disuadir a los atacantes y desalentarlos de continuar más allá. Le animo a que compruebe el manual de la SSH para entender todas las configuraciones en este archivo, o puede visitar este sitio para más información.

Estas son algunas opciones adicionales que necesita asegurarse de que existen en el archivo "sshd_config":

  • Protocolo2
  • IgnoreRhosts sí
  • HostbasedAuthentication no
  • PermitEmptyPasswords no
  • X11Forwarding no
  • MaxAuthTries 5
  • Ciphers aes128-ctr, aes192-ctr, aes256-ctr
  • ClientAliveInterval 900
  • ClientAliveCountMax 0
  • UsePAM sí

Por último, establezca los permisos en el archivo sshd_config para que solo los usuarios root puedan cambiar su contenido:

  • #chown root:root /etc/ssh/sshd_config
  • #chmod 600 /etc/ssh/sshd_config

11. Habilitar SELinux

Security Enhanced Linux es un mecanismo de seguridad del kernel para apoyar la política de seguridad de control de acceso. El SELinux tiene tres modos de configuración:

  • Deshabilitado: desactivado
  • Permisivo: imprime advertencias
  • Cumplimiento: se refuerza la política

Utilizando un editor de texto, abra el archivo de configuración:

  • #nano/etc/selinux/config
  • Y asegúrese de que la política se aplica:
  • SELINUX = reforzar
Servidores Linux

12. Parámetros de red

Asegurar las actividades de la red de host de Linux es una tarea esencial. No asuma siempre que su firewall se ocupará de todo. Estas son algunas de las características importantes a considerar para proteger su red de host:

* Deshabilite el reenvío IP estableciendo el parámetro net.ipv4.ip_forward en 0 en "/etc/sysctl.conf"

* Desactive los redireccionamientos de envío de paquetes estableciendo los parámetros net.ipv4.conf.all.send_redirects y net.ipv4.conf.default.send_redirects a 0 en "/etc/sysctl.conf"

* Desactive la aceptación de redireccionamiento ICMP estableciendo los parámetros net.ipv4.conf.all.accept_redirects y net.ipv4.conf.default.accept_redirects en 0 en "/etc/sysctl.conf"

* Habilite la protección de mensajes de error al establecer el parámetro net.ipv4.icmp_ignore_bogus_error_responses en 1 en "/etc/sysctl.conf"

Recomiendo encarecidamente el uso de Linux Firewall aplicando las reglas 'iptable' y filtrando todos los paquetes entrantes, salientes y reenviados. Configurar las reglas iptable tomará algún tiempo, pero vale la pena el sufrimiento.

13. Políticas de contraseñas

La gente a menudo reutiliza sus contraseñas, lo cual es una mala práctica de seguridad. Las contraseñas antiguas se almacenan en el archivo "/etc/security/opasswd". Vamos a utilizar el módulo PAM para administrar las políticas de seguridad del host Linux. En una distribución Debian, abra el archivo "/etc/pam.d/common-password" utilizando un editor de texto y añada las dos líneas siguientes:

auth sufficient pam_unix.so likeauth nullok

passwordsufficientpam_unix.so remember=4 (no permitirá que los usuarios reutilicen las últimas cuatro contraseñas).

Otra política de contraseñas que se debe forzar es la de contraseñas seguras. El módulo PAM ofrece un pam_cracklib que protege su servidor de los ataques de diccionario y de fuerza bruta. Para realizar esta tarea, abra el archivo /etc/pam.d/system-auth utilizando cualquier editor de texto y añada la siguiente línea:

/lib/security/$ISA/pam_cracklib.so retry=3 minlen= 8 lcredit =-1 ucredit=-2 dcredit=-2 ocredit =-1

Linux cortará la contraseña para evitar guardarla en cleartext así que, necesita cerciorarse de definir un algoritmo seguro del hashing de la contraseña SHA512.

Otra funcionalidad interesante es bloquear la cuenta después de cinco intentos fallidos. Para que esto suceda, debe abrir el archivo "/etc/pam.d/password-auth" y añadir las siguientes líneas:

  • auth required pam_env.so
  • auth required pam_faillock.so preauth audit silent deny = 5 unlock_time = 604800
  • auth [success= 1 default=bad] pam_unix.so
  • auth [default =die] pam_faillock.so authfail audit deny = 5 unlock_time = 604800
  • auth sufficient pam_faillock.so authsucc audit deny = 5 unlock_time = 604800
  • auth required pam_deny.so

No hemos terminado todavía; se necesita un paso adicional. Abra el archivo "/etc/pam.d/system-auth" y asegúrese de que tiene las siguientes líneas añadidas:

  • auth required pam_env.so
  • auth required pam_faillock.so preauth audit silent deny = 5 unlock_time = 604800
  • auth [success = 1 default=bad] pam_unix.so
  • auth [default = die] pam_faillock.so authfail audit deny = 5 unlock_time = 604800
  • auth sufficient pam_faillock.so authsucc audit deny = 5 unlock_time = 604800
  • auth required pam_deny.so

Después de cinco intentos fallidos, solo un administrador puede desbloquear la cuenta mediante el siguiente comando:

#/usr/sbin/faillock--user <userlocked> --reset

Además, otra buena práctica es configurar la contraseña para que expire después de 90 días, para llevar a cabo esta tarea es necesario:

* Establecer el parámetro PASS_MAX_DAYS en 90 en "/etc/login.defs"

* Cambiar el usuario activo ejecutando el siguiente comando:

#chage --maxdays 90 <usuario>

El siguiente consejo para mejorar las directivas de contraseñas es restringir el acceso al comando estableciendo los parámetros pam_wheel.so en "/etc/pam.d/su":

auth required pam_wheel.so use_uid

La última sugerencia para la política de contraseñas es deshabilitar las cuentas de sistema para los usuarios que no son de la root mediante el siguiente script bash:

#!/bin/bash

para el usuario en `awk -F: '($ 3 <500) {print $ 1}' / etc / passwd`; hágalo

si [$ user! = "root"]

entonces

/usr/sbin/usermod -L $ usuario

si [$ user! = "Sync"] && [$ user! = "Shutdown"] && [$ user! = "Halt"]

Entonces /usr/sbin/usermod -s /sbin/nologin $ user

fi

fi

hecho

14. Permisos y verificaciones

Prepárese mentalmente porque esto va a ser una larga lista. Sin embargo, los permisos son una de las tareas más importantes y críticas para lograr el objetivo de seguridad en un host Linux.

Establezca el propietario y el permiso de usuario/grupo en "/etc/anacrontab", "/etc/crontab" y "/etc/cron.*" ejecutando los siguientes comandos:

  • #chown root:root /etc/anacrontab
  • #chmod og-rwx /etc/anacrontab
  • #chown root:root /etc/crontab
  • #chmod og-rwx /etc/crontab
  • #chown root:root /etc/cron.hourly
  • #chmod og-rwx /etc/cron.hourly
  • #chown root:root /etc/cron.daily
  • #chmod og-rwx /etc/cron.daily
  • #chown root:root /etc/cron.weekly
  • #chmod og-rwx /etc/cron.weekly
  • #chown root:root /etc/cron.monthly
  • #chmod og-rwx /etc/cron.monthly
  • #chown root:root /etc/cron.d
  • #chmod og-rwx /etc/cron.d

Establezca el derecho y los permisos en "/var/spool/cron" para "root crontab"

  • #chown root: root <crontabfile>
  • #chmod og-rwx <crontabfile>

Establezca al propietario de usuario/grupo y permiso en el archivo "passwd"

  • #chmod 644 /etc/passwd
  • #chown root:root /etc/passwd

Establezca propietario de usuario/grupo y permiso en el archivo "grupo"

  • #chmod 644 / etc / group
  • #chown root: root /etc/group

Establezca propietario de usuario/grupo y permiso en el archivo "sombra"

  • #chmod 600 / etc / shadow
  • #chown raíz: raíz / etc / shadow

Establezca el propietario y el permiso de usuario/grupo en el archivo "gshadow"

  • #chmod 600 / etc / gshadow
  • #chown root: root / etc / gshadow

15. Refuerzo adicional del proceso

Para este último elemento de la lista, incluyo algunos consejos adicionales que deben tenerse en cuenta al fortalecer un host Linux.

Primero, restrinja los volcados de núcleo:

  • Agregar el núcleo duro 0 al archivo "/etc/security/limits.conf"
  • Agregar fs.suid_dumpable = 0 al archivo "/etc/sysctl.conf"

En segundo lugar, configure Exec Shield mediante:

  • Agregar kernel.exec-shield = 1 al archivo "/etc/sysctl.conf"

En tercer lugar, habilite la ubicación de la memoria virtual asignada al azar mediante:

  • Agregar kernel.randomize_va_space = 2 al archivo "/etc/sysctl.conf"

Palabras finales

En este breve post, cubrimos muchas configuraciones importantes para la seguridad de Linux. Pero, acabamos de arañar la superficie de fortalecimiento de Linux -hay muchas configuraciones complejas. Para obtener más información sobre cómo fortalecer sus servidores Linux para una mejor seguridad, consulte mis cursos en Pluralsight.

Gus Khawaja es consultor de seguridad y autor en Pluralsight. Trabaja en seguridad, desarrollo de aplicaciones de TI y aplicaciones web y crea cursos para Pluralsight. Gus ha entregado y desarrollado con éxito soluciones de TI para empresas en todo Canadá. Después de muchos años de experiencia en informática, ha vuelto su atención a la ciberseguridad y la importancia que la seguridad aporta a este campo minado. Su pasión por el hacking ético mezclado con su experiencia en programación y TI lo convierten en un sabio multifascético en el campo de la informática.