KR20170139547A - 메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호 - Google Patents

메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호 Download PDF

Info

Publication number
KR20170139547A
KR20170139547A KR1020177030393A KR20177030393A KR20170139547A KR 20170139547 A KR20170139547 A KR 20170139547A KR 1020177030393 A KR1020177030393 A KR 1020177030393A KR 20177030393 A KR20177030393 A KR 20177030393A KR 20170139547 A KR20170139547 A KR 20170139547A
Authority
KR
South Korea
Prior art keywords
memory
read
memory access
write command
tag
Prior art date
Application number
KR1020177030393A
Other languages
English (en)
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 퀄컴 인코포레이티드
Publication of KR20170139547A publication Critical patent/KR20170139547A/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
    • G06F12/1425Protection 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 the protection being physical, e.g. cell, word, block
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/062Securing storage systems
    • G06F3/0622Securing storage systems in relation to access
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0637Permissions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

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

Abstract

정의된 메모리 블록들 상에서 동작하도록 특정하게 바인딩되고 그리고 다른 메모리 블록들에서 동작하는 것이 억제된 다양한 세트들의 명령들을 정의함으로써, 실행가능 명령들로부터의 인가되지 않은 액세스로부터 메모리 블록들을 보호하는 방식이 제공된다. 예컨대, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함할 수 있고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적이다. 메모리 블록들이 또한 설정되고, 각각의 메모리 블록은 복수의 상이한 메모리 액세스 태그들 중 하나와 연관된다. 결과적으로, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행은 억제되거나 또는 중단된다.

Description

메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호
[0001] 본 출원은, 2015년 4월 24일 미국 특허청에 출원된 정규 특허 출원 번호 제14/696,229호를 우선권으로 주장하여 그 권익을 청구하며, 그 정규 특허 출원의 전체 내용은 인용에 의해 본원에 포함된다.
[0002] 본원에서 개시되는 다양한 특징들은 일반적으로, 메모리 오버런 공격(memory overrun attack)들을 완화시키기 위한 방법들에 관한 것으로, 더 구체적으로는, 실행가능 명령들 및 메모리 블록들이 태그들과 연관되어서, 실행가능 명령들의 태그 및 메모리 블록들의 태그 둘 모두가 동일한 경우에만, 명령들이 메모리 블록들(예컨대, 서브-페이지 사이즈 메모리 블록(sub-page size memory block)들)에 액세스할 수 있는 방법에 관한 것이다.
[0003] 디바이스들, 이를테면, 모바일 폰들, 모바일 디바이스들, 페이저들, 무선 모뎀들, 개인 휴대 정보 단말들, 태블릿들, PIM(personal information manager)들, 개인 미디어 플레이어들, 팜톱 컴퓨터들, 랩톱 컴퓨터들, 또는 프로세서를 갖는 임의의 다른 디바이스는 점점 더 대중화되고 유비쿼터스화되고 있다. 이러한 디바이스들에서 생성, 입력, 저장, 및/또는 수신되는 데이터는 인가되지 않은 액세스로부터 보호되어야 한다. 이러한 인가되지 않은 액세스의 하나의 위험은 메모리 오버런 공격을 포함하는데, 메모리 오버런 공격은 실행가능 코드의 기존의 판독 또는 기록 동작들을 사용하여 디바이스의 정보를 손상시킨다. 오버런 메모리 공격은 통상적으로, 일부 레지스터(들)(예컨대, 어드레스 레지스터, 포인터 레지스터 등)를 수정하는 것을 수반하며, 이는 메모리 오버런을 생성하기 위해 (실행가능 코드 또는 명령들의) 판독 또는 기록이 메모리의 의도되지 않은 부분에 액세스하도록 초래한다.
[0004] 결과적으로, 오버런 메모리 공격들을 방지 또는 억제하는 솔루션에 대한 필요성이 존재한다.
[0005] 제1 특징은 통합 메모리 블록 보호를 갖는 실행가능 코드를 컴파일링하기 위한 방법을 제공한다. 복수의 메모리 액세스 태그들이 정의될 수 있다. 일 예에서, 복수의 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함할 수 있다. 마찬가지로, 각각의 메모리 액세스 태그에 특정적인, 복수의 판독 및 기록 명령들이 정의될 수 있다. 예컨대, 복수의 판독 및/또는 기록 명령들의 각각의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관될 수 있다.
[0006] 실행 코드로의 소스 코드의 컴파일레이션(compilation) 동안, 복수의 판독 및/또는 기록 명령들에 대해 하나 또는 그 초과의 메모리 블록들이 정의될 수 있다. 일부 구현들에서, 메모리 블록은 서브-페이지 사이즈 메모리 영역일 수 있다.
[0007] 하나 또는 그 초과의 메모리 블록들은 대응하는 메모리 액세스 태그와 연관될 수 있다. 각각의 메모리 블록은 동일한 대응하는 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령에 의해서만 액세스가능하다.
[0008] 일 예에서, 복수의 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함할 수 있다.
[0009] 일 예에 따르면, 복수의 별개의 판독 및 기록 명령들을 정의하는 것은: (a) 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 정의하는 것; (b) 제2 메모리 액세스 태그와 연관된 제2 판독 및/또는 기록 명령을 정의하는 것을 포함할 수 있고, 제1 판독 및/또는 기록 명령은 제2 액세스 태그와 연관된 메모리 블록 상에서 동작하지 못한다. 제1 메모리 액세스 태그는 복수의 메모리 블록들과 연관될 수 있다.
[0010] 일 구현에서, 하나 또는 그 초과의 메모리 블록들은 메모리 스택 영역(memory stack region) 또는 메모리 힙 영역(memory heap region) 내에 정의될 수 있다.
[0011] 제2 특징들은, 하나 또는 그 초과의 명령들을 갖는 비-일시적 기계-판독가능 저장 매체를 제공하며, 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 프로세싱 회로로 하여금: (a) 복수의 메모리 액세스 태그들을 정의하게 하고; (b) 각각의 메모리 액세스 태그에 특정적인, 복수의 판독 및 기록 명령들을 정의하게 하고; 그리고/또는 (c) 실행가능 코드로의 소스 코드의 컴파일레이션 동안, 복수의 판독 및/또는 기록 명령들에 대해 하나 또는 그 초과의 메모리 블록들을 정의하고 그리고 하나 또는 그 초과의 메모리 블록들을 대응하는 메모리 액세스 태그와 연관시키게 하며, 각각의 메모리 블록은 동일한 대응하는 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령에 의해서만 액세스가능하다. 일부 예들에서, 각각의 메모리 블록은 서브-페이지 사이즈 메모리 영역일 수 있다.
[0012] 제3 특징은 명령 단위로 메모리 블록들을 보호하기 위해 프로세싱 디바이스에서 동작가능한 방법을 제공한다. 실행가능 코드는 저장 디바이스로부터 획득되고, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관된다. 각각의 메모리 블록이 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들이 정의될 수 있다. 일 예에서, 실행가능 코드는 단일 애플리케이션 또는 프로세스일 수 있다.
[0013] 그런 다음, 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부가 실행될(또는 실행을 위해 로딩될) 수 있으며, 각각의 실행되는 판독 및/또는 기록 명령은, 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한된다. 즉, 판독 및/또는 기록 명령이, 판독 및/또는 기록 명령과 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 판독 및/또는 기록 명령의 실행은 억제되거나 또는 중단된다.
[0014] 일 예에서, 복수의 별개의 판독 및 기록 명령들은: (a) 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령; (b) 제2 메모리 액세스 태그와 연관된 제2 판독 및/또는 기록 명령을 포함할 수 있다. 제1 판독 및/또는 기록 명령이 제2 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령은 억제되거나 또는 중단된다.
[0015] 하나 또는 그 초과의 메모리 블록들은 실행가능 코드가 컴파일링될 때 미리-정의될 수 있거나 또는 실행가능 코드가 실행될 때 동적으로 정의될 수 있다.
[0016] 제4 특징은 명령 단위로 메모리 블록들을 보호하도록 구성된 디바이스를 제공한다. 디바이스는 저장 디바이스 및 프로세싱 회로를 포함할 수 있다. 저장 디바이스는 실행가능 코드를 저장할 수 있고, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관된다. 프로세싱 회로는: (a) 각각의 메모리 블록이 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 정의하고; (b) 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하도록 구성되고, 그리고/또는 (c) 각각의 실행되는 판독 및/또는 기록 명령은, 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한된다.
[0017] 다른 경우에서, 디바이스는: (a) 저장 디바이스로부터 실행가능 코드를 획득하기 위한 수단 ― 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―; (b) 각각의 메모리 블록이 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 정의하기 위한 수단; 및/또는 (c) 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하기 위한 수단을 포함할 수 있으며, 각각의 실행되는 판독 및/또는 기록 명령은, 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한된다.
[0018] 또 다른 경우에서, 하나 또는 그 초과의 명령들을 갖는 비-일시적 기계-판독가능 저장 매체가 제공되며, 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 프로세싱 회로로 하여금: (a) 저장 디바이스로부터 실행가능 코드를 획득하게 하고 ― 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―; (b) 각각의 메모리 블록이 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 정의하게 하고; 그리고/또는 (c) 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하게 하고, 각각의 실행되는 판독 및/또는 기록 명령은, 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한된다.
[0019] 제5 특징은 명령 단위로 메모리 블록들을 보호하기 위해 프로세싱 디바이스에서 동작가능한 다른 방법을 제공한다. 실행가능 코드는 저장 디바이스로부터 획득될 수 있고, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적이다. 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령은 실행가능 코드로부터 획득될 수 있다. 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행은 억제되거나, 중단되거나, 또는 차단된다. 일부 경우들에서, 메모리 블록은 서브-페이지 사이즈 메모리 영역일 수 있다. 복수의 메모리 블록들 각각에 대해 메모리 액세스 태그를 정의하는 맵핑이 유지될 수 있다.
[0020] 일 예에서, 복수의 상이한 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함할 수 있다. 제1 메모리 액세스 태그는 복수의 별개의 메모리 블록들과 연관될 수 있다.
[0021] 제6 특징은 명령 단위로 메모리 블록들을 보호하도록 구성된 디바이스를 제공한다. 디바이스는 저장 디바이스 및 프로세싱 회로를 포함할 수 있다. 저장 디바이스는 실행가능 코드를 저장할 수 있고, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적이다. 프로세싱 회로는: (a) 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하고; 그리고/또는 (b) 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행을 억제하도록 구성될 수 있다.
[0022] 다른 경우에서, 디바이스는: (a) 저장 디바이스로부터 실행가능 코드를 획득하기 위한 수단 ― 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―; (b) 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하기 위한 수단; 및/또는 (c) 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행을 억제하기 위한 수단을 포함할 수 있다.
[0023] 또 다른 예에서, 인가되지 않은 액세스로부터 메모리 블록들을 보호하기 위한 비-일시적 기계-판독가능 저장 매체가 제공되며, 기계-판독가능 저장 매체는 하나 또는 그 초과의 명령들을 갖고, 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 프로세싱 회로로 하여금: (a) 저장 디바이스로부터 실행가능 코드를 획득하게 하고 ― 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―; (b) 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하게 하고; 그리고/또는 (c) 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행을 억제하게 한다.
[0024] 도 1은 인가된 액세스로부터 메모리 블록들을 보호하는 방법을 위한 예시적 동작 환경을 예시하는 블록 다이어그램이다.
[0025] 도 2는 메모리 블록들이 복수의 상이한 메모리 액세스 태그들 중 하나와 태깅되거나 또는 연관될 수 있는 방법을 예시한다.
[0026] 도 3은 메모리 블록들이 명령 단위 및 메모리 블록 단위로, 인가된 액세스로부터 보호되는 예시적 시스템을 예시하는 블록 다이어그램이다.
[0027] 도 4는 명령 단위 메모리 블록 보호를 제공하기 위해 컴파일러에 의해 구현될 수 있는 방법을 예시하는 흐름도이다.
[0028] 도 5는 명령 단위 메모리 블록 보호를 제공하기 위한 제2 방법을 예시하는 흐름도이다.
[0029] 도 6은 명령 단위 메모리 블록 보호를 제공하기 위한 제2 방법을 예시하는 흐름도이다.
[0030] 도 7은 명령 단위 메모리 블록 보호를 제공하면서 코드를 실행하도록 구성된 예시적 프로세싱 디바이스를 예시하는 블록 다이어그램이다.
[0031] 이하의 설명에서, 설명된 구현들의 완전한 이해를 제공하기 위해 특정 세부사항들이 주어진다. 그러나, 구현들이 이러한 특정 세부사항들 없이도 실행될 수 있다는 것이 당업자에 의해 이해될 것이다. 예컨대, 회로들은 불필요한 세부사항으로 구현들을 모호하게 하지 않기 위해 블록 다이어그램들로 도시될 수 있다. 다른 경우들에서, 잘-알려진 회로들, 구조들 및 기법들은 구현들을 모호하게 하지 않기 위해 상세하게 도시될 수 있다.
[0032] "예시적인"이라는 용어는 "예, 경우 또는 예시로서 기능하는" 것을 의미하도록 본원에서 사용된다. "예시적인" 것으로서 본원에서 설명되는 임의의 구현 또는 실시예는 반드시 다른 실시예들 또는 구현들보다 바람직하거나 유용한 것으로 해석되는 것은 아니다.
개관
[0033] 일 특징은 인가되지 않은 액세스로부터 메모리 블록들을 보호하는 방식을 제공한다. 예컨대, 실행가능 코드의 컴파일레이션 전에 또는 실행가능 코드의 생성과 동시에, 복수의 상이한 메모리 액세스 태그들이 정의된다. 마찬가지로, 각각의 메모리 액세스 태그에 특정적인, 복수의 별개의 판독 및 기록 명령들이 정의된다. 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록들에 적용되는 경우, 판독 및/또는 기록 명령은 실행하지 못한다(또는 실행하는 것이 방지됨). 실행가능 코드의 컴파일레이션 동안, 메모리 블록들은 복수의 액세스 속성들 중 하나와 연관된다.
[0034] 제2 양상에 따르면, 실행가능 코드의 실행 동안, 프로세싱 회로는 제1 판독 및/또는 기록 명령에 대한 메모리 액세스 태그를 확인할 수 있다. 제1 판독 및/또는 기록 명령이 제2 메모리 액세스 태그와 연관된 메모리 블록에 적용되는 경우, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령의 실행은 억제되고, 차단되고, 그리고/또는 중단된다.
[0035] 제3 양상에 따르면, 메모리 블록들의 보호는, 프로세싱 회로 또는 운영 시스템이 임의의 애플리케이션-종속적 또는 사용자-종속적 보안 콘텍스트들 또는 보호된 메모리 영역들을 설정하게 하는 것과는 독립적으로 달성된다. 즉, 실행가능 코드를 컴파일링하는 데 사용되는 명령들은 이러한 명령에 의해 액세스가능한 메모리 공간(예컨대, 태깅된 메모리 영역)을 정의한다. 이러한 명령들을 실행하는 프로세싱 회로는 단지 이러한 명령들에 의해 설정된 실행 규칙들/프로토콜을 따를 뿐이다. 결과적으로, 명령은, 그 명령 및 메모리 영역 둘 모두가 동일한 메모리 액세스 태그와 연관되는 경우에만 그 메모리 영역에 액세스하도록 허용된다. 이 접근법은, 특정 메모리 영역들이 특정 애플리케이션들에 의해 액세스되는 것을 안전하게 하기 위해 또는 보호하기 위해 프로세서 및/또는 운영 시스템에 의해 구현될 수 있는 임의의 다른 메모리 보호 메커니즘 또는 방법과는 독립적이다.
[0036] 제4 양상에 따르면, 메모리 블록들의 보호는 애플리케이션(들)과 독립적일 수 있다. 즉, 메모리 블록들은 애플리케이션 단위보다는 명령 단위로 보호될 수 있다. 결과적으로, 동일한 애플리케이션 내로부터의 상이한 판독 또는 기록 명령들은 동일한 메모리 블록(들)에 액세스하지 못할 수 있다. 예컨대, 제1 메모리 액세스 태그와 연관된 제1 판독 또는 기록 명령은 제1 메모리 액세스 태그와 또한 연관된 제1 메모리 블록에 액세스할 수 있지만, 제2 메모리 액세스 태그와 연관된(또는 제1 메모리 액세스 태그와 연관되지 않은) 제2 판독 또는 기록 명령은, 제1 판독 또는 기록 명령 및 제2 판독 또는 기록 명령 둘 모두가 동일한 실행 애플리케이션 내로부터 비롯되는 경우일지라도, 제1 메모리 블록에 액세스하도록 허용되지 않는다.
[0037] 제5 양상에 따르면, 메모리 블록들의 보호는 서브-페이지 사이즈 메모리 블록들로 구현된다. 메모리 블록 사이즈는, 메모리를 상이한 애플리케이션들 및/또는 프로세스들에 배정하기 위해 특정 시스템 아키텍처에 의해 어떠한 메모리 페이지 사이즈가 사용되든 그보다 더 작다.
[0038] 제6 양상에 따르면, 메모리 블록의 특징을 정의하기 위해 메모리 액세스 태그 속성이 부가된다. 이 메모리 액세스 태그는, 판독 속성, 기록 속성 등과 같은 다른 속성들과는 별개이다.
예시적 동작 환경
[0039] 도 1은 (예컨대, 오버런 메모리 공격들에 의한) 인가된 액세스로부터 메모리 블록들을 보호하는 방법을 위한 예시적 동작 환경을 예시하는 블록 다이어그램이다. 예컨대, 코드(106)는 컴파일러 디바이스(102)에 의해 실행가능 코드(108)로 컴파일링될 수 있다. 코드를 컴파일링할 때, 컴파일러 디바이스(102)는 (예컨대, 데이터 및/또는 명령들의 저장을 위해) 코드에 의해 사용되는/정의되는 각각의 메모리 블록을, 복수의 상이한 메모리 액세스 태그들 중의 메모리 액세스 태그와 연관시킬 수 있다. 메모리 액세스 태그들이 (예컨대, 메모리 페이지들 및/또는 메모리 블록들의) 보안 대 비-보안 메모리 배정(secure versus non-secure memory allocation)들과 관련되지 않을 수 있다는 것을 주목한다. 대신에, 메모리 액세스 태그들은, 하나 또는 그 초과의 메모리 블록들을 참조하고 그리고 그 하나 또는 그 초과의 메모리 블록들을 다른 메모리 블록들과 구별하기 위한 논리적 구성들일 수 있다. 마찬가지로, 복수의 별개의 타입들의 판독 및/또는 기록 명령들이 실행가능 코드에서 사용될 수 있고, 각각의 타입의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관된다. 다양한 예들에서, "태그"는, 메모리 블록을 특정 실행가능 명령(예컨대, 판독 및/또는 기록 명령)과 관련시키거나 또는 연관시키는 역할을 할 수 있는 (예컨대, 명시적인, 묵시적인, 및/또는 논리적인) 임의의 식별자, 맵핑, 및/또는 속성일 수 있다. 예컨대, 동일한 판독/기록 동작을 수행하는 상이한 세트들의 판독/기록 명령들이 정의될 수 있지만, 그 각각은 복수의 상이한 메모리 블록들로부터의 특정 메모리 블록(또는 메모리 액세스 태그)에 특정적이고 그리고/또는 이에 바인딩된다(bound).
[0040] 일부 구현들에서, 메모리 블록들의 보호는 서브-페이지 사이즈 메모리 블록들로 구현될 수 있다. "페이지" 또는 "가상 페이지"로 또한 지칭되는 메모리 페이지는 메모리의 고정된-길이의 인접하는 블록일 수 있으며, 종종 페이지 테이블에서 단일 엔트리로 설명된다. 메모리 페이지들은 종종 프로세싱 회로에 의해 실행되는 프로세스들 또는 애플리케이션과 연관되거나 또는 그에 배정된다. 페이지 테이블은 종종, 각각의 프로세스 또는 애플리케이션에 배정 및/또는 할당되는 메모리 페이지들을 정의하거나 추적하는 데 사용된다. 일부 경우들에서, 메모리 페이지는 메모리 운영 시스템에서의 메모리 관리를 위한 최소 데이터 유닛일 수 있다. 메모리 블록 사이즈는, 메모리를 상이한 애플리케이션들 및/또는 프로세스들에 배정하기 위해 특정 시스템 아키텍처(예컨대, 프로세싱 회로, 메모리 관리 회로 등)에 의해 어떠한 메모리 페이지 사이즈가 사용되든 그보다 더 작다.
[0041] 실행가능 코드는 프로세싱 디바이스(104)의 저장 디바이스(110)에 로딩될 수 있다. 그런 다음, 프로세싱 디바이스(104) 내의 프로세싱 회로(112)는, 제1 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령들이, 동일한 제1 메모리 액세스 태그와 연관된 메모리 블록들에만 액세스할 수 있는 실행가능 코드를 실행할 수 있다. 메모리 액세스 태그들로의 메모리 블록의 맵핑은 이러한 목적을 위해 메모리 디바이스(114) 내에 유지될 수 있다.
인가되지 않은 액세스로부터의 메모리 블록들의 예시적 보호
[0042] 도 2는 메모리 블록들이 복수의 상이한 메모리 액세스 태그들 중 하나와 태깅되거나 또는 연관될 수 있는 방법을 예시한다. 실행가능 코드가 컴파일링될 때, 메모리 블록들은 변수들, 레지스터들 등에 대해 정의될 수 있다. 컴파일러는 어느 판독/기록 명령들이 어느 메모리 블록들에 액세스해야 하는지를 확인한다. 결과적으로, 판독/기록 명령들은, 그들이 의도된 메모리 블록들 상에서만 동작하도록 연관 및/또는 제한된다. 이는, 관련되지 않은 판독/기록 명령이, 메모리 오버런 공격의 부분으로서, 의도되지 않은 메모리 블록에 액세스하는 데 사용되는 것을 방지한다.
[0043] 일 예에서, 메모리 영역(202)은 메모리 블록들(204, 206, 208, 210, 212, 및 214)로서 논리적으로 분할 또는 배열될 수 있다. 각각의 메모리 블록은 예컨대, (예컨대, 메모리 페이지 사이즈보다 더 작은) 서브-페이지 메모리 세그먼트들일 수 있다. 각각의 메모리 블록은 맵핑 테이블(216)에 유지되는 태그와 연관된다.
[0044] 각각의 메모리 액세스 태그에 대해, 상이한 세트의 판독 및 기록 명령들(220) 또는 커맨드들이 정의될 수 있다. 예컨대, 태그-A에 대해, 명령들, 즉, A를 판독 및 A에 기록(Read-A and Write-A)(222)이 정의되고, 태그-B에 대해, 명령들, 즉, B를 판독 및 B에 기록(Read-B and Write-B)(224)이 정의되고, 태그-C에 대해, 명령들, 즉, C를 판독 및 C에 기록(Read-C and Write-C)(226)이 정의된다. 이들 명령들(220)은, 이들 명령들(220)이, 그들의 대응하는 액세스 속성과 태깅되거나 또는 연관된 메모리 블록에 액세스하고 있는지를 구체적으로 체크한다. 이들 명령들(220)은, 이들 명령들(220)이 액세스하는 메모리 블록이, 명령들의 대응하는 액세스 속성으로 식별/태깅되는 경우에만 진행하거나 실행한다. 예컨대, A에 기록 명령(Write-A instruction)이 태그-B로 태깅된 메모리 블록에 데이터를 기록 또는 저장하기 위해 인보크되는 경우, A에 기록 명령은 실패하고 진행하지 않는다. 일부 구현들에서, 판독 및 기록 동작들은 또한, 로드 및 저장 동작들로 지칭될 수 있다. 부가적으로, 일부 구현들에서, 각각의 액세스 태그에 특정적인 다른 명령들이 정의될 수 있다. 메모리 블록들에 대한 태그는 맵핑 테이블(216)을 태그하기 위해 메모리 블록에 저장될 수 있다.
[0045] 의도된 동작 하에서, 판독/기록 명령은 자신이 원래 배정된 메모리 블록에만 액세스할 수 있을 것이다. 그러나, 메모리 오버런 공격에서, 판독/기록 명령은 공격자에 의해, 의도되지 않은 메모리 블록에 액세스하도록 용도변경(repurpose)될 수 있다. 본원에서 예시된 메모리 액세스 태그들의 사용은, 특정 판독/기록 명령들을 그들이 원래 의도되었던 메모리 블록들에만 바인딩하기 위해 태그들을 사용함으로써, 메모리 블록들에 대한 이러한 의도되지 않은 액세스를 방지한다.
[0046] 실행가능 코드로의 소스 코드의 컴파일링 시에, 컴파일러는, 어느 소스 코드 판독 및/또는 기록 명령들이 어느 메모리 블록들에 액세스해야하는지를 식별하도록 구성될 수 있고, 그런 다음, 식별된 각각의 별개의 메모리 블록(들)에 대해 별개의 판독 및/또는 기록 명령들(예컨대, 별개의 클래스들 및/또는 타입들의 명령들)을 사용한다. 예컨대, 식별된 각각의 메모리 블록은 별개의 메모리 액세스 태그와 연관될 수 있다. 마찬가지로, 특정 메모리 블록에 액세스하도록 허용된 명령(들)은 또한, 그 특정 메모리 블록과 동일한 메모리 액세스 태그와 연관된다. 이러한 방식으로, 실행가능 코드(또는 실행가능 코드의 명령)는 미리-결정된 또는 미리-연관된 메모리 블록들 상에서만 동작하도록 제한된다. 명령이 그 명령과 연관되지 않은 메모리 블록에 액세스하려고 시도하는 경우, 이러한 명령의 실행은 프로세싱 회로에 의해 중단된다. 일 구현에서, 메모리 블록들에 대한 액세스는 명령 단위로 제한되어서, (복수의 별개의 판독 및/또는 기록 명령들 중에서) 단일 판독 및/또는 기록 명령만이 각각의 메모리 블록에 액세스하도록 허용된다. 부가적으로, 어떠한 단일 (판독/기록) 명령도 모든 메모리 블록들(예컨대, 그 단일 명령이 명시적으로 연관되지 않은 메모리 블록들)에 액세스하도록 허용되지 않는다.
[0047] 일 예에서, 메모리의 각각의 8-워드 블록은 보호(protected) 또는 비보호(unprotected)로서 마킹되거나 태깅될 수 있다(예컨대, 2-태그 접근법). 보호 그리고 비보호 메모리에 액세스하기 위한 별개의 로드/판독 및 저장/기록 명령들이 정의된다. 예시적 구현에서, 보호 영역(protected region)들은 메모리의 비보호 영역(unprotected region)들 사이의 "가드(guard)" 블록들로서 사용될 수 있다. 프로세스가 루프에서 비보호 메모리에 액세스할 때, 비보호 블록의 말단을 지나 보호 블록에 액세스하려고 시도하는 경우, 메모리 액세스 속성(보호(protected))이 더 이상 (비보호(unprotected)와 연관된) 액세스 명령들과 매칭하지 않기 때문에, 명령은 실패할 것이다. 유사하게, 보호 메모리 상에서 동작하는 프로세스는 인접한 비보호 메모리 블록을 지나갈 수 없다.
[0048] 더 복잡한 전개에서, 보호 블록들은 또한, 메타데이터 또는 제어 흐름 데이터를 저장하는 데 사용될 수 있다. 예컨대, 스택 상에서, 컴파일러는 스택 포인터 및 리턴 어드레스(뿐만 아니라 다른 세이브된 레지스터들)를 보호 블록에 위치시켜, 그들이 중복기록되는(overwritten) 것을 더 어렵게 만든다. 유사하게, 힙(heap) 상에서, 힙 메타데이터가 보호 블록들에 위치될 수 있다. 방법은 (예컨대, 간단히 모든 것을 비보호로서 마킹함으로써) 기존의 코드와 완전히 역행하여 호환가능할 수 있다.
[0049] 도 3은 메모리 블록들이 명령 단위 및 메모리 블록 단위로, 인가된 액세스로부터 보호되는 예시적 시스템을 예시하는 블록 다이어그램이다. 예컨대, 소스 코드(302)는 컴파일러 디바이스에 의해 실행가능 코드(304)로 컴파일링될 수 있다. 소스 코드(302)를 컴파일링할 때, 컴파일러 디바이스는 실행가능 명령들(306), 메모리 배정들(308), 및/또는 메모리 액세스 태그 맵핑들(310)을 생성한다. 일 예에서, 명령들(306)은 동일한 동작들(예컨대, A를 판독/A에 기록, B를 판독/B에 기록, C를 판독/C에 기록 등) 중 일부를 수행할 수 있는 별개의 명령들(326)을 포함할 수 있다. 그러나, 별개의 명령들 각각은 메모리 블록들에 명시적으로 바인딩될 수 있다. 예컨대, 실행가능 코드(304)는 (예컨대, 데이터 및/또는 명령들의 저장을 위해) 명령들(306)에 의해 사용되는 각각의 메모리 블록을 정의하거나 복수의 상이한 메모리 액세스 태그들 중의 메모리 액세스 태그와 연관시킬 수 있다. 각각의 명령(326)은 상이한 메모리 액세스 태그와 연관될 수 있어서, 특정 메모리 블록과 동일한 메모리 액세스 태그를 갖는 그러한 명령들만이 그 메모리 블록에 액세스하도록 허용된다. 예컨대, A를 판독 및/또는 A에 기록 명령은 제1 메모리 액세스 태그 A와 연관될 수 있는 한편, B를 판독 및/또는 B에 기록 명령은 제2 메모리 액세스 태그 B와 연관될 수 있다.
[0050] 프로세싱 디바이스(312)로의 분배 시에, 실행가능 코드(304)는 저장 디바이스(314)에 저장될 수 있고, 저장 디바이스(314)로부터의 실행가능 코드(304)가 프로세싱 회로(316)에 의해 실행될 수 있다. 다양한 예들에서, 프로세싱 회로(316)는 하나 또는 그 초과의 프로세서들, 메모리 제어기, 입력/출력 인터페이스들 등을 포함할 수 있다. 메모리 디바이스(318)는 또한 프로세싱 디바이스(312)에 커플링될 수 있다. 일 예에서, 프로세싱 회로는, 메모리 페이지들을 애플리케이션 및/또는 프로세스 단위로 배정하는 페이지 배정 테이블(320)을 메모리 디바이스(318)에 셋업할 수 있다. 실행가능 코드(304)는 또한, 프로세싱 회로(316)로 하여금, 메모리 블록들(322) 및 메모리 블록 속성들(324)을 메모리 디바이스(318)에 명령 단위로 셋업하게 할 수 있다.
[0051] 일 예에서, 각각의 메모리 블록(322)(예컨대, 블록 A, 블록 B, ... 블록 N)에 대해, 메모리 블록 속성들(324)의 세트가 정의된다. 속성들(324)의 세트는 예컨대, 판독-전용 속성, 메모리 액세스 태그 속성 등을 포함할 수 있다. 판독-전용 속성은 대응하는 메모리 블록이 특정 애플리케이션 및/또는 프로세스에 의해 판독-전용인지 여부를 정의할 수 있다. 메모리 액세스 태그 속성은, 어느 호출 명령이, 대응하는 메모리 블록을 판독 및/또는 대응하는 메모리 블록에 기록하도록 허용되는지를 표시할 수 있다. 이러한 방식으로, 각각의 메모리 블록은 특정 명령(328)에 바인딩되고, 다른 메모리 액세스 태그들과 연관된 명령들에 의해서는 액세스될 수 없다.
[0052] 메모리 액세스 태그들이 (예컨대, 메모리 페이지들 및/또는 메모리 블록들의) 보안 대 비-보안 메모리 배정들과 관련되지 않을 수 있다는 것을 주목한다. 대신에, 메모리 액세스 태그들은, 하나 또는 그 초과의 메모리 블록들을 참조하고 그리고 그 하나 또는 그 초과의 메모리 블록들을 다른 메모리 블록들과 구별하기 위한 논리적 구성들일 수 있다. 마찬가지로, 복수의 별개의 타입들의 판독 및/또는 기록 명령들이 실행가능 코드에서 사용될 수 있고, 각각의 타입의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관된다.
[0053] 일 예에서, 메모리 블록들의 보호는 서브-페이지 사이즈 메모리 블록들에서 구현된다. 메모리 블록 사이즈는, 메모리를 상이한 애플리케이션들 및/또는 프로세스들에 배정하기 위해 페이지 배정 테이블(320)에 의해 어떠한 메모리 페이지 사이즈가 사용되든 그보다 더 작다.
[0054] 부가적으로, 메모리 블록들 및 명령들을 바인딩하기 위한 메모리 액세스 태그들의 사용은, 프로세싱 디바이스(312)(또는 프로세싱 디바이스(312) 내에서 실행되는 운영 시스템)가 임의의 애플리케이션-종속적 또는 사용자-종속적 보안 콘텍스트들 또는 보호된 메모리 영역들을 설정하게 하는 것과는 독립적일 수 있다. 즉, 실행가능 명령은, 그 명령 및 메모리 블록 둘 모두가 동일한 메모리 액세스 태그와 연관되는 경우에만 그 메모리 블록에 액세스하도록 허용된다. 이러한 방식으로, 메모리 블록들(322)은 애플리케이션 단위보다는 명령 단위로 보호될 수 있다. 결과적으로, 동일한 애플리케이션/프로세스 내로부터의 상이한 판독 또는 기록 명령들은 동일한 메모리 블록(들)에 액세스하지 못할 수 있다. 예컨대, 제1 메모리 액세스 태그(예컨대, 태그 A)와 연관된 제1 판독 또는 기록 명령(예컨대, A를 판독/A에 기록)은 제1 메모리 액세스 태그(예컨대, 태그 A)와 또한 연관된 제1 메모리 블록(예컨대, 블록 C)에 액세스 가능할 수 있다. 그러나, 제2 메모리 액세스 태그(예컨대, 태그 B)와 연관된 또는 제1 메모리 액세스 태그(예컨대, 태그 A)와 연관되지 않은 제2 판독 또는 기록 명령(예컨대, B를 판독/B에 기록)은, 제1 판독 또는 기록 명령(예컨대, A를 판독/A에 기록) 및 제2 판독 또는 기록 명령(예컨대, B를 판독/B에 기록) 둘 모두가 동일한 실행 애플리케이션 또는 프로세스 내로부터 비롯된 경우일지라도, 제1 메모리 블록(예컨대, 블록 C)에 액세스하도록 허용되지 않는다.
예시적 컴파일러
[0055] 도 4는 명령 단위 메모리 블록 보호를 제공하기 위해 컴파일러에 의해 구현될 수 있는 방법을 예시하는 흐름도이다. 소스 코드가 획득된다(402). 소스 코드의 컴파일레이션 전에 또는 소스 코드의 컴파일레이션과 동시에, 복수의 메모리 액세스 태그들이 정의(예컨대, 생성, 컴퓨팅, 등)될 수 있다(404). 각각의 메모리 액세스 태그에 특정적인, 복수의 판독 및/또는 기록 명령들이 정의된다(406). 예컨대, 복수의 판독 및/또는 기록 명령들의 각각의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관될 수 있다.
[0056] 실행가능 코드로의 소스 코드의 컴파일레이션 동안, 하나 또는 그 초과의 메모리 블록들이 복수의 판독 및/또는 기록 명령들에 대해 정의되고 그리고 대응하는 메모리 액세스 태그와 연관되며, 각각의 메모리 블록은 동일한 대응하는 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령에 의해서만 액세스가능하다(408). 예컨대, 메모리 블록이 제1 메모리 액세스 태그와 연관되는 경우, 그 메모리 블록은, 제1 메모리 액세스 태그와 또한 연관되는 명령(예컨대, 판독/기록 명령들)에 의해서만 액세스(예컨대, 그 메모리 블록으로부터 판독 또는 그 메모리 액세스 블록에 기록)될 수 있다. 즉, 명령은, 그 명령과 상이한 메모리 액세스 태그와 연관된 메모리 블록에 적용되는 경우, 실행하는 것(예컨대, 판독 또는 기록 동작들을 수행하는 것)이 방지된다. 복수의 판독 및/또는 기록 명령들의 각각의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관될 수 있다. 복수의 판독 및/또는 기록 명령들은 소스 코드로부터 실행가능 코드를 생성하는 데 사용될 수 있다.
[0057] 대안적 구현에서, 컴파일러가 하나 또는 그 초과의 메모리 블록들을 정의하기보다는, 하나 또는 그 초과의 메모리 블록들은, (예컨대, 프로세싱 회로에 의한) 실행가능 코드의 실행 시에 동적으로 정의되고 그리고/또는 설정될 수 있다.
[0058] 일 구현에서, 소스 코드를 실행가능 코드로 컴파일링하는 동안, 컴파일러는 어느 소스 코드 판독 및/또는 기록 명령들이 어느 메모리 블록들에 액세스해야하는지를 식별하도록 구성될 수 있다. 그런 다음, 식별된 각각의 별개의 메모리 블록(들)에 대해 별개의 판독 및/또는 기록 명령들(예컨대, 별개의 클래스들 및/또는 타입들의 명령들)이 사용된다. 이전에 주목된 바와 같이, 식별된 각각의 메모리 블록은 별개의 메모리 액세스 태그와 연관될 수 있다. 마찬가지로, 특정 메모리 블록에 액세스하도록 허용된 명령(들)은 또한, 그 특정 메모리 블록과 동일한 메모리 액세스 태그와 연관된다. 이러한 방식으로, 실행가능 코드(또는 실행가능 코드의 명령)는 미리-결정된 또는 미리-연관된 메모리 블록들 상에서만 동작하도록 제한된다.
[0059] 실행가능 코드는 분배 및/또는 송신을 위해 저장될 수 있다(410). 복수의 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함할 수 있다.
[0060] 일 예에서, 복수의 별개의 판독 및 기록 명령들을 정의하는 것은, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 정의하는 것 및 제2 메모리 액세스 태그와 연관된 제2 판독 및/또는 기록 명령을 정의하는 것을 포함할 수 있다. 제1 판독 및/또는 기록 명령은 제2 액세스 태그와 연관된 메모리 블록 상에서 동작하지 못하거나 또는 동작하는 것이 방지되며, 그 반대도 마찬가지이다.
[0061] 일 예에서, 각각의 메모리 액세스 태그는 하나 또는 그 초과의 상이한 메모리 블록들과 연관될 수 있다.
[0062] 메모리 블록은 서브-페이지 메모리 영역일 수 있다(예컨대, 블록은 메모리 페이지 사이즈보다 더 작음). 제1 애플리케이션/프로세스로부터의 제1 명령(예컨대, A를 판독/A에 기록)이 제1 메모리 블록에 액세스(예컨대, 제1 메모리 블록으로부터 판독/제1 메모리 블록에 기록)하는 것이 가능한 경우일지라도, 동일한 제1 애플리케이션/프로세스로부터의 그러나 상이한 메모리 액세스 태그와 연관된 제2 별개의 명령(예컨대, B를 판독/B에 기록)은 제1 메모리 블록에 액세스하는 것이 방지된다.
[0063] 다양한 예들에서, 메모리 블록들은 메모리 스택 영역(memory stack region) 또는 메모리 힙 영역(memory heap region) 내에 정의될 수 있다.
미세 메모리 보호(Fine Grained Memory Protection)되는 코드의 예시적 실행
[0064] 도 5는 명령 단위 메모리 블록 보호를 제공하기 위한 제1 방법을 예시하는 흐름도이다. 실행가능 코드는 저장 디바이스로부터 획득될 수 있고, 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관된다(502). 다양한 예들에서, 복수의 별개의 판독 및/또는 기록 명령들은, 별개의 클래스들의 판독 및/또는 기록 명령들, 별개의 타입들의 판독 및/또는 기록 명령들 등으로서 구성될 수 있다.
[0065] 그런 다음, 각각의 메모리 블록이 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들이 정의된다(504). 메모리 블록들의 이러한 정의는 실행가능 코드에 따를 수 있거나(예컨대, 실행가능 코드에 의해 미리-정의될 수 있음) 또는 실행가능 코드의 실행 시에 프로세싱 회로에 의해 동적으로 정의될 수 있다. 각각의 메모리 블록은 서브-페이지 사이즈 메모리 영역일 수 있다(예컨대, 블록은 메모리 페이지보다 더 작음).
[0066] 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부가 실행되며, 각각의 실행되는 판독 및/또는 기록 명령은, 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한된다(506). 예컨대, 이러한 제한은 실행가능 코드를 실행하는 프로세싱 회로에 의해 부과될 수 있다. 메모리 블록에 대한 액세스를 허용하기 전에, 프로세싱 회로는 그 메모리 블록에 액세스하려 하는 명령이 그 메모리 블록과 동일한 메모리 액세스 태그와 연관되었다는 것을 (예컨대, 속성들, 메모리 액세스 태그 맵핑 테이블 등을 사용하여) 검증할 수 있다. 그렇지 않으면, 판독 및/또는 기록 명령이, 그 판독 및/또는 기록 명령과 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 판독 및/또는 기록 명령의 실행은 억제되거나 또는 중단된다(508).
[0067] 도 6은 명령 단위 메모리 블록 보호를 제공하기 위한 제2 방법을 예시하는 흐름도이다. 실행가능 코드는 저장 디바이스로부터 획득될 수 있고, 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적이다(602). 일 예에서, 복수의 상이한 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함할 수 있다. 이러한 액세스 메모리 태그들은, 판독-전용 속성과 같은 일반적인 속성들과 별개이고 그리고/또는 상이할 수 있다.
[0068] 실행가능 코드를 실행하는 것(604)의 부분으로서, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령이 획득된다(606). 제1 메모리 액세스 태그는 복수의 별개의 메모리 블록들과 연관될 수 있고, 복수의 별개의 메모리 블록들은 모두 동일한 메모리 액세스 태그와 연관된다. 예컨대, 제1 복수의 별개의 메모리 블록들은 메모리 블록들의 제1 서브세트 및 메모리 블록들의 제2 서브세트를 포함할 수 있고, 메모리 블록들의 제1 및 제2 서브세트는 연속적인 또는 불연속적인 메모리 영역에 있을 수 있다.
[0069] 일부 경우들에서, 메모리 블록은 서브-페이지 메모리 영역일 수 있다. 일부 예들에서, 제1 판독 및/또는 기록 명령이 획득된 후에, 어느 메모리 액세스 태그가 제1 판독 및/또는 기록 명령과 연관되는지에 대한 결정이 이루어진다. 제1 판독 및/또는 기록 명령에 의해 액세스되는 메모리 블록이 제1 메모리 액세스 태그와 연관되었는지 여부에 대한 결정이 이루어진다(608).
[0070] 제1 판독 및/또는 기록 명령이 (제1 판독 및/또는 기록 명령과는) 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행은 억제되거나 또는 중단된다(610). 예컨대, 제1 판독 및/또는 기록 명령이 제2 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려 한다는 것이 확인될 수 있다.
[0071] 그렇지 않으면, 제1 판독 및/또는 기록 명령이 실행된다(612). 이 프로세스는, 실행가능 코드의 명령들 중 일부 또는 모두에 대해 반복될 수 있다(614).
[0072] 복수의 메모리 블록들 각각에 대해 메모리 액세스 태그를 정의하는 맵핑이 메모리 디바이스에 유지될 수 있다.
[0073] 도 7은 명령 단위 메모리 블록 보호를 제공하면서 코드를 실행하도록 구성된 예시적 프로세싱 디바이스를 예시하는 블록 다이어그램이다.
[0074] 프로세싱 디바이스(702)는 저장 디바이스(704), 프로세싱 회로(706), 및/또는 메모리 디바이스(708)를 포함할 수 있다.
[0075] 저장 디바이스(704)는 실행가능 코드를 저장하는 역할을 할 수 있다. 실행가능 코드는 복수의 별개의 판독 및 기록 명령들을 포함할 수 있고, 각각의 판독 및/또는 기록 명령은 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적이다.
[0076] 프로세싱 회로(706)는 명령 실행 모듈/회로(710), 메모리 블록 셋업 모듈/회로(712), 메모리 액세스 태그 맵핑 모듈/회로(714), 및/또는 메모리 액세스 태그 비교기(716)를 포함할 수 있다. 명령 실행 모듈/회로(710)는 실행가능 코드에 의해 정의된 명령들을 실행하는 역할을 할 수 있다. 메모리 블록 셋업 모듈/회로(712)는 실행가능 코드에 따라 (메모리 디바이스(708) 내에) 메모리 블록들(718)을 설정하는 역할을 할 수 있다. 메모리 액세스 태그 맵핑 모듈/회로(714)는 메모리 블록을 메모리 액세스 태그에 맵핑하는 역할을 할 수 있다. 메모리 액세스 태그 비교기(716)는 명령과 연관된 메모리 액세스 태그를 액세스되는 메모리 블록에 대한 메모리 액세스 태그와 비교하는 역할을 할 수 있다.
[0077] 메모리 디바이스(708)는 메모리 블록들(718), 메모리 블록 속성들(720)(예컨대, 메모리 블록 속성들(720)은 각각의 메모리 블록에 대한 메모리 액세스 태그를 정의할 수 있음), 및/또는 메모리 액세스 태그들을 메모리 블록들에 맵핑하기 위한 메모리 액세스 태그 맵(722)을 포함할 수 있다.
[0078] 도 7의 모듈들/회로들은 도 5 및 도 6(및 다른 곳)에서 설명된 하나 또는 그 초과의 특징들을 구현하는 역할을 할 수 있다. 예컨대, 명령 실행 모듈/회로(710)는, 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득할 수 있다. 명령 실행 모듈/회로(710)는: (a) 제1 판독 및/또는 기록 명령이 제1 메모리 액세스 태그와 연관된다는 것, 또는 (b) 제1 판독 및/또는 기록 명령이 제2 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려 한다는 것을 확인하기 위해, 메모리 액세스 태그 맵핑 모듈/회로(714) 및/또는 메모리 액세스 태그 비교기(716)를 사용할 수 있다.
명령 실행 모듈/회로(710)는, 제1 판독 및/또는 기록 명령이, 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 제1 판독 및/또는 기록 명령의 실행을 억제할 수 있다. 일부 구현들에서, 메모리 블록은 서브-페이지 사이즈 메모리 영역이다.
[0079] 도 1, 도 2, 도 3, 도 4, 도 5, 도 6 및/또는 도 7에 예시된 컴포넌트들, 단계들, 특징들, 및/또는 기능들 중 하나 또는 그 초과는, 단일 컴포넌트, 단계, 특징 또는 기능으로 재배열되고 그리고/또는 조합되거나, 또는 수 개의 컴포넌트들, 단계들, 또는 기능들로 구현될 수 있다. 본 개시내용의 범위로부터 벗어남이 없이, 추가의 엘리먼트들, 컴포넌트들, 단계들, 및/또는 기능들이 또한 추가될 수 있다. 도 1, 도 3 및 도 7에 예시된 장치, 디바이스들, 및/또는 컴포넌트들은 도 2, 도 4, 도 5 및/또는 도 6에서 설명된 방법들, 특징들, 또는 단계들 중 하나 또는 그 초과를 수행하도록 구성될 수 있다. 본원에서 설명된 신규한 알고리즘들은 또한, 효율적으로 소프트웨어로 구현되고 그리고/또는 하드웨어에 임베딩될 수 있다.
[0080] 또한, 적어도 일부 구현들은 플로차트, 흐름도, 구조도 또는 블록 다이어그램으로서 도시되는 프로세스로서 설명되었음이 주목된다. 플로차트가 순차적인 프로세스로서 동작들을 설명할 수 있지만, 동작들 중 다수의 동작들은 병렬로 또는 동시에 수행될 수 있다. 추가로, 동작들의 순서는 재배열될 수 있다. 프로세스는, 자신의 동작들이 완료될 때 종결된다. 프로세스는 방법, 함수, 절차, 서브루틴, 서브프로그램 등에 대응할 수 있다. 프로세스가 함수에 대응하는 경우, 프로세스의 종결은 호출 함수 또는 메인 함수로의 함수의 리턴에 대응한다.
[0081] 더욱이, 실시예들은 하드웨어, 소프트웨어, 펌웨어, 미들웨어, 마이크로코드, 또는 이들의 임의의 조합에 의해 구현될 수 있다. 소프트웨어, 펌웨어, 미들웨어, 또는 마이크로코드로 구현되는 경우, 필요한 태스크들을 수행하기 위한 프로그램 코드 또는 코드 세그먼트들은 저장 매체 또는 다른 저장소(들)와 같은 기계-판독가능 매체에 저장될 수 있다. 프로세서가 필요한 태스크들을 수행할 수 있다. 코드 세그먼트는 절차, 함수, 서브프로그램, 프로그램, 루틴, 서브루틴, 모듈, 소프트웨어 패키지, 클래스, 또는 명령들, 데이터 구조들, 또는 프로그램 스테이트먼트들의 임의의 조합을 나타낼 수 있다. 코드 세그먼트는, 정보, 데이터, 아규먼트들, 파라미터들 또는 메모리 콘텐츠들을 전달 및/또는 수신함으로써 다른 코드 세그먼트 또는 하드웨어 회로에 커플링될 수 있다. 정보, 아규먼트들, 파라미터들, 데이터 등은, 메모리 공유, 메시지 전달, 토큰(token) 전달, 네트워크 송신 등을 포함하는 임의의 적절한 수단을 통해 전달, 포워딩 또는 송신될 수 있다.
[0082] 비-일시적 "기계-판독가능 매체", "컴퓨터-판독가능 매체", 및/또는 "프로세서-판독가능 매체"라는 용어들은, 휴대가능 또는 고정형 저장 디바이스들, 광학 저장 디바이스들, 및 명령(들) 및/또는 데이터를 저장, 포함 또는 반송할 수 있는 다양한 다른 비-일시적 매체를 포함할 수 있다(그러나 이에 제한되지 않음). 따라서, 본원에서 설명되는 다양한 방법들은 부분적으로 또는 완전히, "기계-판독가능 매체", "컴퓨터-판독가능 매체", 및/또는 "프로세서-판독가능 매체"에 저장되고 그리고 하나 또는 그 초과의 프로세서들, 기계들 및/또는 디바이스들에 의해 실행될 수 있는 명령들 및/또는 데이터에 의해 구현될 수 있다.
[0083] 본원에서 개시된 예들과 관련하여 설명된 방법들 또는 알고리즘들은 직접 하드웨어로, 프로세서에 의해 실행가능한 소프트웨어 모듈로 또는 이들 둘의 조합으로, 프로세싱 유닛, 프로그래밍 명령들, 또는 다른 지시들의 형태로 구현될 수 있으며, 단일 디바이스에 포함되거나 또는 다수의 디바이스들에 걸쳐 분산될 수 있다. 소프트웨어 모듈은, RAM 메모리(random access memory), 플래시 메모리, ROM 메모리(read-only memory), EPROM 메모리(erasable programmable read-only memory), EEPROM 메모리(electrically erasable programmable read-only memory), 레지스터들, 하드 디스크, 제거가능 디스크, CD-ROM, 또는 당해 기술분야에 알려진 임의의 다른 형태의 저장 매체에 상주할 수 있다. 저장 매체는, 프로세서가 저장 매체로부터 정보를 판독하고 저장 매체에 정보를 기록할 수 있도록 프로세서에 커플링될 수 있다. 대안적으로, 저장 매체는 프로세서에 통합될 수 있다.
[0084] 당업자들은 본원에서 개시된 실시예들과 관련하여 설명되는 다양한 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 단계들이 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이 둘의 조합들로서 구현될 수 있음을 추가로 인지할 것이다. 하드웨어와 소프트웨어의 이러한 상호교환가능성을 명확히 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 단계들은 그들의 기능성의 관점들에서 일반적으로 상술되었다. 이러한 기능성이 하드웨어로 구현되는지 또는 소프트웨어로 구현되는지는 특정 애플리케이션, 및 전체 시스템에 부과된 설계 제약들에 의존한다.
[0085] 본원에서 설명된 실시예들의 다양한 특징들은, 본 개시내용의 범위로부터 벗어남이 없이 상이한 시스템들로 구현될 수 있다. 전술한 실시예들은 단지 예시들이며 본 개시내용을 제한하는 것으로서 해석되지 않아야 한다는 점을 주목해야 한다. 실시예들의 설명은 청구항들의 범위를 제한하는 것이 아니라 예시적인 것이도록 의도된다. 이와 같이, 본 교시들은 다른 타입들의 장치들에 용이하게 적용될 수 있으며, 많은 대안들, 수정들, 및 변형들이 당업자들에게 명백할 것이다.

Claims (35)

  1. 방법으로서,
    각각의 메모리 블록들에 대해 복수의 메모리 액세스 태그들을 정의하는 단계;
    각각의 메모리 액세스 태그에 특정적인, 복수의 판독 및/또는 기록 명령들을 맵핑하는 단계; 및
    실행가능 코드로의 소스 코드의 컴파일레이션(compilation) 동안, 상기 복수의 판독 및/또는 기록 명령들에 대해 하나 또는 그 초과의 메모리 블록들을 정의하고 그리고 하나 또는 그 초과의 메모리 블록들을 대응하는 메모리 액세스 태그와 연관시키는 단계를 포함하고,
    각각의 메모리 블록은 동일한 대응하는 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령에 의해서만 액세스가능한,
    방법.
  2. 제1 항에 있어서,
    상기 복수의 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함하는,
    방법.
  3. 제1 항에 있어서,
    상기 복수의 판독 및/또는 기록 명령들의 각각의 판독 및/또는 기록 명령은 별개의 메모리 액세스 태그와 연관되는,
    방법.
  4. 제1 항에 있어서,
    복수의 별개의 판독 및 기록 명령들을 맵핑하는 단계는,
    제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 정의하는 단계,
    제2 메모리 액세스 태그와 연관된 제2 판독 및/또는 기록 명령을 정의하는 단계를 포함하고,
    상기 제1 판독 및/또는 기록 명령은 상기 제2 액세스 태그와 연관된 메모리 블록 상에서 동작하지 못하는,
    방법.
  5. 제4 항에 있어서,
    상기 제1 메모리 액세스 태그는 복수의 메모리 블록들과 연관되는,
    방법.
  6. 제1 항에 있어서,
    메모리 블록은 서브-페이지 사이즈 메모리 영역(sub-page size memory region)인,
    방법.
  7. 제1 항에 있어서,
    상기 하나 또는 그 초과의 메모리 블록들은 메모리 스택 영역(memory stack region) 또는 메모리 힙 영역(memory heap region) 내에 정의될 수 있는,
    방법.
  8. 하나 또는 그 초과의 명령들을 갖는 비-일시적 기계-판독가능 저장 매체로서,
    상기 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 상기 프로세싱 회로로 하여금,
    각각의 메모리 블록들에 대해 복수의 메모리 액세스 태그들을 정의하게 하고,
    각각의 메모리 액세스 태그에 특정적인, 복수의 판독 및/또는 기록 명령들을 맵핑하게 하고, 그리고
    실행가능 코드로의 소스 코드의 컴파일레이션 동안, 상기 복수의 판독 및/또는 기록 명령들에 대해 하나 또는 그 초과의 메모리 블록들을 정의하고 그리고 하나 또는 그 초과의 메모리 블록들을 대응하는 메모리 액세스 태그와 연관시키게 하며,
    각각의 메모리 블록은 동일한 대응하는 메모리 액세스 태그와 연관된 판독 및/또는 기록 명령에 의해서만 액세스가능한,
    비-일시적 기계-판독가능 저장 매체.
  9. 방법으로서,
    저장 디바이스로부터 실행가능 코드를 획득하는 단계 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 대해 정의된 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―;
    각각의 메모리 블록이 상기 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 맵핑하는 단계; 및
    상기 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하는 단계를 포함하고,
    각각의 실행되는 판독 및/또는 기록 명령은, 상기 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한되는,
    방법.
  10. 제9 항에 있어서,
    판독 및/또는 기록 명령이, 상기 판독 및/또는 기록 명령과 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 판독 및/또는 기록 명령의 실행은 억제되거나 또는 중단되는,
    방법.
  11. 제9 항에 있어서,
    메모리 블록은 서브-페이지 사이즈 메모리 영역인,
    방법.
  12. 제9 항에 있어서,
    상기 실행가능 코드는 단일 애플리케이션 또는 프로세스에 대한 것인,
    방법.
  13. 제9 항에 있어서,
    복수의 별개의 판독 및 기록 명령들은,
    제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령, 및
    제2 메모리 액세스 태그와 연관된 제2 판독 및/또는 기록 명령을 포함하고,
    상기 제1 판독 및/또는 기록 명령이 상기 제2 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 제1 판독 및/또는 기록 명령은 억제되거나 또는 중단되는,
    방법.
  14. 제9 항에 있어서,
    상기 하나 또는 그 초과의 메모리 블록들은 상기 실행가능 코드가 컴파일링될 때 미리-정의되거나 또는 상기 실행가능 코드가 실행될 때 동적으로 정의되는,
    방법.
  15. 디바이스로서,
    실행가능 코드를 저장하는 저장 디바이스 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 대해 정의된 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―;
    상기 저장 디바이스에 커플링된 프로세싱 회로를 포함하고,
    상기 프로세싱 회로는,
    각각의 메모리 블록이 상기 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 맵핑하고, 그리고
    상기 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하도록 구성되며,
    각각의 실행되는 판독 및/또는 기록 명령은, 상기 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한되는,
    디바이스.
  16. 디바이스로서,
    저장 디바이스로부터 실행가능 코드를 획득하기 위한 수단 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 대해 정의된 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―;
    각각의 메모리 블록이 상기 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 맵핑하기 위한 수단; 및
    상기 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하기 위한 수단을 포함하고,
    각각의 실행되는 판독 및/또는 기록 명령은, 상기 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한되는,
    디바이스.
  17. 하나 또는 그 초과의 명령들을 갖는 비-일시적 기계-판독가능 저장 매체로서,
    상기 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 상기 프로세싱 회로로 하여금,
    저장 디바이스로부터 실행가능 코드를 획득하게 하고 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 대해 정의된 복수의 별개의 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그와 연관됨 ―,
    각각의 메모리 블록이 상기 복수의 별개의 메모리 액세스 태그들 중 하나와 연관되는 하나 또는 그 초과의 메모리 블록들을 맵핑하게 하고, 그리고
    상기 실행가능 코드의 복수의 별개의 판독 및/또는 기록 명령들 중 적어도 일부를 실행하게 하며,
    각각의 실행되는 판독 및/또는 기록 명령은, 상기 실행되는 판독 및/또는 기록 명령과 동일한 메모리 액세스 태그와 연관된 메모리 블록에만 액세스하도록 제한되는,
    비-일시적 기계-판독가능 저장 매체.
  18. 방법으로서,
    저장 디바이스로부터 실행가능 코드를 획득하는 단계 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 맵핑된 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―;
    상기 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하는 단계; 및
    상기 제1 판독 및/또는 기록 명령이 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 제1 판독 및/또는 기록 명령의 실행을 억제하는 단계를 포함하는,
    방법.
  19. 제18 항에 있어서,
    상기 제1 판독 및/또는 기록 명령이 상기 제1 메모리 액세스 태그와 연관되었다는 것을 확인하는 단계를 더 포함하는,
    방법.
  20. 제18 항에 있어서,
    상기 제1 판독 및/또는 기록 명령이 제2 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려 하는지를 확인하는 단계를 더 포함하는,
    방법.
  21. 제18 항에 있어서,
    복수의 메모리 블록들 각각에 대해 메모리 액세스 태그를 정의하는 맵핑을 유지하는 단계를 더 포함하는,
    방법.
  22. 제18 항에 있어서,
    상기 복수의 상이한 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함하는,
    방법.
  23. 제18 항에 있어서,
    상기 제1 메모리 액세스 태그는 복수의 별개의 메모리 블록들과 연관되고, 상기 복수의 별개의 메모리 블록들은 모두 동일한 메모리 액세스 태그와 연관되는,
    방법.
  24. 제18 항에 있어서,
    메모리 블록은 서브-페이지 사이즈 메모리 영역인,
    방법.
  25. 디바이스로서,
    실행가능 코드를 저장하는 저장 디바이스 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 맵핑된 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―;
    상기 저장 디바이스에 커플링된 프로세싱 회로를 포함하고, 상기 프로세싱 회로는,
    상기 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하고, 그리고
    상기 제1 판독 및/또는 기록 명령이 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 제1 판독 및/또는 기록 명령의 실행을 억제하도록 구성되는,
    디바이스.
  26. 제25 항에 있어서,
    상기 프로세싱 회로는 추가로,
    상기 제1 판독 및/또는 기록 명령이 상기 제1 메모리 액세스 태그와 연관되었다는 것을 확인하도록 구성되는,
    디바이스.
  27. 제25 항에 있어서,
    상기 프로세싱 회로는 추가로,
    상기 제1 판독 및/또는 기록 명령이 제2 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려 하는지를 확인하도록 구성되는,
    디바이스.
  28. 제25 항에 있어서,
    상기 프로세싱 회로는 추가로,
    복수의 메모리 블록들 각각에 대해 메모리 액세스 태그를 정의하는 맵핑을 메모리 디바이스에 유지하도록 구성되는,
    디바이스.
  29. 제25 항에 있어서,
    상기 복수의 상이한 메모리 액세스 태그들은 3개 또는 그 초과의 별개의 타입들의 메모리 액세스 태그들을 포함하는,
    디바이스.
  30. 제25 항에 있어서,
    상기 제1 메모리 액세스 태그는 복수의 별개의 메모리 블록들과 연관되고, 상기 복수의 별개의 메모리 블록들은 모두 동일한 메모리 액세스 태그와 연관되는,
    디바이스.
  31. 제25 항에 있어서,
    메모리 블록은 서브-페이지 사이즈 메모리 영역인,
    디바이스.
  32. 디바이스로서,
    저장 디바이스로부터 실행가능 코드를 획득하기 위한 수단 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 맵핑된 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―;
    상기 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하기 위한 수단; 및
    상기 제1 판독 및/또는 기록 명령이 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 제1 판독 및/또는 기록 명령의 실행을 억제하기 위한 수단을 포함하는,
    디바이스.
  33. 인가되지 않은 액세스로부터 메모리 블록들을 보호하기 위한 비-일시적 기계-판독가능 저장 매체로서,
    상기 기계-판독가능 저장 매체는 하나 또는 그 초과의 명령들을 갖고, 상기 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 상기 프로세싱 회로로 하여금,
    저장 디바이스로부터 실행가능 코드를 획득하게 하고 ― 상기 실행가능 코드는 복수의 별개의 판독 및/또는 기록 명령들을 포함하고, 각각의 판독 및/또는 기록 명령은 각각의 메모리 블록들에 맵핑된 복수의 상이한 메모리 액세스 태그들로부터의 하나의 메모리 액세스 태그에 특정적임 ―,
    상기 실행가능 코드로부터, 제1 메모리 액세스 태그와 연관된 제1 판독 및/또는 기록 명령을 획득하게 하고, 그리고
    상기 제1 판독 및/또는 기록 명령이 상이한 메모리 액세스 태그와 연관된 메모리 블록에 액세스하려고 시도하는 경우, 상기 제1 판독 및/또는 기록 명령의 실행을 억제하게 하는,
    비-일시적 기계-판독가능 저장 매체.
  34. 제33 항에 있어서,
    상기 기계-판독가능 저장 매체는 추가로 하나 또는 그 초과의 명령들을 갖고, 상기 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 상기 프로세싱 회로로 하여금,
    복수의 메모리 블록들 각각에 대해 메모리 액세스 태그를 정의하는 맵핑을 메모리 디바이스에 유지하게 하는,
    비-일시적 기계-판독가능 저장 매체.
  35. 제33 항에 있어서,
    상기 기계-판독가능 저장 매체는 추가로 하나 또는 그 초과의 명령들을 갖고, 상기 하나 또는 그 초과의 명령들은, 프로세싱 회로에 의해 실행될 때, 상기 프로세싱 회로로 하여금,
    상기 제1 판독 및/또는 기록 명령이 상기 제1 메모리 액세스 태그와 연관되었다는 것을 확인하게 하는,
    비-일시적 기계-판독가능 저장 매체.
KR1020177030393A 2015-04-24 2016-04-15 메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호 KR20170139547A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/696,229 US20160313938A1 (en) 2015-04-24 2015-04-24 Fine grained memory protection to thwart memory overrun attacks
US14/696,229 2015-04-24
PCT/US2016/027956 WO2016172012A1 (en) 2015-04-24 2016-04-15 Fine grained memory protection to thwart memory overrun attacks

Publications (1)

Publication Number Publication Date
KR20170139547A true KR20170139547A (ko) 2017-12-19

Family

ID=55806896

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177030393A KR20170139547A (ko) 2015-04-24 2016-04-15 메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호

Country Status (7)

Country Link
US (1) US20160313938A1 (ko)
EP (1) EP3286653A1 (ko)
JP (1) JP2018514860A (ko)
KR (1) KR20170139547A (ko)
CN (1) CN107533515A (ko)
TW (1) TW201702884A (ko)
WO (1) WO2016172012A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI688861B (zh) 2018-09-18 2020-03-21 新唐科技股份有限公司 資料處理裝置及其資料保護方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201137660A (en) * 2009-12-23 2011-11-01 Ibm Method and system for protecting an operating system against unauthorized modification
US9345597B2 (en) * 2013-07-09 2016-05-24 Abbott Cardiovascular Systems Inc. Polymeric stent with structural radiopaque marker
US11132300B2 (en) * 2013-07-11 2021-09-28 Advanced Micro Devices, Inc. Memory hierarchy using page-based compression

Also Published As

Publication number Publication date
CN107533515A (zh) 2018-01-02
EP3286653A1 (en) 2018-02-28
US20160313938A1 (en) 2016-10-27
WO2016172012A1 (en) 2016-10-27
JP2018514860A (ja) 2018-06-07
TW201702884A (zh) 2017-01-16

Similar Documents

Publication Publication Date Title
EP3702923B1 (en) Memory protection
US9069656B2 (en) Obfuscating function resources while reducing stack consumption
US20150067279A1 (en) Data processing system and method for operating a data processing system
US20160062655A1 (en) System and Method for Improved Memory Allocation in a Computer System
US10579791B2 (en) Technologies to defeat secure enclave side-channel attacks using fault-oriented programming
CN113485716B (zh) 防内存越界的程序编译方法及装置
CN113672237B (zh) 防内存越界的程序编译方法及装置
KR102028704B1 (ko) 전자기기에서 코드 삽입 공격으로부터 보호를 위한 메모리 운용 방법
US9563787B2 (en) Protection of a non-volatile memory by change of instructions
KR20170139547A (ko) 메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호
CN110929304A (zh) 一种基于risc-v的内存保护方法
US9026859B1 (en) Safer mechanism for using pointers to code
US8788785B1 (en) Systems and methods for preventing heap-spray attacks
KR20200111909A (ko) 취약점을 효율적으로 탐지할 수 있는 아키텍처로 구성된 힙 영역 메모리 관리 방법 및 그 장치
US11055202B1 (en) Compilation scheme for tagged global variables
KR102186221B1 (ko) 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치
US11150887B2 (en) Secure code patching
US11340915B2 (en) Encaching and sharing transformed libraries
CN110502325B (zh) 一种任务运行方法及装置、计算机可读存储介质
Barbar et al. Live path cfi against control flow hijacking attacks
CN115964741A (zh) 基于安全内存的隐私计算方法、装置、设备及介质
Brauer Working with Buffers