332.1 Hardening del Host
Introduccion
El hardening (endurecimiento) del host es el proceso de reducir la superficie de ataque de un sistema Linux mediante la eliminacion de servicios innecesarios, la configuracion segura del kernel, la proteccion del arranque, el fortalecimiento de politicas de contraseñas y la implementacion de controles de acceso. Es una de las capas fundamentales en defensa en profundidad.
Para el examen: Este subtema tiene peso 5. Cubre un amplio rango de temas desde BIOS/UEFI hasta PAM y sysctl. Conoce los parametros de kernel mas importantes y las configuraciones de PAM.
Seguridad BIOS/UEFI
Medidas de proteccion
- Contraseña de BIOS/UEFI: Impide cambios en la configuracion de arranque
- Orden de arranque: Configurar solo disco duro como dispositivo de arranque
- Secure Boot: Verifica firmas de los cargadores de arranque y kernel
- TPM (Trusted Platform Module): Almacena claves de cifrado y mediciones de integridad
Proteccion del Bootloader (GRUB)
# Generar hash de contraseña para GRUB
grub2-mkpasswd-pbkdf2
# Introduce la contraseña y guarda el hash generado
# Configurar en /etc/grub.d/40_custom
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.HASH...
# Regenerar configuración de GRUB
grub2-mkconfig -o /boot/grub2/grub.cfg # RHEL
update-grub # DebianProtecciones adicionales:
# Permisos del archivo de configuración
chmod 600 /boot/grub2/grub.cfg
# Proteger archivos de kernel
chmod 600 /boot/vmlinuz-*
chmod 600 /boot/initramfs-*Parametros de Seguridad del Kernel (sysctl)
Configuracion con sysctl
# Ver todos los parametros
sysctl -a
# Ver parametro específico
sysctl kernel.kptr_restrict
# Establecer parametro temporalmente
sysctl -w kernel.kptr_restrict=2
# Aplicar configuracion desde archivo
sysctl -p /etc/sysctl.d/99-hardening.confParametros de Hardening del Kernel
# /etc/sysctl.d/99-hardening.conf
# Ocultar punteros del kernel en /proc/kallsyms
kernel.kptr_restrict = 2
# Restringir acceso a dmesg
kernel.dmesg_restrict = 1
# Habilitar ASLR (Address Space Layout Randomization)
kernel.randomize_va_space = 2
# Restringir acceso a perf_event
kernel.perf_event_paranoid = 3
# Deshabilitar SysRq (o limitar funciones)
kernel.sysrq = 0
# Restringir ptrace (depuracion de procesos)
kernel.yama.ptrace_scope = 2
# Proteger enlaces simbolicos y hardlinks
fs.protected_symlinks = 1
fs.protected_hardlinks = 1
# Proteger FIFOs y archivos regulares
fs.protected_fifos = 2
fs.protected_regular = 2
# Habilitar proteccion de desbordamiento de pila (exec-shield)
kernel.exec-shield = 1| Parametro | Valor Seguro | Descripcion |
|---|---|---|
kernel.kptr_restrict | 2 | Oculta punteros del kernel a todos |
kernel.dmesg_restrict | 1 | Solo root puede leer dmesg |
kernel.randomize_va_space | 2 | ASLR completo |
kernel.yama.ptrace_scope | 2 | Solo root puede usar ptrace |
kernel.sysrq | 0 | Deshabilita Magic SysRq |
fs.protected_symlinks | 1 | Protege contra ataques de symlinks |
Para el examen:
kernel.randomize_va_space=2activa ASLR completo (incluye heap, stack, mmap, VDSO). El valor 0 lo desactiva, 1 es parcial.
Minimizacion de Servicios
# Listar servicios activos
systemctl list-units --type=service --state=running
# Deshabilitar servicio innecesario
systemctl disable --now servicio.service
# Enmascarar servicio (impide que se inicie de cualquier forma)
systemctl mask servicio.service
# Desenmascarar
systemctl unmask servicio.service
# Listar puertos en escucha
ss -tlnp
netstat -tlnpServicios que normalmente deben deshabilitarse en servidores:
cups(impresion)avahi-daemon(mDNS/Zeroconf)bluetoothnfs-server(si no se usa)rpcbind(si no se usa NFS)
Eliminacion de Paquetes Innecesarios
# RHEL/CentOS: listar paquetes instalados
rpm -qa | sort
# Debian/Ubuntu: listar paquetes
dpkg -l
# Eliminar paquetes innecesarios
yum remove paquete # RHEL
apt purge paquete # Debian
# Listar paquetes de un grupo (RHEL)
yum group list
yum group remove "Development Tools"PAM (Pluggable Authentication Modules)
Politicas de Contraseñas con pam_pwquality
# /etc/security/pwquality.conf
minlen = 14 # Longitud minima
dcredit = -1 # Al menos 1 digito
ucredit = -1 # Al menos 1 mayuscula
lcredit = -1 # Al menos 1 minuscula
ocredit = -1 # Al menos 1 caracter especial
maxrepeat = 3 # Maximo 3 caracteres repetidos consecutivos
maxclassrepeat = 4 # Maximo 4 del mismo tipo consecutivos
difok = 8 # Al menos 8 caracteres diferentes de la anterior
reject_username # No permitir nombre de usuario en contraseña
enforce_for_root # Aplicar tambien a root# /etc/pam.d/system-auth o /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3
password sufficient pam_unix.so sha512 shadow remember=12Alternativa: pam_cracklib
# Configuracion similar a pwquality
password requisite pam_cracklib.so retry=3 minlen=14 \
dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1Para el examen:
pam_pwqualityes el reemplazo moderno depam_cracklib. Los valores negativos endcredit,ucredit, etc. indican el minimo requerido. La opcionremember=12enpam_unix.soimpide reutilizar las ultimas 12 contraseñas.
Bloqueo de Cuentas con pam_faillock
# /etc/pam.d/system-auth
auth required pam_faillock.so preauth silent audit \
deny=5 fail_interval=900 unlock_time=600
auth sufficient pam_unix.so
auth [default=die] pam_faillock.so authfail audit \
deny=5 fail_interval=900 unlock_time=600
# /etc/security/faillock.conf (configuracion centralizada)
deny = 5 # Bloquear tras 5 intentos fallidos
fail_interval = 900 # Ventana de 15 minutos
unlock_time = 600 # Desbloquear tras 10 minutos (0 = manual)
even_deny_root # Tambien bloquear root# Ver intentos fallidos
faillock --user nombre_usuario
# Desbloquear usuario
faillock --user nombre_usuario --resetUSB Guard
USBGuard controla que dispositivos USB pueden conectarse al sistema.
# Instalar
yum install usbguard
# Generar politica inicial con dispositivos actuales
usbguard generate-policy > /etc/usbguard/rules.conf
# Listar dispositivos USB
usbguard list-devices
# Permitir dispositivo
usbguard allow-device ID
# Bloquear dispositivo
usbguard block-device ID
# Rechazar dispositivo
usbguard reject-device IDEjemplo de regla:
# /etc/usbguard/rules.conf
allow id 1d6b:0002 serial "" name "xHCI Host Controller" via-port "usb1"
reject id *:* with-interface { 08:*:* } # Rechazar almacenamiento USBEnvejecimiento de Contraseñas
# Configuracion global en /etc/login.defs
PASS_MAX_DAYS 90 # Maxima vigencia
PASS_MIN_DAYS 7 # Minimo entre cambios
PASS_WARN_AGE 14 # Aviso antes de expiracion
PASS_MIN_LEN 14 # Longitud minima
# Configuracion por usuario con chage
chage -M 90 -m 7 -W 14 usuario
# Ver configuracion de un usuario
chage -l usuario
# Forzar cambio de contraseña en siguiente login
chage -d 0 usuario
# Bloquear cuenta
passwd -l usuario
usermod -L usuario
# Desbloquear cuenta
passwd -u usuario
usermod -U usuario
# Establecer expiracion de cuenta
usermod -e 2025-12-31 usuarioMarcos de Auditoria y CIS Benchmarks
CIS Benchmarks
Los CIS (Center for Internet Security) Benchmarks son guias de configuracion segura reconocidas internacionalmente. Cubren:
- Configuracion de particiones (/tmp, /var, /home separados con noexec, nosuid)
- Servicios minimos
- Configuracion de red
- Auditoria y logging
- Control de acceso
- Mantenimiento del sistema
Herramientas de Auditoria
# Lynis - auditoria de seguridad
lynis audit system
# OpenSCAP - evaluacion contra perfiles de seguridad
oscap xccdf eval --profile cis /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xmlPara el examen: Conoce que existen los CIS Benchmarks como referencia de hardening y que herramientas como Lynis y OpenSCAP permiten evaluar el cumplimiento automaticamente.
Configuraciones Adicionales de Hardening
# Deshabilitar core dumps
# /etc/security/limits.conf
* hard core 0
# /etc/sysctl.d/99-hardening.conf
fs.suid_dumpable = 0
# Configurar banner de advertencia
# /etc/issue y /etc/issue.net
echo "Acceso autorizado unicamente. Toda actividad es monitoreada." > /etc/issue
# Restringir cron a usuarios autorizados
echo "root" > /etc/cron.allow
rm -f /etc/cron.deny
# Restringir acceso a at
echo "root" > /etc/at.allow
rm -f /etc/at.deny
# Configurar timeout de sesion
# /etc/profile.d/timeout.sh
TMOUT=900
readonly TMOUT
export TMOUTTrampas del examen
Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:
pam_pwqualityvspam_cracklib—pam_pwqualityes el reemplazo moderno depam_cracklib. Ambos usan sintaxis similar, pero en distribuciones actuales se esperapam_pwquality. Los valores negativos endcredit,ucredit,lcredit,ocreditindican el minimo requerido (ej:dcredit=-1exige al menos 1 digito)pam_faillockvspam_tally2—pam_tally2esta obsoleto y eliminado en versiones recientes de PAM.pam_faillockes su reemplazo. El examen puede presentar ambos, pero la respuesta correcta en sistemas modernos espam_faillockremember=12enpam_unix.so— esta opcion impide reutilizar las ultimas 12 contraseñas. No confundir con opciones depam_pwquality. Se configura en la linea depam_unix.so, no enpwquality.confkernel.randomize_va_spacevalores — 0 = ASLR desactivado; 1 = parcial (solo stack, libraries, mmap); 2 = completo (incluye heap). El valor seguro para el examen es siempre 2. No confundir 1 con “activado completamente”systemctl maskvssystemctl disable—disablequita el arranque automatico pero permite iniciar manualmente;maskcrea un symlink a/dev/nulle impide que el servicio se inicie de cualquier forma. Para hardening,maskes mas segurogrub2-mkpasswd-pbkdf2— genera un hash PBKDF2 para proteger GRUB con contraseña. No confundir congrub2-mkconfig(que regenera la configuracion). La contraseña se configura en/etc/grub.d/40_custom, NO directamente engrub.cfg/etc/cron.allowvs/etc/cron.deny— si existecron.allow, SOLO los usuarios listados pueden usar cron (cron.deny se ignora). Si solo existecron.deny, todos pueden usar cron excepto los listados. Si ninguno existe, la politica depende de la distribucion. Para hardening: crearcron.allowsolo con root- USBGuard
allowvsblockvsreject—allowpermite el dispositivo;blocklo desactiva pero mantiene la informacion;rejectlo elimina del sistema completamente.rejectes mas seguro queblockpara dispositivos no autorizados chage -d 0vspasswd -l—chage -d 0fuerza cambio de contraseña en el siguiente login (el usuario puede acceder);passwd -lbloquea la cuenta completamente (antepone!al hash). No confundir ambos efectos- Permisos de archivos de arranque —
/boot/grub2/grub.cfg,/boot/vmlinuz-*y/boot/initramfs-*deben tener permisos 600. Dejarlos legibles permite a un atacante local extraer informacion sensible del kernel o modificar parametros de arranque