Ghost AcademySecLearn// Seguridad Informática
🛡️ Seguridad · Linux · Windows · Infraestructura
¿Qué es el Hardening?

Proceso de fortalecer la seguridad de un sistema, dispositivo o red para minimizar vulnerabilidades y reducir el riesgo de ciberataques. Cubre estrategias, hardening en Linux y hardening en Windows.

menor privilegioSUIDSSH systemctlGPO / SELinuxEvent Log DEPASLRiptables

¿Qué es el Hardening?

Hardening — Fortalecimiento de sistemas
Concepto de 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:

🔒
Proteger datos sensibles
Garantizar la confidencialidad e integridad de la información crítica del sistema.
🏗️
Integridad de infraestructura
Asegurar que los componentes del sistema funcionen sin interferencias no autorizadas.
📋
Cumplimiento normativo
Satisfacer requisitos de normativas de seguridad como ISO 27001, CIS Benchmarks, NIST.
⚔️
Mitigar amenazas
Reducir la superficie de ataque disponible para actores maliciosos.

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.
⚠️ Nunca parchees directamente en producción. La gestión de parches debe incluir una estrategia de revisión y prueba en un servidor de pruebas antes de desplegar en producción, minimizando riesgos operacionales.

Estrategias de Hardening

🔑 Principio del menor privilegio
Identificar desde qué punto un usuario sin privilegios o con privilegios mínimos puede lograr acceso con administrador. Nunca dar más permisos de los estrictamente necesarios.
🗂️ Segmentación de roles
Segmentar diferentes sectores (Contabilidad, RR. HH…). Cada grupo tiene los mínimos privilegios a los recursos, directorios y herramientas que necesita.
🔄 Políticas de parche
Siempre testear en servidor de pruebas antes de aplicar en producción. Un parche mal aplicado puede corromper una aplicación en ejecución.
📜 GPO / SELinux
En Windows (GPO) y Linux (SELinux/AppArmor) permiten crear políticas para hacer cumplir controles: personal de RR. HH solo accede a Office y navegador web.
🔐 Control de accesos
Regular quién puede acceder a los recursos (archivos, directorios, bases de datos) y qué acciones puede realizar (leer, escribir, modificar, ejecutar).
📊 Auditoría y monitoreo
El monitoreo constante de endpoints y servidores proporciona visibilidad continua de la red, permitiendo detectar actividades sospechosas y responder más rápido ante incidentes.
🐧
Hardening de Servidores Linux
Actualizaciones, servicios, sudo, SSH, permisos de archivos críticos e iptables

Actualizaciones de Paquetes

El primer paso en el hardening de un servidor Linux es mantener todos los paquetes actualizados.

bash
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.

bash — Listar servicios en ejecución
systemctl list-units --type=service --state=running
FlagFunción
list-unitsLista unidades activas del sistema.
--type=serviceFiltra para mostrar solo servicios.
--state=runningIncluye únicamente los servicios en estado de ejecución.
systemctl list-units — Servicios en ejecución
systemctl list-units --state=running

Ver estado de un servicio específico

bash
systemctl status apache2.service
systemctl status apache2 — Servicio activo
systemctl status apache2.service

Detener y deshabilitar servicios innecesarios

bash
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 sudo a 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/sudoers con visudo.

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.

SUID — Permisos especiales de ejecución
Permisos SUID en archivos
bash — Buscar archivos con SUID activo
find / -perm -4000 -type f 2>/dev/null
⚠️ Auditar los SUID regularmente. Cualquier archivo con SUID activo que no sea estrictamente necesario es un riesgo. Eliminar el bit SUID con 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:

Cambiar el puerto
Usa un puerto no estándar (ej. 2222) para reducir el ruido de bots que escanean el 22.
Prohibir login root
PermitRootLogin no — nunca permitir acceso directo como root vía SSH.
Sin contraseñas vacías
PermitEmptyPasswords no — bloquea cuentas sin contraseña.
Máx. intentos
MaxAuthTries 3 — limita los intentos antes de cerrar la conexión.
Máx. sesiones
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.

ArchivoContenidoRiesgo si queda expuesto
/etc/shadowHashes de contraseñas de todos los usuarios del sistema.Ataques de fuerza bruta offline sobre los hashes.
/etc/gshadowContraseñas cifradas de grupos.Escalada de privilegios a grupos con contraseña.
/etc/passwdLista de todos los usuarios del sistema con su UID, GID y shell.Permite enumerar usuarios para ataques dirigidos.
/etc/groupDefinición de grupos y sus miembros.Revela la estructura de grupos y privilegios.
/etc/ssh/sshd_configConfiguración del servidor SSH.Revela configuración de acceso remoto al atacante.
/etc/passwd — visible para usuarios sin privilegios (riesgo)
/etc/passwd — lista de usuarios
⚠️ /etc/passwd legible por todos: Por diseño histórico, /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.
/etc/shadow — solo accesible por root
/etc/shadow — hashes de contraseñas

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.

bash — Ejemplo: permitir SSH solo desde IP específica
# 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 como alternativa: 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.
🪟
Hardening de Servidores Windows
Actualizaciones, servicios, Event Log, directivas de seguridad, DEP y ASLR

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.

Windows Update — Actualizaciones del sistema
Windows Update
⚠️ Prueba antes de producción: Una actualización mal aplicada puede dejar el servidor inutilizable. El flujo correcto es siempre: servidor de pruebas → validación → 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.

Servicios de Windows — Muchos activos por defecto
Servicios de Windows

Detener un servicio desde PowerShell

powershell
Stop-Service -Name 'nombre_del_servicio'
PowerShell — Stop-Service para detener servicios
Stop-Service en PowerShell

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.

Administrador de Tareas — Gestión visual de servicios
Administrador de Tareas — Servicios

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.
Event Log — Propiedades y configuración de retención
Propiedades del Event Log de Windows
💡 Configuración: Accede haciendo clic derecho sobre el registro deseado (Aplicación, Seguridad o Sistema) en el Visor de Eventos → Propiedades. Selecciona "Archivar el registro cuando esté lleno" para evitar perder eventos importantes.

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.
secpol.msc — Directivas de seguridad locales
Directivas de seguridad locales Windows
Directivas avanzadas — Configuración detallada
Opciones avanzadas de directivas Windows

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í:

DEP
Data Execution Prevention
Marca ciertas áreas de la memoria como no ejecutables. Solo el código legítimo cargado en áreas designadas puede ejecutarse. Impide que exploits inyecten y ejecuten código malicioso en áreas de datos.
ASLR
Address Space Layout Randomization
Aleatoriza las direcciones de memoria donde se cargan el SO, bibliotecas y ejecutables. Protege contra desbordamientos de buffer (buffer overflow). Se combina con DEP para una protección mucho más robusta.
DEP + ASLR — Protecciones avanzadas de memoria
DEP y ASLR en Windows
🔗 DEP + ASLR juntos: Por sí solos, DEP y ASLR tienen limitaciones. Un atacante puede saltarse DEP si conoce las direcciones exactas de memoria (técnica ROP — Return Oriented Programming). ASLR elimina esa ventaja al aleatorizar las direcciones. La combinación de ambos hace los ataques de explotación de memoria exponencialmente más difíciles.