1. 분석 환경
1.1. 분석 환경
l Windows 10 l Windows XP (VMware) |
1.2. 분석 도구
정적 분석 | l IDA |
1.3. 분석 샘플
Practical Malware Analysis Labs - Lab06-03.exe |
1.4. 질문
- 이 랩에서는 Lab06-03.exe 파일에서 발견된 악성 코드를 분석합니다
- 메인 함수에서 Lab 6-02의 메인 메서드의 호출과 비교했을 때 새로운 함수는 무엇인가요?
- 이 새로운 함수는 어떤 매개변수를 사용하나요?
- 이 함수는 어떤 주요 코드 구조를 포함하고 있나요?
- 이 함수는 어떤 기능을 수행할 수 있나요?
- 이 악성 코드에 대한 호스트 기반 특이점이 있나요?
- 이 악성 코드의 목적은 무엇인가요?
2. 분석 과정
2.1. 메인 함수에서 Lab 6-02의 메인 메서드의 호출과 비교했을 때 새로운 함수는 무엇인가요?
답: Sub_401130
Sub_401130을 호출하는 것이 추가되었다. 함수 호출 전 eax, ecx를 push하는데 이 호출된 함수의 반환 값이 될 것으로 추측한다.
2.2. 이 새로운 함수는 어떤 매개변수를 사용하나요?
답: 파싱한 문자 하나와 현재 실행중인 프로그램의 이름을 매개변수로 사용한다.
Sub_401130을 우 클릭 하면 매개변수로 들어가는 내용을 볼 수 있는데, char과 IpExistingFileName이라는 문자열이 보인다. 여기서 char은 var_8에 저장된 값인 practical~ 사이트에서 파싱해 온 문자열 하나이고, IpExistingFileName은 현재실행중인 이 파일의 이름을 나타낸다.
2.3. 이 함수는 어떤 주요 코드 구조를 포함하고 있나요?
2.4. 이 함수는 어떤 기능을 수행할 수 있나요?
Sub_401130을 자세히 살펴본다.
먼저 IDA 플로우 차트에서 Lab05-01에서 보았던 중첩된 분기문과 달리 한 갈래에서 뻗어 나가는 것을 볼 수 있다. IDA 차트에도 적혀 있지만, 이는 switch문이라는 것을 뜻한다.
받아온 두 매개변수는 각각 arg_0 , IpExistingFileName에 저장된다,
1. arg_0(파싱된 문자열)은 eax – ebp+var_8를 거쳐 ecx에 저장된다.
2. (sub ecx, 61h): ascii 코드 a값과 sub 명령을 한다. a의 값은 97이며 즉 파싱 된 문자 값에 97을 뺀다.
3. (mov [ebp+var_8], ecx / cmp [ebp+var_8], 4) : 이 뺀 값을 다시 var_8에 넣어 4에 비교한다.
4. (Ja def_401153) : 값이 4 보다 클 경우 점프한다.
5. (Jmp : ds jpt_401153[dex*4] ; switch jump) : 4보다 작을 경우 각각 스위치문으로 점프한다.
즉 이 구문은 문자열이 a부터 (a+1 = b) (a+2 = c) (a+3 = d) (a+4 = e)까지를 제외한 나머지를 디폴트 문으로 점프시키기 위함이다. 이 프로그램이 제대로 된 기능을 하기 위해서는 파싱 된 문자열이 a~e사이여야한다는 의미이기도 하다.
이제 각각의 스위치문을 살펴본다.
뺀 값 (0~4)에 4를 곱하여 각각 스위치문으로 점프한다.
파싱된 문자가 a 일 경우: push 0을 하고 CreateDirectoryA함수를 사용하여 C:\\temp디렉토리를 생성한다.
파싱 된 문자가 b 일 경우: 현재 실행중인 파일을 copyFileA함수를 사용하여 C:\\temp\\cc.exe 로 위장한다.
copyFilaA함수는 새파일에 기존 파일내용을 복사하는 함수이다.
파싱 된 문자가 c 일 경우: DeleteFileA로 c:\\Temp\cc.exe를 삭제한다.
파싱 된 문자가 d 일 경우:
RegOpenKeyExA로 Software\Microsoft\Windows\CurrentVersion\Run 키를 연다. 이 키는 시작 프로그램 목록을 설정한다. 여기서 RegSetValueExA함수를 사용하여 C:\\Temp\\cc.exe를 시작 프로그램으로 설정하고, valuName을 “Malware”로 설정한다.
RegSetValueExA는 실패하면 0을 반환하는데, test eax, eax로 이 값이 0인지 체크하여 jz short loc_4011D2로 점프한다.
점프한 곳에서는 “error 3.1: Could not set Registry value” 레지스트리 값 설정을 실패했다는 문자열을 출력한다.
파싱 된 문자가 e 일 경우: 186A0 = 100000 100초동안 sleep한다
2.5. 이 악성 코드에 대한 호스트 기반 특이점이 있나요?
문제 2.3,2.4에서 보았던 것처럼
현재 실행파일인 Lab06-03.exe를 C:\\Temp\\cc.exe로 위장한다.
그리고 RegOpenKeyExA로 Software\Microsoft\Windows\CurrentVersion\Run 값을 수정하여 C:\\Temp\\cc.exe 을 시작프로그램에 추가하고 ValueName을 “malware”로 지정한다.
2.6. 이 악성 코드의 목적은 무엇인가요?
Lab06-02.exe의 기능에 더하여 받아온 문자열에 따라 - 위장한 악성프로그램을 시작프로그램에 추가시키려는 목적이다.