Přeskočit obsah

2025

Logování aplikací pro vývojáře softwaru

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áklad: Struktura místo chaosu

Zásada 1: Osvojte si strukturované logování

Nestrukturované logy typu „Uživatel josef_novak 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-30T14:40:02.953969+00:00",
    "event": {
        "category": ["authentication"],
        "outcome": "success"
    },
    "user": {
        "name": "josef_novak",
        "uid": "12345"
    },
    "source": {
        "ip": "192.168.1.100"
    },
    "message": "Ověření uživatele proběhlo úspěšně"
}

Princip 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

Logujte vždy v UTC, lokální časové zóny jsou nedeterministické a mnohem náchylnější k chybám ve zpracování.

Tip

Preferujte UTF-8 jako znakovou sadu pro logy.

Kategorie kritických logů z hlediska bezpečnosti

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í uživatele

{
    "@timestamp": "2025-06-30T14:40:02.953969+00:00",
    "event": {
        "category": ["authentication"],
        "outcome": "failure"
    },
    "user": {
        "name": "admin",
    },
    "target": {
        "name": "privileged_service"
    }
    "source": {
        "ip": "203.0.113.42",
    },
    "error": {
        "message": "Invalid credentials provided"
    }
}

Logy o síťové aktivitě

Klíčové pro odhalení laterálního pohybu útočníka, exfiltrace dat a komunikace typu „velení a řízení“.

Příklad logu o síťové aktivitě

{
    "@timestamp": "2025-06-30T14:40:02.953969+00:00",
    "event": {
        "category": ["network"],
        "type": ["connection"],
        "outcome": "success"
    },
    "source": {
        "ip": "10.0.1.50",
        "port": 4433
    },
    "destination": {
        "ip": "198.51.100.25",
        "port": 443,
    },
    "network": {
        "protocol": "tcp",
        "bytes": 1048576
        "url": "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-30T14:40:02.953969+00:00",
    "event": {
        "category": ["process"],
        "outcome": "success"
    },
    "process": {
        "name": "powershell.exe",
        "pid": 2847,
        "command_line": "powershell.exe -ExecutionPolicy Bypass -File C:\\temp\\script.ps1",
    },
    "user": {
        "name": "employee_user",
        "domain": "corporate"
    },
    "host": {
        "name": "workstation-042",
        "os": {
            "name": "Windows",
            "version": "10"
        }
    }
}

Doporučené implementační postupy

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": ["autentizace"],
                "type": ["start"],
                "outcome": outcome
            },
            "service": {
                "name": self.service_name
            },
            "user": {
                "id": user_id
            },
            "source": {
                "ip": source_ip
            }
        }

        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

Zahrnují korelační identifikátory, 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-30T14:40:02.953969+00:00",
    "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

def safe_log_user_activity(user_email, sensitive_data):

    user_hash = hashlib.sha256(user_email.encode()).hexdigest()[:16]

    event = {
        "@timestamp": datetime.now(timezone.utc).isoformat(),
        "event": {
            "category": ["web"],
            "type": ["access"]
        },
        "user": {
            "user.hash": user_hash
        },
        "url": {
            "path": "/api/sensitive-endpoint"
        },
    }

    logger.info(json.dumps(event))

Výkon a objem

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 # Zaznamenáváme 100 % vysoce rizikových událostí
        self.normal_sample_rate = 0.1 # Zaznamenáváme 10 % normálních událostí
        self.debug_sample_rate = 0.01 # Zaznamenáváme 1 % ladících událostí

    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')

Monitorujte samotnou infrastrukturu logování, abyste zajistili, že se bezpečnostní události neztratí během kritických incidentů.

Příklad logu s monitorovací informací

{
    "@timestamp": "2025-06-30T14:40:02.953969+00:00",
    "event": {
        "category": ["system"],
        "type": ["info"]
    },
    "service": {
        "name": "logging_service"
    },
    "metrics": {
        "events_per_second": 1250,
        "queue_depth": "dropped_events",
        "dropped_events": 0
    }
}

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 logu s relevatními poli

{
    "@timestamp": "2025-06-30T14:40:02.953969+00:00",
    "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"
    }
}

Závěr

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.

Co je nového ve TeskaLabs LogMan.io v25.15

TeskaLabs LogMan.io přináší vylepšenou funkci lookupů, úplnou novinkou je přiřazování rizikových skóre a oceníte také přehrávání archivovaných dat z webového rozhraní. Zde je stručný přehled novinek ve verzi v25.15 a jejich význam v bezpečnosti IT infrastruktury.

Chytřejší lookupy s napojením na feedy

Lookupy prošly výraznou proměnou. Přidali jsme nový vzhled uživatelského rozhraní a také novou mikroservisu lmio-feeds, která dokáže načítat data z externích datových zdrojů o bezpečnostních hrozbách (threat intelligence feeds) a ukládat je do lookupů.

Co nového přináší nové rozhraní?

  • Možnost exportu a importu lookupů
  • Vytváření feedů přímo z UI
  • Třídění a filtrování položek
  • Podpora speciálních znaků v položkách

Nově také rozlišujeme mezi tenantskými a globálními lookupy, které lze sdílet mezi prostředími. Položkám (např. IP adresám) lze přiřazovat rizikové skóre a pravidelně je automaticky testovat.