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
- Què és l'enfortiment i què és una línia base
- Estàndards de referència: CIS Benchmarks i STIG
- Avaluar abans de tocar: lynis i OpenSCAP
- Enfortiment del servidor Linux, pas a pas
- SSH endurit, directiva a directiva
auditd,fail2bani actualitzacions automàtiques- La gestió de pedaços com a procés
- L'endpoint de l'empleat
- Antivirus davant d'EDR
- Gestió de dispositius, BYOD i
osquery - Automatitzar i verificar la línia base
- El sistema heretat que no es pot endurir
- 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
- 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:
- Avaluar primer sobre un sistema real i veure la distància actual (§3).
- 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.
- Provar en preproducció, en tandes petites i amb reinici inclòs, perquè molts controls només mostren el seu efecte en reiniciar.
- 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.
- 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.xmllynis --quickno espera confirmació entre seccions: és el que permet executar-lo des decron. Dona una puntuació orientativa i una llista de suggeriments prioritzats.oscapavalua 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.
- 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 --purgeLa 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 2noexec 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.
- 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.
auditd, fail2ban i actualitzacions automàtiques
auditd, fail2ban i actualitzacions automàtiquesauditd 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.
- 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.
- 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.
- 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çó.
- Gestió de dispositius, BYOD i
osquery
osqueryMDM (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.
- 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 auditdTres 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.
- 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
sshdsense 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
lynisals tres servidors avui: en vint minuts tindràs la llista prioritzada del que cal fer, gratis. - Consell:
--check --diffsetmanal al CI. És la forma més barata de detectar la deriva de configuració i el canvi no autoritzat. - Consell: la primera consulta d'
osqueryque 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- Ordena les vuit troballes per prioritat, justificant el criteri.
- Indica quines es corregeixen avui i quines requereixen finestra de manteniment, i per què.
- 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:
- Deu controls amb la seva justificació, ordenats per impacte.
- Per a cadascun, com es verifica de forma automàtica que segueix aplicat.
- 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
- Conceptes Bàsics de Seguretat Informàtica
- Tipus d'Amenaces i Vulnerabilitats
- Principis de la Seguretat Informàtica
- Actius, Superfície d'Atac i Actors d'Amenaça
Mòdul 2: Ciberseguretat
- Definició i Abast de la Ciberseguretat
- Tipus d'Atacs Cibernètics
- Enginyeria Social i Pesca de Credencials
- Mesures de Protecció en Ciberseguretat
- Identitat, Autenticació i Control d'Accés
- Casos d'Estudi d'Incidents de Ciberseguretat
Mòdul 3: Criptografia
- Introducció a la Criptografia
- Criptografia Simètrica
- Criptografia Asimètrica
- Funcions Hash, HMAC i Emmagatzematge de Contrasenyes
- Protocols Criptogràfics
- Gestió de Claus, Certificats i PKI
- Aplicacions de la Criptografia
Mòdul 4: Gestió de Riscos i Mesures de Protecció
- Avaluació de Riscos
- Polítiques de Seguretat
- Controls de Seguretat
- Risc de Tercers i Cadena de Subministrament
- Pla de Resposta a Incidents
- Recuperació davant Desastres i Continuïtat de Negoci
Mòdul 5: Eines i Tècniques de Seguretat
- Eines d'Anàlisi de Vulnerabilitats
- Tècniques de Monitoratge i Detecció
- Proves de Penetració
- Seguretat en Xarxes
- Seguretat en Aplicacions
- Enfortiment de Sistemes i Seguretat de l'Endpoint
- Seguretat al Núvol i en Contenidors
Mòdul 6: Bones Pràctiques i Normatives
- Bones Pràctiques en Seguretat Informàtica
- Normatives i Estàndards de Seguretat
- Protecció de Dades Personals i RGPD a la Pràctica
- Compliment i Auditoria
- Formació i Sensibilització
- Ètica, Aspectes Legals i Divulgació Responsable
