====== Revoca di emergenza ====== **Incidente SEV-1:** Reazione immediata in caso di compromissione CA! \\ **RTO:** 1 ora | **Decisori:** CISO + PKI-Lead Procedura per la revoca massiva dei certificati in caso di compromissione di una CA. ---- ===== Quando applicare la revoca di emergenza? ===== | Trigger | Esempio | Azione | |---------|---------|--------| | **Root-CA compromessa** | Chiave privata rubata | Ricostruire intera PKI | | **Intermediate compromessa** | Chiave firma divulgata | Sub-CA + tutti i certificati | | **Compromissione massiva** | Ransomware su server CA | Tutti i certificati interessati | | **Vulnerabilità critica** | Algoritmo compromesso | Tutti i certificati interessati | ---- ===== Albero decisionale ===== flowchart TD A[Compromissione rilevata] --> B{Quale livello?} B -->|Root-CA| C[CRITICO: Intera PKI] B -->|Intermediate| D[ALTO: Sotto-gerarchia] B -->|End-Entity| E[MEDIO: Singoli certificati] C --> F[1. Tutte le CA offline] C --> G[2. CRL di emergenza] C --> H[3. Costruire nuova PKI] D --> I[1. Revocare Sub-CA] D --> J[2. Revocare tutti i cert della Sub-CA] D --> K[3. Nuova Intermediate] E --> L[1. Identificare cert interessati] E --> M[2. Aggiornare CRL] E --> N[3. Riemissione] style C fill:#ffebee style D fill:#fff3e0 ---- ===== Fase 1: Triage (15 min) ===== #!/bin/bash # emergency-triage.sh echo "=== TRIAGE EMERGENZA ===" echo "Ora: $(date -Iseconds)" # 1. Quale CA è interessata? echo "" echo "CA interessata:" read -p "Root/Intermediate/End-Entity: " CA_LEVEL # 2. Tipo di compromissione echo "" echo "Tipo di compromissione:" echo " 1. Chiave privata rubata" echo " 2. Emissione certificati non autorizzata" echo " 3. Compromissione sistema" echo " 4. Vulnerabilità algoritmo" read -p "Selezione: " COMPROMISE_TYPE # 3. Determinare scope echo "" echo "Determinazione scope..." case "$CA_LEVEL" in root|Root|ROOT) echo "CRITICO: Tutti i certificati dell'intera PKI interessati!" SCOPE=$(grep -c "^V" /etc/pki/CA/index.txt) ;; intermediate|Intermediate|INTERMEDIATE) read -p "Quale Intermediate-CA? " INT_CA SCOPE=$(grep -c "$INT_CA" /etc/pki/CA/index.txt) ;; *) read -p "Numero certificati interessati: " SCOPE ;; esac echo "" echo "=== RIEPILOGO ===" echo "Livello CA: $CA_LEVEL" echo "Tipo compromissione: $COMPROMISE_TYPE" echo "Certificati interessati: $SCOPE" echo "" # Escalation if [ "$CA_LEVEL" = "Root" ] || [ "$CA_LEVEL" = "root" ]; then echo "ESCALATION: Notificare CISO e Direzione!" echo "Attivare piano di comunicazione!" fi ---- ===== Fase 2: Misure immediate (30 min) ===== ==== Mettere CA offline ==== #!/bin/bash # emergency-ca-offline.sh echo "=== CA OFFLINE ===" # 1. Arrestare servizi CA systemctl stop pki-ca systemctl stop ocsp-responder # 2. Bloccare accesso rete iptables -A INPUT -p tcp --dport 443 -j DROP iptables -A INPUT -p tcp --dport 80 -j DROP # 3. Bloccare chiavi di firma (HSM) # pkcs11-tool --module --login --deactivate-key --id # 4. Acquisizione forense echo "Creazione immagine forense..." dd if=/dev/sda of=/backup/forensic/ca-server-$(date +%Y%m%d%H%M%S).img bs=4M echo "CA offline. Nessun nuovo certificato possibile." ==== Generare CRL di emergenza ==== #!/bin/bash # emergency-crl.sh echo "=== CRL DI EMERGENZA ===" # Revocare tutti i certificati della CA interessata # ATTENZIONE: Operazione distruttiva! read -p "ATTENZIONE: Revocare tutti i certificati? (REVOKE/abort): " confirm [ "$confirm" != "REVOKE" ] && exit 1 # Backup database attuale cp /etc/pki/CA/index.txt /etc/pki/CA/index.txt.pre-emergency-$(date +%Y%m%d%H%M%S) # Revocare tutti i certificati validi grep "^V" /etc/pki/CA/index.txt | while IFS=$'\t' read status expiry revoke serial unknown subject; do echo "Revoca: $serial - $subject" openssl ca -config /etc/pki/CA/openssl.cnf \ -revoke "/etc/pki/CA/newcerts/${serial}.pem" \ -crl_reason keyCompromise \ -batch done # Generare nuova CRL (validità breve!) openssl ca -config /etc/pki/CA/openssl.cnf \ -gencrl \ -crlhours 1 \ -out /var/www/pki/emergency.crl # Distribuire CRL immediatamente echo "Distribuzione CRL di emergenza..." scp /var/www/pki/emergency.crl crl-server:/var/www/html/crl/ scp /var/www/pki/emergency.crl cdn-origin:/var/www/crl/ echo "CRL di emergenza distribuita." echo "URL CRL: http://crl.example.com/crl/emergency.crl" ---- ===== Fase 3: Comunicazione ===== ==== Comunicazione interna ==== NOTIFICA EMERGENZA: Compromissione PKI A: IT-Security, IT-Operations, Direzione Da: Team PKI Ora: [TIMESTAMP] STATO: INCIDENTE SEV-1 RIEPILOGO: La [Root/Intermediate] CA è stata compromessa. Tutti i certificati emessi verranno revocati. IMPATTI: - Certificati interessati: [NUMERO] - Sistemi interessati: [ELENCO] - Downtime stimato: [ORE] MISURE IMMEDIATE: 1. CA messa offline 2. CRL di emergenza generata 3. Comunicazione ai sistemi interessati PROSSIMI PASSI: 1. Analisi forense 2. Costruzione nuova CA 3. Riemissione di tutti i certificati CONTATTI: Team PKI: pki-emergency@example.com Security: security@example.com Hotline: +49 xxx xxxxx ==== Comunicazione esterna (se necessario) ==== COMUNICATO DI SICUREZZA [ORGANIZZAZIONE] ha rilevato che [DESCRIZIONE]. I servizi interessati sono stati messi offline in via precauzionale. Stiamo lavorando a una soluzione e vi informeremo sugli aggiornamenti. Per domande: security@example.com ---- ===== Fase 4: Ripristino ===== #!/bin/bash # emergency-recovery.sh echo "=== RIPRISTINO ===" # 1. Nuova Root-CA (se compromessa) echo "Opzione 1: Nuova Root-CA" echo " → Eseguire cerimonia delle chiavi" echo " → Vedi: key-ceremony.sh" # 2. Nuova Intermediate-CA echo "" echo "Opzione 2: Nuova Intermediate-CA" echo " → Far firmare dalla Root" # 3. Riemissione di tutti i certificati echo "" echo "Opzione 3: Riemissione certificati" # Lista server da CMDB/Inventario SERVERS_FILE="/etc/pki/inventory/all-servers.txt" if [ -f "$SERVERS_FILE" ]; then total=$(wc -l < "$SERVERS_FILE") echo "Riemissione per $total server..." cat "$SERVERS_FILE" | while read server; do echo "Riemissione: $server" # Richiedere CSR dal server ssh "$server" "openssl req -new -key /etc/ssl/private/server.key -out /tmp/emergency.csr -subj \"/CN=$server\"" # Recuperare CSR scp "$server:/tmp/emergency.csr" "/tmp/reissue/${server}.csr" # Emettere nuovo certificato openssl ca -config /etc/pki/CA/openssl.cnf \ -in "/tmp/reissue/${server}.csr" \ -out "/tmp/reissue/${server}.pem" \ -days 365 -batch # Distribuire certificato scp "/tmp/reissue/${server}.pem" "$server:/etc/ssl/certs/server.pem" ssh "$server" "systemctl reload nginx || systemctl reload apache2" done fi echo "Ripristino completato." ---- ===== Post-incidente ===== | Fase | Attività | Tempistica | |------|----------|------------| | Post-Incidente | Report forense | +24h | | Post-Incidente | Analisi Root-Cause | +48h | | Post-Incidente | Lessons Learned | +1 settimana | | Prevenzione | Miglioramento controlli | +2 settimane | | Compliance | Notifica autorità (se KRITIS) | Secondo normativa | ---- ===== Checklist ===== | # | Punto di verifica | Tempo | ✓ | |---|-------------------|-------|---| | 1 | Triage completato | +15m | ☐ | | 2 | CA offline | +20m | ☐ | | 3 | Direzione informata | +25m | ☐ | | 4 | CRL emergenza generata | +30m | ☐ | | 5 | CRL distribuita | +35m | ☐ | | 6 | Comunicazione interna | +40m | ☐ | | 7 | Comunicazione esterna (se necessario) | +45m | ☐ | | 8 | Piano ripristino attivato | +60m | ☐ | ---- ===== Documentazione correlata ===== * [[.:ca-backup-restore|Backup/Restore CA]] – Ripristino backup * [[.:key-ceremony|Cerimonia delle chiavi]] – Creazione nuova CA * [[..:tagesgeschaeft:zertifikat-widerrufen|Revoca certificato]] – Revoca singola ---- << [[.:key-ceremony|← Cerimonia delle chiavi]] | [[..:start|→ Scenari per operatori]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>emergenza emergency revoca compromissione incidente operator}}