Inhaltsverzeichnis

Hitni opoziv

SEV-1 Incident: Trenutna reakcija pri kompromitaciji CA!
RTO: 1 sat | Donositelj odluke: CISO + PKI-Lead

Postupak za masovni opoziv certifikata pri kompromitaciji CA.


Kada hitni opoziv?

Okidač Primjer Akcija
——–—————–
Root-CA kompromitiran Ukraden privatni ključ Potpuna rekonstrukcija PKI
Intermediate kompromitiran Procurio Signing-Key Sub-CA + svi certifikati
Masovna kompromitacija Ransomware na CA serveru Svi pogođeni certifikati
Kritična ranjivost Algoritam slomljen Svi pogođeni certifikati

Stablo odlučivanja

flowchart TD A[Kompromitacija otkrivena] --> B{Koja razina?} B -->|Root-CA| C[KRITIČNO: Cijela PKI] B -->|Intermediate| D[VISOKO: Sub-hijerarhija] B -->|End-Entity| E[SREDNJE: Pojedinačni certifikati] C --> F[1. Svi CA offline] C --> G[2. Hitni CRL] C --> H[3. Izgradnja nove PKI] D --> I[1. Opoziv Sub-CA] D --> J[2. Opoziv svih certifikata Sub-CA] D --> K[3. Novi Intermediate] E --> L[1. Identificirati pogođene certifikate] E --> M[2. Ažurirati CRL] E --> N[3. Ponovno izdavanje] style C fill:#ffebee style D fill:#fff3e0


Faza 1: Trijaža (15 Min)

#!/bin/bash
# emergency-triage.sh
 
echo "=== HITNA TRIJAŽA ==="
echo "Vrijeme: $(date -Iseconds)"
 
# 1. Koji CA je pogođen?
echo ""
echo "Pogođeni CA:"
read -p "Root/Intermediate/End-Entity: " CA_LEVEL
 
# 2. Vrsta kompromitacije
echo ""
echo "Vrsta kompromitacije:"
echo "  1. Ukraden privatni ključ"
echo "  2. Neovlašteno izdavanje certifikata"
echo "  3. Kompromitacija sustava"
echo "  4. Ranjivost algoritma"
read -p "Odabir: " COMPROMISE_TYPE
 
# 3. Utvrđivanje opsega
echo ""
echo "Utvrđivanje opsega..."
case "$CA_LEVEL" in
    root|Root|ROOT)
        echo "KRITIČNO: Svi certifikati cijele PKI pogođeni!"
        SCOPE=$(grep -c "^V" /etc/pki/CA/index.txt)
        ;;
    intermediate|Intermediate|INTERMEDIATE)
        read -p "Koji Intermediate-CA? " INT_CA
        SCOPE=$(grep -c "$INT_CA" /etc/pki/CA/index.txt)
        ;;
    *)
        read -p "Broj pogođenih certifikata: " SCOPE
        ;;
esac
 
echo ""
echo "=== SAŽETAK ==="
echo "CA razina: $CA_LEVEL"
echo "Tip kompromitacije: $COMPROMISE_TYPE"
echo "Pogođeni certifikati: $SCOPE"
echo ""
 
# Eskalacija
if [ "$CA_LEVEL" = "Root" ] || [ "$CA_LEVEL" = "root" ]; then
    echo "ESKALACIJA: Obavijestiti CISO i upravu!"
    echo "Aktivirati komunikacijski plan!"
fi

Faza 2: Hitne mjere (30 Min)

Isključivanje CA

#!/bin/bash
# emergency-ca-offline.sh
 
echo "=== CA OFFLINE ==="
 
# 1. Zaustavljanje CA servisa
systemctl stop pki-ca
systemctl stop ocsp-responder
 
# 2. Blokiranje mrežnog pristupa
iptables -A INPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp --dport 80 -j DROP
 
# 3. Blokiranje Signing ključeva (HSM)
# pkcs11-tool --module <hsm> --login --deactivate-key --id <key-id>
 
# 4. Forenzičko kopiranje
echo "Stvaram forenzičku sliku..."
dd if=/dev/sda of=/backup/forensic/ca-server-$(date +%Y%m%d%H%M%S).img bs=4M
 
echo "CA offline. Novi certifikati nisu mogući."

Generiranje hitnog CRL-a

#!/bin/bash
# emergency-crl.sh
 
echo "=== HITNI CRL ==="
 
# Opoziv svih certifikata pogođenog CA
# UPOZORENJE: Ovo je destruktivno!
 
read -p "UPOZORENJE: Opozvati sve certifikate? (OPOZOVI/prekini): " confirm
[ "$confirm" != "OPOZOVI" ] && exit 1
 
# Backup trenutne baze podataka
cp /etc/pki/CA/index.txt /etc/pki/CA/index.txt.pre-emergency-$(date +%Y%m%d%H%M%S)
 
# Opoziv svih valjanih certifikata
grep "^V" /etc/pki/CA/index.txt | while IFS=$'\t' read status expiry revoke serial unknown subject; do
    echo "Opozivam: $serial - $subject"
    openssl ca -config /etc/pki/CA/openssl.cnf \
        -revoke "/etc/pki/CA/newcerts/${serial}.pem" \
        -crl_reason keyCompromise \
        -batch
done
 
# Generiranje novog CRL-a (kratka valjanost!)
openssl ca -config /etc/pki/CA/openssl.cnf \
    -gencrl \
    -crlhours 1 \
    -out /var/www/pki/emergency.crl
 
# Distribucija CRL-a
echo "Distribuiram hitni CRL..."
scp /var/www/pki/emergency.crl crl-server:/var/www/html/crl/
scp /var/www/pki/emergency.crl cdn-origin:/var/www/crl/
 
echo "Hitni CRL distribuiran."
echo "CRL-URL: http://crl.example.com/crl/emergency.crl"

Faza 3: Komunikacija

Interna komunikacija

HITNA OBAVIJEST: PKI kompromitacija

Prima: IT-Security, IT-Operations, Uprava
Od: PKI tim
Vrijeme: [TIMESTAMP]

STATUS: SEV-1 INCIDENT

SAŽETAK:
[Root/Intermediate] CA je kompromitiran.
Svi izdani certifikati se opozivaju.

UTJECAJ:
- Pogođeni certifikati: [BROJ]
- Pogođeni sustavi: [LISTA]
- Procijenjeni prekid rada: [SATI]

HITNE MJERE:
1. CA isključen
2. Hitni CRL generiran
3. Komunikacija prema pogođenim sustavima

SLJEDEĆI KORACI:
1. Forenzička analiza
2. Izgradnja novog CA
3. Ponovno izdavanje svih certifikata

KONTAKT:
PKI tim: pki-emergency@example.com
Security: security@example.com
Hotline: +385 xxx xxxxx

Vanjska komunikacija (ako je potrebno)

SIGURNOSNA OBAVIJEST

[ORGANIZACIJA] je utvrdila da [OPIS].

Pogođeni servisi su preventivno isključeni.
Radimo na rješenju i obavijestit ćemo vas o ažuriranjima.

Za pitanja: security@example.com

Faza 4: Oporavak

#!/bin/bash
# emergency-recovery.sh
 
echo "=== OPORAVAK ==="
 
# 1. Novi Root-CA (ako je kompromitiran)
echo "Opcija 1: Novi Root-CA"
echo "  -> Provesti Key Ceremony"
echo "  -> Vidi: key-ceremony.sh"
 
# 2. Novi Intermediate-CA
echo ""
echo "Opcija 2: Novi Intermediate-CA"
echo "  -> Potpisati od Root-a"
 
# 3. Ponovno izdavanje svih certifikata
echo ""
echo "Opcija 3: Ponovno izdavanje certifikata"
 
SERVERS_FILE="/etc/pki/inventory/all-servers.txt"
 
if [ -f "$SERVERS_FILE" ]; then
    total=$(wc -l < "$SERVERS_FILE")
    echo "Ponovno izdavanje za $total servera..."
 
    cat "$SERVERS_FILE" | while read server; do
        echo "Ponovno izdavanje: $server"
        # Zatražiti CSR od servera
        ssh "$server" "openssl req -new -key /etc/ssl/private/server.key -out /tmp/emergency.csr -subj \"/CN=$server\""
 
        # Dohvatiti CSR
        scp "$server:/tmp/emergency.csr" "/tmp/reissue/${server}.csr"
 
        # Izdati novi certifikat
        openssl ca -config /etc/pki/CA/openssl.cnf \
            -in "/tmp/reissue/${server}.csr" \
            -out "/tmp/reissue/${server}.pem" \
            -days 365 -batch
 
        # Deployati certifikat
        scp "/tmp/reissue/${server}.pem" "$server:/etc/ssl/certs/server.pem"
        ssh "$server" "systemctl reload nginx || systemctl reload apache2"
    done
fi
 
echo "Oporavak završen."

Naknadne aktivnosti

Faza Zadatak Vremenski okvir
——————————–
Post-Incident Forenzičko izvješće +24h
Post-Incident Root-Cause-Analysis +48h
Post-Incident Lessons Learned +1 tjedan
Prevencija Poboljšanje kontrola +2 tjedna
Usklađenost Obavještavanje vlasti (ako KRITIS) Prema zakonu

Kontrolna lista

# Točka provjere Vrijeme Gotovo
—————-—————–
1 Trijaža završena +15m
2 CA offline +20m
3 Uprava obaviještena +25m
4 Hitni CRL generiran +30m
5 CRL distribuiran +35m
6 Interna komunikacija +40m
7 Vanjska komunikacija (ako potrebno) +45m
8 Plan oporavka aktiviran +60m

Povezana dokumentacija


« <- Key Ceremony | -> Operatorski scenariji »


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