악성코드 고급 정적 분석 ( Lab07_01 ) [ DOS Attack ]

2018. 5. 2. 22:01악성코드 분석




고급 정적분석은 IDA Pro를 통해 Lab07_01악성파일을 분석한다


해당 악성파일은 StartServiceCtrlDispatcherA함수 호출 이후 sub_0x00401040주소의 함수를 호출한다

sub_401040은 실질적인 main함수가 된다

StartServiceCtrlDispatcherA()

connect the main thread of a service process to the service control manager,

the thread to be the service control dispatcher thread for the calling process.


0x401040로 이동하자

제일 먼저 OpenMutexA함수를 볼 수 있다

OpenMuextA( DA,IH,MutexObject ) - open an existing named mutex object 

Mutex객체가 존재하지 않으면 NULL을 반환


악성파일에서는 Mutex객체가 없으므로 생성해주는 코드가 실행된다

CreateMutexA( MA, IO, Name ) - 새로운 Mutex객체를 생성한다

RETURN VALUE : Handle to the newly created Mutex Object

OpenSCManagerA( MachineName, DatabaseName, DA ) - connect to Service Control Manager and open the specified Database

GetCurrentProcess( *void )

RETURN VALUE : pseudo Handle for The current process

GetModuleFileNameA( Module, FileName, Size ) 현재 동작중인 실행파일이나 로드된 DLL의 전체 경로를 얻는다

RETURN VALUE : Length of the string that is copied to the buffer

CreateServiceA(SCManager, ServiceName, DisplayName, StartType, ... )

Create service object and add it to the service control manager database

StartType : 2 => SERVICE_AUTO_START => 컴퓨터 실행 시 자동으로 해당 서비스가 실행된다

즉, 컴퓨터를 킬 때마다 Malservice파일이 자동으로 실행된다


다음으로 시스템 시간과 파일 시간에 관한 함수가 실행된다

SystemTimeToFileTime( SystemTime, FileTime )

System Time => File Time

CreateWaitableTimerA( ... )

Create timer to use in SetWaitableTimer

SetWaitableTimer( Timer, DueTime, ... )

Activates the specified waitable timer

When the due time arrives, the timer is signaled the thread calls the optional completion routine

WaitForSingleObject(handle,milliseconds)

the function waits until the object is signaled or the interval elapses

약 120시간이 지난 뒤에 interrupt발생

CreateThread( ... , StartAddress , ... )

StartAddress주소에 정의돈 application-defined function을 실행시키기 위한 스레드를 생성하는 함수

StartAddress는 IDA에서 스레드를 실행시키기 위해 사용하는 함수이다


[ Loop ]

mov esi, 14h(20)

dec esi

jnz short loc_401126

=> 20개의 스레드를 생성하도록 한다


StartAddress ? 두개의 함수를 실행하는 루틴이 존재한다

 

InternetOpenA( Agent, ... )

User-Agent : Internet Explorer 8.0 를 사용하여 인터넷을 실행

InternetOpenUrlA( Internet, URL, ... )

해당 URL요청



고급정적분석결과 해당 악성파일은 Malservice파일을 생성하고, MutexObject(HGL345)를 사용하여 중복실행을 방지한다

또한, 특정 URL을 무한히 요청하는 코드를 실행하며, Timer를 통해서 120시간 뒤에는 프로세스를 종료하도록 하였다.

스레드는 20개가 생성되고, 각각의 스레드에서 무한한 URL요청을 실행한다


[ 기초정적 - 기초동적 - 고급정적 분석 후 결과 ]

1. 프로그램 탐지시 호스트 기반으로 좋은 시그니처는 ?

Malservice , HGL345

2. 프로그램 탐지시 네트워크 기반으로 좋은 시그니처는 ?

http://www.malwareanalysisbook.com

3. 프로그램의 목적은 무엇인가 ?

DOS(Denial Of Service)공격

4. 프로그램의 종료는 언제 이루어지는가 ?

실행 후 120시간 뒤에 sleep함수가 실행되어 종료된다