2019년 3월 26일 화요일

알고 보면 쉬운 이상징후 분석

기계학습 기반 이상징후 분석 시스템 개발 과정의 진지한 논의를 엿들은(?) 적이 있다. 옆자리라 그냥 들림 그런데 웹로그 URI에 'select' 등의 쿼리문이나 따옴표 등 특수문자가 포함되면 이상한 거 아니냐는 식의 대화를 많이 하더라. 

특정 문자열 패턴을 이상징후 탐지 기준으로 삼고 싶은 마음은 이해가 간다. 인류가 경험한 가장 효과적인 정보 수집/분석 방법이 패턴매칭이었으니까.


라이벌의 정보를 수집/분석하면 경쟁에 유리하다는 사실을 우리는 본능적으로 알고 있다. 이때 전제 조건은 라이벌의 정보만을 수집해야 한다는 것.

라이벌이 아닌 다른 이의 정보가 섞이면? 적이 누군지 몰라 모든 트래픽을 검사하는 패턴매칭 보안 장비들이 대량 오탐에 숨 넘어가는 거 보시라(..)

정보보안 현장의 대량 오탐 문제는 패턴 수집 범위의 애매모호함에서 시작한 후, 언어의 애매모호함에 의해 절정에 이른다.

실화? 드라마?

'여앵커', '불륜', '재벌2세'는 그냥 지나치기엔 너무나 매력적인 패턴. 이 기사의 낚시 여부를 가리는 방법은 해당 패턴의 전후 맥락, Context를 파악하는 것뿐이다. NSA처럼 돈을 퍼부으면 전세계를 도청할 수도 있겠지만, 애당초 어려운 일.

NSA의 위엄

이런 상황에서 문자열 패턴으로 이상징후 분석을 하겠다? 그럼 패턴매칭과 뭐가 다르지? 구글에 anomaly detection만 쳐봐도 바로 감이 올텐데. 아 거긴 인터넷이 안 되는군(..)


이상징후 분석은
말 그대로 '이상한 상태'를 찾는 것. 그리고 이상한 상태를 찾는 가장 쉬운 방법은 시간대별로 발생한 '상태의 개수'를 세는 것.

사람들은 숫자를 좋아한다. 복잡하게 머리 굴리지 않아도 세상을, 자연 현상을 이해할 수 있(을 거라 생각하)기 때문.

그래서 사람들은 숫자를 셌다. 농사를 짓게 되면서 온도를 측정하고 강수량을 쟀으며, 군인을 뽑고 세금을 걷기 위해 인구 수를 셌다. 숫자로 자연 및 사회 현상을 이해하려는 통계분석을 시작한 것.

인구 변화 추이(index.go.kr)

그리고 그 숫자의 변화를 읽어내려고 노력했다. 이상징후 분석 역시 패턴매칭과 마찬가지로 인류가 전통적으로 사용해왔던 정보 수집/분석 방법이라는 얘기.

보안 이상징후 분석이라고 특별난 거 있을까? 조상들이 하던대로 하면 된다. 측정을 원하는 상태의 숫자를 잘 기록한 후, 변화 추이를 잘 관찰하면 된다. 이때 전제 조건은 목적에 맞는 상태 분류를 해야 한다는 것.

'인구 변화 추이' 통계가 군인을 뽑으려는 목적에 적합할까? 인구 오천만이면 오천만 대군? 목적에 맞는 통계가 없으니 정확한 분석이 불가능하다. 다음과 같은 상태 분류가 필요. 여기에 연령별 분류가 더해진다면?


원하는 상태만 분류하면, 그 상태의 발생 개수만 측정하면, 그 개수의 변화 추이만 관찰하면 이상징후 분석은 쉽다. 분류만 잘 하면 그 다음은 술술술.

상태 분류가 중요하다는 얘기. 어떻게 하면 분류를 잘 할 수 있을까? 당연히 뭘, 어떻게 분류할건지에 대한 결정이 가능해야 하지 않을까? 목적에 맞는 상태를 정의할 수 있어야 한다는 것. 상태를 잘 정의하려면?
자세히 보아야 예쁘다. 
오래 보아야 사랑스럽다. 
데이터도 그렇다.

나태주 시인의 '풀꽃'을 표절했다.-_- 데이터를 자세히, 오래, 자주 보다 보면 당연히 잘 알게 된다. 잘 알면 원하는 상태 정의도 잘 할 수 있지 않을까?

나가며

잘 정의된 데이터 분석 시나리오만 따로 만들어주는 회사 없냐는 질문을 받은 적이 있다. 글쎄? 보통 장비 사면 시나리오나 비슷한 서비스가 딸려 가는 경우는 있는데(..)

보안 회사는 왜 분석 시나리오만 따로 팔지 않을까? 장비 파는 게 더 돈이 되니까. 장비보다 더 비싸게, 최소한 비슷한 값이라도 치르고 시나리오를 사려는 소비자를 본 적이 없어서 그러는 것 아닐까? 미국도 그런 사례는 못 들어본 듯.

결정적으로 좋은 시나리오는 충분한 분석 경험에서 나온다. 분석 경험은 데이터가 있어야 쌓을 수 있다. 그런데 그 데이터는 어디에 있을까?


관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스