실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (2)

 

Notice : 해당 자료가 저작권등에 의해서 문제가 있다면 바로 삭제하겠습니다.
연구목적으로 사용하지 않고 악의적인 목적으로 이용할 경우 발생할 수 있는 법적은 책임은 모두 본인에게 있습니다.

Practical_Malware_Analysis
[구매하기]

실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-1
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-2
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-3
실전 악성코드와 멀웨어 분석 – 1장 기초 정적분석 실습 1-4
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-1
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-2
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-3
실전 악성코드와 멀웨어 분석 – 3장 기초 동적 분석 실습 3-4
실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (1)
실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (2)

실습문제 다운로드 받는 곳 : http://nostarch.com/malware

실습 5-1
IDA Pro 만을 이용해 파일 Lab05-01.dll 내의 악성코드를 분석하라. 이실습의 목적은 IDA Pro를 직접 다루는데 있다. 이미 IDA Pro를 사용해 본 적이 있으면 다음 문제를 무시하고 악성코드 리버싱에 초점을 맞춰도 좋다.

질문
11. PSLIST 익스포트는 무슨 역할을 하는가?
A : Exports 창을 확인해 보았다.
5-1-19

PSLIST 를 볼 수 있고, 주소는 0x10007025이다.

5-1-20

sub_100036C3 함수를 호출하는 부분이 보인다. sub_100036C3 를 확인해보면,

5-1-22

GetVersionExA 함수를 통해 운영체제의 버전을 확인하는 것을 볼 수 있다.

다시 돌아와서 그래프 뷰로 함수를 확인해보면,

5-1-21

버전을 확인해 분기되는 것을 볼 수 있고, 두 함수(sub_1000664C, sub_10006518)를 호출하는 것을 알 수 있고, 두 함수 모두 CreateToolhelp32Snapshot 를 호출해서 프로세스 리스트를 가져오는 것을 알수 있다.

12. 그래프모드를 이용해 sub_10004E79 상호참조 그래프를 그려보자. 이 함수에 진입하기 위해 호출하는 API함수는 무엇인가? 해당 API함수에만 기반을 두고 이 함수를 어떤 이름으로 변경하겠는가?
A : View > Graphs > User xrefs charts 를 이용해 상호참조 그래프를 그려보면,

5-1-23

sub_10004E79 는 sub_1000FF58에서 호출 되었고, GetSystemDefaultLangID, sprintf, strlen, sub_100038EE 의 함수를 호출하는 것을 볼 수 있다. 이름을 짓는 다면, GetSystemLanguage 정도?

13. DllMain이 직접호출하는 윈도우 API함수는 몇 개 인가?
A : View > Graphs > User xrefs charts 를 이용해 상호참조 그래프를 그려보자

5-1-24

여기서 Recursion depth는 1로 줘야 한다. 아니면 그래프가 너무 커져서 보기 힘들다

5-1-25

DllMain이 호출하는 윈도우API는 strncpy, _strnicmp, CreateThread, strlen 4개 이다.

14. 0x10001358에서 Sleep 호출이 존재한다.(sleep까지 수밀리초 값을 파라미터로 갖는 API함수) 코드 후반부를 보면 이 코드가 수행되려면 프로그램이 얼마동안 sleep하는가?
A : Sleep 위의 코드를 조금 살펴보면, 먼저 off_10019020 가 보인다.

5-1-26

해당 주소에 가서 확인해보니, [This is CTI]30 의 문자열이 저장되어있다.
여기에 0Dh 를 더한다. [This is CTI]을 빼고 30부분만 가져온다.
30이 문자이니 atoi으로 숫자를 만들어 3E8h(십진수로 1000)를 곱해준다.
즉, 30000 밀리초, 30초 동안 sleep 한다.

15. 0x10001701에서 소켓을 호출한다. 세가지 파라미터는 무엇인가?
A : 해당 주소의 코드를 보면,
5-1-27

6,1,2 가 push 됨을 볼 수 있다.
MSDN 에서 확인해보면, (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740506(v=vs.85).aspx)

16. 소켓과 IDA Pro에서 명명한 심볼 상수 기능을 이용하여 이 파라미터를 좀 더 유용하게 할 수 있겠는가? 변경 후 파라미터는 무엇인가?
A : AF_INET, SOCK_STREAM, IPPROTO_TCP

af=2(AF_INET) : The Internet Protocol version 4 (IPv4) address family.
type=1(SOCK_STREAM) : A socket type that provides sequenced, reliable, two-way, connection-based byte streams with an OOB data transmission mechanism. This socket type uses the Transmission Control Protocol (TCP) for the Internet address family (AF_INET or AF_INET6).
protocol=6 (IPPROTO_TCP) : The Transmission Control Protocol (TCP). This is a possible value when the af parameter is AF_INET or AF_INET6 and the type parameter is SOCK_STREAM.

17. 명령어 옵코드 0xED의 사용법을 찾아보자. 이 명령어는 VMware 탐지를 수행하는 VMXh 매직 문자열로 사용한다. 이 악성코드는 이를 이용하고 있는가? VMware를 탐지하는 다른증거가 있는가?
A : Opcode를 확인하기 위해 옵코드가 보이도록 설정을 했다. (Options > General 에 Number of Opcodes Bytes Bytes 를 6으로 설정)
5-1-28

그리고 Binary Search 를 이용해 ED 를 검색했다 (Find all occurrences 체크 하면 매칭된 리스트를 볼수 있다.)

5-1-29

opcode 가 ED 인 어셈블리명령어는 in 명령이였다.

5-1-30

in 명령어 윗부분을 살펴보면, 564D5868h 가 있는 데 ASCII으로 변경해보면 VMXh 이다.
그리고 in 명령이 포함된 함수의 상호 참조를 통하여 Found Virtual Machine,Install Cancel. 의 문구도 확인할수 있었다.

18. 0x1001D988로 점프해보자. 무엇을 찾을수 있는가?
A : 문자들이 보인다.
5-1-31

19. IDA 파이썬 플러그인을 설치했다면(IDA Pro 상용버전에는 포함돼 있음) Lab05-01.py를 실행해보자. IDA 파이썬 스크립트는 이책의 악성코드와 함께 제공한다.(커서가 0x1001D988에 위치해야함) 스크립트 실행 후 무슨일이 일어났는가?
A : 안타깝지만 상용버전이 나닌 free 버전이라 실행해볼수 없었다..ㅠ
우선 Lab05-01.py 코드를 보자..

0x00~0x50 를 읽어서 0x55으로 xor 하는 코드이다.

그래서 해당 부분을 잘라와서 파일로 만들었다.

그리고 동일한 일을 수행하는 파이썬 코드를 작성했다.

20. 동일한 위치에 커서를 두고 이데이터를 ASCII문자열로 어떻게 변환할수 있는가?
A : 위에서 작성한 코드를 돌려보니, 아래와 같은 문자열을 확인할수 있었다.
xdoor is this backdoor, string decoded for Practical Malware Analysis Lab :)1234

21. 문자편집기로 스크립트를 열어보자. 어떻게 동작하는가?
A : 위에서 이미 해봤음..ㅋ

 

This entry was posted in Reading, Reversing and tagged , . Bookmark the permalink.

3 Responses to 실전 악성코드와 멀웨어 분석 – 5장 IDA Pro (2)

댓글 남기기