반응형

* SamIGetPrivateData

 보안 계정 관리자 데이터베이스에서 특정 사용자에 관한 개별 정보를 질의한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.


* SamQueryInfomationUse

 보안 계정 관리자 데이터베이스에서 특정 사용자에 관한 개별 정보를 질의한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.


* send

 원격 시스템에 데이터를 전송한다. 악성코드는 이 함수를 이용해 원격 명령 제어 서버로 데이터를 전송한다.


* SetFileTime

 파일의 생성, 접근, 최근 수정 시간을 변경한다. 악성코드는 종종 이 함수를 이용해 악의적인 행위를 숨기려 한다.


* SetThreadContext

 주어진 스레드 문맥을 수정할 때 사용한다. 일부 인젝션 기법은 SetThreadContext를 사용한다.


* SetWindowsHookEx

 특정 이벤트를 호출할 때 매번 호출하는 후킹 함수를 설정한다. 주로 키로거나 스파이웨어가 사용하며, 이 함수는 DLL을 시스템상의 모든 프로세스로 로드하는 쉬운 방법을 제공한다. 이 함수는 때로 컴파일러가 추가한다.


* SfcTerminateWatcherThread

 윈도우 파일 보호를 비활성화하고 보호돼야 할 파일을 수정하는 데 이용한다. SfcFileException도 이 기능에 사용할 수 있다.


* ShellExecute

 다른 프로그램을 실행할 때 사용한다. 악성코드가 신규 프로세스를 생성하면 새로운 프로세스도 역시 분석할 필요가 있다.


* StartServiceCtrlDispatcher

 프로세스의 main 스레드를 서비스 제어 관리자로 연결하는 서비스에 의해 사용한다. 서비스로서 동작하는 임의의 프로세스는 이 함수를 시작한지 30초 이내에 호출해야만 한다. 악성코드에서 이 함수가 존재한다면 함수는 서비스로 동작할 것이다.


* SuspendThread

 실행 중지를 위해 스레드를 중단한다. 악성코드는 때때로 스레드를 중단해 코드 인젝션을 수행한다.


* system

 일부 C 런타임 라이브러리에서 제공하는 다른 프로그램을 실행시키는 함수다. 윈도우에서 이 함수는 CreateProcess의 래퍼 함수(wrapper function)를 제공한다.


* Thread32First/Thread32Next

 프로세스 스레드를 통해 반복할 때 사용한다. 주입기는 이 함수를 이용해 인젝션할 적절한 스레드를 찾아낸다.


* Toolhelp32ReadProcessMemory

 원격 프로세스 메모리를 읽을 때 사용한다.


* URLDownloadToFile

 웹 서버에서 파일을 다운로드하고 디스크에 저장하는 상위 수준의 호출이다. 이 함수는 모든 종류의 다운로더 기능을 하나의 함수 호출에서 구현했기 때문에 대중적인 다운로더다.


* VirtualAllocEx

 원격 프로세스에서 메모리를 할당할 수 있는 메모리 할당 루틴이다. 악성코드는 때때로 VirtualAllocEx를 프로세스 인젝션의 일부로 사용한다.


* VirtualProtectEx

 메모리 지역 보호를 변경한다. 악성코드는 이 함수를 이용해 메모리 읽기 전용 섹션을 실행 가능하게 변경한다.


* WideCharToMultiByte

 유니코드 문자열을 ASCII 문자열로 변환할 때 사용한다.


* WinExec

 다른 프로그램을 실행할 때 사용한다. 악성코드가 신규 프로세스를 생성하면 새로운 프로세스도 역시 분석할 필요가 있다.


* WlxLoggedOnSAS(그리고 기타 Wlx* 함수)

 인증 모듈 행위를 하는 DLL이 익스포트해야만 하는 함수다. Wlx* 함수를 익스포트하는 악성코드는 그래픽 식별과 인증(GINA, Graphical Identification and Authentication)교체를 수행할 수도 있다.


* Wow64DisableWow64FsRedirection

 64비트 운영체제에서 32비트 파일을 로드할 때 발생하는 파일 리다이렉션을 비활성화한다.

32비트 애플리케이션이 이 함수를 호출한 이후 C:\Windows\System32로 쓰려하면 C:\Windows\SysWOW64로 리다이렉션하는 대신 실제 C:\Windows\System32로 쓰게 된다.


* WriteProcessMemory

 원격 프로세스로 데이터를 작성할 때 사용한다. 악성코드는 WriteProcessMomory를 프로세스 인젝션의 일부로 이용한다.


* WSAStartup

 하위 수준의 네트워크 기능을 초기화할 때 사용한다. 네트워크 관련 기능의 시작점을 알아내는 쉬운 방법으로 WSAStartup 호출 검색을 사용한다.



반응형
반응형

* NtSetInfomationProcess

 프로그램 권한 수준을 변경하거나 데이터 실행 방지(DEP)를 우회할 때 사용한다.


* OleInitialize

 COM 라이브러리를 초기화할 때 사용한다. COM 객체를 사용하는 프로그램은 다른 COM 함수를 호출하기 이전 OleInitialize를 호출해야만 한다.


* OpenMutex

 악성코드가 시스템에서 특정 시간에 하나의 인스턴스만 실행하게 보장하는 상호 배제 객체 핸들을 오픈한다. 악성코드는 뮤텍스명을 고정하는 경우가 많으므로 좋은 호스트 기반 감염 흔적이 될 수 있다.


* OpenProcess

 시스템 동작 중인 다른 프로세스 핸들을 오픈한다. 이 핸들은 다른 프로세스 메모리로 읽고 쓰거나 다른 프로세스로 코드로 주입할 때 사용한다.


* OpenSCManager

 서비스 제어 관리자 핸들을 오픈한다. 서비스를 설치, 수정, 제어하는 임의의 프로그램은 다른 서비스 조작 함수 이전에 반드시 이 함수를 호출해야만 한다.


* OutputDebugString

 디버거에 붙으면(attach) 문자를 출력한다. 이는 안티디버깅 기법으로 사용할 수 있다.


* PeekNamePipe

 파이프에서 데이터를 삭제하지 않고 명명한 파이프에서 데이터를 복제할 때 사용한다.

이 함수는 리버스 셸에 자주 사용한다.


* Process32First/Process32Next

 CreateToolhelp32Snapshot 이전 호출에서 프로세스를 수집하기 시작할 때 사용한다.

악성코드는 인젝션할 프로세스를 검색할 때 프로새스를 검색한다.


* QueryPerformanceCounter

 하드웨어 기반 성능 카운터 값을 검색할 때 사용한다. 이 함수는 때때로 안티디버깅 기법의 일부로 시간 정보를 입수할 때 사용한다. 컴파일러가 종종 추가해 많은 실행 파일에서 포함하고 있으므로 이 함수를 임포트했다는 사실 자체가 제공하는 정보는 거의 없다.


* QueueUserAPC

 다른 스레드에서 코드를 실행할 때 사용한다. 악성코드는 QueueUserAPC를 이용해 다른 프로세스에 코드를 주입한다.


* ReadProcessMemory

 원격 프로세스 메모리를 읽을 때 사용한다.


* recv

 원격 시스템에서 데이터를 수신한다. 악성코드는 종종 이 함수를 이용해 외부 명령어 제어 서버에서 데이터를 수신한다.


* RegisterHotKey

 사용자가 특정 키 조합(CTRL-ALT-J)을 입력할 시점을 알려주는 핸들러를 등록할 때 사용한다. 이 함수는 사용자가 키 조합을 입력할 때 활성화된 윈도우와 관계 없다. 이 함수는 때때로 스파이웨어가 특정 키 조합을 입력할 때까지 은폐할 때 사용한다.


* RegOpenKey

 레지스트리 키를 읽고 편집하는 핸들을 오픈한다. 레지스트리 키는 때때로 소프트웨어가 호스트에 기록할 때 쓰기도 한다. 레지스트리는 운영체제 전체와 애플리케이션 설정 정보를 갖고 있다.


* ResumeThread

 이전에 중단한 스레드를 제거한다. ResumeThread는 인젝션 기법의 일부로 사용한다.


* RtlCreateRegistryKey

 커널 모드 코드에서 레지스트리를 생성할 때 사용한다.


* RtlWriteRegistryValue

 커널 모드 코드에서 레지스트리를 작성할 때 사용한다.


* SamIConnect

 계정 정보에 접근하는 호출을 위해 보안 계정 관리자(SAM, Security Account Manager)에 접속한다. 해시를 덤프하는 프로그램은 사용자의 로그인 패스워드 해시를 수집할 용도로 SAM 데이터베이스에 접근한다.



반응형
반응형

* InternetOpenUrl

 FTP, HTTP, HTTPS를 사용해 특정 URL 연결을 오픈한다. URL이 고정이라면 좋은 네트워크 기반의 시그니처로 사용할 수 있다.


* InternetReadFile

 이전에 오픈한 URL에서 데이터를 읽는다.


* InternetWriteFile

 이전에 오픈한 URL에서 데이터를 쓴다.


* IsDebuggerPresent

 현재 프로세스가 디버깅 중인지 여부를 확인하는데, 안티디버깅 기법의 일부로 종종 사용한다. 이 함수는 컴파일러가 종종 추가해 많은 실행 파일에 포함돼 있으므로 단순히 이 함수를 임포트한 사실만으로 알아낼 수 있는 정보는 거의 없다.


* IsNTAdmin

 사용자가 관리자 권한을 갖는지 확인한다.


* IsWoW64Process

 32비트 프로세스가 64비트 운영체제에서 동작하고 있는지 확인할 때 사용한다.


* LdrLoadDll

 LoadLibrary와 같이 프로세스로 DLL을 로드하는 하위 수준의 함수다. 일반 프로그램은 LoadLibrary를 사용하므로 임포트 함수의 존재 여부로 프로그램이 은폐 시도를 하는지 알 수 있다.


* LoadLibrary

 프로그램을 시작할 때 로드하지 않은 프로세스로 DLL을 로드한다. 거의 모든 Win32 프로그램이 임포트한다.


* LoadResource

 PE 파일에서 메모리로 리소스를 로드한다. 악성코드는 때때로 문자열, 설정 정보, 다른 악의적인 파일을 저장할 목적으로 리소스를 사용한다.


* LsaEnumerateLogonSessions

 현재 시스템에서 로그온 세션을 수집하는데 계정 정보를 훔치는 용도로 사용할 수 있다.


* MapViewOfFile

 메모리로 파일을 매핑해서 메모리 주소를 통해 파일 내용에 접근할 수 있게 한다. 실행기, 로더, 주입기는 이 함수를 이용해 PE 파일을 읽고 수정한다. MapViewOfFile을 이용해 악성코드는 파일 내용을 수정할 목적으로 WriteFile을 사용하지 않을 수 있다.


* MapVirtualKey

 가상 키 코드를 문자 값으로 변환한다. 키로깅 악성코드가 자주 사용한다.


* MmGetSystemRoutineAddress

 GetProcAddress와 유사하지만 커널 코드가 이용한다. 이 함수는 다른 모듈에서 함수 주소를 알아낼 수 있지만, ntoskrnl.exe와 hal.dll에서만 가능하다.


* Module32First/Module32Next

 프로세스로 로드한 모듈을 수집하는 데 사용한다. 주입기는 이 함수를 이용해 코드 인젝션 위치를 결정한다.


* NetScheduleJobAdd

 특정 날짜와 시간에 실행할 프로그램 요청을 추가한다. 악성코드는 NetScheduleJobAdd를 이용해 다른 프로그램을 동작할 수 있다. 악성코드 분석가로서 미래에 실행될 프로그램 위치를 알아내고 분석할 필요가 있다.


* NetShareEnum

 네트워크 공유 정보를 수집할 때 사용한다.


* NtQueryDirectoryFile

 디렉토리에서 파일 관련 정보를 반환한다. 루트킷을 주로 파일을 숨길 용도로 이 함수를 후킹한다.


* NtQueryInformationProcess

 특정 프로세스에 관련한 다양한 정보를 반환한다. 이 함수는 때때로 CheckRemoteDebuggerPresent와 동일한 정보를 반환하기 때문에 안티디버깅 기법으로 사용하기도 한다.


반응형
반응형

* GetForegroundWindow

 데스크톱에서 현재 포어그라운드로 수행 중인 핸들을 반환한다. 키로거는 보통 이 함수를 이용해 어떤 윈도우에서 사용자가 키 입력을 하고 있는지 확인한다.


* gethostbyname

 원격 호스트로 IP 연결하기 전에 특정 호스트명에 대한 DNS 질의를 수행할때 사용한다. 명령 제어 서버가 제공하는 호스트명은 네트워크 기반의 좋은 시그니처가 될 수 있다.


* gethostname

 컴퓨터의 호스트명을 검색한다. 백도어는 공격 대상 장비를 조사할 때 때때로 gethostname을 사용한다.


* GetKeyState

 키로거가 키보드에서 특정 키의 상태 정보를 획득할 때 사용한다.


* GetModuleFilename

 현재 프로세스에 로드된 모듈 파일명을 반환한다. 악성코드는 이 함수를 이용해 현재 실행 중인 프로세스 내의 파일을 수정하고 복사한다.


* GetModuleHandle

 이미 로드한 모듈의 핸들을 가져올 때 사용한다. 악성코드는 GetModuleHandle 을 이용해 로드한 모듈에서 코드를 위치시키고 수정하거나 코드 인젝션에 사용할 좋은 위치를 탐색한다.


* GetProcAddress

 메모리로 로드한 DLL에서 함수 주소를 검색한다. PE 파일 헤더에서 임포트한 함수뿐 아니라 다른 DLL에서 함수를 임포트할 때 사용한다.


* GetStartupInfo

 표준 핸들이 위치한 곳과 같이 현재 프로세스의 실행 환경에 관한 세부 정보를 담고 있는 구조체를 검색한다.


* GetSystemDefaultLangId

 시스템의 기본 언어 설정을 반환한다. 이를 이용해 특정 지역에 있는 시스템만 영향을 받게 하는 ‘충성스러운’ 악성코드는 감염 장비의 정보를 일부로 화면과 파일명을 개별화한다.


* GetTempPath

 임시 파일 경로를 반환한다. 악성코드가 이 함수를 호출하면 임시 파일 경로에 임의의 파일을 읽고 쓰는지 확인한다.


* GetThreadContext

 주어진 스레드의 컨텍스트 구조체를 반환한다. 스레드 컨텍스트는 레지스터 값과 현재 상태 같은 스레드 정보 모두를 저장한다.


* GetTickCount

 부팅 시간 이후 경과 시간을 밀리초로 가져온다. 이 함수는 때때로 안티디버깅 기법으로 시간 정보를 수집할 때 사용한다. 컴파일러가 종종 GetTickCount를 추가해 많은 실행 파일을 포함하므로 단순히 이 함수가 임포트됐다고 해도 알아 낼 수 있는 정보는 거의 없다.


* GetVersionEx

 윈도우 현재 실행 버전에 관한 정보를 반환한다. 이를 이용해 공격 대상을 관찰하거나 다른 버전의 윈도우 사이에 바뀐 문서화하지 않은 구조체의 다른 오프셋 중에 선택한다.


* GetWindowsDirectory

 윈도우 디렉토리(보통 C:\Windows)의 파일 경로를 반환한다. 악성코드는 이를 호출해 추가적인 악성 프로그램을 설치할 디렉토리를 알아낸다.


* inet_addr

 connect와 같은 함수가 사용할 수 있게 127.0.0.1과 같은 IP 주소 문자열을 반환한다. 지정된 문자열은 네트워크 기반 시그니처로 활용할 수 있다.


* InternetOpen

 InternetOpenUrl 이나 InternetReadFile 같이 WinINet에서 인터넷에 접근할 수 있는 상위 수준 함수를 초기화 한다. InternetOpen을 검색하면 인터넷 접속 기능 시작점을 발견할 수 있는 좋은 방법이다. InternetOpen 파라미터 중 하나는 User-Agent 인데, 좋은 네트워크 기반 시그니처로 활용할 수 있다.



반응형
반응형

* CreateService

 부팅 시간에 시작할 수 있는 서비스를 생성한다. 악성코드는 CreateService를 이용해 영구적인 설치, 은폐하거나 커널 드라이버를 로드한다.


* CreateToolhelp32Snapshot

 프로세스, 힙, 스레드, 모듈 스냅샷을 생성할 때 사용한다. 악성코드는 이 함수를 프로세스나 스레드를 통해 반복하는 코드 일부로 사용한다.


* CryptAcquireContext

 종종 윈도우 암호 사용을 초기화하는 악성코드가 이용하는 첫 번째 함수다. 암호화와 관련한 다른 함수가 많이 존재하는데, 대부분 Crypt로 시작한다.


* DeviceIoControl

 사용자 공간에서 장치 드라이버로 제어 메시지를 전송한다. DeviceIoControl은 커널 기반의 악성코드가 가장 자주 이용하는데, 이는 쉽고 사용자 공간과 커널 공간 사이에서 정보를 주고받는 유연한 방법이기 때문이다.


* DllCanUnloadNow,  DllGetClassObject, DllInstall, DllRegisterServer, DllUnregisterServer

 프로그램이 COM 서버를 구현하고 있다는 사실을 알 수 있는 익스포트 함수다.


* EnableExecuteProtectionSupport

 호스트의 데이터 실행 보호(DEP:Data Execution protection) 설정을 수정할 때 사용하는 비공식적인 API 함수로 공격을 좀 더 용이하게 한다.


* EnumProcesses

 시스템에 사용 중인 프로세스를 나열하는 데 사용한다 악성코드는 인젝션할 프로세스를

찾기 위해 프로세스를 종종 나열한다.


* EnumProcessModules

 특정 프로세스가 로드한 모듈(실행 파일과 DLL)을 나열하는 데 사용한다.


* FindFirstFile/FindNextFile

 디렉토리를 통해 검색하고 파일 시스템을 나열하는 데 사용한다.


* FindResource

 실행 파일이나 로드한 DLL에서 리소스를 찾는 데 사용한다. 악성코드는 때때로 문자열, 설정 정보, 악의적인 파일을 저장할 때 리소스를 사용한다. 이 함수의 사용 흔적이 보이면 악성코드의 PE 헤더 내에 있는 .rsrc 섹션을 확인해보자.


* FindWindow

 데스크톱에서 오픈한 윈도우를 찾는다. 이 함수는 때때로 OllyDbg 윈도우를 검색하는 안티디버깅 기법으로 사용한다.


* FtpPutFile

 원격 FTP 서버로 파일을 업로드할 때 사용하는 상위 수준의 함수이다.


* GetAdaptersInfo

 시스템에서 네트워크 어댑터에 관한 정보를 획득할 때 사용한다. 백도어는 때때로 GetAdaptersInfo를 호출해 감염 시스템 관련 정보를 일부 수집하는 용도로 사용한다. 일부 경우에는 안티가상머신 기법의 일부로 VMware의 MAC 주소 확인에 사용하기도 한다.


* GetAsyncKeyState

 특정 키를 눌렀는지 여부를 확인할 때 사용한다. 악성코드는 때때로 이 함수를 이용해 키로거를 구현한다.


* GetDC

 윈도우 장치 컨텍스트 핸들이나 전체 화면을 반환한다. 화면을 캡처하는 스파이웨어는 이 함수를 이용한다.


반응형
반응형


정적 기초 분석을 수행하면서 임포트 테이블 정보를 수집하려 하거나 제대로 고급 기법을 이용하려 할 때 참고  


* accept

  들어오는 연결을 리스닝할 때 사용한다. 이 함수는 프로그램이 소켓에서 수신 연결을 리스닝하고 있음을 암시한다.


* AdjustTokenPrivileges

  특정 권한을 활성화하거나 비활성화할 때 사용한다. 프로세스 인젝션을 행하는 악성코드는 종종 추가 권한을 얻기 위해 이 함수를 호출한다.


* AttachThreadInput

  두 번째 쓰레드가 키보드나 마우스 같은 입력 이벤트를 수신할 수 있게 하나의 쓰레드가 다른 쓰레드의 입력을 처리할   때 사용한다. 키로거나 스파이웨어가 이 함수를 이용한다.


* bind

  들어오는 연결을 리스닝할 목적으로 로컬 주소에 연관 지을 때 사용한다.


* BitBlt

  한 장치에서 다른 장치로 그래픽 데이터를 복사할 때 사용한다. 스파이웨어는 이 함수를 이용해 화면을 캡쳐한다. 

  이 함수는 라이브러리 코드의 일부로 컴파일러가 종종 추가한다.


* CallNextHookEx

  SetWindowsHookEx가 설정한 이벤트를 후킹하는 코드 내에서 사용한다. CallNextHookEx 함수는 체인 내의 다음 후킹을 호출한다. 

  SetWindowsHookEx가 설정한 후킹의 목적을 알아내려면 CallNextHookEx을 호출한 함수를 분석하면 된다.


* CertOpenSystemStore

  로컬 시스템에 저장한 인증서에 접근할 때 사용한다.


* CheckRemoteDebuggerPresent

  특정 프로세스가 디버깅 중인지 확인한다. 이 함수는 때로 안티디버깅 기법의 일부로 사용한다.


* CoCreateInstance

  COM 객체를 생성한다. COM 객체는 광범위한 기능을 제공한다. 클래스 식별자(CLSID)를 통해 어떤 파일이 COM 체를 구현한 코드를 갖고 있는지 알 수 있다.


* connect

  원격 소켓에 연결할 때 사용한다. 악성코드는 명령 제어 서버에 연결하는 하위 수준의 함수를 종종 사용한다.


* ConnectNamedPipe

  접속하는 클라이언트 파이프를 기다리는 내부 프로세스 통신에 사용하는 서버 파이프를 생성한다.

  백도어와 리버스 쉘은 때로 ConnectNamedPipe를 이용해 명령 제어 연결을 단순화한다.


* ControlService

  실행 중인 서비스를 시작, 중지, 수정하거나 시그널을 보낼 때 사용한다.

  악성코드가 악의적인 서비스를 이용하고 있다면 호출 용도를 확인하기 위해 서비스를 

  구현한 코드를 분석할 필요가 있다.


* CreateFile

  새로운 파일을 생성하거나 기존 파일을 오픈한다.


* CreateFileMapping

  파일을 메모리로 로드하는 파일 매핑 핸들을 생성하고 메모리 주소를 통해 접근할 수 있게 한다.

  실행기(Launcher), 로더, 인젝터는 이 함수를 이용해 PE 파일을 읽고 수정한다.


* CreateMutex

  악성코드가 특정 시간에 시스템에서 하나의 인스턴스 생성만 보장하게 악성코드가 사용할 수 있는 

  상호 배제(mutual exclusion)를 생성한다. 

악성코드는 고정된 뮤텍스명을 이용하는데, 악성코드의 추가 감염을 탐지할  수 있는 좋은 호스트 기반의 감염 흔적으로 사용할 수 있다.


* CreateProcess

  새로운 프로세스를 생성하고 실행한다. 

  악성코드가 신규 프로세스를 생성하면 새로운 프로세스 역시 분석할 필요가 있다.


* CreateRemoteThread

  원격 프로세스(호출 프로세스가 아닌)에서 쓰레드를 시작할 때 사용한다.

  실행기와 은폐형 악성코드는 CreateRemoteThread를 이용해 다른 프로세스에 코드를 주입한다.


반응형
반응형

** 실전 악성코드와 멀웨어 분석에 나오는 연습문제를 공부할 겸 풀이한 것입니다.


1. http://www.VirusTotal.com/ 에 Lab01-04.exe 파일을 업로드하자. 기존 안티바이러스에 정의된 것과 일치하는가?


Lab01-04.exe 파일을 업로드 한 결과는 다음과 같다.

This file was last analysed by VirusTotal on  2017-07-11 05:29:14 UTC (1일, 3시간 ago) it was first analysed by VirusTotal on  2011-07-06 00:05:42 UTC.


탐지 비율: 52/62


안티바이러스

결과

Ad-Aware

Gen:Trojan.Heur.RP.cqW@aqIk5pji

AegisLab

Troj.W32.Generic!c


2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.


[PEiD 프로그램 실행 결과]

Visual C++ 6.0 으로 컴파일이 되어있으며 별도의 패킹은 되어있지 않은 것으로 보인다.

(PEview를 이용해 열어보아도 정상적으로 임포트를 확인 할 수 있었다.)


3. 이 프로그램은 언제 컴파일됐는가?


PEview에서 Time Date Stamp 컴파일 시간이 2019/08/30 22:26:59 UTC로 나와있다.

하지만 현재는 2017년 이므로 이 파일의 컴파일 시간은 조작이 되었을 가능성이 있으며

따라서 컴파일 시간을 신뢰할 수 없다.


4. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가?  그렇다면 어떤 임포트를 보고 알 수 있었는가?


advapi32.dll의 임포트 함수는 프로그램이 권한을 가지고 무언가를 했음을 암시한다.

WinExec, WriteFile의 임포트 함수를 통해 VirusTotal.com 결과를 보면 프로그램이 파일을 디스크에 쓰고 실행함을 알 수 있다.






5. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?


Lab01-04.dll 파일을 PEview로 열어 문자열을 확인해보면 \system32\wupdmgr.exe는 이 함수가 해당 위치에서 파일을 생성하거나 수정함을 암시한다.

문자열 www.malwareanalysisbook.com/updater.exe 은 추가 악성코드를 저장하고 다운로드를 준비하는 것으로 보인다.



6. 이 파일은 리소스 섹션에 하나의 리소스가 있다. Resource Hacker를 이용해 리소스를 점검하고 리소스를 추출해보자. 리소스로부터 무엇을 알 수 있는가?


Resource Hacker 프로그램으로 Lab01-04.exe 파일을 열어보면 BIN 리소스를 볼 수 있는데

데이터를 보면 대부분 의미가 없다. 하지만 문자열을 주목해보면 이 프로그램은 DOS 모드에서 동작할 수 없다. 이 문자열은 모든 PE 파일의 시작점에서 DOS 헤더에 포함되는 에러 메시지다.


이 파일을 리소스 해커로 계속 분석하기 위해서는 Action -> Save Resource to a *.bin file 을 클릭하고 리소스를 저장 후 PEview 에서 파일을 열어 임베드 파일을 분석하자.



리소스 추출 결과 URLDownloadToFile 임포트를 확인할 수 있으며 이는 추가 악성코드를 다운로드하는 다운로더 프로그램이다.


반응형
반응형

** 실전 악성코드와 멀웨어 분석에 나오는 연습문제를 공부할 겸 풀이한 것입니다.


1. http://www.VirusTotal.com/ 에 Lab01-03.exe 파일을 업로드하자. 기존 안티바이러스에 정의된 것과 일치하는가?


Lab01-03.exe 파일을 업로드 한 결과 패커로 탐지가 되는 것을 확인하였다.


This file was last analysed by VirusTotal on  2017-07-11 05:11:41 UTC (1일, 3시간 ago) it was first analysed by VirusTotal on  2011-07-04 22:00:08 UTC.


탐지 비율: 56/63


안티바이러스

결과

Ad-Aware

Packer.FSG.A

ALYac

Packer.FSG.A  


2. 이 파일이 패킹되거나 난독화된 징후가 있는가? 그렇다면 무엇으로 판단했는가? 파일이 패킹돼 있고 가능하다면 언패킹해보자.


해당 파일을 PEiD 프로그램으로 돌려본 결과 FSG 1.0 패커로 패킹이 되어있다.

따라서 현재 배웠던 UPX 언패킹 프로그램으로는 언패킹이 불가능하다.



3. 임포트를 보고 악성코드의 기능을 알아낼 수 있는가? 그렇다면 어떤 임포트를 보고 알 수 있었는가?


2번 문제 처럼 현재 패킹이 되어있는 상태여서 PEview로 파일을 확인해보면 임포트를 확인할 수 가 없다.

따라서 언패킹이 진행이 되어야 확인이 가능할 것으로 보인다.


4. 감염된 시스템에서 악성코드를 인식하는 데 어떤 호스트 기반이나 네트워크 기반의 증거를 사용했는가?


3번 문제와 마찬가지로 언패킹이 진행되어야 한다.


반응형

'악성코드분석(리버싱)' 카테고리의 다른 글

악성코드 분석가가 주로 보게 되는 윈도우 함수 1  (0) 2017.07.13
1장 연습문제 1-4  (0) 2017.07.13
1장 연습문제 1-2  (0) 2017.07.13
1장 연습문제 1-1  (0) 2017.07.13
윈도우 공통 DLL  (0) 2017.07.13

+ Recent posts