블로그 보관함

2014년 3월 22일 토요일

GongDa Exploit Pack 난독화 기법

GongDa Exploit Kit 에 대해서 연재를 시작 합니다.
처음 시작으로 GongDa Exploit Kit의 난독화 기법에 대해서 말하고 싶습니다.

GongDa Exploit Kit 는 난독화와 관련해서는 3가지 부분으로 구성되어 있습니다. 난독화 데이터를 해제 함수에 의해서 난독화가 풀린 다음에 실행되는 구조입니다. 그 과정에서 코드를 수정 못하게 하는 기술이 적용되었습니다.

1. 전체 구조
- 난독화 데이터
- 난독화 해제 함수 ( XOR 연산에서 사용할 특정 값을 구하는 로직 포함)
- 난독화 해제된 데이터 실행

2. 난독화 데이터
난독화 데이터는 특정 값으로 XOR  연산을 하여 생성한 16진수 값입니다.

XOR 연산에 의해서 생성된 값은 두 번의 연산에 의해 생성됩니다. 거기에 사용된 연산식은 2가지로서 난독화할 때와 난독화 해제할 때 모두 사용되고 있습니다.
[첫 번째 연산식]
(두번째 비트 연산한 결과 값 + 난독화 해제 함수 한 문자(10진수) ) OR 첫번째 비트 연산한 결과 값

[첫번째 연산 결과]

[두 번째 연산식]
첫 번째 연산 결과 + 숫자
- 첫 번째 연산 결과를 16진수로 변환한 다음 앞에서부터 2자리씩 가져와 10진수로 변환
- 변환 값에다 숫자 1 부터 시작하여, 1씩 증가한 값을 더함

[두 번째 연산 결과]

이렇게 난독화에 사용될 특정 값이 생성되면 해당 값으로 난독화를 수행합니다.
거기에 사용된 연산식은 다음과 같습니다.
3. 난독화
[난독화 연산식]
난독화할 데이터 한 글자(10진수) XOR 난독화에 사용될 특정 값
- 연산 결과 값은 16진수로 변환합니다.

[연산 결과]
난독화할 데이터 : alert(‘Hello KISA’)
난독화 결과 : 5cc6c94b3586977520ded82e69fdf1160c9d95

난독화 해제할 때도 난독화에 사용될 특정 값을 동일하게 사용합니다.

4. 난독화 해제
연산식은 다음과 같습니다.
[난독화 해제 연산식]
난독화 데이터 16진수 두 자리(10진수로 변환) XOR 난독화에 사용될 특정 값
- 연산 결과 값은 문자열로 변환합니다.

[난독화 해제 연산 결과]
난독화 해제할 데이터 : 5cc6c94b3586977520ded82e69fdf1160c9d95
난독화 해제 결과 : alert(‘Hello KISA’)

끝으로 GongDa Exploit Kit의 동작에 영향을 미치는 두 가지 특징을 이야기하겠습니다.

5. 특징
(1) Exception을 이용해 난독화에 사용될 특정 값을 생성합니다.
그 값을 생성하는 함수는 Exception이 발생하여 2번 호출하여 실행되게 됩니다. 따라서 첫번째 함수 실행에서 얻은 값으로는 난독화 해제가 불가하게 되는 결과가 생기는 것입니다.

(2) 코드 수정 방지 기술을 사용하여 난독화 해제가 불가하게 하였습니다.
코드를 수정하면 난독화 해제에 사용될 특정 값이 변경됩니다. 따라서 난독화 해제가 불가하게 됩니다.

저는 여기까지 GongDa Exploit Kit 의 난독화 기법을 정리하였습니다. 좀 더 추가적인 내용이 있으면 알려주세요 :-)

댓글 없음:

댓글 쓰기