ìê° ê¸°ë° í¤ ìì± ë°©ìì ì´ì©í ìí° ëë²ê¹ ê¸°ë² - 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.
시간 기반 키 생성 방식을 이용한 안티 디버깅 기법<br />
in conditional method. We also introduce scheme that setting scope of the execution time by shift operation<br />
instead of simply induce the value of the key by specific area of the program’s execution time. It can set<br />
a range of run-time errors can be occurred by system hardware so scheme can be applied flexibly in the<br />
various environments.<br />
Keywords : anti-debugging, dynamic analysis, time-based, hash function, code encryption<br />
1. 서론<br />
프로그램 실행 시 동적 분석을 가능하게 하는 디버깅 도구는 소프트웨어의 개발 과정에서 오류<br />
나 버그를 찾아 보완하는데 필수적인 도구이다. 이러한 디버깅 도구는 프로그램의 취약성을 발견<br />
이나 지적재산권이 포함된 알고리즘과 같은 프로그램 내부의 비밀 정보 추출과 같은 악의적인 역<br />
공학 도구로 악용될 수 있다. 이와 같이 발견된 취약성은 주로 시스템 권한 상승과 같은 공격에<br />
이용될 수 있으며, 프로그램 내부에 포함된 비밀 정보 추출은 소프트웨어 지적 재산권 침해에 악<br />
용될 수 있다.<br />
소프트웨어 보호 방법으로 코드 난독화, 코드 암호화, 코드 변조 방지 기술과 같은 방법들이 제<br />
안되고 있다. 이와 같은 방법들은 코드의 본래 기능성은 유지하면서 코드를 의미 없는 코드로 변<br />
환시키거나 복잡하게 만들어서 정적 분석을 어렵게 할 수 있지만 디버거를 이용해서 실행 시간 동<br />
안의 프로그램의 동작 행위를 분석하는 동적 분석까지는 방어하기 어렵다[3]. 이에 대한 대응책으<br />
로 안티 디버깅 기법이 있다. 안티 디버깅은 디버깅 도구들을 이용해 공격자가 동적 분석을 하려<br />
고 할 때 디버거를 탐지하고, 디버거 발견 시 디버거를 무력화 시킬 수 있는 기술이다[2][3]. 기존<br />
의 안티 디버깅 기법[1][6]들은 디버거 탐지 방법 중심으로 연구되어 왔다. Window에서 제공하는<br />
디버거 탐지 방법은 API 형태로 제공된다[11]. 제공된 라이브러리 Win32에 있는 함수를 호출하여<br />
시스템 정보를 검사해서 돌려받는 리턴 값을 비교하여 디버깅이 첨부되었는지 판단한다. 이렇게<br />
조건문 응답 방식으로 구현되어 있는 방식은 리턴 값을 조작하거나 점프 구문을 통해 우회 공격이<br />
용이하다.<br />
본 논문에서는 시간 기반 키 생성 방식을 통한 우회 공격을 어렵게 하는 안티 디버깅 기법을<br />
제안한다. 프로세스 실행 시간을 키 값으로 사용하면 실행 환경에 따라 변하는 키 값으로 제대로<br />
복호화가 되지 않는다. 다양한 실행 환경에 맞게 실행 시간의 유효 범위를 주기 위해서 시프트 연<br />
산을 사용한다. 시프트 연산을 통하여 실행 지연 시간이 오차 범위 내에서는 실행 시간의 차분 값<br />
이 0이 나오게 하고, 실행 지연 시간이 오차 범위 밖에서는 실행 시간의 차분 값이 다른 값이 되<br />
게 만든다. 그리고 0의 노출을 막기 위해서 특정 영역을 0과 같이 패치하여 해시함수를 취한 값을<br />
키 값으로 생성하였고 키 값으로 쓰인 특정 영역이 변조되면 해시함수의 특성에 따라 무결성을 보<br />
장해준다. 사전에 정해 놓은 영역의 실행 시간차가 오차 범위 내에 있으면 정당한 키가 생성 된다.<br />
하지만 실행 시간차가 오차 범위를 넘어서면(즉, 디버거가 첨부 되었을 때) 다른 키 값이 형성된<br />
다. 올바르지 않은 키 값으로 복호화 하면 자가 변조된 코드영역은 비정상적으로 생성 되어서 그<br />
292