Hardening de Sistemes
Introducció
El hardening (enfortiment) és el procés de reduir la superfície d'atac d'un sistema configurant-lo de la manera més segura possible. La filosofia és simple: tot el que no és necessari ha d'estar desactivat. Cada servei, port obert, compte d'usuari o permís innecessari és una possible porta d'entrada per a un atacant.
El CIS (Center for Internet Security) publica benchmarks de hardening per als principals sistemes operatius, distribucions Linux, servidors web, BBDD, etc. Estan disponibles gratuïtament a cisecurity.org/cis-benchmarks.
Hardening de Linux (Ubuntu/Debian)
1. Actualitzacions i patches
# Activar actualitzacions de seguretat automàtiques
apt-get install unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades
# Verificar vulnerabilitats en paquets instal·lats
apt-get update && apt-get upgrade -s | grep -i security
2. Reducció de serveis
# Llistar serveis actius
systemctl list-units --type=service --state=running
# Deshabilitar serveis innecessaris (exemples)
systemctl disable --now avahi-daemon # mDNS - innecessari en servidors
systemctl disable --now bluetooth # Bluetooth en servidors
systemctl disable --now cups # Impressió - innecessari
systemctl disable --now rpcbind # NFS (si no s'usa)
# Verificar ports oberts
ss -tunlp
3. Configuració de SSH
El fitxer /etc/ssh/sshd_config conté la configuració de SSH. Aplicar:
# /etc/ssh/sshd_config - configuració recomanada
Port 2222 # Canviar el port per defecte (22)
PermitRootLogin no # Mai permetre login com a root
PasswordAuthentication no # Usar ÚNICAMENT claus SSH
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
MaxAuthTries 3 # Màxim 3 intents
ClientAliveInterval 300 # Desconnectar sessions inactives (5 min)
ClientAliveCountMax 2
X11Forwarding no # No cal reenviar X11 en servidors
AllowUsers deployer backupadmin # Llista blanca d'usuaris
Protocol 2 # Únicament protocol SSH v2
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com
# Aplicar canvis
systemctl restart sshd
Canvi de port SSH
Canviar el port SSH de 22 a un port alt (ex: 2222, 22222) no és una mesura de seguretat real (és "security through obscurity"), però redueix significativament el soroll dels logs eliminant els bots que escanegen el port 22. Cal recordar que fail2ban continuarà funcionant al port nou.
4. Configuració de sudo
# Revisar sudoers: mai donar sudo sense contrasenya
visudo
# Configuració recomanada
# %sudo ALL=(ALL:ALL) ALL ← requereix contrasenya (correcte)
# usuari ALL=(ALL) NOPASSWD: ALL ← insegur, eliminar
# Limitar comandes específiques (exemple: usuari de backup)
backupadmin ALL=(root) NOPASSWD: /usr/bin/rsync, /bin/mount, /bin/umount
5. Paràmetres del kernel (sysctl)
# /etc/sysctl.d/99-hardening.conf
# Protecció contra spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
# Deshabilitar ICMP redirects (evitar routing attacks)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
# SYN flood protection
net.ipv4.tcp_syncookies = 1
# Deshabilitar IP forwarding (si no és un router)
net.ipv4.ip_forward = 0
# Protecció contra stack buffer overflows (ASLR)
kernel.randomize_va_space = 2
# Protegir /proc
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
# Aplicar
sysctl -p /etc/sysctl.d/99-hardening.conf
6. Auditoria amb AppArmor / Auditd
# AppArmor: control d'accés mandatory per a aplicacions
systemctl enable --now apparmor
aa-status # Verificar perfils actius
# Auditd: registre d'events del sistema
apt-get install auditd
systemctl enable --now auditd
# Regles d'auditoria
auditctl -w /etc/passwd -p wa -k passwd_changes
auditctl -w /etc/sudoers -p wa -k sudoers_changes
auditctl -w /var/log/auth.log -p r -k auth_log_access
Miniactivitat
Executa el CIS-CAT Lite (gratuït) o lynis per auditar el sistema:
Hardening de contenidors Docker
Docker introdueix riscos de seguretat específics si no es configura correctament. Un contenidor mal configurat pot ser usat per a escalar privilegis fins a l'host.
Principis de seguretat en Docker
# Dockerfile segur - bones pràctiques
# 1. Usar imatge base minimal (no latest)
FROM python:3.12-slim
# 2. Crear usuari no-root
RUN groupadd -r appuser && useradd -r -g appuser appuser
# 3. Instal·lar ÚNICAMENT el necessari
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
&& rm -rf /var/lib/apt/lists/*
# 4. Copiar codi i establir propietari
COPY --chown=appuser:appuser . /app
WORKDIR /app
# 5. Instal·lar dependències
RUN pip install --no-cache-dir -r requirements.txt
# 6. Canviar a usuari no-root
USER appuser
# 7. Executa l'aplicació
CMD ["python", "app.py"]
# Executar amb opcions de seguretat
docker run \
--read-only \ # Sistema de fitxers en mode lectura
--tmpfs /tmp \ # Directori temporal en memòria
--no-new-privileges \ # Evitar escalada de privilegis
--cap-drop ALL \ # Eliminar TOTES les capabilities de Linux
--cap-add NET_BIND_SERVICE \ # Afegir ÚNICAMENT les necessàries
--security-opt no-new-privileges \
--memory 512m \ # Limitar memòria
--cpus 0.5 \ # Limitar CPU
myapp:1.0
Escaneig de vulnerabilitats en imatges
# Trivy: escàner de vulnerabilitats per a contenidors (gratuït)
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image ubuntu:22.04
# Docker Scout (integrat en Docker Desktop)
docker scout cves myapp:1.0
Xifrat de discos
LUKS (Linux Unified Key Setup) - Linux
# Xifrar una partició amb LUKS (exemple amb /dev/sdb1)
cryptsetup luksFormat /dev/sdb1
# Obrir la partició xifrada
cryptsetup luksOpen /dev/sdb1 dades_xifrades
# Crear sistema de fitxers
mkfs.ext4 /dev/mapper/dades_xifrades
# Muntar
mount /dev/mapper/dades_xifrades /mnt/dades
# Tancar (quan s'acaba d'usar)
umount /mnt/dades
cryptsetup luksClose dades_xifrades
BitLocker - Windows
Via GUI o PowerShell:
# Activar BitLocker en la unitat C:
Enable-BitLocker -MountPoint "C:" -EncryptionMethod XtsAes256 `
-UsedSpaceOnly -SkipHardwareTest `
-RecoveryPasswordProtector
# Obtenir la clau de recuperació (guardar en lloc segur!)
Get-BitLockerVolume -MountPoint "C:" | Select-Object -ExpandProperty KeyProtector
Checklist de hardening
## Checklist Hardening Linux
### Sistema
- [ ] Actualitzacions automàtiques de seguretat activades
- [ ] Serveis innecessaris desactivats
- [ ] Ports oberts revisats (ss -tunlp)
### Autenticació
- [ ] Login root per SSH deshabilitat
- [ ] Autenticació per clau SSH (no per contrasenya)
- [ ] Contrasenya de root forta o blocat (/etc/shadow)
- [ ] Política de contrasenyes configurada (PAM)
### Xarxa
- [ ] Firewall actiu (ufw/iptables/nftables)
- [ ] ICMP restriccions aplicades via sysctl
- [ ] IP forwarding deshabilitat (si no és router)
### Auditoria
- [ ] auditd instal·lat i configurat
- [ ] Monitoratge de canvis en /etc/passwd, /etc/sudoers
- [ ] Logs centralitzats (syslog → SIEM)
### Xifrat
- [ ] Discos sensibles xifrats (LUKS)
- [ ] TLS 1.3 en tots els serveis web
- [ ] Comunicacions SSH usant ciphers moderns