블로그 보관함

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 의 난독화 기법을 정리하였습니다. 좀 더 추가적인 내용이 있으면 알려주세요 :-)

GongDa Exploit Kit 연재 소개

한국에서는 몇해전부터 GongDa Exploit Kit에 의한 악성코드 유포가 유행하고 있습니다.
GongDa Exploit Kit은 중국에서 제작된 Exploit Kit로서 다양한 취약점을 이용한 자동화 공격툴입니다. 해당 툴에 관해서 이야가할 때 배포되는 악성코드에 초점이 맞추어져 있어서 다양한 주제로 연재를 진행할려고 합니다.
이야기 하고 싶은 내용은 다음과 같습니다.

1. 인터넷 접속 통계

2. 쿠키

3. 난독화

4. 취약점

5. 유포 악성코드

6. 유포 방식

여러분들도 연구되어야 한다고 생각하는 주제가 있으면 의견주시면 좋겠습니다!

2014년 3월 17일 월요일

rundll32.exe 와 regsvr32.exe의 DLL 로딩 방식의 차이

rundll32.exe 와 regsvr32.exe의 DLL 로딩 방식의 차이에 대해서 간략하게 정리하였습니다.

rundll32.exe
1. GetCommandLineW
Export 함수명을 파싱
2. LoadLibrary to load the DLL
GetProcAddress를 호출해서, Export 함수의 주소를 알아 낸 후,
3. Export 함수 호출
4. FreeLibrary

regsvr32.exe
1. OleInitialize
2. LoadLibrary to load the DLL
GetProcAddress를 호출해서, DllRegisterServer or DllUnregisterServer의 주소를 알아 낸 후,
3. DllRegisterServer or DllUnregisterServer 호출
4. FreeLibrary
5. OleUninitialize