







본 발명은 악성코드를 탐지하는 시스템 및 그의 제어방법에 관한 것이다.The present invention relates to a system for detecting malicious codes and a control method thereof.
커널 레벨의 루트 킷은 운영체제의 무결성을 변조하여 시스템 전체에 영향을 미치는데 이 공격은 커널의 텍스트 영역에 있거나 데이터 영역에 있는 함수의 포인터를 변경시키는 KOH(Kernel Object Hooking), 로딩 된 커널 모듈이나 커널의 힙 영역(heap area)을 수정하는 공격인 DKOM(Dynamic Kernel Object Manipulation) 으로 분류한다. 이는 운영체제 자체를 공격하는 악성 코드이기 때문에 이로부터 시스템을 안전하게 보호해야 할 필요성이 대두되고 있다.The kernel-level rootkit modulates the integrity of the operating system and affects the entire system. This attack is based on Kernel Object Hooking (KOH), which changes the pointer of a function in the text area of the kernel or in the data area, It is classified as Dynamic Kernel Object Manipulation (DKOM), which is an attack that modifies the heap area of the kernel. Since it is a malicious code that attacks the operating system itself, there is a need to secure the system from this.
이에 따라 커널변조 공격을 막기 위한 대표적인 방법으로 프로그램의 정상적인 실행 흐름을 제한하여 의도하지 않는 방향으로 변조되는 것을 막는 CFI(Control Flow Integrity)가 각광 받고 있다.Therefore, CFI (Control Flow Integrity) is being popularized as a typical method for preventing kernel modulation attacks, which prevents the program from being modulated in an unintended direction by restricting normal execution flow.
이 방법은 높은 보안성을 제공하지만, 높은 성능 저하의 문제로 보안성을 낮춘 Coarse-grained CFI가 대안으로 제시되었다. 하지만 최근에 수행된 연구들을 통해 이러한 제어 흐름 정책 방식(Control flow policy)은 우회 가능하다는 것이 알려졌다.Although this method provides high security, it offers a coarse-grained CFI that reduces security because of its high performance degradation. However, recent studies have shown that this control flow policy can be bypassed.
한편, 또 다른 커널 무결성 보호 기법 연구로는 데이터 구조 불변량(data structure invariant)을 이용한 커널 무결성을 보장하는 기법이 있다. CFI 방식의 경우, 인스트럭션의 흐름에 대해 제어하는 반면, 불변량 방식(Invariant Type)의 경우, 데이터 구조(data structure)의 흐름에 대해 제어한다는 차이가 있다. SBCFI(State Based Control Flow Integrity), gibraltar 등이 불변량에 대한 대표적인 연구 사례이다.On the other hand, another study of kernel integrity protection technique is to guarantee kernel integrity using data structure invariant. In the case of the CFI scheme, there is a difference in controlling the flow of the data structure in the case of the invariant type while controlling the flow of the instruction. State Based Control Flow Integrity (SBCFI), and gibraltar are some examples of invariants.
이러한 불변량 방식은 CFI 방식에 비해 빠른 성능을 보이는 반면, 불변량 자체에 대한 정밀도가 보안성을 좌우한다. 하지만 실행 시에 그 타입이 결정되는 void 포인터나 union 타입의 구조체들 때문에 정확한 불변량을 추출하기에 어려움이 있고, 이로 인해 보안성이 침해 될 수 있다. 이를 해결하기 위해 Pointer(Points-To) Analysis를 프로그램 컴파일 시 중간언어 단계에서 적용하여 더욱 정확한 불변량을 추출할 수 있다.While this invariant scheme performs faster than the CFI scheme, the precision of the invariant itself determines the security. However, it is difficult to extract correct invariants due to void pointers or union type structures whose type is determined at runtime, which may compromise security. To solve this problem, Pointer (Points-To) Analysis can be applied at the intermediate language stage during program compilation to extract more accurate invariants.
본 발명의 기술적 과제는 성능 저하를 최소화하면서도 높은 보안성을 유지할 수 있는 악성코드 탐지 시스템을 제공하는 것이다.A technical problem of the present invention is to provide a malicious code detection system capable of maintaining high security while minimizing performance degradation.
또한, 본 발명의 목적은 악성코드 탐지를 위해 커널 자료구조의 불변량을 이용하는 경우, 불변량을 보다 정확하게 추출할 수 있는 악성코드 탐지 시스템을 제공하는 것이다.It is also an object of the present invention to provide a malicious code detection system that can more accurately extract invariants when invariants of kernel data structures are used for malicious code detection.
본 특허에서는 정상 호스트 시스템 모델링을 위해 커널 자료 구조에 대한 ㅂ불변량을 추출하고, 이 값이 정상 호스트 시스템의 경우 어떤 값이나 범위를 가지는지 프로파일링 하여 시스템의 정상적인 실행을 강제할 수 있는 프레임 워크를 제안한다.In this patent, a framework for extracting the invariants of the kernel data structure for normal host system modeling and forcing the normal execution of the system by profiling the value or range of the normal host system I suggest.
기존의 CFI 방식이 가지는 성능 저하 문제를 해결함과 동시에 높은 보안성을 유지하기 위하여 불변량을 추출하는 불변량 방식에 points-to analysis 방식을 적용하여 커널의 자료구조체에 대한 정밀도가 높은 불변량을 추출하고, 이를 가상머신 모니터링(Virtual Machine Monitor, VMM)를 통하여 강제함으로써 루트킷의 위험으로부터 시스템을 보호한다.In order to solve the performance degradation problem of the existing CFI method and to maintain high security, a point-to-analysis method is applied to the invariant method for extracting the invariant, thereby extracting a highly accurate invariant for the data structure of the kernel, It protects the system from the risk of rootkits by forcing it through the Virtual Machine Monitor (VMM).
전체적인 흐름은 다음과 같다. 커널 자료구조의 불변량을 추출하기 위해, 먼저, 가상머신 내부분석(Virtual Machine Introspection, VMI)를 통해서 대상 호스트의 커널 스냅샷(Kernel Snapshot)를 추출한다. 이 스냅샷을 구성하는 커널의 자료구조를 추출하기 위해 루트 심볼로부터 다른 자료구조체들을 계속해서 따라가며 값을 조사하게 된다.The overall flow is as follows. In order to extract the invariant of the kernel data structure, first, a kernel snapshot of the target host is extracted through a virtual machine introspection (VMI). In order to extract the data structure of the kernel that makes up this snapshot, we continue to examine the values from the root symbol along with other data structures.
이 때, 필요한 정보가 커널 데이터 정의이다. 단순히 커널 소스코드 정적 분석을 통해서 커널 데이터 정의를 추출하게 된다면, void 포인터, 배열 같은 타입의 데이터는 어떤 타입의 데이터를 가지는지 파악할 수 없기 때문에, 정확한 트레이스 할 수 없게 된다. 따라서 우리는 generic 포인터가 가질 수 있는 후보군 리스트를 추출하고, 나아가 자료구조체에 대한 타입 모호성을 해결한다. 그 후, 각 자료구조의 value 값들에 대한 불변량을 추출한다.At this time, the necessary information is the kernel data definition. If you simply extract kernel data definitions through kernel source code static analysis, you will not be able to trace exactly what type of data you have, such as void pointers and arrays, because you can not figure out what type of data it has. So we extract the candidate list that the generic pointer can have, and resolve the type ambiguity about the data structure. Then, invariants for the value values of each data structure are extracted.
VMI와 호스트 운영체제의 도움을 받아 게스트 운영체제의 커널의 메모리를 분석하여, 추출된 복수의 불변량이 정상 범위 내에 존재하는지를 확인함으로써 운영체제가 루트킷으로부터 공격을 당했는지 여부를 알 수 있다.With the help of the VMI and the host operating system, the memory of the guest operating system's kernel can be analyzed to determine whether the operating system is attacked from the rootkit by verifying that the extracted multiple invariants are within the normal range.
본 발명에서 제시하는 프레임 워크를 통해, 시스템을 공격하는 루트킷을 기존의 방법들 보다 빠르고 정밀하게 탐지해 낼 수 있다.Through the framework proposed in the present invention, the rootkit attacking the system can be detected more quickly and precisely than the conventional methods.
또한, 가상머신 모니터링(VMM) 기능을 사용하여 불변량을 추출하고 강제하는 방식을 사용했기 때문에, 개인 사용자의 PC에 대한 보안성뿐 아니라, 최근 들어 많이 사용되고 있는 클라우드 환경에서의 각 운영체제에 대한 보안성을 높이는 효과가 도출된다.In addition, since the method of extracting and enforcing invariants by using the virtual machine monitoring (VMM) function is used, not only the security for the personal user's PC but also the security for each operating system in the recently used cloud environment Is increased.
도 1은 본 명세서의 실시 예에 따른 본 발명의 악성행위 탐지 시스템 구성요소를 나타내는 개념도.
도 2a는 도 1에서 도시된 자료구조 추출모듈(Data Structure Extrator)에 대해 보다 상세한 구성요소를 나타내는 개념도.
도 2b는 도 2a에 도시된 자료구조 추출모듈의 자료구조(Data Structure)와 관련된 일 실시예를 나타내는 개념도.
도 3은 도 1에서 도시된 불변량 생성모듈(Invariant Generator)에 대해 보다 상세한 구성요소를 나타내는 개념도.
도 4는 불변량 생성모듈에 탑재된 불변량 생성 프로그램의 일 실시예와 관련된 코드를 나타내는 개념도.
도 5는 도 4에 도시된 불변량 생성 프로그램의 실행 결과로 생성되는 불변량의 일 실시예를 나타내는 개념도.
도 6은 도 1에서 도시된 모니터링 모듈(Monitor)에 대해 보다 상세한 구성요소를 나타내는 개념도.
도 7은 모니터링 모듈의 제어방법과 관련된 일 실시예를 나타내는 개념도.1 is a conceptual diagram illustrating a malicious behavior detection system component of the present invention according to an embodiment of the present invention;
 FIG. 2A is a conceptual diagram showing more detailed components of the data structure extracting module (Data Structure Extrator) shown in FIG. 1; FIG.
 FIG. 2B is a conceptual diagram illustrating an embodiment related to a data structure of the data structure extraction module shown in FIG. 2A. FIG.
 3 is a conceptual diagram showing more detailed components for the Invariant Generator shown in FIG.
 4 is a conceptual diagram showing codes associated with an embodiment of a invariant generation program installed in the invariant generation module;
 5 is a conceptual diagram showing an embodiment of invariants generated as a result of execution of the invariant generation program shown in Fig.
 6 is a conceptual diagram showing more detailed components for the monitoring module (Monitor) shown in Fig.
 7 is a conceptual diagram showing an embodiment related to a control method of a monitoring module;
이하, 첨부된 도면을 참조하여 본 명세서에 개시된 실시 예를 상세히 설명하되, 본 명세서에서 사용되는 기술적 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로, 본 명세서에 개시된 기술의 사상을 한정하려는 의도가 아님을 유의해야 한다. 또한, 본 명세서에서 사용되는 기술적 용어는 본 명세서에서 특별히 다른 의미로 정의되지 않는 한, 본 명세서에 개시된 기술이 속하는 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 의미로 해석되어야 하며, 과도하게 포괄적인 의미로 해석되거나, 과도하게 축소된 의미로 해석되지 않아야 한다. 또한, 본 명세서에서 사용되는 기술적인 용어가 본 명세서에 개시된 기술의 사상을 정확하게 표현하지 못하는 잘못된 기술적 용어일 때에는, 당업자가 올바르게 이해할 수 있는 기술적 용어로 대체되어 이해되어야 할 것이다. 또한, 본 명세서에서 사용되는 일반적인 용어는 사전에 정의되어 있는 바에 따라, 또는 전후 문맥상에 따라 해석되어야 하며, 과도하게 축소된 의미로 해석되지 않아야 한다.DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS Reference will now be made in detail to the embodiments of the present invention, examples of which are illustrated in the accompanying drawings, wherein like reference numerals refer to the like elements throughout. . Also, the technical terms used herein should be interpreted as being generally understood by those skilled in the art to which the presently disclosed subject matter belongs, unless the context clearly dictates otherwise in this specification, Should not be construed in a broader sense, or interpreted in an oversimplified sense. In addition, when a technical term used in this specification is an erroneous technical term that does not accurately express the concept of the technology disclosed in this specification, it should be understood that technical terms which can be understood by a person skilled in the art are replaced. Also, the general terms used in the present specification should be interpreted in accordance with the predefined or prior context, and should not be construed as being excessively reduced in meaning.
또한, 본 명세서에서 사용되는 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "구성된다" 또는 "포함한다" 등의 용어는 명세서상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다. 이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈" 및 "부"는 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다.Also, the singular forms "as used herein include plural referents unless the context clearly dictates otherwise. In this specification, the terms "comprising ", or" comprising "and the like should not be construed as necessarily including the various elements or steps described in the specification, Or may be further comprised of additional components or steps. The suffix "module" and " part "for the components used in the following description are given or mixed in consideration of ease of specification, and do not have their own meaning or role.
또한, 본 명세서에서 사용되는 제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성요소는 제2 구성 요소로 명명될 수 있고, 유사하게 제2 구성 요소도 제1 구성 요소로 명명될 수 있다.Furthermore, terms including ordinals such as first, second, etc. used in this specification can be used to describe various elements, but the elements should not be limited by the terms. The terms are used only for the purpose of distinguishing one component from another. For example, without departing from the scope of the present invention, the first component may be referred to as a second component, and similarly, the second component may also be referred to as a first component.
또한, 첨부된 도면을 참조하여 본 명세서에 개시된 실시 예들을 상세히 설명하되, 도면 부호에 관계없이 동일하거나 유사한 구성 요소는 동일한 참조 번호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.BRIEF DESCRIPTION OF THE DRAWINGS The above and other objects, features and advantages of the present invention will be more apparent from the following detailed description taken in conjunction with the accompanying drawings, in which: FIG.
또한, 본 명세서에 개시된 기술을 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 기술의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다. 또한, 첨부된 도면은 본 명세서에 개시된 기술의 사상을 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 그 기술의 사상이 제한되는 것으로 해석되어서는 아니 됨을 유의해야 한다.Further, in the description of the technology disclosed in this specification, a detailed description of related arts will be omitted if it is determined that the gist of the technology disclosed in this specification may be obscured. It is to be noted that the attached drawings are only for the purpose of easily understanding the concept of the technology disclosed in the present specification, and should not be construed as limiting the spirit of the technology by the attached drawings.
이하 첨부되는 도면을 참조하여 본 발명에 따른 바람직한 실시 예를 상세히 설명하기로 한다.Hereinafter, preferred embodiments of the present invention will be described in detail with reference to the accompanying drawings.
이하의 도 1에서는 본 발명의 악성행위 탐지 시스템에 포함된 구성요소가 설명된다.DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS In the following FIG. 1, components included in the malicious behavior detection system of the present invention will be described.
도 1에 도시된 것과 같이, 본 발명에 따른 악성행위 탐지 시스템은 정상 호스트를 감시하기 위해 커널 자료 구조에 대한 불변량(invariant)을 추출할 수 있다. 아울러, 악성행위 탐지 시스템은, 정상 호스트 시스템의 커널 자료 구조에서 추출된 불변량 값과, 위와 같이 추출된 불변량을 비교하기 위해, 정상 호스트 시스템에 대해 프로파일링(Profiling)을 수행할 수 있다.As shown in FIG. 1, the malicious behavior detection system according to the present invention can extract an invariant to a kernel data structure to monitor a normal host. In addition, the malicious behavior detection system can perform a profiling on the normal host system to compare the invariant value extracted from the kernel data structure of the normal host system with the invariant extracted as above.
도 1을 참조하면, 본 발명에 따른 악성행위 탐지 시스템은 학습(learning)을 수행하는 구성요소와, 모니터링(monitoring)을 수행하는 구성요소를 포함할 수 있다.Referring to FIG. 1, the malicious behavior detection system according to the present invention may include a component that performs learning and a component that performs monitoring.
학습(learning)을 수행하는 구성요소는, 모니터링에 필요한 불변량(invariant)들을 추출 또는 산출할 수 있다. 상기 학습(learning)을 수행하는 구성요소는 자료구조 추출모듈(Data Structure Extractor), 불변량 생성모듈(Invariant Generator)을 포함할 수 있다.The components performing learning can extract or calculate the invariants required for monitoring. The components that perform the learning may include a data structure extractor module and an invariant generator module.
자료구조 추출모듈(Data Structure Extractor)은, 불변량 생성모듈(Invariant Generator)에서 불변량(Invariant) 추출하기 위해 필요한 자료구조 그래프(Data Structure Graph, DSG)와 관련된 정보를 생성할 수 있다.The Data Structure Extractor can generate information related to the Data Structure Graph (DSG) required to extract Invariant from the Invariant Generator module.
불변량 생성모듈은 실제로 시스템의 모니터링 시 필요한, 불변량과 관련된 정보를 생성할 수 있다.The invariant generation module can generate information related to the invariant, which is actually required in monitoring the system.
불변량 생성모듈에서 생성된 불변량과 관련된 정보에 근거하여, 모니터링을 수행하는 구성요소에서, 시스템에 사용되는 커널 자료구조들이 Invariant 값을 위반하는지를 기준으로 하여 정상 호스트의 무결성을 검증한다.Based on the information related to the invariant generated by the invariant generation module, the component performing the monitoring verifies the integrity of the normal host based on whether the kernel data structures used in the system violate the invariant value.
악성행위 탐지 시스템의 전체적은 흐름은 다음과 같다.The overall flow of the malicious behavior detection system is as follows.
먼저, 시스템에서 사용되는 커널 자료구조들의 불변량을 생성하기 위해, 필요한 자료구조 그래프(DSG)와 커널 스냅샷(Kernel Snapshot)이 추출될 수 있다.First, the necessary data structure graph (DSG) and kernel snapshot can be extracted to generate invariants of the kernel data structures used in the system.
구체적으로 VMI(Virtual Machine Introspection)를 통해서 대상 호스트의 메모리를 덤프하여 커널 스냅샷을 추출할 수 있으며, System.map 파일 정보를 추출할 수 있다.Specifically, it can extract the kernel snapshot by dumping the memory of the target host through VMI (Virtual Machine Introspection), and extract the System.map file information.
이 경우, 커널 스냅샷을 분석하여 커널의 자료구조들을 추출하여야 하는데, 각 자료구조들의 위치를 찾기 위해 자료구조 그래프(DSG)를 이용하여 루트 심볼(Root Symbol)부터 트래버싱(traversing)하여 커널 자료구조들의 값을 추출하게 된다.In this case, the data structure of the kernel should be extracted by analyzing the kernel snapshot. In order to find the location of each data structure, tracing the root symbol from the root symbol (DSG) The values of the structures are extracted.
이 값들에 대한 정보를 트레이스(trace)라고 하며, 이 과정을 반복적으로 진행하여 정상 시스템에 대한 각 커널 자료구조들의 값에 대한 트레이스들을 복수개 추출한 뒤, 이를 바탕으로 각 자료구조에서 어떤 특정한 값을 가지는지 분석을 수행할 수 있다. 상기 분석 결과를 불변량이라 한다.Information about these values is referred to as a trace. This process is repeated to extract a plurality of traces of the value of each kernel data structure for a normal system. Based on this, Can be performed. The result of the analysis is called invariant.
모니터링을 수행하는 구성요소에서는 상기 생성된 자료구조 그래프, 불변량 및 커널 스냅샷을 이용하여, 시스템의 물리 메모리를 트래버싱하면서 각 자료구조로부터 추출된 불변량 값들이 미리 설정된 불변량 범위를 벗어나는지 확인할 수 있다. 이 때, 각 자료구조로부터 추출된 불변량 값들이, 미리 생성된 불변 범위를 벗어난다면, 시스템은 공격당했다고 판단될 수 있다.The monitoring component can check whether the invariant values extracted from each data structure are out of the preset invariant range by traversing the physical memory of the system using the generated data structure graph, invariant and kernel snapshot . At this time, if the invariant values extracted from each data structure deviate from the previously generated invariance range, it can be judged that the system has been attacked.
이하의 도 2a에서는 도 1에서 도시된 자료구조 추출모듈(Data Structure Extrator)에 대해, 보다 상세한 구성요소가 설명된다.In the following FIG. 2A, more detailed components will be described with respect to the data structure extracting module (Data Structure Extrator) shown in FIG.
도 2a에 도시된 것과 같이, 자료구조 추출모듈(Data Structure Extrator)은 대상 커널의 물리 메모리 덤프를 분석할 수 있다. 자료구조 추출모듈(Data Structure Extrator)은 각 자료구조의 값들을 추출하여 자료구조 그래프(DSG)와 관련된 정보를 생성할 수 있다.As shown in FIG. 2A, a data structure extractor module can analyze a physical memory dump of the target kernel. The Data Structure Extractor can extract the values of each data structure and generate information related to the data structure graph (DSG).
구체적으로, 자료구조 추출모듈(Data Structure Extrator)은 커널의 소스코드에서 추출한 자료구조 정의(Data Structure Definition)와 관련된 정보, System.map 파일에서 추출한 루트 심볼(Root Symbols)의 주소 및 메모리를 덤프한 메모리 스냅샷(memory snapshot) 중 적어도 하나를 이용하여, 상기 자료구조 그래프와 관련된 정보를 생성할 수 있다.Specifically, the Data Structure Extractor contains information related to the data structure definition extracted from the source code of the kernel, the address of the root symbols extracted from the System.map file, At least one of a memory snapshot may be used to generate information related to the data structure graph.
일 실시예에서, 커널 내부의 자료구조들은 연결리스트의 형태로 구성되어 서로 상호참조가 가능하게 형성될 수 있다.In one embodiment, the data structures within the kernel may be formed in the form of a linked list and cross-referenced to each other.
또한, 커널 내부의 자료구조들은 이중연결 리스트나 트리같이, 형태는 복잡하고 다양하지만 궁극적으로 어떠한 고정된 출발점에서부터 모두 추적이 가능한 형태로 형성될 수 있다.In addition, data structures in the kernel can be formed in a complex and diverse form, such as a double linked list or tree, but ultimately in a form that can be traced from any fixed starting point.
이 경우, 커널 내부의 자료구조의 상기 고정된 출발점에 대한 정보는 루트 심볼(Root Symbols)로 정의될 수 있으며, 루트 심볼과 관련된 값들은 System.map 파일에서 추출할 수 있다.In this case, the information about the fixed starting point of the data structure inside the kernel can be defined as root symbols, and the values related to the root symbol can be extracted from the System.map file.
위와 같이, 추출된 루트 심볼과 물리 메모리 덤프를 이용하여 커널 자료구조를 트레이스하기 위해서는 커널 소스 코드에 정의된 커널 자료구조가 더 필요하다.As described above, in order to trace the kernel data structure using the extracted root symbol and physical memory dump, a kernel data structure defined in the kernel source code is further needed.
커널 자료구조들은 대부분 동적으로 생성되어 참조될 수 있게 포인터 변수의 형태로 형성될 수 있다.Most kernel data structures can be formed in the form of pointer variables that can be dynamically created and referenced.
즉, 특정 자료구조는 자신이 필요한 자료구조에 대한 포인터를 가지고 있으며, 상기 포인터에 포함된 주소 값을 바탕으로 메모리에서 자신이 참조하는 자료구조의 위치를 지시할 수 있다.That is, a specific data structure has a pointer to a data structure that it needs, and can indicate the location of a data structure that it refers to in memory based on the address value contained in the pointer.
따라서, 자료구조 추출모듈은 자료구조에 대한 정의에 근거하여, 각 자료구조 간의 참조 관계를 정의할 수 있으며, 이러한 참조 관계와 관련된 정보를 이용하여 자료구조 그래프와 관련된 정보를 생성할 수 있다.Therefore, the data structure extraction module can define the reference relation between each data structure based on the definition of the data structure, and can generate information related to the data structure graph using the information related to the reference relationship.
결국, 자료구조 추출모듈은 자료구조 그래프와, 상기 자료구조 그래프에서 가장 상위 자료구조인 루트 심볼에 대한 주소를 이용하여, 상기 자료구조 그래프에 포함된 모든 자료구조를 트레이스 할 수 있다.As a result, the data structure extraction module can trace all data structures included in the data structure graph using the data structure graph and the address of the root symbol, which is the uppermost data structure in the data structure graph.
예를 들면, 도 2b에 도시된 것과 같이, WRAP_DATA 자료구조는 List, Type, PData 타입의 필드를 포함하고, PData는 다시 TXT_DATA와 BIN_DATA 타입의 자료구조를 참조할 수 있다.For example, as shown in FIG. 2B, the WRAP_DATA data structure includes fields of List, Type, and PData types, and PData can refer to data structures of TXT_DATA and BIN_DATA types again.
즉, 자료구조 추출모듈은 자료구조 간의 관계와 관련된 정보를 이용하여, 루트 심볼로부터 커널 자료구조에 대한 트레이스를 생성할 수 있다.That is, the data structure extraction module can generate traces for the kernel data structure from the root symbol, using information related to the relationship between data structures.
도 2a를 참조하면, 자료구조 추출모듈은 자료구조 분석 단계와, 제너릭 포인터(Generic Pointer) 분석 단계를 수행할 수 있다.Referring to FIG. 2A, the data structure extraction module may perform a data structure analysis step and a generic pointer analysis step.
먼저, 자료구조 분석 단계에서, 자료구조 추출모듈은 커널 소스코드 분석을 수행하여, 자료구조 정의와 관련된 정보를 추출할 수 있다. 이로써, 자료구조 추출모듈은 기본적인 자료구조들에 대한 그래프인 자료구조 타입 그래프(Data Structure Type Graph)와 관련된 정보를 생성할 수 있다.First, at the data structure analysis stage, the data structure extraction module can perform kernel source code analysis to extract information related to the data structure definition. In this way, the data structure extraction module can generate information related to a data structure type graph, which is a graph of basic data structures.
자료구조 그래프(DSG)를 생성하기 위하여, 위와 같이 단순히 커널 소스코드에 있는 자료구조 정의만 추출하게 된다면, void 포인터, 배열 타입의 데이터는 어떤 타입의 데이터를 가지는지 파악할 수 없기 때문에, 정확한 트레이스 할 수 없는 문제점이 있다.In order to create a data structure graph (DSG), if you simply extract the data structure definition from the kernel source code as above, you can not determine what type of data the void pointer or array type data has, There is no problem.
따라서 본 발명의 자료구조 추출모듈은 제너릭 포인터와 관련된 후보군 리스트와 관련된 정보를 추출할 수 있다. 아울러, 자료구조 추출모듈은 제너릭 포인터 분석을 수행함으로써, 타입 모호성(Type Ambiguity)을 해결할 수 있다.Accordingly, the data structure extraction module of the present invention can extract information related to the candidate list related to the generic pointer. In addition, the data structure extraction module can solve the type ambiguity by performing a generic pointer analysis.
자료구조 추출모듈은 루트 심볼로부터 각각의 데이터 구조체들에 포함된 포인터 변수들을 따라 운영체제 커널 메모리를 트레버싱 할 수 있다. 이로써, 자료구조 추출모듈은 트레버싱 중에 도달할 수 있는 모든 데이터 구조체에 대한 값을 구해 자료구조 그래프(DSG)와 관련된 정보를 생성할 수 있다.The data structure extraction module can treble the operating system kernel memory according to the pointer variables included in the respective data structures from the root symbol. This enables the data structure extraction module to generate values related to data structure graphs (DSG) by obtaining values for all data structures that can be reached during treasure.
다만, 루트 심볼로부터 포인터 변수들을 참조할 때, 몇 가지 문제점이 있다.However, when referring to pointer variables from the root symbol, there are some problems.
먼저, 데이터 구조체의 멤버 변수의 포인터 타입이 void인 경우는 어떤 형태로 해당 변수가 사용되는지에 대한 정보를 메모리분석 만으로는 알아내기 힘들다는 문제점이 있다.First, when the pointer type of the member variable of the data structure is void, there is a problem that it is difficult to know information about the type of the variable used by the memory analysis alone.
즉, 루트 심볼로부터 포인터를 계속해서 트레버싱하면, void 포인터와 같은 포인터를 만날 수가 있는데, 이 포인터가 어떤 구조체의 타입으로 사용되는지에 대해 자료구조 추출모듈이 검출할 수 없기 때문에, 자료구조 추출모듈은 그 구조체의 멤버변수를 더 이상 참조할 수 없다.In other words, if the pointer is continuously trembed from the root symbol, the same pointer as the void pointer can be encountered. Since the data structure extraction module can not detect which structure type the pointer is used in, Can no longer refer to the member variable of the structure.
예를 들어, 구조체 A와 B가 존재하고, A에는 AA라고 하는 구조체 포인터가, B에는 BB라고 하는 구조체 포인터가 멤버변수로 존재하는 경우, void 포인터가 A 구조체로 타입 캐스팅 되어 사용될 경우, 자료구조 추출모듈은 A의 멤버변수인 AA로 트레버싱 하지만, B구조체로 타입 캐스팅 되어 사용될 경우, 자료구조 추출모듈은 B의 멤버변수인 BB를 트레버싱 할 수 있다.For example, if structures A and B are present, A is a structure pointer, AA is a structure pointer, BB is a member variable, and void pointer is type cast to A structure, The extraction module traverses AA, the member variable of A, but when used as a type B casting structure, the data structure extraction module can treble the BB, the member variable of B.
이때 AA와 BB는 각각 A와 B데이터 구조체 안에서 다른 오프셋(Offset)에 존재할 수 있고, 이러한 경우 자료구조 추출모듈은 잘못된 트레버싱을 수행할 수 있다.In this case, AA and BB may exist in different offsets within the A and B data structures, respectively, and in this case, the data structure extraction module can perform the wrong treasure.
이러한 문제점들 때문에 void 포인터가 나오면 이를 무시하거나, 이에 대해 가질 수 있는 타입의 범위가 정확히 판단되어야만, 자료구조 추출모듈이 추가적으로 데이터 구조체에 대한 트레버싱을 수행할 수 있으며, 더 많은 구조체에 대한 불변량을 획득할 수 있다.Because of these problems, the data structure extraction module can additionally perform treeviewing on the data structure, if the void pointer comes out, or if the range of the type that can be ignored is correctly determined, and the invariance to more structures Can be obtained.
이러한 문제점은 void 포인터뿐 아니라 union으로 선언된 멤버변수에 대해서도 동일하게 작용한다. 자료구조 추출모듈은 union으로 선언된 멤버변수의 메모리 값을 분석하는 것만으로는, 해당 멤버가 어떤 형태로 사용되고 있는지에 대해서 검출하기 어렵다.This problem applies not only to void pointers, but also to member variables declared as unions. The data structure extraction module is not able to detect what kind of member the member is used by simply analyzing the memory value of the member variable declared as union.
따라서, 앞서 제안한 방식만으로는 자료구조 추출모듈이 트레버싱 중 union으로 선언된 멤버변수를 포함하는 데이터 구조체에 도달한 경우에, 더 이상 포인터 변수들을 트레버싱하는 것이 불가능해 지고, 더 많은 데이터 구조체에 대해서 불변량과 관련된 정보를 생성하지 못하는 문제점이 있다.Therefore, if the data structure extraction module reaches the data structure including the member variable declared as union during treasing, it is impossible to further treasure the pointer variables, There is a problem that information related to the invariant can not be generated.
이 외에도 보호하고자 하는 운영체제가 리눅스인 경우, 운영체제의 특성상 메모리를 트레버싱하기 어렵게 만드는 구조체들이 존재한다.In addition, if the operating system you want to protect is Linux, there are structures that make it difficult to treble the memory due to the nature of the operating system.
예를 들어 리눅스 커널에서 사용하는 리스트 구조체의 경우는, 다음 구조체를 가리키는 next 포인터와 이전 구조체를 가리키는 prev 포인터의 데이터 타입이 리스트를 통해 관리하고자 하는 구조체의 타입으로 선언되어 있지 않다.For example, in the case of a list structure used in the Linux kernel, the data type of the next pointer to the next structure and the prev pointer to the previous structure are not declared as the type of the structure to be managed through the list.
즉, A라는 데이터 구조체를 리스트로 관리하고자 했을 때 next 포인터와 prev 포인터는, A의 포인터 타입으로 선언된 것이 아니라, LIST_ENTRY 포인터와 같이 제너럴한 타입으로 선언되어 사용된다. 이러한 형태 때문에, 자료구조 추출모듈은 데이터가 어떤 구조체인지 알 수가 없게 되고 추가적인 트레버싱이 어려운 문제가 발생한다.In other words, if you want to manage the data structure A as a list, the next and prev pointers are declared as generic types like LIST_ENTRY pointers instead of A pointer types. Due to this form, the data structure extraction module can not know the structure of the data and the problem of additional treasure is difficult.
이렇게 사전에 정확하게 명시되지 않은 포인터들의 타입을 알아내기 위해서, 자료구조 추출모듈은 제너릭 포인터 분석을 수행함으로써, 좀 더 많은 포인터들의 타입을 인식하며, 더 많은 불변량과 관련된 정보를 생성할 수 있다.In order to find out the types of pointers that are not precisely specified in advance, the data structure extraction module recognizes the types of more pointers by performing a generic pointer analysis and can generate more invariant related information.
자료구조 추출모듈에 포함된 제너릭 포인터 분석유닛은, 이전의 단계에서 추출된 자료구조 정의를 이용하여, 보다 완전한 타입 그래프를 생성할 수 있다.The generic pointer analysis unit included in the data structure extraction module can generate a more complete type graph using the data structure definition extracted in the previous step.
void 포인터, union 등과 같이 모호한 타입의 범용 포인터들이 존재하기 때문에, 앞의 단계만으론 모든 자료구조의 정의를 추출하여 타입에 대한 그래프를 만드는 것은 불가능하다. 이 단계에서는 각 자료구조에 범용 포인터들이 어떤 타입의 자료구조를 가질 수 있는지 소스코드 분석을 통해 가능한 리스트를 추출한다.Since there are ambiguous general-purpose pointers, such as void pointers, unions, etc., it is impossible to extract the definition of all data structures and create a graph of the type in the previous step. In this step, we extract a list of possible types of data structures for general purpose pointers in each data structure through source code analysis.
특히, 물리 메모리 분석을 통해 참조하는 자료구조에 대해 시그니처를 추출하는 것이 가능하다면, 어떤 자료구조를 참조하고 있는지 결정하여 정확한 트레이스를 추출하도록 도와준다.In particular, if it is possible to extract signatures for data structures referenced through physical memory analysis, it helps determine which data structures are referencing and extracts the correct traces.
이하의 도 3에서는 도 1에서 도시된 불변량 생성모듈(Invariant Generator)의 상세한 구성요소가 설명된다.In the following FIG. 3, detailed components of the Invariant Generator shown in FIG. 1 will be described.
도 3에 도시된 것과 같이, 불변량 생성모듈은 커널 덤프(Kernel Dump)에서 데이터를 추출하는 커널 데이터 추출유닛(Kernel Data Extractor)과, 추출된 데이터를 이용하여 불변량과 관련된 정보를 생성하는 불변량 생성유닛을 포함할 수 있다.As shown in FIG. 3, the invariant generation module includes a kernel data extractor for extracting data from a kernel dump, a invariant generation unit for generating information related to the invariant using the extracted data, . ≪ / RTI >
불변량 생성모듈은 자료구조 추출모듈에서 추출된 커널 자료구조 값에 머신러닝 기법을 적용하여, 불변량과 관련된 정보를 추출할 수 있다.The invariant generation module can extract information related to the invariant by applying a machine learning method to the kernel data structure values extracted from the data structure extraction module.
이 경우, 머신러닝 기법이란 컴퓨터가 학습할 수 있도록 하는 알고리즘을 의미한다. 즉, 불변량 생성모듈은 정상 호스트에 대한 커널 스냅샷(Kernel Snapshot)에 대해 학습한 뒤, 특정 호스트에 대해 정상/비정상 여부를 구분할 수 있도록 훈련할 수 있다.In this case, the machine learning technique refers to an algorithm that enables a computer to learn. In other words, the invariant generation module learns about kernel snapshots for normal hosts, and then trains them to distinguish whether they are normal or abnormal for a particular host.
예를 들어, 머신러닝기법은 다이콘(Daikon)이라는 불변량 생성 프로그램일 수 있다.For example, the machine learning technique may be a invariant generation program called Daikon.
불변량 생성모듈이 다이콘(Daikon) 프로그램을 이용하는 경우, 정상 호스트에 대한 커널 스냅샷에 대해 학습한 뒤, 특정 호스트에 대해 정상/비정상 여부를 구분할 수 있도록 훈련할 수 있다. 다이콘(Daikon) 프로그램은 도 4과 같이, 디트레이스(dtrace)라는 독자적인 파일 포맷을 사용할 수 있다.If the invariant generation module uses the Daikon program, it can learn about the kernel snapshot for the normal host and then train it to distinguish whether it is normal or abnormal for a specific host. The Daikon program can use a proprietary file format called dtrace, as shown in FIG.
즉, 불변량 생성모듈은 자료구조 추출모듈에서 추출된 커널 자료구조 값들을 디트레이스(dtrace) 포맷으로 변경한 뒤, 이들을 다이콘(Daikon) 프로그램에 입력 값으로 인가할 수 있다.That is, the invariant generation module can change the kernel data structure values extracted from the data structure extraction module into the dtrace format, and then apply them as input values to the Daikon program.
도 5에 도시된 것과 같이, 불변량 생성모듈은 상기 다이콘(Daikon) 프로그램에 상기 디트레이스(dtrace) 포맷으로 변경된 입력 값을 인가함으로써, 다이콘(Daikon)의 inv 포맷으로 형성된 불변량과 관련된 정보를 획득할 수 있다.As shown in FIG. 5, the invariant generation module applies the input values changed in the dtrace format to the Daikon program, thereby generating information related to invariants formed in the inv format of Daikon Can be obtained.
이하의 도 6에서는 도 1에서 도시된 모니터링 모듈(Monitor)에 대해 보다 상세한 구성요소가 설명된다.In FIG. 6 below, more detailed components are described for the monitoring module (Monitor) shown in FIG.
또한, 도 7에서는 모니터링 모듈의 제어방법과 관련된 일 실시예가 설명된다.7, an embodiment related to a control method of the monitoring module will be described.
도 6을 참조하면, 모니터링 모듈은 학습단계에서 일반화한 불변량을 이용하여, 시스템이 정상적으로 동작하는지 여부를 판단할 수 있다.Referring to FIG. 6, the monitoring module can determine whether the system operates normally by using the invariant amount generalized in the learning step.
구체적으로, 도 7에 도시된 것과 같이, 모니터링 모듈은 주기적으로 모니터링 대상의 호스트(Host)의 커널 스냅샷을 추출(S701)할 수 있으며, 추출된 값들이 기 설정된 불변량 범위에 벗어나는지 여부를 판단(S702)할 수 있다.Specifically, as shown in FIG. 7, the monitoring module periodically extracts a kernel snapshot of a host to be monitored (S701), and determines whether the extracted values deviate from a predetermined invariant range (S702).
한편, 모니터링 모듈은 트리거가 인가되는 경우에 모니터링 대상의 호스트(Host)의 커널 스냅샷을 추출할 수도 있다.On the other hand, the monitoring module may extract a kernel snapshot of the monitored host when the trigger is applied.
모니터링 모듈은 기 설정된 불변량 범위를 벗어나는 값들이 검출되면, 상기 호스트를 정지시키거나, 호스트의 운영자에게 경고 메시지를 전송(S703)할 수 있다.The monitoring module may stop the host or send a warning message to the host's operator (S703) if values outside the predetermined invariant range are detected.
일 실시예에서, 모니터링 모듈은 다이콘(Daikon) 툴이 제공하는 InvariantChecker툴을 이용할 수 있다. InvariantChecker툴의 입력 값은, Daikon에서 생성된 inv 파일과 불변량 값을 체크하기 위한 데이터 파일인 dtrace파일을 포함할 수 있다. 이 경우, inv 파일은 불변량 값에 대응될 수 있다.In one embodiment, the monitoring module may use the InvariantChecker tool provided by the Daikon tool. The input values of the InvariantChecker tool can include an inv file generated by Daikon and a dtrace file, which is a data file for checking invariants. In this case, the inv file may correspond to an invariant value.
상기 입력 값이 인가되면, InvariantCheck툴을 이용하는 모니터링 모듈은, 상기 입력된 값 중 어떠한 값들이 기 설정된 불변량 범위를 벗어 났는지 여부와 관련된 정보를 출력할 수 있다. 또한, InvariantChecker툴을 이용하는 모니터링 모듈은, 입력 값이 기 설정된 불변량 범위를 벗어나면, 상기 입력 값에 대응하는 운영자에게 경고 메시지를 전송하거나, 상기 입력 값에 대응하는 호스트를 중단시킬 수 있다.When the input value is applied, the monitoring module using the InvariantCheck tool may output information related to which of the input values is out of the preset invariance range. The monitoring module using the InvariantChecker tool may send a warning message to the operator corresponding to the input value or stop the host corresponding to the input value if the input value is out of the preset invariance range.
본 발명은 본 발명의 정신 및 필수적 특징을 벗어나지 않는 범위에서 다른 특정한 형태로 구체화될 수 있음은 당업자에게 자명하다. 따라서, 상기의 상세한 설명은 모든 면에서 제한적으로 해석되어서는 아니되고 예시적인 것으로 고려되어야 한다. 본 발명의 범위는 첨부된 청구항의 합리적 해석에 의해 결정되어야 하고, 본 발명의 등가적 범위 내에서의 모든 변경은 본 발명의 범위에 포함된다.It will be apparent to those skilled in the art that the present invention may be embodied in other specific forms without departing from the spirit or essential characteristics thereof. Accordingly, the above description should not be construed in a limiting sense in all respects and should be considered illustrative. The scope of the present invention should be determined by rational interpretation of the appended claims, and all changes within the scope of equivalents of the present invention are included in the scope of the present invention.
| Application Number | Priority Date | Filing Date | Title | 
|---|---|---|---|
| KR1020160022075AKR101824583B1 (en) | 2016-02-24 | 2016-02-24 | System for detecting malware code based on kernel data structure and control method thereof | 
| Application Number | Priority Date | Filing Date | Title | 
|---|---|---|---|
| KR1020160022075AKR101824583B1 (en) | 2016-02-24 | 2016-02-24 | System for detecting malware code based on kernel data structure and control method thereof | 
| Publication Number | Publication Date | 
|---|---|
| KR20170099689A KR20170099689A (en) | 2017-09-01 | 
| KR101824583B1true KR101824583B1 (en) | 2018-02-01 | 
| Application Number | Title | Priority Date | Filing Date | 
|---|---|---|---|
| KR1020160022075AActiveKR101824583B1 (en) | 2016-02-24 | 2016-02-24 | System for detecting malware code based on kernel data structure and control method thereof | 
| Country | Link | 
|---|---|
| KR (1) | KR101824583B1 (en) | 
| Publication number | Priority date | Publication date | Assignee | Title | 
|---|---|---|---|---|
| US12013942B2 (en) | 2022-03-29 | 2024-06-18 | Acronis International Gmbh | Rootkit detection based on system dump sequence analysis | 
| US12141283B2 (en) | 2021-12-30 | 2024-11-12 | Acronis International Gmbh | Rootkit detection based on system dump files analysis | 
| US12242606B2 (en) | 2022-03-29 | 2025-03-04 | Acronis International Gmbh | Forensic analysis on consistent system footprints | 
| Publication number | Priority date | Publication date | Assignee | Title | 
|---|---|---|---|---|
| US20070261120A1 (en)* | 2006-01-23 | 2007-11-08 | Arbaugh William A | Method & system for monitoring integrity of running computer system | 
| US20150363294A1 (en)* | 2014-06-13 | 2015-12-17 | The Charles Stark Draper Laboratory Inc. | Systems And Methods For Software Analysis | 
| Publication number | Priority date | Publication date | Assignee | Title | 
|---|---|---|---|---|
| US20070261120A1 (en)* | 2006-01-23 | 2007-11-08 | Arbaugh William A | Method & system for monitoring integrity of running computer system | 
| US20150363294A1 (en)* | 2014-06-13 | 2015-12-17 | The Charles Stark Draper Laboratory Inc. | Systems And Methods For Software Analysis | 
| Publication number | Priority date | Publication date | Assignee | Title | 
|---|---|---|---|---|
| US12141283B2 (en) | 2021-12-30 | 2024-11-12 | Acronis International Gmbh | Rootkit detection based on system dump files analysis | 
| US12013942B2 (en) | 2022-03-29 | 2024-06-18 | Acronis International Gmbh | Rootkit detection based on system dump sequence analysis | 
| US12242606B2 (en) | 2022-03-29 | 2025-03-04 | Acronis International Gmbh | Forensic analysis on consistent system footprints | 
| Publication number | Publication date | 
|---|---|
| KR20170099689A (en) | 2017-09-01 | 
| Publication | Publication Date | Title | 
|---|---|---|
| Sharif et al. | Eureka: A framework for enabling static malware analysis | |
| CN109583200B (en) | A program exception analysis method based on dynamic taint propagation | |
| US10055585B2 (en) | Hardware and software execution profiling | |
| Lindorfer et al. | Lines of malicious code: Insights into the malicious software industry | |
| KR101212553B1 (en) | Apparatus and method for detecting malicious files | |
| CN101281571B (en) | Method for defending unknown virus program | |
| KR20120105759A (en) | Malicious code visualization apparatus, apparatus and method for detecting malicious code | |
| US9177149B2 (en) | Method of detecting malware in an operating system kernel | |
| KR20170003356A (en) | Method, device and terminal device for detecting a malicious vulnerability file | |
| Jeong et al. | Generic unpacking using entropy analysis | |
| Sun et al. | Tell me more than just assembly! reversing cyber-physical execution semantics of embedded iot controller software binaries | |
| Joy et al. | Rootkit detection mechanism: A survey | |
| US10073973B2 (en) | Process testing apparatus, computer-readable medium, and process testing method | |
| KR101824583B1 (en) | System for detecting malware code based on kernel data structure and control method thereof | |
| O'Kane et al. | N-gram density based malware detection | |
| Ali et al. | Agent-based vs agent-less sandbox for dynamic behavioral analysis | |
| JP5441043B2 (en) | Program, information processing apparatus, and information processing method | |
| US11886589B2 (en) | Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method | |
| KR101311367B1 (en) | Method and apparatus for diagnosing attack that bypass the memory protection | |
| Zhu et al. | Static analysis based invariant detection for commodity operating systems | |
| Bhatt et al. | Leveraging relocations in ELF-binaries for Linux kernel version identification | |
| KR102104198B1 (en) | Technology and system for improving the accuracy of binary reassembly system with lazy symbolization | |
| CN110795735A (en) | Rootkit universality detection method oriented to heterogeneous BIOS environment | |
| Jurn et al. | A survey of automated root cause analysis of software vulnerability | |
| KR102421394B1 (en) | Apparatus and method for detecting malicious code using tracing based on hardware and software | 
| Date | Code | Title | Description | 
|---|---|---|---|
| A201 | Request for examination | ||
| PA0109 | Patent application | Patent event code:PA01091R01D Comment text:Patent Application Patent event date:20160224 | |
| PA0201 | Request for examination | ||
| E902 | Notification of reason for refusal | ||
| PE0902 | Notice of grounds for rejection | Comment text:Notification of reason for refusal Patent event date:20170501 Patent event code:PE09021S01D | |
| AMND | Amendment | ||
| PG1501 | Laying open of application | ||
| E601 | Decision to refuse application | ||
| PE0601 | Decision on rejection of patent | Patent event date:20171030 Comment text:Decision to Refuse Application Patent event code:PE06012S01D Patent event date:20170501 Comment text:Notification of reason for refusal Patent event code:PE06011S01I | |
| AMND | Amendment | ||
| PX0901 | Re-examination | Patent event code:PX09011S01I Patent event date:20171030 Comment text:Decision to Refuse Application Patent event code:PX09012R01I Patent event date:20170703 Comment text:Amendment to Specification, etc. | |
| PX0701 | Decision of registration after re-examination | Patent event date:20171219 Comment text:Decision to Grant Registration Patent event code:PX07013S01D Patent event date:20171129 Comment text:Amendment to Specification, etc. Patent event code:PX07012R01I Patent event date:20171030 Comment text:Decision to Refuse Application Patent event code:PX07011S01I Patent event date:20170703 Comment text:Amendment to Specification, etc. Patent event code:PX07012R01I | |
| X701 | Decision to grant (after re-examination) | ||
| GRNT | Written decision to grant | ||
| PR0701 | Registration of establishment | Comment text:Registration of Establishment Patent event date:20180126 Patent event code:PR07011E01D | |
| PR1002 | Payment of registration fee | Payment date:20180129 End annual number:3 Start annual number:1 | |
| PG1601 | Publication of registration | ||
| PR1001 | Payment of annual fee | Payment date:20210118 Start annual number:4 End annual number:4 | |
| PR1001 | Payment of annual fee | Payment date:20211223 Start annual number:5 End annual number:5 | |
| PR1001 | Payment of annual fee | Payment date:20241224 Start annual number:8 End annual number:8 |