La lliçó anterior va deixar el codi de Nimbus defensant-se sol. Però aquest codi s'executa sobre alguna cosa: servidors amb paquets, serveis, usuaris i permisos, i una quarantena de portàtils repartits entre l'oficina de València i les cases de mitja plantilla. Allà segueix viu, des d'01-04, el python -m http.server que ningú no va apagar; allà hi ha els equips sense xifrar del KPI de 04-03 (92,3 % davant de l'objectiu del 98 %); i allà hi ha els comptes amb privilegis d'administrador que ningú no necessita. Aquesta lliçó aplica al sistema operatiu la reducció de superfície d'01-04 i converteix «tenim els servidors ben configurats» en una línia base escrita, aplicada per una màquina i verificada cada setmana.

Contingut

  1. Què és l'enfortiment i què és una línia base
  2. Estàndards de referència: CIS Benchmarks i STIG
  3. Avaluar abans de tocar: lynis i OpenSCAP
  4. Enfortiment del servidor Linux, pas a pas
  5. SSH endurit, directiva a directiva
  6. auditd, fail2ban i actualitzacions automàtiques
  7. La gestió de pedaços com a procés
  8. L'endpoint de l'empleat
  9. Antivirus davant d'EDR
  10. Gestió de dispositius, BYOD i osquery
  11. Automatitzar i verificar la línia base
  12. El sistema heretat que no es pot endurir

  1. Què és l'enfortiment i què és una línia base

Enfortiment (hardening) és reduir la superfície d'atac d'un sistema: treure el que no es fa servir, tancar el que no ha d'estar obert, limitar el que cada compte pot fer i deixar registre del que passa. És l'aplicació al sistema operatiu dels principis d'01-03 —mínim privilegi, valors per omissió segurs, defensa en profunditat— i de la reducció de superfície d'01-04.

Un sistema acabat d'instal·lar està optimitzat per funcionar en qualsevol escenari, no per al teu. Porta serveis actius que no faràs servir mai, permisos generosos i configuracions còmodes. L'enfortiment és la diferència entre el que és genèric i el que és teu.

La idea que sosté tota la resta és la línia base: un conjunt de configuracions de seguretat, escrit, versionat i aplicable de forma automàtica, que defineix com ha d'estar tot servidor i tot portàtil de Nimbus. Sense línia base passen tres coses: cada màquina acaba diferent, ningú no sap quina és la correcta, i la deriva de configuració és invisible.

Sense línia base Amb línia base
«Crec que aquell servidor està bé» «Compleix la línia base v2.3, verificat el 12 de maig»
Cada màquina és un cas Totes iguals; les diferències són excepcions documentades
Un servidor nou es configura a mà i no n'hi ha dos d'iguals Es crea aplicant la línia base en minuts
La deriva és invisible Es detecta i es corregeix (§11)
No hi ha evidència per a 04-03 ni per a una auditoria L'informe de conformitat és l'evidència
flowchart LR
    E["1. AVALUAR\nlynis / OpenSCAP\nsobre el sistema real"] --> D["2. DEFINIR\nLinia base escrita\ni versionada (CIS N1)"]
    D --> A["3. APLICAR\nAnsible o imatge daurada,\nMAI a ma"]
    A --> V["4. VERIFICAR\nlynis setmanal +\nansible --check --diff"]
    V -->|"diferencia = 0"| OK["Conforme:\nevidencia amb data"]
    V -->|"diferencia != 0"| DR["DERIVA\nQui i per que.\nPot ser compromis (05-02)"]
    DR --> A

  1. Estàndards de referència: CIS Benchmarks i STIG

No cal inventar la línia base: existeixen catàlegs públics i detallats.

CIS Benchmarks DISA STIG
Qui els publica Center for Internet Security Departament de Defensa dels EUA
Estil Recomanacions amb justificació i impacte Requisits de compliment obligat
Nivells Nivell 1 (segur sense trencar res) i Nivell 2 (entorns d'alta seguretat) Categories I, II i III
Cost Gratuït en PDF; eina CIS-CAT Lite gratuïta Gratuït
Per a Nimbus Sí: CIS Nivell 1 per a Ubuntu Server i per als portàtils No aplica

Com es fan servir de debò, que no és com se sol fer. Un benchmark d'Ubuntu té més de 300 controls; aplicar-los tots a cegues produeix, amb gairebé tota seguretat, un servidor que no arrenca o una aplicació que deixa de funcionar. El procediment correcte té quatre passos:

  1. Avaluar primer sobre un sistema real i veure la distància actual (§3).
  2. Filtrar per nivell i per rol: Nivell 1 complet; del Nivell 2, només el que aporti en el teu context. Un control sobre serveis d'impressió no aplica a un servidor d'API.
  3. Provar en preproducció, en tandes petites i amb reinici inclòs, perquè molts controls només mostren el seu efecte en reiniciar.
  4. Documentar les excepcions amb motiu, responsable i caducitat, al registre de 04-02. Un control no aplicat i no documentat és una desviació silenciosa; documentat, és una decisió.

El benchmark és un punt de partida, no una meta. Un 100 % de conformitat amb dades personals sense xifrar i sense còpies verificades és pitjor postura que un 80 % amb les prioritats ben triades.


  1. Avaluar abans de tocar: lynis i OpenSCAP

# lynis: auditoria rapida, sense dependencies, ideal per a la primera foto
sudo lynis audit system --quick --report-file /var/log/lynis-api-prod-1.dat

# OpenSCAP: avaluacio formal contra el perfil CIS Nivell 1, amb informe HTML
sudo oscap xccdf eval \
     --profile xccdf_org.ssgproject.content_profile_cis_level1_server \
     --results /var/log/oscap-resultats.xml \
     --report  /var/log/oscap-informe.html \
     /usr/share/xml/scap/ssg/content/ssg-ubuntu2204-ds.xml
  • lynis --quick no espera confirmació entre seccions: és el que permet executar-lo des de cron. Dona una puntuació orientativa i una llista de suggeriments prioritzats.
  • oscap avalua contra un perfil formal (aquí, CIS Nivell 1 per a servidor) i produeix un XML processable més un informe llegible. És l'eina que genera evidència auditable; lynis és la que es fa servir cada dia.
[+] Boot and services
    - Service Manager                          [ systemd ]
    - Running services                         [ 41 ]        <-- massa
[+] Software: services
  ! Found service listening on 0.0.0.0:8000    [ python3 ]   <-- 01-04, segueix viu
  ! Found service listening on 0.0.0.0:6379    [ redis ]
[+] SSH Support
  ! PermitRootLogin is set to 'yes'                          [ SUGGERIT: no ]
  ! PasswordAuthentication is set to 'yes'                   [ SUGGERIT: no ]
[+] File systems
  ! /tmp is not a separated partition
  ! /home mounted without nosuid,nodev
[+] Hardening
    Hardening index : 58 [############        ]

Suggestions (23):
  - Install a file integrity tool (AIDE, Wazuh FIM)          [FINT-4350]
  - Enable process accounting / auditd                        [ACCT-9622]
  - Configure automatic security updates                      [PKGS-7420]

Com llegir aquesta sortida sense perdre el temps. L'índex d'enduriment (58) no és la mètrica que importa: serveix per mesurar progrés, no per presumir. El que importa són les tres línies marcades amb ! a la secció de serveis i SSH, perquè descriuen exposició real: el http.server del port 8000 continua allà 94 dies després, root pot entrar per SSH i s'accepten contrasenyes. Aquests tres es corregeixen avui; els 23 suggeriments es reparteixen en setmanes.


  1. Enfortiment del servidor Linux, pas a pas

Minimitzar paquets i serveis. Cada servei actiu és una superfície i un flux de pedaços.

# Que escolta realment, i qui ho va llancar
sudo ss -tulpn | grep LISTEN

# Aqui mor definitivament el http.server d'01-04: no es "para", s'elimina
# la causa. Si el va llancar algu a ma, es mata i es documenta; si el llanca una
# unitat de systemd oblidada, es desactiva perque no torni en reiniciar.
sudo systemctl disable --now servidor-temporal.service
sudo rm /etc/systemd/system/servidor-temporal.service

sudo apt purge -y telnetd rpcbind avahi-daemon cups   # serveis sense us
sudo apt autoremove --purge

La regla d'or: si no saps per què és allà, apaga'l en preproducció i observa una setmana. És més ràpid i més honest que investigar l'origen de cada servei.

Usuaris i sudo amb mínim privilegi. Sense comptes compartits —un de nominal per persona—, sense contrasenya per a serveis (comptes de sistema amb nologin), i sudo acotat per ordre quan sigui possible en lloc d'ALL. Tot ús de sudo es registra i aquest registre alimenta les deteccions de 05-02.

Permisos i muntatges. Les opcions de muntatge són un control barat i molt efectiu:

# /etc/fstab (extracte)
/dev/vg0/tmp   /tmp       ext4  defaults,nodev,nosuid,noexec  0 2
/dev/vg0/home  /home      ext4  defaults,nodev,nosuid         0 2
/dev/vg0/var   /var       ext4  defaults,nodev                0 2

noexec impedeix executar binaris des d'aquella partició, nosuid anul·la el bit d'escalada de privilegis i nodev bloqueja fitxers de dispositiu. noexec a /tmp talla d'arrel el patró més comú després d'una intrusió: descarregar una eina a /tmp i executar-la.

Paràmetres del kernel. sysctl endureix la pila de xarxa i el comportament del nucli: desactivar el reenviament de paquets en màquines que no són routers, ignorar redireccions ICMP, activar syncookies contra les inundacions SYN, restringir l'accés a dmesg i a les traces del kernel, i activar kernel.randomize_va_space=2 per a l'aleatorització de l'espai d'adreces. Es declaren a /etc/sysctl.d/60-nimbus.conf i s'apliquen amb sysctl --system.

AppArmor i SELinux són controls d'accés obligatoris: limiten el que un procés pot fer encara que s'executi com a root. Si el procés d'Nginx només té permès llegir la seva configuració i escriure els seus logs, un compromís d'Nginx no pot llegir /etc/shadow. A Ubuntu, AppArmor ve actiu i amb perfils per als serveis habituals; la recomanació per a Nimbus és no desactivar-lo mai —el primer que fa molta gent quan alguna cosa no funciona— i aprendre a llegir les seves denegacions al log.


  1. SSH endurit, directiva a directiva

SSH és la porta d'administració i, per tant, l'objectiu preferent.

# /etc/ssh/sshd_config — servidors de Nimbus
Port 22
# Canviar el port NO es un control de seguretat: redueix el soroll dels
# escanejos automatics, pero no atura ningu que faci un escaneig dirigit.
# Aqui el control real es que el 22 nomes es assolible des del bastio (05-04).

PermitRootLogin no
# Ningu no entra com a root. S'entra amb compte nominal i s'escala amb sudo, que
# deixa rastre de QUI va fer que. Amb root directe, el registre no diu res.

PasswordAuthentication no
KbdInteractiveAuthentication no
# Sense contrasenyes: s'elimina de cop la forca bruta, el password spraying i
# el credential stuffing (02-02) contra aquest servei.

PubkeyAuthentication yes
AuthenticationMethods publickey
# Nomes clau publica Ed25519 (03-06). Per al compte de la consultora (A-19)
# s'exigeix a mes segon factor: publickey,keyboard-interactive.

AllowUsers lucia ivan svc-deploy
# Llista blanca explicita: un compte nou NO pot entrar per SSH fins que
# algu l'afegeixi aqui. Denegar per omissio tambe a l'acces.

PermitEmptyPasswords no
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding yes          # necessari per a ProxyJump des del bastio

ClientAliveInterval 300
ClientAliveCountMax 2
# Tanca sessions inactives als 10 minuts: redueix la finestra d'una sessio
# oberta i oblidada en un portatil sense bloquejar.

MaxAuthTries 3
MaxSessions 4
LoginGraceTime 30
# Limiten intents i connexions a mig obrir, i encareixen el sondeig.

LogLevel VERBOSE
# Registra l'EMPREMTA de la clau usada a cada acces: sense aixo, saps que
# va entrar "lucia", pero no amb quina de les seves claus. Es clau en una investigacio.

Es valida amb sshd -t abans de recarregar el servei i, molt important, es prova una segona sessió abans de tancar la primera: un error en aquest fitxer deixa el servidor inaccessible.


  1. auditd, fail2ban i actualitzacions automàtiques

auditd registra crides al sistema i accessos a fitxers. Es configura amb poques regles i ben triades, perquè registrar-ho tot genera gigabytes inservibles:

# /etc/audit/rules.d/nimbus.rules
-w /etc/passwd -p wa -k identitat          # canvis d'usuaris
-w /etc/shadow -p wa -k identitat
-w /etc/sudoers.d/ -p wa -k privilegis     # qui amplia permisos
-w /etc/ssh/sshd_config -p wa -k acces_remot
-w /var/log/audit/ -p wa -k manipulacio_logs   # tocar els logs = alerta S1
-a always,exit -F arch=b64 -S execve -F euid=0 -k execucio_root
-e 2                                       # configuracio IMMUTABLE fins a reiniciar

-w vigila una ruta (p wa = escriptura i canvis d'atributs), -k etiqueta l'esdeveniment per poder cercar-lo, i -e 2 congela les regles: ni tan sols root pot modificar-les sense reiniciar, cosa que impedeix que un atacant desactivi l'auditoria en silenci. Aquests esdeveniments alimenten directament les deteccions D-07 i D-08 de 05-02.

fail2ban llegeix els logs i bloqueja temporalment les IP que fallen repetidament. És útil, però convé situar-lo bé: amb SSH accessible només des del bastió i sense autenticació per contrasenya, fail2ban és la segona línia, no la primera. On sí que aporta valor real és davant de l'API, complementant el límit de taxa de 05-05, i és una de les respostes automàtiques que 05-02 va classificar com a segures per ser reversibles.

Actualitzacions automàtiques de seguretat. Als servidors de Nimbus s'activa unattended-upgrades només per al repositori de seguretat, amb finestra nocturna, reinici automàtic desactivat i notificació per correu. El raonament: la probabilitat que un pedaç de seguretat trenqui alguna cosa és baixa; la probabilitat que un servidor sense pedaços durant sis setmanes sigui explotat, no ho és. Els paquets crítics per al servei (la base de dades) s'exclouen i se'ls apliquen pedaços en finestra planificada.


  1. La gestió de pedaços com a procés

Aplicar pedaços no és executar apt upgrade: és un procés amb inventari, terminis i verificació, que es recolza en la política de prioritats P0-P4 de 05-01.

Pas Què implica a Nimbus
Inventari Quines màquines hi ha i quines versions executen. Sense això no hi ha cobertura (§10, osquery)
Recepció Avisos de la distribució, feed de CVE, KEV de CISA. Automatitzat, no per casualitat
Priorització P0 en 24 h, P1 en 7 dies (control C-16), P2 en 30, P3 en 90
Prova Primer preproducció; per als P0 exposats, s'assumeix el risc i s'aplica el pedaç ja
Finestra Dimarts a les 22:00, amb avís a clients si hi ha tall
Reinici El pas que més es posposa: un kernel amb pedaç sense reiniciar continua sent vulnerable
Verificació Nova passada d'escaneig (05-01) que confirma que la versió va canviar

El compromís real és entre disponibilitat i risc, i convé formular-lo amb honestedat: aplicar un pedaç pot trencar el servei uns minuts; no aplicar-lo pot costar el servei durant dies. La forma de resoldre-ho no és triar un bàndol, sinó reduir el cost d'aplicar pedaços: entorns reproduïbles, desplegament sense tall, i una prova de fum automàtica que confirmi que l'aplicació segueix viva després de la finestra. Quan aplicar un pedaç costa vint minuts i no una nit, el dilema desapareix.

I el cas especial: el reinici pendent. Nimbus el tracta com una troballa amb propietari i termini, no com una molèstia. needrestart indica quins serveis continuen fent servir biblioteques antigues, i aquesta llista es revisa a cada finestra.


  1. L'endpoint de l'empleat

Quaranta portàtils, la meitat fora de l'oficina. És l'actiu A-14 i el principi de la majoria de les intrusions reals.

Control Per què Estat a Nimbus
Xifratge de disc (BitLocker, FileVault, LUKS) Un portàtil robat sense xifrar és una bretxa notificable (06-03); xifrat és una incidència de material 92,3 %, objectiu 98 % (C-11)
Custòdia de claus de recuperació Sense ella, un disc xifrat que falla és pèrdua definitiva de dades Al gestor de secrets, amb accés de dues persones
Bloqueig automàtic de pantalla (5 min, amb contrasenya) L'atac més simple: un portàtil obert en un coworking Per política de MDM
Compte sense privilegis d'administrador El control que més atacs atura: sense admin, el programari maliciós no s'instal·la al sistema ni persisteix Pendent, és la prioritat
Actualitzacions gestionades Un navegador sense pedaços és la via d'entrada més comuna Automàtiques, verificades per osquery
Tallafoc local actiu Protegeix a la wifi de l'hotel, on no hi ha perímetre Activat per línia base
Còpia de seguretat del lloc de treball Ransomware en un portàtil, o simplement un cafè Sincronització + còpia versionada
Control de dispositius USB El baiting de 02-03: un USB al pàrquing de l'oficina Bloqueig d'emmagatzematge massiu, excepcions nominals

El compte sense privilegis d'administrador mereix un paràgraf propi, perquè és el control amb millor relació cost/eficàcia de tota la lliçó i el que més resistència genera. Sense privilegis, la majoria del programari maliciós no es pot instal·lar, no pot persistir entre reinicis, no pot desactivar l'antivirus i no pot llegir les credencials d'altres comptes de l'equip. L'objecció habitual —«els desenvolupadors necessiten instal·lar coses»— es resol gairebé sempre amb gestors de paquets d'usuari, contenidors i una via d'elevació puntual amb registre. L'objecció real que queda és cultural, i es gestiona explicant-ho, no imposant-ho.


  1. Antivirus davant d'EDR

Antivirus tradicional EDR (Endpoint Detection and Response)
Com detecta Signatures de fitxers coneguts, heurística Comportament: què fa el procés, què invoca, amb qui parla
Davant de programari maliciós nou Cec fins que hi ha signatura Pot detectar-lo pel que fa
Visibilitat «Bloquejat» o res Arbre de processos complet, amb línia temporal per investigar
Resposta Quarantena del fitxer Aïllar l'equip, matar processos, recollir evidència en remot
Cost (40 equips) Inclòs al sistema operatiu 1.500-4.000 €/any comercial; Wazuh, gratuït, en cobreix bona part

Per què l'EDR importa, dit sense màrqueting: l'antivirus respon «aquest fitxer és dolent?», i l'EDR respon «què ha passat en aquest equip?». Quan el portàtil de la Sara apareix compromès, l'antivirus diu que va posar alguna cosa en quarantena; l'EDR mostra que un adjunt va obrir PowerShell, que PowerShell va descarregar un fitxer, que aquell fitxer es va copiar a la carpeta d'inici i que va obrir una connexió a un domini registrat fa tres dies. El primer tanca una incidència; el segon permet respondre segons 04-05 i contestar l'única pregunta que importa: fins on va arribar?

Recomanació per a Nimbus amb 18.000 €/any: Microsoft Defender (inclòs) com a antivirus + agent de Wazuh com a capa de visibilitat i resposta. Cobreix el 80 % del que dona un EDR comercial a cost zero de llicència, a canvi d'hores de la Lucía. Quan el pressupost creixi, l'EDR gestionat és la primera compra d'aquesta lliçó.


  1. Gestió de dispositius, BYOD i osquery

MDM (gestió de dispositius) és el que fa aplicable tot l'anterior a quaranta equips sense visitar-ne cap. Aplica la línia base, exigeix xifratge i bloqueig, distribueix actualitzacions, instal·la agents i —el més important— permet l'esborrament remot d'un equip perdut i comprova de forma contínua que la política segueix aplicada. Per a Nimbus, l'opció realista és el MDM inclòs al seu proveïdor d'identitat/ofimàtica, més l'agent de Wazuh.

BYOD (dispositius personals) és on la tècnica es creua amb el legal i el laboral. Nimbus no pot esborrar el mòbil personal de la Sara ni inspeccionar les seves fotos. El plantejament correcte, alineat amb POL-04 (Ús Acceptable), és: accés al correu i a les eines corporatives només des del contenidor de treball gestionat del dispositiu, amb requisits mínims verificables (bloqueig amb PIN, xifratge, sistema al dia, sense root/jailbreak), esborrament remot limitat a les dades corporatives, i informació prèvia i per escrit de què pot veure i fer l'empresa i què no. (Nota de validació legal: a Espanya el control de dispositius del personal exigeix informació prèvia i proporcionalitat; la política BYOD convé revisar-la jurídicament abans d'aplicar-la. Es desenvolupa a 06-03.)

osquery converteix el parc en una base de dades SQL a la qual es poden fer preguntes. És l'eina que respon a les mètriques de 04-03 amb dades i no amb estimacions:

-- Quins portatils NO tenen el disc xifrat? (KPI C-11, objectiu 98 %)
SELECT h.hostname, h.hardware_serial, d.path, d.encryption_status
FROM disk_encryption d JOIN system_info h
WHERE d.encryption_status != 'encrypted';

-- Quins usuaris tenen privilegis d'administrador local?
SELECT u.username, g.groupname FROM users u
JOIN user_groups ug ON u.uid = ug.uid JOIN groups g ON ug.gid = g.gid
WHERE g.groupname IN ('sudo', 'admin', 'wheel');

-- Programari desactualitzat i processos escoltant a la xarxa (superficie real)
SELECT DISTINCT p.name, p.pid, l.address, l.port
FROM listening_ports l JOIN processes p ON l.pid = p.pid
WHERE l.address NOT IN ('127.0.0.1', '::1');

La tercera consulta, executada sobre els servidors, és la que hauria trobat el http.server el primer dia. I totes elles, programades i enviades a Wazuh, converteixen «creiem que el 98 % està xifrat» en un número exacte amb data, que és exactament el que 04-03 exigeix com a evidència.


  1. Automatitzar i verificar la línia base

Per què no s'aplica a mà. Configurar trenta directives en un servidor porta dues hores, es fa diferent la segona vegada, no queda registre de què es va canviar i no es pot repetir quan el servidor es recrea. La línia base s'aplica amb Ansible (o equivalent) o s'enforna en una imatge daurada.

# roles/linia_base/tasks/main.yml (extracte comentat)
- name: Serveis prohibits per la linia base
  ansible.builtin.systemd:
    name: "{{ item }}"
    state: stopped
    enabled: false          # 'enabled: false' es el que impedeix que tornin en reiniciar
  loop: [rpcbind, avahi-daemon, cups]

- name: Configuracio de sshd conforme a la linia base
  ansible.builtin.template:
    src: sshd_config.j2
    dest: /etc/ssh/sshd_config
    validate: "/usr/sbin/sshd -t -f %s"   # NO installa el fitxer si no es valid:
  notify: recarregar sshd                 # evita deixar el servidor inaccessible

- name: Parametres del kernel
  ansible.posix.sysctl:
    name: "{{ item.k }}"
    value: "{{ item.v }}"
    sysctl_file: /etc/sysctl.d/60-nimbus.conf
    reload: true
  loop:
    - { k: net.ipv4.conf.all.accept_redirects, v: "0" }
    - { k: net.ipv4.tcp_syncookies,            v: "1" }
    - { k: kernel.randomize_va_space,          v: "2" }

- name: Regles d'auditd
  ansible.builtin.copy: { src: nimbus.rules, dest: /etc/audit/rules.d/nimbus.rules }
  notify: recarregar auditd

Tres propietats fan valuós aquest fitxer. És idempotent: es pot executar mil vegades i el resultat és el mateix, així que serveix tant per aplicar com per corregir la deriva. És la documentació, perquè descriu exactament com està configurada la flota, sense que pugui quedar desactualitzada. I està versionat, de manera que cada canvi de la línia base passa per revisió com qualsevol altre codi.

L'evolució natural és la infraestructura immutable: en lloc de modificar servidors, es construeix una imatge ja endurida i els servidors se substitueixen a cada desplegament. Elimina la deriva per definició —cap servidor no viu prou per desviar-se— i, com a benefici de seguretat enorme, destrueix qualsevol persistència de l'atacant a cada desplegament. Per a l'API en contenidors de Nimbus això ja és així, i es desenvolupa a 05-07.

Verificar. La línia base no s'aplica i s'oblida: es comprova.

# Cada setmana, sobre cada servidor, des del CI d'infraestructura
sudo lynis audit system --quick --cronjob | tee /var/log/lynis-$(date +%F).log
ansible-playbook linia_base.yml --check --diff    # que HAURIA canviat = deriva

--check --diff és la joia: executa el playbook sense aplicar res i mostra què es desviaria de la línia base. Si el resultat no està buit, algú va tocar alguna cosa a mà i cal esbrinar qui i per què. Es completa amb la vigilància d'integritat de fitxers (FIM de Wazuh) sobre /etc, /usr/bin i les claus SSH, els avisos de la qual van al canal de 05-02 com una detecció més: un canvi no autoritzat a la configuració d'un servidor és un senyal de compromís, no una curiositat.


  1. El sistema heretat que no es pot endurir

Sempre n'hi ha un: un servidor amb una aplicació que només funciona amb una versió antiga, una màquina d'un proveïdor que no permet tocar res, un equip que controla alguna cosa física. Negar-ho no ajuda; la resposta correcta és aïllar i compensar:

  • Aïllar a la seva pròpia zona de xarxa (05-04), amb regles d'entrada i sortida mínimes: si no pot navegar, no pot rebre ordres ni exfiltrar.
  • Compensar amb controls al voltant: proxy invers al davant amb WAF, autenticació a la capa anterior, registre exhaustiu de tot el que entra i surt.
  • Monitorar més, no menys: en ser el sistema més fràgil, és el que necessita les deteccions més sensibles.
  • Còpia i pla de recuperació específics, perquè serà el més difícil de reconstruir.
  • Documentar-lo com a risc acceptat amb caducitat al registre de 04-01, amb data de revisió i, si es pot, pressupost de substitució.

Nimbus té el seu propi cas: A-22, l'entorn de preproducció. No és que no es pugui endurir; és que ningú no ho ha fet. La decisió correcta és aplicar-li la mateixa línia base que a producció —costa el mateix, perquè està automatitzada— i resoldre d'una vegada la classificació «a revisar» de l'inventari.


Errors Comuns i Consells

  • Aplicar un benchmark complet a cegues. Trenques el servei, perds la confiança de l'equip i el projecte d'enfortiment mor la primera setmana.
  • Canviar el port d'SSH i creure que és un control. Redueix soroll; no atura ningú. El control és que només sigui assolible des del bastió.
  • Recarregar sshd sense validar i sense una segona sessió oberta. És la forma clàssica de quedar-se fora d'un servidor de producció.
  • Desactivar AppArmor o SELinux «perquè alguna cosa no funciona». S'ajusta el perfil, no s'apaga el control.
  • Aplicar pedaços sense reiniciar. Un kernel actualitzat i no reiniciat continua sent vulnerable, i la mètrica d'aplicació de pedaços menteix.
  • Deixar tothom amb privilegis d'administrador local. És el control que més atacs atura i el que més es posposa.
  • Aplicar la línia base a mà. No és repetible, no deixa registre i garanteix que cap màquina no sigui igual que una altra.
  • Consell: comença per mesurar. Executa lynis als tres servidors avui: en vint minuts tindràs la llista prioritzada del que cal fer, gratis.
  • Consell: --check --diff setmanal al CI. És la forma més barata de detectar la deriva de configuració i el canvi no autoritzat.
  • Consell: la primera consulta d'osquery que has de llançar és la de xifratge de disc. Converteix un KPI estimat en un número exacte, i sol donar una sorpresa.

Exercicis

Exercici 1 — Prioritzar a partir d'una auditoria

La Lucía executa lynis sobre api-prod-1 i obté, a més de l'índex 58, aquestes troballes:

! Service listening on 0.0.0.0:8000 [python3]
! PermitRootLogin yes / PasswordAuthentication yes
! No file integrity tool installed
! /tmp not a separate partition
! auditd not running
! 14 security updates available (2 kernel)
! Firewall (nftables) not configured
! Default umask 022
  1. Ordena les vuit troballes per prioritat, justificant el criteri.
  2. Indica quines es corregeixen avui i quines requereixen finestra de manteniment, i per què.
  3. Quina d'elles no es resol en aquest servidor, sinó en una altra capa?

Exercici 2 — Dissenyar la línia base del portàtil

La Marta aprova pressupost per posar en regla els 40 portàtils. Defineix la línia base del lloc de treball:

  1. Deu controls amb la seva justificació, ordenats per impacte.
  2. Per a cadascun, com es verifica de forma automàtica que segueix aplicat.
  3. Què faries amb el desenvolupador que exigeix privilegis d'administrador permanents.

Exercici 3 — Interpretar una deriva de configuració

L'ansible-playbook --check --diff setmanal retorna això sobre api-prod-2:

TASK [linia_base : Configuracio de sshd] ************
--- before: /etc/ssh/sshd_config
+++ after:  /etc/ssh/sshd_config
-PasswordAuthentication yes
+PasswordAuthentication no
-AllowUsers lucia ivan svc-deploy suport-tmp
+AllowUsers lucia ivan svc-deploy

TASK [linia_base : Regles d'auditd] *****************
--- before: (fitxer absent)
+++ after:  /etc/audit/rules.d/nimbus.rules
changed: [api-prod-2]

Interpreta cada diferència, indica què és més greu i quines accions prendries.


Solucions

Exercici 1

(1) Ordre per prioritat, aplicant el criteri de 05-01 —exposició i explotabilitat primer, no gravetat nominal—:

Ordre Troballa Justificació
1 python3 escoltant a 0.0.0.0:8000 Servei no autoritzat, exposat, servint un directori desconegut, actiu des de fa mesos. És exposició actual, no hipotètica
2 PasswordAuthentication yes + PermitRootLogin yes Converteix SSH en un objectiu de força bruta contra root. Dues línies de configuració
3 14 actualitzacions de seguretat, 2 de kernel Vulnerabilitats conegudes i amb pedaç. Es creuen amb KEV: si alguna és al catàleg, puja al lloc 1
4 Tallafoc local sense configurar Defensa en profunditat després del grup de seguretat de 05-04. Important, però ja hi ha una capa al davant
5 auditd aturat No és exposició: és ceguesa. Sense ell no hi ha detecció D-07/D-08 ni evidència forense
6 Sense eina d'integritat de fitxers Mateixa categoria: visibilitat, no exposició
7 /tmp sense partició separada Impedeix noexec, que talla un patró habitual post-intrusió. Requereix feina de disc
8 umask 022 Risc baix (fitxers nous llegibles per tothom). Es corregeix amb la resta de la línia base

(2) Avui davant de finestra. Es corregeixen avui, sense tall: el http.server (matar el procés i eliminar la unitat), les directives d'SSH (recarregar sshd no talla les sessions existents, sempre validant abans amb sshd -t i amb una segona sessió oberta), auditd, el tallafoc local —amb compte d'aplicar la regla de permetre SSH abans que la política de denegar per omissió— i l'umask. Requereixen finestra de manteniment: les 2 actualitzacions de kernel, perquè exigeixen reinici i sense ell la vulnerabilitat segueix viva; i la partició separada de /tmp, que implica repartir el disc. Les 12 actualitzacions restants es poden aplicar en horari laboral si no afecten serveis actius, encara que convé agrupar-les a la finestra del dimarts.

(3) La troballa que no es resol aquí és, en rigor, la d'exposició del port 8000: eliminar el procés és la correcció immediata, però la pregunta de fons —per què un servei no autoritzat era assolible des d'Internet?— es respon a 05-04, amb el grup de seguretat que només hauria de permetre 443 des del balancejador. La resposta completa combina dues capes: l'enfortiment treu el servei, i la xarxa impedeix que un servei futur sigui assolible. Aquest és exactament el sentit de la defensa en profunditat d'01-03.

Exercici 2

(1) i (2) Línia base del lloc de treball:

# Control Justificació Verificació automàtica
1 Sense privilegis d'administrador local El que més atacs atura: sense ell no hi ha instal·lació ni persistència Consulta osquery de membres d'admin/sudo, setmanal
2 Xifratge de disc amb clau custodiada Un robatori passa de bretxa notificable a incidència de material disk_encryption a osquery; KPI C-11
3 Actualitzacions automàtiques del sistema i del navegador El navegador sense pedaços és la via d'entrada més comuna Versió i data de l'últim pedaç via MDM/osquery
4 Bloqueig de pantalla als 5 minuts amb contrasenya Atac físic trivial fora de l'oficina Política de MDM amb informe de compliment
5 Antivirus + agent Wazuh actius Detecció i, sobretot, visibilitat per respondre Batec de l'agent; alerta si un equip deixa de reportar
6 Tallafoc local actiu Fora de l'oficina no hi ha perímetre osquery sobre l'estat del tallafoc
7 VPN sempre activa fora de l'oficina (05-04) DNS filtrat i accés controlat des de qualsevol xarxa Connexions registrades per usuari al servidor VPN
8 Còpia de seguretat del lloc de treball Ransomware local o pèrdua física Data de l'última còpia per equip, amb alerta als 7 dies
9 Control d'emmagatzematge USB Baiting de 02-03 Política de MDM + esdeveniments d'auditd/osquery
10 Inventari i baixa documentada Un equip no inventariat no està protegit i no es pot esborrar Reconciliació mensual entre MDM, RH i l'inventari d'01-04

La verificació és el que separa aquesta llista d'un document decoratiu: cada control té una consulta que produeix un número amb data, i aquest número és l'evidència que 04-03 demana i que un client o un auditor sol·licitarà a 06-04.

(3) El desenvolupador que demana administrador permanent. No se li diu que no sense més, ni se li diu que sí. Primer s'esbrina el cas d'ús concret —normalment instal·lar dependències, fer servir contenidors o depurar—, perquè gairebé tots es cobreixen sense privilegis permanents: gestors de paquets a l'espai de l'usuari, Docker amb el grup adequat, i eines preaprovades instal·lades pel MDM. Per al que quedi, s'ofereix elevació puntual amb registre: una via que concedeix privilegis durant un temps limitat, deixa rastre de què es va fer i no sobreviu al reinici. És el mateix model just-in-time d'A-19 aplicat al lloc de treball. Si així i tot queda un cas irreductible, es documenta com a excepció amb responsable i caducitat (04-02), es compensa amb monitoratge reforçat en aquell equip, i es revisa cada sis mesos: gairebé totes les excepcions d'aquest tipus deixen de ser necessàries abans de la primera revisió.

Exercici 3

Primera diferència — PasswordAuthentication yes al servidor. Algú va desactivar a mà un control de la línia base en un servidor de producció. És el més greu de l'informe per tres motius: reobre l'autenticació per contrasenya, i amb ella la força bruta i el credential stuffing; és exactament el que faria un atacant per garantir-se el retorn després de perdre el seu accés original; i és un canvi no autoritzat, és a dir, un indicador de compromís fins que es demostri el contrari. Accions immediates: no revertir-ho en silenci. Primer, consultar el registre d'auditd (-w /etc/ssh/sshd_config -p wa) per saber qui i quan; revisar els accessos SSH amb èxit per contrasenya des d'aquell moment; i només llavors reaplicar la línia base. Si no apareix una explicació legítima amb tiquet, es tracta com a incident S2 segons 04-05.

Segona diferència — suport-tmp a AllowUsers. Un compte temporal —el nom el delata— amb accés SSH a producció, que va sobreviure al motiu que el va crear. És la mateixa família de problemes que l'excepció sense caducitat d'A-19 i que el http.server: el que és temporal i s'hi queda. Es comprova qui el fa servir, quan es va crear, si té clau associada i què va fer; s'elimina el compte i no només la línia d'AllowUsers; i es revisa si existeixen comptes equivalents als altres servidors.

Tercera diferència — regles d'auditd absents. El fitxer no existeix a api-prod-2. És menys alarmant que les dues anteriors perquè pot deure's simplement al fet que la màquina es va crear abans que la regla entrés a la línia base, però té una conseqüència greu sobre aquest mateix exercici: sense auditd, la investigació del primer punt pot no tenir dades, i per això convé comprovar primer si el fitxer va arribar a existir. Acció: aplicar la línia base completa i verificar que a la resta de servidors sí que hi és.

Conclusió transversal de l'exercici. Les tres troballes van aparèixer perquè existia una línia base automatitzada i una comprovació setmanal. Sense --check --diff, el PasswordAuthentication yes hauria romàs invisible fins al pentest següent o fins que algú l'hagués fet servir. Aquest és l'argument sencer de la lliçó: l'enfortiment no és aplicar configuracions, és mantenir una diferència igual a zero.


Conclusió

Has aplicat al sistema operatiu la reducció de superfície que el mòdul 1 va plantejar en abstracte. Saps què és l'enfortiment i, sobretot, què és una línia base: un conjunt de configuracions escrit, versionat i aplicable per una màquina, sense el qual cada servidor acaba diferent, ningú no sap quin és el correcte i la deriva és invisible. Coneixes els CIS Benchmarks i els STIG, i el procediment honest per fer-los servir —avaluar, filtrar per nivell i rol, provar en preproducció i documentar excepcions— juntament amb l'avís que evita el fracàs més comú: aplicar 300 controls a cegues trenca el servei i mata el projecte la primera setmana. Saps avaluar abans de tocar amb lynis i OpenSCAP, i llegir la seva sortida cercant exposició real en lloc de presumir d'índex.

Tens l'enfortiment del servidor Linux complet: minimitzar serveis —on mor definitivament el python -m http.server d'01-04, eliminant la unitat i no només matant el procés—, comptes nominals i sudo acotat, muntatges amb noexec, nosuid i nodev que tallen d'arrel el patró de descarregar i executar des de /tmp, paràmetres del kernel, i AppArmor/SELinux amb la regla d'ajustar-los i no apagar-los. Domines el sshd_config directiva a directiva, amb PermitRootLogin no, sense contrasenyes, només claus Ed25519, AllowUsers com a llista blanca, temps d'inactivitat, LogLevel VERBOSE per registrar l'empremta de la clau usada, i l'advertiment que canviar el port no és un control: ho és que només sigui assolible des del bastió. Saps configurar auditd amb poques regles ben triades i -e 2 per congelar-les, situar fail2ban com a segona línia i activar actualitzacions automàtiques de seguretat amb criteri.

Manegues la gestió de pedaços com a procés —inventari, recepció, priorització P0-P4, prova, finestra, reinici i verificació— amb la clau que dissol el dilema entre disponibilitat i risc: reduir el cost d'aplicar pedaços fins que duri vint minuts. Tens la línia base de l'endpoint amb els seus vuit controls, encapçalada pel que més atacs atura i més resistència genera —el compte sense privilegis d'administrador—, i saps distingir antivirus d'EDR per la pregunta que respon cadascun: «aquest fitxer és dolent?» davant de «fins on va arribar?». Saps què aporta el MDM, com plantejar el BYOD de forma compatible amb POL-04 i amb la llei, i com fer servir osquery per convertir estimacions en números amb data, inclosa la consulta que hauria trobat el http.server el primer dia. I t'endus el que fa sostenible tot l'anterior: automatitzar amb Ansible de forma idempotent, versionada i autodocumentada, l'evolució cap a la infraestructura immutable que destrueix qualsevol persistència a cada desplegament, i la verificació setmanal amb --check --diff, perquè l'enfortiment no és aplicar configuracions sinó mantenir una diferència igual a zero. Amb el sistema heretat, la resposta és aïllar, compensar, monitorar més i documentar el risc amb caducitat.

Fixa't en l'última idea, perquè és el pont. La infraestructura immutable, les imatges daurades i els contenidors de l'API fa tota la lliçó que apareixen com la millor forma d'aplicar una línia base, i tanmateix l'enfortiment clàssic no els cobreix: un contenidor no és una màquina virtual, no s'hi apliquen pedaços, es reconstrueix; i el compte cloud que l'executa té una superfície pròpia que cap lynis no mira. Aquí és on avui es produeixen la majoria de les bretxes, i no per un exploit sinó per un error de configuració: un bucket públic, una política de permisos massa àmplia, unes còpies que viuen al mateix compte que producció. A Seguretat al Núvol i en Contenidors (05-07) tanquem el pla tècnic del curs: responsabilitat compartida en el tècnic, identitat com a nou perímetre, el bucket A-02 ben configurat d'una vegada, xarxa i còpies aïllades per compte, registre i alertes del núvol, postura automatitzada amb prowler i checkov, imatges segures amb el seu Dockerfile abans i després, signatura amb cosign, execució amb capacitats mínimes i detecció en temps d'execució amb Falco.

Curs de Fonaments de Seguretat Informàtica

Mòdul 1: Introducció a la Seguretat Informàtica

Mòdul 2: Ciberseguretat

Mòdul 3: Criptografia

Mòdul 4: Gestió de Riscos i Mesures de Protecció

Mòdul 5: Eines i Tècniques de Seguretat

Mòdul 6: Bones Pràctiques i Normatives

Mòdul 7: Projecte Final

© Copyright 2026. Tots els drets reservats