La lliçó anterior va acabar amb una frase incòmoda: l'anàlisi de vulnerabilitats troba portes mal tancades, però no veu ningú entrant-hi. Si demà algú fa servir la credencial de la consultora a les 22:14, cap escàner no se n'assabentarà: l'accés és legítim i la credencial és vàlida. Aquesta lliçó construeix el que falta i compleix la promesa pendent des de 04-03, on l'anàlisi de l'incident de 02-06 va revelar que el ransomware de Nimbus no va trobar cap control detectiu en cinc de les sis funcions. Muntarem la telemetria, la centralitzarem, escriurem deteccions que es disparin amb el que importa i callin amb el que no, i mesurarem si funcionen.

Contingut

  1. Per què la detecció importa més que la prevenció perfecta
  2. La piràmide de la telemetria: quines fonts té Nimbus
  3. Higiene del registre: què es desa, com i durant quant de temps
  4. Protecció dels propis registres
  5. Centralització: SIEM i observabilitat
  6. Detecció per regles davant de detecció per comportament
  7. El catàleg mínim de deteccions de Nimbus
  8. Escriure deteccions: Sigma, SQL i llindars
  9. La qualitat de l'alerta i la fatiga
  10. Detecció a la xarxa i a l'endpoint
  11. Resposta automatitzada: què sí i què mai
  12. Caça d'amenaces i mètriques de detecció

  1. Per què la detecció importa més que la prevenció perfecta

La prevenció falla sempre en algun punt, i no per incompetència: falla perquè l'atacant tria on provar i tu has d'encertar-la a tots els llocs alhora. Un pedaç arriba tard, un empleat fa clic, un tercer pateix una bretxa, una credencial es filtra. Un model de seguretat que només preveu és un model que aposta a no fallar mai.

La mètrica que resumeix el fracàs o l'èxit de la detecció és el temps de permanència (dwell time): l'interval entre el primer accés de l'atacant i el moment en què algú se n'assabenta. És la variable que més determina el dany, com va concloure 02-06.

Moment de l'incident de Nimbus Dia Què hauria estat detectable
Accés amb el compte compartit de la consultora 0 Autenticació de tercer fora de la finestra pactada
Reconeixement des de la xarxa d'administració 1-4 Connexions internes cap a la zona de dades
Accés a PostgreSQL amb credencial d'un runbook 5 Sessió de base de dades des d'un origen no habitual
Exfiltració d'1,2 TB durant set dies 6-15 Volum de sortida anòmal i accessos massius al bucket A-02
Alerta de cost anòmal, ignorada entre 200 correus 16 El senyal existia i el canal el va enterrar
Esborrament de còpies i xifratge 20 Esborrament massiu d'instantànies
Detecció real 20 Per les trucades dels clients

Dues lectures importen més que la resta. La primera: hi havia set oportunitats de detecció i cap no estava instrumentada. La segona, més subtil: la del dia 16 sí que va existir i va fallar igualment, perquè va arribar com un correu entre altres dos-cents. Un senyal sense destinatari, sense prioritat i sense procediment no és una detecció: és soroll amb bona intenció. Reduir el dwell time de 20 dies a un dia no requereix un SOC de 24 hores; requereix les dotze deteccions de l'apartat 7 i un canal on algú les miri.


  1. La piràmide de la telemetria: quines fonts té Nimbus

No es detecta el que no es registra. Abans d'escriure ni una sola regla cal saber quines dades ja existeixen —gairebé sempre més de les que l'equip es pensa— i què permet veure cadascuna.

Font Què permet detectar Volum/dia Cost d'activar
Logs de l'aplicació FastAPI Abús de negoci: exportacions massives, IDOR intentat, patrons per tenant 400 MB Nul (ja existeixen)
Logs d'accés d'Nginx Força bruta, escaneig de rutes, agents anòmals, pics d'error 4xx/5xx 300 MB Nul
Logs de PostgreSQL Connexions des d'orígens no esperats, errors d'autenticació, consultes lentes o massives 80 MB Baix (log_connections, pgaudit)
Taula d'auditoria append-only (C-07) Qui va accedir a quina dada de quin client. La font més valuosa de Nimbus 60 MB Ja implantat
auditd del sistema Execució de processos, canvis en fitxers sensibles, ús de sudo 150 MB Baix (05-06)
Autenticació (SSO, SSH, VPN) Password spraying, accessos des de país inusual, MFA fallit 20 MB Nul
Registre d'activitat del proveïdor cloud Canvis de política, creació d'usuaris, desactivació de logs 200 MB Baix (05-07)
Logs d'accés al bucket A-02 Descàrrega massiva d'adjunts clínics 100 MB Baix, avui desactivat
DNS Comandament i control, dominis acabats de registrar, exfiltració per DNS 250 MB Baix (05-04)
Correu Phishing entrant, regles de reenviament creades per un atacant 10 MB Nul
EDR / Wazuh als endpoints Programari maliciós, persistència, moviment lateral als 40 portàtils 500 MB Mitjà (§10)

L'observació decisiva: nou de les onze fonts ja existeixen o costen gairebé res. El que li faltava a Nimbus el dia de l'incident no era pressupost de telemetria; era recollir-la en un lloc i mirar-la. I les dues absències que més van pesar —logs d'accés al bucket i registre d'activitat cloud revisat— són caselles de configuració, no productes.


  1. Higiene del registre: què es desa, com i durant quant de temps

Què es registra i què mai

Reprenent 02-04: un log és un actiu amb dades personals (A-18, classificat confidencial). Registrar de més crea una segona base de dades sensible, pitjor protegida que la primera.

Registrar sempre No registrar mai
Marca temporal amb zona horària, identificador de petició Contrasenyes, ni tan sols fallides o «truncades»
Identitat de l'actor (usuari, servei) i tenant_id Tokens, galetes de sessió, claus d'API
Acció, recurs afectat i resultat (èxit/fallada) Dades de salut, notes clíniques, cossos complets de resposta
IP d'origen i agent d'usuari Números de targeta o dades de pagament
Canvis de permisos, de configuració i de política Fitxers adjunts o el seu contingut

Format estructurat

Un log en text lliure obliga a escriure expressions regulars fràgils. Un log en JSON es consulta com a dades:

# app/core/logging.py — logger estructurat de l'API de Nimbus
import json, logging, time, uuid
from contextvars import ContextVar

# request_id viatja per tota la peticio sense passar-lo com a parametre: es el que
# permet reconstruir despres els 40 esdeveniments que va generar una sola crida.
request_id: ContextVar[str] = ContextVar("request_id", default="-")

class JsonFormatter(logging.Formatter):
    def format(self, record):
        esdeveniment = {
            "ts": time.strftime("%Y-%m-%dT%H:%M:%S%z", time.gmtime(record.created)),
            "nivell": record.levelname,
            "esdeveniment": record.getMessage(),   # nom estable: "reserva.exportada"
            "request_id": request_id.get(),
            "servei": "nimbus-api",
            "host": record.name,
        }
        # Els camps de negoci arriben per `extra` i MAI no inclouen dades cliniques:
        # tenant_id i actor_id son identificadors, no contingut.
        esdeveniment.update(getattr(record, "camps", {}))
        return json.dumps(esdeveniment, ensure_ascii=False)

# Us a l'endpoint d'exportacio, que es el que vigila la deteccio D-05:
log.info("reserva.exportada", extra={"camps": {
    "actor_id": usuari.id, "actor_rol": usuari.rol,
    "tenant_id": tenant.id, "num_registres": len(files),
    "ip": peticio.client.host,
}})

Tres decisions importen més que el codi: el nom de l'esdeveniment és estable (reserva.exportada, no una frase que canvia amb cada refactorització, perquè les regles es trenquen si el text canvia); tenant_id és sempre present, cosa que permet detectar que un usuari d'un client va tocar dades d'un altre; i el contingut no hi entra mai, només el seu recompte (num_registres).

Temps i retenció

Sense rellotges sincronitzats, la correlació és impossible. Si el servidor de l'API va 40 segons avançat respecte al de base de dades, la seqüència «primer la petició, després la consulta» apareix invertida i la investigació construeix una història falsa. Tots els sistemes de Nimbus se sincronitzen per NTP, registren en UTC i afegeixen la zona només a la presentació. És gratis i és el prerequisit de tota la resta.

La retenció es decideix per cost i per obligació: Nimbus desa 90 dies en calent (consultable en segons, ~2 TB) i 12 mesos en fred (emmagatzematge barat, restaurable en hores), alineat amb la retenció de 12 mesos de la taula d'auditoria de C-07. El criteri de fons: si el dwell time típic ronda els 20 dies, una retenció de 7 dies garanteix que la investigació comenci cega.


  1. Protecció dels propis registres

El primer objectiu de l'atacant amb privilegis no són les dades: és el registre que demostra què va fer. És la fase de la Kill Chain que 02-06 va documentar com a esborrament de rastres, i per això els logs necessiten tres propietats:

  • Sortir del host immediatament. Un log que només viu a la màquina compromesa s'esborra amb una ordre. L'agent envia cada esdeveniment al col·lector en segons, no per lots nocturns.
  • Emmagatzemar-se de forma immutable. Bucket amb retenció bloquejada i versionat (05-07), en compte separat de producció i amb credencials diferents. És la mateixa lliçó de les còpies de 04-06: si les mateixes credencials que administren producció poden esborrar el registre, no hi ha registre.
  • Escriure's en un sol sentit. El servei que genera logs té permís d'escriptura, mai d'esborrament ni de modificació.

I un indicador que molts obliden: l'absència de logs és una alerta. Si una font que emet 400 MB al dia deixa d'emetre durant una hora, això és una detecció (D-09 del catàleg), no una fallada de monitoratge que es revisa l'endemà.


  1. Centralització: SIEM i observabilitat

SIEM Stack d'observabilitat
Pregunta que respon Ha passat alguna cosa dolenta? Per què va lent o falla?
Dissenyat per a Correlació, detecció, retenció llarga, cadena de custòdia Mètriques, traces i consulta ràpida de logs
Exemples lliures Wazuh, OpenSearch + regles Loki + Grafana, Prometheus, Tempo
El que li falta a l'altre Pot consultar logs, però sense mètriques de rendiment Pot alertar, però sense regles de seguretat ni compliment
flowchart LR
    subgraph Origens
      A["API FastAPI\nJSON estructurat"]
      B["Nginx / PostgreSQL"]
      C["auditd / SSH\n40 portatils"]
      D["Cloud: activitat,\nbucket A-02, DNS"]
    end
    A & B & C --> AG["AGENT\nwazuh-agent / promtail\nenvia en segons"]
    D --> AG2["Collector cloud\n(pull per API)"]
    AG & AG2 --> CO["COLLECTOR\nnormalitza i enriqueix:\ncamps comuns, geoIP, actiu"]
    CO --> AL["MAGATZEM\n90 dies calent +\n12 mesos fred immutable"]
    AL --> DE["MOTOR DE DETECCIO\nregles Sigma, llindars,\nlinia base"]
    DE --> AC["ALERTA\ncanal de seguretat\n-> runbook RB-01 (04-05)"]
    AL --> CZ["CONSULTA\ninvestigacio i caca\nd'amenaces"]

El pas que decideix si el sistema serveix és la normalització al col·lector: convertir usuario, user, account_name i principalId en un únic camp actor.id. Sense això, cada regla s'ha d'escriure cinc vegades i la correlació entre fonts no existeix.

Opció per a una pime Cost/any Esforç de muntatge Quan triar-la
Wazuh (autoallotjat) ~600 € d'infraestructura 40-60 h inicials + 4 h/mes Recomanada per a Nimbus: SIEM + agent d'endpoint + FIM + compliment en un sol producte
Loki + Grafana ~400 € 20 h + 2 h/mes Si ja hi ha Grafana; molt bo consultant, més pobre detectant
OpenSearch + regles pròpies ~1.200 € 80 h + 8 h/mes Volums alts i necessitat de flexibilitat total
SIEM gestionat (MDR) 6.000-25.000 € 10 h Quan es compra l'ull humà 24/7, no l'eina
Elastic/Splunk comercial Des de 15.000 € Alt Fora del pressupost de 18.000 €/any de Nimbus

Decisió de Nimbus: Wazuh autoallotjat. Cobreix les onze fonts, inclou agent per als 40 portàtils i deixa pressupost. L'honestedat obliga a dir el que no cobreix: ningú no mirarà les alertes a les 3 de la matinada. Amb 440 h/any de la Lucía, l'objectiu realista no és un SOC: és que les alertes crítiques arribin a un canal amb guàrdia i que la resta es revisi cada matí.


  1. Detecció per regles davant de detecció per comportament

Enfocament Com funciona Fort en Fals positiu típic
Signatura Cerca un patró exacte (ordre, hash, domini) Amenaça coneguda; zero ambigüitat Gairebé cap, però s'evadeix canviant un byte
Llindar Compta esdeveniments per finestra de temps Força bruta, exfiltració per volum La migració d'un client que exporta 50.000 registres legítims
Llista Permesos o bloquejats (IP, països, processos) Reduir soroll i acotar el que s'espera Un comercial de viatge en un país no llistat
Anomalia / UEBA Compara amb la línia base de l'usuari o del servei Amenaça desconeguda, credencial robada, intern Molts: tot el que és nou sembla anòmal les primeres setmanes

La regla pràctica: comença per llindars i llistes, que són barats i explicables; afegeix signatures per al que és conegut; deixa l'anomalia per a quan tinguis línia base i temps d'afinat. Una detecció d'anomalia sense tres mesos de dades netes genera tant de soroll que es desactiva sola. I un advertiment de fons: les regles detecten el que algú ja va imaginar; per això l'apartat 12 introdueix la caça d'amenaces, que cerca el que no es va imaginar.


  1. El catàleg mínim de deteccions de Nimbus

Aquestes dotze deteccions cobreixen les set oportunitats perdudes de l'apartat 1 i es construeixen sobre fonts que ja existeixen. És el lliurable central de la lliçó.

id Detecció Font Lògica Severitat Acció
D-01 Força bruta / password spraying SSO, Nginx > 10 fallades d'un origen en 5 min, o > 5 comptes diferents fallits des d'una IP en 15 min S3 Bloquejar IP (fail2ban) i avisar
D-02 Inici de sessió des de país inusual SSO + geoIP Èxit des de país fora de la llista de permesos, o viatge impossible S2 Verificar amb la persona; revocar sessió
D-03 Credencial de servei fora d'horari Cloud, PostgreSQL Ús de nimbus_api o del compte de la consultora (A-19) fora de la finestra pactada S1 Runbook RB-01; suspendre accés
D-04 Accés massiu al bucket d'adjunts Logs d'accés A-02 > 500 objectes descarregats per un principal en 10 min S1 Tallar credencial; activar 04-05
D-05 Exportació anòmala per suport Auditoria C-07 Un usuari de suport accedeix a > 3 tenants o exporta > 1.000 registres en 1 h S2 Contactar amb el Rubén; congelar sessió
D-06 Canvi a la política del bucket Activitat cloud PutBucketPolicy, PutBucketAcl o desactivació del bloqueig públic S1 Revertir i verificar autoria
D-07 Creació d'usuari o rol privilegiat Cloud, SSO, PostgreSQL Alta de compte amb permisos administratius S2 Confirmar contra tiquet de canvi
D-08 Desactivació de registre o d'alertes Activitat cloud, auditd StopLogging, esborrament de configuració d'auditoria S1 Tractar com a compromís confirmat
D-09 Silenci d'una font Metadades del col·lector Una font activa deixa d'emetre > 30 min S2 Verificar si és fallada o sabotatge
D-10 Esborrament de còpies o instantànies Activitat cloud DeleteBackup, DeleteSnapshot o esborrament massiu de versions S1 És el dia 20 de 02-06. Crisi
D-11 Ús d'un token revocat o caducat API Petició amb jti a la llista de revocació (03-07) S2 Investigar origen
D-12 Canvi als registres DNS del domini Registrador, monitor extern Alteració d'A, MX, NS o TXT/SPF de nimbusreservas.example S1 Verificar; possible apropiació (05-04)

Tres observacions. Primera: sis són de severitat S1 i totes indiquen compromís en curs, no sospita. Segona: D-03, D-04 i D-10 haurien detectat l'incident els dies 0, 6 i 20 respectivament —la primera l'hauria tallat abans que comencés—. Tercera: cap no requereix comprar res. Són consultes sobre dades que Nimbus ja genera o que s'activen amb una casella.


  1. Escriure deteccions: Sigma, SQL i llindars

Sigma és el format obert per escriure regles de detecció de forma independent del SIEM: s'escriu un cop i es converteix a Wazuh, OpenSearch o Loki. Aquesta és D-03, camp a camp:

title: Acces de tercer fora de la finestra pactada
id: 8f3c1a90-0c31-4c0e-9c8f-nimbus-d03
status: stable
description: >
  Detecta autenticacio correcta del compte de la consultora (A-19) fora de
  la finestra acordada al contracte (DL-DV 09:00-18:00 CET). Es exactament el
  dia 0 de l'incident de 02-06, que va passar inadvertit durant 20 dies.
references:
  - "POL-02 5.4 Acces de tercers"
  - "04-04 Risc de tercers"
author: Lucia (Nimbus Reservas)
date: 2026/04/12
logsource:
  product: linux          # producte d'origen: acota on s'aplica la regla
  service: sshd           # servei concret dins del producte
detection:
  seleccio:               # el que HA DE complir-se
    esdeveniment: "authentication_success"
    usuari|startswith: "svc-consultora"
  finestra_laboral:       # el que, si es compleix, EXCLOU l'esdeveniment
    hora_utc|gte: 8
    hora_utc|lt: 17
    dia_setmana|lte: 5
  condition: seleccio and not finestra_laboral
falsepositives:
  - "Intervencio d'emergencia autoritzada amb tiquet obert"
  - "Canvi d'horari d'estiu mal aplicat a l'agent"
level: critical
tags:
  - attack.initial_access
  - attack.t1078.003        # Valid Accounts: Local Accounts

Cinc camps fan la feina. logsource acota on s'aplica, i equivocar-lo és la causa número u de regles que no disparen mai. detection defineix blocs amb nom que després es combinen a condition, i el patró seleccio and not excepcio és el més útil de tots: descriu el que és sospitós i resta el que és legítim. falsepositives documenta el que ja saps que saltarà, perquè qui rebi l'alerta a les 3 de la matinada no ho hagi de descobrir sol. I tags amb la tècnica ATT&CK permet mesurar cobertura (§12).

D-05 no és una regla de log: és una consulta sobre la taula d'auditoria append-only de C-07.

-- D-05: exportacio anomala per un usuari de suport.
-- S'executa cada 10 minuts sobre la taula append-only (C-07).
WITH activitat AS (
    SELECT actor_id,
           COUNT(*)                          AS accessos,
           COUNT(DISTINCT tenant_id)         AS tenants_tocats,
           SUM(num_registres)                AS registres_llegits,
           MIN(ts) AS des_de, MAX(ts) AS fins_a
    FROM auditoria_accessos
    WHERE ts > now() - interval '1 hour'
      AND accio IN ('reserva.exportada', 'client.llistat', 'adjunt.descarregat')
    GROUP BY actor_id
)
SELECT a.actor_id, u.nom, u.rol,
       a.accessos, a.tenants_tocats, a.registres_llegits, a.des_de, a.fins_a
FROM activitat a
JOIN usuaris u ON u.id = a.actor_id
WHERE u.rol = 'suport'                        -- nomes el perfil vigilat
  AND (a.tenants_tocats > 3                   -- 1) toca massa clients
       OR a.registres_llegits > 1000)         -- 2) o extreu massa volum
ORDER BY a.registres_llegits DESC;

La consulta expressa una idea de negoci, no tècnica: un agent de suport legítim atén un client cada vegada. Tocar quatre tenants en una hora no és il·legal al model de permisos —el WHERE tenant_id continua aplicant-se— però és rar, i el que és rar és el que s'investiga. És també l'únic tipus de detecció que hauria vist un empleat descontent, un escenari que cap signatura no cobreix.

I D-04 com a llindar declaratiu, tal com es defineix al motor d'alertes:

- id: D-04
  nom: "Descarrega massiva del bucket d'adjunts A-02"
  font: cloud.s3.access_log
  filtre: 'operacio == "GET_OBJECT" and bucket == "nimbus-adjuntos-prod"'
  agrupar_per: [principal_id]
  llindar: { esdeveniments: 500, finestra_min: 10 }
  excepcions:
    - principal_id: "svc-backup"     # el proces de copia ho llegeix tot cada nit
      nomes_si_finestra: "02:00-04:00"
  severitat: S1
  runbook: RB-04
  desti: [canal-seguretat, guardia-mobil]

Fixa't en excepcions: sense ella, la còpia nocturna dispararia l'alerta cada nit i en dues setmanes ningú no miraria el canal. L'excepció està acotada per finestra horària, de manera que si svc-backup descarrega 40.000 objectes a les 15:00 l'alerta salta igualment. Una excepció sense condició és un forat permanent; amb condició, és afinat.


  1. La qualitat de l'alerta i la fatiga

La fatiga d'alertes és la causa més comuna de fracàs d'un sistema de detecció, i no és un problema de les persones: és un problema de disseny. Amb 200 alertes diàries de les quals 195 són soroll, el cervell aprèn —correctament— que la probabilitat que la següent importi és del 2,5 %. Això és exactament el que va passar el dia 16 de l'incident.

Com s'afina, en ordre:

  1. Establir línia base abans d'alertar. Tota detecció nova arrenca en mode silenciós durant dues setmanes: es registra quantes vegades hauria disparat i contra què. Si són 90 al dia, la regla no està a punt.
  2. Documentar excepcions acotades, mai globals: per servei i finestra, amb propietari i revisió (el svc-backup de dalt).
  3. Agregar en lloc de repetir. Cent fallades d'autenticació del mateix origen són una alerta amb comptador, no cent.
  4. Enriquir amb context a la mateixa alerta: qui és l'usuari, quin actiu és, si hi ha tiquet de canvi obert. Una alerta que obliga a obrir cinc pestanyes per entendre-la es posposa.
  5. Revisar mensualment les que no disparen mai. Una regla que fa un any que està en silenci o està perfectament afinada o està trencada, i cal saber quina de les dues.

Alerta i tiquet no són el mateix, i confondre'ls satura el procés: l'alerta és el senyal automàtic i n'hi pot haver centenars; el tiquet és el compromís que una persona la investiga i la tanca amb una conclusió. Nimbus obre tiquet per a tota S1 i S2, i agrega S3 i S4 en una revisió diària de deu minuts. Objectiu declarat: no més de cinc alertes accionables al dia, perquè és el que cap en 440 hores anuals.


  1. Detecció a la xarxa i a l'endpoint

A la xarxa, dues eines lliures amb filosofies diferents: Suricata és un IDS/IPS de signatures que inspecciona el trànsit i alerta (o bloqueja, en mode IPS) davant de patrons coneguts; Zeek no alerta, sinó que converteix el trànsit en registres rics —connexions, DNS, TLS, fitxers transferits— que alimenten deteccions pròpies. Per a Nimbus, Zeek aporta més: el conn.log i el dns.log haurien mostrat 1,2 TB sortint cap a una destinació desconeguda durant set dies. On es col·loquen físicament i què es perd quan tot el trànsit va xifrat és matèria de 05-04.

A l'endpoint i als contenidors:

Eina Què aporta On encaixa a Nimbus
Wazuh (agent) Recol·lecció de logs, integritat de fitxers (FIM), detecció de rootkits, avaluació de configuració Els 40 portàtils i els servidors. És l'agent principal
osquery Consultar el parc com si fos una base de dades SQL Inventari i verificació contínua (es desenvolupa a 05-06)
Falco Detecció en temps d'execució dins de contenidors: shell inesperada, escriptura en rutes sensibles L'API en contenidors (es desplega a 05-07)
EDR comercial Detecció per comportament i resposta remota: aïllar l'equip Alternativa de pagament; es compara a 05-06

La diferència conceptual entre antivirus i EDR —signatura davant de comportament amb capacitat de resposta— es tracta a 05-06; aquí n'hi ha prou amb la conseqüència per a la detecció: sense agent a l'endpoint hi ha un punt cec a la meitat de la plantilla que treballa en remot, fora de qualsevol sensor de xarxa.


  1. Resposta automatitzada: què sí i què mai

El SOAR (orquestració i resposta automatitzada) sona a producte car, però en una pime comença amb tres o quatre automatismes ben triats. El criteri per decidir és senzill: què passa si l'acció s'executa sobre un fals positiu?

Automatitzable amb seguretat Per què Mai automatitzar Per què
Bloquejar IP amb fail2ban després de N fallades, amb caducitat Reversible en minuts; el cost d'un error és mínim Apagar producció Un fals positiu provoca la caiguda que l'atacant buscava
Revocar sessió o token sospitós L'usuari torna a entrar; molèstia petita Esborrar fitxers o «netejar» Destrueix l'evidència que 04-05 exigeix preservar
Aïllar de xarxa un portàtil amb detecció crítica Contenció real, reversible per la Lucía Restaurar còpies automàticament Pot sobreescriure l'estat que cal analitzar
Obrir tiquet, enriquir i notificar Sense risc i estalvia el 80 % de la feina manual Contraatacar Il·legal, a més d'inútil (es tracta a 06-06)

Regla d'or: automatitza el que és reversible i barat de desfer; deixa a una persona el que destrueix, apaga o esborra. I tota acció automàtica es registra a la mateixa bitàcola de l'incident, perquè el post mortem de 04-05 necessita saber què va fer la màquina i no només què va fer l'equip.


  1. Caça d'amenaces i mètriques de detecció

La caça d'amenaces (threat hunting) parteix d'una idea diferent de l'alerta: en lloc d'esperar que salti una regla, s'assumeix que l'atacant ja és dins i es cerca activament. No requereix eines noves, només les dades de l'apartat 5 i una hipòtesi concreta.

Exemple complet sobre Nimbus. Hipòtesi, formulada a partir d'ATT&CK: «Si un atacant hagués compromès un compte de la consultora (T1078.003, comptes vàlids), hauria fet servir l'accés administratiu per enumerar la base de dades des d'un origen diferent de l'habitual».

  1. Dada a consultar: connexions a PostgreSQL dels últims 90 dies, agrupades per usuari, IP d'origen i hora.
  2. Què es cerca: parells (usuari, IP) que apareguin poques vegades. No els més freqüents: el que és rar és el senyal, perquè el que és habitual és, per definició, el que és legítim.
  3. Resultat real de la primera caça de la Lucía: tres orígens amb una sola connexió cadascun. Dos eren de l'Iván depurant des de casa —anotats i afegits com a excepció—. El tercer era un contenidor de preproducció (A-22) connectant-se a la base de dades de producció, una cosa que ningú no sabia que passava.
  4. Què es fa amb la troballa: es corregeix (separar credencials per entorn), es converteix en detecció permanent (connexió a A-01 des d'una subxarxa que no sigui 10.30.10.0/24 → S2) i es registra el risc a 04-01.

Aquest quart pas és el que fa rendible la caça: cada troballa es converteix en una detecció automàtica, per no haver-la de tornar a cercar a mà. Amb dues hores al mes, la Lucía pot executar una hipòtesi mensual.

Mètrica Què mesura Objectiu realista per a Nimbus
MTTD (temps mitjà de detecció) Del primer esdeveniment a l'alerta atesa < 24 h el primer any (davant dels 20 dies de 02-06)
MTTR (temps mitjà de resposta) De l'alerta a la contenció < 4 h per a S1, en horari laboral
Cobertura ATT&CK Tècniques rellevants amb almenys una detecció 12-15 tècniques de l'accés inicial i l'exfiltració
Ràtio de falsos positius Alertes descartades / alertes totals < 30 % en S1-S2; si puja, s'afina o es degrada la severitat
Deteccions provades Regles verificades amb una prova deliberada 100 % de les S1, trimestral

L'última és la que enllaça amb 04-03 i tanca el cercle: una detecció que no s'ha provat mai està en estat «planificada», per molt ben escrita que estigui —igual que C-08, amb el seu ultima_verificacio: null—. Provar D-04 consisteix a descarregar 600 objectes de prova del bucket i comprovar que l'alerta arriba al mòbil de guàrdia en menys de cinc minuts. Quan hi arribi, aquest és el moment en què el runbook RB-01 de 04-05 deixa de ser un document i es converteix en un procediment viu.


Errors Comuns i Consells

  • Recollir-ho tot «per si de cas». Multiplica el cost, enterra el senyal i crea una segona base de dades amb informació personal. Es recull el que respon a una detecció concreta o a una obligació.
  • Alertar sense línia base. Tota regla nova passa dues setmanes en mode silenciós. Publicar-la directament és la via ràpida perquè ningú no miri el canal.
  • Deixar els logs només al host que els genera. L'atacant els esborra al minut u. Sortida immediata, compte separat i només escriptura.
  • No sincronitzar els rellotges. Sense NTP i UTC, la línia de temps de l'incident és ficció i la correlació entre fonts no funciona.
  • Confondre alerta amb tiquet. Centenars d'alertes i zero tiquets significa que ningú no ha conclòs res.
  • Excepcions globals i permanents. «Excloure el compte de servei» és un forat; «excloure'l només entre les 02:00 i les 04:00» és afinat.
  • Automatitzar accions destructives. Apagar, esborrar o restaurar sense persona converteix un fals positiu en un incident propi i destrueix evidència.
  • Consell: comença per sis deteccions, no per dotze. D-03, D-04, D-06, D-08, D-10 i D-01 cobreixen l'incident complet de 02-06 i es munten en una setmana de feina.
  • Consell: prova cada S1 abans de confiar-hi. Una regla sense prova deliberada no és un control implantat, i la prova triga deu minuts.

Exercicis

Exercici 1 — Dissenyar la detecció que faltava

A l'incident de 02-06 hi va haver exfiltració d'1,2 TB durant set dies (dies 6-15) sense que res saltés. Dissenya la detecció que ho hauria vist:

  1. Indica font, lògica i llindar concret, justificant el número triat.
  2. Escriu la regla en format Sigma amb almenys un bloc d'excepció.
  3. Explica com la provaries sense exfiltrar dades reals i quina evidència guardaries.

Exercici 2 — Diagnosticar un sistema d'alertes malalt

Nimbus fa tres mesos que té Wazuh i aquest és el resum de l'últim mes:

Alertes generades .............. 4.812
  de les quals S1 .............. 310
  investigades ................. 26
  confirmades com a incident ... 1
Regla mes sorollosa: "Fallada d'autenticacio SSH"  3.980 alertes (82%)
Regles que no van disparar mai: 14 de 22
MTTD de l'unic incident real: 6 dies
Retencio configurada: 7 dies

Identifica almenys cinc problemes i proposa una correcció concreta per a cadascun.

Exercici 3 — Formular i executar una hipòtesi de caça

El Rubén, de suport, deixarà l'empresa d'aquí a un mes i ha demanat accés a informes que no feia servir abans. La Marta vol saber si hi ha motiu de preocupació, sense acusar ningú i sense vulnerar els seus drets.

  1. Formula la hipòtesi de caça i la tècnica ATT&CK associada.
  2. Indica quines dades consultaries i amb quina consulta, fent servir la taula d'auditoria de C-07.
  3. Explica què faries amb tres resultats possibles: res anòmal, activitat anòmala explicable i activitat clarament indeguda. Esmenta quins límits legals i laborals té aquesta investigació.

Solucions

Exercici 1

(1) Font i lògica. L'exfiltració d'1,2 TB va tocar dues fonts: els logs d'accés al bucket A-02 (descàrregues d'adjunts) i el volum de sortida del compte cloud. La millor detecció combina totes dues, però la més barata i precisa és la primera. Lògica: nombre d'objectes diferents descarregats per un mateix principal en una finestra curta. Per què objectes i no bytes: el volum en bytes el distorsiona un sol adjunt gran legítim, mentre que descarregar 500 fitxers diferents de clients diferents no té explicació operativa.

Llindar: 500 objectes en 10 minuts. Justificació amb dades, no amb intuïció: el major ús legítim observat és la còpia nocturna (svc-backup, ~40.000 objectes entre les 02:00 i les 04:00) i, després d'ella, un usuari de suport arriba com a molt a 30 objectes en deu minuts. Un llindar de 500 deixa un factor 16 de marge sobre l'ús humà màxim i tot i així hauria disparat el dia 6, a les primeres hores de l'exfiltració.

(2) Regla Sigma:

title: Descarrega massiva d'adjunts clinics del bucket A-02
id: 2b7d5e10-9a44-4f11-b3aa-nimbus-d04
description: >
  Un principal descarrega mes de 500 objectes en 10 minuts. Cobreix els dies 6-15
  de l'incident de 02-06, que van passar inadvertits per complet.
logsource:
  product: cloud
  service: s3_access
detection:
  seleccio:
    operacio: "GET_OBJECT"
    bucket: "nimbus-adjuntos-prod"
  copia_nocturna:                 # excepcio ACOTADA, no global
    principal_id: "svc-backup"
    hora_utc|gte: 1
    hora_utc|lt: 3
  condition: seleccio and not copia_nocturna | count(objecte) by principal_id > 500
  timeframe: 10m
falsepositives:
  - "Migracio massiva d'una clinica, sempre amb tiquet previ"
level: critical
tags: [attack.exfiltration, attack.t1530]   # Data from Cloud Storage Object

(3) Prova sense dades reals. Es genera un tenant de prova amb 600 adjunts ficticis i es descarreguen en bloc amb una credencial de prova, en horari laboral i avisant la guàrdia que és un simulacre. Es cronometra el temps des de la primera descàrrega fins a l'arribada al mòbil. Evidència a guardar: la marca temporal de l'inici, la de l'alerta, la captura de la notificació i l'ultima_verificacio actualitzada a la fitxa del control, que és exactament el que 04-03 exigeix i el que a C-08 li faltava.

Exercici 2

Problema Diagnòstic Correcció
310 S1 al mes i només 26 investigades La severitat està inflada: si el 92 % de les crítiques no es mira, S1 ha deixat de significar «crític». És fatiga d'alertes en la seva forma més pura Reclassificar: S1 només per a les sis deteccions de compromís en curs del §7. La resta baixa a S2/S3 i es revisa a la ronda diària
Una regla genera el 82 % del volum «Fallada d'autenticació SSH» està comptant esdeveniments d'Internet contra un port que no hauria d'estar obert. L'alerta és correcta; el que està malament és l'exposició Tancar SSH al bastió (05-04) i, mentrestant, agregar per IP i aplicar fail2ban. El volum cau a desenes
14 de 22 regles no van disparar mai O estan trencades (logsource equivocat, camp mal anomenat) o són irrellevants. No se sap quina, i aquesta és la part greu Provar deliberadament cadascuna; retirar les irrellevants i arreglar les trencades. Cap regla sense prova no compta com a control
MTTD de 6 dies amb un SIEM ja instal·lat El sistema recull i no avisa: falta canal amb guàrdia i prioritat. És l'error del dia 16 repetit Encaminar S1 a un canal amb notificació al mòbil i S2 a revisió diària, amb acusament de recepció
Retenció de 7 dies Garanteix que tota investigació comenci cega: quan es detecta alguna cosa amb 6 dies de retard, queden 24 hores de dades 90 dies en calent i 12 mesos en fred immutable, coherent amb C-07
1 incident confirmat sobre 4.812 alertes Ràtio de falsos positius superior al 99 %: el sistema està mesurant el seu propi soroll Aplicar l'afinat del §9: dues setmanes de línia base per regla, agregació i excepcions acotades

Exercici 3

(1) Hipòtesi: «Si el Rubén estigués preparant la sortida amb dades de clients, el seu patró d'accés mostraria amplitud inusual (molts tenants) i volum inusual (exportacions grans) respecte a la seva pròpia línia base dels últims sis mesos». Tècnica ATT&CK: T1213 / T1530, recol·lecció des de repositoris d'informació. Cal notar que la hipòtesi es formula contra el comportament, no contra la persona, i compara el Rubén amb ell mateix: és el que la fa defensable.

(2) Consulta sobre la taula append-only de C-07, comparant dues finestres:

SELECT date_trunc('week', ts) AS setmana,
       COUNT(*) AS accessos,
       COUNT(DISTINCT tenant_id) AS tenants,
       SUM(num_registres) AS registres,
       COUNT(*) FILTER (WHERE accio = 'reserva.exportada') AS exportacions
FROM auditoria_accessos
WHERE actor_id = :ruben AND ts > now() - interval '6 months'
GROUP BY 1 ORDER BY 1;

Es cerca un canvi de tendència a les últimes setmanes davant de la seva mitjana històrica, no un valor absolut. Convé comparar a més amb la línia base de la resta de l'equip de suport al mateix període, perquè un pic general pot deure's a una campanya o a una migració.

(3) Els tres desenllaços. Si no hi ha res anòmal, l'exercici acaba, es documenta que es va revisar i es tanca sense deixar rastre a l'expedient de la persona; el resultat negatiu és tan valuós com el positiu. Si hi ha activitat anòmala explicable —els informes nous coincideixen amb una tasca que la Marta li va assignar—, es documenta l'explicació i, si l'accés ja no és necessari, es retira: és una troballa de gestió d'accessos (04-02), no un incident. Si l'activitat és clarament indeguda (exportacions massives fora d'horari de clients que no atén), s'activa el pla de 04-05 com a incident de seguretat, es preserven evidències amb la seva cadena de custòdia i la conversa passa a RH i a assessoria legal abans que a la tècnica.

Límits que cal respectar en els tres casos. El monitoratge ha d'estar prèviament informat a la política d'ús acceptable (POL-04) i a la informació laboral a l'empleat; ha de ser proporcionat —revisar registres d'accés a dades de clients és proporcionat; llegir el seu correu personal o instal·lar vigilància encoberta, no—; i s'ha de limitar a dades d'activitat professional. A Espanya, l'Estatut dels Treballadors i la normativa de protecció de dades exigeixen informació prèvia i proporcionalitat, i una investigació ben fonamentada pot quedar invalidada si el control no estava comunicat. Es desenvolupa a 06-03 i 06-06. (Nota: davant d'una investigació amb conseqüències disciplinàries, la validació jurídica prèvia no és opcional.)


Conclusió

Has construït els controls detectius que a Nimbus li faltaven i que 04-03 va assenyalar com el seu forat més gran. Saps per què la prevenció falla sempre en algun punt i per què el temps de permanència és la mètrica que determina el dany: a l'incident de 02-06 hi va haver set oportunitats de detecció sense instrumentar i una vuitena —l'alerta de cost del dia 16— que va existir i va fallar igualment perquè va arribar com un correu entre dos-cents. Un senyal sense destinatari, sense prioritat i sense procediment no és una detecció.

Coneixes les onze fonts de telemetria de Nimbus i la dada que canvia la conversa: nou ja existeixen o costen gairebé res, així que el que faltava no era pressupost sinó recollir-les i mirar-les. Saps què registrar i què no registrar mai, com emetre logs estructurats en JSON amb request_id, tenant_id i noms d'esdeveniment estables, per què sense NTP i UTC la correlació és ficció, i com fixar retenció (90 dies en calent, 12 mesos en fred) sabent que una retenció de 7 dies garanteix investigacions cegues. Saps protegir els propis registres —sortida immediata del host, emmagatzematge immutable en compte separat, només escriptura— i que l'absència de logs és en si mateixa una alerta.

Distingeixes SIEM d'observabilitat, coneixes l'arquitectura agent → col·lector → magatzem → detecció → alerta amb la normalització com a pas que decideix si el sistema serveix, i has triat Wazuh autoallotjat per a Nimbus amb una limitació declarada: ningú no mirarà a les 3 de la matinada. Saps quan fer servir signatures, llindars, llistes o anomalia, i per què començar pel que és barat i explicable. T'endus el lliurable central: el catàleg de dotze deteccions amb font, lògica, severitat i acció, del qual sis són S1 i tres haurien detectat l'incident els dies 0, 6 i 20. Saps escriure-les en Sigma camp a camp amb el patró seleccio and not excepcio, en SQL sobre l'auditoria append-only per capturar l'abús intern que cap signatura no veu, i com a llindar declaratiu amb excepcions acotades per finestra horària. Saps combatre la fatiga d'alertes amb línia base silenciosa, agregació, enriquiment i revisió de les regles mudes, distingir alerta de tiquet, què aporten Zeek, Suricata, Wazuh, osquery i Falco, què automatitzar (el que és reversible) i què mai (el que apaga, esborra o destrueix evidència). I saps caçar amenaces partint d'una hipòtesi ATT&CK, amb la troballa real d'un contenidor de preproducció connectat a la base de dades de producció i la regla que fa rendible l'exercici: cada troballa es converteix en detecció permanent.

Ara Nimbus troba les seves vulnerabilitats (05-01) i veu l'atacant moure's (05-02). Queda la pregunta que cap de les dues no respon: aguantaria de debò? Un escàner comprova versions i una detecció observa el que passa, però cap dels dos no intenta encadenar tres debilitats petites fins a convertir-les en un compromís real, que és exactament el que fa un atacant. A Proves de Penetració (05-03) entra en escena aquesta figura, amb l'autorització escrita per davant: què és un pentest i en què es diferencia d'un escaneig, com s'acorden l'abast i les regles d'enfrontament, què passa a cada fase, què va trobar una prova autoritzada sobre l'entorn de preproducció de Nimbus i com es va corregir cada troballa.

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