여러 가지 역공학 방지기술들 중 하나인 안티 디버깅 기술은 특정 프로그램을 대상으로 공격자나 분석가가 디버거를 사용하여 분석을 하지 못하도록 하기 위한 기술로써, 예전부터 악성코드 및 분석을 방지하고자 하는 여러 가지 프로그램들에 적용이 되었으며 현재까지도 많이 사용이 되고 있는 기술이다. 본 논문에서는 이러한 안티 디버깅루틴에 대한 자동화 탐지 방법을 제안한다. 탐지는, 디버거 및 시뮬레이터를 통해 실행 명령어 및 API(Application Program Interface)에 대한 트레이스 정보들을 추출하고, 추출된 정보들을 비교하여 안티 디버깅 루틴으로 의심이 가는 지점을 찾는 방식으로 진행된다. 실험 결과, 알려진 25가지의 안티 디버깅 기법들 중 21가지에 대하여 정상적으로 탐지가 이루어졌다. 이와 같이, 본 기법은 특정 안티 디버깅 기술에 의존적이지 않으며, 추후 개발 및 발견되는 안티 디버깅 기술들에 대한 탐지의 경우에도 적용이 가능할 것으로 예상된다.
여러 가지 역공학 방지기술들 중 하나인 안티 디버깅 기술은 특정 프로그램을 대상으로 공격자나 분석가가 디버거를 사용하여 분석을 하지 못하도록 하기 위한 기술로써, 예전부터 악성코드 및 분석을 방지하고자 하는 여러 가지 프로그램들에 적용이 되었으며 현재까지도 많이 사용이 되고 있는 기술이다. 본 논문에서는 이러한 안티 디버깅 루틴에 대한 자동화 탐지 방법을 제안한다. 탐지는, 디버거 및 시뮬레이터를 통해 실행 명령어 및 API(Application Program Interface)에 대한 트레이스 정보들을 추출하고, 추출된 정보들을 비교하여 안티 디버깅 루틴으로 의심이 가는 지점을 찾는 방식으로 진행된다. 실험 결과, 알려진 25가지의 안티 디버깅 기법들 중 21가지에 대하여 정상적으로 탐지가 이루어졌다. 이와 같이, 본 기법은 특정 안티 디버깅 기술에 의존적이지 않으며, 추후 개발 및 발견되는 안티 디버깅 기술들에 대한 탐지의 경우에도 적용이 가능할 것으로 예상된다.
Anti-debugging is one of the techniques implemented within the computer code to hinder attempts at reverse engineering so that attackers or analyzers will not be able to use debuggers to analyze the program. The technique has been applied to various programs and is still commonly used in order to pr...
Anti-debugging is one of the techniques implemented within the computer code to hinder attempts at reverse engineering so that attackers or analyzers will not be able to use debuggers to analyze the program. The technique has been applied to various programs and is still commonly used in order to prevent malware or malicious code attacks or to protect the programs from being analyzed. In this paper, we will suggest an automatic detection scheme for anti-debugging routines. With respect to the automatic detection, debuggers and a simulator were used by which trace information on the Application Program Interface(API) as well as executive instructions were extracted. Subsequently, the extracted instructions were examined and compared so as to detect points automatically where suspicious activity was captured as anti-debugging routines. Based on experiments to detect anti-debugging routines using such methods, 21 out of 25 anti-debugging techniques introduced in this paper appear to be able to detect anti-debugging routines properly. The technique in the paper is therefore not dependent upon a certain anti-debugging method. As such, the detection technique is expected to also be available for anti-debugging techniques that will be developed or discovered in the future.
Anti-debugging is one of the techniques implemented within the computer code to hinder attempts at reverse engineering so that attackers or analyzers will not be able to use debuggers to analyze the program. The technique has been applied to various programs and is still commonly used in order to prevent malware or malicious code attacks or to protect the programs from being analyzed. In this paper, we will suggest an automatic detection scheme for anti-debugging routines. With respect to the automatic detection, debuggers and a simulator were used by which trace information on the Application Program Interface(API) as well as executive instructions were extracted. Subsequently, the extracted instructions were examined and compared so as to detect points automatically where suspicious activity was captured as anti-debugging routines. Based on experiments to detect anti-debugging routines using such methods, 21 out of 25 anti-debugging techniques introduced in this paper appear to be able to detect anti-debugging routines properly. The technique in the paper is therefore not dependent upon a certain anti-debugging method. As such, the detection technique is expected to also be available for anti-debugging techniques that will be developed or discovered in the future.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
다음으로는 본 논문에서 접근을 하고자 하는 방식 중일부가 유사하게 사용되면서 이를 통해 악성코드의 이중 적인 행위(Split Personality)를 탐지해내는 방식에 대하여 설명한 Davide Balzarotti 등의 연구를 보면[8], 해당 논문에서는 악성코드를 대상으로 하여 분석하고자 하는 악성코드의 이중적인 행위에 따라 서로 다르게 실행되는 시스템 콜 목록 및 인자 값들의 특성을 이용하여 단순하게 악성코드의 이중적인 행위만을 탐지해내는 것을 목적으로 한다. 분석 과정을 살펴보면, 먼저 서로 다른 분석 환경에서 동일한 악성코드에 대한 시스템 콜 트레이스들을 각각 추출한다.
본 논문에서는 안티 디버깅 기술이 적용된 악성코드를 대상으로, 정상적인 흐름일 경우와 디버거의 탐지가 이루어질 경우에 대한 흐름 비교를 위하여 각각의 경우에 따른 명령어 및 API 트레이스 결과를 추출하고, 이를 토대로 실행 흐름의 비교 분석을 실시하여, 디버거의 탐지를 통해 분기가 발생되는 지점을 자동으로 탐지해내는 방안에 대하여 기술을 하였다.
안티 리버싱 기술 중 하나인 안티 디버깅은 말 그대로 공격자나 분석가가 디버거를 통하여 인증과 관련된 프로그램이나 악성코드 혹은 기타 중요한 프로그램들의 내부 알고리즘과 중요 데이터들에 대한 분석을 하지 못하도록 하는데 목적을 가지는 기술이다.
이에 본 논문에서는 안티 디버깅 기술이 적용된 악성코드를 대상으로 해당 안티 디버깅 기술의 적용 유무 및 루틴에 대한 자동화 탐지 기법에 대해 설명을 한다.
가설 설정
본 논문은 80x86 컴퓨터 구조를 가정하고 있다. 80x86구조에서 바이너리 코드를 분석하는데 사용되는 도구들에는 Pin[2], OllyDbg[3], IDA Pro[4], Immunity Debugger, WinDbg 등이 있으며, 이 중 본 논문에서 실험 및 분석에 사용한 툴들은 Pin, OllyDbg, IDA Pro 이다.
제안 방법
분석 과정을 살펴보면, 먼저 서로 다른 분석 환경에서 동일한 악성코드에 대한 시스템 콜 트레이스들을 각각 추출한다. 그 다음 추출된 시스템 콜 목록 및 인자 값들에 대한 비교를 통해 서로 다른 시스템 콜이 사용되는 것을 파악하고 이를 통하여 해당 악성코드에 대한 이중적인 행위를 탐지해낸다.
그 다음, 안티 디버깅 기술을 통하여 서로 다른 분기가 이루어지기 시작하는 지점의 명령어 및 주소에 대한 정보를 얻기 위하여 추출된 트레이스 정보들 중 먼저 실행 명령어에 대한 트레이스 정보만을 비교하여 서로 다른 명령어의 주소로 이동되는 지점을 찾아낸다.
그래서 이러한 패턴 매칭을 이용한 탐지 방식과는 다르게 본 논문에서는 Hardware instruction set에 해당되는 실행 명령어 및 System call API에 대한 트레이스 결과를 추출하고 이를 토대로 하여 명령어의 흐름 비교 작업을 통해서 서로 다른 분기가 발생되는 지점을 찾아낸다. 그다음 해당 지점으로부터의 API 트레이스 결과에 대한 분기 발생 여부에 대한 확인 절차를 통하여 명확한 안티 디버깅 탐지를 수행한다.
그래서 이러한 패턴 매칭을 이용한 탐지 방식과는 다르게 본 논문에서는 Hardware instruction set에 해당되는 실행 명령어 및 System call API에 대한 트레이스 결과를 추출하고 이를 토대로 하여 명령어의 흐름 비교 작업을 통해서 서로 다른 분기가 발생되는 지점을 찾아낸다. 그다음 해당 지점으로부터의 API 트레이스 결과에 대한 분기 발생 여부에 대한 확인 절차를 통하여 명확한 안티 디버깅 탐지를 수행한다.
그리고 분석 대상 파일에 그 외의 안티 디버깅 기술이 더 적용되어 있을 수도 있으므로, 추가적으로 적용된 안티 디버깅 기술에 대한 탐지를 위하여, 이전에 발견된 서로 다른 분기를 발생시킨 조건부 명령어 부분을 무조건적인 이동을 발생시키는 “JMP” 명령어를 사용하여 명령어의 실행 흐름이 정상 실행일 경우와 같아지도록 변경시킨다.
하지만 본 논문에서는 실행 명령어에 대한 트레이스를 비교하는 과정을 메인 탐지 기술로 사용을 하며, 이를 통해서 서로 다른 실행 흐름이 발생되기 시작하는 지점을 파악할 수 있다. 그리고 앞서 파악된 서로 다른 분기가 이루어지는 지점에서의 실행 흐름이 정상 실행일 경우의 흐름과 동일해지도록 강제 바이트 패치를 수행한 뒤, 추가적으로 서로 다른 실행 흐름이 발생되는 지점을 찾아낼 수 있도록 한다. 그러므로 본 논문에서 설명하고자 하는 탐지 방식은 위의 논문에서의 탐지 방식과는 다르다고 할 수 있다.
그리고 추가적으로 적용되어 있을 지도 모르는 안티 디버깅 기술을 탐지하기 위하여 Pin Tool의 실행 명령어 정보들 중 탐지 지점 바로 다음의 실행 명령어에 대한 주소 정보를 참고하여 디버거 에서의 실행 흐름이 이와 강제적으로 같아지도록 “JMP”명령어를 사용하여 바이트 패치를 실시하게 된다.
본 논문에서는 80x86환경에 초점을 맞추며, 안티 디버깅 기법들을 [5]의 방식에 따라 크게 6가지의 기술로 분류를 실시하고, 각각에 해당되는 세부 기술들을 일부 나열해보면 표 1과 같다.
본 절에서는, 표 1의 안티 디버깅 기법들 중 Hardware and Register Based Detection 기법과 Modified Code Detections 기법이 적용된 실제 악성코드 샘플들은 구하지 못하여 실험을 실시하지 못하였고, 이를 제외한 나머지 안티 디버깅 기법들이 적용된 악성코드 샘플들을 대상으로 본 논문에서 제안하는 기법에 따라 탐지 실험을 실시하였다.
안티 디버깅에는 수많은 기술들이 존재하고 있는데, 그 중 대표적인 안티 디버깅 기술[5]들에 대하여 각각의 기술 별 안티 디버깅 샘플들을 수집하고, 이를 통해 수집된 총 25개의 샘플들을 대상으로 본 논문에서 제안하고자 하는 방법을 사용하여 안티 디버깅 탐지 실험을 실시 하였다. 이에 대한 탐지 결과를 보면 아래의 표 1과 같다.
다음으로, JaeKeun Lee 등의 연구를 보면[7], 룰 기반의 패턴 매칭 방식을 이용한 안티 디버깅 탐지 및 회피 기법에 대해서 다루고 있다. 탐지 방식을 살펴보면, 먼저 탐지 대상 바이너리 파일을 디스어셈블 시킨 뒤, 디스어셈블된 명령어들을 한 줄씩 검사해 나가면서 기존에 구성되어있는 안티 디버깅 탐지 시그니처들로 이루어진 룰들과 일치하는 부분이 있는지를 탐색한다. 그리고 만약 일치하는 명령어가 탐지될 경우 offset 정보와 함께 따로 로그를 남기게 된다.
대상 데이터
본 논문은 80x86 컴퓨터 구조를 가정하고 있다. 80x86구조에서 바이너리 코드를 분석하는데 사용되는 도구들에는 Pin[2], OllyDbg[3], IDA Pro[4], Immunity Debugger, WinDbg 등이 있으며, 이 중 본 논문에서 실험 및 분석에 사용한 툴들은 Pin, OllyDbg, IDA Pro 이다.
성능/효과
그 결과, 위의 표 2와 같이 총 43개의 악성코드 샘플들중 API Based Anti-debugging 기법에 해당되는 1개의 악성코드 샘플을 제외한 나머지 42개의 악성코드 샘플들에 대해서는 정상적으로 탐지가 이루어졌다.
그리고 이러한 제안 방식을 사용하여 탐지 실험을 실시한 결과, 알려진 25개의 안티 디버깅 기술들 중 21개의 기술들에 대해서는 정상적으로 탐지가 이루어졌으며, 안티 디버깅 기술이 적용된 43개의 실제 악성코드 샘플들을 대상으로 한 탐지 실험에서는 42개의 악성코드 샘플들에 대하여 정상적으로 탐지가 이루어졌다.
안티 디버깅 기술 별 탐지 실험을 실시해 본 결과, 위와 같이 크게 6가지로 분류된 안티 디버깅 기법들 중 Timing Based Detections 기법과 Exception Based Detections 기법을 제외한 나머지 4가지 기법들에 해당되는 총 17개의 안티 디버깅 세부 기술들에 대해서는 모두 정상적으로 탐지가 이루어졌다.
이와 같은 결과를 통해서 본 논문에서의 False Negative Rate와 True Positive Rate를 구해보면, 우선 False Negative는 안티 디버깅 기술이 적용되어 있는 악성코드들을 대상으로, 안티 디버깅 기술이 적용되어 있지 않다고 판단된 케이스가 발견되는 경우를 의미하며, 이러한 False Negative의 비율을 의미하는 FNR(False Negative Rate)은 0.023이다.
후속연구
이러한 연구 결과를 바탕으로 조금만 더 세부적인 부분까지 고려를 하여 보완을 해낸다면, 향후 디버거를 탐지해내는 여러 가지 새로운 안티 디버깅 기법들에 대해서도 활용이 가능할 것으로 예상이 된다.
질의응답
핵심어
질문
논문에서 추출한 답변
악성코드가 사용하는 분석 방해 기술로 무엇이 있는가?
그 밖에 이러한 역공학 기술은 악성코드의 분석에도 사용이 되는데, 대다수의 악성코드들은 자신을 역공학을 통한 분석으로부터 보호하기 위해서 안티 디버깅, 실행 압축, 코드 가상화 등의 기술들을 사용한다.
안티 디버깅 기술이란 무엇인가?
여러 가지 역공학 방지기술들 중 하나인 안티 디버깅 기술은 특정 프로그램을 대상으로 공격자나 분석가가 디버거를 사용하여 분석을 하지 못하도록 하기 위한 기술로써, 예전부터 악성코드 및 분석을 방지하고자 하는 여러 가지 프로그램들에 적용이 되었으며 현재까지도 많이 사용이 되고 있는 기술이다. 본 논문에서는 이러한 안티 디버깅 루틴에 대한 자동화 탐지 방법을 제안한다.
리버스 엔지니어링은 어디에서 사용되고 있는가?
리버스 엔지니어링(reverse engineering)이라고 불리는 역공학 기술은 소프트웨어 공학의 한 분야로써, 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어내는 기술을 말하며, 이 기술은 시스템을 이해하여 적절히 변경하는 소프트웨어 유지보수 과정의 일부로 사용되고 있다.
참고문헌 (8)
Xu Chen, Jon Andersen, Z. Morley Mao, Michael Bailey. Towards an Understanding of Anti-virtualization and Anti-debugging Behavior in Modern Malware. Dependable Systems and Networks With FTCS and DCC (DSN 2008), pp 177-186, 2008.
Pin tool. http://www.pintool.org/
OllyDbg. http://www.ollydbg.de/
IDA Pro. https://www.hex-rays.com/products/ida/index.shtml
Peidai Xie, Xicheng Lu, Yongjun Wang, Jinshu Su, and Meijian Li. An Automatic Approach to Detect Anti-debugging in Malware Analysis. International Standard Conference on Trustworthy Computing and Services (ISCTCS 2012), Volume 320, pp 436-442, 2013.
JaeKeun Lee, BooJoong Kang, Eul Gyu Im. Rule-based Anti-anti-debugging System. Proceedings of the 2013 Research in Adaptive and Convergent Systems (RACS 2013), pp 353-354, 2013.
Davide Balzarotti, Marco Cova, Christoph Karlberger, Christopher Kruegel, Engin Kirda, and Giovanni Vigna. Efficient Detection of Split Personalities in Malware. Annual Network and Distributed System Security Symposium (NDSS 2010), 2010.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.