본문 바로가기

악성 코드 분석

악성코드 Backdoor.Hacarmy.D 분석-1

웹, 네트워크 분야에 흥미를 가지지 않는 이상 정보보안으로 성공할 순 없다고 생각해서

정보보안이 아니라 제가 가장 하고싶은 악성코드분석으로 블로그 주제를 바꿔야 할것같습니다.


그래서 악성코드 분석 시작합니다.

(xp화면 출처 : 나, 함수들 설명 : MSDN)


제가 가지고 있는 Backdoor.Hacarmy.D은 화면보호기파일에 숨겨져있는데요, 겉으로는 멀쩡한 화면보호기처럼 보이지만 클릭하면 아무일도 일어나지 않고 사라집니다.

바로 이런점 때문에 악성코드를 발견하기가 힘든건데요, 사실 아무일도 안한것처럼 보이지만 



이렇게 프로세스에서는 ZoneLockUp이라는 exe파일을 생성시킨다음에 흔적을 감추는것입니다.


그러면 이제 이 Webcam Shots라는 파일은 어떤 일을 하는지 정확히 알아보기 위해 올리디버거를 통해 소스를 하나하나 살펴보겠습니다.


이것이 바로 Webcam Shots파일의 OEP인데요 pushad가 나오면서 수많은 jmp구간들이 나옵니다.

여기서 바로 이 소스는 UPX로 패킹이 되어있는 소스라고 눈치를 채셔야 합니다.



실제로 PEiD를 통해 파일을 보면 UPX로 패킹이 되어있다고 하니 일단 UPX를 통해서 언팩을 하고 프로그램 분석을 다시 하도록 하겠습니다.



이곳이 이제 언팩이 되서 나온 원래 소스인데요 

소스를 한줄한줄 계속 읽으면서 찾아가다가 브레이크표시된 call Webcam.004036FC함수로 들어가겠습니다.



이렇게 들어가면 또다른 함수가 나오는데요 여기서도 똑같이 브레이크표시된 call Webcam.00402621함수로 들어가보겠습니다.

(저는 call함수들을 들어가서 앞부분을 조금씩 보는 방법으로 목적지를 찾으면서 갔습니다.

사용된 API함수들을 찾으면서 간다던가, dll을 조사한다던가 하는 다른 방법으로도 이제 나올 중요한 부분은 찾을수 있습니다.)




이렇게 이제 00402621주소로 오게되면 파일에서 중요한 부분인 ZoneLockUp파일을 생성시키고, 자기자신을 삭제시키고, 또다른 일을 하는 구간으로 오게 됩니다.


0040262F push 104                                                            

00402634 push Webcam.00404540                                         

00402639 push 0

0040263B call <jmp.&KERNEL32.GetModuleFileNameA>    //여기까지 1

00402640 push 104

00402645 push Webcam.00404010

0040264A call <jmp.&KERNEL32.GetSystemDirectoryA>    //여기는 2

0040264F push Webcam.00405544

00402654 push Webcam.00404010

00402659 call <jmp.&CRTDLL.strcat>                           //이부분은 3

1. 이부분에서 GetModuleFileName이 실행파일의 경로를 받아오는 함수이고 parameter로 nSize,lpFilename,hModule을 받는다는것을 알면 이 소스는 260(104h)바이트로 이 파일이 실행되는 경로를 받는 일을 한다는것을 알 수 있습니다.


2. 이부분에서는 GetSystemDirectory가 system32폴더의 위치를 받아오는 함수라는것을 이용해

system폴더에 앞으로 접근할거라고 예측을 할 수 있습니다.


3.이부분은 Webcam.00405544 = \이고 Webcam.00404010=시스템드라이브의 위치

라는것을 생각하면 시스템드라이브경로+\라는 문자열을 만들어낸다고 할 수 있습니다.



그 다음부분에서 CharUpperBuff가 2번이 호출되며 바로 위에 루프가 있는데 이 CharUpperBuffA 함수가 각각 webcam.00404540,webcam.00404010을 parameter로 가진다는것을 보면 시스템경로와 파일경로 문자열의 크기를 구하는 루프입니다.


그 다음 strstr함수를 이용하는데요 그 parameter로는 시스템파일경로(Webcam.00404010)과 파일경로(Webcam.00404540)을 이용하는데 strstr함수가 s2에서 s1문자열이 어디서부터 시작되는지 그 주소값을 리턴하는 함수이기 때문에 시스템파일경로에서 현재 실행된 파일경로가 일치하는지를 보고 일치하면 jnz로 인해 00402736 주소로 jmp하게 됩니다.


그러면서 분석글도 여기까지.학교에서 하라는공부는 안하고 다시 분석하고 왔음.

여기부분이 이제 위에글에서 strstr을 이용해서 현재 프로그램이 처음 실행되는상태였다면 실행되는 소스입니다.

맨처음에 strcat을 이용해서 시스템파일경로(Webcam.00404010)에 ZoneLookUp(Webcam.00405094)를 더해서 하나의 문자열로 만듭니다.

그리고서 004026E0(CopyFileA함수 루프)로 가게 되는데요


copyfile의 함수 설명을 보면서 비교해보면 CopyFile함수를 이용 시스템파일경로에 시스템파일경로+ZoneLookUp파일을 생성 혹은 덮어쓰기를 한다고 합니다.

그 밑에 있는 jmp문은 CopyFile이 제대로 되지 않았을 경우 0.5초 대기(Sleep)을 한 후 다시 한번 CopyFile을 시도하는 루프문입니다.


그 후 CopyFile이 완료가 되면 sprintf함수를 이용해서 qwer플래그를 파일에 넣는데 이것은 이제 나중에 이 파일이 다시 한번 실행될때 처음으로 실행되는지를 판별하기 위해 넣는것입니다.


그 다음에는 ShellExecuteA함수를 이용해서 새로 생성된 ZoneLookUp파일을 실행한 다음 ExitProcess를 실행, Webcam파일의 실행이 꺼지게 되는 겁니다.


다음 분석글에서는 이제 이미 실행이 한번 되서 system32폴더에 ZoneLookUp이 켜졌을때 어떻게 작동하는지를 분석해보겠습니다.

'악성 코드 분석' 카테고리의 다른 글

JS:DownloadNSave-Z [Adw] 분석  (0) 2014.01.19
악성코드 Backdoor.Hacarmy.D 분석-3  (0) 2013.06.19
악성코드 Backdoor.Hacarmy.D 분석-2  (0) 2013.06.11