1. 서 론

imm32.dll을 패치하는 악성코드와 관련된 피해사례가 꾸준히 접수되고 있어 확인해 본 결과 기존의 방식과는 조금은 다른 방식을 사용하여 악성코드를 실행하도록 되어 있어 일반 사용자들을 위해서 "imm32.dll을 패치하는 악성코드"에 대한 정보를 업데이트하였다.

2. imm32.dll을 패치하는 악성코드, 수동조치는 어떻게?

최근에 발견된 imm32.dll을 패치하는 악성코드를 수동조치하기 위해서는 두 가지 경우의 수를 두고 수동조치를 해야한다.


Case 1. 정상 imm32.dll -> imm32A.dll
로 백업 후 순도 100%의 악성 imm32.dll로 교체되는 경우

Case 1에 해당하는 PC에서 안리포트를 실행하여 프로세스 & 모듈 -> 로드된 모듈 부분을 살펴보면 아래 그림처럼 이름 기준으로 서명이 Unsigned된 imm32.dll과 Signed catalog(nt5.cat)된 imm32a.dll파일 두 개가 실행 중임을 알 수 있다.

[그림 1] Case 1에 해당하는 PC의 상태


Unsigned된 imm32.dll은 순도 100%의 악성 imm32.dll이며, Signed catalog(nt5.cat)된 imm32a.dll은 악성코드가 백업한 정상 imm32.dll이다. 수동조치는 아래 단계를 거친다.

1.
%SYSTEM%\dllcache\imm32.dll이 존재하는지 확인 필요

* %SYSTEM%의 경로: 운영체제가 설치된 드라이브 기준, C:\Windows\System32\


2. GMER나 IceSword를 사용하여 Unsigned된 imm32.dll 삭제

* 수동조치 시 필요한 툴:
-. GMER:
http://www.gmer.net/gmer.zip
-. IceSword: http://asec001.v3webhard.com/IceSword.zip


참고로 IceSword는 GMER와 동일한 성격을 가진 프로그램으로 중국에서 제작된 툴로 사용자의 편의상 V3 웹하드에 링크하였으므로 오해없기를 바란다.

                                   [그림 2] IceSword를 사용하여 수동조치

[그림 3] GMER를 사용하여 수동조치


3. 윈도우 운영체제에 의해서 자동으로 정상 imm32.dll로 복구됨.

4. %SYSTEM%\dllcache\imm32.dll이 존재하지 않을 경우
   백업된 정상 imm32A.dll을 imm32.dll로 변경
한 후 재부팅. [그림 2, 3]참고.

이때 윈도우 파일 보호 기능창이 뜰 수 있는데 무시하고 재부팅 한다.

Case 2: 기존의 방식대로 정상 imm32.dll을 패치하는 경우

* 수동조치 방법: http://core.ahnlab.com/173

                              전용백신 다운로드


3. imm32.dll을 패치하는 악성코드, 어떻게 감염될까?
imm32.dll을 패치하는 악성코드는 해킹된 국내 웹 사이트를 통해서 응용 프로그램에 보안 취약점(주로, Internet Explorer에 존재하는)이 존재할 경우 감염되는 경우가 대부분이다.

* MS10-018:
http://www.microsoft.com/korea/technet/security/bulletin/ms10-018.mspx

* MS10-090: http://www.microsoft.com/korea/technet/security/bulletin/ms10-090.mspx

윈도우 업데이트 기능을 사용하여 보안 업데이트를 적용시켜 주는 것이 좋다.

 

* Windows XP 계열의 Windows Update 방법:

http://www.update.microsoft.com/windowsupdate/v6/default.aspx?ln=ko

* Windows Vista이상 계열의 Windows Update 방법: 제어판 -> Windows Update를 이용

4. imm32.dll을 패치하는 악성코드, 어떻게 동작할까?
여기서는 이해를 돕기 위해서 동작방식의 차이점을 기준으로 원형과 변형으로 구분했다.
우선 원형의 동작방식을 간단하게 그림으로 나타내면 아래와 같다.

[그림 4] 원형의 동작방식

그럼 변형의 동작방식을 살펴보자.

[그림 5] 변형의 동작방식
 

지금까 imm32.dll 패치하는 악성코드의 원형과 변형의 동작방식에 대해서 간단하게 살펴 보았는데 변형의 경우 V3제품의 설치여부를 체크하여 두 가지 경우의 수로 동작함을 알 수 있었다. 그럼 변형의 그 두 가지 경우의 수에 대해서 좀더 기술적인 부분을 살펴보도록 하겠다.

Case 1. 정상 imm32.dll -> imm32A.dll
로 백업 후 순도 100%의 악성 imm32.dll로 교체되는 경우

악성코드가 실행되면 해당 PC
에서 아래 루틴을 수행하여 V3가 설치되어 있는지 여부를 체크한다

[그림 6] V3관련 Process 체크

만약 위 프로세스들이 실행 중이라면 다음 단계인 정상 imm32.dll에 대해서 윈도우 파일 보호(WFP, Windows File Protection)를 무력화한다.

[그림 7] 정상 imm32.dll에 대해서 WFP 기능 무력화

* 참고 사이트: http://www.bitsum.com/aboutwfp.asp

정상 imm32.dll에 대해서 WFP를 무력화 시킨 후 imm32A.dll로 백업한 후 순도 100%의 악성코드를 imm32.dll로 생성한다.

-. 순도 100%의 악성 imm32.dll: %SYSTEM%\imm32.dll
-. 백업된 정상 imm32.dll: %SYSTEM%\imm32A.dll


Case 2: 기존의 방식대로 정상 imm32.dll을 패치하는 경우
Case 1과 동일하게 %SYSTEM%\imm32.dll에 대해서 WFP를 무력화 한 후 패치를 위해서 %SYSTEM%\dllcache\imm32.dll -> %SYSTEM%\oldimm32.bak로 복사한다.

[그림 8] 파일복사

C 표준 함수인 f****()계열의 함수들을 사용하여 %SYSTEM%\oldimm32.bak 패치한 후 백업 및 교체과정을

수행한다.

                                                                 [그림 9] 백업 및 교체과정

-. 정상 %SYSTEM%\imm32.dll -> %SYSTEM%\imm32.dll[랜덤문자].tmp로 백업
-. 패치된 %SYSTEM%\oldimm32.bak -> %SYSTEM%\imm32.dll
로 교체

패치작업이 완료되면 악성코드인 %SYSTEM%\ole.dll 또는 nt32.dll을 생성한다.

Case 1
에서처럼 순도 100% 악성 imm32.dll 생성 및 정상 imm32.dll imm32A.dll로 교체된 경우, PC에서 특정 프로그램을 실행하면 에러가 발생할까? 결론부터 말하면 해당 프로그램은 에러가 발생하지 않고 정상적으로 실행된다. 그 이유는 순도 100% 악성 imm32.dllEAT(Export Address Table)에서 찾을 수 있다.

[그림 10] 악성 imm32.dll의 EAT(Export Address Table)

[그림 11] 백업된 정상 imm32A.dll의 EAT(Export Address Table)

[그림 10]을 보면 순도 100%의 악성 imm32.dll은 실제 함수기능은 없기 때문에 프로그램에 의해서 특정 함수가 호출될 때 백업된 정상 imm32A.dll의 해당 특정 함수와 매핑(Mapping)되는 구조로 되어 있다.

예를들어 그림판이 실행되면서 악성 imm32.dll을 로딩하여 CtfAmmActivate()를 호출했다고 가정했을 때 순도 100%의 악성 imm32.dll은 그림판이 호출한 해당 함수의 기능이 없기 때문에 [그림 11]에서처럼 백업된 정상 imm32A.dll로부터 해당 함수를 호출하는 매핑(Mapping)구조를 가진다. 그러니까 쉽게 설명하면 아래 그림으로 설명할 수 있겠다.

[그림 12] 프로그램, 악성 imm32.dll 그리고 백업된 정상 imm32A.dll의 매핑(Mapping)구조

반대로 순도 100%의 악성 imm32.dll이 어떤 이유로 인해서 존재하지 않는다면 그림판 실행 시, 어떤 현상이 발생할까? 그에 대한 해답은 아래 그림으로 대신하는 것이 좋겠다.

[그림 13] imm32.dll이 존재하지 않을 경우

[그림 13]에 보는 에러가 발생하는 이유는 그림판과 백업된 정상 imm32A.dll 사이에서 다리역할을 하는 순도 100%의 악성 imm32.dll이 존재하지 않기 때문이다.
신고
Creative Commons License
Creative Commons License
Posted by 비회원