04.07.2014 Views

시간 기반 키 생성 방식을 이용한 안티 디버깅 기법 - SERSC

시간 기반 키 생성 방식을 이용한 안티 디버깅 기법 - SERSC

시간 기반 키 생성 방식을 이용한 안티 디버깅 기법 - SERSC

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

보안공학연구논문지 (Journal of Security Engineering), 제 10권 제 3호 2013년 6월<br />

로 인한 오류가 발생한다. 그리고 시간 기반 키 생성 방식을 기존 변조 방지 코드 암호화 기법 [5]<br />

이나 명령어 자가 변조 기법[9]에 적용하여 개선하였다.<br />

본 논문의 구성은 다음과 같다. 2장에서는 배경 지식과 관련 연구들을 설명하고, 3장에서는 프<br />

로세스 실행 중에 실행 시간과 실행 코드의 특정 영역을 이용하여 키 생성하는 방법과 적용 기법<br />

을 기술한다. 그리고 기존 기법들을 개선하는 방식을 소개한다. 4장에서는 개선된 기법을 보안 분<br />

석 하고 마지막 5장은 결론을 설명한다.<br />

2. 배경지식 및 관련연구<br />

2.1 안티 디버깅 기술<br />

이 장에서는 API기반 탐지, 예외처리 기반 탐지, 시간 기반 탐지에 따른 안티 디버깅 기술[1][6]<br />

을 소개한다.<br />

2.1.1 API(Application Program Interface) 기반 탐지<br />

마이크로소프트사가 제공하는 WIN 32 라이브러리 함수 호출을 이용하여 시스템 정보를 검사하<br />

여 디버거의 존재를 확인하고 대응한다.<br />

[표 1] 안티 디버깅 기법<br />

[Table 1] Anti-debugging techniques<br />

안티 디버깅 기법<br />

IsDebuggerPresent<br />

NTGlobalFlags<br />

CheckRemoteDebuggerPresent<br />

FindWindow<br />

Heap flags<br />

OutputDebugString<br />

설명<br />

PEB(Process Environment Block) 구조체의 디버깅 상태 값을 확<br />

인 디버깅 시 1, 아니면 0을 리턴<br />

PEB 구조체의 0x68에 위치한 값을 확인<br />

정상이면 0, 디버깅 시 다른 값 리턴<br />

BeingDebugged flag에 대한 목표 프로세스의 PEB를 검사<br />

디버깅 시 pbDebuggerPresent 변수가 0xfffffff<br />

FindWindow 함수를 호출하여 특정 윈도우 이름이나 클래스 이름<br />

을 찾아 프로그램이 실행중인지 검사<br />

PEB 구조체의 0x18에 위치해 있는 Heap flags를 검사<br />

정상이면 2, 디버깅 시 다른 값 리턴<br />

kernel32에 위치에 있는 GetLastError 함수를 호출하여 검사<br />

디버깅 시 0 리턴<br />

2.1.2 예외처리(exception) 기반 탐지<br />

예외처리 기반 탐지 방법은 인터럽트(interrupt) 수행 중 같은 인터럽트 코드를 만났을 때 예외<br />

처리를 하지 않는 경우 디버깅 중으로 판단한다. 대표적인 방법인 INT 3(0xCC) 예외처리는 연산<br />

코드(operation code) 0xCC에 의해 수행된다.<br />

293

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!