KR20230098951A - Method for managing process memory using shadow mapping virtual address space and method using the same - Google Patents
Method for managing process memory using shadow mapping virtual address space and method using the same Download PDFInfo
- Publication number
- KR20230098951A KR20230098951A KR1020210187950A KR20210187950A KR20230098951A KR 20230098951 A KR20230098951 A KR 20230098951A KR 1020210187950 A KR1020210187950 A KR 1020210187950A KR 20210187950 A KR20210187950 A KR 20210187950A KR 20230098951 A KR20230098951 A KR 20230098951A
- Authority
- KR
- South Korea
- Prior art keywords
- shadow mapping
- address space
- mapping value
- shadow
- variable
- Prior art date
Links
- 238000013507 mapping Methods 0.000 title claims abstract description 147
- 230000015654 memory Effects 0.000 title claims abstract description 126
- 238000000034 method Methods 0.000 title claims abstract description 93
- 230000008569 process Effects 0.000 title claims abstract description 58
- 238000007726 management method Methods 0.000 claims abstract description 28
- 230000006870 function Effects 0.000 claims abstract description 27
- 230000007334 memory performance Effects 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 15
- 238000007796 conventional method Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 3
- 238000010276 construction Methods 0.000 description 3
- 230000008570 general process Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000009844 basic oxygen steelmaking Methods 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
Description
본 발명은 프로세서 메모리 관리 기술에 관한 것으로, 특히 메모리 객체에 대한 경계를 벗어난 접근을 탐지하는 프로세스 메모리 관리 기술과 코드 및 섀도우 맵핑 구성 기술에 관한 것이다.The present invention relates to processor memory management techniques, and more particularly to process memory management techniques for detecting out-of-bounds access to memory objects and code and shadow mapping construction techniques.
메모리 객체에 대한 경계를 벗어난 접근이란, 소프트웨어가 배열 혹은 포인터 등을 이용하여 메모리에 읽기나 쓰기를 수행할 때 소프트웨어 개발자가 정의한 경계를 벗어난 접근(Buffer OverFlow, BOF)이 발생하는 것을 의미한다. 이와 같이 경계를 벗어난 접근은 접근 위치로부터 경계까지의 거리에 따라 인접 BOF와 비인접 BOF로 분류할 수 있으며, 비인접 BOF는 인접 BOF보다 상대적으로 탐지 비용 및 난이도가 높다는 특징을 갖는다.An out-of-bounds access to a memory object means that an out-of-bounds access defined by a software developer (Buffer OverFlow, BOF) occurs when software reads or writes to a memory using an array or pointer. Such out-of-boundary access can be classified into adjacent BOF and non-adjacent BOF according to the distance from the approach location to the boundary, and the non-adjacent BOF has a higher detection cost and difficulty than the adjacent BOF.
Intel과 Oracle 등의 상용 CPU 아키텍처에서 경계를 벗어난 접근을 탐지하는 기능을 제공하고 있지만, 과도한 성능 오버헤드나 낮은 탐지 정밀도로 활용에 제한이 있다. Commercial CPU architectures such as Intel and Oracle provide a function to detect out-of-boundary access, but their use is limited due to excessive performance overhead or low detection accuracy.
Intel MPX의 경우에는 각 메모리 객체에 대해 lower bound와 upper bound 정보를 메모리에 보관하고, 메모리 객체에 대한 읽기 혹은 쓰기 인스트럭션(instruction)을 수행하기 전에 해당 lower bound와 upper bound 값을 메모리에서 가져온 후 접근되는 주소와 비교하는 작업을 수행한다. 이와 같은 Intel MPX는 인접 BOF 뿐만 아니라 비인접 BOF의 탐지도 지원하지만, 이 과정에서 메모리 접근과 인스트럭션(instruction) 증가로 인한 성능 오버헤드가 발생한다는 문제점이 있다. In the case of Intel MPX, the lower bound and upper bound information for each memory object is stored in memory, and the lower bound and upper bound values are retrieved from memory before accessing them before performing a read or write instruction on the memory object. It performs the operation of comparing with the address to be Such Intel MPX supports detection of not only contiguous BOF but also non-contiguous BOF, but there is a problem in that performance overhead occurs due to memory access and instruction increase in this process.
또한, Oracle SPARC 프로세서의 ADI 기술은 64바이트 당 4비트에 해당하는 섀도우 영역을 두어 메모리 객체의 메타데이터를 기록하는데 사용한다. 그리고 메모리 객체에 접근 시 해당 메타데이터를 활용하여 경계를 벗어난 접근인지 여부를 확인한다. 그러나, 4비트로 표현되는 정보의 한계로 인하여 비인접 BOF 탐지는 제한적으로 지원할 수 밖에 없고, 섀도우 영역으로 인한 메모리 오버헤드와 섀도우 영역 접근 및 경계 확인을 위해 추가된 인스트럭션(instruction)에 의한 성능 오버헤드 또한 수반하게 된다. In addition, the ADI technology of the Oracle SPARC processor places a shadow area corresponding to 4 bits per 64 bytes and uses it to record the metadata of memory objects. And when accessing a memory object, it checks whether the access is out of bounds by using the corresponding metadata. However, due to the limitation of information expressed in 4 bits, non-adjacent BOF detection can only be limitedly supported, and memory overhead due to shadow area and performance overhead due to added instructions for shadow area access and boundary confirmation will also entail
본 발명의 목적은 메모리 성능 및 오버헤드를 최소화하면서 메모리 객체에 대한 경계를 벗어난 접근을 효율적으로 탐지할 수 있는 프로세스 메모리 관리 기술과 이를 활용하는 코드 구성 기술을 제공하는 것이다.An object of the present invention is to provide a process memory management technology capable of efficiently detecting an out-of-boundary access to a memory object while minimizing memory performance and overhead, and a code construction technology utilizing the same.
또한, 본 발명의 목적은 실제 주소공간을 추가로 할당하지 않고도 레드 존(Red-Zone)의 크기 제한 없이 BOF를 탐지할 수 있는 효과적을 방안을 제시하는 것이다.In addition, an object of the present invention is to provide an effective method for detecting BOF without additionally allocating an actual address space and without limiting the size of a red zone.
또한, 본 발명의 목적은 기존 방식과 동일한 크기의 스택 공간과 섀도우 맵핑 공간을 이용하여 비인접 BOF를 효과적으로 탐지하는 것이다.In addition, an object of the present invention is to effectively detect a non-adjacent BOF using the same stack space and shadow mapping space as the conventional method.
또한, 본 발명의 목적은 BOF을 탐지하기 위해 프로그램에 필요한 메모리와 코드를 최소화함으로써 효과적으로 BOF를 탐지하는 것이다.Also, an object of the present invention is to effectively detect BOF by minimizing the memory and code required for a program to detect BOF.
상기한 목적을 달성하기 위한 본 발명에 따른 프로세스 메모리 관리 방법은 함수 내 할당되는 변수 별 가상 주소공간을 할당하는 단계; 상기 변수 별 가상 주소공간을 기준으로 제1 섀도우 맵핑 값을 획득하는 단계; 함수 내 할당되는 변수 별 실제 주소공간을 기준으로 제2 섀도우 맵핑 값을 획득하는 단계; 및 상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 이용하여 최종 섀도우 맵핑 값을 산출하고, 상기 최종 섀도우 맵핑 값을 이용하여 버퍼 오버플로우(BUFFER OVERFLOW)를 탐지하는 단계를 포함한다.To achieve the above object, a process memory management method according to the present invention includes allocating a virtual address space for each variable allocated within a function; obtaining a first shadow mapping value based on the virtual address space for each variable; obtaining a second shadow mapping value based on an actual address space for each variable allocated within the function; and calculating a final shadow mapping value using the first shadow mapping value and the second shadow mapping value, and detecting a buffer overflow using the final shadow mapping value.
이 때, 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당될 수 있다.In this case, the virtual address space for each variable may be allocated so as to be separated by an address space having a predetermined size.
이 때, 제1 섀도우 맵핑 값은 상기 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the first shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a virtual address of the virtual address space for each variable.
이 때, 제2 섀도우 맵핑 값은 상기 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the second shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a real address of the real address space for each variable.
이 때, 섀도우 맵핑은 상기 변수 별 가상 주소공간 또는 상기 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행할 수 있다.At this time, the shadow mapping may perform SHIFT RIGHT by predetermined bits based on the address of a specific variable in the virtual address space for each variable or the real address space for each variable.
이 때, 최종 섀도우 맵핑 값은 상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출될 수 있다.In this case, a final shadow mapping value may be calculated by adding the first shadow mapping value and the second shadow mapping value.
이 때, 최종 섀도우 맵핑 값이 0인 경우, 상기 버퍼 오버플로우가 발생한 것으로 판단할 수 있다.In this case, when the final shadow mapping value is 0, it may be determined that the buffer overflow has occurred.
또한, 본 발명의 일실시예에 따른 프로세스 메모리 관리 장치는 함수 내 할당되는 변수 별 가상 주소공간을 할당하고, 상기 변수 별 가상 주소공간을 기준으로 제1 섀도우 맵핑 값을 획득하고, 함수 내 할당되는 변수 별 실제 주소공간을 기준으로 제2 섀도우 맵핑 값을 획득하고, 상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 이용하여 최종 섀도우 맵핑 값을 산출하고, 상기 최종 섀도우 맵핑 값을 이용하여 버퍼 오버플로우(BUFFER OVERFLOW)를 탐지하는 프로세서; 및 상기 제1 섀도우 맵핑 값 및 상기 제2 섀도우 맵핑 값을 저장하는 메모리를 포함한다.In addition, the apparatus for managing process memory according to an embodiment of the present invention allocates a virtual address space for each variable allocated in a function, obtains a first shadow mapping value based on the virtual address space for each variable, and allocates a virtual address space for each variable. A second shadow mapping value is obtained based on the actual address space for each variable, a final shadow mapping value is calculated using the first shadow mapping value and the second shadow mapping value, and a buffer is buffered using the final shadow mapping value. A processor that detects an overflow (BUFFER OVERFLOW); and a memory storing the first shadow mapping value and the second shadow mapping value.
이 때, 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당될 수 있다.In this case, the virtual address space for each variable may be allocated so as to be separated by an address space having a predetermined size.
이 때, 제1 섀도우 맵핑 값은 상기 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the first shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a virtual address of the virtual address space for each variable.
이 때, 제2 섀도우 맵핑 값은 상기 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the second shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a real address of the real address space for each variable.
이 때, 섀도우 맵핑은 상기 변수 별 가상 주소공간 또는 상기 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행할 수 있다.At this time, the shadow mapping may perform SHIFT RIGHT by predetermined bits based on the address of a specific variable in the virtual address space for each variable or the real address space for each variable.
이 때, 최종 섀도우 맵핑 값은 상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출될 수 있다.In this case, a final shadow mapping value may be calculated by adding the first shadow mapping value and the second shadow mapping value.
이 때, 최종 섀도우 맵핑 값이 0인 경우, 상기 버퍼 오버플로우가 발생한 것으로 판단할 수 있다.In this case, when the final shadow mapping value is 0, it may be determined that the buffer overflow has occurred.
본 발명에 따르면, 메모리 성능 및 오버헤드를 최소화하면서 메모리 객체에 대한 경계를 벗어난 접근을 효율적으로 탐지할 수 있는 프로세스 메모리 관리 기술과 이를 활용하는 코드 구성 기술을 제공할 수 있다.According to the present invention, it is possible to provide a process memory management technology capable of efficiently detecting an out-of-boundary access to a memory object while minimizing memory performance and overhead, and a code construction technology utilizing the same.
또한, 본 발명은 실제 주소공간을 추가로 할당하지 않고도 레드 존(Red-Zone)의 크기 제한 없이 BOF를 탐지할 수 있는 효과적을 방안을 제시할 수 있다.In addition, the present invention can provide an effective method for detecting BOF without additionally allocating an actual address space and without limiting the size of a red zone.
또한, 본 발명은 기존 방식과 동일한 크기의 스택 공간과 섀도우 맵핑 공간을 이용하여 비인접 BOF를 효과적으로 탐지할 수 있다.In addition, the present invention can effectively detect a non-adjacent BOF using a stack space and a shadow mapping space of the same size as the conventional method.
또한, 본 발명은 BOF을 탐지하기 위해 프로그램에 필요한 메모리와 코드를 최소화함으로써 효과적으로 BOF를 탐지할 수 있다.In addition, the present invention can effectively detect BOF by minimizing memory and code required for a program to detect BOF.
도 1 내지 도 2는 버퍼오버플로우(BOF)를 초래하는 샘플코드와 이 샘플코드를 중간코드 표현으로 바꾼 코드의 일 예를 나타낸 도면이다.
도 3 내지 도 4는 구글 어드레스 새너타이저 동작 방식의 일 예를 나타낸 도면이다.
도 5 내지 도 7은 일반적인 프로세스 메모리 구성과 레드 존(Red-Zone)을 가진 메모리 구성의 일 예를 나타낸 도면이다.
도 8은 레드 존을 가진 메모리에서 비인접 BOF 오류를 탐지하는 일 예를 나타낸 도면이다.
도 9는 BOF를 탐지하기 위한 프로세스 메모리와 섀도우 메모리의 일 예를 나타낸 도면이다.
도 10은 8K 이상 떨어진 주소 공간을 이용하여 BOF를 탐지하는 과정의 일 예를 나타낸 도면이다.
도 11은 도 10에서 BOF를 탐지하기 위해 필요한 메모리 공간의 일 예를 나타낸 도면이다.
도 12는 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법을 나타낸 동작 흐름도이다.
도 13은 본 발명에 따라 BOF를 탐지하기 위한 프로세스 메모리와 섀도우 메모리의 일 예를 나타낸 도면이다.
도 14는 본 발명에 따라 도 13에 도시된 변수들에 대해 할당된 가상 주소공간의 일 예를 나타낸 도면이다.
도 15 내지 도 17은 본 발명에 따른 섀도우 맵핑을 사용한 오브젝트 코드 생성 과정의 일 예를 나타낸 도면이다.
도 18은 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 장치를 나타낸 도면이다.1 and 2 are diagrams showing an example of a sample code that causes a buffer overflow (BOF) and a code in which the sample code is converted into an intermediate code expression.
3 and 4 are diagrams illustrating an example of a Google address sanatizer operation method.
5 to 7 are diagrams illustrating an example of a general process memory configuration and a memory configuration having a red zone.
8 is a diagram illustrating an example of detecting a non-adjacent BOF error in a memory having a red zone.
9 is a diagram illustrating an example of a process memory and a shadow memory for detecting BOF.
10 is a diagram illustrating an example of a process of detecting a BOF using an address space separated by 8K or more.
FIG. 11 is a diagram showing an example of memory space required to detect BOF in FIG. 10 .
12 is an operational flowchart illustrating a process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention.
13 is a diagram showing an example of a process memory and a shadow memory for detecting BOF according to the present invention.
14 is a diagram showing an example of a virtual address space allocated for the variables shown in FIG. 13 according to the present invention.
15 to 17 are diagrams illustrating an example of an object code generation process using shadow mapping according to the present invention.
18 is a diagram illustrating an apparatus for managing process memory using virtual address space-based shadow mapping according to an embodiment of the present invention.
본 발명을 첨부된 도면을 참조하여 상세히 설명하면 다음과 같다. 여기서, 반복되는 설명, 본 발명의 요지를 불필요하게 흐릴 수 있는 공지 기능, 및 구성에 대한 상세한 설명은 생략한다. 본 발명의 실시형태는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위해서 제공되는 것이다. 따라서, 도면에서의 요소들의 형상 및 크기 등은 보다 명확한 설명을 위해 과장될 수 있다.The present invention will be described in detail with reference to the accompanying drawings. Here, repeated descriptions, well-known functions that may unnecessarily obscure the subject matter of the present invention, and detailed descriptions of configurations are omitted. Embodiments of the present invention are provided to more completely explain the present invention to those skilled in the art. Accordingly, the shapes and sizes of elements in the drawings may be exaggerated for clarity.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.Hereinafter, preferred embodiments according to the present invention will be described in detail with reference to the accompanying drawings.
도 1 내지 도 2는 버퍼오버플로우(BOF)를 초래하는 샘플코드와 이 샘플코드를 중간코드 표현으로 바꾼 코드의 일 예를 나타낸 도면이다.1 and 2 are diagrams showing an example of a sample code that causes a buffer overflow (BOF) and a code in which the sample code is converted into an intermediate code expression.
이 때, 도 1에 도시된 샘플코드는 int 타입의 배열 100개를 'stack_array'란 이름으로 할당한 후, 프로그램 실행 시 받은 인자 개수(argc)를 100과 더한 인덱스를 가지는 배열원소 값에 접근하는 코드이다. At this time, the sample code shown in Figure 1 allocates 100 int type arrays under the name 'stack_array', and then accesses the array element value having an index obtained by adding 100 to the number of arguments (argc) received during program execution. This is the code.
예를들어, argc 값이 2라고 가정하면 stack_array[102]에 접근하는 코드일 수 있다.For example, assuming that the value of argc is 2, it can be code that accesses stack_array[102].
이처럼 배열의 크기인 100보다 더 큰, 할당되지 않은 배열 원소에 대한 접근을 버퍼오버플로우(Buffer OverFlow, BOF)라고 한다. 이러한 버퍼오버플로우는 실행 프로그램 중단 또는 시스템 권한 획득 등과 같이 시스템에 의도되지 않은 결과를 초래하게 되고, 해커들에 의한 공격 과정에서 자주 사용되는 방법이다. In this way, an access to an unallocated array element larger than the array size of 100 is called a Buffer OverFlow (BOF). This buffer overflow causes unintended results in the system, such as interruption of an executing program or acquisition of system privileges, and is a method often used in the course of an attack by hackers.
이러한 공격 유형은 인접 BOF와 비인접 BOF로 구분할 수 있는데, 인접 BOF는 도 1에 도시된 a 배열과 인접한 영역에 대한 접근으로 발생하는 BOF를 의미하고, 비인접 BOF는 메모리에 할당된 배열과 인접되지 않는 떨어져 있는 영역에 대한 접근으로 발생하는 BOF를 의미한다. These types of attacks can be divided into contiguous BOF and non-adjacent BOF. Adjacent BOF refers to a BOF generated by accessing an area adjacent to an array a shown in FIG. It means BOF caused by access to a remote area that does not become available.
따라서, 비인접 BOF의 경우에는 이렇게 배열과 떨어진 거리가 멀어지면 멀어질수록 탐지가 어렵고 추가 비용이 많이 들게 되며, 대개는 탐지 불가능인 경우가 많다.Therefore, in the case of a non-adjacent BOF, as the distance from the array increases, detection becomes difficult and additional cost becomes high, and in most cases, it is impossible to detect.
예를 들어, 도 5에 도시된 소스코드(510)의 경우, char a[10] 배열이므로 a[11]과 같은 인접 BOF는 비교적 쉽게 탐지할 수 있으며, 이를 탐지하기 위한 비용도 크지 않을 수 있다. 그러나, a[20], a[33] 또는 a[50]과 같이 떨어진 거리가 증가하거나, char b[10]와 같이 정의되어 a[10]의 주소(&a[10])와 b[0]의 주소(&b[0])가 동일하게 되는 경우에는 BOF를 탐지하기 어렵게 된다. 앞으로 이러한 경우는 out-of-bound access라고 표기하도록 한다.For example, in the case of the
이러한 out-of-bound access를 효과적으로 탐지하기 위해 Intel, Google 등에서 경계를 벗어난 접근을 탐지하는 다양한 기능을 제공하고 있고, 도 3 내지 도 4는 그 중에서 대표적인 접근방법인 구글의 어드레스 새너타이저의 방법을 개념적으로 나타낸 도면이다.In order to effectively detect this out-of-bound access, various functions for detecting out-of-boundary access are provided by Intel, Google, etc., and FIGS. It is a conceptual drawing.
즉, 도 3에 도시된 것처럼 실제 프로세스 메모리에 대한 상태정보를 가진 섀도우 메모리를 부가적으로 준비하여, 실제 프로세스 메모리로 접근을 하기 전에 섀도우 메모리에 대한 사전 접근을 수행하여 해당 접근이 경계를 벗어나는 접근인지 여부를 검사한 후 이 결과에 따른 효과적인 대응을 수행할 수 있다. That is, as shown in FIG. 3, a shadow memory having state information on the actual process memory is additionally prepared, and prior access to the shadow memory is performed before access to the actual process memory, so that the access is out of bounds. After checking whether or not it is recognized, an effective response can be performed according to the result.
예를 들어, 도 1에 도시된 샘플코드의 경우, 'if (IsPoisoned(stack_array[102]) Crash();'의 코드로 변경될 수 있고, 이 값이 참(true)이면 Crash() 함수를 수행하고 그렇지 않으면 해당 위치에 대한 정상적인 접근인 것으로 판단하고 접근을 허용할 수 있다.For example, in the case of the sample code shown in FIG. 1, it can be changed to 'if (IsPoisoned(stack_array[102]) Crash();' code, and if this value is true, the Crash() function is executed. Otherwise, it may be determined that it is normal access to the location and access may be granted.
이 때, 도 4를 참조하면, IsPoisoned()함수는 접근하려는 주소(addr)에 대해 Shift Right 3을 수행하여 섀도우 메모리 주소를 계산하고, 계산된 주소 값이 0이 아닌 경우에는 True값을, 계산된 주소 값이 0인 경우에는 False값을 반환할 수 있다.At this time, referring to FIG. 4, the IsPoisoned() function calculates the shadow memory address by performing
이 때, 도 3을 참조하면, 프로세스 메모리(Process Memory)와 섀도우 메모리(Shadow memory)에는 각각 유효한 메모리(310, 330)와 유효하지 않은 메모리(320, 340)가 포함되어 있는 것을 알 수 있다. At this time, referring to FIG. 3 , it can be seen that the process memory and the shadow memory include
따라서, stack_array[0]부터 stack_array[99]까지는 False값을 반환받고, stack_array[102]은 True값을 반환받게 되어, stack_array[102]에 대한 접근은 경계를 벗어났다는 것을 탐지할 수 있다. Therefore, a False value is returned from stack_array[0] to stack_array[99], and a True value is returned from stack_array[102], so that access to stack_array[102] is out of bounds can be detected.
이와 같이, 단순하며 손쉽게 이를 탐지할 수 있지만 섀도우 메모리를 구성 및 관리하고 유지하는 비용이 추가적으로 많이 발생한다는 단점이 존재한다. 예를 들어, 도 4에 도시된 것처럼 실제 메모리가 8G라고 가정한다면 대략 1G의 추가 메모리(410)가 더 필요하게 된다As such, although it is simple and easy to detect it, there is a disadvantage in that the cost of configuring, managing, and maintaining the shadow memory is additionally increased. For example, if it is assumed that the actual memory is 8G as shown in FIG. 4, approximately 1G of
이와 같은 과정을 효과적으로 수행하기 위해서는 각 프로세스의 메모리 구성 방식에 대한 수정이 필요하며, 이하에서는 도 5 내지 도 7을 참조하여 프로세스 메모리 구성을 설명하도록 한다. In order to effectively perform such a process, modification of the memory configuration method of each process is required, and the process memory configuration will be described below with reference to FIGS. 5 to 7 .
도 5 내지 도 7은 일반적인 프로세스 메모리 구성과 레드 존(Red-Zone)을 가진 메모리 구성의 일 예를 나타낸 도면이다. 5 to 7 are diagrams illustrating an example of a general process memory configuration and a memory configuration having a red zone.
일반적으로 도 5에 도시된 소스코드(510)에 스택 메모리 구성은 도 6에 도시된 것과 같다. 이 때, 프로그램에서 선언된 순서에 따라 스택 내부 메모리에 할당하여 사용하게 되는데, 도 5에 도시된 소스코드(510)의 경우에는 a 배열과 b 배열이 연속적으로 할당되어 있다. 만약, func() 함수 내에서 a[20]에 대한 접근을 수행하는 경우, 도 6에 도시된 스택의 Return Address를 overwrite하게 되어서 프로그램의 동작에 치명적인 오류를 초래할 수 있다.In general, the stack memory configuration of the
따라서, 도 7에 도시된 스택과 같이 a 배열과 b 배열을 연속적으로 할당하지 않고, 그 사이에 특정 크기의 레드 존(Red-Zone) 영역을 추가하고 도 3에서 설명한 섀도우 맵핑을 구성할 수 있다. 이를 통해 프로그램에서 메모리에 대한 접근 발생 시 유효한 접근인진 아닌지를 판단하여 접근을 허용 또는 차단하는 기능을 효과적으로 수행할 수 있다. Therefore, instead of continuously allocating an array a and an array b as in the stack shown in FIG. 7 , a red-zone area of a specific size may be added between them and the shadow mapping described in FIG. 3 may be configured. . Through this, when access to memory occurs in a program, it is possible to effectively perform a function of allowing or blocking access by determining whether or not it is a valid access.
즉, 동일한 a[20]에 대한 접근이라도 도 6에 도시된 스택에서는 문제없이 Return Address에 overwrite되고, 도 7에 도시된 스택에서는 16바이트 Red-Zone이 추가됨으로써 Red-Zone에 대한 접근으로 바뀔 수 있게 되어 BOF 탐지가 가능해지게 된다.That is, even if access to the same a[20] is overwritten in the return address in the stack shown in FIG. 6 without any problem, and in the stack shown in FIG. This makes BOF detection possible.
그러나, 도 7과 같은 방식으로 메모리를 관리하여도 out-of-bound(O.U.B) access에 대한 BOF를 탐지하는 것은 쉽지 않다.However, it is not easy to detect BOF for out-of-bound (O.U.B) access even when memory is managed in the same manner as in FIG. 7 .
이하에서는 도 8을 참조하여 O.U.B. 오류를 탐지하는 것이 왜 어려운지를 상세하게 설명하도록 한다. Hereinafter, with reference to FIG. 8, O.U.B. Explain in detail why it is difficult to detect errors.
도 8은 도 5에 도시된 소스코드(520)를 바탕으로 a[33]에 대한 접근을 실행한 일 예를 나타낸다. 도 8을 참고하면, a[33] 메모리는 레드존이 포함된 스택(810)에서 b[0] 메모리 주소에 대한 접근과 동일하게 되고, 이 주소에 대한 섀도우 맵핑 값은 정상 Access이므로 문제 없이 접근이 이루어진다. 그러나, 실제로는 경계를 벗어난 접근(즉, BOF)으로 탐지되어야 하는 오류이다. 8 shows an example of executing access to a[33] based on the
따라서, 이를 탐지하기 위한 가장 쉬운 접근 방법은 도 8에 도시된 2배 크기의 레드존이 포함된 스택(820)과 같이 a배열과 b 배열 사이에 포함되는 레드 존(Red-Zone)의 크기를 2 배로 늘려서 탐지하는 것이다. Therefore, the easiest approach to detect this is to determine the size of the red zone included between the a array and the b array, such as the
그러나, 이렇게 문제가 발생할 때마다 레드 존(Red-Zone)의 크기를 2배 또는 필요한 크기로 설정하는 방법은 실제로 적용하기에 불가능하다. However, whenever a problem occurs, it is impossible to apply the method of setting the size of the red zone twice or to a required size.
예를 들어, 도 8에 도시된 예시에서는 16바이트, 32바이트와 같이 작은 크기의 공간만을 증가시켜 해결할 수 있지만, 실제 프로그래밍 환경에서는 이와 같은 레드 존의 크기를 예측하는 것이 불가능하다. For example, in the example shown in FIG. 8 , it can be solved by increasing only small spaces such as 16 bytes and 32 bytes, but it is impossible to predict the size of such a red zone in an actual programming environment.
따라서, 시스템을 운영하기 위해서는 레드 존(Red-Zone)의 크기를 어느 정도 제어가능하고 예측 가능한 크기로 유지하여야만 한다. 또한, 스택과 같은 영역은 프로그램에서 무한정 크게 할당할 수 없으며, 힙과 그 주소공간을 공유하여 관리되어야 한다.Therefore, in order to operate the system, the size of the red zone must be maintained at a somewhat controllable and predictable size. In addition, an area such as the stack cannot be allocated infinitely large in a program, and must be managed by sharing the heap and its address space.
따라서, 본 발명에서는 레드 존(Red-Zone)의 크기를 효과적으로 관리 및 제어 가능하고, 레드 존(Red-Zone)의 크기의 제한이 없이도 O.U.B. 등의 BOF를 판단할 수 있는 효과적인 방법을 제시하고자 한다. Therefore, in the present invention, it is possible to effectively manage and control the size of the red zone, and O.U.B. We would like to suggest an effective method to determine the BOF of the back.
이하에서는, 도 9를 참조하여, 기존의 방식을 그대로 적용했을 경우에 프로세스 메모리 및 섀도우 메모리의 관리 과정에 대해서 설명하도록 한다. Hereinafter, with reference to FIG. 9 , a process of managing a process memory and a shadow memory when the conventional method is applied will be described.
도 9에 도시된 것처럼 프로세스의 스택이 구성되고, a 배열과 b 배열이 함수 내에 선언된 경우에 코드에서 a[9]에 대한 접근을 수행한다고 가정할 수 있다. As shown in FIG. 9, when the stack of a process is configured and an array a and an array b are declared within a function, it can be assumed that access to a[9] is performed in the code.
이 때, 프로세스 메모리에서 a[9]의 주소는 0x69이고, 이에 대한 섀도우 맵핑 값은 0x69를 Shift Right 3 bit 수행한 0x0D에 상응할 수 있다. 이 때, 0x0D에 해당하는 섀도우 메모리 값은'02'에 해당한다. 이는 접근가능한 주소가 2개 있다는 것을 의미하고, 유효한 주소이며 접근이 가능한 것을 의미할 수 있다. At this time, the address of a[9] in the process memory is 0x69, and the shadow mapping value for this may correspond to 0x0D obtained by performing
그러나, 프로세스 메모리에서 a[16]의 주소는 0x50이고, 이에 대한 섀도우 맵핑 값은 0x50을 Shift Right 3 bit 수행한 0xFF에 상응할 수 있다. 이 때, 0xFF에 해당하는 섀도우 메모리 값은 유효하지 않은 주소라는 의미이므로 BOF가 탐지될 수 있다. However, the address of a[16] in the process memory is 0x50, and the shadow mapping value for this may correspond to 0xFF obtained by performing
이와는 다르게, 본 발명에서 BOF를 탐지하기 위한 프로세스 메모리 및 섀도우 메모리의 운영 개념은 도 10에 도시된 형태일 수 있다. 즉, 동일 함수 내에서 할당한 서로 다른 배열 a, b를 충분히 멀리 떨어진 주소 공간으로 분리하는 것이다. Unlike this, the operating concept of the process memory and the shadow memory for detecting BOF in the present invention may be in the form shown in FIG. 10 . That is, the different arrays a and b allocated within the same function are separated into sufficiently far apart address spaces.
도 10에서는 8K Byte 이상 떨어진 공간으로 배열 a, b를 분리하였기 때문에 레드 존(Red-Zone)을 8K Byte로 설정한 것으로 볼 수 있다. 이렇게 하면 도 10에 도시된 것처럼 이전 방식에서는 BOF로 탐지하지 못했던 a[32] = 'a'에 대한 접근을 BOF로 탐지할 수 있다. In FIG. 10, since the arrays a and b are separated by a space that is more than 8K Byte apart, it can be seen that the Red-Zone is set to 8K Byte. In this way, as shown in FIG. 10, an access to a[32] = 'a', which was not detected by BOF in the previous method, can be detected by BOF.
그러나, 이와 같은 방식으로 BOF의 탐지를 수행하기 위해서는 도 11에 도시된 것처럼 기존의 방법에 비해 상당히 많은 메모리 공간의 낭비가 발생하게 된다.However, in order to detect the BOF in this way, as shown in FIG. 11, a considerable amount of memory space is wasted compared to the conventional method.
즉, 단순하게 계산한다고 해도 기존의 방식에서는 8K byte(스택 공간) + 1K byte(섀도우 맵핑 공간)이므로 9K bytes가 필요하다. 반면에, 도 10과 같이 함수 내 할당된 변수를 떨어진 공간으로 분리하는 경우에는 8K byte x 2(스택 공간), 1K byte x 2(섀도우 맵핑 공간)이므로 총 18K bytes가 필요하게 된다. 만일, 함수 내 할당된 변수의 개수가 n개라고 한다면 8K byte x n의 스택 공간과 1K byte x n개의 섀도우 맵핑 공간이 필요하게 되므로 이는 심각한 문제가 될 수 있다.That is, even if it is simply calculated, in the conventional method, 8K bytes (stack space) + 1K bytes (shadow mapping space), so 9K bytes are required. On the other hand, if variables allocated within a function are separated into separate spaces as shown in FIG. 10, 8K bytes x 2 (stack space) and 1K bytes x 2 (shadow mapping space) require a total of 18K bytes. If the number of allocated variables in the function is n, this can be a serious problem because a stack space of 8K bytes x n and a shadow mapping space of 1K bytes x n are required.
따라서, 본 발명에서는 함수 내 할당된 변수마다 실제 주소공간을 추가적으로 할당하지 않되, 이전 방식과 동일한 메모리 크기를 사용하면서도 도 10 내지 도 11에서 설명한 것처럼 분리된 공간을 실제 운영하는 방식과 동일한 효과를 낼 수 있는 방법을 제안하도록 한다. Therefore, in the present invention, the actual address space is not additionally allocated for each variable allocated within the function, but the same effect as the method of actually operating the separated space as described in FIGS. 10 to 11 is obtained while using the same memory size as the previous method. Please suggest a possible way.
도 12는 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법을 나타낸 동작 흐름도이다. 12 is an operation flowchart illustrating a process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention.
도 12를 참조하면, 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법은, 함수 내 할당되는 변수 별 가상 주소공간을 할당한다(S1210).Referring to FIG. 12 , in the process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention, a virtual address space is allocated for each variable allocated within a function (S1210).
이 때, 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당될 수 있다.In this case, the virtual address space for each variable may be allocated so as to be separated by an address space having a predetermined size.
예를 들어, 도 13 내지 도 14는 본 발명에 따라 BOF를 탐지하기 위한 프로세스 메모리와 섀도우 메모리, 그리고 변수들에 대해 할당된 가상 주소공간의 일 예를 나타낸 도면으로, 도 13에 도시된 것처럼 함수 내 할당되는 변수는 기존의 방식과 동일하게 프로세스 메모리(1310)의 스택 공간에 그대로 할당하되 도 14에 도시된 것처럼 각 변수의 섀도우 맵핑 값을 계산하기 위해 가상주소 공간들(1410, 1420) 을 별도로 할당할 수 있다. For example, FIGS. 13 and 14 are diagrams showing an example of a process memory and a shadow memory for detecting BOF and a virtual address space allocated for variables according to the present invention. As shown in FIG. 13, the function Variables to be allocated within are allocated as they are in the stack space of the
따라서, a[0]에 대한 접근이 BOF인지 여부를 탐지하기 위해서는 도 13에서 프로세스 메모리(1310) 상 실제 주소인 '0x60'와, 도 14에서 a 배열 가상 주소공간(1410) 상 가상 주소인 '0x9060'을 이용할 수 있다. Therefore, in order to detect whether the access to a[0] is BOF, '0x60', which is a real address in the
이 때, 도 14에 도시된 것처럼 a 배열 가상 주소공간(1410)과 b 배열 가상 주소공간(1420)은 실제로 할당되는 메모리 공간이 아닌 가상 메모리 공간이므로, 도 10 내지 도 11에 도시된 것처럼 8K byte의 간격을 두고 주소공간을 할당하여도 실제로는 메모리 공간의 낭비가 발생하지 않을 수 있다. At this time, as shown in FIG. 14, the a array
본 발명에서는 이처럼 가상의 주소공간을 활용하여 함수 내 정의된 변수를 개념적으로는 1개만 유지함으로써 도 8의 스택(810)에서와 같이 스택 내에서 먼저 할당된 배열의 범위를 벗어나는 접근이 이후에 할당된 배열의 유효한 범위를 접근함으로써 BOF를 탐지하지 못하는 경우를 방지할 수 있다. In the present invention, conceptually, only one variable defined in a function is maintained using a virtual address space, so that an access outside the range of an array allocated first in the stack, as in the
또한, 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법은, 변수 별 가상 주소공간을 기준으로 제1 섀도우 맵핑 값을 획득한다(S1220).In addition, in the process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention, a first shadow mapping value is obtained based on the virtual address space for each variable (S1220).
이 때, 섀도우 맵핑은 변수 별 가상 주소공간 또는 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행할 수 있다.At this time, the shadow mapping may perform SHIFT RIGHT as many as preset bits based on the address of a specific variable in a virtual address space for each variable or a real address space for each variable.
이 때, 제1 섀도우 맵핑 값은 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the first shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a virtual address of a virtual address space for each variable.
예를 들어, 도 13 내지 도 14를 참조하여 a[0]에 대한 제1 섀도우 맵핑 값을 계산하는 경우, a[0]의 가상주소가 '0x9060'에 해당하므로 a[0]의 제1 섀도우 맵핑 값은 '0x9060'를 기준으로 4(bit)만큼 라이트(SHIFT RIGHT)를 수행한 '0x120C'에 상응할 수 있다. For example, when calculating the first shadow mapping value for a[0] with reference to FIGS. 13 and 14, since the virtual address of a[0] corresponds to '0x9060', the first shadow mapping value of a[0] The mapping value may correspond to '0x120C' performed by performing a light (SHIFT RIGHT) by 4 (bits) based on '0x9060'.
또한, 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법은, 함수 내 할당되는 변수 별 실제 주소공간을 기준으로 제2 섀도우 맵핑 값을 획득한다(S1230).In addition, in the process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention, a second shadow mapping value is obtained based on an actual address space for each variable allocated within a function (S1230).
이 때, 제2 섀도우 맵핑 값은 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the second shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a real address of a real address space for each variable.
예를 들어, 도 13 내지 도 14를 참조하여 a[0]에 대한 제2 섀도우 맵핑 값을 계산하는 경우, a[0]의 실제주소가 '0x06'에 해당하므로 a[0]의 제2 섀도우 맵핑 값은 '0x06'을 기준으로 4(bit)만큼 라이트(SHIFT RIGHT)를 수행한 '0x20'에 상응할 수 있다. For example, when calculating the second shadow mapping value for a[0] with reference to FIGS. 13 and 14, since the real address of a[0] corresponds to '0x06', the second shadow mapping value of a[0] The mapping value may correspond to '0x20' performed by performing a light (SHIFT RIGHT) by 4 (bits) based on '0x06'.
또한, 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법은, 제1 섀도우 맵핑 값과 제2 섀도우 맵핑 값을 이용하여 최종 섀도우 맵핑 값을 산출하고, 최종 섀도우 맵핑 값을 이용하여 버퍼 오버플로우(BUFFER OVERFLOW)를 탐지한다(S1240).In addition, in the process memory management method using virtual address space-based shadow mapping according to an embodiment of the present invention, a final shadow mapping value is calculated using a first shadow mapping value and a second shadow mapping value, and the final shadow mapping value is calculated. A buffer overflow is detected using the value (S1240).
이 때, 최종 섀도우 맵핑 값은 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출될 수 있다.In this case, the final shadow mapping value may be calculated by adding the first shadow mapping value and the second shadow mapping value.
예를 들어, 도 13 내지 도 14를 참조하면, a[0]의 제1 섀도우 맵핑 값인 '0x120C'에 '& 0x0F0'한 값과 a[0]의 제2 섀도우 맵핑 값인 '0x20'를 더하여 '0x20+0x00 = 0x20'에 상응하게 a[0]의 최종 섀도우 맵핑 값인 '0x20'을 산출할 수 있다. 이와 같은 방식을 이용하면, b[0]에 대한 최종 섀도우 맵핑 값으로 '0x10'이 산출될 수 있다. For example, referring to FIGS. 13 and 14, '& 0x0F0' is added to '0x120C', the first shadow mapping value of a[0], and '0x20', the second shadow mapping value of a[0]. Corresponding to 0x20+0x00 = 0x20', '0x20', which is the final shadow mapping value of a[0], can be calculated. Using this method, '0x10' can be calculated as the final shadow mapping value for b[0].
이 때, 최종 섀도우 맵핑 값이 0인 경우, 버퍼 오버플로우가 발생한 것으로 판단할 수 있다.In this case, when the final shadow mapping value is 0, it may be determined that a buffer overflow has occurred.
예를 들어, a[0]에 대한 접근의 경우, 도 13에 도시된 섀도우 메모리 상에서 a[0]의 최종 섀도우 맵핑 값인 '0x20'의 값이 0이 아니므로 정상적인 접근인 것으로 판단할 수 있다. For example, in the case of access to a[0], since the value of '0x20', which is the final shadow mapping value of a[0] in the shadow memory shown in FIG. 13, is not 0, it can be determined that the access is normal.
이하에서는 도 15 내지 도 17을 참조하여, 도 12를 통해 설명한 프로세스 메모리 관리 방식을 적용하여 소스코드로부터 오브젝트 코드(실행코드)를 생성하는 과정에 대해 상세하게 설명하도록 한다. Hereinafter, with reference to FIGS. 15 to 17, a process of generating object code (execution code) from source code by applying the process memory management method described in FIG. 12 will be described in detail.
먼저, 도 15에 도시된 소스코드(1510)를 최적화기(OPTIMIZER)(1520)으로 입력하여 IR(Intermediate Representation: 중간표현)로 변환하는 과정을 통해 도 16에 도시된 것 같은 IR 코드(1610, 1620)를 생성할 수 있다. 이 때, 도 15 내지 도 17에 도시한 코드들은 오픈소스인 LLVM의 IR표현 형식을 빌려서 표시하였다.First, the
본 발명에서는 도 12에서 설명한 것처럼 프로세스 메모리 공간과 섀도우 맵핑을 위한 가상 공간을 할당해두었다. 따라서, 도 16에 도시된 것처럼 'if (k!=0 ...'(1611, 1621)과 'if(((Addr&7)+AccessSize>k))...'(1612, 1622)에 해당하는 IR 코드들이 추가되고 어셈블리 코드로 변환됨으로써 할당된 공간들에 대한 검사를 수행할 수 있다. 최종적으로는 이 코드를 기반으로 각 플랫폼(Intel, RISC-V 등)에 대한 실행코드로 변환될 수 있다.In the present invention, as described in FIG. 12, a process memory space and a virtual space for shadow mapping are allocated. Therefore, as shown in FIG. 16, corresponding to 'if (k!=0 ...' (1611, 1621) and 'if (((Addr & 7) + AccessSize>k)) ...' (1612, 1622) By adding IR codes and converting them into assembly codes, it is possible to check allocated spaces, and finally, based on these codes, they can be converted into executable codes for each platform (Intel, RISC-V, etc.) .
도 17은 도 15 내지 도 16에서 설명한 코드와 더불어서 도 13 내지 도 14에서 생성한 섀도우 맵핑 값을 비교하여 BOF를 판별하는 과정에 해당하는 IR 코드의 일 예를 나타낸 것이다.FIG. 17 shows an example of an IR code corresponding to a process of determining a BOF by comparing shadow mapping values generated in FIGS. 13 to 14 with the codes described in FIGS. 15 to 16 .
이 때, 도 17을 참조하면, 기존의 방식에서 사용하는 기존 코드(1721, 1722)에 적은 양의 추가 코드(1711, 1712, 1713)만 추가함으로써 프로그램 수행 시간 부하를 최소화할 수 있음을 알 수 있다. At this time, referring to FIG. 17, it can be seen that the program execution time load can be minimized by adding only a small amount of additional codes (1711, 1712, 1713) to the existing codes (1721, 1722) used in the existing method. there is.
즉, 기존 방식의 문제점을 해결하기 위해 다수의 실행코드가 필요한 것이 아니라 최소한의 추가 코드(1711, 1712. 1713)만을 추가하여 해결할 수 있다는 것이다. That is, a plurality of execution codes are not required to solve the problems of the existing method, but can be solved by adding only minimal additional codes (1711, 1712, 1713).
도 17과 같은 방식을 이용하면, 기존 21개의 ASM코드에 약 11개 ASM 코드가 추가될 수 있는데, 추가되는 코드는 주로 섀도우 맵핑 값을 비교하는 연산에 관련되는 코드에 해당할 수 있다. 이렇게 추가되는 코드는 추후 HW의 지원에 의한 최적화 과정을 거치면서 거의 무시할 수 있는 수준이므로, 기존의 문제점을 해결하기 위해 필요해지는 메모리와 추가 코드의 크기를 최소화할 수 있다.17, about 11 ASM codes can be added to the existing 21 ASM codes, and the added codes may mainly correspond to codes related to an operation of comparing shadow mapping values. Since the code added in this way is almost negligible while going through an optimization process supported by the HW later, the size of memory and additional code required to solve the existing problems can be minimized.
이와 같은 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법을 통해 메모리 성능 및 오버헤드를 최소화하면서 메모리 객체에 대한 경계를 벗어난 접근을 효율적으로 탐지할 수 있다. Through this process memory management method using virtual address space-based shadow mapping, it is possible to efficiently detect accesses to memory objects outside of boundaries while minimizing memory performance and overhead.
또한, 실제 주소공간을 추가로 할당하지 않고도 레드 존(Red-Zone)의 크기 제한 없이 BOF를 탐지할 수 있으며, 기존 방식과 동일한 크기의 스택 공간과 섀도우 맵핑 공간을 이용하여 비인접 BOF를 효과적으로 탐지할 수 있다.In addition, it is possible to detect BOF without additional allocation of real address space and without limitation on the size of Red-Zone, and effectively detect non-adjacent BOF by using the same size of stack space and shadow mapping space as the existing method. can do.
도 18은 본 발명의 일실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 장치를 나타낸 도면이다.18 is a diagram illustrating an apparatus for managing process memory using virtual address space-based shadow mapping according to an embodiment of the present invention.
도 18을 참조하면, 본 발명의 실시예에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 장치는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템에서 구현될 수 있다. 도 18에 도시된 바와 같이, 컴퓨터 시스템(1800)은 버스(1820)를 통하여 서로 통신하는 하나 이상의 프로세서(1810), 메모리(1830), 사용자 입력 장치(1840), 사용자 출력 장치(1850) 및 스토리지(1860)를 포함할 수 있다. 또한, 컴퓨터 시스템(1800)은 네트워크(1880)에 연결되는 네트워크 인터페이스(1870)를 더 포함할 수 있다. 프로세서(1810)는 중앙 처리 장치 또는 메모리(1830)나 스토리지(1860)에 저장된 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1830) 및 스토리지(1860)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 ROM(1831)이나 RAM(1832)을 포함할 수 있다.Referring to FIG. 18 , an apparatus for managing process memory using virtual address space-based shadow mapping according to an embodiment of the present invention may be implemented in a computer system such as a computer-readable recording medium. As shown in FIG. 18 ,
따라서, 본 발명의 실시예는 컴퓨터로 구현된 방법이나 컴퓨터에서 실행 가능한 명령어들이 기록된 비일시적인 컴퓨터에서 읽을 수 있는 매체로 구현될 수 있다. 컴퓨터에서 읽을 수 있는 명령어들이 프로세서에 의해서 수행될 때, 컴퓨터에서 읽을 수 있는 명령어들은 본 발명의 적어도 한 가지 측면에 따른 방법을 수행할 수 있다.Accordingly, embodiments of the present invention may be implemented as a computer-implemented method or a non-transitory computer-readable medium in which instructions executable by the computer are recorded. When executed by a processor, the computer readable instructions may perform a method according to at least one aspect of the present invention.
프로세서(1820)는 함수 내 할당되는 변수 별 가상 주소공간을 할당한다.The
이 때, 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당될 수 있다.In this case, the virtual address space for each variable may be allocated so as to be separated by an address space having a predetermined size.
또한, 프로세서(1820)는 변수 별 가상 주소공간을 기준으로 제1 섀도우 맵핑 값을 획득한다.Also, the
이 때, 제1 섀도우 맵핑 값은 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the first shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a virtual address of a virtual address space for each variable.
프로세서(1820)는 함수 내 할당되는 변수 별 실제 주소공간을 기준으로 제2 섀도우 맵핑 값을 획득한다.The
이 때, 제2 섀도우 맵핑 값은 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응할 수 있다.In this case, the second shadow mapping value may correspond to a shadow memory address value of a location where shadow mapping is performed based on a real address of a real address space for each variable.
이 때, 섀도우 맵핑은 변수 별 가상 주소공간 또는 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행할 수 있다.At this time, the shadow mapping may perform SHIFT RIGHT as many as preset bits based on the address of a specific variable in a virtual address space for each variable or a real address space for each variable.
프로세서(1820)는 제1 섀도우 맵핑 값과 제2 섀도우 맵핑 값을 이용하여 최종 섀도우 맵핑 값을 산출하고, 최종 섀도우 맵핑 값을 이용하여 버퍼 오버플로우(BUFFER OVERFLOW)를 탐지한다.The
이 때, 최종 섀도우 맵핑 값은 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출될 수 있다.In this case, the final shadow mapping value may be calculated by adding the first shadow mapping value and the second shadow mapping value.
이 때, 최종 섀도우 맵핑 값이 0인 경우, 버퍼 오버플로우가 발생한 것으로 판단할 수 있다.In this case, when the final shadow mapping value is 0, it may be determined that a buffer overflow has occurred.
메모리(1830)는 제1 섀도우 맵핑 값 및 제2 섀도우 맵핑 값을 저장한다.The
이와 같은 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 장치를 이용함으로써 메모리 성능 및 오버헤드를 최소화하면서 메모리 객체에 대한 경계를 벗어난 접근을 효율적으로 탐지할 수 있다. By using the process memory management device using such virtual address space-based shadow mapping, it is possible to efficiently detect access to a memory object out of bounds while minimizing memory performance and overhead.
또한, 실제 주소공간을 추가로 할당하지 않고도 레드 존(Red-Zone)의 크기 제한 없이 BOF를 탐지할 수 있으며, 기존 방식과 동일한 크기의 스택 공간과 섀도우 맵핑 공간을 이용하여 비인접 BOF를 효과적으로 탐지할 수 있다.In addition, it is possible to detect BOF without additional allocation of real address space and without limitation on the size of Red-Zone, and effectively detect non-adjacent BOF by using the same size of stack space and shadow mapping space as the existing method. can do.
이상에서와 같이 본 발명에 따른 가상 주소공간 기반의 섀도우 맵핑을 이용한 프로세스 메모리 관리 방법 및 이를 이용한 장치는 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.As described above, the process memory management method using virtual address space-based shadow mapping and the apparatus using the same according to the present invention are not limited to the configuration and method of the above-described embodiments, but the above-described embodiments These may be configured by selectively combining all or part of each embodiment so that various modifications can be made.
310, 330: 유효한 메모리
320, 340: 유효하지 않은 메모리
410: 추가 메모리
510, 520, 1510: 소스코드
810: 레드존이 포함된 스택
820: 2배 크기의 레드존이 포함된 스택
1310: 프로세스 메모리
1320: a[0] 최종 섀도우 맵핑 값
1330: b[0] 최종 섀도우 맵핑 값
1410: a 배열 가상 주소공간
1411: a[0] 제1 섀도우 맵핑 값
1420: b 배열 가상 주소공간
1421: b[0] 제1 섀도우 맵핑 값
1520: 최적화기(OPTIMIZER)
1610, 1611, 1612, 1620, 1621, 1622: IR 코드
1711, 1712, 1713: 추가된 코드
1721, 1722: 기존 코드
1800: 컴퓨터 시스템
1810: 프로세서
1820: 버스
1830: 메모리
1831: 롬
1832: 램
1840: 사용자 입력 장치
1850: 사용자 출력 장치
1860: 스토리지
1870: 네트워크 인터페이스
1880: 네트워크310, 330:
410:
810: Stack with red zone 820: Stack with double-sized red zone
1310: process memory 1320: a[0] final shadow mapping value
1330: b[0] final shadow mapping value 1410: a array virtual address space
1411: a[0] first shadow mapping value 1420: b array virtual address space
1421: b[0] first shadow mapping value 1520: optimizer (OPTIMIZER)
1610, 1611, 1612, 1620, 1621, 1622: IR codes
1711, 1712, 1713: Added
1800
1820: Bus 1830: Memory
1831: Rom 1832: Ram
1840: user input device 1850: user output device
1860: storage 1870: network interface
1880: network
Claims (14)
상기 변수 별 가상 주소공간을 기준으로 제1 섀도우 맵핑 값을 획득하는 단계;
함수 내 할당되는 변수 별 실제 주소공간을 기준으로 제2 섀도우 맵핑 값을 획득하는 단계; 및
상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 이용하여 최종 섀도우 맵핑 값을 산출하고, 상기 최종 섀도우 맵핑 값을 이용하여 버퍼 오버플로우(BUFFER OVERFLOW)를 탐지하는 단계
를 포함하는 것을 특징으로 하는 프로세스 메모리 관리 방법.Allocating a virtual address space for each variable allocated within the function;
obtaining a first shadow mapping value based on the virtual address space for each variable;
obtaining a second shadow mapping value based on an actual address space for each variable allocated within the function; and
calculating a final shadow mapping value using the first shadow mapping value and the second shadow mapping value, and detecting a buffer overflow using the final shadow mapping value;
Process memory management method comprising a.
상기 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당되는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
The process memory management method of claim 1 , wherein the virtual address space for each variable is allocated so as to be separated by an address space having a predetermined size.
상기 제1 섀도우 맵핑 값은
상기 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응하는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
The first shadow mapping value is
and corresponding to a shadow memory address value of a location where shadow mapping is performed based on a virtual address of the virtual address space for each variable.
상기 제2 섀도우 맵핑 값은
상기 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응하는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
The second shadow mapping value is
and corresponding to a shadow memory address value of a location where shadow mapping is performed based on an actual address of the real address space for each variable.
상기 섀도우 맵핑은
상기 변수 별 가상 주소공간 또는 상기 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행하는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
The shadow mapping
The process memory management method of claim 1 , wherein SHIFT RIGHT is performed by a preset number of bits based on an address of a specific variable in the virtual address space for each variable or the real address space for each variable.
상기 최종 섀도우 맵핑 값은
상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출되는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
The final shadow mapping value is
The process memory management method of claim 1 , wherein the process memory management method is calculated by adding the first shadow mapping value and the second shadow mapping value.
상기 최종 섀도우 맵핑 값이 0인 경우, 상기 버퍼 오버플로우가 발생한 것으로 판단하는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 1,
and determining that the buffer overflow has occurred when the final shadow mapping value is 0.
상기 제1 섀도우 맵핑 값 및 상기 제2 섀도우 맵핑 값을 저장하는 메모리
를 포함하는 것을 특징으로 하는 프로세스 메모리 관리 장치.Allocates a virtual address space for each variable allocated within the function, obtains a first shadow mapping value based on the virtual address space for each variable, and obtains a second shadow mapping value based on the actual address space for each variable allocated within the function. a processor that calculates a final shadow mapping value using the first shadow mapping value and the second shadow mapping value, and detects a buffer overflow using the final shadow mapping value; and
A memory for storing the first shadow mapping value and the second shadow mapping value
Process memory management apparatus comprising a.
상기 변수 별 가상 주소공간은 기설정된 크기의 주소 공간만큼 떨어지도록 할당되는 것을 특징으로 하는 프로세스 메모리 관리 장치.The method of claim 8,
The process memory management apparatus of claim 1 , wherein the virtual address space for each variable is allocated so as to be separated by an address space having a predetermined size.
상기 제1 섀도우 맵핑 값은
상기 변수 별 가상 주소공간의 가상 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응하는 것을 특징으로 하는 프로세스 메모리 관리 장치.The method of claim 8,
The first shadow mapping value is
The process memory management apparatus according to claim 1 , wherein a virtual address of the virtual address space for each variable corresponds to a shadow memory address value of a location where shadow mapping is performed.
상기 제2 섀도우 맵핑 값은
상기 변수 별 실제 주소공간의 실제 주소를 기준으로 섀도우 맵핑을 수행한 위치의 섀도우 메모리 주소 값에 상응하는 것을 특징으로 하는 프로세스 메모리 관리 장치.The method of claim 8,
The second shadow mapping value is
The process memory management apparatus according to claim 1 , wherein a shadow memory address value corresponding to a location where shadow mapping is performed based on an actual address of the real address space for each variable.
상기 섀도우 맵핑은
상기 변수 별 가상 주소공간 또는 상기 변수 별 실제 주소공간에서 특정 변수의 주소를 기준으로 기설정된 비트(bit)만큼 쉬프트 라이트(SHIFT RIGHT)를 수행하는 것을 특징으로 하는 프로세스 메모리 관리 장치.The method of claim 8,
The shadow mapping
The apparatus for managing a process memory according to claim 1 , wherein SHIFT RIGHT is performed by a predetermined number of bits based on an address of a specific variable in the virtual address space for each variable or the real address space for each variable.
상기 최종 섀도우 맵핑 값은
상기 제1 섀도우 맵핑 값과 상기 제2 섀도우 맵핑 값을 더하여 산출되는 것을 특징으로 하는 프로세스 메모리 관리 장치.The method of claim 8,
The final shadow mapping value is
The process memory management apparatus, characterized in that calculated by adding the first shadow mapping value and the second shadow mapping value.
상기 최종 섀도우 맵핑 값이 0인 경우, 상기 버퍼 오버플로우가 발생한 것으로 판단하는 것을 특징으로 하는 프로세스 메모리 관리 방법.The method of claim 8,
and determining that the buffer overflow has occurred when the final shadow mapping value is 0.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210187950A KR20230098951A (en) | 2021-12-27 | 2021-12-27 | Method for managing process memory using shadow mapping virtual address space and method using the same |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210187950A KR20230098951A (en) | 2021-12-27 | 2021-12-27 | Method for managing process memory using shadow mapping virtual address space and method using the same |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230098951A true KR20230098951A (en) | 2023-07-04 |
Family
ID=87156289
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210187950A KR20230098951A (en) | 2021-12-27 | 2021-12-27 | Method for managing process memory using shadow mapping virtual address space and method using the same |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR20230098951A (en) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200111909A (en) | 2019-03-20 | 2020-10-05 | (주)아이넷캅 | A method and apparatus for efficiently detecting a vulnerability in a memory of a heap area |
-
2021
- 2021-12-27 KR KR1020210187950A patent/KR20230098951A/en unknown
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20200111909A (en) | 2019-03-20 | 2020-10-05 | (주)아이넷캅 | A method and apparatus for efficiently detecting a vulnerability in a memory of a heap area |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200133888A1 (en) | Apparatus and method for handling page protection faults in a computing system | |
US7752417B2 (en) | Dynamic selection of memory virtualization techniques | |
US7822941B2 (en) | Function-based virtual-to-physical address translation | |
US7827381B2 (en) | Hybrid techniques for memory virtualization in a computer system | |
US7917710B2 (en) | Memory protection in a computer system employing memory virtualization | |
US9779034B2 (en) | Protection key management and prefixing in virtual address space legacy emulation system | |
JP7291149B2 (en) | Controlling protection tag checking on memory accesses | |
US8266605B2 (en) | Method and system for optimizing performance based on cache analysis | |
KR20090087689A (en) | Multi channel flash memory system and access method thereof | |
US20200327071A1 (en) | Prefetch support with address space randomization | |
US8806146B2 (en) | Method and system to accelerate address translation | |
KR20200107997A (en) | Multi guard tag setting command | |
US10909045B2 (en) | System, method and apparatus for fine granularity access protection | |
US20210157647A1 (en) | Numa system and method of migrating pages in the system | |
TWI787451B (en) | Method, apparatus, computer program, and storage medium for data processing | |
KR20230098951A (en) | Method for managing process memory using shadow mapping virtual address space and method using the same | |
KR100843134B1 (en) | Apparatus and Method of handling interrupt disabled section and Apparatus and Method of pinning page | |
US20200174920A1 (en) | Method for randomizing address space layout of embedded system based on hardware and apparatus for the same | |
JPH05108488A (en) | System and device for controlling firmware program storing area |