KR101093410B1 - Method of detecting malware using code execution notification function - Google Patents
Method of detecting malware using code execution notification function Download PDFInfo
- Publication number
- KR101093410B1 KR101093410B1 KR1020100025337A KR20100025337A KR101093410B1 KR 101093410 B1 KR101093410 B1 KR 101093410B1 KR 1020100025337 A KR1020100025337 A KR 1020100025337A KR 20100025337 A KR20100025337 A KR 20100025337A KR 101093410 B1 KR101093410 B1 KR 101093410B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- remote process
- memory
- dynamic link
- link library
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
본 발명은 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법에 관한 것으로, 메모리에 시그너쳐 패턴 및 상기 시그너쳐 패턴에 해당하는 오프셋 값을 갖는 시그너쳐 데이터베이스를 적재하는 제 110 단계; 시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 120 단계; 상기 제 120 단계에서 검출된 원격 프로세스에 메모리 블록을 할당하는 제 130 단계; 상기 할당된 메모리 블록에 일정한 이벤트를 발생시키는 스텁 코드를 삽입하는 제 140 단계; 상기 검출된 각 프로세스의 패턴 검출 위치로부터 상기 오프셋만큼 떨어진 메모리 영역에 상기 스텁 코드 주소로 점프하도록 하는 JMP 명령어를 패치하는 제 150 단계; 및 상기 삽입된 스텁 코드로부터 이벤트가 발생되면 상기 프로세스를 악성 프로그램으로 판정하는 제 160 단계;로 이루어지는 것을 특징으로 한다.The present invention relates to a malicious program detection method using a code execution notification function, the method comprising: loading a signature database having a signature pattern and an offset value corresponding to the signature pattern in a memory; Detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in a system; Step 130 of allocating a memory block to the remote process detected in step 120; Inserting stub code for generating a predetermined event into the allocated memory block; Step 150 of patching a JMP instruction to jump to the stub code address in a memory area spaced by the offset from the pattern detection position of each detected process; And determining the process as a malicious program when an event is generated from the inserted stub code.
Description
본 발명은 악성 코드 또는 악성 프로그램의 탐지 방법에 관한 것이다.The present invention relates to a method for detecting malicious code or malicious program.
악성 코드 또는 악성 프로그램의 탐지를 위한 가장 기본적인 방법은 시그너쳐 패턴(Signature Pattern)을 데이터베이스화하여 메모리에 적재한 다음, 동일한 패턴을 갖는 쓰레드를 검출하는 것이다.The most basic method for detecting malicious code or malicious programs is to database signature patterns and load them into memory, and then detect threads having the same pattern.
그러나, 우연히 시그너쳐 패턴이 일치할 뿐 악성 코드나 악성 프로그램이 아닌 경우까지 악성 코드, 악성 프로그램으로 진단하여 삭제함으로써 오히려 혼란을 가중시키고 불편함을 초래하는 일이 빈번하였다.However, it is often accidental to increase the confusion and inconvenience by accidentally deleting the malicious code and the malicious program even when the signature patterns match but not the malicious code or the malicious program.
이에 단순히 시그너쳐 패턴의 일치 여부만으로 판정하는 것에서 더 나아가 봇(Bot) 동작의 실행을 확인하여 악성 프로그램으로 판정함으로써 오진율을 낮출 수 있는 방법론의 개발이 절실한 실정이었다.
Therefore, it is urgent to develop a methodology that can reduce the error rate by simply determining whether the signature pattern matches or not and confirming the execution of the bot operation to determine the malicious program.
본 발명은 상기와 같은 종래기술의 문제점을 해소하기 위하여 안출된 것으로, 원격 프로세스의 봇 동작 실행시 이를 통지하도록 함으로써 악성 코드를 판정하는 오진율이 낮은 악성 코드 탐지방법의 제공을 목적으로 한다.The present invention has been made to solve the above-mentioned problems of the prior art, and an object of the present invention is to provide a malicious code detection method having a low error rate that determines malicious code by notifying a bot operation of a remote process.
상기와 같은 목적을 달성하기 위한 본 발명의 일 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법은 메모리에 시그너쳐 패턴 및 상기 시그너쳐 패턴에 해당하는 오프셋 값을 갖는 시그너쳐 데이터베이스를 적재하는 제 110 단계;Malware detection method using a code execution notification function according to an embodiment of the present invention for achieving the above object step 110 of loading a signature database having a signature pattern and an offset value corresponding to the signature pattern in a memory; ;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 120 단계;Detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in a system;
상기 제 120 단계에서 검출된 원격 프로세스에 메모리 블록을 할당하는 제 130 단계;Step 130 of allocating a memory block to the remote process detected in step 120;
상기 할당된 메모리 블록에 일정한 이벤트를 발생시키는 스텁 코드를 삽입하는 제 140 단계;Inserting stub code for generating a predetermined event into the allocated memory block;
상기 검출된 각 프로세스의 패턴 검출 위치로부터 상기 오프셋만큼 떨어진 메모리 영역에 상기 스텁 코드 주소로 점프하도록 하는 JMP 명령어를 패치하는 제 150 단계; 및Step 150 of patching a JMP instruction to jump to the stub code address in a memory area spaced by the offset from the pattern detection position of each detected process; And
상기 삽입된 스텁 코드로부터 이벤트가 발생되면 상기 프로세스를 악성 프로그램으로 판정하는 제 160 단계;로 이루어지는 것을 특징으로 한다.
And a step 160 of determining the process as a malicious program when an event is generated from the inserted stub code.
한편, 상기와 같은 목적을 달성하기 위하여 본 발명의 이 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법은 메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스 및 일정한 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리 파일을 적재하는 제 210 단계;On the other hand, in order to achieve the above object, the malicious program detection method using the code execution notification function according to this embodiment of the present invention is a dynamic link library containing a signature database having a signature pattern in memory and code for generating a constant event Step 210 of loading the file;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 220 단계;Step 220, detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in the system;
전역후킹을 통해 상기 검출된 원격 프로세스에 상기 메모리에 적재된 동적 링크 라이브러리 파일을 매핑하는 제 230 단계;Step 230, mapping a dynamic link library file loaded in the memory to the detected remote process through global hooking;
상기 원격 프로세스로부터 생성된 메시지에 의하여 상기 동적 링크 라이브러리 파일에 포함된 코드가 일정한 이벤트를 발생시키면 상기 원격 프로세스를 악성 프로그램으로 판정하는 제 240 단계;로 이루어지는 것을 특징으로 한다.
And a step 240 of determining that the remote process is a malicious program when a code included in the dynamic link library file generates a predetermined event by a message generated from the remote process.
한편, 상기와 같은 목적을 달성하기 위하여 본 발명의 삼 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법은 메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스를 적재하는 제 310 단계;On the other hand, in order to achieve the above object, the malicious program detection method using the code execution notification function according to the third embodiment of the present invention comprises the step 310 of loading a signature database having a signature pattern in the memory;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 320 단계;Detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in the system;
상기 검출된 원격 프로세스에 대한 핸들을 획득하는 제 330 단계;Step 330, acquiring a handle to the detected remote process;
상기 원격 프로세스 내에 메모리를 할당하고, 상기 할당된 메모리에 전체 경로를 포함하는 동적 링크 라이브러리 파일의 명칭을 기록하는 제 340 단계;Allocating memory in the remote process and recording a name of a dynamic link library file including a full path in the allocated memory;
CreateRemoteThread 함수를 호출함으로써 일정한 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리 파일을 매핑하는 제 350 단계;Step 350, mapping a dynamic link library file containing code for generating a predetermined event by calling a CreateRemoteThread function;
상기 동적 링크 라이브러리 파일에 포함된 코드가 일정한 이벤트를 발생시키면 상기 원격 프로세스를 악성 프로그램으로 판정하는 제 360 단계;로 이루어지는 것을 특징으로 한다.
And a 360 step of determining the remote process as a malicious program when the code included in the dynamic link library file generates a predetermined event.
상기와 같은 본 발명에 의하면 아울러, 윈도우즈 환경에서 원격 프로세스에 직접 스텁 코드를 삽입하거나 동적 링크 라이브러리 파일을 매핑함으로써 원격 프로세스의 봇 동작 실행을 확인할 수 있으며, 따라서 시그너쳐 패턴의 일치여부 만으로 악성 코드로 판정하는 것에 비해 오진율을 현저하게 낮출 수 있다는 효과가 있다.
According to the present invention as described above, the execution of the bot operation of the remote process can be confirmed by inserting stub code directly into the remote process or mapping the dynamic link library file in the Windows environment, and thus determining the malicious code only by matching the signature pattern. Compared to that, the error rate can be significantly lowered.
도 1은 본 발명의 일 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 시계열적으로 설명하는 플로우차트이며,
도 2는 본 발명에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 개념적으로 설명하는 참고도이며,
도 3은 점프 코드가 패치되는 과정을 디스어셈블리 화면을 통해 설명하는 참고도이며,
도 4는 본 발명의 이 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 시계열적으로 설명하는 플로우차트이며,
도 5는 전역 후킹에 의하여 원격 프로세스로 동적 링크 라이브러리 파일이 매핑되는 과정을 설명하는 참고도이며,
도 6은 본 발명의 삼 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 시계열적으로 설명하는 플로우차트이며,
도 7은 CreateRemoteThread를 호출함으로써 원격 프로세스와 동적 링크 라이브러리 파일을 매핑하는 과정을 설명하는 참고도이다.1 is a flowchart illustrating a time series of a malicious program detection method using a code execution notification function according to an embodiment of the present invention.
2 is a reference diagram conceptually illustrating a malicious program detection method using a code execution notification function according to the present invention;
3 is a reference diagram illustrating a process in which a jump code is patched through a disassembly screen.
4 is a flowchart illustrating a time-series description of a malicious program detection method using a code execution notification function according to an embodiment of the present invention.
5 is a reference diagram illustrating a process of mapping a dynamic link library file to a remote process by global hooking.
6 is a flowchart illustrating a time series of a method for detecting malicious programs using a code execution notification function according to an embodiment of the present invention.
7 is a reference diagram illustrating a process of mapping a remote process and a dynamic link library file by calling CreateRemoteThread.
이하에서는 첨부하는 도면을 참조하여 본 발명에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 상세히 살펴보기로 한다.Hereinafter, a malicious program detection method using a code execution notification function according to the present invention will be described in detail with reference to the accompanying drawings.
도 1은 본 발명의 일 실시예에 있어 악성 코드 탐지 프로그램이 악성코드를 탐지하는 과정을 설명한다.1 illustrates a process of detecting a malicious code by a malicious code detection program according to an embodiment of the present invention.
도 1에 도시된 바에 의하면, 우선 악성 코드 탐지 프로그램(1)은 메모리에 시그너쳐 패턴(Signature Pattern)과 시그너쳐 패턴에 해당하는 오프셋(Offset) 값을 갖는 시그너쳐 데이터베이스를 적재한다(S110).As shown in FIG. 1, first, the malicious
이때, 시그너쳐 패턴에 해당하는 오프셋이란 함수의 수행을 깨뜨리지 않는 위치에 해당하는 값으로 시그너쳐 패턴의 분석시 미리 분석되어 악성 코드 탐지 프로그램(1)이 시그너쳐 패턴과 함께 미리 보유하고 있는 데이터에 해당한다.At this time, the offset corresponding to the signature pattern is a value corresponding to a position which does not break the performance of the function, and is analyzed in advance when the signature pattern is analyzed, and corresponds to data previously held by the malicious
즉, 시그너쳐 패턴의 분석시 검출 대상인 악성 코드, 악성 프로그램의 봇(Bot) 동작 구동시에만 동작하는 함수를 분석하고, 이 함수의 구조상 함수의 수행이 깨지지 않는 위치를 미리 파악하여 이를 오프셋 값으로 저장하는 것이다. 따라서, 이러한 오프셋 값은 해당하는 함수의 시작부터 끝에 해당하는 영역 가운데 임의의 위치를 가리키게 된다.In other words, it analyzes the function that operates only when the malicious code and the malicious program's bot operation are operated when analyzing the signature pattern, and stores the offset value by grasping in advance the position where the performance of the function is not broken. It is. Therefore, the offset value indicates an arbitrary position in the region corresponding to the beginning and end of the corresponding function.
한편, 악성 코드 탐지 프로그램(1)은 시스템 내에서 실행중인 원격 프로세스(2)들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스(2)를 검출한다(S120).Meanwhile, the malicious
이후, 검출된 각 원격 프로세스(2)마다 메모리 블록을 할당한다(S130). 메모리블록의 동적 할당은 우선 메모리 블록을 할당할 원격 프로세스(2)에 대한 핸들을 얻고(S131), VirtualAllocEx 함수에 상기 획득한 핸들을 인자로 넘겨줌으로써 상기 원격 프로세스(2)의 주소 공간에 메모리를 할당(S132)할 수 있다.Thereafter, a memory block is allocated to each detected remote process 2 (S130). Dynamic allocation of a memory block first obtains a handle to the remote process 2 to which the memory block is to be allocated (S131), and passes the obtained handle to the VirtualAllocEx function as a parameter to allocate the memory to the address space of the remote process 2. Assignment can be made (S132).
한편, 이와 같이 동적으로 할당된 메모리 블록에 일정한 이벤트를 발생시키는 스텁 코드(Stub Code)를 기록한다(S140). WriteProcessMemory 함수를 호출하는 것에 의하여 원격 프로세스(2)에 속하는 메모리에 코드를 직접 복사하는 것이 가능해진다.Meanwhile, a stub code for generating a predetermined event is recorded in the dynamically allocated memory block (S140). By calling the WriteProcessMemory function, it is possible to copy the code directly into the memory belonging to the remote process (2).
이때, 스텁 코드란 메소드 호출시 원격 객체로의 요청을 담당하는 대리자 역할을 하는 코드를 의미하는 것으로, 상기 스텁 코드는 후술하는 바와 같이 호출시 악성 코드 탐지 프로그램(1)으로 소정의 메시지를 전달함으로써 봇 함수의 실행사실을 알린다.In this case, the stub code refers to a code that acts as a delegate in charge of a request to a remote object when a method is called, and the stub code transmits a predetermined message to the malicious
한편, 스텁 코드가 삽입된 후 악성 코드 탐지 프로그램(1)은 상기 원격 프로세스(2)의 시그너쳐 패턴 검출 위치로부터 상기 오프셋만큼 떨어진 메모리 영역에 상기 스텁 코드 주소로 점프하도록 하는 JMP 명령어를 패치한다(S150).On the other hand, after the stub code is inserted, the malicious
도 3은 봇 동작을 수행하는 함수에 JMP 명령어가 패치되는 과정을 설명하는 디스어셈블리 화면이다. 도 3에 도시된 바에 의하면 메모리 영역 004cc4a에 "JMP 01e70118" 이라는 명령어가 패치되는 것을 확인할 수 있다. 이때, JMP는 해당 주소로 분기하여 그 주소의 명령어를 실행하라는 어셈블리 명령어이다.3 is a disassembly screen illustrating a process of patching a JMP instruction to a function to perform a bot operation. As shown in FIG. 3, it can be seen that the command “JMP 01e70118” is patched to the memory area 004cc4a. At this time, JMP is an assembly instruction to branch to the address and execute the instruction of the address.
도 3의 예에서 "JMP 01e70118"는 물론 스텁 코드가 복사된 주소를 가리킨다.In the example of FIG. 3, "JMP 01e70118", of course, refers to an address where the stub code is copied.
원격 프로세스(2)에 코드를 삽입할 경우 원격 프로세스(2)가 충돌을 일으킬 가능성이 매우 높기 때문에 이와 같이 원격 프로세스(2)에 메모리를 동적으로 할당한 다음 스텁 코드를 삽입하고, JMP 코드를 패치함으로써 이러한 위험성을 회피하는 것이다.If you insert code into the remote process (2), it is very likely that the remote process (2) will crash, so dynamically allocate memory to the remote process (2), insert stub code, and patch the JMP code. This avoids this risk.
한편, 이와 같이 JMP 명령어가 패치된 원격 프로세스(2)가 봇 동작을 실행시키면 패치된 JMP 명령어에 의하여 스텁 코드로 분기한다.On the other hand, when the remote process (2) patched with the JMP instruction executes the bot operation, the branching is performed to the stub code by the patched JMP instruction.
이때, 스텁 코드는 봇 동작이 실행되었음을 알리는 소정의 이벤트를 발생시키는데 이에 의하여 상기 원격 프로세스(2)를 악성 프로그램으로 판정할 수 있게 된다(S160).At this time, the stub code generates a predetermined event informing that the bot operation has been executed, whereby the remote process 2 can be determined as a malicious program (S160).
스텁 코드가 복사된 원격 프로세스(2)가 다수 있었으나, 그 가운데 일부만이 스텁 코드에 의한 이벤트를 발생시켰다고 하면 이들만이 악성 프로그램으로 진단되며 스텁 코드가 실행되지 않은 나머지 원격 프로세스(2)는 악성 프로그램으로 진단하지 않는다. 즉, 종래의 시그너쳐 패턴 매칭 기법에 의하면 자칫 악성 프로그램으로 오진될 수 있었으나, 상기와 같은 방법에 의하여 오진을 회피하는 것이다.If there were a number of remote processes (2) to which the stub code was copied, but only some of them generated an event by the stub code, only those diagnosed as malicious programs, and the remaining remote processes (2) where the stub code was not executed, would be malicious programs. Do not diagnose with. That is, according to the conventional signature pattern matching technique, it could be misdiagnosed as a malicious program, but the above-mentioned method avoids misdiagnosis.
한편, 스텁 코드는 자신이 복사된 프로세스가 아닌 다른 프로세스 - 바람직하게는 악성 코드 탐지 프로그램(1)으로 직접 메시지를 전달하거나 커널 오브젝트(Kernel Object)를 통해 봇 코드의 실행사실을 알릴 수 있으며, 스텁 코드가 발생시키는 소정의 이벤트란 이를 의미한다.On the other hand, the stub code can send a message directly to a process other than the one to which it is copied-preferably the malware detection program (1) or notify the execution of the bot code through a Kernel Object. The predetermined event generated by the code means this.
윈도우즈 시스템에서 다른 프로세스로 메시지를 전달하기 위하여 윈도우 메시지 시스템(Window Message System)을 이용할 수 있는데, 쓰레드 메시지 큐(Thread Message Queue)에 메시지를 입력함으로써 시스템 메시지 큐(System Message Queue)를 통해 악성 코드 탐지 프로그램(1)으로 메시지를 전달할 수 있다.The Window Message System can be used to deliver messages from Windows systems to other processes. Malicious code is detected through the System Message Queue by entering messages into the Thread Message Queue. The message can be passed to the
악성 코드 탐지 프로그램(1)은 스텁 코드로부터 메시지를 수신하면 해당하는 원격 프로세스(2)를 악성 프로그램으로 진단하게 됨은 물론이다.When the malicious
한편, 이와는 달리 스텁 코드는 커널 오브젝트를 이용할 수도 있다. 커널 오브젝트란 윈도우즈 시스템에서 프로세스나 쓰레드, 파일과 같은 리소스를 관리하기 위해 데이터를 저장하는 메모리 블록을 의미하며 커널 오브젝트를 이용하여 악성 코드 탐지 프로그램(1)으로 봇 코드의 실행사실을 알릴 수 있다.On the other hand, stub code may use kernel objects. A kernel object is a block of memory that stores data to manage resources such as processes, threads, and files in a Windows system. A kernel object can be used to notify a malicious code detection program (1) of execution of a bot code.
한편, 악성 프로그램의 진단 이후 S130 단계에서 얻은 원격 프로세스(2)의 핸들을 반환하고, S130 단계에서 동적으로 할당한 메모리를 해제한다(S170).
Meanwhile, after the diagnosis of the malicious program, the handle of the remote process 2 obtained in step S130 is returned, and the memory dynamically allocated in step S130 is released (S170).
이하에서는 도 4 및 도 5를 참조하여 본 발명의 이 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 살펴보기로 한다. 본 발명의 이 실시예는 원격 프로세스(2)에 메모리를 동적으로 할당하지 않는다는 점에서 차이가 있다.Hereinafter, a malicious program detection method using a code execution notification function according to this embodiment of the present invention will be described with reference to FIGS. 4 and 5. This embodiment of the present invention differs in that it does not dynamically allocate memory to the remote process 2.
우선, 악성 코드 탐지 프로그램(1)은 메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스를 적재한다. JMP 코드의 패치가 생략되므로 이 경우 반드시 오프셋 정보를 미리 알아야 할 필요는 없다.First, the malicious
한편, 소정의 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리(Dynamic Linked Library) 파일을 연다(S210). 이때 소정의 이벤트란 상기에서 스텁 코드가 담당했던 것과 마찬가지로 봇 코드의 실행사실을 다른 프로세스인 악성 코드 탐지 프로그램(1)으로 통지하기 위한 것으로, 윈도우 메시지 시스템이나 커널 오브젝트를 이용하여 이루어질 수 있음은 물론이다.On the other hand, a dynamic linked library (Dynamic Linked Library) file containing a code for generating a predetermined event is opened (S210). At this time, the predetermined event is for notifying the execution code of the bot code to the malicious
이후, 시스템 내에서 실행중인 원격 프로세스(2)들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스(2)를 검출한다(S220).Thereafter, among the remote processes 2 running in the system, the remote process 2 having the same pattern as the loaded signature pattern is detected (S220).
검출된 원격 프로세스(2)에 상기 메모리에 적재된 동적 링크 라이브러리 파일을 매핑(S230)하는데 이를 위하여 전역 후킹(Global Hooking) 또는 원격 후킹(Remote Hooking)이라 알려진 방법을 사용한다.The dynamic link library file loaded in the memory is mapped to the detected remote process 2 (S230). For this, a method known as global hooking or remote hooking is used.
전역 후킹은 다른 프로세스에 속하는 쓰레드의 메시지를 모니터링하기 위해 사용되는 기법으로 이미 알려진 기법이나, 그 과정을 살펴보면 다음과 같다. Global hooking is a technique known to be used to monitor messages from threads belonging to other processes, but the process is as follows.
먼저, LoadLibrary 함수를 호출하여 동적 링크 라이브러리 파일을 메모리에 적재하고, SetWindowHookEx 함수를 호출하되 후킹할 프로세스의 핸들과 상기 동적 링크 라이브러리 파일의 인스턴스 핸들을 인자로 넘겨줌으로써 이루어진다.First, the LoadLibrary function is called to load the dynamic link library file into memory, and the SetWindowHookEx function is called, passing the handle of the process to be hooked and the instance handle of the dynamic link library file as arguments.
이후, 동적 링크 라이브러리 파일과 매핑된 원격 프로세스(2)로부터 생성된 메시지에 의하여 동적 링크 라이브러리 파일에 포함된 상기 코드가 소정의 이벤트를 발생시키면 악성 코드 탐지 프로그램(1)은 해당 원격 프로세스(2)를 악성 프로그램으로 판정한다(S240).Subsequently, when the code included in the dynamic link library file generates a predetermined event by a message generated from the remote process 2 mapped with the dynamic link library file, the
물론, 이벤트를 발생시키지 않은 원격 프로세스(2)의 경우 악성 프로그램으로 판정하지 않음으로써 오진을 회피한다.Of course, in the case of the remote process 2 which did not generate an event, misdiagnosis is avoided by not determining as a malicious program.
이후, 상기 원격 프로세스(2)에 대한 후킹을 언훅(S250)하고, 상기 매핑된 동적 링크 라이브러리 파일을 언맵한다(S260).Thereafter, the hook for the remote process 2 is unhooked (S250), and the mapped dynamic link library file is unmapped (S260).
이와 같이 전역 후킹 방식을 이용하는 것은 원격 프로세스(2)에 아주 짧은 시간동안 동적 링크 라이브러리 파일을 매핑함으로써 원격 프로세스(2)의 동작에 영향을 주는 것을 최소화할 수 있기 때문이다.
This use of the global hooking method is because mapping the dynamic link library file to the remote process 2 for a very short time can minimize the influence on the operation of the remote process 2.
한편, 이하에서는 도 6 및 도 7을 참조하여 본 발명의 삼 실시예에 의한 코드실행 알림기능을 이용한 악성 프로그램 탐지 방법을 살펴보기로 한다. 삼 실시예 또한 코드를 직접 주입하는 대신 동적 링크 라이브러리 파일을 이용한다.Meanwhile, a malicious program detection method using a code execution notification function according to an embodiment of the present invention will be described with reference to FIGS. 6 and 7. The third embodiment also uses a dynamic link library file instead of injecting the code directly.
도 5에 도시된 바에 의하면 우선, 악성 코드 탐지 프로그램(1)은 메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스를 적재한다(S310).As shown in FIG. 5, first, the malicious
그리고, 시스템 내에서 실행중인 원격 프로세스(2)들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스(2)를 검출한다(S320).Then, among the remote processes 2 running in the system, the remote process 2 having the same pattern as the loaded signature pattern is detected (S320).
상기 S320 단계에서 검출된 원격 프로세스(2)들에 대한 핸들을 획득하고(S330), 상기 원격 프로세스(2) 내에 메모리를 할당하고, 상기 할당된 메모리에 전체 경로를 포함하는 동적 링크 라이브러리 파일의 명칭을 기록한다(S340). 원격 프로세스(2)에 속하는 메모리 블록에 직접 쓰기 위하여 WriteProcessMemory 함수를 이용한다.Acquiring a handle to the remote processes (2) detected in the step S320 (S330), allocates memory in the remote process (2), the name of the dynamic link library file including the full path to the allocated memory Record (S340). The WriteProcessMemory function is used to write directly to the memory block belonging to the remote process (2).
한편, CreateRemoteThread 함수를 호출함으로써 상기 원격 프로세스(2)와 상기 동적 링크 라이브러리 파일을 매핑한다(S350). 이때, 상기 동적 링크 라이브러리 파일은 봇 코드의 실행을 알리기 위한 소정의 이벤트를 발생시키는 코드를 포함한다. 동적 링크 라이브러리 파일에 의한 봇 동작 실행 여부 판정과정은 상기 이 실시예에서 설명한 바와 같다.Meanwhile, the remote process 2 and the dynamic link library file are mapped by calling CreateRemoteThread (S350). In this case, the dynamic link library file includes code for generating a predetermined event for notifying execution of the bot code. The process of determining whether the bot operation is executed by the dynamic link library file is the same as described in this embodiment.
이와 같이 동적 링크 라이브러리 파일이 매핑된 원격 프로세스(2)가 소정의 이벤트를 발생시키면 악성 코드 탐지 프로그램(1)은 상기 원격 프로세스(2)를 악성 프로그램으로 판정한다(S360).When the remote process 2 to which the dynamic link library file is mapped generates a predetermined event as described above, the malicious
이후, 상기 S340 단계에서 할당된 메모리를 해제하고(S370), FreeLibrary 함수를 호출하여 상기 원격 프로세스(2)에 매핑된 동적 링크 라이브러리 파일을 언맵한다(S380).Thereafter, the memory allocated in step S340 is released (S370), and the FreeLibrary function is called to unmap the dynamic link library file mapped to the remote process 2 (S380).
이러한 방식은 원격 프로세스(2)에 일시적으로 동적 링크 라이브러리 파일을 매핑함으로써 원격 프로세스(2)의 동작에 미치는 영향을 최소화한다.This approach minimizes the impact on the operation of the remote process 2 by temporarily mapping the dynamic link library file to the remote process 2.
그러나, 이와 같이 동적 링크 라이브러리를 매핑하는 방법은 안전성을 확보할 수 있음에도 불구하고 메시지 큐가 없는 쓰레드에는 훅을 걸 수 없어 후킹을 이용하는 방법을 사용할 수 없다는 한계가 있다.However, even though the method of mapping the dynamic link library can be secured, there is a limitation that a hook cannot be used because a thread without a message queue cannot be hooked.
한편, 시스템 서비스와 관련해서는 SetWindowsHookEx를 이용할 수 없을 뿐 아니라, 윈도우즈 9x 계열에서는 CreateRemoteThread 함수가 제공되지 않아 동적 링크 라이브러리를 링크하는 방법보다는 상기 일 실시예에 의하여 원격 프로세스에 스텁 코드를 직접 삽입하는 방법을 채택함이 바람직하다.
On the other hand, not only does not use SetWindowsHookEx in relation to system services, but also the CreateRemoteThread function is not provided in the Windows 9x series. It is preferable to adopt.
이상 몇가지의 실시예를 들어 본 발명을 살펴보았으나 이러한 실시예는 예시의 목적을 위해 개시된 것이고, 통상의 지식을 가진 당업자라면 본 발명의 사상과 범위 안에서 다양한 수정, 변경, 부가가 가능할 것임은 물론, 이는 하기의 특허청구범위를 벗어나지 아니하는 것으로 해석되어야 한다.
While the present invention has been described with reference to several embodiments, these embodiments have been disclosed for purposes of illustration, and those skilled in the art will be able to make various modifications, changes, and additions within the spirit and scope of the present invention. This is to be construed as not departing from the scope of the following claims.
10 : 악성 코드 탐지 프로그램
20 : 원격 프로세스10: malware detection program
20: remote process
Claims (12)
메모리에 시그너쳐 패턴 및 상기 시그너쳐 패턴에 대하여 미리 설정된 오프셋 값을 포함하는 시그너쳐 데이터베이스를 적재하는 제 110 단계;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 120 단계;
상기 제 120 단계에서 검출된 원격 프로세스에 메모리 블록을 할당하는 제 130 단계;
상기 할당된 메모리 블록에 일정한 이벤트를 발생시키는 스텁 코드를 삽입하는 제 140 단계;
상기 검출된 각 프로세스의 패턴 검출 위치로부터 상기 오프셋만큼 떨어진 메모리 영역에 상기 스텁 코드 주소로 점프하도록 하는 JMP 명령어를 패치하는 제 150 단계; 및
상기 삽입된 스텁 코드로부터 이벤트가 발생되면 상기 프로세스를 악성 프로그램으로 판정하는 제 160 단계;로 이루어지는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.In a method performed on a computer running Microsoft Windows as an operating system,
Step 110, loading a signature database including a signature pattern and a preset offset value for the signature pattern in a memory;
Detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in a system;
Step 130 of allocating a memory block to the remote process detected in step 120;
Inserting stub code for generating a predetermined event into the allocated memory block;
Step 150 of patching a JMP instruction to jump to the stub code address in a memory area spaced by the offset from the pattern detection position of each detected process; And
And a step 160 of determining the process as a malicious program when an event is generated from the inserted stub code.
상기 제 130 단계는 검출된 원격 프로세스에 대한 핸들을 얻는 제 131 단계; 및
상기 원격 프로세스의 주소 공간에 메모리를 할당하는 제 132 단계;로 이루어지는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 1,
Step 130 may include obtaining a handle to the detected remote process; And
And a step 132 of allocating memory to the address space of the remote process.
상기 제 160 단계에서 스텁 코드는 윈도우즈 메시지를 이용하여 다른 프로세스로 메시지를 전달하거나, 커널 오브젝트 핸들을 얻어 실행사실을 통지하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 1,
In step 160, the stub code transfers a message to another process using a Windows message, or obtains a kernel object handle to notify execution facts.
상기 제 160 단계 이후 상기 제 130 단계에서 얻은 핸들 및 메모리를 해제하는 제 170 단계를 더 구비하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 2,
And a step 170 of releasing the handle and the memory obtained in step 130 after step 160, wherein the malicious program is detected using the code execution notification function.
메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스 및 일정한 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리 파일을 적재하는 제 210 단계;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 220 단계;
전역후킹을 통해 상기 검출된 원격 프로세스에 상기 메모리에 적재된 동적 링크 라이브러리 파일을 매핑하는 제 230 단계;
상기 원격 프로세스로부터 생성된 메시지에 의하여 상기 동적 링크 라이브러리 파일에 포함된 코드가 일정한 이벤트를 발생시키면 상기 원격 프로세스를 악성 프로그램으로 판정하는 제 240 단계;로 이루어지는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.In a method performed on a computer running Microsoft Windows as an operating system,
A step 210 of loading a dynamic link library file including a signature database having a signature pattern and a code for generating a predetermined event in a memory;
Step 220, detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in the system;
Step 230, mapping a dynamic link library file loaded in the memory to the detected remote process through global hooking;
A malicious code using a code execution notification function, comprising: step 240, when the code included in the dynamic link library file generates a predetermined event by a message generated from the remote process, determining the remote process as a malicious program Program detection method.
상기 원격 프로세스에 대한 후킹을 언훅하는 제 250 단계; 및
상기 동적 링크 라이브러리 파일을 언맵하는 제 260 단계;를 더 포함하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method according to claim 6,
A 250 step of unhooking the hooking for the remote process; And
And a step 260 of unmapped the dynamic link library file.
상기 제 210 단계에서 LoadLibrary 함수를 호출함으로써 상기 일정한 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리 파일을 메모리에 적재하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method according to claim 6,
In step 210, the method for detecting malicious programs using a code execution notification function, comprising loading a dynamic link library file including a code for generating the predetermined event into a memory by calling a LoadLibrary function.
상기 제 230 단계에서 SetWindowHookEx 함수를 호출하되 상기 원격 프로세스 및 상기 동적 링크 라이브러리 파일의 정보를 인자로 넘겨줌으로써 동적 링크 라이브러리 파일을 매핑하고 후크 핸들을 획득하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 8,
The malicious program using the code execution notification function, which calls the SetWindowHookEx function in step 230 and maps the dynamic link library file and obtains a hook handle by passing information of the remote process and the dynamic link library file as arguments. Detection method.
메모리에 시그너쳐 패턴을 갖는 시그너쳐 데이터베이스를 적재하는 제 310 단계;
시스템 내에서 실행중인 원격 프로세스들 가운데 상기 적재된 시그너쳐 패턴과 동일한 패턴을 갖는 원격 프로세스를 검출하는 제 320 단계;
상기 검출된 원격 프로세스에 대한 핸들을 획득하는 제 330 단계;
상기 원격 프로세스 내에 메모리를 할당하고, 상기 할당된 메모리에 동적 링크 라이브러리 파일의 경로 및 명칭을 기록하는 제 340 단계;
CreateRemoteThread 함수를 호출함으로써 일정한 이벤트를 발생시키는 코드가 포함된 동적 링크 라이브러리 파일을 매핑하는 제 350 단계;
상기 동적 링크 라이브러리 파일에 포함된 코드가 일정한 이벤트를 발생시키면 상기 원격 프로세스를 악성 프로그램으로 판정하는 제 360 단계;로 이루어지는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.In a method performed on a computer running Microsoft Windows as an operating system,
Loading a signature database having a signature pattern into a memory (310);
Detecting a remote process having a same pattern as the loaded signature pattern among remote processes running in the system;
Step 330, acquiring a handle to the detected remote process;
Allocating memory in the remote process and recording a path and name of a dynamic link library file in the allocated memory;
Step 350, mapping a dynamic link library file containing code for generating a predetermined event by calling a CreateRemoteThread function;
And a 360 step of determining the remote process as a malicious program when a code included in the dynamic link library file generates a predetermined event.
상기 제 340 단계에서 할당된 메모리를 해제하는 제 370 단계; 및
FreeLibrary 함수를 호출하여 상기 원격 프로세스에 매핑된 동적 링크 라이브러리 파일을 언맵하는 제 380 단계;를 더 포함하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 10,
Step 370 of releasing the memory allocated in step 340; And
And step 380 of calling a FreeLibrary function to unmap the dynamic link library file mapped to the remote process.
상기 제 340 단계에서 WriteProcessMemory 함수를 호출함으로써 동적 링크 라이브러리 파일의 명칭을 기록하는 것을 특징으로 하는 코드실행 알림기능을 이용한 악성 프로그램 탐지방법.The method of claim 10,
And detecting the name of the dynamic link library file by calling the WriteProcessMemory function in step 340.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020100025337A KR101093410B1 (en) | 2010-03-22 | 2010-03-22 | Method of detecting malware using code execution notification function |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020100025337A KR101093410B1 (en) | 2010-03-22 | 2010-03-22 | Method of detecting malware using code execution notification function |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20110106104A KR20110106104A (en) | 2011-09-28 |
KR101093410B1 true KR101093410B1 (en) | 2011-12-14 |
Family
ID=44956174
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020100025337A KR101093410B1 (en) | 2010-03-22 | 2010-03-22 | Method of detecting malware using code execution notification function |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101093410B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11934495B2 (en) | 2017-11-16 | 2024-03-19 | Foundation Of Soongsil University-Industry Cooperation | Device for automatically identifying anti-analysis techniques by using signature extraction and method therefor |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101428915B1 (en) * | 2013-02-22 | 2014-08-11 | 한양대학교 산학협력단 | Feedback based application rewriting framework method and system for android security |
KR101500512B1 (en) * | 2013-05-15 | 2015-03-18 | 소프트캠프(주) | Device and method for securing computer |
CN114465752B (en) * | 2021-12-10 | 2024-06-28 | 奇安信科技集团股份有限公司 | Remote call detection method and device, electronic equipment and storage medium |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040080845A (en) | 2003-03-14 | 2004-09-20 | 주식회사 안철수연구소 | Method to detect malicious scripts using code insertion technique |
-
2010
- 2010-03-22 KR KR1020100025337A patent/KR101093410B1/en active IP Right Grant
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20040080845A (en) | 2003-03-14 | 2004-09-20 | 주식회사 안철수연구소 | Method to detect malicious scripts using code insertion technique |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11934495B2 (en) | 2017-11-16 | 2024-03-19 | Foundation Of Soongsil University-Industry Cooperation | Device for automatically identifying anti-analysis techniques by using signature extraction and method therefor |
Also Published As
Publication number | Publication date |
---|---|
KR20110106104A (en) | 2011-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5908132B2 (en) | Apparatus and method for detecting attack using vulnerability of program | |
US9703957B2 (en) | Atomic detection and repair of kernel memory | |
US8645923B1 (en) | Enforcing expected control flow in program execution | |
US20130067577A1 (en) | Malware scanning | |
US7797702B1 (en) | Preventing execution of remotely injected threads | |
US7562391B1 (en) | Reducing false positive indications of buffer overflow attacks | |
CN101154180A (en) | Method for monitoring task stack overflow | |
KR101093410B1 (en) | Method of detecting malware using code execution notification function | |
CN105550585A (en) | Application security testing method, device and system | |
US20120246518A1 (en) | Operating a computer system | |
US8370941B1 (en) | Rootkit scanning system, method, and computer program product | |
CN109359092B (en) | File management method, desktop display method, device, terminal and medium | |
US8458794B1 (en) | System, method, and computer program product for determining whether a hook is associated with potentially unwanted activity | |
US6697971B1 (en) | System and method for detecting attempts to access data residing outside of allocated memory | |
US20120072779A1 (en) | Memory leak monitoring device and method for monitoring memory leak | |
CN105404559A (en) | Debugging in a data processing apparatus | |
KR100954356B1 (en) | Detection system for malicious program considering code protection method and method thereof | |
US9009537B2 (en) | Diagnostic data capture in a computing environment | |
CN106970871B (en) | Method and device for detecting plug-in program | |
US8627305B1 (en) | System, method, and computer program product for hooking code inserted into an address space of a new process | |
US8280927B2 (en) | Electronic equipment and memory managing program | |
US20130275952A1 (en) | System, method, and computer program product for identifying unwanted data based on an assembled execution profile of code | |
KR101842263B1 (en) | Method and apparatus for preventing reverse engineering | |
JP4643201B2 (en) | Buffer overflow vulnerability analysis method, data processing device, analysis information providing device, analysis information extraction processing program, and analysis information provision processing program | |
CN114253825B (en) | Memory leak detection method, device, computer equipment and storage medium |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20141208 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20151117 Year of fee payment: 5 |
|
FPAY | Annual fee payment |
Payment date: 20161123 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20171129 Year of fee payment: 7 |