Inhaltsverzeichnis
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 <hsm> --login --deactivate-key --id <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
- Backup/Restore CA – Ripristino backup
- Cerimonia delle chiavi – Creazione nuova CA
- Revoca certificato – Revoca singola
« ← Cerimonia delle chiavi | → Scenari per operatori »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: il 30/01/2026 alle 01:33