¿Qué es el Hardening?
El hardening es el proceso de fortalecer la seguridad de un sistema, dispositivo o red para minimizar vulnerabilidades y reducir el riesgo de ciberataques. Este enfoque es fundamental para:
Entendimiento de Servidores
Para aplicar hardening correctamente hay que comprender tres aspectos clave del servidor:
Arquitectura
La arquitectura de un servidor hace referencia a cómo sus componentes están configurados para minimizar riesgos de seguridad. Incluye:
- Configuración segura: Asegurar accesos físicos, usar dispositivos de autenticación y bloquear puertos innecesarios.
- Sistema operativo: Configurarlo de manera segura desactivando servicios innecesarios y limitando el acceso de usuarios.
- Firewalls y segmentación: Usar VLANs o VPNs para separar red interna y externa. Asegurar o desactivar conexiones remotas inseguras (SSH en lugar de Telnet).
Componentes Críticos
Una vez entendida la arquitectura, es necesario identificar los componentes críticos para recopilar la mayor cantidad de información y registrar eventos en el momento en que se reciba algún ataque. Por ejemplo, cuando los usuarios utilizan una aplicación web, estos eventos deben ser registrados para poder detectar cualquier tipo de vulnerabilidad.
Actualización y Parches
El proceso de actualización y parcheo es fundamental para asegurar que un servidor sea resistente a vulnerabilidades:
- Actualización del SO: Mantenerlo al día con las últimas actualizaciones de seguridad.
- Parches de seguridad: Aplicarlos de manera oportuna, especialmente los relacionados con vulnerabilidades críticas.
Estrategias de Hardening
Actualizaciones de Paquetes
El primer paso en el hardening de un servidor Linux es mantener todos los paquetes actualizados.
sudo apt-get update sudo apt-get upgrade -y
Gestión de Servicios
Una vez actualizado el sistema, verificar qué servicios están corriendo. Cada servicio activo innecesario es una posible superficie de ataque.
systemctl list-units --type=service --state=running
| Flag | Función |
|---|---|
| list-units | Lista unidades activas del sistema. |
| --type=service | Filtra para mostrar solo servicios. |
| --state=running | Incluye únicamente los servicios en estado de ejecución. |
Ver estado de un servicio específico
systemctl status apache2.service
Detener y deshabilitar servicios innecesarios
systemctl stop apache2.service # Detener el servicio ahora systemctl start apache2.service # Iniciarlo systemctl disable apache2.service # Evitar que arranque al inicio
sudo y SUID
sudo — Elevación de privilegios controlada
En sistemas Linux, sudo permite elevar privilegios de forma controlada. No todos los usuarios deben tener privilegios de administrador. Buenas prácticas:
- Nunca permitir
sudoa usuarios sin contraseña (NOPASSWD), salvo casos muy concretos y documentados. - Restringir a cada usuario solo los comandos que necesita con sudo, no todo el sistema.
- Revisar periódicamente el archivo
/etc/sudoersconvisudo.
SUID — Permisos especiales de ejecución
El bit SUID (Set User ID) permite que un archivo se ejecute con los permisos de su propietario (normalmente root), independientemente de quién lo ejecute. Es un vector habitual de escalada de privilegios.
find / -perm -4000 -type f 2>/dev/null
chmod u-s /ruta/archivo cuando no sea imprescindible.Seguridad del Protocolo SSH
SSH es el principal vector de acceso remoto a servidores Linux. Configurarlo correctamente es crítico. Buenas prácticas en /etc/ssh/sshd_config:
PermitRootLogin no — nunca permitir acceso directo como root vía SSH.PermitEmptyPasswords no — bloquea cuentas sin contraseña.MaxAuthTries 3 — limita los intentos antes de cerrar la conexión.MaxSessions 2 — limita las sesiones SSH simultáneas por conexión.Permisos en Archivos Críticos
Algunos archivos del sistema contienen información sensible y deben tener permisos muy restrictivos. Un usuario sin privilegios no debería tener acceso de lectura a estos archivos.
| Archivo | Contenido | Riesgo si queda expuesto |
|---|---|---|
| /etc/shadow | Hashes de contraseñas de todos los usuarios del sistema. | Ataques de fuerza bruta offline sobre los hashes. |
| /etc/gshadow | Contraseñas cifradas de grupos. | Escalada de privilegios a grupos con contraseña. |
| /etc/passwd | Lista de todos los usuarios del sistema con su UID, GID y shell. | Permite enumerar usuarios para ataques dirigidos. |
| /etc/group | Definición de grupos y sus miembros. | Revela la estructura de grupos y privilegios. |
| /etc/ssh/sshd_config | Configuración del servidor SSH. | Revela configuración de acceso remoto al atacante. |
/etc/passwd es legible por cualquier usuario. Esto permite enumerar todos los usuarios del sistema y llevar a cabo ataques de fuerza bruta. Las contraseñas reales están en /etc/shadow, que solo root puede leer.Control de Tráfico — iptables
Para SSH, es recomendable permitir el acceso únicamente a usuarios específicos y desde direcciones IP autorizadas. El tráfico entrante y saliente puede gestionarse directamente con iptables.
# Permitir SSH solo desde la IP 192.168.1.50 iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j ACCEPT # Denegar el resto iptables -A INPUT -p tcp --dport 22 -j DROP
ufw (Uncomplicated Firewall) ofrece la misma funcionalidad que iptables con una sintaxis más sencilla. Para entornos de producción se recomienda combinarlo con fail2ban para bloquear automáticamente IPs con múltiples intentos fallidos.Actualizaciones y Parches
Al igual que en Linux, mantener el sistema actualizado es el punto de partida. Siempre aplicar en servidor de pruebas primero, verificar que todo funciona, y luego desplegar en producción.
Gestión de Servicios en Windows
Windows ejecuta por defecto una gran cantidad de servicios, muchos de los cuales pueden no ser necesarios y representan superficies de ataque potenciales.
Detener un servicio desde PowerShell
Stop-Service -Name 'nombre_del_servicio'
Desde el Administrador de Tareas
Los servicios también pueden detenerse y deshabilitarse desde el Administrador de Tareas → pestaña Servicios, o desde services.msc.
Event Log — Registro de Eventos
Los Event Logs son fundamentales para el análisis forense. Sin una correcta configuración, los registros se sobreescriben y se pierde el historial de lo que ocurrió antes de un incidente.
- Tamaño del archivo: Definir un tamaño máximo adecuado para cada log (Aplicación, Seguridad, Sistema).
- Retención de eventos: Cuánto tiempo conservar los eventos antes de archivarlos o eliminarlos.
- Política de llenado: Qué hacer cuando el log está lleno — la opción recomendada es archivar el registro cuando esté lleno, nunca sobreescribir.
Directivas de Seguridad Locales
Las directivas de seguridad locales (secpol.msc) permiten configurar políticas avanzadas del sistema:
- Contraseña: Longitud mínima, complejidad, expiración, historial.
- Usuarios: Bloqueo de cuenta tras X intentos fallidos.
- Permisos a programas: Qué aplicaciones pueden ejecutarse.
- Acceso a recursos: Permitir o denegar acceso a objetos del sistema.
- Firewall: Bloqueo de ICMP, puertos específicos y rangos de IP.
Protecciones Avanzadas de Memoria
Para entornos que requieren mayor nivel de seguridad, Windows ofrece dos tecnologías de protección de memoria que se complementan entre sí: