Es fácil asumir que su servidor ya es seguro. No caigas en esta suposición y te abras a una (potencialmente costosa) brecha de seguridad. Endurecer su servidor Linux puede hacerse en 15 pasos. Lea más en el artículo de abajo, que fue publicado originalmente aquí en NetworkWorld.
La mayoría de la gente asume que Linux ya es seguro, y esa es una falsa suposición. Imagine que me roban mi portátil (o el suyo) sin que primero se endurezca. Un ladrón probablemente asumiría que mi nombre de usuario es «root» y mi contraseña es «toor», ya que es la contraseña por defecto de Kali y la mayoría de la gente sigue usándola. ¿Y tú? Espero que no.
Las implicaciones negativas para la carrera de elegir no endurecer su anfitrión Linux de Kali son demasiado severas, por lo que compartiré todos los pasos necesarios para hacer que su anfitrión Linux sea seguro, incluyendo cómo uso las pruebas de penetración y Kali Linux para hacer el trabajo. Es importante saber que el sistema operativo Linux tiene tantas distribuciones (AKA distros) y cada una será diferente desde la perspectiva de la línea de comandos, pero la lógica es la misma. Use los siguientes consejos para endurecer su propia caja de Linux.
1. Documentar la información del anfitrión
Cada vez que trabaje en un nuevo trabajo de endurecimiento de Linux, necesita crear un nuevo documento que tenga todos los elementos de la lista de verificación que se enumeran en este post, y necesita marcar todos los elementos que aplicó en el sistema. Además, en la parte superior del documento, necesitas incluir la información del host de Linux:
- Nombre de la máquina
- Dirección IP
- Dirección de Mac
- Nombre de la persona que está haciendo el endurecimiento (probablemente usted)
- Fecha
- Número de activo (Si trabajas para una compañía, entonces necesitas incluir el número de activo que tu compañía usa para etiquetar a los anfitriones).
2. Protección del 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 del BIOS; es importante mantener esta área protegida de cualquier cambio. Cada fabricante de computadoras tiene un conjunto diferente de claves para ingresar al modo del BIOS, entonces es cuestión de encontrar la configuración en la que se establece la contraseña administrativa.
A continuación, debe desactivar el arranque desde dispositivos de medios externos (USB/CD/DVD). Si omites cambiar este ajuste, cualquiera puede usar una memoria USB que contenga un sistema operativo de arranque y pueda acceder a los datos de tu sistema operativo.
Las placas madre de los últimos servidores tienen un servidor web interno donde se puede acceder a ellos de forma remota. Asegúrate de cambiar la contraseña por defecto de la página de administración o deshabilitarla si es posible.
3. Cifrado del disco duro (confidencialidad)
La mayoría de las distribuciones de Linux le permitirán encriptar sus discos antes de la instalación. La encriptación de los discos es importante en caso de robo porque la persona que robó su ordenador no podrá leer sus datos si conecta el disco duro a su máquina.
En la imagen de abajo, elige la tercera opción de la lista: Guiar-usar el disco entero y configurar el LVM encriptado (LVM significa administrador de volumen lógico.)
Si tu distribución de Linux no soporta la encriptación, puedes usar un software como TrueCrypt.
4. Protección del disco (disponibilidad)
Las copias de seguridad tienen tantas ventajas en caso de un sistema dañado, errores en la actualización del sistema operativo. En el caso de servidores importantes, la copia de seguridad debe ser transferida fuera del sitio en caso de un desastre. La copia de seguridad necesita ser administrada también. Por ejemplo, ¿cuánto tiempo mantendrá las copias de seguridad antiguas? ¿Cuándo necesitas hacer una copia de seguridad de tu sistema (todos los días, todas las semanas…)?
Los sistemas críticos deben ser separados en diferentes particiones para:
- /
- /boot
- /usr
- /home
- /tmp
- /var
- /opt
El fraccionamiento de los discos le da la oportunidad de rendimiento y seguridad en caso de un error del sistema. En la siguiente imagen, puede ver la opción de cómo separar las particiones en Kali Linux durante la instalación.
5. Bloquea el directorio de arranque
El directorio de arranque contiene archivos importantes relacionados con el kernel de Linux, así que debes asegurarte de que este directorio está bloqueado para los permisos de sólo lectura siguiendo los siguientes pasos sencillos. Primero, abre el archivo «fstab».
Luego, agregue la última línea resaltada en la parte inferior.
Cuando termine de editar el archivo, debe establecer el propietario ejecutando el siguiente comando:
#chown root:root /etc/fstab
A continuación, establecí algunos permisos para asegurar la configuración de arranque:
- Ponga el propietario y el grupo de /etc/grub.conf en el usuario raíz:
- #chown root:root /etc/grub.conf
- Establezca el permiso en el archivo /etc/grub.conf para leer y escribir sólo para la raíz:
- #chmod og-rwx /etc/grub.conf
- Requiere autenticación para el modo de usuario único:
- #sed -i «/Solo/sushell/sulogin/» /etc/sysconfig/init
- #sed -i «/PROMPT/s/si/no/» /etc/sysconfig/init
6. Deshabilitar el uso del USB
Dependiendo de lo crítico que sea su sistema, a veces es necesario deshabilitar el uso de las memorias USB en el host de Linux. Hay múltiples maneras de negar el uso de la memoria USB; aquí hay una popular:
Abre el archivo «blacklist.conf» usando tu 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):
lista negra usb_storage
Después de esto, abre el archivo rc.local:
##nano /etc/rc.local
Finalmente, agregue las siguientes dos líneas:
modprobe -r usb_storageexit 0
7. Actualización del sistema
Lo primero que hay que hacer después del primer arranque es actualizar el sistema; este debería ser un paso fácil. Generalmente, se abre la ventana de la terminal y se ejecutan los comandos apropiados. En Kali Linux, esto se logra ejecutando los comandos de la siguiente imagen:
8. Compruebe los paquetes instalados
Haga una lista de todos los paquetes instalados en su sistema operativo Linux y elimine los innecesarios. Debes ser muy estricto si el host que intentas endurecer es un servidor porque los servidores necesitan el menor número de aplicaciones y servicios instalados en ellos. Aquí hay un ejemplo de cómo listar los paquetes instalados en Kali Linux:
Recuerde que desactivar los 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. Comprobar si hay puertos abiertos
Identificar las conexiones abiertas a Internet es una misión crítica. En Kali Linux, uso el siguiente comando para detectar cualquier puerto abierto oculto:
10. Asegurar SSH
Sí, de hecho la SSH es segura, pero necesitas endurecer este servicio también. Primero que nada, si puedes deshabilitar SSH, ese es un problema resuelto. Sin embargo, si quieres usarlo, entonces tienes que cambiar la configuración por defecto de SSH. Para hacerlo, navega a /etc/ssh y abre el archivo «sshd_config» usando tu editor de texto favorito.
- Cambie el puerto predeterminado número 22 por otro, por ejemplo, 99.
- Asegúrate de que la raíz no pueda acceder remotamente a través de SSH:
- PermitRootLogin no
- Permitir algunos usuarios específicos:
- AllowUsers [nombre de usuario]
La lista puede seguir y seguir, pero esto debería ser suficiente para empezar. Por ejemplo, algunas empresas añaden pancartas para disuadir a los atacantes y desanimarlos a seguir adelante. Los animo a revisar el manual del SSH para entender todas las configuraciones en este archivo, o pueden visitar este sitio para más información.
Aquí hay algunas opciones adicionales que necesitas para asegurarte de que existen en el archivo «sshd_config»:
- Protocolo2
- IgnorarRhosts a sí
- HostbasedAuthentication no
- PermitEmptyContraseñas vacías no
- X11Reenvío no
- MaxAuthTries 5
- Cifras aes128-ctr,aes192-ctr,aes256-ctr
- ClientAliveInterval 900
- ClientAliveCountMax 0
- UsePAM sí
Por último, establezca los permisos del archivo sshd_config para que sólo los usuarios root puedan cambiar su contenido:
#chown root:root /etc/ssh/sshd_config#chmod 600 /etc/ssh/sshd_config
11. Habilitar SELinux
El Linux de seguridad mejorada es un mecanismo de seguridad del núcleo para apoyar la política de seguridad del control de acceso. El SELinux tiene tres modos de configuración:
- Discapacitado: Apagado
- Permisivo: Imprime advertencias
- Hacer cumplir: La política se hace cumplir
Usando un editor de texto, abre el archivo de configuración:
##nano /etc/selinux/config
Y asegúrese de que la política se cumpla:
SELINUX=enforzamiento
12. Parámetros de red
Asegurar las actividades de la red de su anfitrión Linux es una tarea esencial. No siempre asuma que su cortafuegos se encargará de todo. Aquí hay algunas características importantes a considerar para asegurar su red de acogida:
- Deshabilite el reenvío de IP poniendo el parámetro net.ipv4.ip_forward a 0 en «/etc/sysctl.conf»
- Deshabilitar las redirecciones de paquetes de envío estableciendo los parámetros net.ipv4.conf.all.send_redirects y net.ipv4.conf.default.send_redirects a 0 en «/etc/sysctl.conf»
- Deshabilite la aceptación de redireccionamiento ICMP estableciendo los parámetros net.ipv4.conf.all.accept_redirects y net.ipv4.conf.default.accept_redirects a 0 en «/etc/sysctl.conf»
- Habilitar la protección de mensajes de error malo estableciendo el parámetro net.ipv4.icmp_ignore_bogus_error_responses a 1 en «/etc/sysctl.conf»
Recomiendo encarecidamente usar el Firewall de Linux aplicando las reglas de iptable y filtrando todos los paquetes entrantes, salientes y reenviados. Configurar las reglas de iptables llevará algún tiempo, pero vale la pena.
13. Políticas de contraseñas
La gente suele reutilizar sus contraseñas, lo que es una mala práctica de seguridad. Las viejas contraseñas se almacenan en el archivo «/etc/security/opasswd». Vamos a utilizar el módulo PAM para gestionar las políticas de seguridad del host de Linux. Bajo una distro de debian, abre el archivo «/etc/pam.d/common-password» usando un editor de texto y añade las siguientes dos líneas:
auth suficiente pam_unix.so likeauth nullokpassword suficiente pam_unix.so remember=4
(No permitirá a los usuarios reutilizar las últimas cuatro contraseñas.)
Otra política de contraseñas que debería ser forzada son las contraseñas fuertes. El módulo PAM ofrece una pam_cracklib que protege a su servidor de los ataques de diccionario y de fuerza bruta. Para realizar esta tarea, abra el archivo /etc/pam.d/system-auth usando 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 hará un hash de la contraseña para evitar guardarla en texto claro, por lo que hay que asegurarse de definir un algoritmo seguro de hash de la contraseña SHA512.
Otra funcionalidad interesante es bloquear la cuenta después de cinco intentos fallidos. Para que esto suceda, necesitas 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
Aún no hemos terminado; se necesita un paso más. Abra el archivo «/etc/pam.d/system-auth» y asegúrese de que ha añadido 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
Después de cinco intentos fallidos, sólo un administrador puede desbloquear la cuenta mediante el siguiente comando:
# /usr/sbin/faillock --user <userlocked > --reset
Además, otra buena práctica es establecer la contraseña para que expire después de 90 días, para lograr esta tarea es necesario:
- Poner el parámetro PASS_MAX_DAYS a 90 en «/etc/login.defs»
- Cambie el usuario activo ejecutando el siguiente comando :
- #chage –maxdays 90 <user >
El siguiente consejo para mejorar las políticas de contraseñas es restringir el acceso al comando su configurando los parámetros pam_wheel.so en «/etc/pam.d/su»:
auth required pam_wheel.so use_uid
El último consejo para la política de contraseñas es deshabilitar las cuentas del sistema para los usuarios que no son root, usando el siguiente script bash:
#!/bin/bash para el usuario en `awk -F: $0027($3 < 500) { print $1 }$0027 /etc/passwd`; doif [ $user != "root" ] then /usr/sbin/usermod -L $user if [ $user ! = "sync" ] && [ $user != "shutdown" ] && [ $user != "halt" ] then /usr/sbin/usermod -s /sbin/nologin $user fi done
14. Permisos y verificaciones
Prepárate mentalmente porque esta será una larga lista. Pero, los permisos es una de las tareas más importantes y críticas para lograr el objetivo de seguridad en un host Linux.
Configure Usuario/Grupo Propietario y Permiso 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
Poner el derecho y los permisos en «/var/spool/cron» para «root crontab»
#chown root:root <crontabfile;#chmod og-rwx <crontabfile;
Establecer Usuario/Grupo Propietario y Permiso en el archivo «passwd»
#chmod 644 /etc/passwd#chown root:root /etc/passwd
Establecer Usuario/Grupo Propietario y Permiso en el archivo «grupo»
#chmod 644 /etc/group#chown root:root /etc/group
Establecer Usuario/Grupo Propietario y Permiso en el archivo «sombra»
#chmod 600 /etc/shadow#chown root:root /etc/shadow
Establecer Usuario/Grupo Propietario y Permiso en el archivo «gshadow»
#chmod 600 /etc/gshadow#chown root:root /etc/gshadow
15. 15. Proceso adicional de endurecimiento
Para este último punto de la lista, incluyo algunos consejos adicionales que deberían considerarse al endurecer un host Linux.
Primero, restringir los vertidos de núcleos por:
- Añadiendo el núcleo duro 0 al archivo «/etc/security/limits.conf»
- Añadiendo fs.suid_dumpable = 0 al archivo «/etc/sysctl.conf»
Segundo, configura el Escudo Exec por:
- Añadiendo kernel.exec-shield = 1 al archivo «/etc/sysctl.conf»
Tercero, habilitar la colocación aleatoria de la región de memoria virtual por:
- Añadiendo kernel.randomize_va_space = 2 al archivo «/etc/sysctl.conf»
Pensamientos finales
En este corto post, cubrimos muchas configuraciones importantes para la seguridad de Linux. Pero, acabamos de arañar la superficie del endurecimiento de Linux, hay un montón de configuraciones complejas y esenciales. Para aprender más sobre cómo endurecer sus servidores Linux para una mejor seguridad, vea estos cursos de Pluralsight.
Contenidos
- 1. Documentar la información del anfitrión
- 2. Protección del BIOS
- 3. Cifrado del disco duro (confidencialidad)
- 4. Protección del disco (disponibilidad)
- 5. Bloquea el directorio de arranque
- 6. Deshabilitar el uso del USB
- 7. Actualización del sistema
- 8. Compruebe los paquetes instalados
- 9. Comprobar si hay puertos abiertos
- 10. Asegurar SSH
- 11. Habilitar SELinux
- 12. Parámetros de red
- 13. Políticas de contraseñas
- 14. Permisos y verificaciones
- 15. 15. Proceso adicional de endurecimiento
- Pensamientos finales