보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

PostScript를 이용한 한글 악성코드 분석보고서

2019.01.02

9,744


 

 

 

1. 개요

 

과거로부터 현재까지 악성코드는 안티 바이러스 제품이나 기타 보안 솔루션을 우회하여 시스템을 성공적으로 장악하기 위해 다양한 기술전략을 구사해 왔다. 악성코드 전파의 주요 통로로 사용되는 이메일의 문서파일 첨부는 파급력이 커 공격자들이 애용하는 공격수단 중 하나이다. 금번 보고서를 통해 한글 워드 프로세서의 PostScript 기능을 악용한 문서형 악성코드를 알아보자.

 

 

2. 기본 정보

 

분석에 사용된 샘플은 한글 워드 프로세서 파일 1건이며, 한글 문서 내 삽입된 악성 PostScript에서 추가 악성코드들을 생성하고 부팅 시 자동 실행하도록 등록한다. 감염된 시스템을 재부팅 할 경우 C2 서버 접속을 시도하고, 하드디스크의 MBR 영역을 손상시켜 시스템은 더 이상 부팅되지 않는다.

 

 

구 분

내 용

프로세스

ㆍ시스템 모니터링 및 분석 도구 탐지

Anti-Debugging / Anti-VM 구현

ㆍ시스템 강제 재시작

파일

ㆍ추가 악성코드 생성

MBR 영역 파괴

네트워크

C2 서버 접속 시도

 

[표 1] 악성코드 영향

 

 

1) 악성코드 정보

 

아래 [그림 1]은 분석에 사용된 샘플의 전체 악성행위 구성도이다.

 

 

[그림 1] 악성코드에 의한 시스템 영향

 

 

아래 [표 2]는 분석에서 식별된 악성코드 정보를 나타낸다.

 

 

 

파일명

파일 크기

파일 형식

MD5

1

.hwp

420-KB
(430,080-Bytes)

HWP

804A8C076B4AAA2E21AB4F06453D1C4E

2

MemCacheLog24.vbs

130-Bytes

Visual Basic Script

A119BD07E7CDC736EDBC2C3480019A75

3

Cache51.bat

147-Bytes

Windows Batch

62F1721AB6A8F3E1B9C906A8EFBA7508

4

Pemnn01.hje01

2-Bytes

-

AC6AD5D9B99757C3A878F2D275ACE198

5

Pemnn02.hje01

549-KB
(562,845-Bytes)

-

74A67B04FC5F790A685AE8A84D8DA3A3

 

[표 2] 악성코드 정보

 

 

2) 네트워크 정보

 

아래 [표 3]은 악성코드와 연관된 네트워크 정보이다.

 

 

 

파일명

IP 주소

URL 주소

1

_

_

api[.]pcloud[.]com

 

[표 3] 네트워크 정보

 

 

3. 악성코드 분석

 

1) ※ 기록부.hwp 분석

 

악성 한글 파일을 열람할 경우 아래 [그림 2]와 같은 화면이 나타난다.

 

 

[그림 2] 악성 한글 파일

 

 

악성 한글 파일은 PostScript를 포함하고 있어 해당 스크립트를 읽고 실행하기 위해 정상 프로세스 gbb.exe와 정상 모듈 gsdll32.dll을 불러온다.

 

 

[그림 3] gbb.exe 프로세스

 

 

[그림 4] gsdll32.dll 내부의 PostScript 실행 루틴

 

 

분석 도구를 이용해 악성 한글 파일 내에 삽입된 PostScript를 확인할 수 있다.

 

 

[그림 5] 악성 한글 파일 내 PostScript 확인

 

 

PostScript는 /envstr 변수에 감염 시스템의 %AppData% 경로를 저장한다. 이후 추가적으로 생성할 악성코드들에 대한 이미지 경로를 정의한다. MemCacheLog24.vbs는 자동 실행을 위해 시작 프로그램 폴더에 생성된다.

 

① [HDD 이름]:Users[사용자 계정명]AppDataRoamingMicrosoftWindowsStart MenuStartupMemCacheLog24.vbs

② [HDD 이름]:Users[사용자 계정명]AppDataRoamingCache15.bat

③ [HDD 이름]:Users[사용자 계정명]AppDataRoamingPemnn01.hje01

④ [HDD 이름]:Users[사용자 계정명]AppDataRoamingPemnn02.hje01

 

 

[그림 6] PostScript 분석 I

 

 

정의된 이미지 경로에 추가 악성코드들을 생성한다. 해당 악성코드들의 소스코드는 PostScript에 하드코딩 되어 있다.

 

 

[그림 7] PostScript 분석 II

 

 

MemCacheLog24.vbs는 부팅 시 자동 실행되며, 단순히 Cache51.bat 배치 파일을 실행한다.

 

 

[그림 8] MemCacheLog24.분석

 

 

Cache51.bat 배치 파일은 확장자가 hje01인 모든 파일을 결합하여 MemoryOrder85584031.com이라는 새로운 파일을 생성 및 실행한 후 해당 파일을 삭제한다.

 

 

[그림 9] Cache51.bat 분석

 

 

PostScript는 확장자가 hje01인 파일 Pemnn01과 Pemnn02를 생성한다. 먼저, Pemnn01은 단순히 MZ 시그니처로만 구성되어 있다.

 

 

[그림 10] PostScript 분석 III

 

 

한편, Pemnn02는 루프를 돌면서 PostScript의 맨 마지막에 나타난 페이로드로 구성된다.

 

 

[그림 11] PostScript.분석 IV

 

 

Pemnn01 파일과 Pemnn02 파일을 각각 확인해보면 Win32 EXE 실행파일을 2개의 파일로 분리했다는 것을 확인할 수 있다. 이는 안티 바이러스 제품의 실시간 탐지 기능을 우회하기 위한 것으로 판단된다.

 

 

[그림 12] Pemnn01 파일

 

 

[그림 13] Pemnn02 파일

 

 

결과적으로, 악성 한글 파일 내부에 삽입된 PostScript가 실행되면서 추가 악성코드들이 다음과 같은 폴더에 생성된다.

 

 

[그림 14] 추가 악성코드의 자동 실행 등록

 

 

[그림 15] MemoryOrder85584031.com 생성을 위한 추가 악성코드

 

 

감염된 시스템은 부팅 시 MemCacheLog24.vbs 스크립트의 자동 실행에 의해 %AppData% 경로에 존재하는 Cache51.bat 배치파일을 실행한다. Cache51.bat 배치파일은 hje01 확장자 파일들을 결합하여 온전한 Win32 EXE 실행파일인 MemoryOrder85584031.com 파일을 생성 및 실행하여 악성행위를 수행한다.

 

 

2) MemoryOrder85584031.com 분석

 

 

감염된 시스템을 재부팅 할 경우 추가 악성코드인 MemoryOrder85584031.com 프로세스가 실행된다. C2 서버(api[.]pcloud[.]com)에 접속을 시도하지만, 분석 시점을 기준으로 해당 C2 서버는 폐쇄되어 있었다.

 

 

[그림 16] 추가 악성코드 실행

 

 

[그림 17] C2 서버 접속 실패

 

 

악성코드에 의해 강제 재시작 명령이 수행되고, 재시작 시 부팅이 불가능한 것을 확인하였다.

 

 

[그림 18] 강제 재시작 메시지 출력

 

 

[그림 19] 부팅 불가

 

 

MemoryOrder85584031.com 프로세스는 분석가에 의한 악성코드 분석을 회피하기 위해 아래와 같은 분석 도구들이 실행되고 있는지 검사한다. 해당 도구가 실행되고 있을 경우 악성행위를 중단한다.

 

① 파일 모니터링 도구 : Filemon

② 프로세스 모니터링 도구 : Procexp(Process Explorer), Procmon(Process Monitor)

③ 네트워크 모니터링 도구 : Wireshark, Tcpview, Fiddler

④ 레지스트리 모니터링 도구 : Regmon, Autoruns(자동 실행 탐지)

⑤ 디버깅 도구 : Ollydbg

 

 

[그림 20] 시스템 모니터링 및 분석 도구 탐지 루틴

 

 

MemoryOrder85584031.com 프로세스는 정상 프로세스 cmd.exe를 생성한다.

 

 

[그림 21] cmd.exe 프로세스 생성

 

 

아래 [그림 22]와 같이 1바이트 XOR 디코딩 연산을 수행하여 MemoryOrder85584031.com 프로세스의 메모리 0x40BC58번지에 악성 쉘코드를 복호화한다.

 

 

[그림 22] 디코딩 루틴 I

 

 

[그림 23] 디코딩 (전)

 

 

[그림 24] 디코딩 (후)

 

 

정상 프로세스 cmd.exe의 메모리에 대한 접근 권한을 설정한다.

 

 

[그림 25] 메모리 접근 권한 설정

 

 

cmd.exe 프로세스에 추가적인 메모리를 할당한다.

 

 

[그림 26] 추가 메모리 할당

 

 

cmd.exe 프로세스에 추가 할당된 메모리에 디코딩된 악성 쉘 코드를 주입한다.

 

 

[그림 27] 악성 쉘 코드 주입

 

 

cmd.exe 프로세스가 악성 쉘 코드를 실행하도록 하는 스레드를 인젝션한다.

 

 

[그림 28] 스레드 인젝션

 

 

다음은 MemoryOrder85584031.com 프로세스에 의해 스레드 인젝션된 cmd.exe 프로세스를 나타낸다.

 

 

[그림 29] 스레드 인젝션된 cmd.exe

 

 

3) cmd.exe 분석

 

cmd.exe 프로세스 내 악성 쉘 코드는 추가적인 메모리(0x02700000번지)를 확보하고, 아래 [그림 30]과 같이 4바이트 XOR 디코딩 연산을 수행한다.

 

 

[그림 30] 디코딩 루틴 II

 

 

아래 [그림 31]은 악성 쉘 코드의 일부 영역으로 XOR 연산에 사용되는 4바이트 복호화 키 셋을 가지고 있다.

 

 

[그림 31] 복호화 키 셋

 

 

[그림 32] 디코딩 (전)

 

 

[그림 33] 디코딩 (후)

 

 

디코딩 루틴 II에서 복호화된 값들은 추가 할당된 메모리에 저장된다. 디코딩 연산이 종료된 후 해당 메모리를 확인해보면 완전한 PE 포맷 파일을 확인할 수 있다.

 

디코딩 루틴 II에 의해 복호화된 메모리 영역을 추출하여 PE 포맷 파일을 분석한 결과이다. 해당 PE 포맷 파일의 .rdata 영역에 존재하는 IAT(Import Address Table)을 확인해보면 WinHttp.dll과 WinInet.dll을 불러오도록 하고 있다. 이를 통해 해당 PE 이미지가 실행될 경우 C2 서버로의 접속을 시도할 것으로 유추해볼 수 있다.

 

 

[그림 34] PE 포맷 파일 분석

 

 

[그림 35] PE 포맷 파일의 IAT

 

 

악성 쉘 코드는 또 다른 추가 메모리(0x02900000번지)를 확보한다. 그 후 위의 디코딩 루틴 II에서 복호화한 PE 포맷 파일을 아래 [그림 36]과 같은 루프를 통해 추가 확보된 메모리에 매핑한다.

 

 

[그림 36] PE 포맷 파일의 메모리 매핑

 

 

[그림 37] 메모리 매핑 (전)

 

 

[그림 38] 메모리 매핑 (후)

 

 

메모리 매핑이 끝난 후 매핑된 PE 이미지의 .text 영역으로부터 0x2B265만큼 떨어진 주소로 이동한다.

 

 

[그림 39] 메모리 매핑된 주소로 이동

 

 

이후 매핑된 PE 이미지의 .text 영역으로부터 0x1B440만큼 떨어진 주소에서 시작하는 스레드를 생성한다.

 

 

[그림 40] 스레드 생성

 

 

생성된 스레드는 C2 서버(api[.]pcloud[.]com)로 연결하는 HTTPS 세션을 생성한다.

 

 

[그림 41] HTTPS 세션 생성

 

 

연결되는 URL은 /getfilelink?path=/29D4492D007E650B&forcedownload=1&skipfilename=1이다.

path 파라미터로 전달되는 값은 통신을 수행할 때 임의로 지정된다.

 

 

[그림 42] HTTPS 요청 메시지 생성(GET 메서드)

 

 

악성 URL로부터 응답 메시지를 JSON 객체 형태로 수신한다.

 

 

[그림 43] HTTPS 응답 메시지 수신

 

 

악성 URL과의 HTTPS 통신을 시도하지만 분석 시점을 기준으로 C2 서버는 폐쇄된 상태이다.

 

 

[그림 44] C2 서버와의 통신 실패

 

 

이후 스레드는 하드디스크로 접근을 시도한다.

 

 

[그림 45] 하드디스크 접근

 

 

부팅 시 "FAAAA...Sad..." 문자열이 출력되도록 MBR(Master Boot Record) 영역을 변조한다.

 

 

[그림 46] 하드디스크 MBR 훼손

 

 

[그림 47] MBR 변조 (전)

 

 

[그림 48] MBR 변조 (후)

 

 

스레드는 MBR 변조 후 시스템을 강제로 재시작하도록 하는 Windows 명령(shutdown /r)을 수행한다.

 

 

[그림 49] 시스템 강제 재시작

 

 

Windows 명령에 의해 재시작 메시지가 출력되고, 재부팅 시 변조된 MBR 영역의 문자열을 출력하며 더 이상 부팅되지 않는다.

 

 

[그림 50] 강제 재시작 메시지 출력

 

 

[그림 51] 부팅 불가

 

 

다음은 스레드 인젝션된 악성 cmd.exe 프로세스 내에 구현된 Anti-Debugging 및 Anti-VM에 관한 내용이다.

 

 

[그림 52] Anti-Debugging 기법 I : GetTickCount() API를 이용한 디버깅 탐지

 

 

[그림 53] Anti-Debugging 기법 II : IsDebuggerPresent() API를 이용한 디버깅 탐지

 

 

[그림 54] Anti-VM 기법 I : 레지스트리 키를 이용한 VMware 탐지

 

 

[그림 55] Anti-VM 기법 II : 적재된 DLL을 이용한 SandBoxie 및 SandBox 탐지

 

 

악성 cmd.exe 프로세스를 디버깅하고 있을 때, 해당 기법을 우회하지 못할 경우 예외(Exception)가 발생하여 악성 cmd.exe 프로세스가 종료되는 것을 확인하였다.

 

 

4. 대응방안

 

 

본 보고서에서 분석한 샘플은 한글 문서에 포함된 PostScript가 실행되어 추가 악성행위가 발생한다. 따라서 다음과 같은 대응방안을 권고한다.

 

1) 한컴오피스 업데이트 및 패치 : [시작] - [한글과컴퓨터] - [한컴 자동 업데이트] - [업데이트]


 

 

2) 안티 바이러스 제품 실시간 검사 및 업데이트

 

3) 방화벽 또는 IPS에서 IoC 정보 탐지 및 차단