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

실전 악성코드와 멀웨어 분석 실습 6-3

111-000-111 2021. 11. 21. 17:36

이 실습에서는 파일 Lab06-03.exe에서 발견한 악성코드를 분석한다.

 

 

 

 

 

 

1. main 함수 호출과 실습 6-2의 main 함수와 비교하라. main이 호출한 새로운 함수는 무엇인가?

 

 

6-2에서는 호출하지 않던 sub_401130 함수가 호출된다.

 

 

 

 

 

 

 

 

2. 새로운 함수는 어떤 인자를 갖는가?

 

char 인자와, lpExistingFileName이라는 인자를 받는다.

char는 html 주소에서 파싱한 문자이고, lpExistingFileName은 argv[0]에 해당하는 현재 프로그램 이름이다.

 

 

sub_401040 함수에서 파싱해온 문자를 [ebp+var_8]에 저장하는데 이를 ecx에 받아 스택에 넣어주었다.

edx에 argv[0]을 넣어주고, 다시 그 주소 값을 eax에 넣어준 후, 스택에 넣어준다.

이 값들이 각각 char, lpExistingFileName이 된다.

 

 

 

 

 

 

3. 이 함수가 가지는 주요 코드 구조는 무엇인가?

4. 이 함수는 무슨 일을 하는가?

 

 

arg_0은 IDA Pro에서 호출 전에 푸시되는 마지막 파라미터에 붙이는 이름이다.

따라서 이는 파싱된 문자이다. 이 파싱된 문자는 var_8로 이동하고, ecx로 이동하여 a만큼 빼준다. (61h==ASCII 'a')

즉, arg_0이 a였다면 ecx는 0이 된다.

그 후, 뺀 값을 var_8로 다시 옮겨 4와 비교한다. (a,b,c,d,e인지 여부를 확인하기 위하여)

만약 var_8이 4보다 크면 오류 메시지가 출력되는 곳으로 점프하고, 아니면 switch 구문으로 이동한다.

 

switch 구문에 해당하는 점프 테이블

 

edx에 위에서 계산한 값을 넣어주고, edx에 4를 곱해준다. 그 이유는 점프 테이블에서 분기하는 항목이 크기가 4바이트인 주소값이기 때문이다.

 

switch문의 전체적인 구조

 

a일때 분기문

 

파싱된 문자가 a일때는 C:\Temp 경로의 디렉터리를 생성한다. 

 

b일때 분기문

 

b일때는 CopyFileA를 통해 Lab06-03.exe 파일을 C:\Temp\cc.exe 경로의 파일로 복사한다.

 

c일때 분기문

 

c일때는 C:\Temp\cc.exe 경로의 파일을 삭제한다.

 

d일때 분기문

 

d일때 RegOpenKeyExA()로 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run의 핸들을 얻어 Malware 키를 새로 추가하고, C:\Temp\cc.exe 값을 설정하여 시스템을 부팅할 시에 악성코드를 시작하게 만들어 준다.

 

RegSetValueExA 함수

 

hKey : 레지스트리 핸들 값
lpValueName : 설정할 값의 이름, 해당 항목이 없다면 이 값을 키에 새로 추가해준다.
Reserved : 예약된 값으로 0을 전달
dwType : lpData의 데이터 유형
lpData : 저장할 데이터, null로 종결되는 문자열이 와야 한다.
cbData : lpData의 크기, 바이트 단위로 전달. (널문자도 포함한 크기)

 

e일때 분기문

 

e일때는 100초 동안 프로그램을 Sleep 한다.

 

default일 경우

 

default일 경우에는 에러 메시지를 출력한다.

 

 

 

 

 

 

 

 

 

 

5. 이 악성코드에서 호스트 기반의 행위(indicator)가 존재하는가?

 

레지스트리 키 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Malware와,

C:\Temp\cc.exe 파일이 호스트 기반의 식별자에 해당한다.

 

 

 

 

 

 

 

 

 

6. 이 악성코드의 목적은 무엇인가?

 

정리하면, 이 프로그램은 인터넷 연결 유무를 확인한 후에 연결이 되어있지 않으면 프로그램이 종료되고, 연결이 되어있으면 특정 웹 페이지를 다운로드 하고, HTML 주석을 파싱한다.

파싱한 문자에 따라 switch문으로 아래 동작을 결정한다.

 

  • C:\Temp 디렉터리를 생성할 것인지
  • Lab06-03.exe 파일을 C:\Temp\cc.exe 파일로 복사할 것인지
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Malware에 해당하는 레지스트리 키에 C:\Temp\cc.exe 값을 설정하여 부팅 시 자동으로 시작하게 만들 것인지
  • 100초간 프로그램의 동작을 멈출 것인지