마이크로소프트 연구소(MSR)은 Bing 웹 브라우저를 운용하고 있기 때문에 사용자의 브라우징 편의와 관련된 기술을 상당히 많이 연구하고 있다. 


그들은 2009년 Nozzle이라는 프로젝트를 Usenix에서 발표하였고, 이후 2011년 Zozzle, 2012년에는 Rozzle 이라는 논문을 발표하였다.


이러한 연구의 기본적인 motivation은 아래의 사진을 보면 이해할 수 있다. 브라우저를 통해 특정 사이트에 접속하려고 할 때 브라우저가 경고창을 띄워주는 화면이다. 해당 링크가 악성 소프트웨어 다운로드를 수행하는 것으로 의심되기 때문에 접근을 차단했다는 안내문이다. 만약 기어코 접속하겠다면 본 사항을 충분히 숙지한 후 이동하라는 것이다.

과연 이러한 기술은 어떻게 구현한 것일까? 브라우저는 무엇을 근거로 이러한 판단을 내릴 수 있었을까? 이것이 바로 Nozzle, Zozzle의 덕택이다.


우선 Nozzle(2009)는 가상실험환경(honey-monkey)에서 runtime시에 코드삽입을 통한 힙 스프레이 공격을 탐지하는데 주안점을 두고 있다. 그러나 기본적으로 상당히 오버헤드가 커서 사용자의 browser에 바로 적용시킬 수는 없었다.

이후 Zozzle(2011)은 약간 방향을 변경하여, runtime이 아닌 static(소스코드 정적분석만으로) Malware의 동작을 Detection 하는 것을 목표로 하였고, 덕분에 오버헤드를 꽤나 감소할 수 있었으며 브라우저에 직접 탑재도 가능하게 되었다. 이는 사용자의 웹서핑시에 거의 즉각적으로 반응할 수 있게 된 것이다. 물론 가장 중요한 것은 정확도가 높아야한다는 것이다. 이러한 부분들을 구현하는 것이 핵심인데 우선, 본 포스팅에서는 일단 Zozzle에 초점을 맞추어보자.


본 논문은 2010년 11월에 먼저 Microsoft Research 명의의 보고서 형식으로 발표된 적이 있다. 거의 같은 내용을 2011년 20th Usenix Security Symposium에서 발표한 것이므로 원래의 MSR 보고서 내용을 참조하는 것도 좋다.

참고 : Zozzle: Low-overhead Mostly Static JavaScript Malware Detection(2010)



논문 내용을 살펴보자. 수많은 종류의 악성코드 데이터셋을 가지고 있는 마이크로소프트는 이것을 잘 활용할 수 있을 것이다. 그것들을 면밀히 조사해보면 일종의 공통점이라 할 수 있는 시그니처를 얻을수 있을지도 모른다. 통계학이나 머신러닝을 하는 사람들은 이것을 조금 더 쉽게 이해할 것이다. 이들은 Naïve Bayes Classification을 적용하였다.

Zozzle을 한눈에 이해할 수 있도록 아주 잘 설명한 것이 위의 그림이다. 머신러닝은 사실 좋은 데이터를 얼마나 많이 가지고 있느냐의 싸움이다. 정상인 웹페이지를 구하기 위해서 유명 인터넷 사이트를 크롤링해왔고, 악성 웹은 그들의 기존 Nozzle 프로젝트를 통해 샘플을 획득했다고 한다. 이렇게 얻어진 양질의 Training Data를 통해 Labeling 처리를 하고, Feature Extraction & Selection 을 수행하였다. Feature 구성은 Javascript 문법에 따른 AST(Abstract Syntax Tree)를 통해 특정한 요소들이 존재하는지 유무를 계산하였다. 이후 베이지언 분류기를 통해 임의의 자바스크립트 파일에 대해 그것이 악성(Malicious)인지 정상(Benign)인지 구분할 수 있도록 하였다. 

아래 그림을 보면 우선 기본적으로 Throughput과 Accuracy 사이에 Trade-off 관계가 성립하는 것을 볼 수 있다. 이들은 적절한 타협점을 300 으로 정했다고 한다. 

이 결과물에 대한 Evaluation을 보자.

악성샘플 120만개에 대하여 실험했을 때, 상업용으로 널리 이용되는 백신 프로그램 5종류와 Zozzle을 비교해보았다. 왼쪽 그래프는 오탐(False Positive)횟수이고, 오른쪽 그래프는 미탐(False Negative)인 경우이다. 다른 AV엔진에 비해 오탐은 무난한 정도이고, 미탐률은 굉장히 적다. 즉, 다른 백신이 찾지못하는 새로운 종류의 멀웨어를 찾는데 능숙하다는 이야기다. 


그러나 Zozzle에도 여러 한계점이 있으며 Further works를 토의해보아야 한다. 기본적으로, 머신러닝 기반의 탐지를 회피해가는 아주 쉬운 방법이 있다.(아래 기사 참조) 만약 악성코드 제작자가 이러한 Zozzle의 작동원리를 파악하고, Zozzle의 판단 기준이 되는 Feature들을 염두하여 교묘하게 우회하는 방법이 충분히 가능하다. 때문에 난독화를 해제하는 기술(De-obfuscation)이 같이 고려되어야 할 것이다.


마지막으로, 본 내용들은 Mircrosoft Internet Exploe에 기반하였으며 특히 각 IE 6, 7 등의 버전에 따라 접근법이 상이하다. 만약 사용자가 Firefox 등의 다른 브라우져를 사용한다면? 적용할수가 없다! 그래서 이러한 단점을 개선한 다음 논문이 Rozzle이라고 한다. 이 부분은 아직 더 살펴봐야 알것같다.


참고 :

CPUU님의 창작활동을 응원하고 싶으세요?