[go: up one dir, main page]

KR101366544B1 - Method and apparatus for detecting dll rootkit for hacking - Google Patents

Method and apparatus for detecting dll rootkit for hacking Download PDF

Info

Publication number
KR101366544B1
KR101366544B1 KR1020120126483A KR20120126483A KR101366544B1 KR 101366544 B1 KR101366544 B1 KR 101366544B1 KR 1020120126483 A KR1020120126483 A KR 1020120126483A KR 20120126483 A KR20120126483 A KR 20120126483A KR 101366544 B1 KR101366544 B1 KR 101366544B1
Authority
KR
South Korea
Prior art keywords
dll
list
memory
code
variable value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
KR1020120126483A
Other languages
Korean (ko)
Inventor
최명규
Original Assignee
(주)네오위즈게임즈
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by (주)네오위즈게임즈 filed Critical (주)네오위즈게임즈
Priority to KR1020120126483A priority Critical patent/KR101366544B1/en
Application granted granted Critical
Publication of KR101366544B1 publication Critical patent/KR101366544B1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • Storage Device Security (AREA)

Abstract

클라이언트 적응성이 뛰어나고 모든 악성 DLL을 검출할 수 있는 기술을 제공한다. 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법은, 해킹을 위한 DLL(Dynamic Linking Library, 동적 연결 라이브러리) 루트킷(Rootkit)을 감지하는 장치가, 사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 단계; 카운터로부터 수신한 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계; 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계; 및 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 단계;를 포함하는 것을 특징으로 한다.It has excellent client adaptability and provides technology to detect all malicious DLLs. DLL rootkit detection method for hacking according to an embodiment of the present invention, the device for detecting a DLL (Dynamic Linking Library) rootkit (hacking) for hacking, of the DLLs determined to be running in the user terminal Collecting the first DLL list as a list; If reading of any one of memories corresponding to at least one DLL using the address variable value received from the counter succeeds, the code value of the predetermined area among the code values stored in the read memory matches the preset first code. Determining whether or not; If it is determined that a value of a predetermined region among the values stored in the read memory matches the preset first code, determining whether the DLL information corresponding to the read memory exists in the first DLL list; And when it is determined that the DLL information corresponding to the read memory is not present in the first DLL list, adding the DLL information corresponding to the read memory to the second DLL list as a list of DLLs for the rootkit. Characterized in that.

Description

해킹을 위한 DLL 루트킷 감지 방법 및 장치{METHOD AND APPARATUS FOR DETECTING DLL ROOTKIT FOR HACKING}METHOD AND APPARATUS FOR DETECTING DLL ROOTKIT FOR HACKING}

본 발명은 관리자 계정 등을 입수하여 악용하기 위해 게임 클라이언트 등에 로드되어 숨겨진 루트킷(Rootkit) 파일을 정확하게 탐지하여 해킹을 예방하기 위한 기술에 관한 것으로, 구체적으로는 기존에 숨겨진 루트킷 DLL(동적 연결 라이브러리, Dynamic Linking Library)의 탐지가 불가능했던 탐지 기술과 달리 숨겨진 루트킷 DLL을 탐지할 수 있는 기술에 관한 것이다.The present invention relates to a technique for preventing hacking by accurately detecting a hidden rootkit file loaded on a game client to obtain an administrator account and the like, and specifically, a hidden rootkit DLL (dynamic link library, Unlike detection technology that could not be detected by Dynamic Linking Library, it relates to technology that can detect hidden rootkit DLL.

최근 온라인을 통한 다양한 컨텐츠의 송수신 및 이용이 이루어지면서, 사용자 단말에서 실행되는 프로세스 역시 다양해지고 있다. 특히, 네트워크를 통해 SNS(소셜 네트워크 서비스), 포털 사이트, 게시판 사이트, 동호회, 게임 등의 다양한 컨텐츠를 이용하기 위한 클라이언트를 사용자 단말에 다운로드 받고, 이를 실행하여 온라인 또는 오프라인 상에서 컨텐츠를 이용하는 서비스가 제공되고 있다.Recently, as various contents are transmitted / received and used through online, processes executed in user terminals are also diversified. In particular, a service for downloading a client for using various contents such as an SNS (social network service), a portal site, a bulletin board site, a club, a game, etc. through a network to a user terminal and using the content in online or offline is provided .

상기와 같이 현상으로 인해, 사용자 단말에서는 다양한 클라이언트 프로그램이 사용자 단말에 설치되어 사용되고 있다. 클라이언트가 실행되면 대표적으로 로드되어 실행되는 것이 동적 연결 라이브러리, 즉 DLL(Dynamic Linking Library)이다. DLL은 클라이언트에서 수행되는 알고리즘 및 프로세스의 루틴을 나누어, 필요한 것만을 메모리에 로드하여 실행하기 위한 파일을 의미한다.Due to the phenomenon as described above, in the user terminal, various client programs are installed and used in the user terminal. When the client runs, the most common load and run is a dynamic link library, or dynamic linking library (DLL). A DLL is a file for dividing the routines of algorithms and processes performed on the client, and loading only those necessary in memory and executing them.

DLL은 클라이언트 실행 시 필요에 따라서 로드되어 실행되는데, 클라이언트가 실행됨에 따라서 로드 및 실행되는 DLL에는 클라이언트의 정상적인 기능 루틴을 실행하기 위해 로드 및 실행되는 정상적인 DLL이 존재할 수 있다.The DLL is loaded and executed as needed when the client is executed. As the client is executed, the DLL that is loaded and executed may include a normal DLL that is loaded and executed to execute a normal function routine of the client.

그러나, 정상적인 DLL 이외에, 해킹에 사용하기 위해 클라이언트에 숨겨진 DLL이 존재할 수 있다. 일반적으로 이러한 DLL을 DLL 루트킷(Rootkit)이라 한다. DLL 루트킷이 클라이언트의 실행에 따라서 몰래 실행되는 경우, 사용자 계정이 추출되거나, 게임 클라이언트의 기능을 조작하여 자동 사냥, 능력치 조작 등에 사용될 수 있다.However, in addition to the normal DLL, there may be a hidden DLL in the client for use in hacking. This DLL is commonly called a DLL rootkit. When the DLL rootkit is secretly executed according to the execution of the client, a user account can be extracted or used to automatically hunt and manipulate stats by manipulating the game client's functions.

DLL 루트킷은 클라이언트에 몰래 삽입될 수 있으며, 다른 프로세스에 존재하여 클라이언트 실행 시 실행되고 실행된 결과 생성되는 스레드(Thread)만을 해당 클라이언트에서 실행되도록 하는 등의 방법으로 사용되고 있다.The DLL rootkit can be secretly inserted into the client, and is used in other processes such that only the thread that is executed when the client is executed and is executed as a result of execution is executed on the client.

상기와 같은 DLL 루트킷을 감지하는 데 있어서 기존에 사용된 방법으로는, 클라이언트마다 DLL 루트킷을 감지하기 위한 별도의 DLL 파일을 생성하여 클라이언트에 삽입하고, 클라이언트의 실행에 따라서 DLL 파일을 실행하도록 하여 숨겨진 DLL을 감지하도록 하는 방법이 사용되어 왔다.In the existing method of detecting a DLL rootkit as described above, a separate DLL file for detecting a DLL rootkit is generated for each client and inserted into the client, and the DLL file is executed according to the execution of the client. Methods have been used to detect DLLs.

그러나 기존의 방법에 의하면, 다른 프로세스에서 DLL이 아닌 DLL의 로드에 따른 스레드만을 실행하도록 함으로서 DLL을 원천적으로 발견하지 못하게 하는 방법은 감지하지 못하며, 클라이언트마다 각각 다른 DLL 파일을 생성해야 했기 때문에, 클라이언트 적응성의 문제점이 지적되어 왔다.However, according to the existing method, it is not possible to detect a method that prevents the DLL from being found by allowing only other threads to execute the thread according to the load of the DLL, and the client has to generate a different DLL file for each client. The problem of adaptability has been pointed out.

이에 본 발명은, 기존의 DLL 루트킷 감지 기술의 한계점을 해결하여, 범용적이고 정확한 감지가 가능한 기술을 제공하여, DLL 루트킷을 통한 해킹을 사전에 방지하는 기술을 제공하는 데 그 목적이 있다.Accordingly, an object of the present invention is to solve the limitations of the existing DLL rootkit detection technology, to provide a technology capable of universal and accurate detection, and to provide a technique for preventing hacking through the DLL rootkit in advance.

상기 목적을 달성하기 위해, 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법은, 해킹을 위한 DLL(Dynamic Linking Library, 동적 연결 라이브러리) 루트킷(Rootkit)을 감지하는 장치가, 사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 단계; 카운터로부터 수신한 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계; 상기 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계; 및 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 단계;를 포함하는 것을 특징으로 한다.In order to achieve the above object, a method for detecting a DLL rootkit for hacking according to an embodiment of the present invention, the apparatus for detecting a DLL (Dynamic Linking Library) rootkit (hacking) for hacking, at the user terminal Collecting a first DLL list as a list of DLLs determined to be running; When a reading of any one of memories corresponding to at least one DLL using the address variable value received from the counter succeeds, the code value of a predetermined area among the code values stored in the read memory is set to the preset first code. Determining whether or not a match; If it is determined that a value of a predetermined region among the values stored in the read memory matches the preset first code, determining whether the DLL information corresponding to the read memory exists in the first DLL list. ; And when it is determined that the DLL information corresponding to the read memory does not exist in the first DLL list, adding the DLL information corresponding to the read memory to the second DLL list as a list of DLLs for a rootkit. It characterized by including.

상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는, 상기 카운터로부터 상기 주소 변수값을 수신하는 단계; 상기 수신한 주소 변수값을 메모리 실행 정보와 비교하여, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는지 여부를 판단하는 단계; 및 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는 경우, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리를 상기 리딩된 메모리로 결정하는 단계;를 포함하는 것이 바람직하다.Determining whether or not the first code matches the preset first code comprises: receiving the address variable value from the counter; Comparing the received address variable value with memory execution information to determine whether a memory having the received address variable value as a memory address exists; And when there is a memory having the received address variable value as a memory address, determining a memory having the received address variable value as a memory address as the read memory.

상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계는, 상기 리딩된 메모리에 매칭되는 파일을 검색하는 단계; 및 상기 검색된 파일의 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계;를 포함하는 것이 바람직하다.Determining whether the first DLL list is present comprises: searching for a file matching the read memory; And determining whether the DLL information of the searched file exists in the first DLL list.

상기 리딩된 메모리에 매칭되는 파일의 검색이 실패할 경우, 상기 리딩된 메모리에 대응하는 스레드(Thread)를 루트킷을 위한 스레드의 리스트로서 제1 스레드 리스트에 추가하는 단계;를 더 포함하는 것이 바람직하다.If retrieval of a file matching the read memory fails, adding a thread corresponding to the read memory to the first thread list as a list of threads for a rootkit. .

상기 제2 DLL 리스트에 추가하는 단계는, 상기 검색된 파일의 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 경우, 상기 검색된 파일의 DLL 정보를 상기 제2 DLL 리스트에 추가하는 것이 바람직하다.In the step of adding to the second DLL list, when the DLL information of the searched file does not exist in the first DLL list, it is preferable to add DLL information of the searched file to the second DLL list.

상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는, 상기 리딩된 메모리에 저장된 코드값들 중, 상기 리딩된 메모리의 구조에 따라 헤더 영역으로 분류된 코드값이 상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 것이 바람직하다.The determining of whether the first code matches the predetermined first code may include: among the code values stored in the read memory, a code value classified into a header area according to the structure of the read memory. It is desirable to determine whether they match.

상기 기설정된 제1 코드는 실행 파일에 설정되는 헤더 코드값으로서 "MZ" 인 것이 바람직하다.Preferably, the predetermined first code is “MZ” as a header code value set in an executable file.

상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는, 상기 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩을 시도하는 것이 바람직하다.The determining whether the first variable corresponds to the preset first code may include, if the address variable value is equal to or smaller than a preset threshold variable value, using the address variable value to the at least one DLL. It is desirable to attempt reading to any of the corresponding memories.

상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는, 상기 주소 변수값이 기설정된 임계 변수값보다 큰 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩 시도를 중단하는 것이 바람직하다.The determining whether the first code corresponds to the preset first code may include: when the address variable value is greater than a preset threshold variable value, using one of the memory corresponding to the at least one DLL by using the address variable value. It is desirable to stop the reading attempt for the.

상기 제2 DLL 리스트에 추가하는 단계 후, 상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 단계;를 더 포함하는 것이 바람직하다.And after the adding to the second DLL list, updating the address variable value by adding a predetermined unit memory address change value to the address variable value stored in the counter.

상기 주소 변수값을 갱신하는 단계 후, 상기 갱신된 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 갱신된 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계를 반복 수행하는 것이 바람직하다.After updating the address variable value, if the updated address variable value is equal to or less than the predetermined threshold variable value, among the memory corresponding to at least one DLL using the updated address variable value If any one of the readings is successful, it is preferable to repeat the step of determining whether a code value of a predetermined region among the code values stored in the read memory is identical to the preset first code.

상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계 후, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는 것으로 판단되는 경우, 상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 단계; 및 상기 갱신된 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 갱신된 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계;를 더 포함하는 것이 바람직하다.After determining whether the DLL information corresponding to the read memory exists in the first DLL list, when it is determined that the DLL information corresponding to the read memory exists in the first DLL list, the counter Updating the address variable value by adding a predetermined unit memory address change value to the address variable value stored in the memory; And when the updated address variable value is equal to or smaller than a predetermined threshold variable value, when reading of any one of memories corresponding to at least one DLL using the updated address variable value succeeds, The method may further include determining whether a code value of a predetermined region among the code values stored in the read memory matches the predetermined first code.

상기 제1 DLL 리스트를 수집하는 단계는, 상기 사용자 단말의 운영체제에서 제공하는 공용 API 함수로서, 상기 사용자 단말에서 실행 중인 것으로 판단되는 DLL의 리스트를 추출하는 함수인 제1 함수를 이용하여 상기 제1 DLL 리스트를 수집하는 것이 바람직하다.The collecting of the first DLL list may include a common API function provided by an operating system of the user terminal and the first function using a first function which is a function of extracting a list of DLLs that are determined to be executed in the user terminal. It is desirable to collect a list of DLLs.

본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 장치는, 사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 리스트 수집부; 카운터로부터 수신한 주소 변수값을 이용하여 메모리의 리딩을 시도하는 메모리 리딩부; 상기 메모리 리딩부의 리딩이 성공하여, 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나가 리딩된 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하고, 상기 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 추출하는 파일 검색부; 및 상기 추출된 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하고, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 루트킷 리스트 관리부;를 포함하는 것을 특징으로 한다.The apparatus for detecting a DLL rootkit for hacking according to an embodiment of the present invention may include: a list collector configured to collect a first DLL list as a list of DLLs determined to be executed in a user terminal; A memory reading unit for reading a memory by using an address variable value received from a counter; When a reading of the memory reading unit is successful and any one of memories corresponding to at least one DLL is read, whether a code value of a predetermined region among the code values stored in the reading memory matches the predetermined first code A file search unit for determining whether to determine whether or not a value of a predetermined region among the values stored in the read memory matches a preset first code, the file search unit extracting DLL information corresponding to the read memory; And determining whether the extracted DLL information exists in the first DLL list, and when it is determined that the DLL information corresponding to the read memory does not exist in the first DLL list, the extracted DLL information corresponds to the read memory. And a rootkit list manager for adding the DLL information to the second DLL list as a list of DLLs for the rootkit.

상기 메모리 리딩부는, 상기 카운터로부터 수신한 주소 변수값을 메모리 실행 정보와 비교하여, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는 경우, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리를 상기 리딩된 메모리로 결정하는 것이 바람직하다.The memory reading unit compares the address variable value received from the counter with memory execution information, and when there is a memory having the received address variable value as a memory address, the memory having the received address variable value as a memory address. Is preferably determined as the read memory.

상기 파일 검색부는, 상기 리딩된 메모리에 매칭되는 파일을 검색하고, 상기 검색된 파일의 DLL 정보가 상기 제1 DLL 리스트에 존재하는 지 여부를 판단하는 것이 바람직하다.The file search unit may search for a file matching the read memory, and determine whether the DLL information of the searched file exists in the first DLL list.

상기 루트킷 리스트 관리부는, 상기 리딩된 메모리에 매칭되는 파일의 검색이 실패할 경우, 상기 리딩된 메모리에 대응하는 스레드(Thread)를 루트킷을 위한 스레드의 리스트로서 제1 스레드 리스트에 추가하는 것이 바람직하다.The rootkit list manager may add a thread corresponding to the read memory to the first thread list as a list of threads for the rootkit when a search for a file matching the read memory fails. .

상기 파일 검색부는, 상기 리딩된 메모리에 저장된 코드값들 중, 상기 리딩된 메모리의 구조에 따라 헤더 영역으로 분류된 코드값이 상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 것이 바람직하다.The file search unit may determine whether a code value classified into a header area according to the structure of the read memory among the code values stored in the read memory matches the preset first code.

상기 기설정된 제1 코드는 실행 파일에 설정되는 헤더 코드값으로서 "MZ" 인 것이 바람직하다.Preferably, the predetermined first code is “MZ” as a header code value set in an executable file.

상기 메모리 리딩부는, 상기 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩을 시도하는 것이 바람직하다.The memory reading unit attempts to read any one of memories corresponding to the at least one DLL by using the address variable value when the address variable value is equal to or smaller than a predetermined threshold variable value. It is desirable to.

상기 카운터는, 상기 루트킷 리스트 관리부에서 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하거나, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는 것으로 판단된 후, 상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 것이 바람직하다.The counter may add, in the rootkit list manager, DLL information corresponding to the read memory to the second DLL list as a list of DLLs for the rootkit, or the DLL information corresponding to the read memory may be added to the first DLL list. After it is determined to exist, it is preferable to update the address variable value by adding a predetermined unit memory address change value to the address variable value stored in the counter.

상기 메모리 리딩부는, 상기 갱신된 주소 변수값을 이용하여 반복하여 상기 메모리의 리딩을 시도하는 것이 바람직하다.Preferably, the memory reading unit attempts to read the memory repeatedly by using the updated address variable value.

본 발명에 의하면, 숨겨진 DLL 루트킷 또는 DLL이 존재하지 않는 악성 스레드까지 메모리를 기반으로 검출할 수 있는 효과가 있다. 또한 클라이언트 내부에 DLL 파일을 삽입하여 루트킷을 검출하는 대신 메모리 주소를 이용하여 외부 프로세스에서 탐지가 가능하기 때문에, 클라이언트에 대한 적응도가 뛰어난 장점이 있다. 이에 따라서 범용적으로 정확하게 DLL 루트킷 및 악성 스레드를 검출해낼 수 있는 효과가 있다.According to the present invention, a hidden DLL rootkit or a malicious thread in which the DLL does not exist can be detected based on memory. Also, instead of detecting a rootkit by inserting a DLL file inside the client, it can be detected by an external process using a memory address, which has the advantage of excellent adaptability to the client. This has the effect of detecting DLL rootkits and malicious threads in a universal and accurate manner.

도 1은 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법의 플로우차트이다.
도 2는 본 발명의 일 실시예에 따라 해킹을 위한 DLL 루트킷 감지 방법의 수행이 제어되는 흐름을 도시한 것이다.
도 3은 본 발명의 일 실시예에 따라 주소 변수값이 갱신되는 흐름의 예를 도시한 것이다.
도 4는 본 발명의 일 실시예에 따라 제1 DLL 리스트를 수집하는 흐름의 예를 도시한 것이다.
도 5는 본 발명의 일 실시예에 따라 제2 DLL 리스트를 관리하는 흐름의 예를 도시한 것이다.
도 6은 본 발명의 일 실시예에 따라 제2 DLL 리스트에 포함될 DLL를 검출하는 흐름의 예를 도시한 것이다.
도 7은 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 장치의 블록도이다.
도 8은 본 발명의 일 실시예에 따라 리스트 수집부가 수행하는 기능을 설명하기 위한 도면이다.
도 9는 본 발명의 일 실시예에 따라 메모리 리딩부가 수행하는 기능을 설명하기 위한 도면이다.
도 10 내지 12는 본 발명의 일 실시예에 있어서 DLL 루트킷이 실행되는 예들을 도시한 것이다.
1 is a flowchart of a DLL rootkit detection method for hacking according to an embodiment of the present invention.
2 illustrates a flow in which execution of a DLL rootkit detection method for hacking is controlled according to an embodiment of the present invention.
3 illustrates an example of a flow in which an address variable value is updated according to an embodiment of the present invention.
4 illustrates an example of a flow of collecting a first DLL list according to an embodiment of the present invention.
5 illustrates an example of a flow of managing a second DLL list according to an embodiment of the present invention.
6 illustrates an example of a flow of detecting a DLL to be included in a second DLL list according to an embodiment of the present invention.
7 is a block diagram of an apparatus for detecting a DLL rootkit for hacking according to an embodiment of the present invention.
8 is a view for explaining a function performed by the list collector according to an embodiment of the present invention.
9 is a diagram for describing a function performed by a memory reading unit according to an exemplary embodiment of the present invention.
10 to 12 illustrate examples of executing a DLL rootkit in an embodiment of the present invention.

이하 첨부된 도면을 참조하여 본 발명의 각 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법 및 장치에 대하여 설명하기로 한다.Hereinafter, a method and apparatus for detecting a DLL rootkit for hacking according to each embodiment of the present invention will be described with reference to the accompanying drawings.

이하의 실시 예는 본 발명의 이해를 돕기 위한 상세한 설명이며, 본 발명의 권리 범위를 제한하는 것이 아님은 당연할 것이다. 따라서, 본 발명과 동일한 기능을 수행하는 균등한 발명 역시 본 발명의 권리 범위에 속할 것이다.The following embodiments are detailed description to help understand the present invention, and it should be understood that the present invention is not intended to limit the scope of the present invention. Accordingly, equivalent inventions performing the same functions as the present invention are also within the scope of the present invention.

또한 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.In addition, in adding reference numerals to the constituent elements of the drawings, it is to be noted that the same constituent elements are denoted by the same reference numerals even though they are shown in different drawings. In the following description of the present invention, a detailed description of known functions and configurations incorporated herein will be omitted when it may make the subject matter of the present invention rather unclear.

또한, 본 발명의 구성 요소를 설명하는 데 있어서, 제 1, 제 2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 어떤 구성 요소가 다른 구성요소에 "연결", "결합" 또는 "접속"된다고 기재된 경우, 그 구성 요소는 그 다른 구성요소에 직접적으로 연결되거나 또는 접속될 수 있지만, 각 구성 요소 사이에 또 다른 구성 요소가 "연결", "결합" 또는 "접속"될 수도 있다고 이해되어야 할 것이다.In addition, in describing the component of this invention, terms, such as 1st, 2nd, A, B, (a), (b), can be used. These terms are intended to distinguish the constituent elements from other constituent elements, and the terms do not limit the nature, order or order of the constituent elements. When a component is described as being "connected", "coupled", or "connected" to another component, the component may be directly connected to or connected to the other component, It should be understood that an element may be "connected," "coupled," or "connected."

본 발명의 실시 예에서 “통신”, “통신망” 및 “네트워크”는 동일한 의미로 사용될 수 있다. 상기 세 용어들은, 파일을 사용자 단말, 다른 사용자들의 단말 및 다운로드 서버 사이에서 송수신할 수 있는 유무선의 근거리 및 광역 데이터 송수신망을 의미한다.In the embodiments of the present invention, " communication ", " communication network ", and " network " The three terms refer to wired and wireless local area and wide area data transmission and reception networks capable of transmitting and receiving a file between a user terminal, a terminal of another user, and a download server.

도 1은 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법의 플로우차트이다.1 is a flowchart of a DLL rootkit detection method for hacking according to an embodiment of the present invention.

먼저 본 발명에서 프로세스라 함은, 사용자 단말에서 실행중인 프로그램 그 자체 또는 일부를 의미한다. 또한 프로세스라 함은 데이터의 입력이나 출력 등을 조작하거나 처리하는 일련의 흐름을 의미한다.First, the term " process " in the present invention means the program itself or a part thereof being executed in the user terminal. Also, the term " process " means a series of processes for manipulating or processing input or output of data.

각 프로세스는 OS(운영체제, Operating System)의 관할 하에 수행된다. 이때, 운영체제의 하위에서 각 프로세스에 대응하는 프로그램에, 시스템 자원을 할당하는 단을 Kernel(이하 커널이라 함)이라 한다. Each process is performed under the jurisdiction of the OS (Operating System). In this case, the kernel that allocates system resources to programs corresponding to each process under the operating system is called a kernel (hereinafter referred to as a kernel).

커널은 컴퓨터 운영체계의 중요한 핵심으로서, OS 하에서 운영체계의 다른 부분들에 기분적인 서비스를 제공하는 시스템의 구성요소이다. 일반적으로 커널에는, 종료된 입출력 연산 등 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러, 그리고 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 수퍼바이저(supervisor) 등이 포함되어 있다.The kernel is an essential component of a computer operating system, and is a component of a system that provides a pervasive service to other parts of an operating system under an OS. Typically, the kernel includes an interrupt handler, which handles all requests that compete for kernel services, such as terminated I / O operations, a scheduler, which determines in what order the programs will share the processing time of the kernel, And a supervisor who licenses the computer to each process.

또한 커널은 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리관리자를 가지고 있다. 커널의 서비스는 운영체계의 다른 부분이나, 흔히 시스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다.The kernel also has a memory manager that manages the address space of the operating system in memory or storage and distributes them to all the peripherals and other users of the kernel's services. The services of the kernel are requested through different parts of the operating system, or through a set of program interfaces, often known as system calls.

본 발명에서 DLL(Dynamic Linking Library)는, OS/2, 윈도즈 등의 운영 체계(OS) 본래 기능으로, 소프트웨어의 루틴을 몇 개의 파일로 나누어 디스크에 두고 필요한 것만을 실행 메모리에 실어서 사용하기 위한 파일로서, DLL로 사용되는 파일은 확장자가 'dll'로 되어 있기 때문에 'dll 파일'이라고 부른다. DLL의 장점은 루틴을 공통으로 사용하는 것이다. 루틴의 함수 집단을 자료집이라고 하는데, 보통 실행 파일을 작성할 때 자료집을 포함해서 컴파일하는 경우가 많다. 그러나 이 방법은 동일 루틴을 다수의 실행 파일이 갖게 되어 비효율적이다. DLL은 다수의 실행 파일에 공유될 수 있기 때문에 디스크 용량이나 메모리를 절약할 수 있다. 또 프로그램을 수정하려는 경우, DLL 파일만을 수정함으로써 완료되는 경우도 있다. 윈도즈 등에서는 OS 기능은 물론 DLL을 애플리케이션과 공유할 수도 있으나, DLL 파일 등의 애플리케이션이 공유되고 있는지는 이용자 수준에서는 판단하기가 어렵다.In the present invention, a DLL (Dynamic Linking Library) is an operating system (OS) function of OS / 2, Windows, etc., which divides software routines into several files, puts them on a disk, and loads only those necessary in the execution memory for use. As a file, a file used as a DLL is called a 'dll file' because the file extension is 'dll'. The advantage of DLLs is that they use routines in common. The collection of functions in a routine is called a data collection, which is often compiled when the executable file is created. However, this method is inefficient because multiple executables have the same routine. DLLs can be shared by multiple executables, saving disk space and memory. Also, if you want to modify the program, it may be completed by modifying only the DLL file. In Windows, you can share DLLs with applications as well as OS functions, but it is difficult to determine at the user level whether applications such as DLL files are shared.

또한 스레드(Thread)는, 컴퓨터 프로그램의 수행 시, 프로세스 내부에 존재하는 수행 경로를 의미한다. 결국, 스레드는 일련의 실행 코드를 의미하며, 프로세스는 단순한 껍데기일 뿐, 실제 작업은 스레드가 담당한다. 프로세스 생성 시 하나의 주 스레드가 생성되어 대부분의 작업을 처리하고 주 스레드가 종료되면 프로세스도 종료된다. 하나의 운영 체계에서 여러 개의 프로세스가 동시에 실행되는 환경이 멀티태스킹이고, 하나의 프로세스 내에서 다수의 스레드가 동시에 수행되는 것이 멀티스레딩이다.In addition, a thread refers to an execution path existing inside a process when a computer program is executed. After all, a thread is a series of executable code, a process is just a shell, and the actual work is the thread. When a process is created, one main thread is created to handle most of the work. When the main thread terminates, the process also terminates. Multitasking is the environment in which multiple processes run concurrently in one operating system, and multithreading is the execution of multiple threads in one process at the same time.

DLL 루트킷은, 악의적인 목적으로 프로그램 수행 시 로드되는 숨겨진 DLL을 의미하며, 악의적인 목적으로 DLL은 외부에 존재하고 프로그램 수행 시 임의로 생성되는 스레드 역시 DLL 루트킷의 한 종류가 될 수 있다.A DLL rootkit means a hidden DLL that is loaded when the program is executed for malicious purposes. A DLL that exists externally for malicious purposes and that is arbitrarily created when the program is executed may also be a type of DLL rootkit.

루트킷이 설치되면 자신이 뚫고 들어온 모든 경로를 바꾸어 놓고, 명령어들을 은폐해 놓기 때문에 해커가 시스템을 원격으로 해킹하고 있어도 루트킷이 설치되어 있는 사실조차 감지하기 어렵다. 침입자는 먼저 암호를 크래킹 하거나 시스템 취약점을 찾아내어 사용자용 접근 권한을 획득한 뒤, 컴퓨터에 루트킷을 설치한다. 루트킷은 네트워크상의 다른 컴퓨터에 있는 사용자 ID와 암호들을 탐지하여 해커에게 루트 권한, 시스템 정보 그리고 기타 특수한 접근 권한을 제공한다. 또한 트래픽이나 키스트로크 감시, 해커 이용 목적의 시스템 내 백도어 설치, 로그파일 수정, 네트워크상의 다른 컴퓨터 공격, 탐지 회피를 위한 기존 시스템 도구의 수정 등의 기능을 제공한다.When the rootkit is installed, it changes all the paths it has penetrated and hides the commands so that even if the hacker is hacking the system remotely, it is difficult to detect the fact that the rootkit is installed. An intruder first cracks a password or finds a system vulnerability to gain access privileges for a user, then installs a rootkit on the computer. Rootkits detect root user IDs and passwords on other computers on the network and provide root privileges, system information, and other special access rights to hackers. It also provides features such as monitoring traffic and keystrokes, installing backdoors in the system for the purpose of hackers, modifying log files, attacking other computers on the network, and modifying existing system tools to avoid detection.

루트킷을 사용하게 되면, DLL이 은닉될 수 있다. 즉, 현재 실행되고 있는 DLL에서 DLL 루트킷 이 사라지게 되며, 이에 따라서 DLL이 들키지 않게 된 뒤 루트킷을 통해 해킹이 수행될 수 있는 것이다.If you use a rootkit, the DLL can be hidden. In other words, the DLL rootkit disappears from the currently running DLL, and thus the hacking can be performed through the rootkit after the DLL becomes invisible.

이때 DLL 루트킷이 현재 실행되고 있는 DLL들의 리스트에 포함되지 않도록 하는 방법은 여러가지가 있다. 예를 들어, 운영체제에서 현재 실행되고 있는 DLL의 리스트를 수집하기 위해 사용되는 일반 함수(공용 API)를 변조(후킹, Hooking)함으로써 해당 DLL이 리스트에 나타나지 않도록 할 수 있다.There are several ways to prevent the DLL rootkit from being included in the list of currently running DLLs. For example, by modifying (hooking) a general function (a common API) used to collect a list of DLLs currently running in the operating system, the DLL can not appear in the list.

또는 프로세스 내 로드된 DLL 의 리스트 정보를 가지고 있는 PEB 구조체 내부의 링크를 우회시켜 해당 DLL이 공용 API를 사용한 DLL 리스트에는 나타나지 않도록 할 수 있다. 또는 DLL이 대상 프로세스에 로드하게 한 후, 스레드만을 생성하고 강제로 DLL을 언로드시킴으로서 DLL을 숨길수도 있다.Alternatively, you can bypass the link inside the PEB structure containing the list information of the DLLs loaded in the process so that the DLLs do not appear in the DLL list using the common API. Alternatively, you can hide the DLL by letting the DLL load it into the target process, creating a thread only, and forcibly unloading the DLL.

일반적으로 악성 DLL, 즉 해킹을 위한 DLL을 감지하기 위해서는, 해당 프로세스 내부에 별도의 감지용 DLL을 삽입하여 악성 DLL을 감지하고 있다. 그러나 이러한 방법은, 클라이언트에 대한 적응성이 떨어지며, 상기 언급한 예에서 스레드만을 생성하게 하는 방법은 감지하지 못하는 단점이 있다.In general, in order to detect a malicious DLL, that is, a DLL for hacking, a separate detection DLL is inserted into a corresponding process to detect a malicious DLL. However, this method has a disadvantage in that it is inadequate to the client and does not detect the method of creating only a thread in the above-mentioned example.

이를 위해 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법에서, 해킹을 위한 DLL 루트킷을 감지하는 장치(이하 장치라 한다.)는, 먼저 사용자 단말의 메모리에 로드된 DLL들의 리스트인 제1 DLL 리스트를 수집하는 단계(S10)를 수행한다.To this end, in the method for detecting a DLL rootkit for hacking according to an embodiment of the present invention, an apparatus for detecting a DLL rootkit for hacking (hereinafter, referred to as a device) is a first list of DLLs loaded in a memory of a user terminal. 1 collect a DLL list (S10).

일련의 프로세스에서 프로세스의 수행에 필요한 DLL이 로드되면, 메모리에 일정한 주소값을 갖고 메모리값을 할당 받아 DLL이 수행된다. 장치는 일반적으로 운영체제에서 제공하는 일반 함수를 이용하여 현재 메모리에 로드되어 실행중인 것으로 일반 함수가 수집한 DLL들의 리스트인 제1 DLL 리스트를 수집하게 된다.When a DLL needed to execute a process is loaded in a series of processes, the DLL is executed by allocating a memory value with a constant address in memory. The device generally collects a first DLL list, which is a list of DLLs collected by a general function, which is loaded and executed in a memory using a general function provided by an operating system.

이때, 제1 DLL 리스트를 수집하는 상세한 흐름은 도 4의 실시예와 같다. At this time, the detailed flow of collecting the first DLL list is the same as the embodiment of FIG. 4.

도 4는 본 발명의 일 실시예에 따라 제1 DLL 리스트를 수집하는 흐름의 예를 도시한 것이다.4 illustrates an example of a flow of collecting a first DLL list according to an embodiment of the present invention.

도 4를 참조하면, 장치는 먼저 사용자 단말의 운영체제의 공용 API 함수인 제1 함수를 로드하는 단계(S14)를 수행한다. 공용 API 함수는 상기 언급한 바와 같이, 메모리에 로드된 것으로 판단되는 DLL의 식별 정보를 수집하기 위해 운영체제에서 제공하는 일반 함수를 의미한다.Referring to FIG. 4, the apparatus first performs a step S14 of loading a first function, which is a common API function of an operating system of a user terminal. As mentioned above, the common API function refers to a general function provided by an operating system to collect identification information of a DLL that is determined to be loaded into memory.

이후, 장치는 로드된 제1 함수를 이용하여 제1 DLL 리스트를 수집하는 단계(S15)를 수행함으로서, 제1 DLL 리스트를 생성하게 된다.Thereafter, the apparatus generates a first DLL list by performing a step S15 of collecting the first DLL list by using the loaded first function.

제1 DLL 리스트가 수집되면, 장치는 카운터 등의 수치 생성 수단에 의해서 생성되는 값으로서, 메모리 주소값에 대응하는 변수인 주소 변수값을 이용하여, 사용자 단말의 메모리의 리딩을 시도하는 단계(S20)를 수행한다.When the first DLL list is collected, the device attempts to read the memory of the user terminal by using an address variable value, which is a variable corresponding to a memory address value, as a value generated by a numerical value generating means such as a counter (S20). ).

메모리를 리딩한다는 것은, 메모리 주소를 이용하여 해당 메모리 주소에 현재 로드되어 실행되는 객체가 존재하는지 여부를 판단하는 것을 의미한다. 해당 메모리 주소에 DLL이 로드되어 실행되고 있다면, 메모리의 리딩에 성공할 것이다.Reading the memory means determining whether an object currently loaded and executed exists in the memory address using the memory address. If the DLL is loaded and running at that memory address, reading of the memory will succeed.

즉, 장치는 먼저 카운터로부터 상기 언급한 변수인 주소 변수값을 수신하며, 이후 수신한 주소 변수값을 메모리의 실행 정보와 비교하여, 수신한 주소 변수값을 메모리 주소로 갖는 메모리값이 존재하는지 여부를 판단하게 된다. 이때 메모리값이 존재하는 것으로 판단되는 경우, 장치는 상기 언급한 바와 같이 주소 변수값을 이용하여 메모리의 리딩이 성공한 것으로 결정함으로서, 해당 메모리를 리딩된 메모리로 결정하게 된다.That is, the device first receives the address variable value, which is the aforementioned variable, from the counter, and then compares the received address variable value with the execution information of the memory to determine whether there is a memory value having the received address variable value as the memory address. Will be judged. In this case, when it is determined that the memory value exists, the device determines that the reading of the memory is successful by using the address variable value as described above, thereby determining the memory as the read memory.

S20 단계를 수행하여, 장치는 메모리의 리딩이 성공했는지 여부를 판단하게 되며(S30), 이때 메모리의 리딩이 성공하는 경우, 장치는 리딩된 메모리에 저장된 코드값들 중, 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계(S40)를 수행한다. 상기의 S40 단계에 대한 구체적인 실시예는 도 6에 도시되어 있다.In operation S20, the device determines whether the reading of the memory is successful (S30). If the reading of the memory succeeds, the device determines the code value of the predetermined area among the code values stored in the read memory. In operation S40, it is determined whether the first code matches the predetermined first code. A detailed embodiment of the above step S40 is shown in FIG. 6.

도 6은 본 발명의 일 실시예에 따라 제2 DLL 리스트에 포함될 DLL를 검출하는 흐름의 예를 도시한 것이다.6 illustrates an example of a flow of detecting a DLL to be included in a second DLL list according to an embodiment of the present invention.

도 6을 참조하면, 장치는 먼저 도 1의 S30 단계와 같이, 주소 변수값을 이용하여 메모리의 리딩이 성공했는지 여부를 판단하는 단계를 수행하게 된다.Referring to FIG. 6, the apparatus first performs a step of determining whether reading of a memory is successful using an address variable value as in step S30 of FIG. 1.

만약 메모리의 리딩이 성공한 경우, 장치는 리딩된 메모리의 구조에 따라 구분된 영역들 중, 기설정된 영역, 즉 DLL의 헤더 영역으로 분류된 코드값을 추출하는 단계(S41)를 수행한다. 이후, 추출된 헤더값이 'MZ'인 제1 코드와 일치하는지 여부를 판단하는 단계(S42)를 수행한다.If the reading of the memory is successful, the device extracts a code value classified into a predetermined area, that is, a header area of the DLL, among the areas divided according to the structure of the read memory (S41). Thereafter, it is determined whether the extracted header value matches the first code of 'MZ' (S42).

S42 단계 이후, 헤더값이 기설정된 제1 코드, 즉 'MZ'라면, 이후의 도 1의 S50 단계를 수행하게 되나, 'MZ'가 아니라면 해당 메모리에 대응하는 DLL을 제2 DLL 리스트에 포함할지 여부에 대한 수행을 하지 않게 된다.After the step S42, if the header value is a predetermined first code, that is, 'MZ', step S50 of FIG. 1 is performed. If the header value is not 'MZ', the DLL corresponding to the memory is included in the second DLL list. It does not perform whether or not.

악성 DLL코드는 실행 파일에 대응하는 코드인 것이 대부분이다. 한편, 각 DLL 코드는 헤더 부분에 파일의 성격을 나타내는 코드값이 포함되어 있는데, 속칭 '매직넘버'로 일컬어지는 'MZ'는 MS-DOS의 실행파일을 의미하게 된다. 즉, 정상적인 실행 파일이든, 숨겨진 DLL 파일이든 프로세스의 실행을 위한 DLL파일은 그 헤더 영역에 'MZ'라는 코드값을 포함하고 있는 것이다. 따라서, 장치는 헤더 영역에 'MZ'라는 코드값을 갖고 있는지 여부를 판단하여, 악성 DLL들의 리스트인 제2 DLL 리스트에 리딩된 메모리에 대응하는 DLL을 추가할지 여부를 판단하는 작업을 수행할지 여부를 결정하게 되는 것이다.Most malicious DLL codes are codes that correspond to executable files. On the other hand, each DLL code includes a code value indicating the characteristics of the file in the header part, and 'MZ', which is commonly referred to as 'magic number', refers to an executable file of MS-DOS. That is, a DLL file for executing a process, whether it is a normal executable file or a hidden DLL file, contains a code value of 'MZ' in its header area. Accordingly, the device determines whether the header area has a code value of 'MZ' and determines whether to add a DLL corresponding to the read memory to the second DLL list, which is a list of malicious DLLs. Will be determined.

S40 단계의 수행에 따라서, 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되면, 장치는 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계(S50)를 수행하고, 이때 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 미존재하는 경우, 제2 DLL 리스트에 리딩된 메모리에 대응하는 DLL 정보를 추가하는 단계(S60)를 수행한다.In operation S40, when it is determined that the value of the preset region matches the preset first code, the device determines whether the DLL information corresponding to the read memory exists in the first DLL list (S50). In this case, if the DLL information corresponding to the read memory does not exist in the first DLL list, step S60 of adding the DLL information corresponding to the read memory to the second DLL list is performed.

S50 단계는 구체적으로, 리딩된 메모리에 매칭되는 파일을 검색하는 것을 의미하며, 이때 검색된 파일의 DLL 정보를 분석하여, 분석된 DLL 정보가 제1 DLL 리스트에 존재하는지 여부를 판단하는 것을 의미한다.Specifically, the step S50 may mean searching for a file matching the read memory, and analyzing the DLL information of the searched file to determine whether the analyzed DLL information exists in the first DLL list.

이 경우, S60 단계는 검색된 파일의 DLL 정보가 제1 DLL 리스트에 미존재하는 경우, 검색된 파일의 DLL 정보를 제2 DLL 리스트에 추가하는 것을 의미한다.In this case, step S60 means that if the DLL information of the searched file does not exist in the first DLL list, the DLL information of the searched file is added to the second DLL list.

한편, 제2 DLL 리스트에 리딩된 메모리에 대응하는 DLL 정보를 추가하는 구체적인 실시예는 도 5에 도시되어 있다.Meanwhile, a specific embodiment of adding DLL information corresponding to the read memory to the second DLL list is illustrated in FIG. 5.

도 5는 본 발명의 일 실시예에 따라 제2 DLL 리스트를 관리하는 흐름의 예를 도시한 것이다.5 illustrates an example of a flow of managing a second DLL list according to an embodiment of the present invention.

도 5를 참조하면, 장치는 먼저 도 1의 S40 단계를 수행하여, 리딩된 메모리에 대응하는 DLL 파일의 성격이 실행 파일인지 여부를 판단하게 된다. Referring to FIG. 5, the device first performs step S40 of FIG. 1 to determine whether a character of a DLL file corresponding to a read memory is an executable file.

리딩된 메모리에 실행 파일의 수행에 따라서 할당된 메모리로 판단되면, 장치는 먼저 상기 언급한 바와 같이 메모리값에 매칭되는 파일을 검색하는 단계(S51)를 수행한다.If it is determined that the memory is allocated according to the execution of the executable file in the read memory, the device first searches for a file matching the memory value (S51).

S51 단계의 수행에 따라서 장치는 메모리값에 매칭되는 파일의 검색이 성공했는지 여부를 판단한다(S52).In operation S51, the device determines whether a search for a file matching the memory value is successful (S52).

S52 단계의 수행 결과, 파일의 검색이 실패하는 경우에는 상기 언급한 DLL 루트킷의 종류 중, DLL을 강제 언로드하여 스레드만이 존재하는 경우에 해당하기 때문에, 장치는 해당 메모리값에 대응하는 스레드를 루트킷을 위한 스레드의 리스트로서 제1 스레드 리스트에 추가하게 된다.If, as a result of performing the step S52, the file search fails, the device corresponds to a case where only a thread exists by forcibly unloading the DLL among the above-mentioned types of DLL rootkits, and thus the device rootkit corresponding to the corresponding memory value. It is added to the first thread list as a list of threads for.

제1 스레드 리스트는 제2 DLL 리스트와 별개로 언급되고 있으나, 결국 루트킷 대상에 대한 리스트인 점에서 동일하기 때문에 본 발명에서는 동일한 리스트를 의미할 수 있다. 즉, 파일의 검색이 실패하는 경우, 도 1의 S60 단계, 즉 리딩된 메모리에 대응하는 스레드 또는 DLL을 제2 DLL 리스트에 추가하는 단계가 수행될 수 있다.Although the first thread list is mentioned separately from the second DLL list, in the present invention, since the first thread list is the same as the list for the rootkit target, the first thread list may mean the same list. That is, when a file search fails, step S60 of FIG. 1, that is, adding a thread or a DLL corresponding to the read memory to the second DLL list may be performed.

한편, 파일의 검색에 성공한 경우, 장치는 검색된 파일의 DLL 정보가 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계(S53)를 수행하여, 상기 언급한 바와 같이 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 리딩된 메모리에 매칭된 파일의 DLL 정보를 제2 DLL 리스트에 추가하는 단계(S60)를 수행한다.On the other hand, if the file is successfully searched, the device determines whether the DLL information of the searched file exists in the first DLL list (S53), and as mentioned above, the device does not exist in the first DLL list. If it is determined, step S60 of adding DLL information of a file matched with the read memory to the second DLL list is performed.

한편 제1 DLL 리스트에 존재하는 것으로 판단되는 경우라면, 바로 주소 변수값을 변경하는 단계(S70)를 수행한다.On the other hand, if it is determined that it exists in the first DLL list, step S70 of immediately changing the address variable value is performed.

다시 도 1에 대한 설명으로 돌아오면, S70 단계는 두 가지의 경우에 수행된다. 먼저, 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하는 경우, 제2 DLL 리스트에 대한 갱신이 없이 바로 주소 변수값이 갱신된다.Returning to the description of FIG. 1 again, step S70 is performed in two cases. First, when DLL information corresponding to the read memory exists in the first DLL list, the address variable value is immediately updated without updating the second DLL list.

한편, 리딩된 메모리에 대응하는 파일의 검색이 실패하거나 검색된 파일의 DLL 정보가 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 해당 정보를 제2 DLL 리스트에 추가하는 단계(S60)의 수행 후, 주소 변수값이 갱신된다.On the other hand, if the search for the file corresponding to the read memory fails or if it is determined that the DLL information of the searched file does not exist in the first DLL list, after the step of adding the information to the second DLL list (S60) , The address variable value is updated.

상기의 과정을 통해 본 발명에서는 직접 메모리에 접근하여 주소 변수값을 이용하여 메모리의 리딩을 시도함으로써, 어떠한 방법으로든 숨겨진 DLL 또는 악성 스레드를 감지할 수 있는 효과가 있다. 또한, DLL을 이용하는 것이 아닌, 주소 변수값으로 외부로부터 메모리를 리딩하여 DLL을 검출해 내기 때문에, 모든 클라이언트에 동일한 방법을 이용하여 DLL을 검출할 수 있어, 클라이언트에 대한 적응성이 뛰어난 효과가 있다.Through the above process, in the present invention, by directly accessing the memory and attempting to read the memory using the address variable value, there is an effect of detecting a hidden DLL or a malicious thread in any way. In addition, since the DLL is detected by reading the memory from the outside with the address variable value instead of using the DLL, the DLL can be detected using the same method for all clients, thereby providing excellent adaptability to the client.

한편, S70 단계, 즉 주소 변수값을 갱신하는 것은, 모든 메모리 주소값에 대하여 메모리의 리딩을 시도하는 것을 의미하기 때문에, 사용자 단말의 메모리 주소의 시작점으로부터 메모리 주소의 마지막에 대응하는 수치로 주소 변수값을 갱신하는 것을 의미한다. 이를 통해 사용자 단말에서 프로세스의 수행에 따라 로드되는 DLL의 로드에 따라 할당되는 메모리 영역의 모든 값에 대한 리딩을 시도하게 된다. 이에 대한 구체적인 예는 다음의 도 2 및 3에 대한 설명에서 언급하기로 한다.On the other hand, since the step S70, that is, updating the address variable value means attempting to read the memory for all the memory address values, the address variable is a numerical value corresponding to the end of the memory address from the start point of the memory address of the user terminal. Means to update the value. Through this, the user terminal attempts to read all values of the memory area allocated according to the load of the DLL loaded as the process executes. Specific examples thereof will be described in the following description with reference to FIGS. 2 and 3.

도 2는 본 발명의 일 실시예에 따라 해킹을 위한 DLL 루트킷 감지 방법의 수행이 제어되는 흐름을 도시한 것이다.2 illustrates a flow in which execution of a DLL rootkit detection method for hacking is controlled according to an embodiment of the present invention.

도 1에서 언급한 바와 같이 본 발명에서는 주소 변수값이 메모리의 리딩에 사용된다. 주소 변수값은 도 1의 S70 단계에서 언급된 바와 같이 각 감지 시점 당 변경될 수 있다.As mentioned in FIG. 1, the address variable value is used for reading a memory. The address variable value may be changed at each detection time as mentioned in step S70 of FIG. 1.

이를 위해, 도 2를 참조하면 장치는 먼저 제1 DLL 리스트가 수집되면(S10), 카운터로부터 현재 감지 시점에서의 주소 변수값을 호출하는 단계(S11)를 수행한다. To this end, referring to FIG. 2, when the first DLL list is collected (S10), the device performs a step (S11) of calling the address variable value at the current detection time from the counter.

주소 변수값은 메모리의 주소에 대응하여 상기 언급한 바와 같이 시작점과 마지막을 갖게 된다. 본 발명에서 마지막에 대응하는 수치는 임계 변수값으로 사용된다. The address variable value has a start point and end point as described above corresponding to the address of the memory. In the present invention, the last corresponding numerical value is used as the threshold variable value.

즉, 주소 변수값은 시작점으로부터 마지막에 대응하는 수치인 임계 변수값까지 변경되면서 사용되어, 사용자 단말에서의 메모리의 리딩에 사용된다.That is, the address variable value is used while changing from the start point to the threshold variable value corresponding to the last value, and used for reading the memory in the user terminal.

따라서, 장치는 주소 변수값을 이용하여 메모리의 리딩을 시도하기 전, 현재 감지 시점의 주소 변수값이 임계 변수값을 초과하는지 여부(S12)를 수행하여, 메모리의 리딩을 시도할 필요가 없는지 여부를 판단하게 된다.Therefore, before the device attempts to read the memory by using the address variable value, the device performs whether the address variable value at the present detection time exceeds the threshold variable value (S12), and does not need to try to read the memory. Will be judged.

S12의 수행결과, 현재 감지 시점의 주소 변수값이 임계 변수값과 같거나 임계 변수값보다 작은 경우, 도 1의 S20 단계, 즉 현재의 주소 변수값을 이용하여 메모리의 리딩을 시도하는 단계를 수행한다.As a result of the operation of S12, when the address variable value at the present detection time is equal to or smaller than the threshold variable value, step S20 of FIG. 1, that is, attempting to read the memory using the current address variable value is performed. do.

그러나 S12의 수행결과, 현재 감지 시점의 주소 변수값이 임계 변수값보다 큰 것으로 판단되는 경우, 더 이상의 메모리의 리딩을 시도할 필요가 없기 때문에, 장치는 장치가 수행하는 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법의 수행, 즉 메모리 리딩의 시도를 종료하도록 제어하는 단계(S13)를 수행할 수 있다.However, when it is determined that the address variable value at the present detection time is larger than the threshold variable value as a result of the operation of S12, since the device does not need to attempt reading of the memory further, the device may not be attempted. In step S13, a method of detecting a DLL rootkit for hacking, that is, ending an attempt of memory reading may be performed.

이로써, 무제한으로 반복적인 감지를 피하고, 최소한의 시스템 자원을 활용하여 메모리의 리딩을 시도함으로써, 시스템 로드를 줄이고 DLL 루트킷 감지의 효율성을 재고할 수 있는 효과가 있다.This avoids unlimited repetitive detections and attempts to read memory with minimal system resources, reducing system load and rethinking the effectiveness of DLL rootkit detection.

도 3은 본 발명의 일 실시예에 따라 주소 변수값이 갱신되는 흐름의 예를 도시한 것이다.3 illustrates an example of a flow in which an address variable value is updated according to an embodiment of the present invention.

도 1 및 2에서 언급한 바와 같이 주소 변수값은 그 값이 변경되면서 메모리 주소에 대응하는 수치로 사용되어, 메모리의 리딩을 시도하기 위해 사용되는 값이다. 따라서, 각 감지 시점에서 주소 변수값은 변경되어야 할 것이다. As mentioned in FIGS. 1 and 2, an address variable value is used as a numerical value corresponding to a memory address while its value is changed, and is used to attempt reading of a memory. Therefore, the address variable value will have to be changed at each detection point.

이를 위해 도 3을 참조하면, 장치는 먼저 도 1의 S30 단계, 현재 감지 시점에서 주소 변수값을 이용하여 메모리의 리딩이 성공했는지 여부를 판단하게 된다.For this purpose, referring to FIG. 3, the device first determines whether reading of the memory is successful using the address variable value at step S30 of FIG. 1.

이때, 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하는 경우에는, 감지된 DLL 정보를 제2 DLL 리스트에 저장하지 않고 건너뛰게 된다. 한편, 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하지 않는 경우라면, 장치는 도 1의 S60 단계, 즉 감지된 DLL 정보를 제2 DLL 리스트에 추가하는 단계를 수행하게 된다.In this case, when the DLL information corresponding to the read memory exists in the first DLL list, the detected DLL information is skipped without storing the detected DLL information in the second DLL list. Meanwhile, if the DLL information corresponding to the read memory does not exist in the first DLL list, the device performs step S60 of FIG. 1, that is, adding the detected DLL information to the second DLL list.

S60 단계가 수행되거나, 리딩된 메모리에 대응하는 DLL 정보가 제2 DLL 리스트에 저장되지 않는 경우, 즉 어떠한 판단 결과로든 판단 결과에 따른 일련의 과정이 종료되면, 장치는 카운터를 제어하여 주소 변수값을 갱신하도록 한다.When the step S60 is performed or the DLL information corresponding to the read memory is not stored in the second DLL list, that is, when a series of processes according to the determination result is finished as any determination result, the device controls the counter to set the address variable value. Update it.

이때, 주소 변수값은, 현재 감지 시점의 주소 변수값에 메모리에서 할당되는 단위 메모리 주소 변동값을 더함으로써 갱신된다(S71).At this time, the address variable value is updated by adding the unit memory address variation value allocated in the memory to the address variable value at the present detection time (S71).

주소 변수값이 갱신되면, 장치는 갱신된 주소 변수값을 이용하여 다시 메모리의 리딩을 시도하는 단계를 수행할 수 있다.If the address variable value is updated, the device may perform a step of attempting to read the memory again using the updated address variable value.

즉, 주소 변수값이 갱신될 때마다 메모리의 리딩이 시도되며, 이러한 일련의 단계는 메모리 주소의 시작점으로부터 마지막까지 반복적으로 수행될 수 있다.That is, whenever an address variable value is updated, a reading of the memory is attempted, and this series of steps may be repeatedly performed from the beginning of the memory address to the end.

이를 통해, 상기 언급한 바와 같이 어떠한 방법을 사용하여 숨겨진 DLL이든지 본 발명에 의해 감지될 수 있으며, 이에 따라서 해킹을 위한 루트킷을 감지할 수 있는 효과가 있다.Through this, as mentioned above, any hidden DLL can be detected by the present invention using any method, and accordingly, there is an effect of detecting a rootkit for hacking.

도 7은 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 장치의 블록도이다. 이하의 설명에서 도 1 내지 6에 대한 설명과 중복되는 부분은 이를 생략하기로 한다.7 is a block diagram of an apparatus for detecting a DLL rootkit for hacking according to an embodiment of the present invention. In the following description, portions overlapping with the description of Figs. 1 to 6 will be omitted.

도 7을 참조하면, 본 발명의 일 실시예에 따른 해킹을 위한 DLL 루트킷 감지 장치(10)는, 리스트 수집부(11), 메모리 리딩부(12), 파일 검색부(13) 및 루트킷 리스트 관리부(14)를 포함한다. 메모리 리딩부(12)에는, 주소 변수값을 제공하기 위한 카운터(15)가 연결될 수 있다.Referring to FIG. 7, the apparatus for detecting a DLL rootkit 10 for hacking according to an embodiment of the present invention may include a list collecting unit 11, a memory reading unit 12, a file searching unit 13, and a rootkit list managing unit. (14). The memory reading unit 12 may be connected with a counter 15 for providing an address variable value.

리스트 수집부(11)는, 상기 언급한 바와 같이 운영체제에서 제공하는 제1 함수를 이용하여, 현재 메모리(30)에 로드되어 실행중인 것으로 판단되는 DLL들(50, 51)의 리스트인 제1 DLL 리스트를 수집하는 기능을 수행한다.As mentioned above, the list collecting unit 11 uses the first function provided by the operating system, and is a first DLL that is a list of DLLs 50 and 51 that are currently loaded into the memory 30 and determined to be running. Perform a function to collect a list.

리스트 수집부(11)에서 수집된 DLL 리스트는 추후 비교를 위해 루트킷 리스트 관리부(14)에 전달된다.The DLL list collected by the list collecting unit 11 is transferred to the rootkit list management unit 14 for later comparison.

메모리 리딩부(12)는, 카운터(15)로부터 주소 변수값을 수신한 뒤 수신한 주소 변수값을 이용하여 메모리(30)로부터 해당 주소 변수값을 갖는 메모리값이 존재하는지 여부는 판단하는 기능, 즉 메모리 리딩을 시도하는 기능을 수행한다.The memory reading unit 12 receives the address variable value from the counter 15 and then determines whether a memory value having the corresponding address variable value exists from the memory 30 by using the received address variable value; That is, it tries to read memory.

즉, 카운터(15)로부터 수신한 주소 변수값을 메모리(30)의 실행 정보와 비교한 뒤, 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는 경우, 수신한 주소 변수값을 메모리 주소로 갖는 메모리를 상기의 리딩된 메모리로 결정하는 기능을 수행한다.That is, after comparing the address variable value received from the counter 15 with the execution information of the memory 30, and if there is a memory having the received address variable value as the memory address, the received address variable value as the memory address. The memory having the above function is determined as the read memory.

이때, 상기 언급한 바와 같이 메모리 리딩부(12)는 카운터(15)로부터 반복적으로 갱신되는 주소 변수값을 수신하고, 이를 이용하여 반복적으로 메모리(30)에 대한 리딩을 시도한다. 상기의 시도는 메모리(30)의 주소의 시작점으로부터 마지막까지 반복될 것이다.At this time, as mentioned above, the memory reading unit 12 receives an address variable value that is repeatedly updated from the counter 15, and repeatedly tries to read the memory 30 using the address variable value. The above attempt will be repeated from the beginning of the address of the memory 30 to the end.

이때, 메모리(30)의 주소의 마지막, 즉 임계 변수값보다 현재의 주소 변수값이 작거나 같은 경우에만 메모리(30)에 대한 리딩을 시도하게 되며, 임계 변수값보다 주소 변수값이 큰 경우 메모리(30)에 대한 리딩을 중단하고 본 발명의 프로세스를 중단하게 된다.At this time, the reading of the memory 30 is attempted only when the last address of the memory 30, that is, the current address variable value is less than or equal to the threshold variable value, and the address variable value is larger than the threshold variable value. Stop reading for 30 and stop the process of the present invention.

파일 검색부(13)는, 메모리 리딩부(12)로부터 리딩된 메모리가 검출될 경우, 리딩된 메모리에 저장된 값들 중, 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 리딩된 메모리에 대응하는 DLL 정보를 추출하는 기능을 수행한다.When the memory read from the memory reading unit 12 is detected, the file retrieval unit 13 determines that a value of a predetermined region among the values stored in the read memory corresponds to the preset first code. Extracts the DLL information corresponding to the read memory.

도 7을 참조하면, 메모리(30)에는 할당된 메모리값(31)들이 존재하는데, 각 메모리값(31)은 DLL(50)의 집합들 중 어느 한 DLL 정보(51) 각각에 대응된다. 물론 상기 언급한 바와 같이, 악성 스레드의 경우 메모리값(31)에 대응하는 DLL 정보(51), 즉 파일이 존재하지 않을 수 있다.Referring to FIG. 7, there are allocated memory values 31 in the memory 30, each of which corresponds to each of the DLL information 51 of any of the sets of DLLs 50. Of course, as mentioned above, in the case of the malicious thread, the DLL information 51 corresponding to the memory value 31, that is, the file may not exist.

한편 상기 언급한 바와 같이 파일 검색부(13)는 리딩된 메모리에 저장된 값들 중, 헤더 영역으로 분류된 코드값이 실행 파일에 대응하는 헤더 코드값인 'MZ'인지 여부를 판단하여, 헤더 코드값이 'MZ'인 DLL이 검색될 경우 이를 루트킷 리스트 관리부(14)에 전달하게 된다.Meanwhile, as mentioned above, the file search unit 13 determines whether the code value classified as the header area among the values stored in the read memory is 'MZ', the header code value corresponding to the executable file, and determines the header code value. When the DLL of 'MZ' is searched for, it is transmitted to the rootkit list manager 14.

루트킷 리스트 관리부(14)는, 헤더 코드값이 'MZ'인 것으로 판단되어 리딩된 메모리에 대응하는 DLL 정보가 추출되어 파일 검색부(13)로부터 추출된 DLL 정보를 수신한 경우, 이를 제1 DLL 리스트에 대입하여 추출된 DLL 정보가 제1 DLL 리스트에 존재하는지 여부를 판단하고, 미존재하는 것으로 판단되는 경우, 해당 DLL 정보를 루트킷을 위한 DLL들의 리스트인 제2 DLL 리스트에 추가하여 데이터베이스(60)에 저장하는 기능을 수행한다.When the rootkit list manager 14 determines that the header code value is 'MZ' and extracts DLL information corresponding to the read memory and receives the extracted DLL information from the file search unit 13, the rootkit list management unit 14 receives the extracted DLL information. It is determined whether the extracted DLL information is substituted into the first DLL list in the first DLL list, and when it is determined that the extracted DLL information does not exist, the corresponding DLL information is added to the second DLL list which is a list of DLLs for the rootkit and the database (60). Save to).

이때 상기 언급한 바와 같이, 리딩된 메모리에 매칭되는 파일의 검색이 실패한 것으로 판단되거나 실패한 것으로 판단되었다는 정보를 파일 검색부(13)로부터 수신하는 경우, 제2 DLL 리스트와 동일하거나 별개의 리스트인 제1 스레드 리스트에 해당 메모리에 대응하는 정보를 저장할 수 있다.At this time, as mentioned above, when the file search unit 13 receives the information that the search for the file matching the read memory is determined to have failed or is determined to fail, the first or second list is the same as or different from the second DLL list. 1 Information corresponding to the memory can be stored in the thread list.

한편 카운터(15)는 상기 언급한 바와 같이 메모리 리딩부(12)에 주소 변수값을 제공하는 기능을 수행하며, 이를 위해 주소 변수값을 갱신하게 된다. 이때, 카운터(15)는 루트킷 리스트 관리부(14)에서 리딩된 메모리에 대응하는 DLL 정보를 제2 DLL 리스트에 추가하거나, 리딩된 메모리에 대응하는 DLL 정보가 제1 DLL 리스트에 존재하는 것으로 판단되는 두 가지 케이스가 감지된 경우, 카운터에 저장된 주소 변수값을 갱신한다.On the other hand, the counter 15 performs a function of providing an address variable value to the memory reading unit 12 as mentioned above, and updates the address variable value for this purpose. At this time, the counter 15 adds DLL information corresponding to the memory read by the rootkit list manager 14 to the second DLL list, or determines that the DLL information corresponding to the read memory exists in the first DLL list. If two cases are detected, the address variable value stored in the counter is updated.

주소 변수값의 갱신은, 현재 감지 시점의 주소 변수값에, 단위 메모리 주소 변동값을 더함으로써 이루어진다.The update of the address variable value is made by adding the unit memory address variation value to the address variable value at the present detection time.

도 8은 본 발명의 일 실시예에 따라 리스트 수집부(11)가 수행하는 기능을 설명하기 위한 도면이다.8 is a view for explaining a function performed by the list collecting unit 11 according to an embodiment of the present invention.

도 8을 참조하면, 메모리(30)에는 이에 대응하는 DLL들(51, 52)이 존재하며, 리스트 수집부(11)는 운영체제(20)로부터 제공되는 상기 언급한 공용 API 함수인 제1 함수를 이용하여 DLL(50)에 대응하는 메모리값이 존재하는지 여부를 검색한다. 이 결과 현재 운영체제(20) 단에서 메모리(30)에 로드된 것으로 판단되는 DLL 정보(DLL1, DLL2, 악성 DLL인 DLL3은 제외)의 정보가 리스트 수집부(11)에 전달된다.Referring to FIG. 8, there are DLLs 51 and 52 corresponding to each other in the memory 30, and the list collecting unit 11 uses the first function, which is the above-mentioned public API function, provided from the operating system 20. Search whether a memory value corresponding to the DLL 50 exists. As a result, the information of the DLL information (excluding DLL1, DLL2, and DLL3 which is a malicious DLL) which is determined to be loaded into the memory 30 at the current operating system 20 stage is transmitted to the list collecting unit 11.

도 9는 본 발명의 일 실시예에 따라 메모리 리딩부(12)가 수행하는 기능을 설명하기 위한 도면이다.9 is a diagram for describing a function performed by the memory reading unit 12 according to an exemplary embodiment of the present invention.

도 9를 참조하면, 메모리 리딩부(12)는 카운터(15)로부터 현재 감지 시점에서의 주소 변수값(121)을 수신하여 이를 메모리(30)에 전달함으로서, 메모리 리딩을 시도하게 된다.Referring to FIG. 9, the memory reading unit 12 attempts to read a memory by receiving an address variable value 121 at the current sensing time from the counter 15 and transferring it to the memory 30.

메모리(30)에는 할당된 메모리값들(31, 32)이 존재하며, 이 중에는 도 8의 실시예에서 사용되는 공용 API를 통해 검색되지 않을 수 있는 DLL에 대응하는 메모리값(32)과, 공용 API를 통해 검색되는 정상적인 DLL에 대응하는 메모리값(31)이 존재할 수 있다.The memory 30 has allocated memory values 31 and 32, among which a memory value 32 corresponding to a DLL that may not be retrieved through the public API used in the embodiment of FIG. There may be a memory value 31 corresponding to a normal DLL retrieved through the API.

이때, 메모리 리딩부(12)는 주소 변수값(121)을 이용하여 직접적으로 메모리(30)로부터 메모리의 리딩을 시도하기 때문에, 정상적인 DLL 에 대응하는 메모리값(31)뿐 아니라, 악성 DLL에 대응하는 메모리값(32)역시 구분하지 않고 검출하게 된다.At this time, since the memory reading unit 12 attempts to read the memory directly from the memory 30 using the address variable value 121, the memory reading unit 12 responds to the malicious DLL as well as the memory value 31 corresponding to the normal DLL. The memory value 32 to be detected is also detected without discriminating.

도 10 내지 12는 본 발명의 일 실시예에 있어서 DLL 루트킷이 실행되는 예들을 도시한 것이다.10 to 12 illustrate examples of executing a DLL rootkit in an embodiment of the present invention.

먼저 도 10을 참조하면, 커널(21)에는 PEB 구조체(211)에 대한 정보가 저장될 수 있으며, PEB 구조체(211)에는 DLL의 주소 링크 정보(212)가 포함되어 있다. 주소 링크 정보(212)는 상기 언급한 운영체제(20)가 제공하는 제1 함수가 제1 DLL 리스트를 생성하는 데 사용된다.First, referring to FIG. 10, information about the PEB structure 211 may be stored in the kernel 21, and the PEB structure 211 includes address link information 212 of a DLL. The address link information 212 is used by the first function provided by the above-mentioned operating system 20 to generate the first DLL list.

이때, DLL단(50)에 포함된 DLL 중 악성 DLL(52)은, 정상적인 DLL(51)과 달리, PEB 구조체(211) 내부의 주소 링크 정보(212)와 DLL의 링크를 우회시키게 된다. 도 10에서는 DLL 단(50)으로부터 주소 링크 정보(212)와의 연결이 끊어진 것으로 표현하고 있으나, 링크를 우회한 것으로 이해되어야 할 것이다.At this time, the malicious DLL 52 among the DLLs included in the DLL stage 50 bypasses the link between the DLL and the address link information 212 in the PEB structure 211, unlike the normal DLL 51. In FIG. 10, the connection to the address link information 212 is broken from the DLL stage 50, but it should be understood that the link is bypassed.

이 경우, 악성 DLL(52)은 주소 링크 정보(212)에 포함되지 않아, 결국 공용 API함수를 이용해서는 해당 DLL(52)의 정보가 검색되지 않을 것이다.In this case, the malicious DLL 52 is not included in the address link information 212, so that the information of the corresponding DLL 52 will not be retrieved using the public API function.

도 11의 실시예에서는, 현재 프로세스(80)에서 진행되고 있는 스레드(81, 82))들의 정보가 표시된 것을 확인할 수 있다. 스레드(81, 82)는 DLL(50)에 포함된 정상적인 DLL(51)이 로드되어 작업을 수행 시 생성될 수 있다.In the embodiment of Figure 11, it can be seen that the information of the threads (81, 82) currently in progress in the process (80) is displayed. The threads 81 and 82 may be generated when a normal DLL 51 included in the DLL 50 is loaded to perform a task.

그러나 악성 스레드(82)는, DLL 루트킷(53)이 로드 후 강제로 언로드됨으로서, DLL의 정보는 존재하지 않고, 즉 파일이 존재하지 않고 스레드만이 존재하게 됨으로써 생성된다.However, the malicious thread 82 is created by forcibly unloading the DLL rootkit 53 after loading, so that the information of the DLL does not exist, that is, the file does not exist and only the thread exists.

이때, DLL단(50)에는 당연히 현재 로드된 정상적 스레드(81)에 대응하는 DLL(51)만이 존재할 것이며, 악성 스레드(82)에 대응하는 DLL은 존재하지 않을 것이다.At this time, of course, only the DLL 51 corresponding to the currently loaded normal thread 81 will exist in the DLL stage 50, and the DLL corresponding to the malicious thread 82 will not exist.

이 경우, 역시 공용 API를 이용한 제1 DLL 리스트(70)에는 상기의 정상적인 DLL(51)에 대한 리스트만이 존재할 것이다.In this case, only the list of the normal DLL 51 may exist in the first DLL list 70 using the common API.

도 12의 실시예를 참조하면, 운영체제(21)에는 공용 API, 즉 상기 언급한 제1 함수(22)가 존재하여 제1 DLL 리스트를 추출할 수 있다. 한편 DLL 단(50)에는, 정상적인 DLL(51)과, 악성 DLL(52)이 존재할 수 있다.Referring to the embodiment of FIG. 12, the operating system 21 may have a common API, that is, the above-mentioned first function 22, so that the first DLL list may be extracted. In the DLL stage 50, a normal DLL 51 and a malicious DLL 52 may exist.

이때 악성 DLL(52)에 대응하는 루트킷(53)은, 실행에 의해 제1 함수(22)를 변조(Hooking)함으로서, 제1 함수(22)가 제1 DLL 리스트를 추출 시 루트킷(53)에 대응하는 DLL(52)의 정보는 제1 DLL 리스트에 포함되지 않도록 할 수 있다.At this time, the rootkit 53 corresponding to the malicious DLL 52 modulates (Hooking) the first function 22 by execution, so that the first function 22 to the rootkit 53 when extracting the first DLL list. Information of the corresponding DLL 52 may not be included in the first DLL list.

이상에서 전술한 본 발명의 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법은, 단말기에 기본적으로 설치된 애플리케이션(이는 단말기에 기본적으로 탑재된 플랫폼이나 운영체제 등에 포함된 프로그램을 포함할 수 있음)에 의해 실행될 수 있고, 사용자가 애플리케이션 스토어 서버, 애플리케이션 또는 해당 서비스와 관련된 웹 서버 등의 애플리케이션 제공 서버를 통해 단말기에 직접 설치한 애플리케이션(즉, 프로그램)에 의해 실행될 수도 있다. 이러한 의미에서, 전술한 본 발명의 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법은 단말기에 기본적으로 설치되거나 사용자에 의해 직접 설치된 애플리케이션(즉, 프로그램)으로 구현되고 단말기 등의 컴퓨터로 읽을 수 있는 기록매체에 기록될 수 있다.The DLL rootkit detection method for hacking according to the above-described embodiment of the present invention is executed by an application basically installed in a terminal (which may include a program included in a platform or an operating system basically loaded in the terminal). It may also be executed by an application (ie, a program) that the user directly installs on the terminal through an application providing server such as an application store server, an application, or a web server associated with the corresponding service. In this sense, the method for detecting a DLL rootkit for hacking according to an embodiment of the present invention described above is implemented as an application (ie, a program) that is basically installed in a terminal or directly installed by a user, and can be read by a computer such as a terminal. Can be recorded on the medium.

이러한 프로그램은 컴퓨터에 의해 읽힐 수 있는 기록매체에 기록되고 컴퓨터에 의해 실행됨으로써 전술한 기능들이 실행될 수 있다. Such a program may be recorded on a recording medium that can be read by a computer and executed by a computer so that the above-described functions can be executed.

이와 같이, 본 발명의 각 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법을 실행시키기 위하여, 전술한 프로그램은 컴퓨터의 프로세서(CPU)가 읽힐 수 있는 C, C++, JAVA, 기계어 등의 컴퓨터 언어로 코드화된 코드(Code)를 포함할 수 있다. As described above, in order to execute the DLL rootkit detection method for hacking according to each embodiment of the present invention, the above-described program is coded in a computer language such as C, C ++, JAVA, or machine language, which can be read by a computer processor (CPU). Code may be included.

이러한 코드는 전술한 기능들을 정의한 함수 등과 관련된 기능적인 코드(Function Code)를 포함할 수 있고, 전술한 기능들을 컴퓨터의 프로세서가 소정의 절차대로 실행시키는데 필요한 실행 절차 관련 제어 코드를 포함할 수도 있다. The code may include a function code related to a function or the like that defines the functions described above and may include an execution procedure related control code necessary for the processor of the computer to execute the functions described above according to a predetermined procedure.

또한, 이러한 코드는 전술한 기능들을 컴퓨터의 프로세서가 실행시키는데 필요한 추가 정보나 미디어가 컴퓨터의 내부 또는 외부 메모리의 어느 위치(주소 번지)에서 참조 되어야 하는지에 대한 메모리 참조 관련 코드를 더 포함할 수 있다. In addition, such code may further include memory reference related code as to what additional information or media needed to cause the processor of the computer to execute the aforementioned functions should be referenced at any location (address) of the internal or external memory of the computer .

또한, 컴퓨터의 프로세서가 전술한 기능들을 실행시키기 위하여 원격(Remote)에 있는 어떠한 다른 컴퓨터나 서버 등과 통신이 필요한 경우, 코드는 컴퓨터의 프로세서가 컴퓨터의 통신 모듈(예: 유선 및/또는 무선 통신 모듈)을 이용하여 원격(Remote)에 있는 어떠한 다른 컴퓨터나 서버 등과 어떻게 통신해야만 하는지, 통신 시 어떠한 정보나 미디어를 송수신해야 하는지 등에 대한 통신 관련 코드를 더 포함할 수도 있다. In addition, when a processor of a computer needs to communicate with any other computer or server, etc., to perform the above-described functions, the code may be stored in a computer's communication module (e.g., a wired and / ) May be used to further include communication related codes such as how to communicate with any other computer or server in the remote, and what information or media should be transmitted or received during communication.

그리고, 본 발명을 구현하기 위한 기능적인(Functional) 프로그램과 이와 관련된 코드 및 코드 세그먼트 등은, 기록매체를 읽어서 프로그램을 실행시키는 컴퓨터의 시스템 환경 등을 고려하여, 본 발명이 속하는 기술분야의 프로그래머들에 의해 용이하게 추론되거나 변경될 수도 있다.The functional program for implementing the present invention and the related code and code segment may be implemented by programmers of the technical field of the present invention in consideration of the system environment of the computer that reads the recording medium and executes the program, Or may be easily modified or modified by the user.

이상에서 전술한 바와 같은 프로그램을 기록한 컴퓨터로 읽힐 수 있는 기록매체는, 일 예로, ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광 미디어 저장장치 등이 있다. Examples of the computer-readable recording medium on which the above-described program is recorded include ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical media storage, and the like.

또한 전술한 바와 같은 프로그램을 기록한 컴퓨터로 읽힐 수 있는 기록매체는 네트워크로 커넥션된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 이 경우, 다수의 분산된 컴퓨터 중 어느 적어도 하나의 컴퓨터는 상기에 제시된 기능들 중 일부를 실행하고, 그 결과를 다른 분산된 컴퓨터들 중 적어도 하나에 그 실행 결과를 전송할 수 있으며, 그 결과를 전송 받은 컴퓨터 역시 상기에 제시된 기능들 중 일부를 실행하여, 그 결과를 역시 다른 분산된 컴퓨터들에 제공할 수 있다.Also, the computer-readable recording medium on which the above-described program is recorded may be distributed to a computer system connected via a network so that computer-readable codes can be stored and executed in a distributed manner. In this case, any of at least one of the plurality of distributed computers may execute some of the functions presented above and transmit the result of the execution to at least one of the other distributed computers, and transmit the result The receiving computer may also perform some of the functions described above and provide the results to other distributed computers as well.

특히, 본 발명의 각 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법을 실행시키기 위한 프로그램인 애플리케이션을 기록한 컴퓨터로 읽을 수 있는 기록매체는, 애플리케이션 스토어 서버(Application Store Server), 애플리케이션 또는 해당 서비스와 관련된 웹 서버 등의 애플리케이션 제공 서버(Application Provider Server)에 포함된 저장매체(예: 하드디스크 등)이거나, 애플리케이션 제공 서버 그 자체일 수도 있다.In particular, a computer-readable recording medium that records an application that is a program for executing a DLL rootkit detection method for hacking according to each embodiment of the present invention may be associated with an application store server, an application, or a corresponding service. It may be a storage medium (eg, a hard disk, etc.) included in an application provider server such as a web server or the application providing server itself.

본 발명의 각 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법을 실행시키기 위한 프로그램인 애플리케이션을 기록한 기록매체를 읽을 수 있는 컴퓨터는, 일반적인 데스크 탑이나 노트북 등의 일반 PC 뿐만 아니라, 스마트 폰, 태블릿 PC, PDA(Personal Digital Assistants) 및 이동통신 단말기 등의 모바일 단말기를 포함할 수 있으며, 이뿐만 아니라, 컴퓨팅(Computing) 가능한 모든 기기로 해석되어야 할 것이다. A computer capable of reading a recording medium recording an application which is a program for executing a DLL rootkit detection method for hacking according to each embodiment of the present invention is not only a general PC such as a general desktop or a laptop, but also a smart phone or a tablet PC. It may include mobile terminals, such as PDA (Personal Digital Assistants) and mobile communication terminal, as well as to be interpreted as all computing devices (Computing).

또한, 본 발명의 실시예에 따른 해킹을 위한 DLL 루트킷 감지 방법을 실행시키기 위한 프로그램인 애플리케이션을 기록한 기록매체를 읽을 수 있는 컴퓨터가 스마트 폰, 태블릿 PC, PDA(Personal Digital Assistants) 및 이동통신 단말기 등의 모바일 단말기인 경우, 애플리케이션은 애플리케이션 제공 서버에서 일반 PC로 다운로드 되어 동기화 프로그램을 통해 모바일 단말기에 설치될 수도 있다.In addition, a computer capable of reading a recording medium recording an application which is a program for executing a DLL rootkit detection method for hacking according to an embodiment of the present invention is a smart phone, a tablet PC, a personal digital assistant (PDA), a mobile communication terminal, or the like. In the case of a mobile terminal, the application may be downloaded from the application providing server to a general PC and installed on the mobile terminal through a synchronization program.

이상에서, 본 발명의 실시예를 구성하는 모든 구성 요소들이 하나로 결합되거나 결합되어 동작하는 것으로 설명되었다고 해서, 본 발명이 반드시 이러한 실시예에 한정되는 것은 아니다. 즉, 본 발명의 목적 범위 안에서라면, 그 모든 구성 요소들이 적어도 하나로 선택적으로 결합하여 동작할 수도 있다. 또한, 그 모든 구성 요소들이 각각 하나의 독립적인 하드웨어로 구현될 수 있지만, 각 구성 요소들의 그 일부 또는 전부가 선택적으로 조합되어 하나 또는 복수 개의 하드웨어에서 조합된 일부 또는 전부의 기능을 수행하는 프로그램 모듈을 갖는 컴퓨터 프로그램으로서 구현될 수도 있다. 그 컴퓨터 프로그램을 구성하는 코드들 및 코드 세그먼트들은 본 발명의 기술 분야의 당업자에 의해 용이하게 추론될 수 있을 것이다. 이러한 컴퓨터 프로그램은 컴퓨터가 읽을 수 있는 저장매체(Computer Readable Media)에 저장되어 컴퓨터에 의하여 읽혀지고 실행됨으로써, 본 발명의 실시예를 구현할 수 있다. 컴퓨터 프로그램의 저장매체로서는 자기 기록매체, 광 기록매체, 등이 포함될 수 있다.While the present invention has been described in connection with what is presently considered to be the most practical and preferred embodiments, it is to be understood that the invention is not limited to the disclosed embodiments. That is, within the scope of the present invention, all of the components may be selectively coupled to at least one. In addition, although all of the components may be implemented as one independent hardware, some or all of the components may be selectively combined to perform a part or all of the functions in one or a plurality of hardware. As shown in FIG. Codes and code segments constituting the computer program may be easily inferred by those skilled in the art. Such a computer program can be stored in a computer-readable storage medium, readable and executed by a computer, thereby realizing an embodiment of the present invention. As a storage medium of the computer program, a magnetic recording medium, an optical recording medium, or the like can be included.

또한, 이상에서 기재된 "포함하다", "구성하다" 또는 "가지다" 등의 용어는, 특별히 반대되는 기재가 없는 한, 해당 구성 요소가 내재될 수 있음을 의미하는 것이므로, 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것으로 해석되어야 한다. 기술적이거나 과학적인 용어를 포함한 모든 용어들은, 다르게 정의되지 않는 한, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 사전에 정의된 용어와 같이 일반적으로 사용되는 용어들은 관련 기술의 문맥 상의 의미와 일치하는 것으로 해석되어야 하며, 본 발명에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.It is also to be understood that the terms such as " comprises, "" comprising," or "having ", as used herein, mean that a component can be implanted unless specifically stated to the contrary. But should be construed as including other elements. All terms, including technical and scientific terms, have the same meaning as commonly understood by one of ordinary skill in the art to which this invention belongs, unless otherwise defined. Commonly used terms, such as predefined terms, should be interpreted to be consistent with the contextual meanings of the related art, and are not to be construed as ideal or overly formal, unless expressly defined to the contrary.

이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.The foregoing description is merely illustrative of the technical idea of the present invention, and various changes and modifications may be made by those skilled in the art without departing from the essential characteristics of the present invention. Therefore, the embodiments disclosed in the present invention are intended to illustrate rather than limit the scope of the present invention, and the scope of the technical idea of the present invention is not limited by these embodiments. The scope of protection of the present invention should be interpreted by the following claims, and all technical ideas within the scope equivalent thereto should be construed as being included in the scope of the present invention.

Claims (23)

DLL(Dynamic Linking Library, 동적 연결 라이브러리) 루트킷(Rootkit)을 감지하는 장치가,
사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 단계;
카운터로부터 수신한 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우,상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계;
상기 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계; 및
상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 단계;를 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
A device that detects a DLL (Dynamic Linking Library) rootkit,
Collecting the first DLL list as a list of DLLs determined to be running in the user terminal;
If reading of any one of memories corresponding to at least one DLL using the address variable value received from the counter succeeds, the code value of a predetermined area among the code values stored in the read memory is set to the preset first code; Determining whether or not a match;
If it is determined that a value of a predetermined region among the values stored in the read memory matches the preset first code, determining whether the DLL information corresponding to the read memory exists in the first DLL list. ; And
If it is determined that the DLL information corresponding to the read memory does not exist in the first DLL list, adding the DLL information corresponding to the read memory to the second DLL list as a list of DLLs for a rootkit; DLL rootkit detection method for hacking comprising a.
청구항 2은(는) 설정등록료 납부시 포기되었습니다.Claim 2 has been abandoned due to the setting registration fee. 제1항에 있어서,
상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는,
상기 카운터로부터 상기 주소 변수값을 수신하는 단계;
상기 수신한 주소 변수값을 메모리 실행 정보와 비교하여, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는지 여부를 판단하는 단계; 및
상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는 경우, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리를 상기 리딩된 메모리로 결정하는 단계;를 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
Determining whether or not matching with the first predetermined code,
Receiving the address variable value from the counter;
Comparing the received address variable value with memory execution information to determine whether a memory having the received address variable value as a memory address exists; And
And determining a memory having the received address variable value as a memory address as the read memory when the memory having the received address variable value as a memory address exists. Rootkit detection method.
제1항에 있어서,
상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계는,
상기 리딩된 메모리에 매칭되는 파일을 검색하는 단계; 및
상기 검색된 파일의 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계;를 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
Determining whether or not the first DLL list is present,
Searching for a file matching the read memory; And
Determining whether the DLL information of the searched file exists in the first DLL list.
제3항에 있어서,
상기 리딩된 메모리에 매칭되는 파일의 검색이 실패할 경우, 상기 리딩된 메모리에 대응하는 스레드(Thread)를 루트킷을 위한 스레드의 리스트로서 제1 스레드 리스트에 추가하는 단계;를 더 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 3,
And when a search for a file matching the read memory fails, adding a thread corresponding to the read memory to the first thread list as a list of threads for a rootkit. How to detect DLL rootkits for hacking.
제3항에 있어서,
상기 제2 DLL 리스트에 추가하는 단계는,
상기 검색된 파일의 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 경우, 상기 검색된 파일의 DLL 정보를 상기 제2 DLL 리스트에 추가하는 것을 특징으로 하는 해킹을 위한 DLL루트킷 감지 방법.
The method of claim 3,
Adding to the second DLL list,
The DLL rootkit detection method for hacking, if the DLL information of the searched file does not exist in the first DLL list, adds the DLL information of the searched file to the second DLL list.
제1항에 있어서,
상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는,
상기 리딩된 메모리에 저장된 코드값들 중, 상기 리딩된 메모리의 구조에 따라 헤더 영역으로 분류된 코드값이 상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
Determining whether or not matching with the first predetermined code,
Detecting a DLL rootkit for hacking, wherein among the code values stored in the read memory, it is determined whether a code value classified into a header area according to the structure of the read memory matches the predetermined first code. Way.
제6항에 있어서,
상기 기설정된 제1 코드는 실행 파일에 설정되는 헤더 코드값으로서 "MZ"인 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method according to claim 6,
The predetermined first code is "MZ" as a header code value set in an executable file.
청구항 8은(는) 설정등록료 납부시 포기되었습니다.Claim 8 was abandoned when the registration fee was paid. 제1항에 있어서,
상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는,
상기 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩을 시도하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
Determining whether or not matching with the first predetermined code,
When the value of the address variable is equal to or less than the predetermined threshold variable value, attempting to read any one of the memory corresponding to the at least one DLL using the address variable value, characterized in that How to detect DLL rootkits for hacking.
청구항 9은(는) 설정등록료 납부시 포기되었습니다.Claim 9 has been abandoned due to the setting registration fee. 제8항에 있어서,
상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계는,
상기 주소 변수값이 기설정된 임계 변수값보다 큰 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩 시도를 중단하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
9. The method of claim 8,
Determining whether or not matching with the first predetermined code,
Detecting a DLL rootkit for hacking, if the address variable value is larger than a predetermined threshold variable value, attempting to read any one of memories corresponding to the at least one DLL using the address variable value is stopped. Way.
청구항 10은(는) 설정등록료 납부시 포기되었습니다.Claim 10 has been abandoned due to the setting registration fee. 제1항에 있어서,
상기 제2 DLL 리스트에 추가하는 단계 후,
상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 단계;를 더 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
After adding to the second DLL list,
And updating the address variable value by adding a predetermined unit memory address change value to the address variable value stored in the counter.
청구항 11은(는) 설정등록료 납부시 포기되었습니다.Claim 11 was abandoned when the registration fee was paid. 제10항에 있어서,
상기 주소 변수값을 갱신하는 단계 후,
상기 갱신된 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 갱신된 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계를 반복 수행하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 10,
After updating the address variable value,
When the updated address variable value is equal to or smaller than a predetermined threshold variable value, when a reading of any one of memories corresponding to at least one DLL using the updated address variable value is successful, the And determining whether a code value of a predetermined region among the code values stored in the read memory coincides with the preset first code.
청구항 12은(는) 설정등록료 납부시 포기되었습니다.Claim 12 is abandoned in setting registration fee. 제1항에 있어서,
상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계 후,
상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는 것으로 판단되는 경우, 상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 단계; 및
상기 갱신된 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 갱신된 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계;를 더 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
After determining whether the DLL information corresponding to the read memory exists in the first DLL list,
If it is determined that DLL information corresponding to the read memory exists in the first DLL list, updating the address variable value by adding a preset unit memory address change value to the address variable value stored in the counter; And
When the updated address variable value is equal to or smaller than a predetermined threshold variable value, when a reading of any one of memories corresponding to at least one DLL using the updated address variable value is successful, the And determining whether a code value of a predetermined region among the code values stored in the read memory is identical to the preset first code.
청구항 13은(는) 설정등록료 납부시 포기되었습니다.Claim 13 has been abandoned due to the set registration fee. 제1항에 있어서,
상기 제1 DLL 리스트를 수집하는 단계는,
상기 사용자 단말의 운영체제에서 제공하는 공용 API 함수로서, 상기 사용자 단말에서 실행 중인 것으로 판단되는 DLL의 리스트를 추출하는 함수인 제1 함수를 이용하여 상기 제1 DLL 리스트를 수집하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법.
The method of claim 1,
Collecting the first DLL list,
Hacking, characterized in that the first API list provided by the operating system of the user terminal, the first DLL list is collected using a first function which is a function of extracting a list of DLLs determined to be running in the user terminal. To detect a DLL rootkit.
사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 리스트 수집부;
카운터로부터 수신한 주소 변수값을 이용하여 메모리의 리딩을 시도하는 메모리 리딩부;
상기 메모리 리딩부의 리딩이 성공하여, 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나가 리딩된 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하고, 상기 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 추출하는 파일 검색부; 및
상기 추출된 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하고, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 루트킷 리스트 관리부;를 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
A list collecting unit collecting the first DLL list as a list of DLLs determined to be running in the user terminal;
A memory reading unit for reading a memory by using an address variable value received from a counter;
When a reading of the memory reading unit is successful and any one of memories corresponding to at least one DLL is read, whether a code value of a predetermined region among the code values stored in the reading memory matches the predetermined first code A file search unit for determining whether to determine whether or not a value of a predetermined region among the values stored in the read memory matches a preset first code, the file search unit extracting DLL information corresponding to the read memory; And
It is determined whether the extracted DLL information exists in the first DLL list, and when it is determined that the DLL information corresponding to the read memory does not exist in the first DLL list, the extracted DLL information corresponds to the read memory. And a rootkit list manager for adding DLL information to the second DLL list as a list of DLLs for the rootkit.
청구항 15은(는) 설정등록료 납부시 포기되었습니다.Claim 15 is abandoned in the setting registration fee payment. 제14항에 있어서,
상기 메모리 리딩부는,
상기 카운터로부터 수신한 주소 변수값을 메모리 실행 정보와 비교하여, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리가 존재하는 경우, 상기 수신한 주소 변수값을 메모리 주소로 갖는 메모리를 상기 리딩된 메모리로 결정하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
15. The method of claim 14,
The memory reading unit,
Comparing the address variable value received from the counter with memory execution information, and if there is a memory having the received address variable value as a memory address, the read memory having the memory having the received address variable value as a memory address DLL rootkit detection device for hacking, characterized in that determined by.
청구항 16은(는) 설정등록료 납부시 포기되었습니다.Claim 16 has been abandoned due to the setting registration fee. 제14항에 있어서,
상기 파일 검색부는,
상기 리딩된 메모리에 매칭되는 파일을 검색하여 상기 리딩된 메모리에 매칭되는 파일이 검색되었는지 여부를 판단하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
15. The method of claim 14,
The file search unit,
And detecting a file matching the read memory to determine whether a file matching the read memory is found.
청구항 17은(는) 설정등록료 납부시 포기되었습니다.Claim 17 has been abandoned due to the setting registration fee. 제16항에 있어서,
상기 루트킷 리스트 관리부는,
상기 리딩된 메모리에 매칭되는 파일의 검색이 실패할 경우, 상기 리딩된 메모리에 대응하는 스레드(Thread)를 루트킷을 위한 스레드의 리스트로서 제1 스레드 리스트에 추가하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
17. The method of claim 16,
The rootkit list management unit,
If a search for a file matching the read memory fails, a DLL rootkit for hacking is added to the first thread list as a thread list corresponding to the read memory as a list of threads for the rootkit. Sensing device.
청구항 18은(는) 설정등록료 납부시 포기되었습니다.Claim 18 has been abandoned due to the setting registration fee. 제14항에 있어서,
상기 파일 검색부는,
상기 리딩된 메모리에 저장된 코드값들 중, 상기 리딩된 메모리의 구조에 따라 헤더 영역으로 분류된 코드값이 상기 기설정된 제1 코드와 일치하는지 여부를 판단하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
15. The method of claim 14,
The file search unit,
Detecting a DLL rootkit for hacking among the code values stored in the read memory determines whether a code value classified into a header area according to the structure of the read memory matches the predetermined first code. Device.
청구항 19은(는) 설정등록료 납부시 포기되었습니다.Claim 19 is abandoned in setting registration fee. 제18항에 있어서,
상기 기설정된 제1 코드는 실행 파일에 설정되는 헤더 코드값으로서 "MZ"인 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
19. The method of claim 18,
The predetermined first code is a DLL rootkit detection device for hacking, characterized in that "MZ" as a header code value set in an executable file.
청구항 20은(는) 설정등록료 납부시 포기되었습니다.Claim 20 has been abandoned due to the setting registration fee. 제14항에 있어서,
상기 메모리 리딩부는,
상기 주소 변수값이 기설정된 임계 변수값과 같거나 상기 임계 변수값보다 작은 경우, 상기 주소 변수값을 이용하여 상기 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나에 대한 리딩을 시도하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
15. The method of claim 14,
The memory reading unit,
When the value of the address variable is equal to or less than the predetermined threshold variable value, attempting to read any one of the memory corresponding to the at least one DLL using the address variable value, characterized in that DLL rootkit detection device for hacking.
청구항 21은(는) 설정등록료 납부시 포기되었습니다.Claim 21 has been abandoned due to the setting registration fee. 제14항에 있어서,
상기 카운터는,
상기 루트킷 리스트 관리부에서 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하거나, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는 것으로 판단된 후, 상기 카운터에 저장된 상기 주소 변수값에 기설정된 단위 메모리 주소 변동값을 더하여 상기 주소 변수값을 갱신하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
15. The method of claim 14,
The above-
The rootkit list manager adds the DLL information corresponding to the read memory to the second DLL list as a list of DLLs for the rootkit, or determines that the DLL information corresponding to the read memory exists in the first DLL list. And updating the address variable value by adding a predetermined unit memory address change value to the address variable value stored in the counter.
청구항 22은(는) 설정등록료 납부시 포기되었습니다.Claim 22 is abandoned in setting registration fee. 제21항에 있어서,
상기 메모리 리딩부는,
상기 갱신된 주소 변수값을 이용하여 반복하여 상기 메모리의 리딩을 시도하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 장치.
22. The method of claim 21,
The memory reading unit,
And attempting to read the memory repeatedly by using the updated address variable value.
DLL(Dynamic Linking Library, 동적 연결 라이브러리) 루트킷(Rootkit)을 감지하는 장치가,
사용자 단말에서 실행 중인 것으로 판단되는 DLL들의 리스트로서 제1 DLL 리스트를 수집하는 단계;
카운터로부터 수신한 주소 변수값을 이용한 적어도 하나의 DLL에 대응하는 메모리 중 어느 하나의 리딩이 성공하는 경우, 상기 리딩된 메모리에 저장된 코드값들 중 기설정된 영역의 코드값이 기설정된 제1 코드와 일치하는지 여부를 판단하는 단계;
상기 리딩된 메모리에 저장된 값들 중 기설정된 영역의 값이 기설정된 제1 코드와 일치하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 존재하는지 여부를 판단하는 단계; 및
상기 리딩된 메모리에 대응하는 DLL 정보가 상기 제1 DLL 리스트에 미존재하는 것으로 판단되는 경우, 상기 리딩된 메모리에 대응하는 DLL 정보를 루트킷을 위한 DLL들의 리스트로서 제2 DLL 리스트에 추가하는 단계;를 포함하는 것을 특징으로 하는 해킹을 위한 DLL 루트킷 감지 방법을 구현하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체.
A device that detects a DLL (Dynamic Linking Library) rootkit,
Collecting the first DLL list as a list of DLLs determined to be running in the user terminal;
When a reading of any one of memories corresponding to at least one DLL using the address variable value received from the counter succeeds, the code value of a predetermined area among the code values stored in the read memory is set to the preset first code. Determining whether or not a match;
If it is determined that a value of a predetermined region among the values stored in the read memory matches the preset first code, determining whether the DLL information corresponding to the read memory exists in the first DLL list. ; And
If it is determined that the DLL information corresponding to the read memory does not exist in the first DLL list, adding the DLL information corresponding to the read memory to the second DLL list as a list of DLLs for a rootkit; A computer-readable recording medium having recorded thereon a program for implementing a method for detecting a DLL rootkit for hacking comprising a.
KR1020120126483A 2012-11-09 2012-11-09 Method and apparatus for detecting dll rootkit for hacking Active KR101366544B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020120126483A KR101366544B1 (en) 2012-11-09 2012-11-09 Method and apparatus for detecting dll rootkit for hacking

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020120126483A KR101366544B1 (en) 2012-11-09 2012-11-09 Method and apparatus for detecting dll rootkit for hacking

Publications (1)

Publication Number Publication Date
KR101366544B1 true KR101366544B1 (en) 2014-02-26

Family

ID=50271788

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020120126483A Active KR101366544B1 (en) 2012-11-09 2012-11-09 Method and apparatus for detecting dll rootkit for hacking

Country Status (1)

Country Link
KR (1) KR101366544B1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101688632B1 (en) * 2015-07-31 2016-12-22 한국전자통신연구원 Method and apparatus for detecting loading of library

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010032465A (en) * 1997-11-26 2001-04-25 쥴리 와이. 마-스피놀라 Secure memory having anti-wire tapping
KR20070076935A (en) * 2006-01-20 2007-07-25 엔에이치엔(주) Hidden process monitoring method and monitoring system
KR20120014673A (en) * 2010-08-10 2012-02-20 주식회사 잉카인터넷 Process Modulation Detection Method by Insertion of Stomach Dynamic Link Library

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010032465A (en) * 1997-11-26 2001-04-25 쥴리 와이. 마-스피놀라 Secure memory having anti-wire tapping
KR20070076935A (en) * 2006-01-20 2007-07-25 엔에이치엔(주) Hidden process monitoring method and monitoring system
KR20120014673A (en) * 2010-08-10 2012-02-20 주식회사 잉카인터넷 Process Modulation Detection Method by Insertion of Stomach Dynamic Link Library

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101688632B1 (en) * 2015-07-31 2016-12-22 한국전자통신연구원 Method and apparatus for detecting loading of library

Similar Documents

Publication Publication Date Title
CN109831419B (en) Method and device for determining shell program authority
US10528735B2 (en) Malicious code protection for computer systems based on process modification
CN103886252B (en) Software Code Malicious Selection Evaluation Executed In Trusted Process Address Space
US10284591B2 (en) Detecting and preventing execution of software exploits
CN110059477B (en) Attack detection method and device
EP2653994B1 (en) Information security techniques including detection, interdiction and/or mitigation of memory injection attacks
JP5976020B2 (en) System and method for performing anti-malware metadata lookup
US9525706B2 (en) Apparatus and method for diagnosing malicious applications
US9135443B2 (en) Identifying malicious threads
KR101899589B1 (en) System and method for authentication about safety software
US20160232374A1 (en) Permission control method and apparatus
CN106709325B (en) Method and device for monitoring program
CN109471697B (en) Method, device and storage medium for monitoring system call in virtual machine
CN101976209A (en) Adapting configuration for incompatible application programs
EP2680138A1 (en) Dynamic rule management for kernel mode filter drivers
US7797702B1 (en) Preventing execution of remotely injected threads
CN111666567A (en) Detection method, device, computer program and medium for malicious modification of application program
US9842018B2 (en) Method of verifying integrity of program using hash
CN104573495B (en) A kind for the treatment of method and apparatus of startup item
KR101366544B1 (en) Method and apparatus for detecting dll rootkit for hacking
US20220198013A1 (en) Detecting suspicious activation of an application in a computer device
CN106203148B (en) Unauthorized data access blocking method and computing device with unauthorized data access blocking function
EP2854065B1 (en) A system and method for evaluating malware detection rules
KR101582420B1 (en) Method and apparatus for checking integrity of processing module
KR102820144B1 (en) Method and system for detecting malware using memory map

Legal Events

Date Code Title Description
A201 Request for examination
PA0109 Patent application

Patent event code: PA01091R01D

Comment text: Patent Application

Patent event date: 20121109

PA0201 Request for examination
E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20131120

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20140218

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20140218

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
FPAY Annual fee payment

Payment date: 20170206

Year of fee payment: 4

PR1001 Payment of annual fee

Payment date: 20170206

Start annual number: 4

End annual number: 4

FPAY Annual fee payment

Payment date: 20180205

Year of fee payment: 5

PR1001 Payment of annual fee

Payment date: 20180205

Start annual number: 5

End annual number: 5

FPAY Annual fee payment

Payment date: 20190131

Year of fee payment: 6

PR1001 Payment of annual fee

Payment date: 20190131

Start annual number: 6

End annual number: 6

FPAY Annual fee payment

Payment date: 20200106

Year of fee payment: 7

PR1001 Payment of annual fee

Payment date: 20200106

Start annual number: 7

End annual number: 7

PR1001 Payment of annual fee

Payment date: 20210113

Start annual number: 8

End annual number: 8

PR1001 Payment of annual fee

Payment date: 20220111

Start annual number: 9

End annual number: 9

PR1001 Payment of annual fee

Payment date: 20230127

Start annual number: 10

End annual number: 10

PR1001 Payment of annual fee

Payment date: 20240102

Start annual number: 11

End annual number: 11

PR1001 Payment of annual fee

Payment date: 20250108

Start annual number: 12

End annual number: 12