티스토리 뷰



실습 9-1

1. 어떻게 하면 악성코드가 자신을 설치하게 할 수 있는가?

입력받은 인자값은 argc, argv 두 개를 인자값 으로 받는다.



00402510 에서 받는 인자값은 다음 과 같다.
처음 인자값의 길이가 4인지 확인하고, 문자열을 하나씩 읽어와서 비교한다.
처음 61=a(16진수)이며, 문자를 1씩 증가하며 문자를 비교한다. 즉, 00402510 에서 받는 인자값은 abcd 이다. 


2. 이 프로그램의 커맨드라인 옵션은 무엇인가? 패스워드 요건은 무엇인가?

커맨드라인 옵션 -in      : 설치
                         -re     : 삭제
                         -c       : 업데이트 
                         -cc     : 출력

패스워드 : 4문자, abcd


3.이 악성코드가 특수 커맨드라인 패스워드를 요구하지 않게 영구 패치하려면 OllyDbg로 어떻게 해야 하는가?

00402510에서 비밀번호 인자가 값을 받아 정삭적으로 비교가 끝나면 EAX값을 1을 입력하고 리턴한다.


문자열을 비교할 때 입력값이 틀리면 004025A0로 점프하는데, 이 점프 부분을 0040259B로 점프하게 패치하여 결과값이 무조건 참이 될 수 있도록 한다.



하지만 이렇게만 하면 실행이 안된다. (두 번재 인자값이 없기 때문에)
ARG2를 ARG1과 같은 주소로 패치한다. (다른 방법이 있을 수도 있음)


00402B63에서 인자값 개수를 한번 더 확인한다.

때문에 인자값을 두개를 주던지(비밀번호가 무조건 참이도록 패치했으니 아무렇게 인자값을 입력해도 된다)

아니면 00402B63 비교 부분을 nop로 패치한다.


4.이 악성코드의 호스트 기반 지표(indicator)는 무엇인가?

아래 위치에 자기자신 복사
C:\WINDOWS\system32\Lab09-01.exe

서비스에 등록하여 시스템이 시작 할때 같이 실행되도록 한다.



5.이 악성코드가 네트워크를 통해 수행할 수 있는 다른 행동은 무엇인가?

서버에서 특정 명령을 받아 악서 행위를 수행 할 수 있다.


6.이 악성코드에 대한 유용한 네트워크 기반 시그니처가 있는가?

www.practicalmalwareanalysis.com에 접속한다.



실습 9-2

1. 바이너리에서 정적으로 어떤 문자열을 볼 수 있는가?

아래 문자열들을 볼 수 있다.
 


2. 이 바이너리를 실행했을 때 어떤 일이 발생하는가?

프로그램이 로드는되나 특별한 행위없이 종료된다.


3. 이 샘플이 악의적인 패이로드(payload)를 실행하게 하기 위해서는 어떻게 해야 하는가?

ida로 확인해 보면 00401128주소가 main임을 알 수 있다. ollydbg를 이용해 해당 부분을 확인해 보면 스택에 특정 아스키코드 값을 넣고 있다.


00401550 에서 파일의 이름을 받아오고, ocl.exe와 비교한다. ocl.exe는 처음 악성코드가 시작할 때 스택에 입력했던 아스키 값임을 알 수 있다.
004014C0에서 파일의 이름과  ocl.exe를 비교한다.


파일명을 ocl.exe로 변경하여 실행하면 특정 사이트에 접속 하는 것을 확인 할 수 있다.


4.0x00401133에서 어떤 일이 발생하는가?

0x00401133에서 스택에 특정 아스키코드 값을 넣고 있다.

파일명과 알 수 없는 문자열을 생성한다.


5.하위 루틴 0x00401089에 어떤 파라미터가 전달됐는가?

두 개의 인자값이 전달 되었다
arg1 : 1qaz2wsx3edc (0x00401133에서 스택에 저장한 값)
arg2 : 0012FD90  데이터 버퍼 포인터



6.이 악성코드는 어떤 도메인을 사용하는가?

0x00401089함수의 004010EA 에서 입력받은 arg1(1qaz2wsx3edc)을 이용해 www.practicalmalwareanalysis. com라는 도메인 주소를 얻는다.
이 도메인 주소는 악성코드가 사용하는 주소이다.




7.어떤 인코딩루틴을사용해 도메인 이름을난독화했는가?

아래 그림의 루틴에서 입력받은 arg1(1qaz2wsx3edc)을 xor 하여 도메인 이름을 난독화하여 획득했다.




8.0x0040106E에서CreateProcessA호출은 어떤 의미를 가지고 있는가?

cmd 명령창을 hide로 실행시켜 리버스 셀을 생성한다.





실습 9-3
1. Lab09-03.exe을 통해 어떤 DLL이 임포트되는가?

Kernel32.dll, Netapi32.dll, Dll1.dll, Dll2.dll, Dll3.dll, user32.dll





2. DLL1.dll, DLL2.dll과 DLL3.dll가 요청하는 베이스 주소는 무엇인가?

DLL1.dll, DLL2.dll과 DLL3.dll 모두 베이스 주소는 10000000이다. 실제로 해당 주소는 DLL1.dll 이 사용하고 있어 DLL2.dll과 DLL3.dll은 다른 위치에 재배치 한다.





3. Lab09-03.exe을 디버깅하기 위해 OllyDbg을 사용할 때 DLL1.dll, DLL2.dll과 DLL3.dll을 위해 할당하는 베이스 주소는 무엇인가?

DLL1.dll, DLL2.dll 은 이미 로드 되어 있으나, DLL3.dll은 로드되어 있지 않다. 00401041 까지 진행 한 후 확인한다.


DLL1 은 0x10000000에, DLL2와 DLL3은 재배치 되어 각 각 0x390000, 0x3F0000에 로드된다.



4. Lab09-03.exe가 DLL1.dll 에서 임포트 함수를 호출할 때 해당 임포트 함수는 무엇을하는가?

'DLL 1 mystery data %d'를 출력하다.



5. Lab09-03.exe가 WriteFile을 호출할 때 쓰려는 파일의 이름은 무엇인가?

DLL2.dll 에서 temp.txt 를 생성한다.



6. Lab09-03.exe가 NetScheduleJobAdd를 사용해 잡(job)을 생성할 때 두 번째 파라미터를 데이터의 어디에서 구하는가?



7.프로그램을 실행하거나 디버깅하는 동안 프로그램이3조각의mysterydata을 출력함을 알 수 있다. 다음 중 무엇인가?
DLL 1 mystery data 1, DLL 2 mysterydata 2, DLL3 mysery data 3?

DLL1.dll의 mysterydata는 GetCurrentProcessId를 참조하는 것 으로 보아 해당 프로그램의 PID 값을 출력한다.


Dll2.dll의 mysterydata는 CreateFileA가 temp.txt를 오픈한 핸들값이다.


Dll3.dll의 mysterydata는 문자열 "ping www.malwareanalysisbook.com" 문자열의 위치인 0x3FB0C0이다.



8.OllyDbg 에서 사용하는 로드 주소와 일치하게IDAPro로 DLL2.dll을 어떻게 로드할수 있는가?

IDA에서 파일을 로드 할 때 Manual load를 체크하고 원하는 주소를 입력하면 된다.





댓글