1 개요
과제 주제
드로퍼(dropper)의 구조와 원리 |
[표1 1 프로젝트 주제]
과제 요약
1. 미지의 프로그램에 대한 접근 방법 2. 드로퍼의 표면적인 작동원리 탐색 3. 드로퍼의 세부적인 작동 원리 탐색 |
[표1-2 과제 요약]
대상 독자
드로퍼에 대해 알고 싶은 사람 |
[표1‑3 대상 독자]
2 서론
드로퍼(dopper)란?
][1]
드로퍼(dropper)란 단어들 들으면 무엇이 떠오르는가? 말 그대로 무엇인가를 떨어뜨리는 것을 생각하기 쉽다. 예를 들어보자. 다들 트로이 목마는 한번쯤 들어 봤을 것이다. 트로이아 신화에 나오는 트로이 전쟁에서 그리스 장군인 오디세우스가 상대진영인 트로이 성의 내부로 진입하기 위해 만든 것으로 말모양의 구조물에 병사들이 숨어 상대 진영에 해당 구조물을 들인 후 상대방이 방심하는 틈을 노려 공격하는 전략을 말한다.
악성코드 유형 중 드로퍼도 트로이 목마와 같은 기능을 한다. 정상적인 파일안에 악의적인 행위를 하는 코드로 이루어진 하나의 프로그램이 적재되어 있다. 사용자는 정상파일인 줄 알고 실행을 한다. 그와 동시에 그 정상적인 프로그램 안에 타고있던 악성코드 전사들이 사용자의 시스템에 침투를 해 피해를 입힐 수가 있다.
[그림 2]에서 정상적인 파일 안에 악성파일이 적재 되어있다. 악성파일은 백신의 탐지를 피하기 위하여 정상파일 안에 숨어있다. 사용자가 정상파일을 실행 시 정상파일과 악성파일이 같이 실행이 되어 사용자는 쉽게 악성파일의 실행유무를 판단하기 힘들다.
이런 식으로 사용자의 환경을 이용해 사회공학적 공격을 한다. 공무원의 경우 공문서, 사기업의 경우 보고서의 형식으로 정상 프로그램으로 위장해 파일 실행을 유도한다. 이렇게 감염이 되면 개인정보 유출, 컴퓨터 파괴, 시스템 파일 삭제 등의 큰 정신적, 물질적 피해를 입히며 복구가 포맷으로도 어려운 경우도 있어 경계가 필요하다.[2]
3 본론
3.1 드로퍼 정체 파악
오늘 우리는 앞서 설명한 악성코드 전사들이 타고있는 한 프로그램에 대해 분석을 하며 이 프로그램의 설계자는 어떤 행위를 위하여 프로그램을 작성하였는지 알아본다.
지금부터 우리가 분석할 파일이다. 파일 확장자는 적혀 있지 않다. 파일이 어떻게 구성 되어 파악한다. 이를 바탕으로 확장자를 부여한다.
파일의 내용을 알 수 있는 Exeinfo.exe로 해당 파일을 탐색해 보았다. 눈에 띄는 것은 UPX 로 패킹되어 있다. 패킹은 실행 압축이란 뜻이며 패커는 패킹이라는 행위를 한다. 즉, 압축을 푸는 과정 없이 일반 프로그램처럼 실행이 가능하다. 내부에 압축해제 코드를 포함하며 실행하는 순간 메모리에서 압축을 해제 후 실행이 완료가 된다. Exinfo는 해당 파일을 upx.exe로 언팩이 가능하다고 표시한다.
upx.exe로 패킹을 해제하였다.
사용 방법은 시작 -> 실행 -> cmd입력 후 upx.exe가 있는 디렉토리로 옮긴 후 명령어를 입력하면 된다.
Ex)명령어: 해당 디렉토리\upx -d 파일이름
언패킹 후 File size를 보면 파일의 크기가 4배로 증가했다. upx패커를 이용하면 상당히 디스크 공간을 절약 할 수 있다. 또한 Format에서 windows OS(Operation System)에서 작동하는 PE(Portable Executable)파일 포맷으로 확인된다.
PE파일 중 대표적 포맷인 exe로 변경 후 분석을 진행한다. 악성 프로그램 답게 malware.exe로 수정을 했다. 이 프로그램은 어떻게 동작하는 것일까? 일단 실행을 해보았다. 그러자 파일이 사라지는 것이 아닌가? 수상하다. 수상한 이 파일은 기초 정적 분석을 통하여 알아볼 필요가 있다.
PE(Portable Executable)은 윈도우 운영 체제에서 사용되는 실행파일, DLL 등을 위한 파일 형식이다. 일반적으로 잘 알려진 exe, dll, obj, sys등의 확장자를 가진 파일들이 여기에 해당 된다. PE를 구성하는 요소들은 각각 구조체의 형태를 가지고 있는데 2가지의 항목으로 묶어서 볼 수가 있다. Header와 Section이다
PE 구조에서 헤더에는 파일을 실행할 때 맨 처음 시작해야 할 코드의 시작부분에 대한 정보 등 파일을 실행하는데 있어서 필요한 전반적인 정보들을 담고있다.
PE 구조에서 섹션에는 실제 프로그램을 구성하는 어셈블리 코드, 그리고 소스코드 내에서 선언한 전역변수나 static 변수들 등을 담고 있다. [3]
3.2 Malware.exe 기초 정적 분석
우리는 앞서 malware.exe를 직접 실행을 했다. 그 결과 프로그램이 자신을 스스로를 삭제했다. 어떤 방식으로 진행이 되는지 알아보자.
3.2.1 기초 정적 분석
peview를 이용하여 malware.exe를 열었다. SECTION .rsrc를 보면 해당 영역에 바이너리가 4D 5A/MZ 로 시작하는 것을 볼 수 있다.
이것을 파일 시그니처라고 한다. 파일 시그니처는 파일의 가장 처음에 위치하는 특정 바이트들로 파일 포맷을 구분하기 위해 사용한다.
그러나 파일의 처음인 헤더부분에 있어야할 파일 시그니처가 섹션에 있다니 뭔가 의심이 가지 않는가? Peview에서는 DLL의 시그니처로 분석했다. 즉 malware.exe 파일 안에는 DLL이 숨겨져 있다.
MZ는 PE파일에서 나타나는 문자열로 헤더영역 맨 앞에 위치해 있다. [그림 10]은 헤더 첫 부분에 나타나는 4D 5A/MZ 에 해당하는 파일 타입과 설명이다.
3.2.2 숨겨진 파일 추출
Malware.exe에 포함되어 있는 DLL파일을 때어 내기 위하여 Resource Hacker 프로그램을 이용해 해당 바이너리 부분을 dll 파일로 떼내어 저장 할 수가 있다.
추출한 dll의 이름을 hello라고 지어주었다.
3.2.3 Hello.dll의 IAT(Import Address Table) 분석
Hello.dll의 IAT (Import Address Table)를 참고하여 해당 파일이 사용하는 API함수들을 분석해 보았다.
ADVAPI32.dll |
||
레지스트리 |
RegCreateKeyExA |
키를 생성 |
RegSetValueExA |
값을 설정 |
|
RegDeleteKeyA |
키를 삭제 |
|
RegDeleteValueA |
값을 삭제 |
|
RegOpenKeyExA |
키 열기 |
|
RegOpenKyeA |
키 열기 |
|
RegQueryValueExA |
키의 기본 값을 가져옴 |
|
RegCloseKey |
키를 닫음 |
|
|
||
서비스 |
CreateServiceA |
서비스 생성 |
QueryServiceConfigA |
지정된 서비스의 구성 매게 변수를 가져옴 |
|
ChangeServiceConfigA |
서비스의 구성 매게 변수를 변경 |
|
OpenSCManagerA |
관리자 데이터베이스를 연다 |
|
OpenServiceA |
존재하는 서비스를 연다 |
|
CloseServiceHandle |
서비스를 닫는다 |
|
StartServiceA |
서비스를 실행한다 |
|
SetServiceStatus |
서비스 제어 관리자의 상태정보를 업데이트 |
그림[ADVAPI32.dll에서 사용된 함수]
ADVAPI32.dll은 부가 기능을 커널에 사용할 수 있게 도와 준다. 윈도 레지스트리, 시스템 종료/다시 시작 (또는 중단), 윈도 서비스 시작/중지/만들기, 사용자 계정 만들기와 같은 것들을 포함한다. 이러한 기능들은 32비트 윈도우의 advapi32.dll에 상주한다.[5]
즉, Hello.dll에서 레지스트리의 값을 생성, 삭제를 하며 서비스에 무엇인가를 등록해 실행 한다.
KERNEL32.dll |
||
파일 |
GetWindowsDirectory |
윈도우 폴더 위치를 탐색 |
FindFirstFileA |
파일 검색을 시작한다. |
|
FindNextFileW |
다음 파일의 정보를 읽는다 |
|
GetDriveType |
지정한 디스크의 형태를 판단 |
|
DeleteFileA |
해당 파일을 삭제 |
|
CreateFileA |
파일을 생성 |
|
|
||
프로세스 |
WinExec |
특정 어플리케이션을 실행 |
ExitProcess |
프로세스 종료 |
그림14 [KERNEL32.dll 에서 사용된 주요 함수]
KERNEL32.DLL은 메모리 관리, 입출력 명령, 프로세스와 스레드 생성, 그리고 동기화 함수들 같은 대부분의 Win32 베이스(base) API들을 응용 프로그램에 내보낸다. 대부분의 것들이 (NTDLL.DLL에 의해 내보내진) 상응하는 네이티브 API를 호출함으로써 KERNEL32.DLL의 내부에서 구현되어 있다.[6]
위에서 사용된 주요 함수들은 파일을 탐색하여 삭제하며 특정 어플리케이션을 실행 및 종료 하는 것으로 파악한다. 실행후 삭제라는 조건을 만족하는 함수가 있음을 추측한다.
WININET.dll |
||
인터넷 |
HttpSendRequestA |
추가 데이터를 전송기 위해 HTTP서버에 지정된 요청을 보낸다 |
InternetCloseHandle |
인터넷 핸들을 닫는다 |
|
HttpAddRequestHeadersA |
HTTP 요청 핸들에 하나 이상의 HTTP 요청 헤더를 추가 |
|
HttpOpenRequestA |
Http 요청 핸들을 만든다 |
|
InternetConnectA |
지정된 사이트에 대해 FTP 또는 HTTP 세션을 연다 |
그림15 [WININET.dll 에서 사용되는 주요 함수]
인터넷에 관련된 함수를 사용 하는 것으로 보아 외부와 통신을 하는 것으로 추측이 된다.
3.2.4 Dll main
Dll이 로드할때 실행되어야 할 함수는 스레드를 생성하고 동일 프로그램을 종료시키는 것으로 파악이 된다. 필요시 내부함수를 로드하는 것으로 파악이된다.
64to32.dll EAT
64to32.dll 에서 제공되는 함수들의 공통점은 10001000번지를 호출한다.
시스템 디렉토리 system32의 경로를 얻고 usp10라는 라이브러리 파일을 사용하는 것으로 파악이 된다.
3.2.5 기초 정적 분석 결과
기초 정적 분석을 통하여 알 수 있었던 점은 다음과 같다. 우선 Malware.exe를 실행하니 표면적인 행위를 하지 않았고 곧바로 자기 스스로 삭제했다.
malware.exe에서 사용되는 함수를 기반으로 추측했을 때. 서비스에 무엇인가를 등록시키고 레지스트리의 키와 값을 변경, 인터넷 통신을 하는 것으로 파악했다.
해당 프로그램의 대략적인 원리를 파악한 것을 바탕으로 그 다음 분석 과정인 기초 동적 분석으로 넘어간다.
3.3 Malware.exe 기초 동적 분석
우리는 지금까지 분석을 통하여 Malware.exe안에 hello.dll이라는 파일이 들어있으며 여러 함수들을 사용하는 것을 발견했다. 그러면 Malware.exe는 어떤 식으로 실행이 되는지 기초 동적 분석을 한다.
3.3.1 기초 동적 분석
기초 동적 분석을 위하여 SysAnalyzer 라는 프로그램을 통하여 분석했다.
Malware.exe가 실행한 직후 2초만에 프로그램이 종료가 되었고 실행 중 svchost.exe가 실행이 되었으며 명령어 -k netsvcs로 실행되고 있다.
Running Processes탭에는 현재 실행 실행중인 프로세스의 PID(Process ID)와 해당 프로세스를 호출한 ParetPID가 표시된다. Malware.exe가 실행 후 svchost.exe가 실행 된다.
앞서 실행된 프로세스의 PID는 1876으로 확인되며, 이 프로세스(svchost.exe)는 포트번호 1116, 1117, 1118 그리고 1119를 연다.
Reg Monitor탭에서 파일의 생성과 레지스트리 키와 값 설정을 볼 수가 있다. 맨 하단에 경로(C:\WINDOWS\System32)에 64to32.dll 파일을 생성을 한다. 그리고 서비스 키에 64to32라는 이름의 키를 생성한다.
C:\WINDOWS\system32에 생성된 64to32.dll 의 속성이다. 이 파일은 malware.exe에서 수동으로 뽑아낸 hello.dll 파일과 99%동일하다. 지금까지의 분석 결과는 다음과 같다.
3.3.2 기초 동적 분석 결과
기초 분석 결과 후 malware.exe의 삭제 메커니즘을 그림으로 나타냈다. malware.exe는 64to32.dll 파일을 C:\WINDOS\system32에 생성하며 svchost.exe에 서비스로 등록한다. 그리고 64to32.dll을 이용해 외부와 1116, 1117, 1118 그리고 1119 포트를 이용 UDP 통신 기능을 수행한다. 서비스 등록을 마친 malware.exe는 자동 소멸한다.
지금까지 기초 정정 및 동적 분석에서는 대략적인 행위를 분석했다. 앞으로 남은 과제는 malware.exe가 실행되는 자세한 내용과 svchost.exe에 등록된 64to32.dll의 수행 기능을 파악하는 것이다. 자세한 내용들은 고급 정적 분석, 고급 동적 분석을 실시한다.
3.4 Malware.exe 고급 정적/동적 분석
Malware.exe가 동작하는 원리를 앞서 분석한 결과를 토대로 분석한다.
[그림 23]은 Malware.exe의 main함수를 조사 후 기능에 맞게 이름을 부여했다. FindAndCloseVAC는 현재 실행중인 백신을 찾아 종료 및 삭제하는 함수다. CreateFileAndService는 리소스 영역에서 새로운 메모리 공간을 할당해 리소스 영역으로부터 복사해 64to32.dll을 생성하고 레지스트리 키를 이용 서비스에 등록하는 역할을 한다. SelfDelete는 mareware.exe를 삭제하는 기능을 한다.
3.4.1 SelfDelete
처음 프로그램을 접근할 때 실행을 먼저 했다. 표면적으로 변화는 없었으며 malware.exe가 사라지는 모습을 보았다. 내부 동작원리를 분석할 차례다.
정적 분석
지금까지 기초 정적 분석과 기초 동적 분석 결과 악성코드의 역할을 다하고 삭제됨을 알았다. 그렇다면 메인 함수 끝에서 자기 자신을 삭제하는 함수가 있지 않을까? 라는 생각을 가지고 접근을 해보았다.
해당 코드 분기점은 malware.exe의 main의 함수다. 프로그램의 마지막 부분이며 이 곳에서 자기 자신을 삭제하는 기능을 확인 할 수 있다.
Call SelfDelete는 임의로 지정한 이름이다. 변경 하고자 하는 명령어를 커서를 가져가 오른쪽 클릭 rename을 눌러 수정 할 수 있다.
IDA에서는 함수의 이름을 진입할 다음 주소로 표현 한다. 이미 알려진 API라면 해당 이름을 나타내 어떤 기능을 하는지 쉽게 추측이 가능하다.
Call SelfDelete 함수를 더블 클릭하면 내부로 진입 할 수 있다.
SelfDelete 함수의 구조다. 초록색 과 빨간색 화살표는 분기점으로 조건에 맞는 경로로 움직인다. GetModuleFileNameA로 파일의 전체 경로를 얻고 GetShortPathNameA로 해당 파일의 짧은 경로를 얻는다. 그리고 문자열들을 복사하고 연결시킨다. 문자열에 들어간 내용을 보면 파일삭제에 쓰이는 del 명령어가 있다. 그후 ShellExcuteA를 실행해 넘겨주고 return을 하는 것 같다. Return 부분에서는 실패하든 성공하든 함수의 스택 정리 후 함수를 종료 시킨다.
동적 분석
앞서 정적분석한 결과를 토대로 자세히 살펴본다
SelfDelete 함수 내부의 모습이다. GetModuleFileNameA로 해당 파일의 전체 경로를 구한다. 경로를 구하지 못하였으면 JE 분기점에 의해 리턴 되고 해당 함수는 종료가 된다.
정상적으로 전체경로를 구한다음 GetShortPathNameA를 통하여 단축 주소를 구한다. lstrcpyA에서 단축주소를 복사한다. 그후 문자열 “/c del”을 단축 주소 뒤에 lstrcatA함수로 연결시킨다. 위와 같이 완성된 문자열을 >>NUL 문자열로 연결 시킨다. ShellExuceteA함수에서 완성된 문자열을 CMD.exe에 명령어로 입력해 실행하는 것을 알 수 있다.
‘/c’ 의 뜻은 다음 문자열을 받아 실행할 것 이다.
분석 결과
SelfDelete 함수의 최종 분설 결과다.
1. Malware.exe가 위치한 경로 문자열을 구한다.
2. CMD에 인자로 넘겨줄 Malware.exe 삭제 명령문을 작성한다.
3. ShellExcuteA를 이용해 CMD.exe에 명령어문을 인자로 넘겨 실행한다.
즉, 윈도우 내부프로그램인 CMD.exe의 도움을 받아 마치 자기자신을 삭제한 것처럼 보였던 것이다.
3.4.2 FindAndCloseVAC
해당 함수는 V3LTray.exe, AYAgent.aye, nsavsvc.npc, v3sp.exe를 찾아 삭제하는 기능을 수행한다. 이 파일들은 바이러스 진단 백신의 핵심적인 역할을 하는 파일들이다.
FindAndCloseVAC함수의 모습이다. 이 함수는 현재 실행중인 함수를 CloseHandle을 이용해 종료 시키고 CheckAlive를 통해 존재하는지 판단한다. 그리고 GetTempPath로 현재 주소를 얻는다. 그리고 얻은 주소를 DeleteFileA를 사용해 해당 경로의 프로그램을 삭제한다.
CloseHandle
CloseHandle 함수 부분이다. 문자열을 총 4번 받아 00401070을 매번 호출한다. 해당 호출 영역에서 문자열을 받아 현재 실행 중인지 찾아 프로그램을 종료 시키는 역할을 한다.
해당 함수는 넘겨받은 문자열로 현재 실행중인 프로그램을 탐색한다. 프로그램이 없으면 일정 횟수 반복 후 아래쪽의 CloseHandle함수를 실행 후 return 한다.
CheckAlive
closeHandle을 수행을 하고나서 해당 파일이 존재하였는지 검사를 하는 부분이다. 하나라도 나오지 않았을 경우에 FindAndCloseVAC 함수를 바로 탈출한다.
GetTempPath, DeleteFileA
GetTempPathA를 이용하여 Buffer에 담긴 파일 주소를 구한다. 해당주소의 길이는 104h다.
파일 주소를 FlieName의 인자로 넘겨 파일을 삭제하는 기능을 한다.
분석 결과
FindAndCloseVAC 함수는 현재 실행중인 백신파일들을 우선적으로 종료한다. 그리고 해당 파일들의 존재유무를 확인한다. 하나도 해당이 안될 시 해당 함수를 바로 탈출하며 최소 1개 존재 시 해당 파일의 주소를 획득하여 파일 삭제를 진행한다. 프로그램이 실행 후 목적을 달성하기 위하여 백신 프로그램을 삭제하는 것으로 파악한다.
3.4.3 CreateFileAndService
CreateFileAndService함수의 구조다. 이 함수는 위와 같은 흐름으로 진행이 된다. OpenScManagerA는 서비스 제어 관리자에 대한 연결을 설정한다. GetSystemDirectoryA는 시스템 폴더 경로를 얻고(C:\WINDOWS\system32\). _Access는 파일의 읽기 전용 여부를 결정한다. MoveFileEx는 임시 저장된 파일을 시스템 폴더 경로에 64to32.dll로 바꾸는 옵션이 설정 되어있다. FindResource에서 리소스를 찾아 파일을 만든다. ChangeServiceConfigA에서 서비스를 생성 그리고 StartService에서 시작한다.
파일 생성과 서비스 생성에 대해 중점적으로 알아본다.
CreateServiceA
서비스의 이름은 64to32로 하며 서비스가 시작 되는 곳은 로컬 시스템이다. 실행될 서비스의 경로는 “%SystemRoot%\system32/scvhost.exe -k netsvcs”다. 이 함수가 실행 되기 전 서비스 레지스트리에 64to32 를 입력했다.
.
앞서 입력한 값의 결과대로 만들어진 모습이다. Svshost.exe 는 DLL로 구현이 된다. -k 와 같은 특정 변수로 처음 시작될 때
HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Svchost
에서 같은 이름의 값을 찾고 서비스 이름 목록으로 해석한다
FindResource -> CreateFile
분석 결과 Dll 파일을 어떻게 만드는지 확인했으며 총 4단계를 거쳐 진행되었다. 리소스 확보, 메모리 공간 할당 , 리소스로부터 메모리에 복사, 파일 생성 그리고 메모리 할당 취소다.
리소스 확보
Malware.exe 파일안에 리소스 형식으로 dll이 저장되어 있기에 FindResourceA함수로 찾기가 가능하다. Resource는 FindResourceA 함수 결과 리소스의 포인터는 레지스터 [ESI]에 저장된다. [ESI]를 참조해 찾은 리소스의 크기를 파악하고 가져온다. [ESI]에 값이 없으면 분기점에 의해 해당 함수를 바로 탈출한다. [ESI]는 리소스 주소[0040B060]가 담겨있다.
주소 [0040B060]에 malware.exe에 포함된 dll 바이너리가 내용이 있다. 여기를 참조하여 리소스 주소를 불러들인다.
메모리 공간을 할당하여 해당 리소스[0040B060]를 올릴 준비를 한다. 11000h 크기를 준비하며 주소[001469B8]에 영역을 확보한다. 메모리 영역이 확보되는 위치는 이어서 나오는 WriteFile의 인자로 알 수 있었다.
주소 [001469B8]는 원래 의미 없는 값들로 채워진 영역이다. GlobalAlloc 함수로 11000h 만큼 할당 후 해당 영역은 00h으로 초기화 했다. 이를 메모리 영역이 확보하기 위해 초기화된 상태라고 한다.
리소스 메모리에 복사
주소 [004030BF]는 리소스영역의 내용을 메모리가 확보된 영역으로 복사한다.
REP(Repeat String) MOVS 명령어는 ECX 레지스터를 카운터를 사용해 source를 destination으로 ECX>0 조건을 걸어 MOV하며 한번 진행될 때마다 ECX 레지스터 값이 -1 된다.
ESI 레지스터에는 malware.exe 의 DLL 리소스 위치[0040B060]를 나타내며 EDI의 레지스터는 새로이 할당된 메모리영역의 주소[001469B8]를 나타내고 있다. 즉, 리소스를 새로 할당된 메모리 영역으로 복사한다.
새롭게 메모리를 할당한 공간에 리소스파일을 복사한 모습이다. 주소 [001469B8]은 00h로 초기화된 상태였지만. REP MOVS명령어로 리소스[0040B060]가 한 바이트 씩 복사되었다.
파일 생성
CreateFileA를 이용해 파일 쓰기 권한을 이용 작성을 한다. 파일이름에 경로를 합한 문자열로 해당 위치에 64to32.dll 파일을 생성한다.
WriteFile인자 중 Buffer는 쓰여질 내용의 포인터이다. 앞서 리소스로[0040B060]부터 메모리[001469B8]에 복사한 주소이며. 해당영역을 가져다 파일을 작성하게 된다.
C:\windows\system32 경로에 64to32.dll 이 생성되었다.
메모리 할당 취소
파일 복사라는 목적을 달성한 이후 필요가 없어진 메모리 공간을 풀어준다.
새롭게 할당 되었던 메모리 공간이 00h로 초기화 되기 전 상태로 돌아갔다.
분석 결과
Malware.exe 파일에 리소스 형식으로 저장된 dll파일의 위치를 확보한다. 그리고 메모리 주소 [001469B8]에 11000h의 크기로 새롭게 공간을 할당한다. 그 후 원본 리소스 위치 [0040B060]으로부터 새롭게 확보한 메모리 공간 [001469B8]로 해당 내용을 복사한다. 새로운 메모리 시작 주소를 참고해 C:\windows\system32 폴더에 64to32.dll을 생성한다. 그리고 목적을 달성해 필요 없어진 메모리 영역[001469B8]을 해제한다.
4 결론
Malware.exe는 백신을 탐지하여 종료 및 삭제하며 내부의 리소스를 새로운 메모리 공간에 할당 받아 시스템 폴더에 64to32.dll을 생성한다. 그 후 해당 파일을 서비스에 등록하며 통신을 시도한다. 임무를 마친 malware.exe는 자기 자신을 삭제하는 것으로 파악이 된다.
5 치료 방법(치료프로그램 개발)
1. 64to32.dll 파일 언로드 및 제거
Regsvr32.exe를 활용하여 64to32.dll을 언로드 시킨다. remove함수를 이용하여 해당 파일을 제거시킨다.
2. 지워진 파일 복구(디지털포렌식 분야) *동영상 내용 인용
FTA32파일 시스템 상에서 파일복구를 위하여 하드디스크를 사용하기 위해 오픈을 한다. 루트클러스터(디렉토리) 주소로 이동한다. 파일 시스템 구조를 참조하여 각 해당파일이 존재했던 주소의 영역에 접근한다. 파일 존재 플래그를 바꿔주면 OS에서 인식이 가능하다.
6 향후 목표
파일시스템 구조에 대하여 학습할 필요성을 느꼈습니다.
7 참조
Scvhost.exe
https://en.wikipedia.org/wiki/Svchost.exe
REP MOVS
MSDN
https://msdn.microsoft.com/ko-kr/library/ms123401.aspx
등록된 DLL 제거하기
https://rockdrumy.tistory.com/871
디지털포렌식(FAT32 파일시스템 구조)
https://www.youtube.com/playlist?list=PLNj6k44kYyiFWoNEp6mSYLiEOG7HZCSbW
[1] 나무위키 트로이목마 사진 참조
[2] 나무위키 트로이목마 내용 인용
[3] http://haerakai.tistory.com/18 인용
[4] 그림 9 출처 http://forensic-proof.com/archives/300
[5] 위키피디아 윈도우 라이브러리 파일
[6] 위키피디아 윈도우 라이브러리 파일