ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - SERSC
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