1. 분석 환경
1.1. 분석 환경
l Windows 10 l Windows XP (vmware) |
1.2. 분석 도구
정적 분석 | l IDA |
동적 분석 | l sysanalyzer |
1.3. 분석 샘플
Practical Malware Analysis Labs - Lab06-02.exe |
1.4. 질문
이 랩에서는 Lab06-02.exe 파일에서 발견된 악성 코드를 분석합니다
- 메인에서 호출된 첫 번째 서브루틴이 수행하는 작업은 무엇인가요?
- 0x40117F에 위치한 서브루틴은 무엇인가요?
- 메인에서 호출된 두 번째 서브루틴이 하는 일은 무엇인가요?
- 이 서브루틴에서 사용된 코드 구조는 어떤 유형인가요?
- 이 프로그램에 대한 네트워크 기반 특이점이 있나요?
- 이 악성 코드의 목적은 무엇인가요?
2. 분석 과정
2.1. 메인에서 호출된 첫 번째 서브루틴이 수행하는 작업은 무엇인가요?
답: InternetGetConnectedState 함수를 사용해 인터넷연결여부를 확인 후 그 리턴 값에 따라 문자열을 Push 한다. 그리고 sub_4017F를 호출한다.
Sub_40100이 첫번째 서브루틴이다. 내용을 보니, Lab06-01과 똑같은 내용의 InternetGetConnectedState 호출 뒤 리턴 값에 따라 분기하는 IF문이 보였다.
2.2. 0x40117F에 위치한 서브루틴은 무엇인가요?
답 : printf
Lab06-01과 동일하게 문자열을 출력하는 printf 이다.
2.3. 메인에서 호출된 두 번째 서브루틴이 하는 일은 무엇인가요?
답 : http://www.practicalmalwareanalysis.com/cc.htm 에 접속하여 데이터의 시작이 <!—(주석)인지 확인 후 5번째 값을 리턴한다.
Main을 살펴보면 Lab06-01과 조금 다른 점이 있었다. Lab06-01에서는 인터넷 연결여부만 확인했었지만, Lab06-02는 거기에 추가로 sub_401040 서브루틴을 호출해 또 다른 상태를 체크해 문자열을 출력하는 것으로 보인다.
Sub_401040을 확인해 본다.
InternetOpenA는 winlnet 함수를 초기화하여 인터넷 연결을 시작하는 기능을 한다.
InternetOpenUrlA는 지정된 URL을 열고 해당 URL의 리소스에 대한 핸들을 반환한다. 실패했을 경우에는 NULL을 반환한다.
그래서 첫 번째 구문에서는 Internet Explorer 7.5를 통해 http://www.practicalmalwareanalysis.com/cc.htm 에 접속하며, 접속 성공여부에 따라 분기된다.
실패했을 경우에는 “Error 2.1: Fail to OpenURL\n” 문자열을 출력하며, 핸들을 닫은 뒤 종료된다.
URL 접속에 성공했을 경우 loc_40109D로 점프한다.
여기에서도 한번 더 분기하는데, InternetReadFile import를 사용하여 열린 url에서 데이터를 읽어온다. 실패하면 False를 리턴하며“Error 2.2: Fail to ReadFile\n” 문자열을 출력한 뒤 핸들을 닫는다. 성공하면 loc_4010E5로 점프한다.
URL을 열고 데이터를 읽어오는 데까지 성공했다면 loc_4010E5에 도달하게 된다.
읽어온 데이터를 처음부터 한 글자씩 어떤 문자열과 계속 비교를 하는데, 문자열을 모아보면
“<!—” 이다. 이것은 html 코드의 주석의 시작 부분이다.
최종적으로 읽어온 데이터의 시작 부분이 주석인지 확인해 맞다면 mov al, [ebp+var_20c] 명령을 통해 5번째 문자열을 al레지스터에 저장하여 반환한다. 아니라면 “Error 2.3: Fail to get command\n”문자열을 출력하고 종료된다.
2.4. 이 서브루틴에서 사용된 코드 구조는 어떤 유형인가요?
중첩된 IF문이다.
1. InternetOpenA,InternetOPenUrlA로 http://www.practicalmalwareanalysis.com/cc.htm 에 접속한다. 실패하면 fail~ 문자열을 출력하고 종료된다.
2. url에 접속하여 InternetReadFile로 리소스를 읽어온다. 실패하면 fail~ 문자열을 출력하고 종료된다..
3. 시작문자열이 “<!—“인지 비교한다. 맞을경우 5번째 문자열을 리턴한다. 아닐경우 fail~ 문자열을 출력하고 종료된다.
서브루틴이 종료되면 이 반환값을 “Success: parsed command is %C\n”라는 형식으로 출력하고 60초 동안 Sleep 한다.
2.5. 이 프로그램에 대한 네트워크 기반 특이점이 있나요?
User-Agent : Internet Explorer 7.5/pma
Host : www.practicalmalwareanalysis.com
2.6. 이 악성 코드의 목적은 무엇인가요?
인터넷 연결상태를 확인한 뒤 연결되어 있다면 특정 user-agent로 http://www.practicalmalwareanalysis.com/cc.htm에 접속해 리소스를 읽어온다.
읽어온 내용의 시작이 “<!—” 일 경우 읽어온 데이터의 5번째 문자열과 파싱에 성공했다는 문자열을 함께 출력하고 60초 동안 sleep 한 뒤 종료된다.