본문 바로가기
악성코드 정보

정상파일을 위장한 PlugX 악성코드 유포

by 알 수 없는 사용자 2014. 9. 25.

PlugX 형 악성코드는 지난 2012년 국내에 최초 발견되었으며, 발견 당시 APT 형태의 백도어 파일로 감염이 제한적으로 이루어졌으나, 최근에는 불특정 다수의 개인 사용자들을 대상으로 한 공격 시도가 발견되고 있어, 사용자의 주의가 요구된다. 

PlugX 형 악성코드는 '정상 프로그램(EXE)' + '악성 DLL 모듈' + '암호화된 데이터파일' 3가지가 조합된 형태로 배포된다. 악성코드 제작자는 정상 프로그램(EXE)이 실행 시 함께 구동하는 DLL 파일을 (파일명은 정상파일이나, 악성기능을 갖는) 악성파일로 제작하여 배포하고 있으며, 사용자가 정상파일(EXE)을 실행 시, 자동 로드되는 악성 DLL 파일에 의해 악의적인 기능이 수행되도록 한다.

또한, 함께 배포되는 데이터파일은 다양한 확장자 형태로 발견되고 있으며, 내부에는 2차 악성파일이 압축+암호화되어 존재한다. V3에서는 이처럼 정상파일의 동작 구조를 악용하여, 동작하는 악성코드를 PlugX 형태의 악성코드로 분류하고 있다. 

최근 발견되는 샘플은 기존 알려진 정상 프로그램과 달리 새로운 모듈들이 발견되고 있으며, 내부적으로 사용하는 쉘 코드(Shell Code) 및 2차 악성파일인 키로거(Keylogger) 파일이 압축+인코딩된 형태로 유포되고 있어, 백신의 탐지를 어렵도록 한다.


 

1. 동작과정

아래의 [그림-1]은 2014 9 접수된 PlugX 악성파일의 실행 흐름을 나타낸다. "dvcemumanager.exe" 파일은 정상 프로그램이며, "DESqmWrapper.dll" 이라는 이름의 DLL 모듈을 구동하는 기능을 갖고 있다. 여기서 악성 파일은 "DESqmWrapper.dll" 파일이며, 내부에 암호화된 데이터파일 "DESqmWrapper.wrapper" 을 참조하여 2차 악성파일을 메모리 상에서 생성/구동하는 기능을 수행한다.

[그림-1] PlugX 동작과정 (2014년 9월)


2. 주요기능

최초 악성 드로퍼(Dropper)는 실행 후, 아래의 [그림-2]에서 처럼 특정경로에 파일들을 생성하며, 해당 폴더 및 파일들에 숨김 속성을 부여하여, 사용자가 쉽게 발견할 수 없도록 한다.


[그림-2] PlugX 악성코드 감염 시, 폴더의 내용


[그림-2]에서 생성한 파일들의 구성은 다음과 같다.

(1) "dvcemumanager.exe" : 정상 프로그램

(2) "DESqmWrapper.dll" : 악성파일

(3) "DESqmWrapper.wrapper" : 악성 데이터 파일 ('쉘코드' + '2차 악성 키로거 파일 압축+암호화')

(2) "dazc" : 키로깅 정보 저장 시 사용하는 데이터 파일

(3) "wzplkblzouebjhscu" : 8바이트 데이터 파일

 

 

악성 "DESqmWrapper.dll"파일의 주요기능은 자신을 구동한 정상 EXE 프로세스의 메모리 영역을 패치(Patch)하여 DLL 의 코드를 수행하도록 강제 분기시키며, "DESqmWrapper.wrapper" 데이터파일을 읽어 내부에 존재하는 쉘코드를 구동한다.

 

아래의 [그림-3]은 각 단계별 동작을 설명한다.

[그림-3] PlugX 단계별 동작과정

 

(1) 정상 "dvcemumanager.exe" 파일의 동작 구조에 의해 동일폴더의 악성 "DESqmWrapper.dll" 파일이 로드된다.

(2) 악성 DLL의 EntryPoint Code가 실행되면 자신을 로드한 EXE 프로세스의 다음 명령어 코드를 JMP 코드로 패치(Patch)하여, DLL 메인코드가 실행되도록 한다.

(3) 실행흐름은 DLL 코드로 분기하며, EXE 파일의 이후 코드는 동작하지 않는다.

(4) 악성 DLL의 메인코드가 실행되면 동일 폴더의 "DESqmWrapper.wrapper" 파일을 메모리에 읽어들여 해당 쉘코드를 실행한다.

(5) 로드된 쉘코드는 디코딩 루틴을 수행하며, svchost.exe 프로세스를 생성하며 메모리에 디코딩된 코드를 주입(Inject)한다.

(6) svchost.exe 프로세스에 인젝션된 코드는 키로깅, 시스템 정보유출, 화면캡쳐 등의 백도어 기능을 수행한다.

 

 

[그림-4]는 [그림-3]의 (2) 단계에 해당하는 메모리 패치코드 영역이다.

[그림-4] PlugX에 의해 메모리 패치된 JMP 코드

 

해당 DLL 코드가 실행되면 [그림-5]와 같이 동일 폴더내의 "DESqmWrapper.wrapper" 파일을 읽은 후, 실행한다.

 [그림-5] "DESqmWrapper.wrapper" 파일을 참조하는 부분

 

"DESqmWrapper.wrapper" 파일은 외형적으로는 정상적인 데이터 파일로 보이나 실제로는 동작 가능한 쉘 코드로 이루어져 있다

2012년 접수되었던 PlugX 악성코드와의 차이점은, 해당 쉘 코드의 진단 회피를 위해 인코딩(Encoding)된 형태로 배포하고 있으며, 메모리에 로드된 이후에 인코딩된 코드를 디코딩(Decoding)하여 유효한 명령어를 재조합한다.

 

 [그림-6] 2012년 접수된 PlugX 쉘 코드 파일

 

쉘 코드는 아래의 [그림-7]와 같이 여러 반복문 통해 디코딩 작업이 이루어진다.

[그림-7] 셀코드 디코딩 과정

 

또한, 정상 "svchost.exe" 프로세스를 생성하여, 해당 프로세스 메모리 영역에 악성코드를 삽입(Injection)하며 주기적으로 악의적인 동작을 수행하도록 한다.


[그림-8] 인젝션된 svchost.exe 프로세스

 

PlugX 악성코드에서 유출하는 정보는 다음과 같다.

- 활성화된 프로세스 클래스명

- 실행중인 프로세스 경로 

- 악성코드가 동작하는 시스템의 시간정보

- 사용자 이름

- 컴퓨터 이름 

- 키보드 입력 값

- 파일/디스크 정보

- 화면캡쳐

 

 

PlugX는 윈도우 시스템 구동 시, 자동으로 동작하도록 하기위해 다음의 레지스트리값을 등록한다.

HKLM\SYSTEM\CurrentControlSet\Services\DEManager\ImagePath

> "C:\Documents and Settings\All Users\DRM\DEManager\dvcemumanager.exe"

HKLM\SYSTEM\CurrentControlSet\Services\DEManager\DisplayName

> "DEManager"

HKLM\SYSTEM\CurrentControlSet\Services\DEManager\Start

> 0x2

 

획득한 정보는 아래의 [그림-9]와 같이 인코딩하여 "dazc"파일로 저장한다.

 [그림-9] 유출정보 암호화된 형태


"svchost.exe" 프로세스에 인젝션된 코드는 공격자 C&C 서버에 접속하기 위해 주기적으로 연결을 시도하며 주소는 악성코드 내부에 고정되어 있다.

- 1*3.*41.5*.42:80

 

[그림-10] 전송되는 패킷 덤프

 

3. 진단

V3 제품군에서는 해당 PlugX류 악성코드를 다음과 같이 진단한다.

MD5

파일명

진단명

65F2D9866F52B8E8770E81EC327804EA

DESqmWrapper.dll

Trojan/Win32.Agent

1BA72A47060E965F5A8BF079702BFBED

DESqmWrapper.wrapper

BinImage/Plugx

B631661F8A4D0BC8DCEEA0BBD16F53C0

RasTls.dll

Trojan/Win32.PlugX

8DF01FBF7F9B72F56AF6FAE71C2C33C4

RasTls.dll.ak

BinImage/Plugx

 


 

 

댓글