'온라인 게임 계정 탈취'에 해당되는 글 1건

  1. 2011.01.10 [Malware Analysis] ComRes.dll 교체 및 imm32.dll 패치 악성코드 분석 (4)

온라인 게임 계정 탈취를 목적으로 한 악성코드 유포 방식 중 최근 기존과 약간은 틀린 방식이 발견되었다.
유포 방식은 홈페이지 통해서 유포되었으며 특정 취약점(CVE-2010-0806)을 이용하여 사용자가 악성 스크립트가 삽입되어 있는 홈페이지 방문시 숙주 파일이 다운로드 및 실행된다.

감염과정을 간단하게 설명하면 아래 그림과 같이 크게 [Stage 1]과 [Stage 2]로 나눌 수 있다. 먼저 [Stage 1]에서는 사용자가 악성 스크립트가 삽입되어 있는 사이트 접근 시 특정 취약점(CVE-2010-0806)을 이용하는 악성 스크립트가 실행되어 악의적인 목적의 파일(01.exe)이 다운로드 및 실행되게 된다. 01.exe 실행 시 정상적인 ComRes.dll 파일을 ComResA.dll 파일로 백업한 뒤 악의적인 목적의 ComRes.dll 파일을 생성한다. 즉, ComRes.dll 파일을 교체한다.

                                                            [Stage 1]

[Stage 2]에서는 교체된 ComRes.dll 파일이 로딩될 경우 특정 서버에 접속하여 추가로 악성코드(ma.exe)를 다운로드 한다. 다운로드된 악성코드는 정상적인 윈도우 파일인 imm32.dll을 패치하여 악의적인 목적의 코드를 추가하며, 온라인 게임 계정 탈취를 목적으로 하는 nt32.dll 파일을 생성한다.

[Stage 2]

○ 숙주 파일(01.exe) 파일에 대한 분석
다운로드 된 악성코드(01.exe)는 [그림 1]과 같이 하나의 쓰레드를 생성한다. 쓰레드가 실행할 주소는 0x00402A40 주소에 있는 명령들을 수행하는 것을 확인할 수 있다. 생성된 쓰레드가 어떤 기능을 위한 것인지 확인하기 위해 0x00402A40 주소를 확인해 보았다.

                                                            [그림 1]

생성된 쓰레드의 동작을 살펴보면 [그림 2]에서 보는 것과 같이 일단 sfc_os.dll 파일을 로딩한다. sfc_os.dll은 윈도우의 주요 파일을 보호하기 위한 기능인 WFP(Windows File Protection)와 관련된 라이브러리이다. GetProcAddress를 이용하여 로딩한 sfc_os.dll의 oridinal 5 함수의 주소를 얻어오는 것을 알 수 있다. sfc_os.dll의 oridinal 5 함수는 unnamed API로 구글링을 해보니 SfcFileException 함수를 의미한다. 해당 API에 대한 설명은 다음과 같다.
 ○ SfcFileException
SfcFileException 함수는 지정한 파일의 업데이트를 위해 일시적으로 SFC exception에 해당 파일을 등록한다. 등록되는 시간은 현재는 1분이다.
DWORD WINAPI SfcFileException (DWORD dwUnknown0, PWCHAR pwszFile, DWORD dwUnknown1);
 dwUnknown0  Unknown. Set to 1
 pwszFile  FileName
 dwUnknown1  Unknown. Set to -1 
성공시 return 값은 0이며, 에러 발생시 1이다.
SfcFileException에 두 번째 파라미터로 전달되는 값을 확인하면 "C:\WINDOWS\system32\ComRes.dll"임을 알 수 있다. 따라서 ComRes.dll 파일의 WFP를 해제하여 변조 또는 교체 등을 시도하는 것을 추측할 수 있다.
                                                            [그림 2]

[그림 3]과 같이 ComRes.dll의 WFP 해제 후 MoveFileExA 함수를 이용하여 정상 ComRes.dll 파일을 ComResA.dll로 복사하는 것을 확인할 수 있다.
[그림 3]
조금 더 진행하다 보면  [그림 4]와 같이 FindResouce를 이용하여 파일의 리소스에서 특정 값을 읽어오는 것을 확인할 수 있으며, 해당 리소스 확인 시 PE 구조의 파일이 저장되어 있는 것을 확인할 수 있다.
[그림 4]
[그림 5]와 같이 리소스에서 읽어온 값을 C:\WINDOWS\system32\ComRes.dll로 저장하는 것을 확인할 수 있다.
[그림 5]
이어서 자기 자신을 삭제한다.
[그림 6]

○ ComRes.dll 파일 분석
01.exe에 의해 생성된 ComRes.dll의 경우 특정 프로그램(iexplorer.exe 등)에 의해 로딩될 경우 [그림 7]과 같이 특정 서버에 접속하여 news.txt 파일을 C:\WINDOWS\system32\systeminfo.ini 파일로 저장한다. systeminfo.ini 파일의 경우 [그림 8]과 같이 악성코드를 다운받아 올 주소와 version 정보 등이 저장되어 있다.
[그림 7]
[그림 8]
이후 systeninformation.ini 파일의 url 키워드 부분의 URL 정보를 읽어온 뒤 해당 주소의 파일(ma.exe)을 다운로드 하여 sv1.tmp로 저장한 뒤 실행한다.
[그림 9]
또한 ComRes.dll에는 [그림 9]과 같이 특정 보안 제품을 종료 시키는 부분도 존재하며, nt32.dll 파일이 존재할 시 로딩하게 된다.
[그림 9]

○ ma.exe 파일 분석
ComRes.dll에 의해 다운로드 된 ma.exe의 가장 큰 목적은 정상적인 imm32.dll을 패치하는 것과 nt32.dll 파일을 생성하는 것이다. imm32.dll을 패치하는 과정은 일단 [그림 10]과 같이 dllcache에 있는 imm32.dll(정상 파일)을 odlimm32.dll로 복사한다.
[그림 10]
정상적인 C:\WINDOWS\system32에 존재하는 imm32.dll 파일은 [그림 11]과 같이 imm32.dll[랜덤].tmp 로 백업한다.
[그림 11]
이후 dllcache에서 복사 한 정상적인 파일인 oldimm32.dll 파일을 변조 한 뒤에 [그림 12]와 같이  imm32.dll 파일을 바꿔치기 한다. 물론 이전에 숙주파일(01.exe)에서 했던 것과 마찬가지로 SfcFileException을 이용하여 imm32.dll의 WFP를 해제한다.
[그림 12]
위의 과정과 같이 imm32.dll 파일을 패치한 이 후 C:\WINDOWS\system32에 nt32.dll을 생성한다. [그림 13]과 같이 nt32.dll은 ma.exe 파일의 리소스에 존재하여 해당 리소스에 있는 파일의 내용을 드랍한다.
                                                            [그림 13]

○ 패치된 imm32.dll 파일 분석
ma.exe에 의해 패치된 imm32.dll의 경우 [그림 14]와 같이 GetProcAddress로 LoadLibrary의 주소를 얻어온 다음 nt32.dll 파일을 로딩한다.
[그림 14]
○ nt32.dll 파일 분석
nt32.dll 파일의 경우 특정 온라인 게임 계정 탈취를 목적으로 제작된 것을 확인할 수 있다.
[그림 15]

○ 결 론
홈페이지에 악성 스크립트를 삽입하는 방식으로 사용자가 악성 스크립트가 삽입된 홈페이지 방문 시 사용자 모르게 감염이 이루어진다. 간단하게 보안 패치를 통해 감염을 예방할 수 있으나 아직도!! 보안 패치를 하지 않은 사람이 많아서인지 최근 감염이 많이 이루어지는 듯 하다. 이글을 보시는 분들이라도 다시 한 번 보안 패치 하시길 간절히 바란다.
피해 사례로 악성코드 감염시 온라인 게임 계정 유출 뿐만 아니라 [그림 16]과 같이 IE가 충돌을 일으키며 종료되는 증상을 보이므로, 정상적인 웹서핑이 불가능하다.
[그림 16]

                                                                                                    +---------------------------------+
                                                                                                    | Infinite Flow..                              |
                                                                                                    | mail : geekspark@gmail.com         |
                                                                                                    | Blog : http://sinun.tistory.com       |
                                                                                                    | twitter : @unpacker                      |
                                                                                                    | CISSP                                        |
                                                                                                    +----------------------------------+
저작자 표시 비영리 변경 금지
신고
Posted by By. PHR34K