There are many potential vulnerabilities in developed programs. Recently, as various programs are developed, the types of vulnerabilities are diversified and the number is also increasing. For this reason, program vulnerabilities analysis techniques are addressed such as dynamic analysis and static analysis. It is difficult to use dynamic analysis because an environment must be set up to execute the target program. In contrast, using static analysis is easy because we only need a program code. However, if we analyze all program flow in static analysis, we need the same cost to analysis as dynamic analysis because we have to execute all instructions like dynamic analysis. For this reason, abstract interpretation is proposed to do static analysis in a limited time. Based on abstract interpretation, value set analysis is studied to infer values that variables can have and to recover them. The primary purpose of this study is to recover variables of a program using value set analysis for vulnerability analysis, address improve memory inference method of value set analysis on IR code, and support all architecture. Additionally, we describe many problems when we developed value set analysis on IR code and how to solve them. We also evaluate the performance of the implemented IR-based value set analysis by comparing it with a state of the art binary analysis tool.
과거부터 현재까지 개발된 프로그램들에는 여러 취약점이 잠재적으로 존재하고 있으며, 최근에는 등장하는 프로그램이 다양해짐에 따라서 취약점의 종류 또한 역시 다향해지며 수 또한 증가하고 있다. 이러한 프로그램들의 취약점을 분석하기 위한 기술들이 등장하였으며 직접 프로그램을 실행하면서 취약점을 체크하는 동적 분석과 프로그램을 실행하지 않고 분석하는 적정 분석으로 나뉘어진다. 동적 분석은 프로그램을 실행할 수 있는 환경을 갖춰야하는 번거로움이 존재하지만, 반면에 정적 분석은 프로그램의 코드만 존재하면 코드의 흐름을 가지고 분석하는 방법이기 때문에 큰 자원이 들지 않는다. 하지만 실제 흐름을 전부 따라가게 되면 이는 동적 분석과 똑같은 비용이 들기 때문에 제한된 시간안에 정적 분석을 하기위하여 추론 해석이 등장하게 된다. 값 집합 분석은 추론 해석 방법을 기반으로 하여 변수들이 가질 수 있는 값을 추론하고 변수들을 복구하고자 하는 방법이다. 이 연구에서는 취약점 분석을 위해 값 집합 분석을 이용하여 프로그램의 변수를 복구하려고하며, 값 집합 분석 방법을 중간 표현 코드 위에 구현하여 보다 정확하게 메모리 값을 추론하며, 보다 다양한 언어를 지원하고자 한다. 또한, 값 집한 분석 방법을 구현하면서 생기는 여러가지 문제들에 대해 제시하며 어떻게 해결하였는지를 이야기하고자한다. 마지막으로 잘 알려진 프로그램과 비교를 하여 구현된 중간 표현 기반 값 집합 분석의 성능을 평가한다.