Prácticas recomendadas para el endurecimiento y la seguridad de servidores Linux
Introducción
La implementación de configuraciones seguras en todo su entorno informático, incluidos sus sistemas Unix y Linux, es una práctica de seguridad fundamental porque reduce su superficie de ataque y limita el daño que los ciberataques pueden causar. De hecho, el endurecimiento del sistema es un control central en muchas directivas de cumplimiento.
Esta guía explica qué es el endurecimiento de configuración y cómo establecer estándares de construcción endurecidos para sus sistemas Linux y Unix.
Los fundamentos del endurecimiento de sistemas
El servidor Linux más seguro u otro ordenador es aquel que está apagado y desconectado de la red. Pero si queremos utilizar realmente la máquina para proporcionar servicios de TI, necesitamos maximizar sus defensas de seguridad cuando esté encendido y conectado a la red o incluso a internet.
Aquí es donde entra en juego el endurecimiento. Endurecer un sistema significa optimizar su configuración para operaciones seguras y protección de datos. La gama de vulnerabilidades explotables es vasta, por lo que hay tres reglas principales a seguir:
- Elimine las funcionalidades que no sean necesarias para el rol del ordenador. Por ejemplo, los sistemas operativos y otras aplicaciones suelen entregarse en un estado de “inicio rápido”, amablemente precargados con utilidades y características que los usuarios podrían desear. Sin embargo, cuantas más funciones se proporcionen, mayor será la superficie de ataque que presenta el anfitrión. Por lo tanto, asegúrese de deshabilitar las funciones que no necesite y evite agregar funciones innecesarias siempre que sea posible.
- Aplique parches y actualice con prontitud. Las fallas en el diseño del software crean vulnerabilidades que los atacantes pueden explotar. Los proveedores de software proporcionan parches o versiones actualizadas del software para remediar estos problemas, así que asegúrese de que todo el software, incluidos los sistemas operativos, esté completamente actualizado en todo momento.
- Mantenga configuraciones de seguridad seguras. Es crucial que las configuraciones seguras estén habilitadas y mantenidas.
Endurecimiento del sistema Linux
No es de extrañar que el endurecimiento de la seguridad en Linux sea un procedimiento especializado por derecho propio, dada la amplia gama de distribuciones de Linux sutilmente diferentes. Aunque no faltan guías, listas de verificación y consejos para las mejores prácticas en el endurecimiento de servidores Linux — incluyendo los puntos de referencia del Center for Internet Security (CIS) y los DISA STIGs — esta guía proporcionará las opciones de configuración clave a adoptar.
Importante: Asegúrese de hacer una copia de seguridad de sus sistemas antes de aplicar configuraciones endurecidas y probar después de un reinicio. ¡Es fácil quedar bloqueado!
Eliminar funcionalidad innecesaria
Comience eliminando todas las características, utilidades y servicios que no son necesarios para ejecutar el servidor. Desinstale el software innecesario y deshabilite los servicios del sistema que no se necesiten. Dado que el hardware en su infraestructura también presenta vulnerabilidades explotables, asegúrese de que cualquier interfaz accesible, como los puertos USB, estén deshabilitados o incluso físicamente retirados de la máquina.
El flujo de trabajo aquí consiste en iniciar sesión y obtener un informe de los paquetes y servicios instalados, y revisarlo para identificar aquellos que se pueden eliminar o deshabilitar. Para los elementos esenciales que permanecen, verificar la disponibilidad de parches para remediar vulnerabilidades conocidas contra exploits.
Cómo listar software en sistemas Linux/Unix
Sistema | Comandos para usar |
|---|---|
|
Linux (p. ej., RedHat o CentOS) |
rpm -qa --qf '%{NAME} %{VERSION} %{VENDOR}\\n' |
|
Debian Linux (p. ej., Ubuntu) |
dpkg -l |
|
Fedora Linux |
|
|
Para listar software desde una terminal o sesión de putty: service --status-all chkconfig --list systemctl -a |
|
|
Para detener un servicio: Servicio <Service-Name> detener Chkconfig <Service-Name> Systemctl stop <Service-Name> |
|
|
Para deshabilitar un servicio: Systemctl disable <Service-Name> Chkconfig <Service-Name> off |
|
|
Además, inspeccione la ruta /etc/init.d/ para cualquier script de control de servicios y ejecute ls /etc/init.d/ para mostrar todos los scripts de inicio; luego renombre o elimine aquellos que deban ser deshabilitados. |
Minimice los puertos abiertos y otras vulnerabilidades de red
Los ataques basados en red están entre las amenazas más comunes. Para reducir su riesgo, identifique los puertos accesibles por la red que estén abiertos y elimine cualquier proceso correspondiente que no sea necesario. Para listar los puertos abiertos en Linux, utilice el siguiente comando:
ss -tulpn | egrep “LISTEN” | awk ‘{print “IP-Port “ $4 “ PID/Name “ $7}’
Además:
- Asegúrese de que el servicio TCP Wrappers esté activo.
- Defina tanto una lista de permitidos en etc/hosts.allow como una lista de bloqueados en etc/hosts.deny.
- Utilice los servicios de iptables o Firewalld con una política de Denegar Todo para el tráfico tanto de IP V4 como de V6, incluso si está utilizando WAFs de terceros y protección de firewall en la red.
- Bloquee el tráfico ICMP para frustrar los escaneos de ping utilizados por herramientas de hackers para el descubrimiento de dispositivos.
Revisar cuentas de usuario y autenticación
Revise las cuentas de usuario locales y elimine aquellas que no sean necesarias. Para las cuentas de usuario locales que permanezcan, se debe configurar una política de contraseñas fuerte que cubra la complejidad, longitud, caducidad, reutilización y frecuencia de cambio de las contraseñas. También asegúrese de utilizar algoritmos de hash fuertes para las contraseñas almacenadas.
Las cuentas de usuario y la autenticación deben ser administradas mediante un sistema de control centralizado como Active Directory o, aún mejor, una solución moderna de Privileged Access Management (PAM) que permita una estrategia de Zero Standing Privilege, la cual soluciona muchos de los problemas asociados con las cuentas de usuario tradicionales y los privilegios permanentemente asignados. Por supuesto, nunca utilices root y asegúrate siempre de que la elevación de permisos con sudo se utilice solo cuando sea necesario.
Cómo configurar una política de contraseñas para cuentas locales
Localice y edite el siguiente archivo de configuración: /etc/security/pwquality.conf
Para hacer cumplir una contraseña de 14 caracteres:
minlen = 14
Para hacer cumplir la complejidad de todas las contraseñas:
minclass = 14
O
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
Para aplicar una política de bloqueo de contraseña fuerte:
Actualice los archivos /etc/pam.d/system-auth y /etc/pam.d/password-auth para establecer las siguientes opciones:
auth required pam_faillock.so preauth silent deny=5 unlock_time=900
auth required pam_faillock.so authfail deny=5 unlock_time=900
Para aplicar una política de historial de contraseñas de 5 o más contraseñas:
Agregue la opción remember=5 a las líneas pam_pwhistory.so y pam_unix.so en /etc/pam.d/password-auth:
password requisite pam_pwhistory.so try_first_pass local_users_only enforce-for-root retry=3 remember=5
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
Para aplicar un cifrado de contraseñas fuerte:
Actualice los archivos /etc/pam.d/system-auth y /etc/pam.d/password-auth de la siguiente manera:
/etc/pam.d/password-auth:
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
/etc/pam.d/system-auth:
password sufficient pam_unix.so sha512 shadow try_first_pass use_authtok remember=5
Revisar cuentas de servicio
Las cuentas de sistema y servicio deben ser revisadas y cualquier cuenta que ya no sea necesaria debe ser eliminada.
Las cuentas de servicio están “reforzadas” en el sentido de que solo admiten la operación de un proceso ejecutado localmente y no proporcionan un shell de usuario, por lo que estas cuentas nunca pueden ser utilizadas para acceder al servidor mediante un inicio de sesión de usuario. Sin embargo, un principio fundamental del reforzamiento es minimizar la funcionalidad, por lo que las cuentas de servicio no utilizadas deben eliminarse igualmente.
Fortalecimiento de SSH para Linux y Unix
Como la ruta principal para administrar de forma remota sus sistemas Linux, SSH requiere atención particular. Hay una serie de configuraciones predeterminadas en el archivo /etc/ssh/sshd_config que deben estar habilitadas para fortalecer la operación del servidor SSH.
SSH se utiliza para todo el acceso a Linux y Unix, por lo que las siguientes pautas también se aplican para el endurecimiento de Unix.
Habilite la versión 2 del protocolo SSH
Por ejemplo, la configuración predeterminada habilita la versión 1 del protocolo SSH, que está desactualizada y es menos segura. La guía de endurecimiento de CIS recomienda habilitar la versión 2 para mejorar la seguridad. Para hacerlo, simplemente descomente la configuración de Protocol 2 en el archivo de configuración (/etc/ssh/sshd_config) eliminando el #, de la siguiente manera:
Entrada predeterminada en /etc/ssh/sshd_config:
# The default requires explicit activation of protocol 1
# Protocol 2
Una configuración más segura:
# The default requires explicit activation of protocol 1
Protocol 2
Endurecimiento adicional
Además, aplique las siguientes configuraciones endurecidas CIS recomendadas al archivo de configuración:
LogLevel INFO
IgnoreRhosts yes
…
PermitEmptyPasswords no
…
LoginGraceTime 60
PermitRootLogin no
MaxAuthTries 4
HostbasedAuthentication no
…
X11Forwarding no…
PermitUserEnvironment no
…
ClientAliveInterval 300
ClientAliveCountMax 0
…
Banner /etc/issue.net
…
AllowUsers <Specify user names, separated by spaces, e.g. user1 user2>
Notas adicionales:
/etc/issue.net deberá ser creado/editado para incluir un Banner apropiado, por ejemplo
¡Advertencia! El acceso no autorizado a este sistema está prohibido y será perseguido por la ley. Al acceder a este sistema, usted acepta que sus acciones pueden ser monitoreadas si se sospecha de uso no autorizado.
Junto con AllowUsers, AllowGroups también se admite como un interruptor de configuración/palabra clave.
Endurecimiento de Apache Web Server
Linux es la plataforma preferida para alojar aplicaciones web basadas en internet, y Apache Tomcat y Apache HTTP Server (a menudo referido como Apache HTTPD) son dos de las opciones más populares para entregar contenido web.
El enfoque para el endurecimiento de la configuración de Apache es el mismo: minimizar la funcionalidad e implementar configuraciones seguras donde estén disponibles.
Verifique que solo estén habilitados los módulos esenciales de Apache:
httpd -M
Por ejemplo, mod_dav y mod_dav_fs siempre deben estar desactivados, mientras que el módulo log_config siempre debe estar cargado y habilitado.
Confirme que la definición de package.access incluye solo los siguientes paquetes permitidos:
package.access = sun.,org.apache.catalina.,org.apache.coyote.,
org.apache.tomcat.,org.apache.jasper.
Configure el archivo server.xml:
El archivo server.xml en la ruta CATALINA_HOME/conf es el almacén de configuración central para el servidor web. Las configuraciones recomendadas para incluir en server.xml son las siguientes:
- Deshabilite el puerto de apagado:
Server port="-1" shutdown="SHUTDOWN">
- Elimine los conectores no utilizados, incluyendo el HTTPConnector predeterminado y el AJPConnector. Para eliminar el HTTPConnector, elimine o comente esta etiqueta:
Connector className="org.apache.catalina.connector.http.HttpConnector"
...
connectionTimeout="60000"/>
Elimine la configuración predeterminada de anuncio de presencia:
Para Tomcat:
Establezca el xpoweredBy atributo en false:
xpoweredBy="false" />
Para HTTP Server:
- Elimine el index.html predeterminado y comente lo siguiente en el /etc/httpd/conf.d/welcome.conf utilizando un # o ## para cada línea:
##<LocationMatch "^/+$">
## Options -Indexes
## ErrorDocument 403 /error/noindex.html
##</LocationMatch>
- Comente la sección Server-Status:
##<Location /server-status>
## SetHandler server-status
## Order deny,allow
## Deny from all
## Allow from .example.com
##</Location>
- Comente la sección server-info:
##<Location /server-info>
## SetHandler server-info
## Order deny,allow
## Deny from all
## Allow from .example.com
##</Location>
Deshabilite las instalaciones de trazado de diagnóstico:
Establezca el atributo allowTrace para cada Connector en false
Deshabilite la implementación automática de aplicaciones y deshabilite la implementación en el inicio:
autoDeploy="false"
deployOnStartup="false"
Endurecimiento adicional:
- Asegúrese de que los permisos de archivos y carpetas sean restrictivos y que los servicios de Apache se ejecuten utilizando cuentas de servicio sin shell (es decir, cuentas que no se pueden utilizar para iniciar sesión en el sistema). Deshabilite el Listado de Directorios y la navegación.
$CATALINA_HOME
$CATALINA_BASE
Endurecimiento del Kernel para Linux
SELinux modifica el núcleo de Linux para hacer cumplir controles de acceso obligatorios, restringiendo cómo los procesos de Linux pueden acceder a archivos y programas. Esta capa adicional de restricción ofrece un mecanismo de protección fundamental contra el malware de root kit. AppArmor proporciona un nivel equivalente de MAC para distribuciones Debian.
Configuraciones de SELinux
Instale SELinux en CentOS/RHEL:
dnf install libselinux
Habilite SELinux:
Por defecto, SELinux estará deshabilitado. Para habilitar SELinux en el arranque, edit/etc/default/grub y elimine estas configuraciones predeterminadas:
selinux=0
enforcing=0
Establezca la configuración de SELinux en modo enforcing
Edite el archivo /etc/selinux/config para incluir lo siguiente:
SELINUX=enforcing
SELINUXTYPE=default
Compruebe que todos los servicios se ejecutan con un contexto de seguridad controlado por SELinux:
El siguiente comando listará cualquier servicio que se esté iniciando desde el proceso init, el cual puede requerir un contexto de seguridad no predeterminado asignado a ellos:
ps -eZ | egrep "initrc" | egrep -vw "tr|ps|egrep|bash|awk" | tr ':' ' ' | awk '{ print $NF }'
Reinicie el ordenador para asegurarse de que se han cargado todos los ajustes.
Configuraciones de AppArmor
Instale AppArmor en Ubuntu/Debian:
apt-get install apparmor apparmor-profiles apparmor-utils
Habilite AppArmor en el arranque:
Edite /etc/default/grub y agregue las siguientes configuraciones:
GRUB_CMDLINE_LINUX="apparmor=1 security=apparmor"
Asegúrese de que todos los perfiles de AppArmor estén en modo de aplicación:
aa-enforce /etc/apparmor.d/*
Fortalecimiento de Linux Embebido
Embedded Linux ofrece un sistema operativo simplificado para dispositivos embebidos o sistemas embebidos, como teléfonos inteligentes, televisores inteligentes, cajas de conexión y enrutadores de internet de banda ancha.
Un sistema operativo simplificado con una huella reducida es atractivo cuando no se requiere la gama completa de funciones que suelen proporcionar los dispositivos Linux de grado servidor y los recursos de hardware como almacenamiento, memoria y CPU se han minimizado para ahorrar costos de fabricación. Por ejemplo, la plataforma de código abierto Android desarrollada por Google está optimizada para teléfonos inteligentes y televisores, y el firmware de router OpenWrt se utiliza para una amplia gama de routers de banda ancha.
La funcionalidad incluida en el sistema operativo varía ampliamente dependiendo de la aplicación prevista. Por ejemplo, Android incluye bloqueo de pantalla, reconocimiento facial, soporte para ingreso de PIN y servicios de ubicación; estas no son necesarias en sistemas operativos para routers domésticos, pero sí se incluyen características como VPN, Wi-Fi para invitados y limitación de ancho de banda. Como resultado, la guía de fortalecimiento está específicamente vinculada al dispositivo y plataforma en uso.
Aspectos destacados del endurecimiento de Android
Asegúrese de que el firmware del dispositivo esté actualizado:
Ve a Configuración | Sistema | Actualizaciones del sistema; selecciona Buscar actualizaciones e instala cualquier actualización que esté disponible.
Instale Google Play y actualizaciones de seguridad:
Vaya a Settings | Security:
- Select Google Security Check-Up and apply any updates available.
- Select Google Play system update and apply any updates available.
Habilite la seguridad general del dispositivo:
- Vaya a Settings | Security | Device Security y haga lo siguiente:
- Establezca ‘Screen Lock’ en ‘Enabled’.
- Establezca ‘Pattern Visible’ en ‘Disabled’.
- Establezca ‘Automatically Lock’ en ‘Immediately’.
- Establezca ‘Power Button Instantly Locks’ en ‘On’.
- Establecer aplicaciones de administrador de dispositivos ‘Find My Device’ en ‘Habilitado’.
- Establezca ‘Allow remote lock and erase’ en ‘Enabled’.
2. Vaya a Settings | System | Advanced y haga lo siguiente:
- Establezca ‘Developer Options’ en ‘Off’.
3. Vaya a Settings | Apps & Notifications | Advanced | Special App Access y haga lo siguiente:
- Establezca ‘Install Unknown Apps’ en ‘No Permitido’.
4. Inicie Play Store | Menú y haga lo siguiente:
- Seleccione ‘My Apps & Games’ y haga clic en ‘Update All’.
Aspectos destacados del endurecimiento de OpenWrt
- Cambie la contraseña de administrador de la predeterminada.
- Asegúrese de que el firmware siempre esté actualizado a la última versión.
Endurecimiento de Kali Linux
Kali Linux ha sido optimizado para ser la plataforma preferida de los profesionales de pruebas de penetración, por lo que cuenta con una amplia gama de utilidades de auditoría de seguridad y pruebas de penetración.
Dado que Kali Linux es una distribución de Linux basada en Debian, puedes utilizar los consejos de endurecimiento de Linux mencionados anteriormente para abordar las debilidades de seguridad en los sistemas Kali Linux.
Endurecimiento de la seguridad de Linux Mint
De manera similar para Linux Mint, como una plataforma de Linux de escritorio derivada de Ubuntu, se deben adoptar los mismos procedimientos de endurecimiento utilizados para Debian-Linux. Siga los pasos de la Lista de Verificación de Endurecimiento de Linux anteriores y aplíquelos a sus sistemas Linux Mint.
Fortalecimiento de Arch Linux
Como una distribución de Linux independiente que no se deriva directamente de Debian o Fedora, Arch Linux es un caso particular en lo que respecta a las medidas de endurecimiento, aunque los conceptos de cómo y qué endurecer son similares. El código de Arch está construido intencionalmente como una distribución de Linux ‘sin relleno’ y, como tal, requerirá menos trabajo de endurecimiento cuando se trata de eliminar o deshabilitar servicios innecesarios.
Palabra Final
Incluso un sistema reforzado todavía puede ser comprometido, especialmente por lo siguiente:
- Amenazas de día cero — explotaciones de las que no teníamos conocimiento y, por lo tanto, no protegimos contra
- Ransomware y otro malware
- Amenazas internas, incluyendo tanto a hackers utilizando credenciales secuestradas como a usuarios abusando de su acceso
Por lo tanto, además de reforzar sus sistemas, necesita defensas adicionales. En particular, es vital monitorear la integridad del sistema y de los archivos. Cualquier cambio inesperado podría conducir a una violación o a otro incidente de seguridad. Netwrix Change Tracker proporciona alertas en tiempo real sobre todos los cambios no planificados, y es compatible con todas las plataformas Linux y Unix.
Netwrix Change Tracker
Gane confianza en la integridad de su sistema Linux/Unix con el software de gestión de configuración de seguridad de Netwrix
Solicitar Prueba GratuitaCompartir en