====== 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}}