본 논문은 "Static analysis of JavaScript programs : challenges and research trends = 자바스크립트 프로그램의 정적 분석 : 난제와 연구경향 분석"이라는 제목의 한국과학기술원(KAIST) 전산학부 선광원(Sun, Kwangwon)님의 석사학위 Thesis 이다. 악성 자바스크립트 관련하여 해외 탑 컨퍼런스 논문도 많지만, 너무 방대해서 다 소화하기가 어려운 시점에서 우연히 학교 도서관을 검색하다가 본교 졸업생분의 논문을 발견하게 된 것이 참 다행이다. 감사의 말씀을 전하고 싶었으나 2017년초 졸업하신 것으로 추정된다.


자바스크립트는 1995년 이후부터 client-side 웹 프로그램의 사실상의 표준으로 현재까지도 각광받고 있으며, 최근에는 웹 뿐만 아니라 컴파일러나 운영체제와 소통하는 인터프리터 언어 형식으로도 활용되고 있다. 자바스크립트는 동적타입형 객체지향 언어이다. 특히, run-time에 코드를 생성하여 eval() 으로 실행하거나 with를 사용해 scope를 동적으로 조작하는 부분이 상당히 흥미롭다. 이러한 특징은 종종 보안 취약성을 유발하여 공격자의 먹잇감이 되기도 한다. 그리하여 보안연구자들은 자바스크립트를 포함한 웹 환경에 상당한 관심을 가질수밖에 없다. 


본 논문은 지난 10년동안의 JavaScript와 관련된 연구논문 150편을 수집하였고, 특히 client-side에 초점을 맞추어 분석하였다. 해당 분야에는 크게 6가지정도의 트렌드가 있다.

  • 형식화 및 추론(Formalization and Reasoning)
  • 타입 안전성 및 JIT 최적화(Type Safety and JIT Optimization)
  • 웹 애플리케이션 보안(Security for Web Applications)
  • 정적 분석(Static Program Analysis)
  • 동적 분석(Dynamic Program Analysis)
  • 실험적 연구(Empirical Studies)

이어서 위의 접근법 중 Static Analysis에 집중하여 상세한 분석이 이어진다. 자바스크립트의 정적분석에서는 아래와 같은 내용들을 중점적으로 다룬다.

  • 분석 범위의 확장(Extension of Analysis Scope)
  • 정확도(Towards Better Precision)
  • 확장성(Scalability)
  • 적용성(Usability - Analysis Frameworks)
  • 응용의 확장(Usage - Applications)

특히 Usability를 위해서는 다양한 분석 프레임웍이 개발되기 마련인데, 본 논문에서는 아래와 같은 주요 프레임웍을 비교분석하였다.


자바스크립트 정적분석에 있어서 난제 및 향후 주안점은 무엇일까? 

기본적으로 자바스크립트 관련 개발기술들의 라이프사이클이 상당히 급진적이라는 점이 있다. 나는 군복무할 때 부대 홈페이지 개발했던 2012~2013년을 끝으로 웹 프로그래밍에서 손을 완전히 놓아버렸다. 그때만해도 여전히 Flash 기술이 난무하고 있었으며 대략 AJAX, jQuery 등등이 뭔가 새로운 느낌이 있었다. 그런데 요새는 그것들도 한물갔다고 한다;; 자세히는 모르겠지만 Angular, React, ECMAScript 등의 단어들이 많이 눈에 띄는데 사실 난 잘 모르겠다. 자세한건 아래 블로그의 글이 도움이 조금 되었다.

다시 논문으로 돌아와서, 자바스크립트 정적 분석을 어렵게하는 다른 요인들은 실행시간 중에 돌발적으로 발생하는 Events들과, 은밀히 첨부된 iframe 등이다. 또한 Library 호출과 관련된 부분은 실제 소스코드를 작동시켜보지 않고 수행하는 정적분석에서는 해결하기가 상당히 힘들다. 실제로 SAFE나 TAJS, WALA 등 역시 이러한 부분들을 완벽하게 처리하지 못한다는 한계점이 있다. 


결국 자바스크립트 정적분석을 '잘 한다'라고 말할수 있으려면, 그 평가기준은 정확성에 있을 것이다. 기본적으로 False Negative, False Positive 등에 대한 개념을 숙지하고 있다면 Precision과 Recall에 대해 알 것이다. 또한, 성능 차원과 확장성까지 고려하는 것이 중요하다.


최근에는 비교적 새로운 기법들이 주목받고 있는데, Adaptive Analysis 등이 그러하다. 또한 컴퓨터공학 분야에서 떠오르고 있는 다른 분야의 기술들을 접목시키는 것도 유용할 수 있다. 컴파일러/프로그래밍 언어론적 지식을 따라 프로그램의 Abstract Syntax Tree를 파악하고 관련된 아티팩트를 머신러닝으로 학습시키는 것도 좋은 시도가 될 수 있을 것 같다.

출처 : http://blog.mrtz.org/2015/12/14/adaptive-data-analysis.html
출처 : http://blog.mrtz.org/2015/12/14/adaptive-data-analysis.html


결론부분 :

본 논문은 지난 10여년간의 JavaScript 관련 연구를 집대성하였다. 

아직까지 쉽게 풀리지 않는 난제가 있다면 첫째, 언어적 특성 대부분이 분석되긴했지만 여전히 완벽히 꼬여있는 부분이 남아있고 게다가 새로운 개발기법들이 계속해서 쏟아져 나오기 때문에 따라잡기가 쉽지 않다는 점. 그리고 두번째로, 현재의 정적 분석은 복잡하고 큰 대상 프로그램에 대해 정밀하고 확장 가능한 분석을 수행하기가 여전히 어렵다는 점이다. 현시점에서 예술의 경지에 올라있다고 평가받는 다양한 분석도구들 역시 충분히 설득력있을만한 수준의 Precision(정밀도)를 보장해주지는 못한다. 


이러한 한계를 잘 기억하면서, 본 논문에서 제시하는 다양한 견해를 통해 향후 자바스크립트 분석과 관련한 연구를 수행해나가야 할 것이다.


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