홈으로 돌아가기

시계열 이상 탐지 ML

이 기사는 파일 스토리지 로그의 이상 탐지를 위한 세 가지 ML 접근 방식을 분석합니다: 이상치 분리를 위한 Isolation Forest, 예측을 위한 CatBoost, 재구성을 위한 autoencoder. 코드, 특징, 메트릭 포함. SIEM 통합에 적합.

이상에 대응하는 ML: 로그를 위한 세 가지 알고리즘
Advertisement 728x90

파일 저장소 로그의 이상 탐지: 아이솔레이션 포레스트, 캣부스트, 오토인코더

머신러닝은 매일 수백만 건의 읽기, 쓰기, 삭제 작업이 기록되는 파일 저장소 로그에서 위협을 효과적으로 식별합니다. 아이솔레이션 포레스트, 캣부스트, 오토인코더라는 세 가지 알고리즘이 사용자 활동의 다차원 시계열을 분석하여 레이블이 없는 데이터에서 정상 행동과 의심스러운 패턴을 구분합니다.

데이터는 시간 간격으로 집계됩니다: 각 슬롯마다 유형별 작업 강도를 계산합니다. 이는 편차가 내부자 복사나 대량 암호화를 나타내는 특징 벡터를 생성합니다.

아이솔레이션 포레스트: 무작위성을 통한 이상 분리

아이솔레이션 포레스트는 특징의 무작위 분할로 구성된 트리 앙상블을 구축합니다. 이상은 그 특징이 대다수와 크게 다르기 때문에 더 빨리 분리됩니다. 이 알고리즘은 비지도 학습 방식으로, 레이블이 필요 없으며 루트에서 리프까지의 경로에 초점을 맞춥니다.

Google AdInline article slot
from sklearn.ensemble import IsolationForest

if_model = IsolationForest(n_estimators=100, contamination=0.05, bootstrap=False, random_state=42)

시계열의 경우 지연 특징이 추가됩니다:

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)

주요 하이퍼파라미터:

  • n_estimators: 정확도와 속도의 균형
  • contamination: 예상 이상 비율 (0.05)
  • max_samples: 하위 샘플 크기 (기본값 256)
  • bootstrap: 다양성을 위해 False

decision_function을 통한 anomaly_score는 [-0.5, 0.5]로 정규화됩니다. -0.25 미만의 값은 확신 있는 이상입니다:

Google AdInline article slot
data['anomaly'] = np.where(if_model.decision_function(data[['events', 'prev_3min', 'prev_5min', 'prev_10min']]) > -0.25, 0, 1)

SHAP 분석은 10분 지연의 우세를 보여줍니다. 장점:

  • 실시간 처리에 O(n log n) 복잡도
  • 데이터 저장 없이 CPU에서 실행
  • 쉬운 배포

정상 활동 예측을 위한 캣부스트

CatBoostRegressor는 역사적 데이터로 훈련되어 예상 강도를 예측합니다. 이상은 |실제 - 예측|이 임계값을 초과하는 곳에서 발생합니다.

from catboost import CatBoostRegressor

model = CatBoostRegressor()
expected_value = model.predict()
anomaly_score = abs(actual_value - expected_value)

데이터 분할 방식:

Google AdInline article slot
  • 훈련 (3주): 정상 활동
  • 검증 (1주): 튜닝
  • 테스트 (2일): 이상

특징은 컨텍스트를 확장합니다:

  • 시간적: 요일, 시간
  • 지연: 1시간, 30분, 10분, 5분, 3분 동안의 이벤트
  • 롤링: 3/7일 동안의 평균/표준편차/분위수(0.8)

롤링 통계는 누수를 피해 계산됩니다:

# 롤링 통계
data['week_mean'] = round(data.rolling(window=7, min_periods=1)['events'].mean(), 2)

롤링 학습은 전체 역사적 풀에서 매일 모델을 업데이트합니다.

오토인코더: 압축과 재구성

신경망 오토인코더는 정상 시퀀스를 잠재 공간으로 압축하는 반면, 이상은 재구성이 잘 되지 않아 높은 재구성 오류를 보입니다.

아키텍처: LSTM/GRU 인코더 + 디코더. 정상 데이터로 훈련하여 MSE를 최소화합니다. 오류 임계값이 이상을 결정합니다.

시계열에 대한 장점: 장기 의존성을 포착합니다. 단점: GPU 필요, 하이퍼파라미터에 민감합니다.

접근법 비교:

| 모델 | 속도 | 해석 가능성 | 자원 | 추세 적응 |

|--------|----------|--------------------|---------|---------------------|

| 아이솔레이션 포레스트 | 높음 | SHAP | CPU | 지연 |

| 캣부스트 | 중간 | 특징 중요도 | CPU/GPU | 롤링 학습 |

| 오토인코더 | 낮음 | 어텐션 | GPU | 시퀀스 |

핵심 요약

  • 아이솔레이션 포레스트는 실시간 사용에 속도와 비용 효율성에서 선도합니다
  • 캣부스트는 확장된 특징으로 추세 예측에 정확합니다
  • 오토인코더는 복잡한 시퀀스에서 뛰어나지만 자원 집약적입니다
  • 모든 모델은 비지도 학습 방식으로, 레이블 없이 작동합니다
  • 지연과 롤링 통계를 결합하면 정확도가 15-20% 향상됩니다

SIEM 통합: 모델은 온라인으로 업데이트되며, anomaly_score > 임계값에서 경보가 트리거됩니다. 합성 이상에 대한 테스트는 모두 F1-점수 > 0.85를 확인합니다.

— Editorial Team

Advertisement 728x90

다음 읽기