KR102044075B1 - 메모리 오류 감지 방법 - Google Patents

메모리 오류 감지 방법 Download PDF

Info

Publication number
KR102044075B1
KR102044075B1 KR1020170165396A KR20170165396A KR102044075B1 KR 102044075 B1 KR102044075 B1 KR 102044075B1 KR 1020170165396 A KR1020170165396 A KR 1020170165396A KR 20170165396 A KR20170165396 A KR 20170165396A KR 102044075 B1 KR102044075 B1 KR 102044075B1
Authority
KR
South Korea
Prior art keywords
memory
page
virtual memory
setting
virtual
Prior art date
Application number
KR1020170165396A
Other languages
English (en)
Other versions
KR20190065841A (ko
Inventor
신인식
한욱현
조병길
이병영
송청위
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020170165396A priority Critical patent/KR102044075B1/ko
Publication of KR20190065841A publication Critical patent/KR20190065841A/ko
Application granted granted Critical
Publication of KR102044075B1 publication Critical patent/KR102044075B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0292User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages

Abstract

본 발명은 메모리 오류 감지 방법에 관한 것으로서, 더 상세하게는 대규모 어플리케이션과 퍼즈 테스팅(fuzz testing)에 적용할 수 있는 영역 기반 메모리 오류 감지 방법에 대한 것이다.
본 발명에 의하면, 종래의 영역 기반 메모리 오류 감지 기법으로 찾을 수 없었던 메모리 오류들을 감지 할 수 기법을 제시하면서도 영역 기반 메모리 특유의 실용성을 유지시켜 대규모 어플리케이션과 퍼즈 테스팅에 적용이 가능하도록 하며, 또한, 대규모 어플리케이션 및 퍼즈 테스팅에서 종래의 영역 기반 메모리 오류 감지 기법보다 더 많은 메모리 취약점을 찾아, 메모리 액세스 오류를 방지한다.

Description

메모리 오류 감지 방법{MEMORY ERROR DETECTION METHOD}
본 발명은 메모리 오류 감지 방법에 관한 것으로서, 더 상세하게는 대규모 어플리케이션과 퍼즈 테스팅(fuzz testing)에 적용할 수 있는 영역 기반 메모리 오류 감지 방법에 대한 것이다.
메모리 오류는 C와 C++같은 안전하지 않은 메모리 사용 언어들에서 가장 흔한 취약점 중에 하나이다. 이러한 메모리 오류를 통해 공격자는 시스템의 정지를 일으키거나 시스템을 제어할 수 있다. 메모리 오류의 종류로는 공간적 메모리 오류와 시간적 메모리 오류가 있다. 공간적 메모리 오류의 대표적인 예로는 버퍼오버플로가 있으며, 시간적 메모리 오류의 대표적인 예로는 허상 포인터 접근이 있다. 이와 같은 오류를 막기 위한 메모리 오류 감지 기법에는 포인터 기반 감지, 객체 기반 감지, 영역 기반 감지 기법이 있다. 하지만, 대규모 어플리케이션의 실행과 퍼즈 테스팅을 위해서는 호환성 및 성능의 이유로 영역 기반 탐지 기법이 많이 사용되고 있다.
도 1은 영역 기반 메모리 오류 감지 기법의 개념을 보여주는 도면이다.
영역 기반 탐지 기법은 전체 가상 메모리(10) 주소의 접근 가능 여부를 압축하여 저장해 놓고, 메모리 접근 시 해당 주소가 접근이 가능한지 아닌지를 검사한다. 접근 가능 여부를 판단하는 정보를 갖고 있는 메모리를 쉐도우 메모리(20)라 한다.
영역 기반 탐지 기법은 객체(11) 사이에, 객체의 접근이 불가능한 영역(이하 '레드존(red zone)'이라 한다)(12)을 두어서 공간적 메모리 오류를 감지하고, 메모리 할당 해제와 같이 객체의 수명이 끝나면 해당하는 객체의 주소를 레드존(13)으로 만들어 한동안 접근이 불가능하게 한다. 최근에 이러한 영역 기반 감지기법을 활용하는 컴파일러 기술들이 개발되었다. 이와 같은 영역 기반 감지 기법은 포인터의 메모리 레이아웃이 변하지 않아, 호환성이 높아 실용적인 장점이 있다.
그러나 메모리 할당 해제된 메모리의 경우, 그 영역에 쓰여질 수 없는 객체(14)가 오류로 라이트(write) 될 위험이 있다. 즉, 예를 들어 가상 메모리 주소 1~8이 객체영역1이고, 가상 메모리 주소 9~16이 레드존이며, 현재 가상 메모리 주소 17~24(객체영역2)가 할당 해제된 상태인 경우에, 사용자가 20의 주소 크기를 차지하는 객체 'A'를 객체영역1에 쓰는(write) 경우, 객체 'A'는 객체영역1인 가상 메모리 주소 1~8과 객체영역2인 가상 메모리 주소 17~20에 쓰여지게 된다. 이때 객체영역2에는 객체영역1과 다른 객체가 씌여질 영역이므로, 객체영역2에 씌여진 객체 'A'는 오류가 발생한 것이다.
이를 방지하기 위하여, 기존의 영역 기반 메모리 감지 기법에서는 할당 해제 요청을 받으면, 해당하는 메모리 영역을 할당 해제하지 않고, 격리하여 놓고(13) 격리 공간이 가득 찬 후에만, 해당하는 영역을 다시 사용하도록 하였다. 그러나 이 방법은 실제 물리 메모리를 차지하기 때문에 실용적이지 않은 문제점이 있었다.
메모리의 용량이 무한하지 않기 때문에 접근 불가능한 영역이 크지 않고, 수명이 끝난 객체의 주소도 재사용을 해야 하기 때문에, 다른 감지 기법보다 오류 감지 능력이 떨어진다. 또한, 레드존과 접근 가능 여부의 압축된 정보에 대한 추가적인 메모리 공간이 필요하다.
이러한 기술들의 개발에도 불구하고 영역 기반 메모리 오류 감지 기법은 최근의 비선형적 메모리 접근에 의한 오류와 같이 새로운 버그들을 감지함에 있어서 어려움을 겪고 있다.
이러한 문제는 레드존의 범위를 넓히면 해결이 되지만, 종래 가상 메모리는, 물리 메모리와 그 배치, 주소 할당은 다르더라도 물리 메모리에서 객체 또는 레드존이 차지하는 크기는 가상 메모리에서 차지하는 크기와 동일하므로, 물리적 메모리의 한계로 인하여 가상 메모리 상에서도 레드존의 크기를 많이 키우는 것은 불가능하고, 레드존의 크기가 커짐에 따라 물리적 메모리 낭비가 심해져 실용적이지 않았다.
이와 같이, 기존의 영역 기반 메모리 오류 감지 기법에 있어서, 감지 능력과 실용성은 균형 관계에 있다. 따라서, 감지 능력을 높이면서 대규모 어플리케이션과 퍼즈 테스팅을 위해 사용할 수 있도록 실용적인 메모리 오류 감지를 수행하기는 매우 어려운 문제점이 있었다.
1. Serebryany, Konstantin, et al. "AddressSanitizer: A Fast Address Sanity Checker." USENIX Annual Technical Conference. 2012. 2. Microsoft Support. How to use pageheap.exe in windows xp, windows 2000, and windows server 2003. https://support.microsoft.com/en-us/kb/286470, 2009
본 발명은 이와 같은 문제점을 해결하기 위해 창안된 것으로서, 기존 영역 기반 메모리 오류 감지 기법을 발전시켜, 객체 사이에 큰 레드존을 제공하면서 그에 따른 메모리 낭비를 줄여, 오류 감지 능력을 향상시키면서 대규모 어플리케이션과 퍼즈 테스팅(fuzz testing)에 사용할 수 있는 정도의 실용성을 가진 메모리 오류 감지 방법을 제공하는 데 목적이 있다.
이와 같은 목적을 달성하기 위하여 본 발명에 따른 데이터 접근시의 메모리 오류를 감지하는 방법은, (a) 하나의 가상 메모리 페이지를 하나의 물리 메모리 페이지에 매핑하는 단계; (b) 상기 가상 메모리 페이지 내부의 데이터 접근금지 영역(이하 '페이지 내부 레드존'이라 한다)을 설정하는 단계; (c) 상기 가상 메모리 페이지 이후 일정 영역을 데이터 접근금지 영역(이하 '페이지 단위 레드존'이라 한다)으로 설정하는 단계; (d) 상기 페이지 단위 레드존 이후 일정 영역을 새로운 가상 메모리 페이지로서 상기 물리 메모리 페이지에 매핑하는 단계; (e) 상기 가상 메모리 페이지 내부에, 페이지 내부 레드존을 설정하는 단계; (f) 상기 가상 메모리 페이지 이후 일정 영역에, 페이지 단위 레드존을 설정하는 단계; 및 (g) 새로운 가상 메모리 페이지 설정시마다 상기 단계(d) 내지 단계(f)를 수행하는 단계를 포함하고, 상기 단계(c) 및 단계(f)의 상기 페이지 단위 레드존 설정은, 쉐도우 메모리 상에 접근가능여부를 설정하거나 또는 추가적인 메모리 상에 접근가능여부를 설정하지 않고, 운영체제(OS)에 상기 페이지 단위 레드존에 대한 접근금지 영역 설정을 요청하여, 상기 운영체제의 상기 페이지 단위 레드존에 대한 접근금지 영역 설정에 의해 이루어지며, 상기 단계(c) 이후, (i) 데이터(객체)의 상기 페이지 단위 레드존에의 접근이 있을 경우, 신호 처리기(signal handler)에서 이를 감지하여 메모리 오류가 발생했음을 알려주는 단계를 더 포함한다.
상기 단계(b) 및 단계(e)의 페이지 내부 레드존 설정은, 메모리 상의 일정 영역에 할당된 쉐도우(shadow) 메모리 영역에서, 각 메모리 주소의 접근 가능여부를 설정함으로써 이루어질 수 있다.
상기 각 메모리 주소의 접근 가능여부 설정은, 상기 쉐도우 메모리 영역에서, 각 메모리 주소에 해당하는 비트(bit)를 0 또는 1로 설정함에 의해 이루어질 수 있다.
상기 쉐도우 메모리 영역은, 물리 메모리 및 가상 메모리 상에 동시에 설정될 수 있다.
상기 단계(b) 이후, (h) 데이터(객체)의 상기 가상 메모리 접근(access)이 있을 경우, 상기 접근하는 메모리 주소에 해당하는, 쉐도우 메모리 상의 접근금지여부 설정에 의하여 상기 데이터의 페이지 내부 레드존 접근에 의한 메모리 오류 발생 여부를 판별하는 단계를 더 포함할 수 있다.
삭제
상기 단계(a) 및 단계(d)에서, 가상 메모리 페이지의 물리 메모리 페이지로의 매핑은, 시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수를 호출함으로써 이루어질 수 있다.
상기 단계(d)에서, 시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수가, 기존의 가상 메모리 페이지에 대하여 할당해제할 크기를 지정하도록 요청하는 경우, 할당해제할 크기를 0으로 설정함으로써 기존의 가상 메모리 페이지를 그대로 유지한 상태로 새로운 가상 메모리 페이지를, 상기 기존의 가상 메모리 페이지가 매핑되어 있는 상기 물리 메모리 페이지로 매핑시킬 수 있다.
상기 단계(d)에서, 시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 상기 매핑 함수 호출시, 새로운 가상 메모리 페이지를, 새로운 물리 메모리 페이지가 아닌 상기 기존의 가상 메모리 페이지가 매핑되어 있는 물리 메모리 페이지로 매핑될 수 있도록 하는 파라미터를 설정할 수 있다.
본 발명에 의하면, 종래의 영역 기반 메모리 오류 감지 기법으로 찾을 수 없었던 메모리 오류들을 감지할 수 기법을 제시하면서도 영역 기반 메모리 특유의 실용성을 유지시켜 대규모 어플리케이션과 퍼즈 테스팅에 적용이 가능하도록 하며, 또한, 대규모 어플리케이션 및 퍼즈 테스팅에서 종래의 영역 기반 메모리 오류 감지 기법보다 더 많은 메모리 취약점을 찾아, 메모리 액세스 오류를 방지하는 효과가 있다.
도 1은 영역 기반 메모리 오류 감지 기법의 개념을 보여주는 도면.
도 2는 64-bit 메모리 주소를 활용한 공간적, 시간적 메모리 오류 감지 능력 향상과 다대일 메모리 페이지 매핑을 통한 실용성 확보 개념을 보여주는 도면.
도 3은 다대일 메모리 페이지 매핑의 방법을 나타내는 도면.
도 4는 본 발명의 메모리 오류 감지 방법을 수행하는 순서도.
도 5는 프로토타입의 실행 성능을 나타내는 그래프.
도 6은 프로토타입의 퍼징(fuzzing) 성능을 나타내는 그래프.
이하 첨부된 도면을 참조로 본 발명의 바람직한 실시예를 상세히 설명하기로 한다. 이에 앞서, 본 명세서 및 청구범위에 사용된 용어나 단어는 통상적이거나 사전적인 의미로 한정해서 해석되어서는 아니되며, 발명자는 그 자신의 발명을 가장 최선의 방법으로 설명하기 위해 용어의 개념을 적절하게 정의할 수 있다는 원칙에 입각하여 본 발명의 기술적 사상에 부합하는 의미와 개념으로 해석되어야만 한다. 따라서, 본 명세서에 기재된 실시예와 도면에 도시된 구성은 본 발명의 가장 바람직한 일 실시예에 불과할 뿐이고 본 발명의 기술적 사상을 모두 대변하는 것은 아니므로, 본 출원시점에 있어서 이들을 대체할 수 있는 다양한 균등물과 변형예들이 있을 수 있음을 이해하여야 한다.
도 2는 64-bit 메모리 주소를 활용한 공간적, 시간적 메모리 오류 감지 능력 향상과 다대일 메모리 페이지 매핑을 통한 실용성 확보 개념을 보여주는 도면이고, 도 3은 다대일 메모리 페이지 매핑의 방법을 나타내는 도면이다.
이하에서는, 도 2 및 도 3을 참조하여 본 발명의 메모리 오류 감지 방법을 설명한다.
도 2의 큰 가상 메모리 영역을 차지하는 레드존(120)을 사용하여 공간적인 메모리 오류 감지 능력을 향상시킨다. 이러한 레드존(120)은 가상 메모리 페이지 내부의 레드존(212, 도 3 참조)과 페이지 단위의 레드존(220, 도 3 참조)으로 나누어진다. 이 차이는 도 3에 상세히 나와 있다.
도 2의 화살표(140)는 객체를 가상 메모리 영역 끝까지 사용했을 때, 다시 가상 메모리 영역 앞으로 돌아와 기존의 사용 영역을 재사용하게 되는 경우를 나타낸다. 이 경우, 레드존(120) 영역이 매우 크다면, 최대한 가상 메모리 주소의 재사용 시간을 늦추게 되고, 이와 같이 늦취진 시간 동안에 시간적 메모리 오류의 감지 능력을 향상시킨다. 또한 큰 크기의 메모리 주소값, 일 실시예로서, 64-bit 메모리 주소를 최대한 활용하여 시간적 오류 메모리 감지 능력 향상시킬 수도 있다.
기존의 영역 기반 메모리 감지 기법에서는 할당 해제 요청을 받으면, 해당하는 메모리 영역을 할당 해제하지 않고, 격리하여 놓고 격리 공간이 가득 차면 해당하는 영역을 다시 사용하도록 하였다. 그러나 이 방법은 실제 물리 메모리를 차지하기 때문에 실용적이지 않다. 도 2의 객체가 할당 해제된다면 해당하는 가상 메모리 주소는 모든 주소가 다 쓰일 때까지 사용되지 않으며 물리 메모리 영역은 다른 객체에게 할당 될 수 있다.
앞서 전술한 바와 같은, 물리 메모리와 가상 메모리 간에 객체 또는 레드존이 차지하는 영역의 크기가 일대일로 동일하기 때문에 레드존 영역을 크게 할당할 수 없는 문제점을 해결하기 위해, 도 2 및 도 3의 다대일 매핑을 통해 물리 메모리 낭비를 줄여 실용성을 확보한다. 여기서 다대일 매핑이란, 가상 메모리상의 다수의 페이지가 물리 메모리상의 한개의 페이지와 매핑된다는 것이다. 물리 메모리의 한개의 페이지에는 레드존 없이 오직 객체만이 할당되며, 가상 메모리 상에서는 물리 메모리의 각 객체들과, 각 객체들 사이에는 큰 영역을 차지하는 레드존이 할당된다. 가상 메모리에서 객체(211)가 포함된 각 페이지(210) 내부에는 레드존(이하 '페이지 내부 레드존'이라 한다)(212)이 할당되고, 각 페이지 사이에도 레드존(이하 '페이지 단위 레드존'이라 한다)(220)이 할당된다. 즉, 레드존은 가상 주소 상에서만 존재하고, 실제 레드존이 차지하는 물리 메모리는 없게 된다. 여러 가상 메모리의 페이지를 하나의 물리 메모리 페이지에 매핑하여 레드존에 의한 물리 메모리 공간의 낭비를 없애는 장점이 있다. 이때, 해당하는 레드존이 접근이 불가능하다는 정보는 압축되어 저장되어 있다.
도 3의 ①과 같이 처음에는 하나의 가상 메모리 페이지를 하나의 물리 메모리 페이지에 매핑한다. 이때, 일 실시예로서, mmap 시스템 콜을 통해서 매핑할 수 있다. 그 후에 도 3의 ②와 같이 새로운 가상 메모리 페이지를 기존에 매핑되어 있던 물리 메모리 페이지에 매핑한다. 이때, 일 실시예로서 mremap 시스템 콜을 사용할 수 있다. mremap 시스템 콜은 가상 페이지들을 할당해제하고 새로운 가상 페이지들을 제공하는 시스템 콜이다. 할당을 해제할 크기를 지정할 수 있는데, 여기서 이 크기를 0으로 하면 기존의 가상 페이지들은 그대로 유지가 되면서 새로운 가상 페이지들은 기존의 가상 페이지와 같은 물리 메모리 페이지와 매핑된다. 기존의 가상 페이지는 모든 프로세스가 공유하는 페이지여야 한다. 그러기 위해서 도 3의 ①에서 mmap 시스템 콜 사용 시에 MAP_SHARED로 할당한다. 기존의 페이지가 MAP_SHARED로 할당된 페이지여야 새로운 가상 페이지가 새로운 물리 페이지와 매핑되지 않고, 기존의 가상 페이지와 매핑된 물리 페이지와 매핑된다.
전술한 바와 같이 도 3에서 레드존 영역은 두 가지로 나뉠 수 있다. 할당된 객체(211)의 가상 메모리 페이지 내부에 있는 레드존(페이지 내부 레드존)(212)과 할당된 객체가 없는 가상 메모리 페이지 전체를 차지하는 레드존(페이지 단위 레드존)(220)이다.
페이지 단위 레드존(220)에 대하여, 쉐도우 메모리(230)에 접근 불가능 정보를 저장하려면 많은 물리적 메모리 낭비가 발생한다. 이를 위해서 운영체제(operating system, OS)의 가상 메모리 페이지 권한을 이용하여 해당하는 페이지 단위 레드존을 모두 접근 불가능하게 한다. 이후에 페이지 단위 레드존에 대한 접근을 신호 처리기(signal handler)에서 잡아내어 메모리 오류가 발생했음을 알 수 있다. 이 기술을 통해서 레드존의 사이즈는 물리 메모리의 낭비가 거의 없이 매우 커질 수 있으며, 이에 따라 메모리 접근 오류를 감지할 가능성이 매우 커져서 오류 데이터가 씌여지는 것을 방지하게 된다. 즉, 운영체제는 가상 페이지 단위의 권한을 제공하는데, 하나의 페이지가 모두 레드존인 경우, 이에 대한 접근 불가능 정보를 따로 저장하지 않고, 페이지의 접근 권한을 막아 해당하는 페이지에 대한 접근이 이루어질 경우 신호 처리기에서 해당하는 접근을 감지한다. 이 부분은 기존의 운영체제가 제공하는 기능으로, 추가적인 메모리 공간이 전혀 필요하지 않다.
도 4는 본 발명의 메모리 오류 감지 방법을 수행하는 순서도이다.
도 2 및 도 3을 참조하여 설명한 바를 토대로, 본 발명의 메모리 오류 감지 방법을 수행하는 방법을 순서도를 이용하여 정리하면 다음과 같다.
하나의 가상 메모리 페이지를 하나의 물리 메모리 페이지에 매핑한다(S401). 전술한 바와 같이 이와 같은 매핑은, 시스템에서 제공하는 함수를 호출하여 수행시킬 수 있다. 일 실시예로서, 'mmap'와 같은 함수를 호출할 수 있다
이러한 가상 메모리 페이지 내부에, 데이터 접근금지 영역(이하 '페이지 내부 레드존'이라 한다)을 설정한다(S402). 이러한 페이지 내부 레드존은 메모리 상의 일정 영역에 할당된 쉐도우(shadow) 메모리 영역에서, 각 메모리 주소의 접근 가능여부를 설정하는 방식으로 구현할 수 있다. 이러한 쉐도우 메모리 영역의 예는 도 1(20), 도 2(130), 도 3(230)에 도시되어 있으며, 각 메모리 주소에 해당하는 비트(bit)를 0 또는 1로 설정함에 의해 페이지 내부 레드존 또는 객체 영역임을 구분하여 설정할 수 있다. 도 2 및 도 3에는 쉐도우 메모리 영역을 편의상 가상 메모리 영역에만 도시하였으나, 실제로는 물리 메모리 및 가상 메모리 상에 동시에 설정된다.
가상 메모리 페이지 이후 일정 영역을 데이터 접근금지 영역(이하 '페이지 단위 레드존'이라 한다)으로 설정한다(S403). 페이지 단위 레드존은, 객체 영역이 존재하지 않는다.
이러한 페이지 단위 레드존을 설정할 때는, 상기 쉐도우 메모리 상에 접근가능여부를 설정하거나 또는 추가적인 메모리 상에 접근가능여부를 설정하지 않고, 운영체제(OS)에 상기 페이지 단위 레드존에 대한 접근금지 영역 설정을 요청하여, 상기 운영체제의 상기 페이지 단위 레드존에 대한 접근금지 영역 설정에 의해 이루어진다. 즉, 페이지 단위 레드존 설정을 위해서는 추가적인 물리 메모리를 전혀 필요로 하지 않아, 물리 메모리의 소모를 방지하게 된다.
이후, 페이지 단위 레드존 이후 일정 영역을 새로운 가상 메모리 페이지로서 상기 물리 메모리 페이지에 매핑한다(S404). 이때의 물리 메모리 페이지는 단계 S401에서 매핑한 그 물리 메모리 페이지로서, 가상 메모리 페이지와 물리 메모리 페이지 간에 다대일 매핑이 이루어지는 것이다.
가상 메모리 페이지의 물리 메모리 페이지로의 매핑 역시, 시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수를 호출함으로써 이루어질 수 있는데, 일 실시예로서 mremap 함수를 호출할 수 있다.
시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수가, mremap과 같이, 기존의 가상 메모리 페이지에 대하여 할당해제할 크기를 지정하도록 요청할 수 있는데, 이러한 경우에는 할당해제할 크기를 0으로 설정함으로써 기존의 가상 메모리 페이지를 그대로 유지한 상태로 새로운 가상 메모리 페이지를, 상기 기존의 가상 메모리 페이지가 매핑되어 있는 상기 물리 메모리 페이지로 매핑시킬 수 있다.
또한 시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 상기 매핑 함수 호출시, 새로운 가상 메모리 페이지를, 새로운 물리 메모리 페이지가 아닌 상기 기존의 가상 메모리 페이지가 매핑되어 있는 물리 메모리 페이지로 매핑될 수 있도록 하는 파라미터를 설정할 수 있다. 예를 들어 mmap 함수를 호출시 파라미터를 MAP_SHARED로 설정할 수 있다.
새로운 가상 메모리 페이지 내부에도, 페이지 내부 레드존을 설정하며(S405), 이에 대하여는 위 단계 S402에서 설명한 바와 동일하다.
상기 가상 메모리 페이지 이후 일정 영역에도, 페이지 단위 레드존을 설정하며(S406), 이에 대하여는 위 단계 S403에서 설명한 바와 동일하다.
이후, 새로운 가상 메모리 페이지 설정시마다 상기 단계 S404 ~ 단계 S406을 수행한다.
이와 같은 가상 메모리 페이지 매핑 후, 데이터(객체)의 상기 가상 메모리 접근(access)이 있을 경우, 접근하는 메모리 주소에 해당하는, 쉐도우 메모리 상의 접근금지여부 설정에 의하여 상기 데이터의 페이지 내부 레드존 접근에 의한 메모리 오류 발생 여부를 판별하여, 페이지 내부 레드존에의 접근이면 메모리 오류로 판단하여 메모리 접근을 불허하게 된다(S407).
또는 전술한 바와 같이 데이터(객체)의 상기 페이지 단위 레드존에의 접근이 있을 경우에는, 쉐도우 메모리 상의 접근금지여부 설정을 체크할 필요없이, 신호 처리기(signal handler)에서 이를 감지하여 메모리 오류가 발생했음을 알려주게 되고, 이 경우 메모리 접근을 불허하게 된다(S408).
도 5는 프로토타입의 실행 성능을 나타내는 그래프이고, 도 6은 프로토타입의 퍼징(fuzzing) 성능을 나타내는 그래프이다.
본 발명의 프로토타입을 통해 성능 및 메모리 오류 검출 능력을 예측해 보았다. 도 5와 같이 기존 프로그램 대비 평균 21% 성능이 저하되었으며, 기존의 영역 기반 메모리 오류 감지 기법보다는 8%정도 성능이 저하되었다. 그러나, 도 6과 같이 퍼징을 하였을 때, 단위 시간당 메모리 오류 감지 능력은 평균 68% 향상 된 것으로 나타났다.
10: 종래 방식의 가상 메모리
11: 객체
12: 레드존(red zone)
13: 격리된 메모리
14: 오류 객체가 라이트(write)된 부분
20: 쉐도우(shadow) 메모리
100: 본 발명의 방식의 가상 메모리
110: 객체
120: 레드존
130: 쉐도우 메모리
140: 가상 메모리 재사용
200: 본 발명의 방식의 가상 메모리
210: 매핑된 가상 메모리 페이지
211: 객체
212: 페이지 내부 레드존
220: 페이지 단위 레드존
230: 쉐도우 메모리
300: 물리 메모리

Claims (10)

  1. 데이터 접근시의 메모리 오류를 감지하는 방법으로서,
    (a) 하나의 가상 메모리 페이지를 하나의 물리 메모리 페이지에 매핑하는 단계;
    (b) 상기 가상 메모리 페이지 내부의 데이터 접근금지 영역(이하 '페이지 내부 레드존'이라 한다)을 설정하는 단계;
    (c) 상기 가상 메모리 페이지 이후 일정 영역을 데이터 접근금지 영역(이하 '페이지 단위 레드존'이라 한다)으로 설정하는 단계;
    (d) 상기 페이지 단위 레드존 이후 일정 영역을 새로운 가상 메모리 페이지로서 상기 물리 메모리 페이지에 매핑하는 단계;
    (e) 상기 가상 메모리 페이지 내부에, 페이지 내부 레드존을 설정하는 단계;
    (f) 상기 가상 메모리 페이지 이후 일정 영역에, 페이지 단위 레드존을 설정하는 단계; 및
    (g) 새로운 가상 메모리 페이지 설정시마다 상기 단계(d) 내지 단계(f)를 수행하는 단계
    를 포함하고,
    상기 단계(c) 및 단계(f)의 상기 페이지 단위 레드존 설정은,
    쉐도우 메모리 상에 접근가능여부를 설정하거나 또는 추가적인 메모리 상에 접근가능여부를 설정하지 않고, 운영체제(OS)에 상기 페이지 단위 레드존에 대한 접근금지 영역 설정을 요청하여, 상기 운영체제의 상기 페이지 단위 레드존에 대한 접근금지 영역 설정에 의해 이루어지며,
    상기 단계(c) 이후,
    (i) 데이터(객체)의 상기 페이지 단위 레드존에의 접근이 있을 경우, 신호 처리기(signal handler)에서 이를 감지하여 메모리 오류가 발생했음을 알려주는 단계
    를 더 포함하는,
    메모리 오류 감지 방법.
  2. 청구항 1에 있어서,
    상기 단계(b) 및 단계(e)의 페이지 내부 레드존 설정은,
    메모리 상의 일정 영역에 할당된 쉐도우(shadow) 메모리 영역에서, 각 메모리 주소의 접근 가능여부를 설정함으로써 이루어지는 것
    을 특징으로 하는 메모리 오류 감지 방법.
  3. 청구항 2에 있어서,
    상기 각 메모리 주소의 접근 가능여부 설정은,
    상기 쉐도우 메모리 영역에서, 각 메모리 주소에 해당하는 비트(bit)를 0 또는 1로 설정함에 의해 이루어지는 것
    을 특징으로 하는 메모리 오류 감지 방법.
  4. 청구항 2에 있어서,
    상기 쉐도우 메모리 영역은,
    물리 메모리 및 가상 메모리 상에 동시에 설정되는 것
    을 특징으로 하는 메모리 오류 감지 방법.
  5. 청구항 2에 있어서,
    상기 단계(b) 이후,
    (h) 데이터(객체)의 상기 가상 메모리 접근(access)이 있을 경우, 상기 접근하는 메모리 주소에 해당하는, 쉐도우 메모리 상의 접근금지여부 설정에 의하여 상기 데이터의 페이지 내부 레드존 접근에 의한 메모리 오류 발생 여부를 판별하는 단계
    를 더 포함하는 것을 특징으로 하는 메모리 오류 감지 방법.

  6. 삭제
  7. 삭제
  8. 청구항 1에 있어서,
    상기 단계(a) 및 단계(d)에서,
    가상 메모리 페이지의 물리 메모리 페이지로의 매핑은,
    시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수를 호출함으로써 이루어지는 것
    을 특징으로 하는 메모리 오류 감지 방법.
  9. 청구항 8에 있어서,
    상기 단계(d)에서,
    시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 매핑 함수가, 기존의 가상 메모리 페이지에 대하여 할당해제할 크기를 지정하도록 요청하는 경우, 할당해제할 크기를 0으로 설정함으로써 기존의 가상 메모리 페이지를 그대로 유지한 상태로 새로운 가상 메모리 페이지를, 상기 기존의 가상 메모리 페이지가 매핑되어 있는 상기 물리 메모리 페이지로 매핑시킬 수 있는 것
    을 특징으로 하는 메모리 오류 감지 방법.
  10. 청구항 9에 있어서,
    상기 단계(d)에서,
    시스템이 제공하는 가상 메모리 페이지의 물리 메모리 페이지로의 상기 매핑 함수 호출시, 새로운 가상 메모리 페이지를, 새로운 물리 메모리 페이지가 아닌 상기 기존의 가상 메모리 페이지가 매핑되어 있는 물리 메모리 페이지로 매핑될 수 있도록 하는 파라미터를 설정할 수 있는 것
    을 특징으로 하는 메모리 오류 감지 방법.
KR1020170165396A 2017-12-04 2017-12-04 메모리 오류 감지 방법 KR102044075B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170165396A KR102044075B1 (ko) 2017-12-04 2017-12-04 메모리 오류 감지 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170165396A KR102044075B1 (ko) 2017-12-04 2017-12-04 메모리 오류 감지 방법

Publications (2)

Publication Number Publication Date
KR20190065841A KR20190065841A (ko) 2019-06-12
KR102044075B1 true KR102044075B1 (ko) 2019-11-12

Family

ID=66846186

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170165396A KR102044075B1 (ko) 2017-12-04 2017-12-04 메모리 오류 감지 방법

Country Status (1)

Country Link
KR (1) KR102044075B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102254159B1 (ko) 2020-12-09 2021-05-18 연세대학교 산학협력단 운영체제 커널 메모리의 실시간 오류 검출 방법
KR20230018128A (ko) * 2021-07-29 2023-02-07 국방과학연구소 전자 장치의 소프트웨어 검증 방법

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102299640B1 (ko) * 2020-10-21 2021-09-08 한국과학기술원 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
CN113515405A (zh) * 2021-07-09 2021-10-19 维沃移动通信有限公司 地址管理方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101396831B1 (ko) * 2007-03-30 2014-05-21 삼성전자주식회사 메모리 접근 제어 방법

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Konstantin Serebryany 외 3인,'AddressSanitizer: A Fast Address Sanity Checker', USENIX Annual Technical Conference, June 2012*

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102254159B1 (ko) 2020-12-09 2021-05-18 연세대학교 산학협력단 운영체제 커널 메모리의 실시간 오류 검출 방법
WO2022124720A1 (ko) * 2020-12-09 2022-06-16 연세대학교 산학협력단 운영체제 커널 메모리의 실시간 오류 검출 방법
KR20230018128A (ko) * 2021-07-29 2023-02-07 국방과학연구소 전자 장치의 소프트웨어 검증 방법
KR102543663B1 (ko) * 2021-07-29 2023-06-15 국방과학연구소 전자 장치의 소프트웨어 검증 방법

Also Published As

Publication number Publication date
KR20190065841A (ko) 2019-06-12

Similar Documents

Publication Publication Date Title
KR102044075B1 (ko) 메모리 오류 감지 방법
EP3491520B1 (en) Controlling access to pages in a memory in a computing device
CN109002706B (zh) 一种基于用户级页表的进程内数据隔离保护方法和系统
US10552346B2 (en) Protection key management and prefixing in virtual address space legacy emulation system
US6775750B2 (en) System protection map
US10169244B2 (en) Controlling access to pages in a memory in a computing device
US8909898B2 (en) Copy equivalent protection using secure page flipping for software components within an execution environment
US8850158B2 (en) Apparatus for processing remote page fault and method thereof
EP2997477B1 (en) Page table data management
US8631250B2 (en) Method and system for designating and handling confidential memory allocations
US20040117594A1 (en) Memory management method
US20090024820A1 (en) Memory Allocation For Crash Dump
CN112602062A (zh) 用于正在计算机处理器中执行的指令的域寄存器
US7594042B2 (en) Effective caching mechanism with comparator coupled to programmable registers to store plurality of thresholds in order to determine when to throttle memory requests
US20070150665A1 (en) Propagating data using mirrored lock caches
KR101155123B1 (ko) 커널 코드의 오류로부터 응용 프로그램의 메모리를 보호하는 장치 및 방법
JP7213879B2 (ja) 間接アクセスメモリコントローラ用のメモリ保護装置
KR101724590B1 (ko) 멀티 프로세서 시스템에서의 메모리 보호 장치 및 방법
CN113094700A (zh) 执行安全操作的系统以及系统执行安全操作的方法
JP2021507362A (ja) 間接アクセスメモリコントローラ向けの保護機能を追加するための機器
US8151086B2 (en) Early detection of an access to de-allocated memory
US20140289739A1 (en) Allocating and sharing a data object among program instances
KR101460451B1 (ko) 프로세스 주소 공간을 제어하는 장치 및 방법
CN110929304A (zh) 一种基于risc-v的内存保护方法
US11188477B2 (en) Page protection layer

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant