금주 주말에 국내 특정 사이트를 통해 유포된 악성코드에 대해서 분석해 봤습니다.
새로운 방식의 악성코드는 아니고 예전부터 지속적으로 유포되던 악성코드로 특정 온라임게임의 계정 탈취를 목적으로 하고 있습니다.

유포 사이트 접속시 a.exe 파일을 다운로드 및 실행하게 되며, a.exe 파일은 정상적인 MS 파일로 위장하고 있습니다.


a.exe 실행시 아래와 같은 파일을 생성합니다.
%system%ole.dll
%system%imm32.dll.olg
%system%imm32.dll

ole.dll 파일의 경우 윈도우 정상 파일인 ole2.dll이나 ole32.dll 파일을 위장하고 있으며 파일의 속성 역시 아래와 같이 정상 MS 파일로 위장하고 있습니다.

imm32.dll.log 파일과 imm32.dll 파일을 비교해 보도록 하겠습니다.
imm32.dll.log 파일의 경우 정상적인 윈도우의 imm32.dll 파일을 백업해 놓은 파일이며 새로 생성된 imm32.dll 파일의 경우 정상 imm32.dll 파일이 패치된 파일인 것을 확인할 수 있습니다.

위 그림과 같이 생성된 imm32.dll 파일의 경우 정상 imm32.dll 파일 후위에 4096 Bytes 만큼 파일의 내용이 추가된 것을 확인할 수 있습니다.
생성된 imm32.dll 파일의 PE 구조를 확인해 보면 .vsprt 섹션이 추가되었으며 Entry point도 "0001D000" 즉, 새로 생성된 .vsprt 섹션으로 변경되어 있는 것을 확인할 수 있습니다.

imm32.dll 파일의 추가된 .vsprt 섹션의 기능을 살펴보겠습니다. OllyDbg를 이용하여 해당 파일을 로딩한 뒤 따라가다 보면 아래와 같이 CALL EAX 구문을 만날 수 있습니다.
CALL EAX 구문은 위와 같이 GetProcAddress를 호출하는 것을 알 수 있으며, 스택에 저장된 값을 확인해보면 파라미터로 kernel32.dll 파일의 메모리 상의 주소인 "7C800000"과 LoadLibraryA 문자열이 저장되어 있는 0006F824를 넘겨주는 것을 확인할 수 있습니다. GetProcAddress API의 구조는 아래와 같습니다.
 FARPROC WINAPI GetProcAddress(
  __in  HMODULE hModule,
  __in  LPCSTR lpProcName
);
따라서 kernel32.dll의 LoadLibraryA 함수의 주소를 읽어오는 것을 확인할 수 있습니다.

다시 조금더 진행해 보면 CALL EAX 구문을 또 만나게 됩니다.
위에서 얻어온 LoadLibraryA 함수를 이용하여 ole.dll 파일을 로딩하는 것을 알 수 있습니다. LoadLibrary API의 구조는 아래와 같습니다.
 HMODULE WINAPI LoadLibrary(
  __in  LPCTSTR lpFileName
);

패치된 imm32.dll 파일에 의해 로딩되는 ole.dll 파일의 string 값을 보면 아래와 같이 특정 온라인 게임의 계정 탈취를 목적으로 함을 알 수 있습니다.
이외에도 다수의 온라인 게임의 계정 탈취를 목적으로 제작되었으며 특정 보안 제품의 정상 작동을 방해함을 알 수 있습니다.

실제 감염 과정이 이루어진 후에 실제 Internet explorer를 실행해 보면 패치된 imm32.dll에 의해 ole.dll이 로딩되는 것을 알 수 있습니다.

전체적인 감염 과정 및 감염 후 악성코드 동작 방식을 정리하면 다음과 같습니다.
 1) 온라임 게임 계정 탈취를 목적으로 하는 ole.dll 파일 생성
2) 정상 imm32.dll 파일을 imm32.dll.log 파일로 복사
3) 패치된 imm32.dll 파일 생성
4) imm32.dll을 사용하는 프로그램 실행시 패치된 imm32.dll에 의해 ole.dll 파일 로딩
5) ole.dll 파일에 의해 특정 온라임 게임 계정 탈취

대부분의 악성코드는 자신의 생존성 보장을 위해 자동실행과 관련된 레지스트리 값에 등록하거나, 서비스로 등록하여 재부팅 후에도 자동실행을 하게 됩니다. 하지만 분석 대상이 되는 악성코드의 경우 정상적인 DLL 파일을 패치하여 악의적인 목적의 DLL 파일을 로딩하도록 함으로써 자신의 생존성을 보장하고 있습니다. 사용자의 입장에서는 감염여부를 더욱 알아채기 힘들 것 입니다.

                                                                                                    +---------------------------------+
                                                                                                    | Infinite Flow..                              |

                                                                                                    | mail : geekspark@gmail.com         |
                                                                                                    | Blog : http://sinun.tistory.com       |
                                                                                                    | twitter : @unpacker                      |
                                                                                                    | CISSP                                        |
                                                                                                    +----------------------------------+
Posted by By. PHR34K