악성코드 분석/Practical Malware Analysis 실습

[Practical Malware Analysis] Lab 01

sec_kero 2023. 5. 1. 22:06

실습 1-1)

 

1. http://www.VirusTotal.com/에 파일을 업로드한후 보고서를 보자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?

 

VirusTotal 보고서

 

- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.

 

 

2. 이 파일은 언제 컴파일됐는가?

 

01.exe PEview 정보
01.dll PEview 정보

 

- 2010. 12. 19에 컴파일된 것으로 보인다.

 

 

3. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가?

 

- Exeinfo PE로 분석한 결과 패킹이 되어있지 않아 보인다.

 

 

4. 임포트를 보고 악성코드 행위를 알아낼 수 있는가? 그렇다면 어떤 임포트인가?

 

01.exe import 함수
01.dll import 함수

- 자세한 것은 동적분석도 해야 알겠지만, 정적분석만으로 보았을 때 01.exe 파일에서는 CopyFileA가 그나마 악성코드 행위와 관련 있어 보인다. 5번 질문에서 답할 내용이지만, kernel132.dll을 만들 때 사용할 것으로 보인다.

 

   01.dll 파일에서는 ws2_32.dll의 import 함수들이 악성코드 행위와 관련되어 보인다. ws2_32.dll은 "윈도우 소켓"과 관련된 라이브러리로, 네트워크 통신에 사용된다. 6번 질문의 답인 특정 IP 주소와 통신을 할 때 해당 라이브러리의 함수를 사용할 것으로 보인다.

 

(ws2_32.dll 에서 사용된 함수들)

3 closesocket

4 connect

9 htons

11 inet_addr

16 recv

19 send

22 shutdown

23 socket

115 WSAstartup

116 WSAcleanup

 

+) WS2_32.dll 함수들 참고

https://hackability.kr/entry/WS232dll-wsock32dll-Ordinal-%EC%9D%B4%EB%A6%84%EC%97%90-%EB%8C%80%ED%95%9C-%EC%8B%A4%EC%A0%9C-%ED%95%A8%EC%88%98-%EC%9D%B4%EB%A6%84

 

 

5. 감염된 시스템에서 검색할 수 있는 다른 파일이나 호스트 기반이 증거가 존재하는가?

 

 

- 정상파일인 kernel32.dll과 이름이 유사한 kerne132.dll 파일을 만들어내는 것으로 보인다.

 

 

6. 감염된 장비에서 이 악성코드를 발견하기 위해 사용한 네트워크 기반의 증거는 무엇인가?

 

 

- dll 파일에서 통신대상으로 보이는 IP(127.26.152.13) 주소를 확인할 수 있었다.

 

 

7. 이 파일의 목적은 무엇이라고 판단했는가?

 

- exe 파일은 dll 파일을 생성하고 실행하기 위한 목적으로 보인다. 본격적인 악성행위는 dll 파일에서 실행되는 것으로 보이며, dll 파일은 특정 서버와 통신하기 위한 목적으로 보인다.

 

 

 


 

실습 1-2)

1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?

 

VirusTotal 보고서

 

- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.

 

 

2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있다면 언패킹 해보자.

 

Exeinfo PE 정보

 

- Exeinfo PE를 이용해 분석한 결과 upx로 패킹된 것을 알 수 있었다.

 

 

PEview로 분석한 결과 패킹되어 있을 때는 "UPX"로 표시되었던 section 이름이, 언패킹 후에는 "text", "rdata", "data"의 정상적인 PE 파일 섹션의 이름으로 변경된 것을 볼 수 있었다.

 

 

3. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?

 

 

- 위의 사진에서 고른 함수들이 악성행위에 사용될 법한 함수들로 보인다. 

 

함수 분류
기능별 함수 이름 함수 설명
서비스 CreateServiceA 서비스 개체를 만들고 지정된 서비스 제어 관리자 데이터베이스에 추가합니다.
StartServiceCtrlDispatcherA SCM(서비스 제어 관리자)에 연결하고 컨트롤 디스패처 스레드를 시작합니다.
OpenSCManagerA 이 함수는 지정한 컴퓨터의 SCM과 연결하며 해당 컴퓨터의 서비스 DB에 연결한다.
뮤텍스(다중 실행 방지용) OpenMutexA 기존의 이름 뮤텍스 오브젝트를 오픈하고, 그 핸들을 취득합니다.
CreateMutexA 이미 있거나 만들어지지 않은 뮤텍스 개체를 만들거나 엽니다.
스레드 생성 CreateThread 호출 프로세스의 가상 주소 공간 내에서 실행할 스레드를 만듭니다.
인터넷 연결 InternetOpenUrlA 전체 FTP 또는 HTTP URL로 지정된 리소스를 엽니다.
InternetOpenA 애플리케이션의 WinINet 함수 사용을 초기화합니다.

 

4번에서 서술한 증거들을 토대로 보았을 때 일종의 악성행위를 하는 서비스(MalService)를 등록 및 실행하고, 특정 주소(http://www.malwareanalysisbook.com)에 연결하는 프로그램으로 보인다.

 

정확한 악성행위의 흐름은 동적분석을 해야 파악될 것으로 보인다.

 

 

4. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?

 

 

호스트 기반의 증거로는 서비스 이름으로 보이는 "MalService"와 위의 정보만으로는 뭔지 모르겠지만 특정 값으로 보이는 "HGL345"가 있다. 네트워크 기반의 증거로는 "http://www.malwareanalysisbook.com" 이라는 url 주소가 있다.

 

 

 


실습 1-3)

 

1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?

 

VirusTotal 정보

 

- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.

 

 

2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.

 

Exeinfo PE 정보

 

- Exeinfo PE를 통해 확인한 결과, 알 수 없는 파일이지만 100% 패킹이 되었다는 문구를 볼 수 있었다. 해당 파일은 수동 언패킹을 해야 할 것으로 보인다. 

  필자는 x32dbg을 통해 언패킹을 하고 플러그인인 Scylla를 이용해 덤프 파일을 만들었다. 언패킹 한 파일은 3번 질문에서 이어서 분석한다.

 

 

3. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?

 

 

- 솔직하게 필자는 이 함수들로는 어떤 악성행위를 할 수 있는지 감이 잡히지 않는다. 다른 챕터들을 진행하다 보면 알게 되지 않을까 싶어 지금은 넘어가려 한다.

 

 

4. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?

 

pestudio 정보

 

strings를 확인해 본 결과 의도는 모르겠지만 악성 주소로 보이는 "http://www.malwareanalysisbook.com/ad.html"을 볼 수 있었다. 

 

 

 


실습 1-4)

 

1. http://www.VirusTotal.com/에 파일을 업로드하자. 기존 안티바이러스 시그니처에 일치하는 파일이 존재하는가?

 

VirusTotal 정보

 

- 이 글을 작성한 시점에서는 이미 여러 안티바이러스에 악성파일로 인식되었다.

 

 

2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.

 

ExeinfoPE 정보

 

- ExeinfoPE를 이용해 확인한 결과 패킹이 되어있지 않는 것으로 보인다.

 

 

3. 이 프로그램은 언제 컴파일됐는가?

 

 

- Time Data Stamp를 보아 2019. 08. 30에 컴파일된 것으로 보인다.

 

 

4. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?

 

 

- 악성행위와 관련되어 보이는 임포트 함수들을 정리하면 다음과 같다.

함수 분류
기능별 함수 이름 함수 설명
권한 취득 및 상승 OpenProcessToken 프로세스와 연결된 액세스 토큰을 엽니다.
LookupPrivilegeValueA 지정된 권한 이름을 로컬로 나타내기 위해 지정된 시스템에서 사용되는 LUID(로컬 고유 식별자)를 검색합니다.
AdjustTokenPrivileges 지정된 액세스 토큰 의 권한을 활성화하거나 비활성화합니다.
함수 및 스레드 실행 GetProcAddress 지정된 DLL(동적 연결 라이브러리)에서 내보낸 함수(프로시저라고도 함) 또는 변수의 주소를 검색합니다.
LoadLibraryA 지정된 모듈을 호출 프로세스의 주소 공간에 로드합니다. 지정된 모듈로 인해 다른 모듈이 로드될 수 있습니다.
GetCurrentProcess 현재 프로세스에 대한 의사 핸들을 검색합니다.
CreateRemoteThread 다른 프로세스의 가상 주소 공간에서 실행되는 스레드를 만듭니다.
프로그램 실행 WinExec 지정된 응용 프로그램을 실행합니다.
경로 탐색 GetWindowsDirectoryA Windows 디렉터리의 경로를 검색합니다.
GetTempPathA 임시 파일에 대해 지정된 디렉터리의 경로를 검색합니다.
파일 생성 및 수정 WriteFile 지정된 파일 또는 I/O(입/출력) 디바이스에 데이터를 씁니다.
CreateFileA 파일 또는 I/O 디바이스를 만들거나 엽니다.
MoveFileA 자식을 포함하여 기존 파일 또는 디렉터리를 이동합니다.
리소스 추출 SizeofResource 지정된 리소스의 크기(바이트)를 검색합니다.
FindResourceA 지정된 모듈에서 지정된 유형 및 이름을 가진 리소스의 위치를 ​​결정합니다.
LoadResource 메모리에서 지정된 리소스의 첫 번째 바이트에 대한 포인터를 가져오는 데 사용할 수 있는 핸들을 검색합니다.

 

   함수들의 기능으로 보았을 때, 위 프로그램은 기본적으로 권한을 상승시켜서 행위를 하는 것으로 보인다. (악성파일로 추정되는) 리소스 파일을 추출하여 새로운 파일을 만들고, 특정 경로로 이동시켜서 실행할 것으로 보인다.

 

 

 

5. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?

 

- 6번의 질문과 연관된 내용이라 해당 질문에서 답하였다.

 

 

6. 이 파일은 리소스 섹션에 하나의 리소스가 있다. Resource Hacker를 이용해 리소스를 점검하고 리소스를 추출해보자. 리소스로부터 무엇을 알 수 있는가?

 

Resource Hacker

 

- Resource Hacker를 통해 보니, 리소스로 PE파일이 들어가 있는 것을 알 수 있었다. 해당 파일을 따로 추출해서 분석했다.

 

리소스 파일 import
리소스 파일 strings

 

- 리소스 파일의 import 함수와 strings를 보니, 리소스 파일은 "http://www.practicalmalwareanalysis.com/updater.exe"라는 주소(네트워크 기반의 증거)의 파일을 URLDownloadToFileA 함수를 이용해 접근해서 다운로드하고 이를 실행하는 악성파일로 보인다.

 

- 또한 strings에서 볼 수 있는 "winup.exe", "wupdmgrd.exe"는 그럴싸한 실행파일로 보이지만 인터넷에 검색해 본 결과 실제로 사용되는 파일로 보이지 않는다. 해당 파일들(호스트 기반의 증거)은 이름을 위장한 악성코드 파일로 보이며, 이 리소스 파일은 해당 파일들을 생성 및 실행할 것으로 보인다.