엔씨소프트 단비 팀이 PC 시스템 이벤트 로그로 사용자의 '정상 상태' 를 정의하고, 거기서 벗어난 행위를 위협 후보로 탐지하는 방법을 실험한 기록이다. Doc2Vec 으로 로그 시퀀스를 벡터화하고, 그 벡터가 사용자 행동을 담고 있는지를 분류 모델로 검증한다.
핵심 포인트- 가설은 단순하다. 사용자마다 작업·생활 패턴에 따른 정상 상태가 있고, 악성 코드에 감염되면 그 범위를 벗어난 로그가 발생할 가능성이 높다.
- Doc2Vec 은 구성 단어 분포가 비슷한 문서를 비슷한 벡터로 만든다. 로그 시퀀스를 문서로 보면 같은 사용자의 로그는 비슷한 벡터가 될 것이라는 발상이다.
- 데이터는 14명이 쓰는 15대 PC 에서 100일간(2019-07-03 ~ 10-10) 수집했고, Carbon Black 엔드포인트 솔루션 센서의 json/LEEF key-value 로그를 썼다.
- 전반기 10일은 시간 단위로, 후반기 50일은 일 단위로 로그 시퀀스를 잘라 30차원 벡터로 변환했다.
- 분류 성능은 Macro F1 기준 전반기 0.83, 후반기 Logistic Regression 0.82·Random Forest 0.81 이었다.
상세 정리- 문제 배경으로 스피어피싱을 든다. 특정 개인·조직을 노려 위장 메일로 악성코드를 심으므로 방화벽 같은 경계 보안으로는 사전 차단이 어렵다.
- 그래서 탐지 지점이 네트워크 경계에서 엔드포인트로 확장됐고, EDR 은 원천 예방보다 빠른 탐지와 초기 조치를 중시한다.
- 판단 기준의 예시가 직관적이다. 인사팀 A씨의 PC 에서 새벽 2시에 쉘 스크립트로 전사 계좌 정보에 접근한 로그는 본인 패턴에서도, 인사팀의 일반적 행동 범위에서도 벗어난다.
- Word2Vec 을 먼저 설명한 뒤 Doc2Vec 으로 넘어간다. Doc2Vec 은 단어들로 된 문서와 문서 ID 에 해당하는 paragraph vector 를 함께 학습한다.
- 분절 기준의 근거: 출근·오전 근무·점심·오후 근무·퇴근 같은 반복성이 있고 근무일과 휴일, 요일별 차이도 있어 시간 단위와 일 단위 두 방식을 각각 시도했다.
- 검증 설계: 학습기간 벡터로 어느 PC 에서 나온 것인지 분류하도록 학습시키고, 평가기간 벡터의 PC 를 맞히는지 확인했다.
- 시각화: 30차원을 t-SNE 로 2차원에 도시했더니 사용자별로 클러스터가 형성됐다. 일 단위는 포인트 수가 적어 클러스터 간 거리가 더 벌어졌다.
- 오분류 추적이 이 글의 압권이다. 전반기에는 User 13, 후반기에는 User 12 의 로그만 대부분 틀렸다.
- 인터뷰 결과 User 13 은 PC 두 대를 쓰는데 학습기간에는 보안 솔루션이 설치된 PC 를, 평가기간에는 설치되지 않은 PC 를 주로 썼다. User 12 도 9월 말부터 솔루션 미설치 PC 를 쓰는 업무로 바뀌었다.
- 추정 검증: User 12 의 진술대로 학습기간을 9월 중순까지, 평가기간을 9월 하순으로 다시 잘랐더니 전체 성능이 Macro F1 0.93~0.95 로 올랐다.
- 더 정확히는 9월 24~27일 나흘은 맞히고 28~30일 사흘은 틀렸는데, 이는 "9월 말에 업무 방식이 바뀌었다" 는 응답과 정확히 맞아떨어진다.
- 한계 ①: 수집 대상이 한 실의 한정된 인원이라, 대상이 늘면 분류 범주가 늘어 성능 저하와 학습 시간·리소스 증가가 따른다.
- 한계 ②: 벡터가 행동 변화에 매우 민감해 단순한 업무 패턴 변화도 위협으로 잡는 false positive 가 생긴다. 탐지 시스템이 '양치기 소년' 이 되면 담당자가 알람을 믿지 않게 된다.
- 개선 방향: 개인 단위뿐 아니라 소속 조직·직무 단위의 정상 범위를 함께 두고, 조직 패턴에서 극단적으로 벗어날 때 탐지하면 오탐도 줄고 만들 모델 수도 줄어 관리 비용이 낮아진다.
왜 읽나룰 기반이 아닌 방식으로 내부 위협을 탐지하려는 보안·데이터 담당자에게 임베딩 기반 접근의 가능성과 오탐이라는 실제 벽을 함께 보여준다.