Reversing/malware

Practical Malware Analysis [Lab 1-2]

string_ 2024. 10. 25. 11:29

Short bio

분석 환경 Windows XP

 

샘플 파일

1 Lab01-02.exe

 

 

Questions

1) VirusTotal Detections?

2) Packed/Obfuscated?

3) Import Hints?
4) Host Based Indicators?

 

1) VirusTotal Detections?

1) Lab01-2.exe

 

FileName Lab01-02.exe
MD5 8363436878404da0ae3e46991e355b83
SHA-256 c876a332d7dd8da331cb8eee7ab7bf32752834d4b2b54eaa362674a2a48f64a6
Detection ratio 59/72
Creation Time 2011-01-19 16:10:41 UTC

 

 

2) Packed/Obfuscated?

Lab01-02.exe 2011-01-19 16:10:41
Packed / Protector UPX (3.04) [NRV,best] 

 

Sections Tab

 

Virustotal 섹션 테이블에서. text ,. data가 아닌 UPX0, UPX1로 돼 있는 걸 확인할 수 있다.

 

upx란?

오픈소스로 제공되며 실행 파일을 압축하는 도구이다.

주로 프로그램 용량을 줄이기 위해서 실행 압축을 사용하는데 파일 내부에 압축해제 코드를 포함하여

실행 시 압축된 메모리에서 압축을 해제하고 실행한다.

 

기존 실행 코드가 압축되면서

PE 파일 내부 코드와 리소스가 감춰지는 효과가 있으므로 파일 크기를 줄이는 목적과

코드 리소스 보호를 위한 용도로도 사용된다

 

upx 언패킹은 upx 툴 내에서도 지원하고 수동 언패킹이 크게 까다롭지 않기 때문에

정확히는 실행 파일 보호가 목적이라면 실행압축보단 프로텍터를 사용하는 게 효과적이다.

 

upx 언패킹

upx -d -o Lab01-02_unpack.exe Lab01-02.exe

 

Sections (좌) 패킹 파일 , (우) 언패킹 파일

 

Import Address Table (좌) 패킹 파일 , (우) 언패킹 파일

 

언패킹 되고 섹션명과 IAT가 바뀐 것을 확인할 수 있다.

 

3) Import Hints?

 

Lab01-02.exe는 kernel32.dll , ADVAPI32.dll , MSVCRT.dll , WININET.dll 모듈을 import 한다.

CreateMutexA, OpenMutexA 사용을 보아

새로운 뮤텍스 개체를 생성하고 뮤텍스를 열거하는 작업을 하는데 해당 호출은

주로 중복 실행을 감지하는 데 사용된다.

SetWaitableTimer , SystemTimeToFileTime 시간과 관련된 함수도 사용하는 것을 확인할 수 있다.

CreateServiceA, OpenSCManagerA, StartServiceCtrlDispatcherA 같은 서비스 관련 함수가 사용되는데

해당 프로그램은 서비스를 등록하고 서비스를 시작하는 동작을 한다는 것을 파악해볼 수 있다.

마지막으로 InternetOpenUrlA , InternetOpenA를 사용하여 특정 URL을 여는 시도를 할 것으로 생각된다.

 

KERNEL32.DLL
  • CreateMutexA
  • CreateThread
  • CreateWaitableTimerA
  • ExitProcess
  • GetModuleFileNameA
  • OpenMutexA
  • SetWaitableTimer
  • SystemTimeToFileTime
  • WaitForSingleObject
 
ADVAPI32.dll
  • CreateServiceA
  • OpenSCManagerA
  • StartServiceCtrlDispatcherA
 
MSVCRT.dll
  • __getmainargs
  • __p___initenv
  • __p__commode
  • __p__fmode
  • __set_app_type
  • __setusermatherr
  • _adjust_fdiv
  • _controlfp
  • _except_handler3
  • _exit
WININET.dll
  • InternetOpenA
  • InternetOpenUrlA

 

 

4) Host Based Indicators?

Lab01-02.exe
strings MalService
Malservice
HGL345
http://www.malwareanalysisbook.com
Internet Explorer 8.0

 

명명된 서비스 이름으로 추정되는 MalService과 Mutex에 사용되는 HGL345 문자열을 확인할 수 있다.

특정 URL에 연결하기 위한 사이트 주소와 user-agent가 있는 HTTP 요청을 하기 위해

Internet Explorer 8.0라는 문자열도 보인다.

해당 프로그램은 따로 동적 분석을 하지 않고도

대충 어떠한 동작을 하는 프로그램일지 파악이 된다.

 

main()

main 함수에선 StartServiceCtrlDispatcherA, 서브루틴 sub_401040을 호출하는 것을 볼 수 있다.

StartServiceCtrlDispatcherA는 서비스 프로세스의 기본 스레드를 서비스제어관리자(SCM)에 연결하고

서비스 제어 신호를 처리할 수 있는 구조를 설정한다.

_SERVICE_TABLE_ENTRYA.lpServiceName이 MalService인 것을 알 수 있다.

 

중복 실행감지 루틴

 

"HGL345"라는 뮤텍스가 존재하는지 OpenMutexA 열거하여 확인하고

이미 실행되고 있을 때는 ExitProcess 종료루틴으로 빠진다.

실행되지 않았다면 CreateMutexA로 HGL345 뮤텍스 개체를 생성하는 것을 볼 수 있다.

 

Malservice 서비스 생성 루틴

 

뮤텍스를 생성했다면 OpenSCMangagerA로 서비스 제어 관리자에 대한 연결을 설정한다.

GetModuleFileNameA로 Lab01-02.exe 파일의 경로를 구한다.

아까 StartServiceCtrlDispatcherA로 등록한 Malservice 서비스를 생성한다.

 

StartServiceCtrlDispatcherA 함수를 통해서 서비스제어관리자(SCM)에 스레드가 접근할 수 있도록 하고

Lab01-02.exe를 Malservice 란 서비스 명을 만들어 system 실행과 동시에 지속적으로 실행되기 위해 동작한다.

 

타이머 설정

 

서비스를 생성하고 시간과 날짜에 대한 정보를 수집한다.

SystemTimeToFileTime 함수를 통해 시스템 시간을 파일 시간 형식으로 변환한다.

이때 파라미터를 확인하면 year에 해당하는 값이 2100으로 세팅되어 있는 것을 볼 수 있다.

연도에 대한 값을 2100년으로 지정하고 나머지는 0이기 때문에 1월 1일로 세팅된다.

CreateWaitableTimerA 호출로 대기 가능한 타이머 개체를 만들고

SetWaitableTimer 지정된 대기 가능 타이머를 활성화한다.

 

WaitForSingleObject는 지정된 개체가 신호 상태가 되거나 시간제한 간격이 경과할 때까지 기다리는 함수로

0 xFFFFFFFF 만큼 시간제한을 두고 있다.

즉 2100년이 오기까지 대기하다 다음코드를 실행한다.

 

타이머 신호를 받으면 CreateThread를 통해 총 20번의 스레드 생성을 호출한다.

 

StartAddress

 

스레드 시작 주소인 StartAddress를 살펴보면 다음과 같다.

User-Agent Internet Explorer 8.0으로 http://www.malwareanalysisbook.com  해당 URL을 여는 작업을 한다.

여기서 중요한 내용은 URL을 열고 다음 코드 jmp loc_40116D를 하는데 loc_40116D는

InternetOpenUrlA를 호출하는 곳을 담고 있는 주소이다. 즉 이 동작이 무한 반복된다는 것이다.

 

20개의 스레드에서 http://www.malwareanalysisbook.com 해당 URL로 무한히 접속을 시도하게 되는데

이는 시스템 마비를 유발할 DOS Attack을 시도하는 악성코드인 것을 알 수 있다.

정리하면 Malservice가 SERVICE_AUTO_START로 등록되어 시스템이 시작될떄

해당 서비스가 자동으로 실행되도록 한뒤 2100년 1월 1일이 되면 loc_401120로 넘어가서

스레드 20개가 생성되고 해당 스레드에선 특정 사이트에 접속하는 행위를 무한 루프에 의해 끝나지 않고 실행된다.