1. 분석 환경
1.1. 분석 환경
l Windows 10 l Windows XP (VMware) |
1.2. 분석 도구
정적 분석 | l IDA |
1.3. 분석 샘플
Practical Malware Analysis Labs - Lab06-04.exe |
1.4. 질문
이 랩에서는 Lab06-04.exe 파일에서 발견된 악성 코드를 분석합니다
- 6-03과 6-04 랩의 메인 메서드에서 이뤄진 호출 간의 차이는 무엇인가요?
- 메인에 어떤 새로운 코드 구조가 추가되었나요?
- 이 랩의 HTML 파싱 함수와 이전 랩의 함수 간의 차이는 무엇인가요?
- 이 프로그램은 얼마 동안 실행될 것인가요? (인터넷에 연결되어 있다고 가정합니다.)
- 이 악성 코드에 대한 새로운 네트워크 기반 특이점이 있나요?
- 이 악성 코드의 목적은 무엇인가요?
2. 분석 과정
2.1. 6-03과 6-04 랩의 메인 메서드에서 이뤄진 호출 간의 차이는 무엇인가요?
2.2. 메인에 어떤 새로운 코드 구조가 추가되었나요?
함수의 위치가 바뀌었다.
좌가 Lab06-03, 우가 Lab06-04
for문이 새로 생겼다.
(Mov [ebp+var_C], 0) / (cmp [ebp+var_C], 5A0h) : 두 명령어는 0부터 5A0(=1440)이 될 때까지 계속 코드를 반복하는 것을 의미한다.
디컴파일을 통해서도 확인할 수 있다.
2.3. 이 랩의 HTML 파싱 함수와 이전 랩의 함수 간의 차이는 무엇인가요?
파싱 함수가 호출되기 전부터 바뀐 점이 있다. Lab06-03은 매개변수를 받지 않았지만 Lab06-04는 매개변수를 받고 있었다. 그 내용은 var_C for = 반복문의 반복 횟수였다.
함수를 들어가 보면 달라진 부분이 더 있었다.
Mov eax, [ebp+arg_0] / push eax : 받았던 매개변수를 eax에 저장하여 push 한다.
"Internet Explorer 7.50/pma%d" : user-agent 부분에 %d 숫자를 나타내는 형식지정자가 추가되었다.
_sprintf로 이를 출력한다.
즉 "Internet Explorer 7.50/pma[반복횟수]”를 출력하여 몇 번째 파싱을 하고 있는지 나타내는 기능이 추가되었다.
2.4. 이 프로그램은 얼마 동안 실행될 것인가요? (인터넷에 연결되어 있다고 가정합니다.)
코드에서 sleep을 사용하는 곳은 두 곳이다. 한번은 for 루프 직전에 60초를, 한번은 파싱 문자열이 e였을 경우 100초를 쉰다.
문자열이 e였을 때를 제외하고, 프로그램 실행시간을 제하면 60초 * 루프횟수인 1440번 = 24시간이 된다.시간이된다.
즉 이 프로그램은 하루동안 실행되는 것이다.
2.5. 이 악성 코드에 대한 새로운 네트워크 기반 특이점이 있나요?
새로운 네트워크 기반 특이점은 "Internet Explorer 7.50/pma%d" user-agent 부분 출력을 통해 숫자당 1분 이므로 현재 몇 분째 이 프로그램이 실행 중인지 알 수 있다.
2.6. 이 악성 코드의 목적은 무엇인가요?
Lab06-03.exe의 기능에 더하여 이 프로그램은 하루 동안 동작하며 이 악성코드가 감염된 지 얼마나 되었는지 확인할 수 있게 되었다.
최종적으로:
- 현재 시스템이 인터넷이 연결되어 있는지 확인한다.
- 인터넷이 연결되어 있다면, practicalmawlare//~/.htm 에 접속하여 리소스를 받아온다. 받아온 리소스를 파싱 하여 5번째 문자열만 추출한다.
- 추출한 문자열이 a,b,c,d,e일경우 각각 다른 수행을 한다. temp디렉토리 생성/cc파일로 위장/cc파일삭제/cc파일을 시작프로그램에 추가/100초간 sleep
- (2), (3)을 1440번 반복한다. 파싱함수 실행 시 반복 횟수를 user-agent와 함께 출력하도록 한다. 그리고 반복하는 사이사이 60초간 sleep 하며 이 악성코드는 하루동안 실행되게 된다.