악성코드분석/실전 악성코드와 멀웨어 분석

실전 악성코드와 멀웨어 분석 실습 9-2

111-000-111 2022. 1. 8. 19:03

OllyDbg를 사용해 파일 Lab09-02.exe에서 찾을 수 있는 악성코드를 분석해서 다음 질문에 답해보자.

 

 

 

 

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

 

 

 

 

 

strings 실행 결과를 통해 임포트 함수 목록과 cmd라는 문자열을 발견했다.

 

 

 

 

 

 

 

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

 

 

 

실행했을 때 별 다른 행위 없이 종료되는 것처럼 보인다.

 

 

따라서 IDA와 OllyDbg를 통해 확인할 필요가 있다.

 

 

 

 

 

 

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

 

 

 

 

 

IDA로 메인함수의 시작부분에 선언되어있는 변수들의 내용을 올리디버거로 확인해보았다.

 

 

 

 

 

1qaz2wsx3edc라는 문자열과 ocl.exe라는 문자열을 생성하였다.

 

 

 

그 다음으로 GetModuleFileNameA 함수를 호출하는데, 이는 파일명을 포함한 경로를 얻어와서 strrchr의 인자로 이 파일 이름과 5C(\)를 전달하여 문자열 내의 마지막 백슬래시를 찾기 위함이다. 이 반환값에 +1을 하여 순수 파일이름의 시작 포인터를 var_4에 담아준다.

 

 

그리고 이 var_4와 var_1A0을 strcmp로 비교한다. 이 var_1A0은 6F(ocl.exe)가 들어있다.

 

 

 

따라서 처음에 이 악성코드를 실행했을 때 바로 종료된 이유는 파일 이름이 ocl.exe가 아니기 때문이라는 것을 알게되었다. 분석을 위하여 파일 이름을 ocl.exe로 바꾸고 진행할 것이다.

 

 

 

 

 

 

4. 0x00401133에서 어떤 일이 발생하는가?

 

 

 

 

 

스택에서 각 문자를 이동시켜 두 개의 문자열을 만드는 난독화 방법이다. 주로 간단한 문자열 유틸리티나 정적 분석 기법에서 문자열을 난독화 하기 위하여 사용한다.

 

 

 

 

 

 

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

 

 

 

 

1qaz2wsx3edc라는 문자열과 버퍼에 대한 포인터를 전달한다.

 

 

 

 

 

 

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

 

 

 

 

 

 

 

401089 함수가 종료되기 전 마지막 EAX값이 www.practicalmalwareanalysis.com   이다. 

 

 

 

 

 

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

 

 

 

 

 

인코딩된 DNS명을 문자열 1qaz2wsx3edc와 XOR 연산하여 디코딩하였다.

 

 

 

 

 

이 디코딩 된 도메인을 gethostbyname의 인자로 전달하여 ip주소를 알아낸다.

 

 

 

 

 

270F(9999)를 인자로 htons를 호출하는데, 이는 바이트오더를 변경해주는 함수이다.

 

 

 

 

connet 함수로 9999번 포트로 www.practicalmalwareanalysis.com   으로 연결한다. 

 

 

 

만약 이 작업이 실패하면 30초 동안 sleep한 뒤 다시 시도한다.

 

 

 

 

 

 

성공했을 경우에는 401000 함수를 호출한다.

 

 

 

 

 

 

 

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

 

 

 

 

401000 함수의 내부이다.

 

STARTUPINFO 구조체 멤버 wShowWindow의 값을 0으로 지정해서 CreateProcess에 전달하여 별도의 윈도우 창 없이 cmd를 실행할 수 있다.

따라서 사용자는 어떤 일이 벌어지는지 알기 힘들다.

 

lpProcessInfomation에 소켓을 전달해주고, 표준 스트림(stdin, stdout, stderr)을 전달하여 cmd 프로세스를 생성한다.

그러므로, 소켓으로 들어오는 데이터를 cmd로 전달하고, cmd로 실행한 모든 결과 값을 소켓으로 전달할 수 있게 된다.