전공영역 공부 기록

한글문서 악성코드 분석 - 포스트스크립트 유형

악분 2020. 7. 21. 20:06
반응형

악성코드 링크: https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/

 

프로세스모니터 로그 다운로드 링크: https://drive.google.com/file/d/1lWUZROg7r0-zKW8U-0IF-UIokqFgrWrW/view?usp=sharing

 

사용도구: hwpscan2, ghostscript,

ghostscript: https://www.ghostscript.com/download/gsdnld.html

 

영상링크: https://youtu.be/8JWlf5zk4DI


1. 행위분석

한글문서를 열자마자 바로 악성코드가 실행됩니다. 악성코드의 목적은 인터넷 익스플로러를 실행하고 코드 인젝션을 합니다.

그림1 한글문서 실행결과

 

gbb.exe와 gswin32c.exe는 동일한 eps파일을 실행하여 인터넷 익스플로러를 인젝션합니다.

그림2 eps파일을 실행하는 gbb.exe

 

그림3 eps파일을 실행하는 gswin32c.exe

 

eps는 압축된 포스트스크립트로서 한글에서 고화질 벡터 이미지를 보여줄때 사용합니다. 한글문서에서 아주 작은 크기를 갖는 그림이 있습니다. 이 그림이 바로 악성코드입니다.

그림4 숨겨진 포스트스크립트

 

2. 악성코드 추출

챕터2에서는 한글파일이 실행하는 악성코드인 EPS를 추출합니다.

2.1 EPS스크립트 추출

hwpscan2도구를 사용해서 한글파일에 존재하는 포스트스크립트를 추출합니다.

* Root Entry → BinData → BIN0003.eps 오른쪽 마우스를 클릭 후 Save a Hex(Decompress)

그림5 포스트스크립트 추출

 

포스트스크립트 추출 결과는 https://github.com/TipsforMalwareanalysis/HWP_malware/blob/master/f2e936ff1977d123809d167a2a51cdeb/1_uncompress_epsfile.gs 에서 볼 수있습니다.

 

포스트스크립트는 실행 중 XOR연산으로 암호화된 페이로드를 복호화 합니다. 복호화키는 100입니다.

그림6 페이로드 복호화

 

2.2 EPS스크립트 실행: 페이로드 복호화

복호화된 페이로드를 얻기 위해 파이썬 등 복호화 스크립트를 작성해도 되고 ghostscript 쉘에서 직접 포스트스크립트를 실행해도 됩니다. 저는 ghostscript 쉘을 사용하겠습니다. 주의사항은 ghostscript 버전 9.26버전을 다운로드 받으세요. 최신 버전으로 ghostscript 쉘은 문법오류가 발생합니다.

그림7 ghostscript 쉘 다운로드 링크: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases

ghostscript 쉘 프로그램인 gswin64c.exe(32비트: gswin32c.exe)를 실행합니다. 그리고 포스트스크립트경로와 run명령어를 차례대로 입력하고 Enter를 누릅니다.

1. 파일 경로 중간중간에 있는 역슬래쉬는 슬래쉬로 변경

2. 파일 경로는 괄호로 묶기

그림8 포스트스크립트 실행 결과

 

ghostscript쉘 실행결과는 https://github.com/TipsforMalwareanalysis/HWP_malware/blob/master/f2e936ff1977d123809d167a2a51cdeb/2_decrypt_ghostscript.bin 에서 볼 수 있습니다.

복호화 된 페이로드 중 909줄에 \x90으로 시작하는 긴 데이터가 보입니다. \x90이 연달아 있는 것으로 보아 NOP Sled가 있는 쉘코드라는 것을 추측할 수 있습니다.

그림9 복호화 결과 중 쉘코드

 

2.3 쉘코드 저장

쉘코드를 복사한 후 hxd에 붙여넣기합니다. 주의사항은 Offset이 있는 공간에 붙여넣어야 합니다. 오른쪽 Deocded text에 붙여넣으시면 쉘코드가 문자열로 인식합니다. 붙여넣기가 끝났으면 File → Save로 쉘코드를 저장합니다.

그림10 쉘코드 저장

 


3. 쉘코드 실행 및 분석

챕터3에서는 추출한 쉘코드를 실행하는 방법과 분석을 진행합니다.

3.1 쉘코드를 exe파일로 변환

shellcode2exe.py스크립트로 쉘코드를 exe파일로 변환 시킬 수 있습니다. shellcode2exe.py는 remnux에 기본설치되어 있습니다.

그림11 쉘코드 변환 결과

 

3.2 쉘코드 실행

x32dbg로 쉘코드.exe를 실행합니다. 쉘코드 시작인 \x90이 바로 보입니다.

그림12 쉘코드 디버깅

쉘코드는 백신탐지를 회피하기 위해 암호화되어 있습니다. 실행 중에 여러 단계를 걸쳐 복호화가 됩니다.

그림13 쉘코드 복호화

 

3.3 코드 인젝션

행위분석 [그림 1]에서 쉘코드는 인터넷 익스플로러를 자식 프로세스로 실행하는 것을 알고 있습니다. 그러므로 CreateProcessA함수에 브레이크포인트를 설정하여 실행합니다. CreateProcess함수에 실행이 멈춥니다. 스택창을 확인하면 인터넷 익스플로러를 자식 프로세스로 실행하기 위해 파일 경로를 인자로 사용했습니다.

그림14 CreateProcessA함수 스택창 ​

 

Run to user code(Alt + F9)를 눌러서 CreateProcessA함수를 호출한 곳으로 이동합니다. Process Hacker를 관리자 권한으로 실행하고 iexplorer.exe를 확인하면 일시정지 상태로 되어 있습니다. 코드 인젝션을 하기 위해 프로세스를 잠시 실행을 멈춘 것입니다.

그림15 일시정지로 실행된 iexplorer.exe

코드 인젝션은 WriteProcessMemory → CreateRemoteThread순서로 수행됩니다. WriteProcessMemory함수는 iexplorer.exe가 실행할 악성코드를 삽입합니다. CreateRemoteThread함수는 삽입한 악성코드를 실행합니다.

3.3.1 WriteProcessMemory: 악성코드를 자식 프로세스에 인젝션

WriteProcessMemroy함수에 브레이크포인트를 설정하고 실행합니다. 설정한 브레이크포인트에 멈추면 스택창 2, 3, 4번째 인자를 확인하면 어떤 프로세스의 메모리 주소에 어떤 데이터를 쓰려고하는지 알 수 있습니다. (영상: https://youtu.be/8JWlf5zk4DI?t=960)

  •   2번째 인자: 프로세스 핸들
  •   3번째 인자: 데이터를 쓸 메모리 주소(iexplorer.exe의 메모리 주소)
  •   4번째 인자: 쓸 데이터(악성코드)

그림16 WriteProcessMemory 스택창 ​

 

Alt + F9를 누른 후 iexplorer.exe 메모리에 데이터가 잘 써졌는지 확인해봅시다. Process hacker 메모리 탭으로 이동하고 [그림 16]에서 확인한 메모리 주소(세번째 인자)를 더블 클릭합니다. 해당 메모리 주소에 있는 데이터는 [그림 16]의 스택창 4번째 인자가 저장한 데이터와 동일합니다.

그림17 인젝션 확인

 

3.3.2 CreateRemoteThread: 인젝션한 코드 실행

CreateRemoteThread에 브레이브포인트를 설정하고 실행합니다. 브레이크포인트에 멈추면 스택창 5번째 인자를 확인합니다. 5번째 인자는 쓰레드가 실행하고자 하는 메모리 주소입니다. 0x0257000는 인젝션한 악성코드가 있는 메모리 주소입니다.

그림18 CreateRemoteThread 인자 확인

 

Alt + F9를 누르고 Process Hacker를 확인하면 iexplorer.exe가 일시정지 상태에서 실행 상태로 바뀐 것을 확인할 수 있습니다.

그림19 인젝션 코드 실행

 

3.4 인젝션 악성코드 저장

Process Hacker로 인젝션한 악성코드를 저장합니다. Memory탭에서 0x2570000를 더블 클릭하면 메모리 창이 열립니다. 오른쪽 아래에 메모리 데이터를 저장하는 Save버튼을 클릭합니다.

그림20 인젝션한 악성코드 저장

 

 

4. 인젝션한 악성코드 분석

cape샌드박스 링크: https://capesandbox.com/submit/status/27731/

anyrun샌드박스 링크: https://app.any.run/tasks/bfc8c9aa-0156-4533-9290-ddfaef00d3ef

 

샌드박스 분석 결과에서 네트워크 연결행위가 발견됩니다. 현재 존재하지 않기 때문에 다른 악성행위는 발견되지 않습니다.

 

그림21 CAPE 샌드박스 분석

 

네트워크 연결에 사용된 API함수는 InternetOpenURLA입니다. 동적 분석에 중요한 힌트가 됩니다.

그림22 CAPE 샌드박스 분석 - API

 

동적 분석을 하기 위해서는 [그림 11]처럼 추출한 데이터를 exe파일로 변경해야 합니다. 현재 공격자 서버가 없으므로 동적 분석 설명은 생략합니다. 영상에서 별도로 확인하실 수 있습니다.

 

5. ATT&CK Matrix

링크: https://s3.us-west-2.amazonaws.com/secure.notion-static.com/66b3aa77-e231-4657-b5dc-5168328c82af/layer_%281%29.svg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAT73L2G45O3KS52Y5%2F20200721%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20200721T053207Z&X-Amz-Expires=86400&X-Amz-Signature=7f7573ef1bef96d8de17b6271b9bbcc06e1150405d2fa7d1af9114c2a12c8cc8&X-Amz-SignedHeaders=host

6. IOC

6.1 파일(md5)

  • 포스트스크립트 파일: 6962c7ebac3e6c2d5c6dfc6fbd5e1847
  • 쉘코드(raw data): 9934ee53dd44ba4824a1f687eb5e1d95
  • 인젝션한 악성코드: 113a73f1003ad9a7fb6dd0febbf0a958

6.2 네트워크

  • itoassn.mireene.co.kr/shop/shop/mail/com/mun/down.php

7. 참고자료

ghostscript 다운로드 링크: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases

분석보고서(영문): https://norfolkinfosec.com/how-to-analyzing-a-malicious-hangul-word-processor-document-from-a-dprk-threat-actor-group/

http://rinseandrepeatanalysis.blogspot.com/2018/12/analyzing-windows-shellcode-triage.html

반응형