Fuzzing is a method of testing software by randomly generating input. Since fuzzing technique inception, various types of fuzzing have been studied. Among them, mutational fuzzing is an efficient method that finds a lot of bugs even though it uses a simple approach such as probabilistic bit-flip or special character substitution. However, the interpreter fuzzing has difficulty in applying general mutation techniques because the interpreter requires grammar and semantic correctness input values. In this paper, we present a mutational fuzzing on interpreter with dynamic data flow analysis. In this study, we suggest JMFuzzer that can generate various types of mutated test cases that operate normally without error in JavaScript interpreter considering syntax and semantics. Finally, we found unknown vulnerabilities of the latest JavaScript interpreter and reported them to the vendors.
퍼징은 입력값을 무작위로 생성해 소프트웨어를 테스팅하는 방법으로, 처음 고안된 이래로 다양한 방식의 퍼징이 연구되고 있다. 그중 변이 기법을 적용한 퍼징은 확률에 따른 비트 반전이나 특별 값 치환과 같이 비교적 간단한 접근법을 사용함에도, 많은 버그를 발견해온 만큼 효율적인 방법이라고 할 수 있다. 하지만 인터프리터는 문법, 시맨틱이 올바른 입력값을 요구하기 때문에 일반적인 변이 기법을 적용하기에는 어려움 이 있다. 이에 본 연구에서는 동적 데이터 흐름 분석을 통해 변이 기법을 인터프리터 퍼징에 적용할 수 있는 방법에 대해 제시하고자 한다. 본 연구에서 제시하는 JMFuzzer는 문법, 시맨틱의 올바름을 고려해 자바 스크립트 인터프리터에서 오류 없이 정상적으로 동작하는 다양한 유형의 테스트케이스를 생성할 수 있다. 최종적으로 본 연구에서는 최신 버전의 자바스크립트 인터프리터에서 알려지지 않은 취약점들을 찾았으며, 이를 각 회사에 제보했다.