안랩 MDS에 적용된 머신러닝 시스템은 무엇?
악성코드가 기하급수적으로 증가하고 있다. ‘어제 유입량보다 오늘 유입량이 더 많은’ 상황인 현재의 패러다임 구조에서 사람이 악성코드를 처리하는 데에는 한계가 존재한다. 따라서 이를 기계적으로 처리해주는 수단이 필요하며, 보안 업계에서 이를 자동으로 처리해주는 머신러닝을 보안 제품에 적용하고 있다. 안랩 역시 머신러닝 시스템을 지능형 위협 대응시스템인 안랩 MDS에 적용했다. 안랩 MDS에 도입된 머신러닝 시스템이 어떤 모습인지 자세히 살펴보자.
안랩에서는 지난 2년여 동안 독자적으로 연구 개발한 머신러닝 시스템을 운영하고 있다. 이는 오로지 기계적으로만 생성된 규칙을 활용하고 기계적으로 하기 어려운 높은 수준의 분석 작업에 대해 사람이 직접 연구한 뒤 다시 기계적인 ‘머신러닝’에 관련 지식을 전달하도록 하는 유연한 시스템이다. 안랩에서는 이 머신러닝 시스템을 통해 만들어진 엔진을 지능형 위협 대응 시스템인 ‘안랩 MDS 에이전트’에 적용했다. MDS 에이전트에는 PC 내부에 악성코드가 의심되는 파일을 찾아 MDS 분석 서버에 전송하는 ‘의심 파일 수집 기능’이 있다. 이 기능은 악성코드의 감염이 의심되는 PC에 대한 보안 점검을 가능하게 한다. 또한 MDS 에이전트를 설치하기 이전 혹은 사전에 존재할 지 모를 악성코드를 찾아서 삭제하는 역할도 수행한다.

[그림 1] 머신러닝 시스템이 적용된 지능형 위협 대응 시스템 '안랩 MDS'
안랩은 MDS의 의심 파일 수집 기능을 더욱 강화할 목적으로 ‘머신러닝’ 시스템을 적용하는 프로젝트를 진행했다. 이 프로젝트의 목표는 MDS 에이전트의 의심 파일 수집 기능에서 ‘검사 시간 단축’과 ‘과탐율을 최소화’하는 것이다. 더불어 머신러닝 시스템을 MDS 에이전트뿐만 아니라 향후 다른 응용 영역에 적용할 수 있는 확장성을 검증하는 것이었다. 이러한 목표 하에 여러 기술들이 검토되었고, 최종 선택된 것이 ‘머신러닝 기반의 의심 파일 수집’이었다.
악성코드 분석과 관상
몇 년 전 ‘관상’이라는 영화가 개봉해 상당한 인기를 얻은 바 있다.

[그림 2] 영화 '관상' 포스터(*출처: 네이버 영화)
‘관상’이란 사람의 생김새만 보고 그의 운명이나 성격을 판단하는 것을 의미한다. 이러한 관상은 예를 들어 ‘호랑이 눈썹’을 가지면 ‘역모를 꾸밀자다’ 라는 규칙으로 구성되어 있을 것이다. 이러한 관상의 논리를 악성코드 분석에 대입해 보기로 했다. 즉, 임의의 파일을 직접실행하지 않고, 그 파일의 생김새만 가지고 그 파일의 악성코드 유무를 판별한다는 것이다.

[그림 3] 관상과 안랩 머신러닝의 대칭 관계
이러한 가설을 기반으로 안랩의 머신러닝 프로젝트는 시작되었으며, 검증 과정을 거쳐나가면서 시스템을 점차적으로 확장해 나가게 되었다. 우선 안랩 머신러닝 프로젝트의 조건인 ‘파일의 실행 행위를 잘 모르는 상태’는 ‘검사 시간 단축’을 위한 매우 유리한 조건이라고 할 수 있다. 만일 파일의 행위를 가지고 분석하기 위해서는 모든 PC의 행위 영역을 감시해야 하기 때문에, 평상시의 시스템 성능 저하가 우려된다. 즉, 빠른 검사를 위해서는 정보 추출과 규칙을 적용이 빨라야 하므로, 동적 정보 대신 정적 정보만 불러오도록 했다.
일반적으로 악성코드를 분석하기 위해 악성코드 분석가는 ‘행위’ 정보에 집중하는데, 안랩 머신러닝 시스템은 복잡하고 수집하기 어려운 행위 정보 대신 파일 크기, 헤더 정보, 그리고 특정 위치의 바이트 값과 같은 파일의 기본적인 생김새(정적 분석) 자료를 수집하기로 했다.
이는 빨리 습득 가능한 ‘호랑이 눈썹’ 정보를 가지고, ‘역모’를 판단하는 것과 동일하다고 보면 된다. 만일, ‘호랑이 눈썹’이 아닌 그 사람의 행동을 가지고 ‘역모’를 판단하려면, 며칠동안 계속 숨어서 들키지 않게 ‘미행’을 해야 하지 않겠는가. 즉 안랩머신 러닝 시스템은 ‘악성코드 분석가’가 아닌 ‘관상가’의 관점으로 문제를 접근하는 시스템으로개발되었다.
또한 파일의 기본적인 생김새(정적 분석)를 중심으로 한다는 것은 정보의 일관성을 가능하게 한다. 파일의 행위 정보는 시점이나 환경에 따라 서로 상이한 정보를 산출할 수 있는데, 관상 예를 들자면 ‘호랑이 눈썹’을 가진 사람을 실력이 동일한 3명의 스파이가 서로 다른 시간에서 ‘미행’했을 때, 3개의 스파이 보고서는 서로 다를 수 있다는 것을 의미한다. 하지만 실력이 동일한 3명의 ‘관상가’는 모두 ‘호랑이 눈썹’에 빨리 주목할 것이다. ‘호랑이 눈썹’은 변하지 않는 진리이기 때문이다. 즉, 파일의 정적 분석 자료는 세월이 지나도 동일한 정보를 주기 때문에 정보의 일관성을 유지시켜 준다. 물론, 행위를 분석하는 것은 그 도구나 환경에 따라서 상대적으로 다른 다른 결과가 산출되기에 일관성 유지가 불가능하다.
그렇다면 이러한 조건, 파일의 정상/악성 판별, 파일의 실행 행위를 잘 모르는 상태, 그리고 파일의 기본적인 생김새(정적 분석)를 만족시키기 위해 어떤 방법론을 사용할지를 고민했고, 그 결과가 바로 ‘머신러닝’이었다.
머신러닝과 관상
관상을 잘 보기 위해서는 무엇이 필요할까?
• 좋은 눈: 사람의 모습을 일관되게 잘 볼 수 있는 시력 소유
• 수많은 사람: 사람들을 직접 많이 만나고 관심을 가지고, 발견된 모습과 성격에 대한 통계 산출
• 수준 높은 규칙: 통계를 가지고 규칙을 생성할 수 있는 직감
위 3가지 덕목은 훌륭한 관상가가 되기 위한 필수 조건 중 일부일 것이다. 그 결과 ‘호랑이 눈썹’은 ‘역모’라는 규칙이 만들어질 것이고, 그러한 규칙을 많이 알고 있는 자가 있다면 “용하다”라는 소문이 멀리 퍼질 것이다.
이러한 관상을 악성코드 분류 시스템으로 구현하기 위해 필요한 개념이 바로 “머신러닝” 이었다. “머신 러닝”은 월간 ‘안’ 1월호에서 설명한 것과 같이 임의의 데이터로부터 정보, 즉, 규칙을 사람이 아닌 컴퓨터로 산출하는 것이 목표이며, 이를 통해 시스템적으로 구현 할 수 있다는 장점이 있다. 여기서 ‘시스템적으로 구현한다’는 것은 ‘사람', 즉 '분석가’가 아닌 오로지 컴퓨터의 연산으로 자동화된 규칙을 만들어 낼 수 있다는 것을 의미한다.
그렇다면 안랩 머신러닝 시스템에서 머신러닝을 잘 수행하기 위해서는 무엇이 필요할까?
• 좋은 추출기: 파일의 정적 데이터를 잘 추출하기 위한 추출기가 필요하다. 안랩 머신러닝 시스템에서는 파일당 총 155개의 정적 정보를 빠르게 추출한다. 해당 정적 정보는 언제 어디서든 동일한 결과를 전달한다.
• 수많은 파일: 도입할 머신러닝 알고리즘은 수많은 파일을 학습할 줄 알아야 한다. 만일 2016년 1월 한달동안만 수집된 데이터로 학습한 결과가 2017년에도 잘 맞아 떨어질까를 고민해 보자. 어느 정도는 맞고, 어느 정도는 틀릴 수 있다. 한달 동안 수집된 데이터로 학습한 결과는, 그 기간 동안의 특별한 악성코드 트렌드에만 적용되는 규칙으로 구성되지만, 일반적인 몇몇 악성코드 분류 규칙도 어느 정도 규합하기도 한다. 그래서 그 이 외의 시기에 수집된 파일도 적당하게 분류할 수 있는 능력이 존재한다. 그러나 고작 한 달 동안의 샘플 처리된 학습 결과가 얼마만큼 정확하게 반영될 수 있을까. 지금 PC에 있는 수많은 파일은 2016년 1월에 만들어진 파일보다 그 전/후 시점에서 만들어진 정상 파일들로 대부분 구성되어 있다. 그래서 한 달 동안의 데이터로 학습된 모델을 그 한 달 동안 자료로 테스트하여 아무리 “좋아!”라고 하더라도, 규칙 적용 시의 대부분의 파일은 여태껏 학습해 보지 못한 시기의 정상 파일이 검사 대상으로 되는 것이 자명한데, 이는 자칫 ‘오진’의 발생 빈도를 높이게 하는 원인 중 하나가 된다.
다시 말해, 10만 권의 수학책을 공부한 학생과 1권의 수학책을 공부한 학생이 함께 수학 시험을 쳤고, 동일하게 성적이 90점이 나왔다고 하자. 그리고, 다시 1시간 뒤 또 다른 수학 시험을 치른다고 가정하자. 누가 성적이 좋게 나올지 예상할 수 있을까. 상식적으로는 10만 권의 수학책을 공부한 학생일 것으로 추측된다. 즉, 안랩의 머신러닝 시스템에 있어 ‘수많은 파일’이 필요한 이유가 바로 이 점이다. 만일 세상에 있는 모든 파일을 학습할 수 있다면, 악성 파일 진단율을 포함하여 오진율도 무척 낮을 것이 기대되기 때문이다. 이는 MDS 에이전트 의심 파일 수집 개선의 목표 중 하나인 과탐율을 최소화하는 해결 방안인 셈이다.
안랩 머신러닝 시스템에서는 임의의 기간 동안 샘플 처리된 데이터가 아닌, 학습 당시까지 자사에 수집된 모든 데이터를 전수 학습하는 것을 목표로 했고, 어디에도 없는 'PLANT'라는 머신러닝 운영 알고리즘을 개발하여 이를 해결했다. 즉, 현재 13.4억 개의 파일을 샘플링 없이 모두 전수 학습했으며, 이후에도 계속 학습할 수 있는 시스템으로 구축되어 있다.

[그림 4] 안랩 머신러닝 시스템 개요도
안랩 머신러닝 시스템의 확장성
지금까지 안랩 머신러닝 시스템의 의심 파일 수집 개선을 위한 조건 중 검사 시간 단축과 과탐율 최소화가 어떠한 논리를 통해서 구현되었는지를 소개했다. 이제는 안랩의 머신러닝 시스템이 확장 가능한 기능인지에 대해 알아보자.
최근의 주요 IT 업체들은 서로 자신들의 머신러닝 알고리즘을 오픈소스로 공개하기도 한다. 물론 머신러닝 특징상, 머신러닝 소스코드 공개는 공개하는 기업 입장에서는 큰 문제가 되지 않는다. 중요한 건, 머신러닝 알고리즘보다는 데이터의 수준이다. 구글이나 페이스북에서 소스는 공개할 수 있을지 몰라도 정작 중요한 그들이 소유한 빅데이터는 절대로 공개하지 않는다는 점을 주목하자.
과거 오픈 API 등으로 웹 플랫폼(Web Platform)을 구축하려는 시도와 유사하게 이제는 자신들의 머신러닝 플랫폼에 들어오라고 손짓하고 있는 셈이다. 이를 활용하면 손쉽게 머신러닝 시스템을 구축할 수 있지만, 문제는 기술적 의존성이 발생한다는 점이다. 아무리 스마트폰을 잘 만들어도 안드로이드(Android)라는 기술적 플랫폼에 의존성을 가지게 된다면 발전의 제약이 생기듯, 지속적인 확장 가능한 기능을 위해서는 이러한 플랫폼에 의존적이지 말아야 한다. 그래서 안랩 러닝머신 시스템은 직접 연구하고 구현한 알고리즘을 사용하여 향후 문제없이 기술을 확장할 수 있는 토대가 마련되어 있다. 안랩 머신러닝 시스템은 Windows/Linux 등 다양한 OS에서 동작할 수 있도록 구성되어 있다. 특히, 리눅스 기반의 여러 네트워크 장비에서 쉽게 응용할 수 있다. 그리고 파이썬(python)에서도 어렵지 않게 적용할 수 있어 악성코드 분석가도 쉽게 접근할 수 있고, 임의의 시스템에도 쉽게 이식할 수 있다.
안랩 머신러닝 시스템은 구글 텐서플로(tensorflow) 같이 범용적인 머신러닝 시스템이 아닌, 악성코드 분류를 위한 머신러닝을 목표로 했다. 그러나 내부 PLANT 알고리즘은 범용성을 띄고 있어 향후 범용적인 머신러닝 시스템으로 확장이 가능한 구조이다. 따라서 안랩은 MDS뿐만 아니라 자사 다양한 제품군에 머신러닝 시스템을 적용할 계획이다.
- AhnLabMDS개발팀 전진표 책임