안녕하세요. Message입니다.

<실전 악성코드와 멀웨어 분석> 책의 실습 문제 6-3을 분석합니다.

분석환경은 Windows 7 Ultimate 64x / Vmwre 12.1.0 build 입니다.

 

 

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

0. 기초 동적 분석

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

문제풀이에 앞서 간단한 동적 분석을 진행합니다.

 

1) PE구조 & 패킹체크

별도의 패킹이 되어 있지 않습니다.

 

2) DLL 체크

KERNEL32.dll, WININET.dll, ADVAPI32.dll 총 3개의 dll을 임포트합니다.

앞선문제와는 달리 ADVAPI32.dll이 추가되었으며, 레지스트리 관련 API가 보입니다.

 

3) String 체크

IDA의 String Window(Shift+F12)를 보면 아래와 같이 .data섹션(초기화된 전역변수, 읽기/쓰기 가능) 에서

앞선 문제와는 달리 자동실행 관련 레지스트리 키 값이 보이고,

디렉토리 경로들이 보입니다.

 

Tip. Quick View

몇일간 또 안봤다고 윈도우들의 단축키가 가물가물합니다.

애매할땐 [Ctrl+1] 을 이용한 Quick View 호출이 최고입니다..^^;

  

 

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

1. 실습 6-2의 main 함수와 비교하라. main이 호출한 새로운 함수는 무엇인가?

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

실습 [6-2]와 다르게 main이 호출한 새로운 함수는 sub_401130 입니다.

 

 

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

2. 새로운 함수는 어떤 인자를 갖는가?

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

call sub_401130 명령 이전에 push되는 인자를 확인하면 총 2개입니다.

첫번째 인자는 lpExistingFIleName argv 이고, 두번째는 var_8 이네요.

argv의 주소는 argv[0]과 동일하므로,  프로그램의 이름으로 볼 수 있습니다.

 

[ebp+var_8] 의 경우는 좀더 위쪽으로 올라가서 값을 할당받는 부분을 살펴보아야 합니다.

0x0040122D 주소에 있는 명령어를 보면, AL(1byte of EAX) 레지스터 값을 var_8 에 할당합니다.

EAX의 경우는 함수의 리턴값을 가지므로, 결론적으로 sub_401040 리턴값이 var_8 입니다. 

 

sub_401040의 리턴값은 파싱했던 HTML 문서 주석문 "<!--" 다음에 나오는 문자입니다.

자세한 내용은 전 포스팅을 참조해주세요.

 

 

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

3. 이 함수가 가지는 주요 코드 구조는 무엇인가?

4. 이 함수는 무슨 일을 하는가?

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

 

대략 어떤일을 하는지 [User Xrefs chart] 기능을 이용하면 파악하기 용이합니다. 

DeleteFileA, CopyFileA, RegOpenKeyExA 등등...파일/디렉토리/레지스트리 관련 API 들이 보입니다.

 

API를 통하여 파일생성, 삭제, 레지스트리와 관련된 행위를 할 것으로 생각됩니다.

 

 

일단 전체적인 그래프의 모양을 살펴보면, 지난 문제에서 마주쳤던 if-else 문과는 다르게

중간의 분기문에서 여러군데로 뻗어나가는 모양세입니다.

 

Hex-ray 기능을 이용하여 코드를 살펴보면, 역시 switch 구문인것을 알 수 있습니다.

다음부터 이와 유사한 그래프 모형을 보게된다면, switch 구문임을 직감할 수 있겠네요.

 

0x401130 주소에서 스택프레임이 생성된 이후에 arg_0var_8 을 이용하여 특정 연산을 수행합니다.

특히 0x401140 주소의 sub 명령어로 61h 값을 빼준 이후에 곧장 CMP 명령어로 4와 비교합니다.

비교가 끝나면 JA명령어(OP1 > OP2 --> jump) 를 이용하여 분기합니다.

61h는 아스키코드 a(97) 를 의미하며, 97을 뺀 이후에

CMP 명령어에 의하여 4를 또 뺏는데, 크다면 값이 f(102) 이상이라는 소리입니다. 

이것이 의미하는 바는 알파벳 a, b, c, d, e 의 범주가 아니면 switch 구문의 default로 분기하는 것이며,

a~e 의 범주 내에 있다면 0x00401153 주소의 jmp 명령어로 이용하여 분기합니다.

 

jmp 명령어에서 edx4를 곱하는 이유는 ex) ds:off_4011F2[edx*4]

아래처럼 참조하는 메모리 주소 집합이 4바이트 단위로 존재하기 때문입니다.

하지만, IDA에서 살펴보니 주소값이 0x4011F2 로 동일하게 보이더군요.

 

Ollydbg로 확인하면 실제 주소값이 4byte 단위로 리스트되어 있습니다.

Tip. 이렇게 점프테이블을 사용하는 패턴은, 컴파일러가 siwtch 구문을 생성할때 종종 사용한다고 합니다.

 

 

이제 본격적으로 각 Switch 구문에서 어떤일을 하는지 알아봅시다.

case 97 C:\\Temp 디렉토리 생성

case 98

- C:\\Temp 디렉토리에 lpExistingFileName 을 cc.exe 이름으로 파일 복사

- lpExistingFileName의 경우 sub_401130에 인자로 넣어준 값이므로, 프로그램의 이름입니다.(argv[0])

- 어떤 값을 넣어주었는지 다시 복기하려면 초반에 많이 사용했던 Xrefs 기능 [Ctrl+X] 단축키를 사용합니다.

case 99C:\\Temp\\cc.exe 파일 삭제

case 100

- HKEY_LOCAL_MACHINE의 Run 레지스트리 오픈

- RegSetValueEx API를 이용하여 C:\\Temp\\cc.exe 악성코드를 자동실행 레지스트리에 등록

case 101100초간 Sleep

default : 에러메시지 출력

 

 

 

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

5. 이 악성코드에서 호스트 기반의 행위(indicator)가 존재하는가?

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

호스트기반의 행위는

Software\Microsoft\Windows\CurrentVersion\Run 레지스트리 값 변경과

C:\Temp\cc.exe 경로의 파일생성(복사) 로 볼 수 있습니다.

 

 

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

6. 이 악성코드의 목적은 무엇인가?

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

 

인터넷 연결확인과 주석확인의 경우, 전 문제와 동일하며

다운로드된 HTML파일의 값에 따라

 

switch 구문을 이용하여 파일생성 및 레지스트리값 변경, Sleep 등이 주 목적입니다.

 

posted by Red_Message