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


« ← Cerimonia delle chiavi | → Scenari per operatori »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional