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

[Practical Malware Analysis] Lab 03

sec_kero 2023. 5. 6. 12:55

실습 3-1)

 

1. 악성코드의 임포트 함수와 문자열은 무엇인가?

 

Die 정보

 

- 01.exe 파일의 정보를 확인한 결과 패킹되어있지는 않았으며, 어셈블리로 제작된 프로그램으로 보인다.

 

pestudio 정보

 

  pestudio를 이용해 해당 파일의 임포트 함수와 문자열들을 확인한 결과, 임포트 함수로는 ExitProcess 만을 볼 수 있었다. 얻을 수 있는 문자열 중 악성행위에 이용될 것으로 의심되는 문자열들은 위 사진에서 빨간펜으로 골라놨다. 자세한 내용은 동적분석까지 하고서 파악할 수 있을 것 같다.

  보통 프로그램의 임포트 함수로 ExitProcess만 존재하는 경우는 거의 없기 때문에, 뭔가 숨겨놓은 것이 있지 않을까 의심이 간다.

 

 

 

2. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

 

- Procxp, Procmon을 이용해 동적분석을 진행했다.

 

vmx32to64.exe 생성

 

- 01.exe 파일에서 vmx32to64.exe 파일을 생성하는 것을 볼 수 있었다.

 

뮤턴트(뮤텍스) 사용

 

- 또한 WinVMX32 라는 이름의 뮤턴트를 사용하는 점도 호스트 기반 시그니처로 볼 수 있다.

 

레지스트리 등록

 

- 1번 질문에서 확인한 정보 중 하나였던 레지스트리 경로("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")에 vmx32to64.exe를 자동실행하도록 설정한 것을 볼 수 있다.

 

 

3. 악성코드를 인식할 수 있는 유용한 네트워크 기반의 시그니처가 존재하는가? 있다면 무엇인가?

 

wireshark 정보

 

- wireshark로 확인한 결과 "www.practicalmalwareanalysis.com"의 DNS를 요청하는 것을 볼 수 있었다. 네트워크 연결이 되어있지 않아서 그런 것인지는 모르겠지만, NBNS 프로토콜 방식의 패킷을 추가로 전송하는 것을 볼 수 있었다.

 

 

 


실습 3-2)

 

문제에 앞서 전반적인 분석을 진행하겠다.

 

import 함수
strings
exports 함수

 

   pestudio로 확인해보니 이 프로그램에서 사용된 imports 함수와 strings가 정말 많다. 그 중 악성행위로 의심되는 목록들만 보도록 하겠다.

 

함수 분류
기능별 함수 이름 함수 설명
프로세스 생성 및 제어 GetStartupInfoA 호출 프로세스가 생성될 때 지정된 STARTUPINFO 구조 의 내용을 검색합니다.
여기서 생성된 STARTUPINFO 구조체를 이용해 CreateProcess를 실행함.
CreatePipe 지정된 파이프 크기를 스토리지 버퍼에 할당하여 파이프를 만듭니다. 또한 프로세스에서 ReadFile  WriteFile 함수에 대한 후속 호출에서 버퍼에서 읽고 쓰는 데 사용하는 핸들을 만듭니다.
CreateProcess로 만들어낸 프로세스의 입출력제어에 사용합니다.
CreateProcessA 새 프로세스와 기본 스레드를 만듭니다.
SetLastError 호출 스레드에 대한 마지막 오류 코드를 설정합니다.
OutputDebugStringA 표시를 위해 디버거에 문자열을 보냅니다.
출력 값을 디버거로 보낼 때 사용하는 함수.
파일 경로 탐색
함수 및 스레드 관리
GetTempPathA 임시 파일에 대해 지정된 디렉터리의 경로를 검색합니다.
LoadLibraryA 지정된 모듈을 호출 프로세스의 주소 공간에 로드합니다.
이 함수를 통해 로드한 DLL을 GetProcAddress에서 사용합니다.
GetProcAddress 지정된 DLL(동적 연결 라이브러리)에서 내보낸 함수(프로시저라고도 함) 또는 변수의 주소를 검색합니다.
CreateThread 호출 프로세스의 가상 주소 공간 내에서 실행할 스레드를 만듭니다.
TerminateThread 스레드가 종료되도록 하는 데 사용됩니다.
Sleep 제한 시간 간격이 경과할 때까지 현재 스레드의 실행을 일시 중단합니다.
GetModuleFileNameA 지정된 모듈을 포함하는 파일의 정규화된 경로를 검색합니다
서비스, 레지스트리 조작 및 관리 OpenServiceA 기존 서비스를 엽니다. 
OpenSCManagerA 지정된 컴퓨터에서 서비스 제어 관리자에 대한 연결을 설정하고 지정된 서비스 제어 관리자 데이터베이스를 엽니다.
DeleteService 서비스 제어 관리자 데이터베이스에서 삭제할 지정된 서비스를 표시합니다.
CreateServiceA 서비스 개체를 만들고 지정된 서비스 제어 관리자 데이터베이스에 추가합니다.
CloseServiceHandle 서비스 제어 관리자 또는 서비스 개체에 대한 핸들을 닫습니다.
RegCreateKeyA  지정된 레지스트리 키를 만듭니다. 키가 이미 있는 경우 함수가 키를 엽니다.
RegSetValueExA 레지스트리 키 아래에 지정된 값의 데이터 및 형식을 설정합니다.
RegisterServiceCtrlHandlerA 서비스 제어 요청을 처리하는 함수를 등록합니다.
SetServiceStatus 호출 서비스에 대한 서비스 제어 관리자의 상태 정보를 업데이트.
서비스는 서비스 상태 핸들을 가져오기 위해 RegisterServiceCtrlHandlerA 를 호출한 후에만 이 함수를 호출할 수 있습니다.
네트워크 통신 WSASocketA 특정 전송 서비스 공급자에 바인딩된 소켓을 만듭니다.
3, 4, 10, 19, 18, 151, 16, 22, 115, 57, 116, 9 ws2_32.dll 서수 함수들. 네트워크 통신을 위한 함수들로 추정됩니다.
InternetCloseHandle 단일 인터넷 핸들을 닫습니다.
InternetOpenA 애플리케이션에서 호출하는 첫 번째 WinINet 함수입니다. 인터넷 DLL에 내부 데이터 구조를 초기화하고 애플리케이션에서 향후 호출을 준비하도록 지시합니다. 
InternetConnectA 지정된 사이트에 대한 FTP(파일 전송 프로토콜) 또는 HTTP 세션을 엽니다.
HttpOpenRequestA 새 HTTP 요청 핸들을 만들고 지정된 매개 변수를 해당 핸들에 저장합니다.
HttpSendRequestA 지정된 요청을 HTTP 서버로 보내고 클라이언트가 요청과 함께 보낼 추가 헤더를 지정할 수 있도록 합니다.
HttpQueryInfoA HTTP 요청과 연결된 헤더 정보를 검색합니다.
InternetReadFile InternetOpenUrl, FtpOpenFile 또는 HttpOpenRequest 함수에서 연 핸들에서 데이터를 읽습니다.
파일 작성 fwrite fopen으로 연 파일(버퍼)에 스트링을 작성합니다.

 

   사용되는 함수들과 strings의 여러 항목들을 봤을 때 이 악성코드는 서비스 등록을 함으로써 실행되는 것으로 보인다. 실행된 이후에는 특정 주소와 통신을 하면서 추가 작업(파일 다운로드)을 할 것으로 보인다.

   또한, 분석파일이 DLL이다보니 exports 함수를 볼 수 있는데, strings에서 의심 문자열로 보였던 Install, ServiceMain 등을 exports 함수에서 볼 수 있다. Install을 실행하면 악성코드가 설치될 것으로 보인다.

 

 

 

1. 악성코드가 스스로 설치되려면 어떻게 해야하는가?

- 분석에 앞서 질문의 번역이 잘못된 것으로 보여 자연스럽게 바꾸었다. 앞에서 언급했듯 Install을 실행하면 될 것으로 보인다. 해당 파일이 dll이기 때문에 rundll32.exe를 이용해서 실행해보았다.

 

cmd로 실행


   위와 같이 실행한하니 Procexp에 아주 잠깐 rundll32.exe가 표시되었다가 사라진 것 말고는 없어서 제대로 실행된 건가 싶었다. ProcMon으로 RegSetValue 필터를 걸어서 확인해본 결과 아래와 같이 서비스가 등록된 것을 볼 수 있었다.

 

IPRIP 등록

 

   IPRIP라는 곳에 레지스트리가 설정된 것을 볼 수 있다. IPRIP는 Microsoft RIP for Internet Protocol의 약자라고 한다. 어떤 것인지는 잘 모르겠지만 이름만 봤을때 인터넷을 사용하는 무언가로 보인다.

   또한 IPRIP의 Start 값도 세팅된 것을 보아 이를 시작하면 무슨 일이 벌어질 것으로 보인다.

 

 

2. 설치 후 악성코드를 어떻게 실행할 수 있는가?

- IPRIP를 시작하면 된다.  (net start IPRIP)

 

IPRIP 실행

 

 

3. 악성코드가 동작할 때 어떤 프로세스를 발견할 수 있는가?

 

Procexp 정보

 

- Procexp에서 lab03-02.dll을 검색하면 서비스가 실행되고 있기 때문에, svchost.exe에 삽입된 것을 볼 수 있다.

 

WireShark 정보

 

- 통신 상태를 보기 위해 Wireshark로 분석해본 결과, strings에서 보았던 문자열들 "serve.html", "HTTP/1.1", "practicalmalwareanalysis.com"을 사용해 통신하는 것을 볼 수 있었다.

 

 

4. 정보를 수집하는 ProcMon을 사용하기 위해 어떤 필터를 설정했는가?

 

ProcMon 필터

 

- 레지스트리를 등록해서 서비스를 실행하는게 제일 큰 목적이라고 판단했기에 RegSetValue를 필터로 설정했따.

 

 

5. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

 

(이 질문은 제가 답을 못해서 모범답안을 들고 왔습니다)

+) IPRIP 서비스를 설치하고 있고, INA+ 라는 이름을 가지고 있는 것을 시그니처로 볼 수 있다고 합니다.

+) 레지스트리 HKLM\SYSTEM\CureentControlSet\Services\IPRIP\Parameters\ServiceDLL:%CurrentDirectory%\Lab03-02.dll 위치에 자기 자신을 영구적으로 설치하는 것도 시그니처로 볼 수 있다고 합니다.

 

 

6. 악성코드에서 유용한 네트워크 기반 시그니처가 존재하는가?

 

- "practicalmalwareanalysis.com" 주소에 HTTP로 접근해서 "serve.html"에 GET 요청을 하는 것을 시그니처로 볼 수 있다.

+) User-Agent로 "컴퓨터이름"Windows XP 6.11을 보내는 것 또한 시그니처로 볼 수 있다고 한다.

 


실습 3-3)

 

- 동적 분석을 들어가기 전에 간단하게 정적 분석을 해보았다.

 

PEview 정보

 

   PEview로 확인한 결과 "\svchost.exe" 라는 문자열을 볼 수 있었고, 리소스 섹션이 있는 것을 볼 수 있었다.

 

 

   함수가 너무 많아서 일부만 캡쳐했는데 WriteFile과 리소스와 관련된 함수들이 사용된 것으로 보아, 리소스 파일을 이용해 악성행위를 하지 않을까 추측된다.

 

   리소스 파일을 추출해 분석해보려 했으나, 데이터가 암호화된 것으로 보여 더 자세히 보지는 않았다(xor 41로 암호화된 것으로 보이긴 한다).

 

 

1. Process Explorer로 이 악성코드를 모니터링했을 때 무엇을 알아냈는가?

 

ProcExp 정보

 

   Lab03-03.exe를 실행하니 프로세스에 잠깐 lab03-03.exe가 올라오더니 못보던 svchost.exe가 새로 올라온 것을 볼 수 있었다. 

 

   svchost.exe 이름만 보았을 때는 전혀 의심가지 않지만, services.exe 밑에 있는 다른 svchost.exe와 다르게 혼자 별도의 프로세스로 존재하는 svchost.exe인 점, 앞에서 strings로 보았던 문자열과 일치하는 점으로 해당 프로그램이 악성 프로그램으로 의심이 간다.

 

(좌 Image, 우 Memory) svchost.exe Strings 비교

 

   해당 svchost.exe의 정보를 살펴보다보니 Strings에서 이상한 점을 볼 수 있었다. Image에서 볼 수 있는 Strings는 다른 svchost.exe와 비슷한 모양새지만, Memory에서는 정상 파일과는 다른 문자열들("practicalmalwareanalysis.log", [SHIFT], [ENTER] ... )을 볼 수 있었다.

 

   확인한 문자열들이 log 파일인 점과 키보드의 특정 자판인 점을 보았을 때 키로거가 아닐까 의심이 된다. 자세한 것은 더 봐야할 것 같다.

 

 

2. 실시간 메모리 변조를 확인할 수 있는가?

 

- 메모리를 변조하는 과정을 실시간으로 보지는 못했지만, 앞에서 svchost.exe의 Image strings와 Memory strings가 다른 것을 볼 수 있었다. svchost.exe의 경로는 "C:\WINDOWS\system32\svchost.exe"로 올바른 경로인 것을 보아, svchost.exe를 실행시킨 후 메모리를 변조한 것으로 보인다.

 

 

3. 악성코드임을 의미하는 호스트 기반 표시자는 무엇인가?

 

- "practicalmalwareanalysis.log"라는 로그 파일을 생성하는 점을 호스트 기반 표시자로 볼 수 있다.

 

 

 

4. 이 프로그램의 목적은 무엇인가?

 

- svchost.exe를 변조하여 키로거로 사용하는 것이 목적이다.

 

키로거 기능

 

 


실습 3-4)

 

- 정적분석을 먼저 시행했다.

 

import 함수

 

   사용된 함수들로만 보았을 때 해당 프로그램은 레지스트리, 서비스를 조작할 것으로 보이고 네트워크 통신을 할 것으로 보인다. 

 

strings 정보

 

   strings를 보면 통신의 대상으로 보이는 "http://www.practicalmalwareanalysis.com"을 볼 수 있고, 그 외에는 cmd.exe, >> NUL /c del 등의 문자열들을 볼 수 있다. 이것만 봐서는 무슨 일을 할지 잘 모르겠다.

 

 

1. 이 파일을 실행했을 때 어떤 일이 발생했는가?

 

   처음에 실행했을 때는 아무 일도 일어나지 않았다. Lab03-03.exe를 분석한 환경에서 그대로 해서인가 싶어, 다시 환경을 초기화하고 실행했다.

 

실행 후

 

   환경을 초기화하고 다시 실행하니 Lab03-04.exe가 사라진 것을 볼 수 있었다.

 

 

   ProcMon을 통해 어떤 일이 일어난건가 찾아보기로 했다. ProcessName을 "Lab03-04.exe"로 잡고 찾아보니 위와 같은 삭제 이벤트를 볼 수 있었다. 이 외에는 다른 특별한 이벤트를 볼 수 없었다.

 

 

2. 동적 분석 시 장애물이 무엇인가?

 

- 실행한 파일이 사라진다는게 장애물이 될 수 있는지는 모르겠지만, 불편한 점인 것 같기는 하다.

+) 특별한 이벤트가 발생하지 않는 것을 보아 악성행위를 보기 위해서는 추가 조건이 필요한 것으로 보인다. strings에서 보았던 "-cc", "-c", "-re", "-in" 등의 인자를 커맨드라인으로 사용해 볼 필요가 있어보인다.

 

 

3. 이 파일을 실행시키는 다른 방법이 있는가?

 

+) 2번 질문에 답한 것 처럼 추가 인자를 사용해서 실행하면 되지 않을까 싶지만, 제대로 동작하지 않는다. 실행 조건을 더 파악하기 위해서는 심도 있는 분석이 필요해보인다. (그리고 이는 9장에서 더 분석할 예정이라고 한다.)