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