The early discovery of security bugs in JavaScript (JS) engines is crucial for protecting Internet users from adversaries abusing zero-day vulnerabilities. Browser vendors, bug bounty hunters, and security researchers have been eager to find such security bugs by leveraging state-of-the-art fuzzers as well as their domain expertise. They report a bug when observing a crash after executing their JS test since a crash is an early indicator of a potential bug. However, it is difficult to identify whether such a crash indeed invokes security bugs in JS engines. Thus, unskilled bug reporters are unable to assess the security severity of their new bugs with JS engine crashes. Today, this classification of a reported security bug is completely manual, depending on the verdicts from JS engine vendors. We investigated the feasibility of applying various machine learning classifiers to determine whether an observed crash triggers a security bug. We designed and implemented CRScope, which classifies security and non-security bugs from given crash-dump files. Our experimental results on 766 crash instances demonstrate that CRScope achieved 0.85, 0.89, and 0.93 Area Under Curve (AUC) for Chakra, V8, and SpiderMonkey crashes, respectively. This outperforms the previous study and existing tools including Exploitable and AddressSanitizer.
자바스크립트 (JS) 엔진의 보안 취약점은 웹 브라우저 보안에 심각한 위협을 일으킬 수 있기 때문에 각 브라우저 벤더사나 보안 전문가들은 최신 퍼징 기술이나 전문 지식을 이용해 이러한 보안 취약점을 찾고자 노력하고 있다. 이들은 대개 JS 코드를 실행하여 크래쉬가 발생하면, 이 버그가 보안 취약점인지 아닌지 구분하여 제보하는데, 이를 통해 개발자들이 보안 취약점을 우선적으로 패치할 수 있도록 도와준다. 하지만 이를 구분하기 위해서는 해당 엔진에 대한 전반적인 이해가 필요하므로, 관련 지식이 없는 제보자의 경우 이를 판단하기가 쉽지 않고, 개발자들도 제보된 버그가 올바르게 구분되었는지 확인하기 위해 일일이 분석해보아야 한다는 문제가 있다. 이에 본 논문에서는 개발자들이 분류해 놓은 버그 정보를 기계 학습 분류 모델에 학습 시켜, 주어진 크래쉬가 보안 취약점인지 아닌지를 자동으로 구분해주는 CRScope 를 소개한다. 총 766 개의 크래쉬를 가지고 CRScope 를 평가한 결과, Chakra, V8, SpiderMonkey 에서 각각 0.85, 0.89, 0.93 의 Area Under Curve (AUC) 를 얻어 이전 연구들보다 더 나은 결과를 보여주었다.