KR101166051B1 - 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법 - Google Patents

힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법 Download PDF

Info

Publication number
KR101166051B1
KR101166051B1 KR1020100129678A KR20100129678A KR101166051B1 KR 101166051 B1 KR101166051 B1 KR 101166051B1 KR 1020100129678 A KR1020100129678 A KR 1020100129678A KR 20100129678 A KR20100129678 A KR 20100129678A KR 101166051 B1 KR101166051 B1 KR 101166051B1
Authority
KR
South Korea
Prior art keywords
unit
free
bin
size
data pointer
Prior art date
Application number
KR1020100129678A
Other languages
English (en)
Other versions
KR20120068180A (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 KR1020100129678A priority Critical patent/KR101166051B1/ko
Publication of KR20120068180A publication Critical patent/KR20120068180A/ko
Application granted granted Critical
Publication of KR101166051B1 publication Critical patent/KR101166051B1/ko

Links

Images

Classifications

    • 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/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 동적 메모리 관리 시스템에 있어서, 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈; 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈; 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 상기 빈 중에서 요청 메모리 크기와 일치하는 자유조각을 탐색하는 할당부; 상기 어플리케이션으로부터 메모리 할당 해제 요청을 수신하여, 상기 빈 중에서 해제된 자유조각과 크기가 일치하는 고정 크기 또는 정렬된 빈에 자유조각을 삽입하는 해제부; 상기 할당부 또는 해제부가 사용하는 암호키를 발생하는 암호화키 발생부; 상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 암호화하는 암호화부; 및 상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 복호화하는 복호화부;를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템을 제공한다.
또한, 본 발명은 동적 메모리 관리 시스템에 있어서, 어플리케이션 동작에 필요한 힙 메모리 영역의 자유조각에 대해 정렬되지 않은 데이터 포인터를 제공하는 비정렬 리스트 및 상기 힙 메모리 영역의 자유조각에 대해 정렬된 데이터 포인터를 제공하는 정렬 리스트를 제공하는 단계; 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 탐색부를 통해 비정렬 및 정렬 리스트 내에서 요청 메모리 크기와 일치하는 데이터 포인터를 탐색하는 단계; 암호화부를 통해 상기 비정렬 리스트에서 상기 탐색부에 의해 탐색된 데이터 포인터 중 요청 메모리 크기와 일치하지 않은 데이터 포인터를 XOR 연산으로 암호화하여, 상기 정렬된 리스트와의 연결시키는 단계; 및 복호화부를 통해 상기 정렬된 리스트에서 상기 탐색부에 의해 탐색된 데이터 포인터 중 요청 메모리 크기와 일치하는 데이터 포인터를 XOR 연산을 복호화하여 상기 정렬된 리스트와의 연결을 해제시키는 단계;를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템을 제공한다.

Description

힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법{Dynamic memory management system and the management methods for defense against heap attacks}
본 발명은 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법에 관한 것으로, 동적 메모리 할당의 취약점을 이용한 힙 메모리 영역에 대한 공격을 방지하기 위해 힙 메모리 관리에 필요한 데이터 포인터를 암호화하는 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법에 관한 것이다.
버퍼 오버플로우 공격은 1988년에 처음 등장한 이후 지속적으로 공격에 이용되어 왔고 앞으로도 계속 될 전망이다. 시스템 개발 언어인 C는 배열의 한계 검사를 요구하지 않기 때문에 공격자는 버퍼에 기록할 때 한계를 넘어 공격 대상이 되는 메모리 공간을 변조시킬 수 있다. 스택 버퍼 오버플로우에서 함수 호출시 스택에 쌓이게 되는 반환주소가 가장 대표적인 변조 대상이다. 변조된 반환주소는 함수가 복귀할 때 프로그램 카운터에 적재되어 공격자가 원하는 주소로 제어 흐름을 이동 시킬 수 있게 한다.
버퍼 오버플로우 공격은 스택의 영역뿐만 아니라 데이터 세그먼트나 힙 영역에서도 다양한 형태가 가능하다. 힙 오버플로우의 대표적인 공격 형태는 할당 해제된 메모리공간을 이중 연결 리스트 형태로 유지하기 위한 두 개의 데이터 포인터를 변조시키는 방식이다. 공격자는 이 데이터 포인터들을 변조하여 임의의 메모리 주소의 저장된 값을 변경시킬 수 있다. 지금까지는 코드 포인터들을 조작하여 제어 흐름을 가로채는 공격이 주류를 이루고 있지만 데이터 메모리 값 변조를 이용한 공격도 증가하고 있고, 힙 공격이 그 가능성을 높이고 있다.
도 1은 GNU C 라이브러리와 레드햇, 데비안을 비롯한 대부분의 리눅스는 기본적으로 더그 리(Doug Lea)의 dlmalloc을 기반으로 힙 메모리를 관리 체계가 다루는 메모리 조각의 구조를 나타낸 도면으로, (a)는 할당된 조각 (b)는 해제된 자유조각의 구조이다. prev_size 는 앞 조각의 크기를 나타내고 size 는 현재 조각의 크기를 의미한다. prev_size 를 통해 앞 조각의 접근이 가능하고 size 를 통해 다음 조각의 접근이 가능하다. 조각이 사용자에게 할당이 되면 오직 size 필드만 의미 있는 값을 가진다. 해당 조각이 해제되었을 때 size외의 다른 부분들에 역시 유효한 정보가 기록된다. P( PREV_INUSE ) 플래그로 앞의 조각이 할당되었는지 해제되었는지를 확인 할 수 있다. 이 값이 '0'일 경우 앞의 조각이 해제되었다는 의미이고 '1'일 경우 할당되었다는 의미이다. P플래그가 '1'일 때 prev_size 가 유효하지 않고 '0'일 때만 유효하다. 이로 인하여 할당된 조각에서 사용자가 실제 사용가능한 공간은 size의 아래쪽 영역부터 시작하여 다음 조각의 prev_size 를 포함한 영역이다. 자유조각들은 fd(forward pointer)와 bk(back pointer)라는 2개의 데이터 포인터를 통해 원형 이중 연결 리스트로 관리된다.
이때, 일반적으로 512 바이트를 기준으로 이보다 크기가 작은 자유 조각들은 크기에 따라 빈(bin) 이라 부르는 별도의 리스트를 형성한다. 이보다 큰 자유 조각 빈들은 일정 범위의 크기를 갖는 자유 조각들을 정렬하여 원형 이중 연결 리스트로 구성된다. 동일한 크기의 조각을 반복적으로 할당, 해제 할 때 성능을 유지하기 위해 캐시 역할을 하는 빈을 두기도 한다.
여기서, 빈을 구성하는데 필요한 자유 조각의 2 개의 포인터가 공격 대상이 된다. 버퍼 오버플로우 또는 그외 어떤 공격 방법이든 이를 사용하여 자유 조각을 연결하는 fd, bk 포인터에 최종 공격 목표지가 되는 메모리 위치 주소와 그 곳에 기록할 값을 각각 기록하면, 자유 조각을 할당하기 위해 연결 리스트에서 분리해 내거나 인접한 자유 조각을 병합할 때 목적지에 원하는 값을 기록할 수 있어 공격이 성공할 수 있게 된다.
본 발명은 상기와 같은 종래의 문제점을 해결하기 위한 것으로, 힙 메모리 영역의 자유 조각의 연결에 사용되는 데이터 포인터를 암호화하여 저장하고, 이 포인터를 참조해야 할 때 복호화하여 사용하도록 함으로써, 데이터 포인터를 이용한 공격자의 공격을 자체적으로 방지할 수 있도록 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법을 제공하는 목적이 있다.
또한, 본 발명의 또 다른 목적은 공격자가 지금까지 알려지지 않은 공격 방법을 이용하여 힙 메모리 영역을 공격하더라도 암호화 및 복호화에 사용된 암호화 키를 사용하지 않으면 결코 공격에 성공할 수 없게 함으로써, 아직까지 알려지지 않은 데이터 포인터와 변수에 대한 공격까지 방어할 수 있도록 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법을 제공하는 목적이 있다.
상기의 목적을 달성하기 위한 동적 메모리 관리 시스템에 있어서, 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈; 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈; 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 상기 빈 중에서 요청 메모리 크기와 일치하는 자유조각을 탐색하는 할당부; 상기 어플리케이션으로부터 메모리 할당 해제 요청을 수신하여, 상기 빈 중에서 해제된 자유조각과 크기가 일치하는 고정 크기 또는 정렬된 빈에 자유조각을 삽입하는 해제부;상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 암호화하는 암호화부; 및 상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 복호화하는 복호화부; 를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템을 제공한다.
이때, 상기 할당부 또는 해제부가 사용하는 암호화키는 암호화키 발생부에 의해 발생될 수 있다.
그리고 상기 고정 크기 빈 및 정렬된 빈은 자유조각이 포함하는 fd(forward pointer)와 bk(back pointer)를 이용하여 원형 이중 리스트로 구성될 수 있다.
또한, 상기 할당부는, 고정 크기 빈 또는 정렬된 빈에서 요청한 크기의 자유 조각을 탐색하는 탐색부; 및 탐색된 자유조각과 전후 인접 자유 조각의 fd, bk 연결 데이터 포인터를 상기 복호화부에 의뢰하여 복호화하여 분리한 후 인접 조각을 다시 연결하고 상기 암호화부에 의뢰하여 이들의 fd, bk 데이터 포인터를 복호화하는 분리부;를 포함할 수 있다.
그리고 상기 해제부는, 할당 해제 요청된 조각을 삽입할 크기가 일치하는 고정 크기 빈 또는 수용 가능한 정렬된 빈을 탐색하고, 삽입할 위치를 결정하는 위치 결정부; 및 위치 결정부가 결정한 빈에 해제된 자유조각을 서로 연결하기 위해 암호화부와 복호화부에 데이터 포인터 fd bk의 암호화 및 복호화를 요청하여 삽입하는 삽입부;를 포함할 수 있다.
또한, 상기 암호화부는, 암호화 할 상기 데이터 포인터를 전달받는 제 1 입력부; 상기 제 1 입력부를 통해 전달받은 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 암호화하는 제 1 연산부; 및 상기 제 1 연산부를 통해 암호화된 데이터 포인터를 상기 할당부 또는 해제부로 전달하는 제 1 출력부;를 포함할 수 있다.
한편, 상기 복호화부는, 복호화할 상기 데이터 포인터를 전달받는 제 2 입력부; 상기 제 2 입력부를 통해 전달받은 암호화된 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 복호화하는 제 2 연산부; 및 상기 제 2 연산부를 통해 암호화된 데이터 포인터를 상기 할당부 또는 해제부로 전달하는 제 2 출력부;를 포함할 수 있다.
상기의 목적을 달성하기 위한 동적 메모리 관리 방법에 있어서, 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈 및 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈을 제공하는 단계;
상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 할당부를 통해 고정 크기 빈 및 정렬된 빈에서 요청 메모리 크기와 일치하는 자유조각을 탐색하여 어플리케이션에 제공하는 단계; 상기 어플리케이션으로부터 메모리 해제 요청을 수신하여, 고정 크기 빈 및 정렬된 빈에 해제부를 통해 전달된 자유조각을 삽입하는 단계; 상기 메모리 조각의 데이터 포인터를 암호화부를 통해 암호화하는 단계; 및상기 메모리 조각의 데이터 포인터를 복호화부를 통해 복호화하는 단계;를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 방법을 제공한다.
이때, 상기 메모리 조각의 데이터 포인터를 암호화부를 통해 암호화하는 단계는, 제 1 입력부를 통해 전달된 데이터 포인터를 암호화 알고리즘을 적용하는 제1 연산부가 암호화하여 제 1 출력부를 통해 상기 할당부 또는 해제부로 전달할 수 있다.
그리고 상기 메모리 조각의 데이터 포인터를 복호화부를 통해 복호화하는 단계는, 제 2 입력부를 통해 전달된 암호화된 데이터 포인터를 복호화 알고리즘을 적용하는 제2 연산부가 복호화하여 제 2 출력부를 통해 상기 할당부 또는 해제부로 전달할 수 있다.
이상에서, 본 발명은 힙 메모리 영역의 자유 조각에 대한 데이터 포인터를 암호화하여 저장하고, 할당 또는 해제 요구시 자유조각에 대한 참조가 발생하기 직전에 복호화하여 사용하도록 함으로써, 데이터 포인터를 이용한 공격자의 공격을 자체적으로 방지할 수 있도록 하는 효과가 있다.
또한, 공격자가 암호화된 데이터 포인터를 이용하여 공격하더라도 암호화 키를 정확히 알지 못하면 복호화 과정을 거처야 함으로써, 원하는 주소에 원하는 값을 기록할 수 없게 되어 아직 알려지지 않은 데이터 포인터와 변수에 대한 공격까지 방어할 수 있도록 하는 효과가 있다.
따라서, 본 발명은 데이터 포인터와 변수, 루트 권한에 대한 공격이 가능한 힙 오버플로우를 방지함으로써, 보다 안전하고 높은 수준의 시스템 보안 강도를 유지할 수 있는 효과가 있다.
도 1은 종래의 힙 메모리가 관리하는 메모리 조각의 구조에 대한 구성도.
도 2는 본 발명의 실시예에 따른 힙 공격 방어를 위한 동적 메모리 관리 시스템에 대한 구성도.
도 3은 본 발명의 실시예에 따른 힙 공격 방어를 위한 동적 메모리 관리 시스템에 채용되는 할당부, 해제부, 암호화부, 복호화부에 대한 세부 구성도.
도 4는 본 발명의 실시예에 따른 힙 공격 방어를 위한 동적 메모리 관리 방법에 대한 순서도,
본 발명에 따른 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법에 대한 기술적 구성을 비롯한 작용효과에 대한 사항은 본 발명의 바람직한 실시예가 도시된 도면을 참조하여 상세한 설명에 의해서 명확하게 이해될 것이다.
힙 공격 방어를 위한 동적 메모리 관리 시스템
도 2 및 도 3을 참조하여 설명하면, 본 발명의 실시예에 따른 힙 공격 방어를 위한 동적 메모리 관리 시스템(100)은 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈(110), 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈(120), 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 상기 빈 중에서 요청 메모리 크기와 일치하는 자유조각을 탐색하는 할당부(130a), 상기 어플리케이션으로부터 메모리 할당 해제 요청을 수신하여, 상기 빈 중에서 해제된 자유조각과 크기가 일치하는 고정 크기 또는 정렬된 빈에 자유조각을 삽입하는 해제부(130b), 상기 할당부(130a) 또는 해제부(130b)의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 암호화하는 암호화부(140) 및 상기 할당부(130a) 또는 해제부(130b)의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 복호화하는 복호화부(150)를 포함하여 이루어진다. 이때, 상기 할당부(130a) 또는 해제부(130b)가 사용하는 암호화키는 암호화키 발생부(160)에 의해 발생된다.
여기서, 상기 동적 메모리 관리 시스템(100)은 어플리케이션(103)과 어플리케이션(103) 동작에 필요한 힙 메모리 영역을 제공하는 메모리와 연결되어, 상기 어플리케이션(103)으로부터 메모리 할당 요청을 수신하면 상기 메모리(101)에서 할당 가능한 힙 메모리 영역을 탐색하고 요구 메모리 크기에 일치하는 메모리 영역을 제공하여 주는 역할을 한다.
상기 힙 메모리 영역은 프로그램이 사용할 수 있는 자유 메모리로 할당된 조각과 메모리 할당이 해제된 자유조각으로 구분되어 원형 이중 연결 리스트(bin)에 저장되어 있다. 이때, 상기 빈은 자유조각이 포함하는 fd(forward pointer)와 bk(back pointer) 데이터 포인터에 의해 관리될 수 있다.
상기 빈은 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 연결된 고정 크기 빈(110) 및 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 연결된 정렬 빈(120)으로 구분될 수 있다.
상기 할당부(130a)는 상기 어플리케이션(103)으로부터 메모리 할당 요청을 수신하여 즉, malloc()과 같은 동적 메모리 할당함수가 호출되는 경우 상기 고정 크기 및 정렬 빈(110, 120) 내에서 요청 메모리 크기와 일치하거나 근접한 자유조각을 탐색할 수 있다. 즉, 상기 할당부(130a)는 메모리 할당 요청이 수신되면 먼저, 상기 고정 크기 빈(110)에서 크기가 일치하는 자유조각을 탐색한다. 이때, 탐색된 자유조각이 사용자가 요구한 크기와 일치하지 않는 경우, 상기 정렬 빈(120)에서 적은 낭비로 요구한 크기를 만족시키는 자유조각을 탐색하게 된다.
이는 상기 할당부(130a)의 탐색부, 분리부에 의해 이루어질 수 있다.
상기 탐색부(131a)는 고정 크기 빈 또는 정렬된 빈(110, 120)에서 요청한 크기의 자유 조각을 탐색할 수 있다. 그리고 상기 분리부는 탐색된 자유조각과 전후 인접 자유 조각의 fd, bk 연결 데이터 포인터를 상기 복호화부(150)에 의뢰하여 복호화하여 분리한 후 인접 조각을 다시 연결하고 암호화부(140)에 의뢰하여 이들의 fd, bk 데이터 포인터를 복호화할 수 있다.
상기 해제부(130b)는 상기 어플리케이션(103)으로부터 메모리 해제 요청을 수신하여 즉, free()와 같은 동적 메모리 할당 해제 함수가 호출되는 경우 해제되는 조각과 크기가 일치하는 상기 고정 크기 빈(110)이 있으면 해제된 자유조각은 그 빈에 연결시킨다. 크기가 일치하는 고정 크기 빈(110)이 없으면 정렬 빈(120) 중에서 해제된 메모리 크기를 포함하는 정렬 빈(120)에 연결시킨다. 이때, 고정 크기 빈(110)과 정렬된 빈(120)은 다수개 구비될 수 있다. 고정 크기 빈(110)은 크기가 16 바이트인 자유조각을 보관하는 빈으로 시작하여 496 바이트 크기의 자유조각을 보관하는 빈까지 총 62개 있고, 그 다음은 512 바이트 이상 576 바이트 미만의 자유 조각을 크기 순서로 정렬해서 보관하는 빈, 576 바이트 이상 640 바이트 미만의 자유 조각을 정렬해 보관하는 빈 등과 같이, 구간 간격 64 바이트로 구분되는 64개의 정렬된 빈이 있다. 총 126개의 빈이 있다.
이는 상기 해제부(130b)의 위치 결정부(131b), 삽입부(133b)에 의해 이루어질 수 있다.
상기 위치 결정부(131b)는 해제 요청된 조각을 삽입할 크기가 일치하는 고정 크기 빈 또는 수용 가능한 정렬된 빈을 탐색하고, 삽입할 위치를 결정할 수 있다. 그리고 상기 삽입부(133b)는 상기 위치 결정부(131b)가 결정한 빈에 해제된 자유조각을 서로 연결하기 위해 상기 암호화부(140)와 복호화부(150)에 데이터 포인터 fd bk의 암호화 및 복호화를 요청하여 삽입할 수 있다.
상기 암호화부(140)는 전달 받은 값(주소)을 암호화하여 할당부(130a) 또는 해제부(130b)에 전달한다. 암호화 기능은 하드웨어, 펌웨어, 소프트웨어 어떤 형태로도 만들 수 있으며, 잘 알려진 대칭 또는 비대칭 표준 암호화 방식을 따를 수도 있고, XOR 연산과 같이 단순한 단일 연산을 사용할 수도 있다.
상기 암호화부(140)는 제 1 입력부(141), 제 1 연산부(143), 제 1 출력부(145)를 포함할 수 있다. 상기 제 1 입력부(141)는 암호화할 상기 데이터 포인터를 전달받을 수 있다. 그리고 상기 제 1 연산부(143)는 상기 제 1 입력부(141)를 통해 전달받은 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 암호화할 수 있다. 그리고 상기 제 1 출력부(145)는 상기 제1 연산부(143)를 통해 암호화된 데이터 포인터를 상기 할당부(130a) 또는 해제부(130b)로 전달할 수 있다.
상기 복호화부(150)는 전달 받은 값(암호화된 주소)을 복호화하여 할당부(130a) 또는 해제부(130b)에 전달한다. 복호화 기능은 하드웨어, 펌웨어, 소프트웨어 어떤 형태로도 만들 수 있으며, 잘 알려진 대칭 또는 비대칭 표준 암호화 방식을 따를 수도 있고, XOR 연산과 같이 단순한 단일 연산을 사용할 수도 있다.
상기 복호화부(150)는 제 2 입력부(151), 제 2 연산부(153), 제 2 출력부(155)를 포함할 수 있다. 상기 제 2 입력부(151)는 복호화할 상기 암호화된 데이터 포인터를 전달받을 수 있다. 그리고 상기 제 2 연산부(153)는 상기 제 2 입력부(151)를 통해 전달받은 암호화된 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 복호화할 수 있다, 그리고 상기 제 2 출력부(155)는 상기 제 2 연산부(153)를 통해 암호화된 데이터 포인터를 상기 할당부(130a) 또는 해제부(130b)로 전달할 수 있다.
이처럼, 상기 데이터 포인터를 암호화함으로써, 공격자가 데이터 포인터를 가로채는 경우 암호화된 데이터 포인터를 가로채어 변조하게 됨으로써, 자신이 원하는 주소를 데이터 포인터에 쓸 수 없게 된다.
힙 공격 방어를 위한 동적 메모리 관리 방법
도 4 내지 6을 참조하여 설명하면, 본 발명의 실시예에 따른 힙 공격 방어를 위한 동적 메모리 관리 방법은 앞서 설명한 도 2 및 도 3과 같은 구성으로 이루어진 힙 공격 방어를 위한 동적 메모리를 관리하는 방법으로 이하 중복되는 설명은 생략한다.
먼저, 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈(110) 및 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈(120)을 제공한다.(S100) 이때, 상기 고정 크기 빈 및 정렬된 빈(110,120)은 자유조각이 포함하는 fd(forward pointer)와 bk(back pointer)를 이용하여 원형 이중 리스트로 구성될 수 있다. 그리고 이 단계 이전에, 상기 힙 메모리 영역은 프로그램이 사용할 수 있는 자유 메모리로 메모리가 할당된 조각과 메모리 할당이 해제된 자유조각으로 구분되어 있다.
다음으로, 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 할당부(130a)를 통해 고정 크기 빈 및 정렬된 빈(110,120)에서 요청 메모리 크기와 일치하는 자유조각을 탐색한다.(S110) 이때, 상기 할당부(130a)는 상기 어플리케이션으로부터 메모리 할당 요청을 수신하여 즉, malloc()과 같은 동적 메모리 할당함수가 호출되는 경우 상기 고정 크기 및 정렬된 빈(110, 120) 내에서 요청 메모리 크기와 일치하거나 요청 크기보다 크며 최대한 근접한 자유조각을 탐색할 수 있다. 이는 할당부(130a)의 탐색부(131a), 분리부(133a)에 의해 이루어질 수 있다.
그 다음, 상기 어플리케이션으로부터 메모리 할당 해제 요청을 수신하여, 즉, free() 함수가 호출되면, 해제부(130b)를 통해 고정 크기 빈 중에 크기가 일치하는 것이 있으면 그 빈에 자유 조각을 삽입한다.(S120) 크기가 일치하는 빈이 없으면, 정렬된 빈(110,120)에서 정렬된 순서에 따라 위치를 찾아 해제 조각을 삽입한다. 이는 상기 해제부(130b)의 위치 결정부(131b), 삽입부(133b)에 의해 이루어질 수 있다.
다음으로, 탐색된 자유조각을 빈에 삽입하거나 제거해 낼 때에는 자유조각을 연결하는 데이터 포인터를 암호화부(140)를 통해 암호화하거나(S130) 복호화부(...)를 통해 복호화 한다.(S140) 이때, 암호화 및 복호화 방식은 대칭적 암호키를 사용하는 방식일 수도 있고, 비대칭적 암호키를 사용하는 방식일 수도 있으며, 성능과 보안을 절충한 XOR 연산 하나만을 사용하는 방식일 수도 있다.
예를 들어, 어떤 빈에 속한 자유조각 P를 할당하기 위해 빈에서 분리해 낼 때에는 다음과 같은 순서로 복호화 과정이 진행된다. d는 복호화부를 나타낸다. 단순한 형태의 경우 XOR 연산으로 할 수도 있다.
FD = d(P -> fd, key);
BK = d(P -> bk, key);
FD -> bk = P -> bk;
BK -> fd = P -> fd;
어떤 빈에 속한 자유조각 P 다음에 방금 해제된 자유조각 Q를 삽입할 때에는 다음과 같은 암호화 과정이 진행된다. e는 암호화부를, d는 복호화부를 나태낸다. 단순한 방식의 경우 e와 d 모두 XOR 연산으로 대체할 수 있다.
R = d(P -> fd, key);
P -> fd = e(Q, key);
R - > bk = e(Q, key);
Q -> bk = e(P, key);
Q -> fd = e(R, key);
이처럼, 본 발명은 힙 메모리 영역의 자유 조각에 대한 데이터 포인터를 암호화하여 저장하고, 할당 또는 해제 요구시 자유조각에 대한 참조가 발생하기 직전에 복호화하여 사용하도록 함으로써, 데이터 포인터를 이용한 공격자의 공격을 자체적으로 방지할 수 있다. 또한, 공격자가 암호화된 데이터 포인터를 이용하여 공격하더라도 암호화 키를 정확히 알지 못하면 복호화 과정을 거처야 함으로써, 원하는 주소에 원하는 값을 기록할 수 없게 되어 아직 알려지지 않은 데이터 포인터와 변수에 대한 공격까지 방어할 수 있다.
따라서, 본 발명은 데이터 포인터와 변수, 루트 권한에 대한 공격이 가능한 힙 오버플로우를 방지함으로써, 보다 안전하고 높은 수준의 시스템 보안 강도를 유지할 수 있다.
이상에서 설명한 본 발명의 바람직한 실시예에 대하여 상세하게 설명하였지만 당해 기술분야에서 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시예가 가능하다는 점을 이해할 수 있을 것이다.
따라서, 본 발명의 권리 범위는 개시된 실시예에 한정되는 것은 아니고 다음의 청구범위에서 정의하고 있는 본 발명의 기본 개념을 이용한 당업자의 여러 변경 및 개량 형태 또는 본 발명의 권리 범위에 속하는 것으로 보아야 할 것이다.
100 : 힙 공격 방어를 위한 동적 메모리 관리 시스템
110 : 고정 크기 빈 120 : 정렬된 빈
130a: 할당부 130b: 해제부
140 : 암호화부 150 : 복호화부
160 : 암호화키 발생부

Claims (10)

  1. 동적 메모리 관리 시스템에 있어서,
    어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈;
    상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈;
    상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 상기 빈 중에서 요청 메모리 크기와 일치하는 자유조각을 탐색하는 할당부;
    상기 어플리케이션으로부터 메모리 할당 해제 요청을 수신하여, 상기 빈 중에서 해제된 자유조각과 크기가 일치하는 고정 크기 또는 정렬된 빈에 자유조각을 삽입하는 해제부;
    상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 암호화하는 암호화부; 및
    상기 할당부 또는 해제부의 요청에 의해 상기 빈 중에서 탐색된 자유조각 또는 빈에 삽입될 자유조각의 데이터 포인터를 복호화하는 복호화부;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  2. 제 1항에 있어서,
    상기 할당부 또는 해제부가 사용하는 암호화키는 암호화키 발생부에 의해 발생되는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  3. 제 1항에 있어서, 상기 고정 크기 빈 및 정렬된 빈은
    자유조각이 포함하는 fd(forward pointer)와 bk(back pointer)를 이용하여 원형 이중 리스트로 구성되는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  4. 제 1항에 있어서, 상기 할당부는,
    고정 크기 빈 또는 정렬된 빈에서 요청한 크기의 자유 조각을 탐색하는 탐색부; 및
    탐색된 자유조각과 전후 인접 자유 조각의 fd, bk 연결 데이터 포인터를 상기 복호화부에 의뢰하여 복호화하여 분리한 후 인접 조각을 다시 연결하고 상기 암호화부에 의뢰하여 이들의 fd, bk 데이터 포인터를 복호화하는 분리부;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  5. 제 1항에 있어서,
    상기 해제부는,
    할당 해제 요청된 조각을 삽입할 크기가 일치하는 고정 크기 빈 또는 수용 가능한 정렬된 빈을 탐색하고, 삽입할 위치를 결정하는 위치 결정부; 및
    위치 결정부가 결정한 빈에 해제된 자유조각을 서로 연결하기 위해 암호화부와 복호화부에 데이터 포인터 fd bk의 암호화 및 복호화를 요청하여 삽입하는 삽입부;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  6. 제 1항에 있어서,
    상기 암호화부는,
    암호화 할 상기 데이터 포인터를 전달받는 제 1 입력부;
    상기 제 1 입력부를 통해 전달받은 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 암호화하는 제 1 연산부; 및
    상기 제 1 연산부를 통해 암호화된 데이터 포인터를 상기 할당부 또는 해제부로 전달하는 제 1 출력부;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  7. 제 1 항에 있어서
    상기 복호화부는,
    복호화할 상기 데이터 포인터를 전달받는 제 2 입력부;
    상기 제 2 입력부를 통해 전달받은 암호화된 상기 데이터 포인터를 대칭 또는 비대칭의 표준 또는 비표준 방식으로 복호화하는 제 2 연산부; 및
    상기 제 2 연산부를 통해 암호화된 데이터 포인터를 상기 할당부 또는 해제부로 전달하는 제 2 출력부;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 시스템.
  8. 동적 메모리 관리 방법에 있어서,
    어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 같은 자유조각들이 고정 크기 빈 및 상기 어플리케이션 동작에 필요한 힙 메모리 영역의 크기가 일정범위를 갖는 자유조각들이 정렬된 빈을 제공하는 단계;
    상기 어플리케이션으로부터 메모리 할당 요청을 수신하여, 할당부를 통해 고정 크기 빈 및 정렬된 빈에서 요청 메모리 크기와 일치하는 자유조각을 탐색하여 어플리케이션에 제공하는 단계;
    상기 어플리케이션으로부터 메모리 해제 요청을 수신하여, 고정 크기 빈 및 정렬된 빈에 해제부를 통해 전달된 자유조각을 삽입하는 단계;
    상기 메모리 조각의 데이터 포인터를 암호화부를 통해 암호화하는 단계; 및
    상기 메모리 조각의 데이터 포인터를 복호화부를 통해 복호화하는 단계;
    를 포함하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 방법.
  9. 제 8항에 있어서,
    상기 메모리 조각의 데이터 포인터를 암호화부를 통해 암호화하는 단계는,
    제 1 입력부를 통해 전달된 데이터 포인터를 암호화 알고리즘을 적용하는 제1 연산부가 암호화하여 제 1 출력부를 통해 상기 할당부 또는 해제부로 전달하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 방법.
  10. 제 8항에 있어서,
    상기 메모리 조각의 데이터 포인터를 복호화부를 통해 복호화하는 단계는,
    제 2 입력부를 통해 전달된 암호화된 데이터 포인터를 복호화 알고리즘을 적용하는 제2 연산부가 복호화하여 제 2 출력부를 통해 상기 할당부 또는 해제부로 전달하는 것을 특징으로 하는 힙 공격 방어를 위한 동적 메모리 관리 방법.
KR1020100129678A 2010-12-17 2010-12-17 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법 KR101166051B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020100129678A KR101166051B1 (ko) 2010-12-17 2010-12-17 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020100129678A KR101166051B1 (ko) 2010-12-17 2010-12-17 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법

Publications (2)

Publication Number Publication Date
KR20120068180A KR20120068180A (ko) 2012-06-27
KR101166051B1 true KR101166051B1 (ko) 2012-07-19

Family

ID=46686930

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020100129678A KR101166051B1 (ko) 2010-12-17 2010-12-17 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법

Country Status (1)

Country Link
KR (1) KR101166051B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117035747B (zh) * 2023-10-09 2024-02-02 国网山东省电力公司博兴县供电公司 一种机房多系统故障诊断处理方法、系统、设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100346411B1 (ko) 2000-08-26 2002-08-01 조인구 커널모드에서 파일을 자동으로 암호화, 복호화하는 방법,이를 이용한 파일 포인터 이동방법, 및 이들을프로그램화하여 수록한 컴퓨터로 읽을 수 있는 기록매체
KR100845835B1 (ko) 2002-01-21 2008-07-14 주식회사 엘지이아이 다단계 암호화 및 복호화 시스템

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100346411B1 (ko) 2000-08-26 2002-08-01 조인구 커널모드에서 파일을 자동으로 암호화, 복호화하는 방법,이를 이용한 파일 포인터 이동방법, 및 이들을프로그램화하여 수록한 컴퓨터로 읽을 수 있는 기록매체
KR100845835B1 (ko) 2002-01-21 2008-07-14 주식회사 엘지이아이 다단계 암호화 및 복호화 시스템

Also Published As

Publication number Publication date
KR20120068180A (ko) 2012-06-27

Similar Documents

Publication Publication Date Title
US11423159B2 (en) Technologies for trusted I/O protection of I/O data with header information
US6708274B2 (en) Cryptographically protected paging subsystem
US5757919A (en) Cryptographically protected paging subsystem
US8370645B2 (en) Protection of security parameters in storage devices
CN110134619B (zh) 使用签名的地址验证
US10235539B2 (en) Server device, recording medium, and concealed search system
US7136488B2 (en) Microprocessor using asynchronous public key decryption processing
US7107459B2 (en) Secure CPU and memory management unit with cryptographic extensions
US20110173460A1 (en) Information processing device, method, program, and integrated circuit
US20100058073A1 (en) Storage system, controller, and data protection method thereof
US8286001B2 (en) Method and central processing unit for processing encrypted software
US20110099387A1 (en) Method and apparatus for enforcing a predetermined memory mapping
US8745735B2 (en) Monitoring system, program-executing device, monitoring program, recording medium and integrated circuit
KR20100120671A (ko) 스마트 카드의 보안
EP2562675A1 (fr) Procédé de cloisonnement matériel des ressources d'un système informatique sécurisé
CN104506504A (zh) 一种无卡终端涉密信息的安全机制及安全装置
EP1578051A1 (en) Apparatus comprising a key selector and a key update mechanism for encrypting/decrypting data to be written/read in a store
KR102418090B1 (ko) 원본 파일을 여러개로 분할하고 분할된 파일들을 암호화하고 암호화된 파일들을 복호화하여 원본 파일을 복원하는 컴퓨터 프로그램과 그 방법
KR101166051B1 (ko) 힙 공격 방어를 위한 동적 메모리 관리 시스템 및 그 관리 방법
KR101761799B1 (ko) 단말의 보안 데이터 관리 장치 및 그 방법
CN110008724A (zh) 固态硬盘控制器安全加载方法、装置及存储介质
CN105608345A (zh) 一种Stm32引导程序加密的方法
CN114116710A (zh) 基于区块链的数据处理方法、装置、设备及存储介质
KR20220108152A (ko) 비신뢰 메모리에 저장된 데이터에 대한 액세스를 제어하는 장치 및 방법
WO2017183832A1 (ko) 열 지향 레이아웃 파일의 생성 방법

Legal Events

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

Payment date: 20150710

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160615

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20170707

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180702

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190708

Year of fee payment: 8