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

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

04.07.2014 Views

시간 기반 키 생성 방식을 이용한 안티 디버깅 기법 시간 값 을 읽어 들이고 시간 값 오차 임계점 CT만큼 시프트 연산 ′ 하여 저장한다. 목표 블 록의 실행한 후 다시 시간 값 을 읽어 들이고 시프트 연산 ′ ′ 후 차분 값 ′ 을 계산한다. 조 건문 응답 방식을 통한 실행 시간 측정값이 유효 범위에 있을 때만 복원 루틴을 시키는 방식이 아 ′ 닌 계산된 값 ′ 을 위장된 명령어 셋에 더한다. 디버거가 첨부되면 실행 시간의 증가로 인한 올바르지 않는 키가 생성되고 올바르지 않은 키로 패치된 위장명령어 셋은 복원 루틴 과정 시 원 본 명령어 셋이 복구 되지 않으면서 오류가 발생한다. 4. 개선된 기법의 보안 분석 4.1 코드 암호화 기법 기존 코드 암호화 기법은 코드를 암호화를 통해 정적분석을 어렵게 하지만 디버거를 통한 동적 분석을 통해 복호화 키를 얻을 수 있다. 개선된 기법은 프로세스가 실행 될 때, 프로세스 실행 시 간을 사용하여 특정 영역과 같이 해시 함수를 통해 키 값을 생성한다. 올바른 키 값을 생성하지 못하면 보호된 영역을 실행시키지 못한다. 또한 동적 분석을 위해 디버거를 첨부하면 프로세스의 실행시간 증가로 인한 실행시간의 차가 임계점을 벗어나 올바르지 못한 키 값이 생성된다. 올바르 지 못한 키 값으로 복호화 할 경우 원본 데이터와 다른 데이터가 형성된다. 이 데이터로 실행될 시 잘못된 데이터로 인한 자가 변조가 일어나서 오류를 발생시킨다. 즉 디버깅을 통한 동적 분석 을 어렵게 한다. 4.2 명령어 위장 기법 명령어 위장 기법은 목표 블록의 실행 시간을 측정하여 실행 시간이 유효 시간 범위 내에 있는 지 조건 구문을 통해 복원 루틴을 실행시킨다. [표 2] 분석 [Fig. 2] Analysis 코드암호화 기법[5] 개선된 코드 암호화 기법 명령어 자가 변조 기법 개선된 명령어 자가 변조 기법 디버깅 탐지 X O O O 우회 O X O X 개선 후 추가 발생 연산 - 복호화 할 때마다 rdtsc 2회 shr 2회 sub 1회 - 명령어를 복원할 때마다 shr 2회 add 1회 300

보안공학연구논문지 (Journal of Security Engineering), 제 10권 제 3호 2013년 6월 이러한 조건문 응답 방식의 안티 디버깅 기법들은 동적 분석을 점프 및 리턴 값 자체를 조작하 는 방식으로 우회 공격이 가능하다(조건문 점프를 무조건 점프로 변환 등). 개선된 기법은 프로세 스가 실행될 때, 프로세스 실행 시간을 이용하여 키가 생성된다. 실행 시간 내에서는 항상 일정한 키 값이 생성되어서 위장된 명령어 셋에 패치된다. 동적 분석을 위해 디버거가 첨부 되면 실행 시 간 증가로 인한 잘못된 키 값이 생성되고 잘못된 키 값으로 패치된 명령어 셋은 원본 명령어 셋으 로 복원이 되지 않으므로 오류가 발생한다. 코드 암호화 기법은 정적 분석에 대해 어렵게 하였지만 디버깅을 통한 동적 분석을 고려하지 않았다. 개선된 코드 암호화 기법은 복호화 할 때마다 프로세스 실행 시간 측정 2회, 시프트 연산 2회, 뺄셈 연산 2회가 추가 적으로 들어가지만 이를 통해 디버깅을 통한 동적 분석을 어렵게 한다. 명령어 자가 변조 기법은 실행 시간의 오차 범위 내에 있으면 복원 루틴을 실행시키고, 오차 범위 밖이면 복원 루틴을 실행시키지 않는 조건 구문으로 구현되었다. 이러한 조건 구문은 리턴 값 조 작이나 점프문 변환으로 우회 공격이 용이하다. 개선된 명령어 자가 변조 기법은 명령어를 복원할 때마다 시프트 연산 2회, 덧셈 연산 1회가 추가적으로 발생하지만 생성된 키를 명령어에 패치함으 로써 우회공격을 어렵게 한다. 5. 결론 본 논문에서는 시간 기반 키 생성 방식을 통한 안티 디버깅 기법을 제안하였다. 제안된 기법은 실행 시간을 키 값으로 생성할 경우의 어려움을 해결하였다. 그리고 디버거 탐지 시 조건 구문 우 회 공격 회피의 어려움을 해결하였다. 제안된 기법으로 암호화 하여 저장하면, 프로세스가 실행 될 때 암호화 된 부분을 복호화하기 위한 키 생성을 하기 위해서 프로세스 실행 시간 차분 값과 특정 영역의 해시 값을 계산하여 동적으로 키를 생성한다. 디버거가 첨부되면 프로세스 실행 시간의 차 가 증가 하여 올바르지 못한 키가 생성된다. 올바르지 못한 키로 복호화하면 잘못된 복호화에 의 해 자가 변조가 일어나고 오류가 발생한다. 또한 코드 암호화 기법과 명령어 자가 변조 기법을 개 선하여 우회가 어려운 안티디버깅 기법을 제안하였다. 301

시간 기반 키 생성 방식을 이용한 안티 디버깅 기법<br />

시간 값 을 읽어 들이고 시간 값 오차 임계점 CT만큼 시프트 연산 ′ 하여 저장한다. 목표 블<br />

록의 실행한 후 다시 시간 값 을 읽어 들이고 시프트 연산 ′ ′<br />

후 차분 값 <br />

′ 을 계산한다. 조<br />

건문 응답 방식을 통한 실행 시간 측정값이 유효 범위에 있을 때만 복원 루틴을 시키는 방식이 아<br />

′<br />

닌 계산된 값 <br />

′ 을 위장된 명령어 셋에 더한다. 디버거가 첨부되면 실행 시간의 증가로 인한<br />

올바르지 않는 키가 생성되고 올바르지 않은 키로 패치된 위장명령어 셋은 복원 루틴 과정 시 원<br />

본 명령어 셋이 복구 되지 않으면서 오류가 발생한다.<br />

4. 개선된 기법의 보안 분석<br />

4.1 코드 암호화 기법<br />

기존 코드 암호화 기법은 코드를 암호화를 통해 정적분석을 어렵게 하지만 디버거를 통한 동적<br />

분석을 통해 복호화 키를 얻을 수 있다. 개선된 기법은 프로세스가 실행 될 때, 프로세스 실행 시<br />

간을 사용하여 특정 영역과 같이 해시 함수를 통해 키 값을 생성한다. 올바른 키 값을 생성하지<br />

못하면 보호된 영역을 실행시키지 못한다. 또한 동적 분석을 위해 디버거를 첨부하면 프로세스의<br />

실행시간 증가로 인한 실행시간의 차가 임계점을 벗어나 올바르지 못한 키 값이 생성된다. 올바르<br />

지 못한 키 값으로 복호화 할 경우 원본 데이터와 다른 데이터가 형성된다. 이 데이터로 실행될<br />

시 잘못된 데이터로 인한 자가 변조가 일어나서 오류를 발생시킨다. 즉 디버깅을 통한 동적 분석<br />

을 어렵게 한다.<br />

4.2 명령어 위장 기법<br />

명령어 위장 기법은 목표 블록의 실행 시간을 측정하여 실행 시간이 유효 시간 범위 내에 있는<br />

지 조건 구문을 통해 복원 루틴을 실행시킨다.<br />

[표 2] 분석<br />

[Fig. 2] Analysis<br />

코드암호화 기법[5]<br />

개선된 코드<br />

암호화 기법<br />

명령어 자가 변조<br />

기법<br />

개선된 명령어<br />

자가 변조 기법<br />

디버깅 탐지 X O O O<br />

우회 O X O X<br />

개선 후<br />

추가 발생<br />

연산<br />

-<br />

복호화 할 때마다<br />

rdtsc 2회<br />

shr 2회<br />

sub 1회<br />

-<br />

명령어를 복원할<br />

때마다<br />

shr 2회<br />

add 1회<br />

300

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

Saved successfully!

Ooh no, something went wrong!