CodeAlchemist: 효율적인 JavaScript code 생성을 통한 JavaScript engine의 취약점 찾기 |
---|
작성일2019-10-07 09:27:14 |
Web browser는 세계에서 가장 널리 사용되는 소프트웨어 중 하나이며, 그 대중성 때문에 많은 공격자가 공격 대상으로 삼고 있다. 특히, Web browser의 JavaScript engine에서 많은 취약점이 발견되고 이용되고 있어서 JavaScript engine의 취약점을 미리 발견하여 고치는 것이 매우 중요해지고 있다. 이에 우리 학과 차상길 교수의 소프트웨어 보안 연구실 연구팀은 기존의 JavaScript code 생성을 통해 JavaScript engine에서 자동으로 취약점을 찾는 기술을 개선, CodeAlchemist라는 툴을 개발하였다. 기존의 연구가 JavaScript code의 의미를 이해하지 못한 채 code를 생성하여 생성된 code 대부분이 error가 발생한다는 단점을 개선하여, CodeAlchemist는 유효한 JavaScript code를 좀 더 효율적으로 생성할 수 있었고 이를 통해 더 많은 취약점을 찾을 수 있었다.
[그림 1] JavaScript error의 종류 [그림 2] CodeAlchemist의 개요 [그림 1]은 JavaScript code에서 발생할 수 있는 error의 종류를 간략하게 보여주고 있다. 5개의 error 중, 선언되지 않은 변수를 사용하여 발생하는 Reference error와 변수의 type과 맞지 않은 사용을 했을 때 발생하는 Type error가 기존의 연구에서 80%가 넘는 비율을 차지하고 있다. 따라서 이 두 가지 error가 발생하지 않는 JavaScript code를 생성하는 것이 본 연구의 주목표였다. 이 목표를 달성하기 위해서 CodeAlchemist는 크게 세 가지 모듈로 나뉘어 있다는 것을 [그림 2]를 통해 알 수 있다. 첫 번째 모듈에서는 주어진 JavaScript code들을 statement level로 여러 개의 code 조각으로 나누고 있다. 두 번째 모듈에서 code 조각들을 분석해 어떤 변수를 필요로 하는지, code 조각 실행 이후에는 어떤 변수들이 사용 가능한지 분석한다. 마지막 모듈에서는 분석 결과와 현재 사용 가능한 변수들을 바탕으로 다음에 올 수 있는 code 조각들이 찾아서 이어 붙이는 방식으로 새로운 JavaScript code를 만든다. 그 후, JavaScript engine을 실행하여 생성된 JavaScript code가 버그를 유발하는지 확인한다. 결과적으로 CodeAlchemist는 Chrome, Safari, FireFox, Edge에서 총 19개의 취약점을 찾았다. 이러한 성과를 인정받아 본 연구는 ”CodeAlchemist: Semantics-Aware Code Generation to Find Vulnerabilties in JavaScript Engines”라는 제목으로 NDSS 2019에 기재되었으며 자세한 내용은 논문 링크(https://daramg.gift/paper/han-ndss2019.pdf)를 통해 확인할 수 있다. |