====== 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 --login --deactivate-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 =====
* [[.:ca-backup-restore|CA varnostna kopija/obnova]] – Obnovitev varnostne kopije
* [[.:key-ceremony|Ceremonija ključev]] – Ustvarjanje novega CA
* [[..:tagesgeschaeft:zertifikat-widerrufen|Preklic certifikata]] – Posamezni preklic
----
<< [[.:key-ceremony|← Ceremonija ključev]] | [[..:start|→ Scenariji za operaterje]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>notfall emergency revocation kompromittierung incident operator}}