Logování aplikací je první linií obrany při monitorování kybernetické bezpečnosti a reakci na incidenty. Při správné implementaci se logy stávají mocným spojencem bezpečnostních týmů, protože umožňují rychlou detekci hrozeb, forenzní analýzu a podávání zpráv o dodržování předpisů. Špatně strukturované logy se však mohou stát „šumem“, který zastírá kritické bezpečnostní události a brzdí úsilí o jejich vyšetření.
Tento návod se zabývá klíčovými zásadami pro implementaci logování, které se bezproblémově integruje s moderními platformami pro správu logů a zároveň poskytuje maximální hodnotu pro aktivity v oblasti kybernetické bezpečnosti.
Zásada 1: Osvojte si strukturované logování
Nestrukturované logy typu „Uživatel john_doe se přihlásil ze 192.168.1.100 v 2025-06-28 14:30:22“ jsou sice čitelné pro člověka, ale pro automatizovanou analýzu jsou noční můrou. Strukturované logy ve formátu JSON umožňují výkonné dotazování, výstrahy a korelace.
Příklad strukturovaného logu
{
    "@timestamp": "2025-06-28T14:30:22.000Z",
    "event": {
        "category": ["authentication"],
        "type": ["start"],
        "outcome": "success"
    },
    "user": {
        "name": "john_doe",
        "id": "12345"
    },
    "source": {
        "ip": "192.168.1.100"
    },
    "message": "User authentication successful"
}
 
 
Zásada 2: Využití Elastic Common Schema (ECS)
ECS poskytuje standardizované mapování polí, které zajišťuje konzistenci napříč různými aplikacemi a zdroji dat. Tato standardizace je klíčová pro bezpečnostní operace, kdy analytici potřebují rychle korelovat události z různých systémů.
Mezi klíčová pole ECS pro bezpečnostní logy patří:
@timestamp: Časové razítko události ve formátu ISO 8601 
event.category: Kategorizace na vysoké úrovni (ověřování, síť, proces atd.) 
event.type: Specifický typ události (začátek, konec, vytvoření, smazání atd.) 
event.outcome: Úspěch, selhání nebo neznámý 
user.*: Identifikace uživatele a podrobnosti o něm 
source.* a destination.*: Podrobnosti o síťovém připojení 
process.*: Informace o provádění procesu 
file.*: Podrobnosti o souborových operacích 
Tip
Vždy logujte v UTC, lokální časové zóny jsou nedeterministické a mnohem náchylnější k chybám.
 
Tip
Preferujte UTF-8 jako znakovou sadu pro vaše logy.
 
Události autentizace a autorizace
Tyto události jsou zlatým dolem pro odhalování pokusů o zneužití pověření, útoků hrubou silou a pokusů o zvýšení oprávnění.
Příklad logu o selhání přihlášení
{
    "@timestamp": "2025-06-28T15:45:33.000Z",
    "event": {
        "category": ["authentication"],
        "type": ["start"],
        "outcome": "failure"
    },
    "user": {
        "name": "admin",
        "target": {
            "name": "privileged_service"
        }
    },
    "source": {
        "ip": "203.0.113.42",
        "geo": {
            "country_name": "Unknown"
        }
    },
    "error": {
        "message": "Invalid credentials provided"
    },
    "labels": {
        "risk_score": "high"
    }
}
 
 
Logy o síťové aktivitě
Klíčové pro odhalení laterálního pohybu, exfiltrace dat a komunikace typu „velení a řízení“.
Příklad logu o síťové aktivitě
{
    "@timestamp": "2025-06-28T16:20:15.000Z",
    "event": {
        "category": ["network"],
        "type": ["connection"],
        "outcome": "success"
    },
    "source": {
        "ip": "10.0.1.50",
        "port": 4433
    },
    "destination": {
        "ip": "198.51.100.25",
        "port": 443,
        "domain": "suspicious-domain.example"
    },
    "network": {
        "protocol": "tcp",
        "bytes": 1048576
    },
    "url": {
        "full": "https://suspicious-domain.example/data/export"
    }
}
 
 
Operace se soubory a procesy
Zásadní pro detekci malwaru, sledování vnitřních hrozeb a dodržování předpisů.
Příklad logu o spuštění procesu
{
    "@timestamp": "2025-06-28T17:10:44.000Z",
    "event": {
        "category": ["process"],
        "type": ["start"],
        "outcome": "success"
    },
    "process": {
        "name": "powershell.exe",
        "pid": 2847,
        "command_line": "powershell.exe -ExecutionPolicy Bypass -File C:\\temp\\script.ps1",
        "parent": {
            "name": "cmd.exe",
            "pid": 1924
        }
    },
    "user": {
        "name": "employee_user",
        "domain": "corporate"
    },
    "host": {
        "name": "workstation-042",
        "os": {
            "name": "Windows",
            "version": "10"
        }
    }
}
 
 
Obohacení kontextu
Nezpracované události získávají bezpečnostní hodnotu díky obohacení kontextu. Zahrňte relevantní metadata, která pomohou bezpečnostním analytikům pochopit význam událostí.
Příklad v Pythonu
import logging
import json
from datetime import datetime, timezone
class SecurityLogger:
    def __init__(self, service_name):
        self.service_name = service_name
        self.logger = logging.getLogger(service_name)
    def log_authentication_event(self, user_id, source_ip, outcome, session_id=None, user_agent=None):
        event = {
            "@timestamp": datetime.now(timezone.utc).isoformat(),
            "event": {
                "category": ["authentication"],
                "type": ["start"],
                "outcome": outcome
            },
            "service": {
                "name": self.service_name
            },
            "user": {
                "id": user_id
            },
            "source": {
                "ip": source_ip
            }
        }
        # Add contextual information
        if session_id:
            event["session"] = {"id": session_id}
        if user_agent:
            event["user_agent"] = {"original": user_agent}
        self.logger.info(json.dumps(event))
 
 
Korelační identifikátory
Zahrňte korelační ID, která umožňují sledování uživatelských relací, transakčních toků a souvisejících událostí v distribuovaných systémech.
{
    "@timestamp": "2025-06-28T18:15:22.000Z",
    "event": {
        "category": ["web"],
        "type": ["access"]
    },
    "trace": {
        "id": "abc123def456"
    },
    "transaction": {
        "id": "txn_789xyz"
    },
    "session": {
        "id": "sess_456abc"
    },
    "user": {
        "id": "user_12345"
    }
}
 
Ochrana citlivých údajů
Nikdy nelogujte citlivé informace přímo. Používejte techniky hashování, tokenizace nebo redigování při zachování vyšetřovací užitečnosti.
Příklad v Pythonu
import hashlib
from datetime import datetime, timezone
def safe_log_user_activity(user_email, sensitive_data):
    # Hash PII for correlation without exposure
    user_hash = hashlib.sha256(user_email.encode()).hexdigest()[:16]
    event = {
        "@timestamp": datetime.now(timezone.utc).isoformat(),
        "event": {
            "category": ["web"],
            "type": ["access"]
        },
        "user": {
            "hash": user_hash  # Can correlate without exposing email
        },
        "url": {
            "path": "/api/sensitive-endpoint"
        },
    }
    # Never log the actual sensitive data
    logger.info(json.dumps(event))
 
 
Rozumný výběr vzorků
Ne každá událost musí být zaznamenána na stejné úrovni hlasitosti. Implementujte inteligentní vzorkování na základě rizika a kritičnosti.
Příklad v Pythonu
import random
class AdaptiveLogger:
    def __init__(self):
        self.high_risk_sample_rate = 1.0      # Log 100% of high-risk events
        self.normal_sample_rate = 0.1         # Log 10% of normal events
        self.debug_sample_rate = 0.01         # Log 1% of debug events
    def should_log(self, risk_level):
        if risk_level == "high":
            return True
        elif risk_level == "normal":
            return random.random() < self.normal_sample_rate
        else:
            return random.random() < self.debug_sample_rate
 
 
Asynchronní logování
Předejděte vlivu logování na výkon aplikace použitím asynchronních mechanismů logování.
Příklad v Pythonu
import asyncio
import aiofiles
import json
class AsyncSecurityLogger:
    def __init__(self):
        self.log_queue = asyncio.Queue()
    async def log_event_async(self, event_data):
        await self.log_queue.put(event_data)
    async def process_logs(self):
        while True:
            try:
                event = await asyncio.wait_for(
                    self.log_queue.get(), timeout=1.0
                )
                await self._write_log(event)
            except asyncio.TimeoutError:
                continue
    async def _write_log(self, event):
        async with aiofiles.open('security.log', 'a') as f:
            await f.write(json.dumps(event) + '\n')
 
 
Monitorování zdraví
Monitorujte svou logovací infrastrukturu, abyste zajistili, že se bezpečnostní události neztratí během kritických incidentů.
Příklad logu s monitorovací informací
{
    "@timestamp": "2025-06-28T19:30:15.000Z",
    "event": {
        "category": ["system"],
        "type": ["info"]
    },
    "service": {
        "name": "logging_service"
    },
    "metrics": {
        "events_per_second": 1250,
        "queue_depth": 42,
        "dropped_events": 0
    },
    "labels": {
        "monitoring": "logging_health"
    }
}
 
 
Důležité události
Navrhujte logy s ohledem na výstrahy. Zahrňte pole, která umožňují automatickou detekci hrozeb a reakci na ně.
Příklad důležité události
{
    "@timestamp": "2025-06-28T20:45:30.000Z",
    "event": {
        "category": ["authentication"],
        "type": ["start"],
        "outcome": "failure"
    },
    "rule": {
        "name": "multiple_failed_logins",
        "description": "5+ failed logins in 5 minutes"
    },
    "user": {
        "name": "admin_user"
    },
    "source": {
        "ip": "203.0.113.100"
    },
    "labels": {
        "alert_priority": "high"
    }
}
 
 
Efektivní bezpečnostní logování je umění i věda. Dodržováním těchto zásad (strukturované formátování, soulad s ECS, kontextové obohacování a optimalizace výkonu) vytvoříte logy, které budou sloužit jako výkonný nástroj pro bezpečnostní operační týmy.
Nezapomeňte, že logování není jen o zaznamenávání událostí, ale o umožnění rychlé detekce, vyšetřování a reakce na bezpečnostní hrozby. Každý záznam logu by měl vyprávět příběh, který pomáhá chránit aktiva a uživatele vaší organizace.
Investice do správné architektury logování se vyplatí, když dojde k incidentům. Bezpečnostní týmy vyzbrojené dobře strukturovanými a komplexními logy mohou reagovat na hrozby v řádu minut, nikoli hodin, což často znamená rozdíl mezi nevýznamnou bezpečnostní událostí a závažným narušením.
Začněte tyto postupy zavádět postupně, nejprve se zaměřte na nejkritičtější ověřovací a autorizační toky a poté je rozšiřte na síťové aktivity, operace se soubory a bezpečnostní události specifické pro aplikace. Váš budoucí tým pro řešení incidentů vám poděkuje.