Wykrywanie anomalii w dziennikach magazynu plików: Isolation Forest, CatBoost i autoenkoder
Uczenie maszynowe skutecznie identyfikuje zagrożenia w dziennikach magazynu plików, gdzie codziennie rejestrowane są miliony operacji odczytu, zapisu i usuwania. Trzy algorytmy — Isolation Forest, CatBoost i autoenkoder — analizują wielowymiarowe szeregi czasowe aktywności użytkowników, odróżniając normalne zachowanie od podejrzanego bez potrzeby oznaczania danych.
Dane są agregowane w przedziałach czasowych: dla każdego slotu obliczana jest intensywność operacji według typów. Powstaje wektor cech, w którym odchylenia sygnalizują wewnętrzne kopiowanie lub masowe szyfrowanie.
Isolation Forest: izolacja anomalii losowością
Isolation Forest buduje zespół drzew z losowymi podziałami cech. Anomalie są izolowane szybciej, ponieważ ich cechy znacznie różnią się od większości. Algorytm jest nienadzorowany: nie wymaga oznaczania, skupia się na ścieżce od korzenia do liścia.
from sklearn.ensemble import IsolationForest
if_model = IsolationForest(n_estimators=100, contamination=0.05, bootstrap=False, random_state=42)
Dla szeregów czasowych dodawane są cechy opóźnione:
data['prev_10min'] = (data.rolling(window='10min', min_periods=1)['events'].sum()).astype(int)
data['prev_5min'] = (data.rolling(window='5min', min_periods=1)['events'].sum()).astype(int)
data['prev_3min'] = (data.rolling(window='3min', min_periods=1)['events'].sum()).astype(int)
Kluczowe hiperparametry:
- n_estimators: równowaga między dokładnością a szybkością
- contamination: oczekiwany udział anomalii (0.05)
- max_samples: rozmiar podpróby (256 domyślnie)
- bootstrap: False dla różnorodności
Ocena anomaly_score przez decision_function jest znormalizowana [-0.5, 0.5]. Wartości < -0.25 — pewne anomalie:
data['anomaly'] = np.where(if_model.decision_function(data[['events', 'prev_3min', 'prev_5min', 'prev_10min']]) > -0.25, 0, 1)
Analiza SHAP pokazuje dominację opóźnień na 10 minut. Zalety:
- Złożoność O(n log n) dla czasu rzeczywistego
- Działa na CPU bez przechowywania danych
- Proste wdrożenie
CatBoost do prognozowania normalnej aktywności
CatBoostRegressor uczy się na danych historycznych, aby przewidywać oczekiwaną intensywność. Anomalie — gdzie |rzeczywista - przewidywana| przekracza próg.
from catboost import CatBoostRegressor
model = CatBoostRegressor()
expected_value = model.predict()
anomaly_score = abs(actual_value - expected_value)
Schemat podziału danych:
- Treningowe (3 tygodnie): normalna aktywność
- Walidacyjne (1 tydzień): dostrajanie
- Testowe (2 dni): anomalie
Cechy rozszerzają kontekst:
- Czasowe: dzień tygodnia, godzina
- Opóźnione: zdarzenia z 1h, 30m, 10m, 5m, 3m
- Ślizgające: średnia/odchylenie/kwantyl(0.8) z 3/7 dni
Statystyki ślizgowe obliczane są bez wycieku:
# Statystyki ślizgowe
data['week_mean'] = round(data.rolling(window=7, min_periods=1)['events'].mean(), 2)
Ślizgowe uczenie codziennie aktualizuje model na pełnym puli historycznej.
Autoenkoder: kompresja i odtworzenie
Neuronowy autoenkoder kompresuje normalne sekwencje w przestrzeń ukrytą, a anomalie są słabo odtwarzane (wysoki błąd rekonstrukcji).
Architektura: enkoder LSTM/GRU + dekoder. Uczenie na normalnych danych minimalizuje MSE. Próg błędu określa anomalie.
Zalety dla szeregów: przechwytuje długoterminowe zależności. Wady: wymaga GPU, wrażliwy na hiperparametry.
Porównanie podejść:
| Model | Szybkość | Interpretowalność | Zasoby | Adaptacja do trendów |
|--------|----------|--------------------|---------|---------------------|
| Isolation Forest | Wysoka | SHAP | CPU | Opóźnienia |
| CatBoost | Średnia | Ważność cech | CPU/GPU | Uczenie ślizgowe |
| Autoenkoder | Niska | Uwaga | GPU | Sekwencje |
Co jest ważne
- Isolation Forest prowadzi w szybkości i oszczędności dla czasu rzeczywistego
- CatBoost jest dokładny w prognozowaniu trendów z rozszerzonymi cechami
- Autoenkoder przewyższa na złożonych sekwencjach, ale jest zasobożerny
- Wszystkie modele są nienadzorowane: działają bez oznaczania
- Kombinacja opóźnień i statystyk ślizgowych zwiększa dokładność o 15-20%
Integracja z SIEM: modele aktualizowane online, alerty przy anomaly_score > progu. Testowanie na anomaliach syntetycznych potwierdza F1-score > 0.85 dla wszystkich.
— Editorial Team
Brak komentarzy.