Practical Malware Analysis 6-3
실습 6-3
실습 환경 : Vmware (Windows 7 32 bit)
사용한 툴 : IDA Free 5.0
[01] main 함수 호출과 실습 6-2의 main 함수와 비교하라. main이 호출한 새로운 함수는 무엇인가?
실습 6-2와 비교해보면 401000, 401040 함수는 동일하지만 401130 함수가 새로 생겼다.
[02] 새로운 함수는 어떤 인자를 갖는가?
위의 이미지를 살펴보면 var_8을 확인할 수 있는데 이 값은 실습 6-2에서 살펴봤던 웹 페이지의 주석에서 파싱한 값이고 argv도 살펴볼수 있는데 이 값은 argv[0] 값인 파일 이름 이다.
[03] 이 함수가 가지는 주요 코드 구조는 무엇인가?
401130 함수를 분석해보면 웹 페이지 주석에서 파싱한 값인 arg_0을 eax로 옮기고 다시 var_8로 옮긴다. 그 후 var_8의 값을 ecx로 옮기고 61h(a)을 뺀 후에 var_8로 다시 옮겨 4와 비교한다. var_8의 값이 4보다 크면 점프하는데 점프 해보면
이런 Error메시지를 출력하는 것을 확인할 수 있다. 이제 점프하지 않았을 경우를 살펴보면
점프하지 않았을 경우에는 var_8을 edx에 넣고 [edx*4]값에 따라 점프하게 되는데 *4를 한 이유는 각 메모리의 주소가 4바이트 이기 때문이다.
이를 토대로 생각해보면 var_8의 값 즉 웹 페이지 주석에서 파싱한 값이 a, b, c, d, e 일 경우 각 각의 경로로 점프하는 것을 확인할 수 있고 이러한 구조는 Switch문에서 찾아볼 수 있다.
[04] 이 함수는 무슨 일을 하는가?
이제 Switch문 구조라는 것을 확인하였으니 각 각의 경로가 어떠한 일을 하는지 살펴보자 일단 입력 값이 a일 경우를 살펴보면
CreateDirectoryA 함수를 사용하여 C:\Temp 디렉터리를 생성하는 것을 확인할 수 있다. 이제 입력 값이 b일 경우를 살펴보면
CopyFileA 함수를 사용하여 이 파일 Lab06-03.exe를 C:\Temp\cc.exe로 복사한다. 이제 입력 값이 c일 경우를 살펴보면
DeleteFileA 함수를 사용하여 C:\Temp\cc.exe 파일을 지운다. 이제 입력 값이 d일 경우를 살펴보면
RegOpenKeyExA 함수를 사용하여 SOPTWARE\Microsoft\Windows\CurrentVersion\run 키 값을 가져오고 RegSetValueExA 함수를 사용하여 Malware란 이름의 C:\Temp\cc.exe 데이터를 갖는 레지스트리를 등록하여 프로그램 시작시 자동으로 파일을 실행하게 한다.
이제 입력 값이 e일 경우를 살펴보면
186A0h(100,000ms) 즉 100초 동안 Sleep한다.
[05] 이 악성코드에서 호스트 기반의 행위(indicator)가 존재하는가?
위의 분석 결과를 살펴보면 호스트 기반의 행위로 보이는 레지스트리 키 SOFTWARE\Microsoft\Windows\CurrentVersion\run과 파일 위치를 나타내는 C:\Temp\cc.exe를 볼 수 있다.
[06] 이 악성코드의 목적은 무엇인가?
이 악성코드는 인터넷 연결을 확인하고 인터넷이 연결되어 있으면 입력받은 URL의 웹 페이지를 다운하여 웹 페이지 주석을 파싱한다. 그 후 파싱된 문자에 따라서 Switch문으로 동작 하는데 디렉터리를 생성할건지 파일을 복사 할건지 파일을 지울건지 레지스트리를 조작할건지 아니면 100초 동안 Sleep 할건지를 결정한다.