Inhaltsverzeichnis

Preklic v sili

SEV-1 incident: Takojšnji odziv ob kompromitaciji CA!
RTO: 1 ura | Odločevalec: CISO + vodja PKI

Postopek za množični preklic certifikatov ob kompromitaciji CA.


Kdaj preklic v sili?

Sprožilec Primer Akcija
———–——–——–
Root-CA kompromitiran Zasebni ključ ukraden Celotno PKI obnoviti na novo
Intermediate kompromitiran Podpisovalni ključ razkrit Sub-CA + vsi certifikati
Množična kompromitacija Izsiljevalska programska oprema na CA strežniku Vsi prizadeti certifikati
Kritična ranljivost Algoritem zlomljen Vsi prizadeti certifikati

Drevo odločitev

flowchart TD A[Zaznana kompromitacija] --> B{Katera raven?} B -->|Root-CA| C[KRITIČNO: Celoten PKI] B -->|Intermediate| D[VISOKO: Pod-hierarhija] B -->|End-Entity| E[SREDNJE: Posamezni certifikati] C --> F[1. Vse CA brez povezave] C --> G[2. CRL v sili] C --> H[3. Gradnja novega PKI] D --> I[1. Preklic Sub-CA] D --> J[2. Preklic vseh certifikatov Sub-CA] D --> K[3. Nov Intermediate] E --> L[1. Identifikacija prizadetih certifikatov] E --> M[2. Posodobitev CRL] E --> N[3. Ponovna izdaja] style C fill:#ffebee style D fill:#fff3e0


Faza 1: Triaža (15 min)

#!/bin/bash
# emergency-triage.sh
 
echo "=== TRIAŽA V SILI ==="
echo "Čas: $(date -Iseconds)"
 
# 1. Kateri CA je prizadet?
echo ""
echo "Prizadeti CA:"
read -p "Root/Intermediate/End-Entity: " CA_LEVEL
 
# 2. Vrsta kompromitacije
echo ""
echo "Vrsta kompromitacije:"
echo "  1. Zasebni ključ ukraden"
echo "  2. Nepooblaščena izdaja certifikatov"
echo "  3. Sistemska kompromitacija"
echo "  4. Ranljivost algoritma"
read -p "Izbira: " COMPROMISE_TYPE
 
# 3. Določitev obsega
echo ""
echo "Določanje obsega..."
case "$CA_LEVEL" in
    root|Root|ROOT)
        echo "KRITIČNO: Prizadeti vsi certifikati celotnega PKI!"
        SCOPE=$(grep -c "^V" /etc/pki/CA/index.txt)
        ;;
    intermediate|Intermediate|INTERMEDIATE)
        read -p "Kateri Intermediate-CA? " INT_CA
        SCOPE=$(grep -c "$INT_CA" /etc/pki/CA/index.txt)
        ;;
    *)
        read -p "Število prizadetih certifikatov: " SCOPE
        ;;
esac
 
echo ""
echo "=== POVZETEK ==="
echo "Raven CA: $CA_LEVEL"
echo "Vrsta kompromitacije: $COMPROMISE_TYPE"
echo "Prizadeti certifikati: $SCOPE"
echo ""
 
# Eskalacija
if [ "$CA_LEVEL" = "Root" ] || [ "$CA_LEVEL" = "root" ]; then
    echo "ESKALACIJA: Obvestiti CISO in vodstvo!"
    echo "Aktivirati komunikacijski načrt!"
fi

Faza 2: Takojšnji ukrepi (30 min)

CA brez povezave

#!/bin/bash
# emergency-ca-offline.sh
 
echo "=== CA BREZ POVEZAVE ==="
 
# 1. Ustavitev CA storitev
systemctl stop pki-ca
systemctl stop ocsp-responder
 
# 2. Blokiranje omrežnega dostopa
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
 
# 3. Blokiranje podpisovalnih ključev (HSM)
# pkcs11-tool --module <hsm> --login --deactivate-key --id <key-id>
 
# 4. Forenzična zaščita
echo "Ustvarjam forenzično sliko..."
dd if=/dev/sda of=/backup/forensic/ca-server-$(date +%Y%m%d%H%M%S).img bs=4M
 
echo "CA brez povezave. Novi certifikati niso možni."

Generacija CRL v sili

#!/bin/bash
# emergency-crl.sh
 
echo "=== CRL V SILI ==="
 
# Preklic vseh certifikatov prizadetega CA
# POZOR: To je destruktivno!
 
read -p "OPOZORILO: Preklicati vse certifikate? (REVOKE/abort): " confirm
[ "$confirm" != "REVOKE" ] && exit 1
 
# Varnostna kopija trenutne baze podatkov
cp /etc/pki/CA/index.txt /etc/pki/CA/index.txt.pre-emergency-$(date +%Y%m%d%H%M%S)
 
# Preklic vseh veljavnih certifikatov
grep "^V" /etc/pki/CA/index.txt | while IFS=$'\t' read status expiry revoke serial unknown subject; do
    echo "Preklicujem: $serial - $subject"
    openssl ca -config /etc/pki/CA/openssl.cnf \
        -revoke "/etc/pki/CA/newcerts/${serial}.pem" \
        -crl_reason keyCompromise \
        -batch
done
 
# Generacija novega CRL (kratka veljavnost!)
openssl ca -config /etc/pki/CA/openssl.cnf \
    -gencrl \
    -crlhours 1 \
    -out /var/www/pki/emergency.crl
 
# Takojšnja distribucija CRL
echo "Distribucija CRL v sili..."
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 v sili distribuiran."
echo "CRL-URL: http://crl.example.com/crl/emergency.crl"

Faza 3: Komunikacija

Notranja komunikacija

SPOROČILO V SILI: PKI kompromitacija

Za: IT-Varnost, IT-Operacije, Vodstvo
Od: PKI ekipa
Čas: [ČASOVNI ŽIG]

STATUS: SEV-1 INCIDENT

POVZETEK:
[Root/Intermediate] CA je bil kompromitiran.
Vsi izdani certifikati bodo preklicani.

VPLIVI:
- Prizadeti certifikati: [ŠTEVILO]
- Prizadeti sistemi: [SEZNAM]
- Ocenjeni izpad: [URE]

TAKOJŠNJI UKREPI:
1. CA brez povezave
2. CRL v sili generiran
3. Komunikacija s prizadetimi sistemi

NASLEDNJI KORAKI:
1. Forenzična analiza
2. Gradnja novega CA
3. Ponovna izdaja vseh certifikatov

KONTAKT:
PKI ekipa: pki-emergency@example.com
Varnost: security@example.com
Telefonska linija: +386 xxx xxxxx

Zunanja komunikacija (če potrebno)

VARNOSTNO OBVESTILO

[ORGANIZACIJA] je ugotovila, da [OPIS].

Prizadete storitve so bile preventivno izključene.
Delamo na rešitvi in vas bomo obveščali o posodobitvah.

Za vprašanja: security@example.com

Faza 4: Obnovitev

#!/bin/bash
# emergency-recovery.sh
 
echo "=== OBNOVITEV ==="
 
# 1. Nov Root-CA (če kompromitiran)
echo "Možnost 1: Nov Root-CA"
echo "  → Izvedba ceremonije ključev"
echo "  → Glejte: key-ceremony.sh"
 
# 2. Nov Intermediate-CA
echo ""
echo "Možnost 2: Nov Intermediate-CA"
echo "  → Podpis s strani Root"
 
# 3. Ponovna izdaja vseh certifikatov
echo ""
echo "Možnost 3: Ponovna izdaja certifikatov"
 
# Seznam strežnikov iz CMDB/Inventory
SERVERS_FILE="/etc/pki/inventory/all-servers.txt"
 
if [ -f "$SERVERS_FILE" ]; then
    total=$(wc -l < "$SERVERS_FILE")
    echo "Ponovna izdaja za $total strežnikov..."
 
    cat "$SERVERS_FILE" | while read server; do
        echo "Ponovna izdaja: $server"
        # Zahteva CSR od strežnika
        ssh "$server" "openssl req -new -key /etc/ssl/private/server.key -out /tmp/emergency.csr -subj \"/CN=$server\""
 
        # Prevzem CSR
        scp "$server:/tmp/emergency.csr" "/tmp/reissue/${server}.csr"
 
        # Izdaja novega certifikata
        openssl ca -config /etc/pki/CA/openssl.cnf \
            -in "/tmp/reissue/${server}.csr" \
            -out "/tmp/reissue/${server}.pem" \
            -days 365 -batch
 
        # Namestitev certifikata
        scp "/tmp/reissue/${server}.pem" "$server:/etc/ssl/certs/server.pem"
        ssh "$server" "systemctl reload nginx || systemctl reload apache2"
    done
fi
 
echo "Obnovitev končana."

Po incidentu

Faza Naloga Časovni okvir
————–—————
Po incidentu Forenzično poročilo +24h
Po incidentu Analiza temeljnega vzroka +48h
Po incidentu Naučene lekcije +1 teden
Prevencija Izboljšanje kontrol +2 tedna
Skladnost Obvestilo regulatorjev (če KRITIS) Po zakonu

Kontrolni seznam

# Kontrolna točka Čas
—————–—–
1 Triaža končana +15m
2 CA brez povezave +20m
3 Vodstvo obveščeno +25m
4 CRL v sili generiran +30m
5 CRL distribuiran +35m
6 Notranja komunikacija +40m
7 Zunanja komunikacija (če potrebno) +45m
8 Načrt obnovitve aktiviran +60m

Povezana dokumentacija


« ← Ceremonija ključev | → Scenariji za operaterje »


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