Salta el contingut

Fase 3: Implementació de la Solució

Introducció

La Fase 3 és el cor del projecte: la implementació real de la solució dissenyada a la Fase 2. L'entorn de producció és Docker (tal com ho seria en un laboratori professional), però el disseny i la documentació reflectiran com seria en un entorn real.

La implementació ha de ser funcional, demostrable i documentada.

Lliurables de la Fase 3

L3.1 - Repositori de codi de la infraestructura

Tot el codi d'infraestructura (Docker Compose, fitxers de configuració, scripts) s'ha de guardar en un repositori Git:

repositori-projecte-NOMCOGNOM/
├── README.md
├── docker-compose.yml          # Orquestació principal
├── .env.example                # Variables d'entorn (sense valors reals)
├── .gitignore                  # Excloure .env, secrets
├── docs/
│   ├── arquitectura.md
│   └── runbook.md             # Manual d'operació
├── siem/
│   ├── wazuh/
│   │   ├── docker-compose.yml
│   │   └── config/
│   └── grafana/
│       └── dashboards/
├── firewall/
│   ├── nftables.conf
│   └── suricata.rules
├── vpn/
│   └── wg0.conf.template
└── scripts/
    ├── setup.sh               # Script d'instal·lació inicial
    ├── backup.sh              # Script de backup
    └── health-check.sh        # Verificació de l'estat

L3.2 - Implementació del SIEM

# siem/docker-compose.yml - Stack Wazuh complet
version: '3.8'

services:
  # Wazuh Manager - cervell del SIEM
  wazuh-manager:
    image: wazuh/wazuh-manager:4.8.0
    container_name: wazuh-manager-NOMCOGNOM
    hostname: wazuh-manager
    restart: always
    ports:
      - "1514:1514"     # Agent communication (UDP)
      - "1515:1515"     # Agent enrollment
      - "55000:55000"   # API REST
    volumes:
      - wazuh_data:/var/ossec/data
      - wazuh_logs:/var/ossec/logs
      - ./config/wazuh_manager.conf:/var/ossec/etc/ossec.conf
    environment:
      - INDEXER_URL=https://wazuh-indexer:9200
      - INDEXER_USERNAME=admin
      - INDEXER_PASSWORD=${WAZUH_INDEXER_PASSWORD}

  # OpenSearch (substitut d'Elasticsearch)
  wazuh-indexer:
    image: wazuh/wazuh-indexer:4.8.0
    container_name: wazuh-indexer-NOMCOGNOM
    hostname: wazuh-indexer
    restart: always
    ports:
      - "9200:9200"
    volumes:
      - wazuh_indexer_data:/var/lib/wazuh-indexer
    environment:
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"

  # Dashboard (interfície web)
  wazuh-dashboard:
    image: wazuh/wazuh-dashboard:4.8.0
    container_name: wazuh-dashboard-NOMCOGNOM
    hostname: wazuh-dashboard
    restart: always
    ports:
      - "443:5601"
    depends_on:
      - wazuh-indexer
      - wazuh-manager

  # Agent simulant un servidor Linux monitorat
  monitored-server:
    image: ubuntu:22.04
    container_name: monitored-server-NOMCOGNOM
    hostname: servidor-monitorat
    command: >
      bash -c "
        apt-get update -qq && apt-get install -y -qq wget &&
        wget -q https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.8.0-1_amd64.deb &&
        WAZUH_MANAGER='wazuh-manager' WAZUH_REGISTRATION_PASSWORD='agent-password' \
          dpkg -i wazuh-agent_4.8.0-1_amd64.deb &&
        service wazuh-agent start &&
        tail -f /var/ossec/logs/ossec.log
      "
    depends_on:
      - wazuh-manager

volumes:
  wazuh_data:
  wazuh_logs:
  wazuh_indexer_data:

L3.3 - Regles d'alertes personalitzades

<!-- config/custom-rules.xml - Regles de detecció personalitzades -->
<group name="custom_rules_NOMCOGNOM">

  <!-- Alerta per a múltiples fallades de login -->
  <rule id="100001" level="10" frequency="5" timeframe="120">
    <if_matched_sid>5503</if_matched_sid>
    <description>Possible atac de força bruta SSH</description>
    <group>authentication_failures,</group>
  </rule>

  <!-- Alerta per a modificació de fitxers crítics -->
  <rule id="100002" level="12">
    <if_sid>550</if_sid>
    <field name="file">/etc/passwd|/etc/shadow|/etc/sudoers</field>
    <description>Modificació de fitxer crític del sistema</description>
    <group>rootcheck,</group>
  </rule>

  <!-- Alerta per a comandes sospitoses -->
  <rule id="100003" level="14">
    <if_sid>5715</if_sid>
    <match>wget|curl|nc|netcat|python -c|perl -e|bash -i</match>
    <description>Possible shell reversa o descàrrega de malware</description>
    <group>attack,</group>
  </rule>

</group>

L3.4 - Dashboard de seguretat

# Iniciar el stack
docker compose -f siem/docker-compose.yml up -d

# Esperar que el sistema iniciï (~3 minuts)
sleep 180

# Accedir al dashboard
echo "Wazuh Dashboard: https://localhost:443"
echo "Usuari: admin / Contrasenya: ${WAZUH_INDEXER_PASSWORD}"

# Verificar que l'agent s'ha registrat
docker exec wazuh-manager-NOMCOGNOM \
  /var/ossec/bin/agent_control -la

# Generar events de prova
docker exec monitored-server-NOMCOGNOM bash -c "
  # Simular intents de login fallits
  for i in {1..10}; do
    ssh wrong_user@localhost 2>/dev/null || true
  done

  # Simular modificació de fitxer crític (prova)
  echo 'test' >> /tmp/test-critical.txt
"

# Verificar les alertes al dashboard
echo "Verificar alertes a https://localhost:443"

L3.5 - Documentació operacional (Runbook)

# Runbook - Operació del Sistema de Seguretat
**Organització**: [Nom de l'organització fictícia]
**Versió**: 1.0
**Autor**: NOMCOGNOM

## Tasques d'operació diàries

### Revisió d'alertes (SIEM)
1. Accedir a https://wazuh-dashboard
2. Navegar a Security Events → Last 24 hours
3. Filtrar per Level >= 12 (alertes crítiques)
4. Per cada alerta crítica:
   - Verificar si és un fals positiu
   - Si no ho és: iniciar procediment de resposta a incidents
5. Documentar en el registre diari d'alertes

### Verificació del backup
1. Connectar-se al servidor de backup
2. Executar: `./scripts/backup.sh --verify`
3. Verificar que el hash del backup coincideix
4. Documentar en el registre de backups

## Procediments d'escalada

### Alerta crítica (Level 14-15 a Wazuh)
1. Notificar immediatament al responsable de seguretat
2. Preservar logs (no reiniciar sistemes)
3. Activar el playbook corresponent al tipus d'incident
4. Notificar al client si hi ha dades personals afectades (RGPD 72h)

### Fallada del SIEM
1. Verificar l'estat: `docker compose ps`
2. Si el manager ha caigut: `docker compose restart wazuh-manager`
3. Si el indexer ha caigut: (risc de pèrdua de dades) → escalar
4. Documentar la finestra de temps sense monitoratge

Demostració en Viu

La Fase 3 inclou una demostració en viu de 20 minuts davant del grup:

  1. Mostrar l'arquitectura Docker funcionant (docker compose ps)
  2. Demostrar una alerta en temps real (simular un atac i veure-ho al dashboard)
  3. Mostrar el runbook i explicar un procediment d'operació
  4. Respondre preguntes dels companys

Criteris d'avaluació

  • Tots els components del disseny de la Fase 2 estan implementats?
  • L'entorn funciona sense errors?
  • El codi és net, documentat i reproduïble?
  • La demostració és clara i fluida?
  • El runbook és complet i operacional?

Nom de l'arxiu del repositori: projecte-NOMCOGNOM (a GitHub o similar)

Data d'entrega: [Indicada pel professor]