블로그 보관함

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

2014년 3월 3일 월요일

[파밍 악성코드] hosts, hosts.ics 파일 변조시 IP주소 가져오는 방법

최근 파밍 악성코드가 급증하고 있습니다. 점점 금융권 웹페이지와 파밍 웹사이트의 구별이 어려워지고 있습니다. 이처럼 악성코드 제작자의 기술은 점점 고도화되고 있는 가운데 제가 주목한 것은 hosts, hosts.ics 파일의 변조시 사용하는 IP 주소를 가져오는 방법입니다.

QQ 메신저 서비스의 특정 유저 정보 페이지에서 hosts, hosts.ics 파일의 변조시 사용하는 IP 주소를 가져옵니다. 이러한 방법은 정상 서비스를 이용하는 것이기 때문에 백신을 우회하는 방법중에 하나입니다.
http://user.qzone.qq.com/[ID]

[그림 1] hosts, hosts.ics 변조시 사용하는 IP 주소








[그림 1]에서 보듯 QQ 메신저 서비스의 유저 정보 페이지에서 #과 #사이에 IP주소를 표기해두었습니다. 유저의 이름 정보가 표시된 곳에 IP 주소를 표기하여 그 정보를 파싱한 다음 hosts, hosts.ics 변조시 사용합니다.

악성코드 제작자들의 백신을 우회하는 흥미로운 방법이지 않나요?


2014년 2월 28일 금요일

[ZeusVM] 스테가노그라피 사용

Zeus 봇은 다양한 변종들이 만들어지고 있는 가운데 스테가노그라피를 사용하였습니다.
이미지 파일에 암호를 숨기는 기법은 오래전부터 있어 왔으며, Zeus 봇은 그 기법을 최근에 도입하여 사용하였습니다. 이 새로운 변종 Zeus 봇은 Xylitol 로 알려진 프랑스 보안 연구가가 최초로 소개했으며, ZeusVM이라고 불렀습니다.

ZeusVM은 이미지 파일에 암호화를 한 설정 데이터를 숨겼습니다. 설정 데이터에는 공격 대상인 인터넷 뱅킹 웹사이트 리스트가 포함됐습니다. 

그 설정 데이터는 Base64 인코딩과 RC4, XOR 인코딩 알고리즘을 사용하여 암호화되어 이미지 파일 끝부분에 추가되었습니다.

실제로 원본 파일은 구글 이미지 검색 서비스를 이용하면 구할 수 있으며, 암호화된 데이터가 추가되어 ZeusVM에 의해 생성된 이미지 파일를 원본 파일을 비교하면 훨씬 크기가 큰 것을 알 수 있습니다.

[그림 1] 이미지 파일에 추가된 암호화된 데이터(일부분)



















[그림 1]은 Security Affairs 블로그 에서 퍼온 것입니다.

ZeusVM에 대해서 자세히 원하면 하기 링크를 참조하면 도움이 됩니다:

[JAVA 악성파일] hosts 파일 변조

파밍 공격이 급증하고 있어 큰 문제입니다. 최근에는 카드사 및 기존 은행권 웹사이트 접속시 변조된 hosts 파일에 설정된 가짜 웹사이트로 이동되어 상당한 피해를 초래하고 있습니다.

특히 한국에서는 hosts 변조를 위해서 PE 파일을 이용해 배치 명령이나 WriteFile API를 이용해 특정 금융권 웹사이트 접속시 다른 IP 주소로 접속하도록 설정합니다.

이러한 최근의 상황 중에 hosts 파일 변조시 자바 취약점을 이용한 경우가 특이하여 글을 쓰게 되었습니다.

저는 취약점을 이용하는 부분에 해당하는 파일은 확보할 수 없었으며, hosts 변조하는 자바 파일은 확보하여 소개합니다.
[그림 1] hosts 파일 생성












[그림 2] 파밍 웹사이트 추가










감염된 웹사이트에 접속시 취약점이 발생되면 사용자 PC에 [그림 1]에서처럼 hosts 파일을 새로 생성하며 [그림 2]에서처럼 쓰레기 값과 함께 금융권 웹사이트가 파밍 웹사이트로 연결되도록 IP 주소를 변경합니다.

이러한 취약점을 이용한 hosts 파일 변조 기법이 국내에서도 유입될까요?

[Gong Da Exploit Pack]Exception을 이용한 XOR 키 생성 방법

Gong Da Exploit Pack에 의해 생성된 난독화 페이지는 분석하기 참 어렵습니다. 눈으로 따라가기 힘들며, 자바 스크립트 코드의 가독성을 높이기 위해 정리한 다음 하나씩 난독화를 해제하는 지겨운 작업을 한 다음에야 분석을 시작할 수 있습니다.
하지만 이 난독화 페이지도 다른 난독화 방법과 마찬가지로 XOR 연산을 응용한 것입니다. 특히 저의 주의를 이끈 것은 XOR 연산시 사용하는 Key를 생성하는 방법입니다.
그 방법을 소개하기 위해 이 글을 씁니다.

[그림 1] XOR 키 생성 함수

















[그림 1]은 Gong Da Exploit Pack에서 XOR 연산시 사용하는 Key를 생성하는 함수와 그 함수를 실행하는 코드입니다.
이 함수는 Exception을 이용하여 동작하며 XOR 연산시 사용하는 Key를 생성합니다.
이 동작 방식이 흥미로운데 좀 더 자세히 설명을 해보면, SkKrisv2 함수가 시작되면 제일 먼저 할당 안된 변수인 ATAGgl6을 사용하려고 하여 Exception이 발생합니다.
따라서 Exception을 처리하게 되며, 이 때 ATAGgI6 변수에는 상수 값 0을 할당합니다. 그리고 나서 SkKrisv2 함수가 한번 더 실행됩니다.
한번 더 실행된 함수에서는 상수 값 0이 할당된 ATAGgl6 변수를 사용하여 XOR 연산시 사용하는 Key를 생성합니다.
생성된 Key로 비트 연산을 한 다음에 한번 더 Key를 생성합니다. 이렇게 두 번 연산된 Key를 이용하여 Gong Da Exploit Pack에서는 난독화를 합니다.

따라서 Gong Da Exploit Pack에 의해 생성된 난독화 페이지를 해제할 때 XOR 연산시 사용하는 Key를 상수 값 0으로 할당한 후 연산한 다음 또 한번 연산을 하지 않는다면 올바른 XOR 연산 Key를 구할 수 없을 것입니다.

이것보다 좀 더 진보된 방법으로 XOR 연산시 사용하는 Key를 구하는 샘플 발견하시면 연락부탁드립니다. 이 글을 읽어주셔서 감사합니다.