Detekce anomálií aktivity uživatelů pomocí vektorových baseline Event Code na Windows hostech¶
Monitoring aktivity uživatelů na Windows endpointech se často zaměřuje na high-risk události, změny privilegií nebo konkrétní útočné techniky. Jedním z nejsilnějších early-warning signálů je ale něco mnohem jednoduššího: rozložení příchozích Windows Event Codes.
Místo sledování jednotlivých událostí izolovaně se pro každý host naučí behaviorální baseline analýzou, jak často se různé Event Codes objevují v jednohodinovém okně. Metoda seskupí události do vysokodimenzionálního vektoru (např. velikost 20 000), kde každá dimenze odpovídá konkrétnímu event code. Každá hodina vytvoří jeden takový vektor — „tvar“ normální aktivity pro host.
Klíčové pojmy¶
Než půjdeme do detailů, definujme základní termíny této detekční metody:
Event Code¶
Číselný identifikátor přiřazený každému typu Windows události. Například:
4624= Úspěšné přihlášení účtu4625= Neúspěšné přihlášení účtu4688= Byl vytvořen nový proces4720= Byl vytvořen uživatelský účet
Každá Windows security událost má Event Code kategorizující typ aktivity.
Baseline¶
Naučený statistický profil „normálního“ chování. V tomto kontextu baseline zachycuje, jak se konkrétní host typicky chová v daném časovém období (např. pondělí v 10:00 ve všední den). Ukládá průměrné chování (mean) a typickou variaci (směrodatná odchylka) pro porovnání s aktuální aktivitou.
Vektor¶
Matematická struktura s více hodnotami v uspořádaném seznamu. V této metodě:
- Každá pozice (dimenze) vektoru reprezentuje konkrétní Event Code
- Hodnota na každé pozici je počet výskytů daného Event Code v jednohodinovém okně
- Příklad: Pokud pozice 4624 má hodnotu 150, Event Code 4624 nastal v té hodině 150×
Jde o otisk popisující hodinovou aktivitu napříč všemi možnými Event Codes.
Norma vektoru¶
Jedno číslo shrnující celkovou „velikost“ nebo „magnitudu“ vektoru. Matematicky je to euklidovská vzdálenost od počátku k bodu reprezentovanému vektorem. Pro naše účely:
- Vysoká norma = v té hodině bylo hodně událostí
- Nízká norma = málo událostí
- Konkrétní vzor toho, které Event Codes přispěly k normě, dělá každou hodinu jedinečnou
Sigma (σ) / směrodatná odchylka¶
Statistická míra, jak moc se hodnoty typicky liší od průměru. V našem kontextu:
- Nízká sigma = hodnoty jsou obvykle blízko průměru (konzistentní chování)
- Vysoká sigma = hodnoty se silně liší od průměru (nekonzistentní chování)
„5 sigma“ znamená, že aktuální hodnota je 5 směrodatných odchylek od průměru — extrémně vzácné, pokud je chování normální.
Z-Score¶
Standardizovaná míra, jak neobvyklá je hodnota oproti baseline. Výpočet:
Z-Score = |Current Value - Average Value| / Standard Deviation
- Z-Score 0 = naprosto normální (přesně na průměru)
- Z-Score 1–2 = mírně neobvyklé, ale běžné
- Z-Score 3 = vzácné (~0,3 % času u normálního rozdělení)
- Z-Score 5 = extrémně vzácné (~0,00006 % času)
V této metodě se Z-Score a Sigma používají zaměnitelně — obojí popisuje, kolik směrodatných odchylek je aktuální chování od normálu.
Temporální třídy¶
Kategorie seskupující podobná časová období kvůli podobným vzorům chování:
- Workdays: pondělí až pátek při běžné provozní aktivitě
- Weekends: sobota a neděle s typicky nižší aktivitou
- Holidays: zvláštní dny s unikátními vzory (minimální aktivita nebo maintenance okna)
Učením oddělených baseline pro každou třídu systém chápe, že nízká aktivita v neděli je normální, ale stejně nízká aktivita ve středu by byla podezřelá.
Agregace¶
Proces seskupení a shrnutí jednotlivých událostí. V této metodě:
- Události se seskupí podle
host.id(z kterého počítače přišly) - Uvnitř hosta se počítají podle
event.code(typ události) - Počty se bucketují do jednohodinových oken
Agregace promění tisíce raw událostí v jeden vektor za hodinu na host.
Jednoduchý příklad¶
Konkrétními čísly:
Scénář: Host WORKSTATION-01 v pondělí v 10:00
Raw události (zjednodušeno):
Event Code 4624 occurred 120 times (successful logons)
Event Code 4688 occurred 45 times (process creations)
Event Code 5156 occurred 2,340 times (network connections)
Reprezentace vektorem:
[0, 0, 0, ..., 120, ..., 45, ..., 2340, ..., 0, 0]
^ ^ ^ ^
Position 0 Pos 4624 Pos 4688 Pos 5156
Norma vektoru (zjednodušený výpočet): √(120² + 45² + 2340²) ≈ 2,343
Baseline (naučeno z předchozích pondělků v 10:00): - Průměrná norma vektoru: 2 200 - Směrodatná odchylka: 100
Výpočet aktuálního Z-Score:
Z-Score = |2,343 - 2,200| / 100 = 1.43
Výsledek: Z-Score 1,43 je normální (pod prahem 5), alert se nespustí. Mírná odchylka je v očekávaném chování pro tento host v tento čas.
Kdyby stejný host náhle ukázal 8 500 síťových spojení místo obvyklých 2 340, dramatický nárůst by posunul Z-Score nad 5 a spustil alert anomálie.
Učení normálního „tvaru vektoru“¶
Baseliner sbírá data několik dní napříč typickými behaviorálními třídami — workdays, weekends a holidays. Po zachycení dostatek vzorků (v našem případě čtyři platné vzorky na třídu) se systém naučí, jak vypadá normální hodinový vektor. Výstupem učící fáze je jediná skalární hodnota: norma vektoru. Ta funguje jako signatura hosta pro daný temporální kontext.
Převod odchylek na sigmu¶
Při příchodu nové aktivity systém znovu spočítá normu vektoru pro aktuální hodinu a porovná ji s historickým průměrem a směrodatnou odchylkou pro stejnou hodinu a třídu. Odchylka se vyjádří jako Z-score:
Z = |CURRENT_VALUE – MEAN_VALUE| / STDEV
Často se tomu říká sigma skóre. Vysoké sigma hodnoty znamenají, že aktuální vzor Event Codes je fundamentálně jiný, než host obvykle produkuje.
Například nárůst logon událostí, neobvyklá sekvence service-related kódů nebo náhlý pokles očekávaného provozního šumu mohou posunout normu vektoru natolik, že vznikne vysoké Z-score. Když sigma překročí nastavený práh — typicky 5 a více — systém to bere jako smysluplnou anomálii.
Od baseline k detekci¶
Tento přístup není sám o sobě určen jako vysoce přesný alerting mechanismus. Slouží jako behaviorální signál pro širší korelační pravidla. Pokud host ukáže prudkou odchylku ve vektoru event codes, událost „behavior-anomaly“ může napájet další detekční logiku a zvýraznit kompromitované stroje nebo abnormální akce uživatele.
Vektorové baseline místo pevných prahů nebo filtrů na jednotlivé události se přirozeně přizpůsobí hlučným enterprise prostředím. Zachytí jemné behaviorální posuny, které by jinak zůstaly neviditelné — a zůstane dostatečně lehký pro provoz ve velkém měřítku.
Příklad konfigurace¶
Úplný příklad konfigurace Event-Code Vector Baseline s vysvětlením jednotlivých sekcí.
---
define:
name: Event Codes Per Host #(1)
description: Creates baseline for host and triggers an alert if number of events within a 1-hour window shows an anomaly from the learned baseline based on event codes #(2)
type: baseliner #(3)
risk_score: 30.0 #(4)
baseline:
region: Czech Republic #(5)
period: day #(6)
learning: 4 #(7)
classes: [workdays, weekends, holidays] #(8)
aggregation: vector #(9)
vector_size: 20000 #(10)
weights: #(11)
"4624": 0.5 # Reduce weight of successful logons
"4634": 0.5 # Reduce weight of logoffs
"5156": 0.3 # Reduce weight of Windows Filtering Platform connections
"4688": 2.0 # Increase weight of process creation events
# Event Codes baseline is meant for analysis and as input for correlations,
# not an entry to alert management
signal:
default: false #(12)
logsource:
vendor:
- microsoft #(13)
product:
- windows #(14)
predicate:
!AND
- !IN #(15)
what: event.code
where: !EVENT
- !IN #(16)
what: host.id
where: !EVENT
evaluate:
key: host.id #(17)
aggregate_by: event.code #(18)
timestamp: "@timestamp" #(19)
analyze:
test:
!GT #(20)
- !ARG SIGMA #(21)
- 5 #(22)
trigger:
- event: #(23)
host.id: !ITEM EVENT dimension
# Event description
event.action: "behavior-anomaly" #(24)
event.reason: "Activity from a host that deviates from the learned vector baseline." #(25)
event.kind: "alert" #(26)
event.type: "indicator" #(27)
-
Název: Popisný název baseline pravidla zobrazený v rozhraní LogMan.io.
-
Popis: Vysvětluje, co baseline dělá — vytváří naučenou baseline na host a spouští alerty, když se vzor událostí výrazně odchýlí od normálního chování.
-
Typ:
baselineroznačuje baseline detekční pravidlo místo korelace nebo jiného typu. -
Risk Score: Přiřadí risk score 30,0 anomáliím z tohoto pravidla. Skóre slouží k prioritizaci a korelaci s jinými detekcemi.
-
Region: Časové pásmo / region pro temporální klasifikaci (např. „Czech Republic“ určuje místní čas pro workdays/weekends).
-
Period: Temporální granularita výpočtu baseline.
dayznamená sledování hodinových vzorů napříč dny v týdnu. -
Learning: Počet platných vzorků na třídu, než je baseline „naučena“. S
learning: 4systém potřebuje 4 vzorky pro každou hodinu každé třídy (workday/weekend/holiday). -
Classes: Behaviorální kategorie s odlišnými normálními vzory.
workdays,weekendsaholidaysumožní různé baseline pro různé typy dnů. -
Aggregation:
vectorpro vektorovou analýzu. Vytvoří vysokodimenzionální vektor, kde každá dimenze je frekvence event code. -
Vector Size: Maximální dimenzionalita vektoru (20 000). Musí být dost velká pro všechny očekávané Event Code hodnoty.
-
Weights (volitelné): Slovník vlastních vah pro konkrétní Event Codes ve vektoru:
- Snížení váhy velmi častých, nízkohodnotných událostí (např.
4624logony,5156síťová spojení), které přidávají šum - Zvýšení váhy high-value událostí (např.
4688process creation,4672special privileges), které silně indikují anomálie - Každý záznam mapuje Event Code (řetězec) na násobitel (float). Hodnoty pod 1,0 snižují důležitost, nad 1,0 zvyšují.
- Neuvedené Event Codes mají výchozí váhu 1,0.
- Snížení váhy velmi častých, nízkohodnotných událostí (např.
-
Default Signal:
false, protože baseline je pro analýzu a vstup do korelací, ne přímý alert. Zabrání automatickému signálu, ale anomálie lze použít v jiných pravidlech. -
Vendor: Filtruje události jen od vendor
microsoft— analyzujeme Windows události. -
Product: Dále filtruje na produkt
windows— Windows Event Logs. -
Predikát Event Code:
!INověří existenci poleevent.codev události. -
Predikát Host ID: Druhé
!INověří existencihost.id— stavíme per-host baseline. -
Key:
host.idjako klíč baseline. Oddělená baseline pro každý unikátní host. -
Aggregate By: Agregace podle
event.code— dimenze vektoru. -
Timestamp: Pole pro temporální bucketing.
@timestampurčuje jednohodinové okno. -
Greater Than Test:
!GTporovná vypočtenou SIGMA s prahem. -
SIGMA Argument:
!ARG SIGMAje Z-score(|ACTUAL_value - MEAN_value|) / STDEV. -
Threshold: Hodnota
5— anomálie při SIGMA nad 5 směrodatnými odchylkami. -
Trigger Event: Při anomálii systém generuje novou událost s uvedenými poli.
-
Event Action: Tag
behavior-anomalypro filtrování a korelaci. -
Event Reason: Lidsky čitelné vysvětlení pro analytiky.
-
Event Kind:
alertv ECS schématu. -
Event Type:
indicatorjako indikátor potenciální kompromitace nebo neobvyklé aktivity (ECS).
Jak to funguje v praxi¶
Když je baseline pravidlo aktivní:
-
Učící fáze: Sběr dat pro každý host napříč temporálními třídami (workdays, weekends, holidays).
-
Hodinové vektory: Pro každou hodinu a host vektor s dimenzemi = frekvence Event Code.
-
Aplikace vah: Pokud jsou
weights, každý počet Event Code se vynásobí váhou před výpočtem normy. -
Výpočet baseline: Po dostatek vzorků (4 na třídu) mean a směrodatná odchylka normy vektoru pro každou kombinaci hodina + třída.
-
Průběžný monitoring: Nové události průběžně přepočítávají normu aktuální hodiny (s váhami) a porovnávají s baseline.
-
Detekce anomálií: Při Z-score (SIGMA) nad 5 systém rozpozná anomálii a může spustit downstream akce.
-
Vstup do korelací: Generované
behavior-anomalyudálosti konzumují jiná korelační pravidla pro behaviorální kontext.
Use cases¶
Vektorová baseline detekce je obzvlášť účinná pro:
- Kompromitované účty: Neobvyklé vzory autentizace, změn privilegií nebo spouštění procesů. Váhami zdůrazněte vzácné privilege události (4672, 4648) a snižte šum z rutinních logonů.
- Laterální pohyb: Náhlé změny síťových Event Codes na dříve tichém hostu. Zvyšte váhu process creation (4688) a explicit credential use (4648).
- Malware aktivita: Abnormální vytváření služeb, změny registru nebo přístup k souborům. Zvyšte váhy u service událostí a scheduled task creation pro persistence.
- Privilegované uživatele: Neobvyklé aktivity administrátorů mimo jejich vzory. Váhami zaměřte admin akce a filtrujte rutinu.
- Detekce posunu baseline: Když host fundamentálně změní roli nebo konfiguraci. Vektorový přístup detekuje posun „behavior profilu“, i když jednotlivé události vypadají normálně.
Best practices¶
-
Učící období: Nechte sběr dat alespoň 4 dny, aby všechny temporální třídy měly dost vzorků.
-
Ladění prahu: Začněte se SIGMA prahem 5 a upravujte podle false positives. Vyšší prahy (6–7) snižují šum, ale mohou minout jemné anomálie.
-
Ladění vah: Parametr
weightspro citlivost: - Snížit (0,1–0,5) u častých, nízkohodnotných událostí:
4624: úspěšné logony4634: odhlášení5156: WFP allowed connections4663: přístup k objektům (často velmi hlučné)
- Zvýšit (1,5–3,0) u vzácných security událostí:
4688: process creation4672: special privileges při novém logonu4720: vytvoření uživatelského účtu4732: člen přidán do security-enabled lokální skupiny4648: logon s explicitními credentials
-
Začněte bez vah, analyzujte dominující Event Codes, pak upravte.
-
Seskupení hostů: Oddělené baseline pro typy hostů (servery, workstations, DC) pomocí rolí nebo tagů v poli
key. -
Vyloučení: Predikáty pro hlučné Event Codes nebo maintenance okna, která zkreslí baseline.
-
Korelace: Kombinujte s jinými pravidly (failed logins, privilege escalation) pro vysokou jistotu.
Výhody oproti tradičním přístupům¶
- Adaptivní: Automaticky se přizpůsobí normálu každého hosta bez ručního ladění prahů
- Temporální awareness: Chápe, že normál v pondělí ráno ≠ sobota v noci
- Multidimenzionální: Vzory napříč tisíci Event Codes současně
- Laditelná citlivost: Volitelné
weightspro konkrétní Event Codes bez ztráty automatického učení - Škálovatelné: Lehký výpočet pro velké flotily endpointů
- Kontextové: Behaviorální kontext pro jiná pravidla místo binárního alertu
Další zdroje¶
- Definice baseline:
MEAN,STDEV,SIGMAaanalyze.testv deklaracích Baseliner - Baseliner
- Detekční pravidla
- Hodnocení rizika
- Triggery
