KR20180125976A - 시변하는 어드레스 공간 레이아웃 랜덤화 - Google Patents

시변하는 어드레스 공간 레이아웃 랜덤화 Download PDF

Info

Publication number
KR20180125976A
KR20180125976A KR1020187027765A KR20187027765A KR20180125976A KR 20180125976 A KR20180125976 A KR 20180125976A KR 1020187027765 A KR1020187027765 A KR 1020187027765A KR 20187027765 A KR20187027765 A KR 20187027765A KR 20180125976 A KR20180125976 A KR 20180125976A
Authority
KR
South Korea
Prior art keywords
system service
versions
version
identifier
request
Prior art date
Application number
KR1020187027765A
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 KR20180125976A publication Critical patent/KR20180125976A/ko

Links

Images

Classifications

    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/188Virtual file systems
    • G06F17/30138
    • G06F17/30233
    • 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
    • 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/0623Securing storage systems in relation to content
    • 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/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/0653Monitoring storage devices or systems
    • 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/0683Plurality of storage devices

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)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Stored Programmes (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

실시형태들은 시변하는 어드레스 공간 레이아웃 랜덤화를 위한 컴퓨팅 디바이스들, 장치, 및 장치에 의해 구현된 방법들을 포함한다. 장치는 시스템 서비스의 제 1 복수의 버전들을 론칭할 수 있고 랜덤 가상 어드레스 공간 레이아웃을 시스템 서비스의 제 1 복수의 버전들 각각에 할당할 수 있다. 장치는 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신할 수 있다. 장치는 시스템 서비스의 제 2 버전을 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택할 수 있고, 그리고 시스템 서비스의 제 1 버전의 데이터를 사용하여 시스템 서비스를 실행할 수 있다.

Description

시변하는 어드레스 공간 레이아웃 랜덤화
해커들은 모바일 디바이스들을 비롯한 컴퓨팅 디바이스들을 공격하기 위해 다양한 전략들을 사용한다. 대부분의 전략들은 애플리케이션의 메모리 레이아웃을 식별하여, 서비스들이 메모리 내의 어디에 위치하는지를 아는 것에 의해 시스템 서비스들 내의 공지된 취약점들이 악용될 수 있도록 하려는 시도를 수반한다. 이러한 공격들은 ROP (return oriented programming) 와 같은 시스템 서비스를 타겟팅하는 "컨트롤 하이잭 공격들 (control hijack attacks)"을 구현할 수 있다. ROP 공격들의 목표는 권한 상승과 후속 혜택들이다. 이러한 공격들은 종종 공격자가 프로세스 어드레스 공간을 철저히 조사하여 취약한 또는 가제트 (gadget) 코드/데이터 위치들을 찾아내는 브루트 포스 (brute force) 전술들을 사용한다. 브루트 포스 전술들은 공격의 피해자 시스템 서비스가 충돌 (crash) 되게 할 수 있다. 또 다른 형태의 공격은 정보 유출을 이용한다. 이러한 기술들은 형식 문자열 취약성을 악용하여 특정 정보 (예를 들어, 반송 어드레스들 및 이로인한 일부 라이브러리 기능 위치들) 를 확보한다. 취약한 프로세스의 정보 유출은 다른 프로세스, 특히 동적 쉬레드 라이브러리들을 사용하는 프로세스를 위태롭게 할 수 있다. 공격들은 하나 이상의 프로세스에서 사용되는 어드레스 공간의 악용 가능한 취약성을 보다 효과적으로 발견하는 기술들과 조합될 수 있다.
어드레스 공간 레이아웃 랜덤화 (Address Space Layout Randomization, ASLR) 는, 프로그램의 다른 섹션들을 런 타임시 메모리 내의 랜덤하게 선택된 위치들에 저장하고 어드레스 공간 맵을 사용하여 프로그램 실행을 가능하게 함으로써 해킹 공격들로부터 애플리케이션을 보호하는 주지된 기술이다. ASLR 은, 프로그램 섹션들이 특정의 고정된 (예를 들어, 인접한) 위치들에 로딩되는, 기존의 애플리케이션 맵핑에 의해 제공되지 않는 해킹으로부터의 보호를 제공한다. ASLR 은 공격자가 적극적으로 실행되는 프로세스의 어드레스 공간에서 상이한 코드 위치들을 찾기 어렵게 만든다. 그러나, ASLR 은 여전히 공격받을 수 있다. ASLR 을 사용하여 애플리케이션 코드를 랜덤화하는 경우라도, 동일한 어드레스 공간을 사용할 수 있기 때문에 공격자가 브루트 포스 공격 (brute force attack) 에서 수집한 정보는 피해자 시스템 서비스를 다시 초기화할 때 사용될 수 있다.
다양한 실시형태들의 방법들 및 장치들은, 시스템 서비스의 제 1 복수의 버전들을 론칭하는 것, 및 랜덤 가상 어드레스 공간 레이아웃을 시스템 서비스의 제 1 복수의 버전들 각각에 할당하는 것을 포함하는, 컴퓨팅 디바이스 상의 시변하는 어드레스 공간 레이아웃 랜덤화를 위한 장치들 및 방법들을 제공한다. 다양한 실시형태들은 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신하는 것, 시스템 서비스의 제 1 버전을 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택하는 것, 및 시스템 서비스의 제 1 버전의 데이터를 사용하여 시스템 서비스를 실행하는 것을 더 포함할 수 있다.
일부 실시형태들은 시스템 서비스를 실행하기 위한 제 2 요청을 제 1 애플리케이션으로부터 수신하는 것, 시스템 서비스의 제 2 버전을 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택하는 것, 및 시스템 서비스의 제 2 버전의 데이터를 사용하여 시스템 서비스를 실행하는 것을 더 포함할 수 있다.
일부 실시형태들은 시스템 서비스 버전 식별자를 시스템 서비스의 제 1 복수의 버전들 각각에 할당하는 것을 포함할 수 있다. 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자는 상이할 수도 있다. 다양한 실시형태들은 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자를 시스템 서비스의 시스템 서비스 식별자에 상관시키는 것, 및 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자와 시스템 서비스 식별자의 상관들을 저장하는 것을 더 포함할 수 있다. 다양한 실시형태들은 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자를 상기 시스템 서비스의 제 1 복수의 버전들 각각의 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와 상관하는 것을 더 포함할 수 있다. 다양한 실시형태들은 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자의, 시스템 서비스의 제 1 복수의 버전들 각각의 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와의 상관들을 저장하는 것을 더 포함할 수 있다.
일부 실시형태들에서, 시스템 서비스를 실행하기 위한 제 1 요청은 시스템 서비스 식별자를 포함하고, 그리고 시스템 서비스의 제 1 버전을 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택하는 것이 시스템 서비스의 제 1 버전을 시스템 서비스의 식별자와 상관된 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택하는 것을 포함할 수 있다. 다양한 실시형태들은 시스템 서비스의 제 1 버전의 제 1 시스템 서비스 버전 식별자를 제 1 애플리케이션에 제공하는 것, 및 제 1 시스템 서비스 버전 식별자를 갖는 시스템 서비스의 제 1 버전을 실행하기 위한 요청을 제 1 애플리케이션으로부터 수신하는 것을 더 포함할 수 있다.
일부 실시형태들은 제 1 시스템 서비스 버전 식별자와 제 1 시스템 서비스 버전의 랜덤 가상 어드레스 공간 레이아웃 사이의 상관을 사용하여 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 위치시키는 것을 더 포함할 수 있다. 이러한 실시형태들은 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 시스템 서비스의 제 1 버전의 데이터가 저장되는 물리적 어드레스로 변환하는 것, 및 시스템 서비스의 제 1 버전의 데이터를 검색하는 것을 더 포함할 수 있다.
일부 실시형태들은 시스템 서비스의 제 1 복수의 버전들 각각에 프로세스 식별자를 할당하는 것을 더 포함할 수 있다. 이러한 실시형태들에서, 시스템 서비스의 제 1 복수의 버전들 각각에 대한 프로세스 식별자는 동일할 수 있다. 이러한 실시형태들에서, 랜덤 가상 어드레스 공간 레이아웃을 시스템 서비스의 제 1 복수의 버전들 각각에 할당하는 것, 시스템 서비스 버전 식별자를 시스템 서비스의 제 1 복수의 버전들 각각에 할당하는 것, 및 시스템 서비스의 제 1 복수의 버전들 각각의 시스템 서비스 버전 식별자를 시스템 서비스의 시스템 서비스 식별자와 상관시키는 것은, 프로세스 식별자를 할당한 시스템 서비스의 제 1 복수의 버전들 각각에 대해 발생할 수 있다.
일부 실시형태들은 시스템 서비스의 제 1 버전의 실행의 동적으로 생성된 코드에 코드 버퍼 공간을 할당하기 위한 요청을 수신하는 것, 코드 버퍼 어드레스를 랜덤하게 선택하는 것, 및 코드 버퍼 어드레스와 상관된 코드 버퍼 공간이 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 것을 더 포함할 수 있다. 이러한 실시형태들은 코드 버퍼 공간이 동적으로 생성된 코드를 저장하기 충분히 크다고 결정하는 것에 응답하여 상기 코드 버퍼 어드레스에 상기 동적으로 생성된 코드를 저장하는 것을 더 포함할 수 있다.
일부 실시형태들은 시스템 서비스를 실행하기 위한 제 2 요청을 제 2 애플리케이션으로부터 수신하는 것, 제 2 애플리케이션으로부 시스템 서비스를 실행하기 위한 제 2 요청이 시스템 상에서의 공격이라고 검출하는 것, 및 시스템 서비스의 제 2 복수의 버전들을 론칭하는 것을 더 포함할 수 있다. 이러한 실시형태들은 랜덤 가상 어드레스 공간 레이아웃을 시스템 서비스의 제 2 복수의 버전들 각각에 할당하는 것을 더 포함할 수 있다. 시스템 서비스의 제 1 복수의 버전들 각각의 랜덤 가상 어드레스 공간 레이아웃 및 시스템 서비스의 제 2 복수의 버전들 각각의 랜덤 가상 어드레스 공간 레이아웃은 상이할 수 있다. 이러한 실시형태들은 시스템 서비스의 제 2 버전을 시스템 서비스의 제 1 복수의 버전들 및 시스템 서비스의 제 2 복수의 버전들로부터 랜덤하게 선택하는 것, 및 시스템 서비스의 제 2 버전의 데이터를 사용하여 시스템 서비스를 실행하는 것을 더 포함할 수 있다.
일부 실시형태들에서, 시스템 서비스의 제 1 복수의 버전들을 론칭하는 것은 상이한 명령 세트 아키텍처들을 갖는 복수의 이종의 프로세서 코어들 중 하나 상에 시스템 서비스의 제 1 복수의 버전들의 시스템 서비스의 다수 버전들 각각을 론칭하는 것을 포함할 수 있다. 이러한 실시형태들에서, 시스템 서비스의 제 1 버전을 시스템 서비스의 제 1 복수의 버전들로부터 랜덤하게 선택하는 것은 시스템 서비스의 제 1 버전이 론칭되는 복수의 이종의 프로세서 코어들의 제 1 이종의 프로세서 코어를 랜덤하게 선택하는 것을 포함할 수 있다. 이러한 실시형태들에서, 시스템 서비스의 제 1 버전의 데이터를 사용하여 시스템 서비스를 실행하는 것은 제 1 이종의 프로세서 코어에 의해 시스템 서비스를 실행하는 것을 포함할 수 있다. 이러한 실시형태들은 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 제 1 이종의 프로세서 코어로 전달하는 것, 제 1 이종의 프로세서 코어에 의해 시스템 서비스의 실행의 출력을 수신하는 것, 및 출력을 제 1 애플리케이션으로 리턴하는 것을 더 포함할 수 있다.
다양한 실시형태들은 론처를 갖는 컴퓨팅 디바이스, 론처에 통신가능하게 연결된 맵퍼, 론처에 통신가능하게 연결된 요청 코디네이터, 및 요청 코디네이터에 통신가능하게 연결된 프로세서를 포함할 수 있다. 론처, 맵퍼, 요청 코디네이터, 및 프로세서는 상기 요?된 실시형태 방법들 중 하나 이상의 방법들의 동작들을 수행하도록 구성될 수 있다.
다양한 실시형태들은 상기 요약된 실시형태 동작들 중 하나 이상의 기능들을 수행하기 위한 수단을 갖는 컴퓨팅 디바이스를 포함할 수도 있다.
또 다른 실시형태들은, 컴퓨팅 디바이스의 프로세서로 하여금 상기 요약된 실시형태 방법들 중 하나 이상의 동작들을 수행하게 하도록 구성된 프로세서 실행가능 명령들을 저장한 비일시적인 프로세서 판독가능 저장 매체를 포함할 수도 있다.
본원에 통합되고 본 명세서의 일부를 구성하는 첨부의 도면들은, 다양한 실시형태들의 예시적인 실시형태들을 나타내며, 위에서 주어진 일반적인 설명 및 아래에서 주어지는 상세한 설명과 함께, 청구항들의 피쳐들을 설명하도록 기능한다.
도 1 은 일 실시형태를 구현하기에 적합한 컴퓨팅 디바이스를 예시한 컴포넌트 블록도이다.
도 2 는 일 실시형태를 구현하기에 적합한 멀티-코어 프로세서의 예를 예시한 컴포넌트 블록도이다.
도 3 은 시스템 서비스들의 다양한 버전들을 생성하는 시변하는 어드레스 공간 레이아웃 랜덤화의 예를 예시한 그래픽도이다.
도 4a 는 일 실시형태를 구현하기에 적합한 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 4b 는 일 실시형태를 구현하기에 적합한 동적 코드 생성 시스템을 갖는 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 5 는 시스템 서비스의 일 버전을 실행하는 실시형태를 구현하기에 적합한 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 6 은 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하기에 적합한 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 7 은 다수의 애플리케이션들에 대한 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하기에 적합한 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 8 은 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하기에 적합한 오브젝트 관리자를 갖는 시변하는 어드레스 공간 레이아웃 랜덤화 시스템의 예를 예시한 컴포넌트 블록 및 시그널링도이다.
도 9 는 일 실시형태에 따라 시변하는 어드레스 공간 레이아웃 랜덤화를 구현하기 위한 방법을 예시한 프로세스 흐름도이다.
도 10 은 일 실시형태에 따른 시변하는 어드레스 공간 레이아웃 랜덤화에서 시스템 서비스의 버전들에의 가상 메모리 어드레스 공간 레이아웃의 랜덤 할당을 구현하기 위한 방법을 예시한 프로세스 흐름도이다.
도 11 은 일 실시형태에 따라 시변하는 어드레스 공간 레이아웃 랜덤화를 이용하여 시스템 서비스 실행을 구현하기 위한 방법을 예시한 프로세스 흐름도이다.
도 12 는 일 실시형태에 따라 동적 코드 생성으로 시변하는 어드레스 공간 레이아웃 랜덤화를 이용하여 시스템 서비스 실행을 구현하기 위한 방법을 예시한 프로세스 흐름도이다.
도 13 은 다양한 실시형태들에 의해 사용하기에 적합한 모바일 컴퓨팅 디바이스의 예를 예시한 컴포넌트 블록도이다.
도 14 는 다양한 실시형태들에 의해 사용하기에 적합한 모바일 컴퓨팅 디바이스의 예를 예시한 컴포넌트 블록도이다.
도 15 는 다양한 실시형태들에 의해 사용하기에 적합한 서버의 예를 예시한 컴포넌트 블록도이다.
첨부된 도면들을 참조하여 다양한 실시형태들이 상세히 설명될 것이다. 가능하면, 도면들 전체에 걸쳐 동일한 또는 유사한 부분들을 참조하기 위해, 동일한 도면 부호들이 사용될 것이다. 예시적인 목적들을 위해 특정 예들 및 구현예들을 참조하지만 청구항들의 범위를 제한하기 위한 의도는 아니다.
"컴퓨팅 디바이스" 및 "모바일 컴퓨팅 디바이스"라는 용어들은 셀룰러 전화기들, 스마트 폰들, 개인용 또는 모바일 멀티미디어 플레이어들, 개인 휴대 정보 단말기들 (PDA들), 랩톱 컴퓨터들, 태블릿 컴퓨터들, 컨버터블 랩탑들/태블릿들 (2-인-1 컴퓨터들), 스마트 북들, 울트라북들, 네트북들, 팜톱 컴퓨터들, 무선 전자 메일 수신기들, 멀티미디어 인터넷 실행가능 셀룰러 전화기들, 모바일 게이밍 콘솔들, 무선 게이밍 제어기들, 및 메모리 및 프로그밍가능 프로세서를 포함하는 유사한 개인용 전자 디바이스들 중 어느 하나 또는 전부를 지칭하도록 상호교환가능하게 본원에서 사용된다. "컴퓨팅 디바이스"라는 용어는 개인용 컴퓨터들, 데스크탑 컴퓨터들, 올인원 컴퓨터들, 워크스테이션들, 수퍼 컴퓨터들, 메인 프레임 컴퓨터들, 임베디드 컴퓨터들, 서버들, 홈 시어터 컴퓨터들, 및 게임 콘솔들을 포함하는 고정식 컴퓨팅 디바이스들을 추가로 지칭할 수 있다.
다양한 실시형태들은, 시간 차원에서 애플리케이션들에 의해 사용되는 시스템 서비스들의 어드레스 공간 레이아웃을 또한 랜덤하게 함으로써, 어드레스 공간 레이아웃 랜덤화 (ASLR) 공격들을 방지하기 위한 방법들, 및 그러한 방법들을 구현하는 시스템들 및 디바이스들을 포함한다. 다양한 실시형태들은 시스템 서비스의 다수의 버전들을 론칭하는 것을 포함할 수 있으며, 서비스 시스템의 각 버전은 랜덤하게 선택될 수 있는 상이한 어드레스 공간 레이아웃을 가지고, 그리고 애플리케이션들에 의한 시스템 서비스에 대한 각 요청은 시스템 서비스의 랜덤하게 선택된 버전에 관한 것일 수 있다.
일반적으로, 시변하는 ASLR 은 시스템의 부팅시 또는 시스템을 부팅한 후 시스템 서비스에 대한 제 1 요청에 대한 응답으로 시스템 서비스의 다양한 버전들을 생성할 수 있다. 시스템 서비스의 각 버전에는 랜덤하게 생성된 어드레스 공간 레이아웃이 할당될 수 있다. 각 시스템 서비스의 각 어드레스 공간 레이아웃은, 프로세스 스택들, 힙들, 데이터 및 함수 포인터들 또는 라이브러리 메모리 맵들을 저장하는 것을 포함하여, 해당 시스템 서비스를 구현하기 위한 항목들을 저장할 수 있다. 시스템 서비스들의 각 버전에 대한 어드레스 공간은 가상 어드레스 공간에서 생성될 수 있고, 각 가상 어드레스 공간은 물리적 어드레스 공간에 저장된 시스템 서비스의 코드에 대해, 예를 들어 시스템 서비스의 코드 라이브러리의 코드에 대해 상이한 메모리 맵핑을 가질 수 있다. 요청 코디네이터는 시스템 서비스들의 요청을 수신하고, 요청된 서비스 시스템을 실행하기 위해 시스템 서비스의 다양한 버전들 중 하나를 랜덤하게 할당되도록 구현될 수 있다.
ASLR 을 시변하기 위해, 요청이 동일한 시스템 서비스를 위해 수신될 때마다, 요청 코디네이터는 요청된 시스템 서비스에 해당하는 시스템 서비스의 버전들 중 하나에 랜덤 할당을 할 수 있다. 이를 시변하는 ASLR (time-varying ASLR) 이라고 하며, 시스템 서비스에 대한 각 요청에 대해 시스템 서비스의 상이한 버전들을 랜덤하게 할당하여 수행한다. 다양한 실시형태들의 시변하는 ASLR 이 구현될 때, 브루트 포스 공격을 실행하는 공격자는 공격자가 시스템 서비스를 위해 제출하는 각 요청에 대해 상이한 가상 어드레스 공간을 관찰할 것이다. 또한, 유출된 정보는, 시스템 서비스의 한 버전에 대해 획득된 정보가 시스템 서비스의 다른 버전들에 적용되지 않을 것이기 때문에 사용하기 더 어려워질 것이다. 이것은 시스템 서비스에 대한 성공적인 브루트 포스 공격에 필요한 시도 횟수를 크게 증가시킬 것이다.
일부 실시형태들에서, 요청 코디네이터는 비정상적인 요청 패턴들을 인지하기 위한 요청들을 모니터링함으로써 공격을 검출 또는 의심하도록 구성될 수 있다. 공격이 검출 또는 의심되는 경우, 요청 코디네이터는 시스템 서비스 (또는 복수의 시스템 서비스들) 의 새로운 복사본을 생성하여 새로운 복사본을 랜덤 어드레스 공간 레이아웃들을 이용하여 저장할 수 있으며, 이로써 ASLR 시스템에서의 랜덤성을 더욱 증가시킬 수 있다.
크게 (coarse-grained) 시변하는 ASLR 을 위해, 힙, 스택, 실행파일, 공유 라이브러리들 등의 시작 위치들은 동일한 시스템 서비스의 다양한 버전들에 대해 변경될 수 있다. 시스템 예에서, 론처와 같은 사용자 공간 컴포넌트는 동일한 시스템 서비스의 다수 버전들을 론칭할 수 있다. 각 버전은 상이한 어드레스 공간 레이아웃을 가진 별도의 프로세스로 론칭될 수 있다. 상이한 버전들은 프로세스 그룹에 포함될 수 있으며 동일한 프로세스 그룹 식별자 (프로세스 그룹 ID) 와 연관될 수 있다. 커넬 공간 맵핑 기능은, 시스템 서비스의 버전들인 모든 프로세스들을 인식하고 각 프로세스를 상이한 랜덤 어드레스 공간 레이아웃에 맵핑하기 위해 프로세스 그룹 ID를 사용할 수 있다.
생성 프로세스 및 맵핑 페이즈 동안, 커넬 코드는 새로운 랜덤하게 생성된 어드레스들이 시스템 서비스의 기존 버전들 중 임의의 버전과 충돌하지 않는 것을 보장할 수 있다. 시스템 서비스의 각 버전에는, 시스템 서비스의 버전 및 오브젝트의 실제 어드레스를 고유하게 인지하기 위해 사용되는, 핸들, 라벨, 또는 다른 레퍼런스와 같은 시스템 서비스 버전 식별자가 할당될 수 있다.
시스템에 의해 운영되는 애플리케이션들은 룩업 방법을 이용하여 시스템 서비스들를 룩업하여, 시스템 서비스의 버전 또는 프로세스에 대한 시스템 서비스 버전 식별자를 검색할 수 있다. 요청 코디네이터는, 요청된 시스템 서비스의 버전에 대응하는 래덤하게 선택된 시스템 서비스 버전 식별자를 요청 애플리케이션으로 리턴할 수 있다. 애플리케이션은 이 시스템 서비스 버전 식별자를 시스템 서비스에 대한 모든 호출들에서 사용할 수 있다. 요청 코디네이터는, 동일한 시스템 서비스에 대한 룩업 방법의 상이한 실행들에 대해 상이한 랜덤하게 선택된 시스템 서비스 버전 식별자들을 리턴할 수 있다.
가상 머신 내에서 동적으로 생성된 코드를 갖는 시스템 서비스에서 섬세하게 (fine-grained) 시변하는 ASLR 에 대해, 코드-버퍼에서의 동적 코드의 상이한 피스들의 위치들은 코드-버퍼 (코드 버퍼의 시작을 포함) 내의 랜덤 위치들에 포지셔닝될 수 있다. 코드-버퍼에서의 동적 코드의 랜덤화는 빌트인 코드 라이브러리들의 메모리 할당 함수들을 사용하여 랜덤 메모리 할당기에 의해 구현될 수 있거나 또는 커넬의 랜덤 메모리 할당기에 의해 유사한 방식으로 구현될 수 있다. 어느 경우든, 랜덤 메모리 할당기는 시스템 서비스의 버전을 식별하는 시스템 서비스 버전 식별자들의 리스트를 유지할 수 있고 시스템 서비스의 각 버전에 대한 동적 코드에 할당된 버퍼 어드레스들을 유지할 수 있다. 시스템 서비스 버전 식별자들에 의해 식별된 시스템 서비스의 상이한 버전이 크기 n 바이트의 버퍼 어드레스를 할당하려고 시도하는 경우, 랜덤 메모리 할당기는 각 버전에 대한 리스트를 트래버스하여 시스템 서비스의 버전에 대해 사용되지 않는 버퍼 어드레스가 존재하는지 여부를 결정할 수 있고, 그리고 시스템 서비스 버전 식별자들에 미사용 버퍼 어드레스를 할당할 수 있다.
도 1 은 다양한 실시형태들에의 이용에 적합한 원격 컴퓨팅 디바이스 (50) 와 통신하고 있는 컴퓨팅 디바이스 (10) 를 포함하는 시스템을 예시한다. 컴퓨팅 디바이스 (10) 는 프로세서 (14), 메모리 (16), 통신 인터페이스 (18), 및 스토리지 메모리 인터페이스 (20) 를 가진 시스템-온-칩 (SoC) (12) 을 포함할 수도 있다. 컴퓨팅 디바이스는 통신 컴포넌트 (22), 이를 테면 유선 또는 무선 모뎀, 스토리지 메모리 (24), 무선 통신 링크를 확립하기 위한 안테나 (26) 를 더 포함할 수도 있다. 프로세서 (14) 는 다양한 하드웨어 코어들, 예를 들어, 다수의 프로세서 코어들 중 임의의 것을 포함할 수도 있다.
용어 "시스템-온-칩" (SoC) 은 하드웨어 코어, 메모리, 및 통신 인터페이스를 통상적으로 포함하지만, 배타적으로 포함하지는 않는 상호접속된 전자 회로들의 세트를 지칭하기 위해 본 명세서에서 사용된다. 하드웨어 코어는 다양한 상이한 타입들의 프로세서들, 이를 테면 범용 프로세서, 중앙 프로세싱 유닛 (CPU), 디지털 신호 프로세서 (DSP), 그래픽스 프로세싱 유닛 (GPU), APU (accelerated processing unit), 보조 프로세서, 단일-코어 프로세서, 및 멀티-코어 프로세서를 포함할 수도 있다. 하드웨어 코어는 다른 하드웨어 및 하드웨어 조합들, 이를 테면 필드 프로그래밍가능 게이트 어레이 (FPGA), 주문형 집적 회로 (ASIC), 다른 프로그래밍가능 로직 디바이스, 이산 게이트 로직, 트랜지스터 로직, 성능 모니터링 하드웨어, 와치독 하드웨어, 및 타임 레퍼런스들을 더 구현할 수도 있다. 집적 회로들은 집적 회로의 컴포넌트들이 실리콘과 같은, 반도체 재료의 단일 피스 상에 상주하도록 구성될 수도 있다.
SoC (12) 는 하나 이상의 프로세서들 (14) 을 포함할 수도 있다. 컴퓨팅 디바이스 (10) 는 1 초과의 SoC들 (12) 을 포함할 수도 있고, 이로써 프로세서들 (14) 및 프로세서 코어들의 수를 증가시킬 수도 있다. 컴퓨팅 디바이스 (10) 는 또한, SoC (12) 와 연관되지 않은 프로세서들 (14) 을 포함할 수도 있다. 개개의 프로세서들 (14) 은 도 2 를 참조하여 아래에 설명한 바와 같은 멀티-코어 프로세서들일 수도 있다. 프로세서들 (14) 은 컴퓨팅 디바이스 (10) 의 다른 프로세서들 (14) 과 동일하거나 또는 상이할 수도 있는 특정 목적들을 위해 각각 구성될 수도 있다. 동일한 또는 상이한 구성들의 프로세서들 (14) 및 프로세서 코어들 중 하나 이상은 함께 그룹화될 수도 있다. 프로세서들 (14) 또는 프로세서 코어들의 그룹은 멀티-프로세서 클러스터로 지칭될 수도 있다.
SoC (12) 의 메모리 (16) 는 프로세서 (14) 에 의한 액세스를 위해 데이터 및 프로세서 실행가능 코드를 저장하기 위해 구성된 휘발성 또는 비휘발성 메모리일 수도 있다. 컴퓨팅 디바이스 (10) 및/또는 SoC (12) 는 다양한 목적들을 위해 구성된 하나 이상의 메모리들 (16) 을 포함할 수도 있다. 하나 이상의 메모리들 (16) 은 휘발성 메모리들, 이를 테면 랜덤 액세스 메모리 (RAM) 또는 메인 메모리, 또는 캐시 메모리를 포함할 수도 있다. 이들 메모리들 (16) 은 데이터 센서 또는 서브시스템으로부터 수신된 제한된 양의 데이터, 다양한 팩터들에 기초하여 미래의 액세스를 예상하고 비휘발성 메모리로부터 메모리들 (16) 로 로드된, 비휘발성 메모리로부터 요청되는 데이터 및/또는 프로세서 실행가능 코드 명령들, 및/또는 프로세서 (14) 에 의해 생성되고 비휘발성 메모리에 저장되지 않고 미래의 빠른 액세스를 위해 일시적으로 저장된 중간의 프로세싱 데이터 및/또는 프로세서 실행가능 코드 명령들을 일시적으로 보유하도록 구성될 수도 있다.
메모리 (16) 는 프로세서들 (14) 중 하나 이상의 프로세서들에 의한 액세스를 위해, 다른 메모리 디바이스, 이를 테면 다른 메모리 (16) 또는 스토리지 메모리 (24) 로부터 메모리 (16) 로 로드되는, 데이터 및 프로세서 실행가능 코드를 적어도 일시적으로 저장하도록 구성될 수도 있다. 메모리 (16) 로 로드된 데이터 또는 프로세서 실행가능 코드는 프로세서 (14) 에 의한 기능의 실행에 응답하여 로드될 수도 있다. 기능의 실행에 응답하여 메모리 (16) 로 데이터 또는 프로세서 실행가능 코드를 로드하는 것은, 요청된 데이터 또는 프로세서 실행가능 코드가 메모리 (16) 에 로케이트되지 않기 때문에, 성공적이지 않거나, 또는 미스 (miss) 인, 메모리 (16) 로의 메모리 액세스 요청으로부터 발생할 수도 있다. 미스에 응답하여, 다른 메모리 (16) 또는 스토리지 메모리 (24) 로의 메모리 액세스 요청은 요청된 데이터 또는 프로세서 실행가능 코드를 다른 메모리 (16) 또는 스토리지 메모리 (24) 로부터 메모리 디바이스 (16) 로 로드시킬 수도 있다. 기능의 실행에 응답하여 메모리 (16) 로 데이터 또는 프로세서 실행가능 코드를 로드하는 것은 다른 메모리 (16) 또는 스토리지 메모리 (24) 로의 메모리 액세스 요청으로부터 발생할 수도 있고, 데이터 또는 프로세서 실행가능 코드는 추후의 액세스를 위해 메모리 (16) 로 로드될 수도 있다.
메모리 (16) 는 센서 또는 서브시스템과 같은 원시 데이터 소스 디바이스로부터 메모리 (16) 로 로드되는 원시 데이터를 적어도 일시적으로 저장하도록 구성될 수도 있다. 원시 데이터는 원시 데이터 소스 디바이스로부터 메모리 (16) 로 스트리밍하고 도 3 내지 도 19 를 참조하여 본 명세서에서 추가로 설명되는 바와 같이 머신 학습 가속화기에 의해 원시 데이터가 수신 및 프로세싱될 수 있을 때까지 메모리에 의해 저장될 수도 있다.
스토리지 메모리 인터페이스 (20) 및 스토리지 메모리 (24) 는 컴퓨팅 디바이스 (10) 가 비휘발성 저장 매체 상에 데이터 및 프로세서 실행가능 코드를 저장하는 것을 허용하기 위해 협심하여 작동할 수도 있다. 스토리지 메모리 (24) 는 스토리지 메모리 (24) 가 프로세서들 (14) 중 하나 이상의 프로세서에 의한 액세스를 위해 데이터 또는 프로세서 실행가능 코드를 저장할 수도 있는 메모리 (16) 의 실시형태와 매우 유사하게 구성될 수도 있다. 비휘발성인 스토리지 메모리 (24) 는 컴퓨팅 디바이스 (10) 의 전력이 셧 오프된 이후 정보를 유지할 수도 있다. 전력이 다시 턴 온되고 컴퓨팅 디바이스 (10) 가 리부팅되는 경우, 스토리지 메모리 (24) 상에 저장된 정보는 컴퓨팅 디바이스 (10) 에 이용가능할 수도 있다. 스토리지 메모리 인터페이스 (20) 는 스토리지 메모리 (24) 에 대한 액세스를 제어하고 프로세서 (14) 가 스토리지 메모리 (24) 로부터 데이터를 판독하고 스토리지 메모리 (24) 에 데이터를 기록하는 것을 허용할 수도 있다.
컴퓨팅 디바이스 (10) 의 컴포넌트들의 일부 또는 전부는 필요한 기능들을 여전히 서빙하면서 상이하게 배열 및/또는 결합될 수도 있다. 더욱이, 컴퓨팅 디바이스 (10) 는 컴포넌트들의 각각의 하나에 제한되지 않을 수도 있고, 각각의 컴포넌트의 다수의 인스턴스들이 컴퓨팅 디바이스 (10) 의 다양한 구성들에 포함될 수도 있다.
도 2 는 실시형태를 구현하기에 적합한 멀티-코어 프로세서 (14) 를 예시한다. 멀티-코어 프로세서 (14) 는 복수의 동종 또는 이종의 프로세서 코어들 (200, 201, 202, 203) 을 가질 수도 있다. 프로세서 코어들 (200, 201, 202, 203) 은, 단일 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 이 동일한 목적을 위해 구성되고 동일하거나 또는 유사한 성능 특성들을 가질 수도 있다는 점에서 동종일 수도 있다. 예를 들어, 프로세서 (14) 는 범용 프로세서일 수도 있고, 프로세서 코어들 (200, 201, 202, 203) 은 동종의 범용 프로세서 코어들일 수도 있다. 대안적으로, 프로세서 (14) 는 그래픽스 프로세싱 유닛 또는 디지털 신호 프로세서일 수도 있고, 프로세서 코어들 (200, 201, 202, 203) 은 각각 동종의 그래픽스 프로세서 코어들 또는 디지털 신호 프로세서 코어들일 수도 있다. 참조의 용이함을 위해, 용어들 "프로세서" 및 "프로세서 코어" 는 본 명세서에서 상호교환가능하게 사용될 수도 있다.
프로세서 코어들 (200, 201, 202, 203) 은, 단일 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 이 상이한 목적들을 위해 구성되고 및/또는 상이한 성능 특성들을 가질 수도 있다는 점에서 이종일 수도 있다. 이러한 이종의 프로세서 코어들의 이종성 (heterogeneity) 은 상이한 명령 세트 아키텍처, 파이프라인들, 동작 주파수들 등을 포함할 수도 있다. 이러한 이종의 프로세서 코어들의 일 예는, 더 느린, 저전력 프로세서 코어들이 보다 강력하고 전력 소모적인 프로세서 코어들과 커플링될 수도 있는 "big.LITTLE" 아키텍처들로 알려져 있는 것을 포함할 수도 있다. 유사한 실시형태들에서, SoC (12) 는 다수의 동종 또는 이종의 프로세서들 (14) 을 포함할 수도 있다.
도 2 에 예시된 예에서, 멀티-코어 프로세서 (14) 는 4 개의 프로세서 코어들 (200, 201, 202, 203) (즉, 프로세서 코어 0, 프로세서 코어 1, 프로세서 코어 2, 및 프로세서 코어 3) 을 포함한다. 설명의 용이함을 위해, 본 명세서의 예들은 도 2 에 예시된 4 개의 프로세서 코어들 (200, 201, 202, 203) 을 참조할 수도 있다. 그러나, 도 2 에 예시되고 본 명세서에서 설명된 4 개의 프로세서 코어들 (200, 201, 202, 203) 은 단지 일 예로서 제공될 뿐이며, 결코 다양한 실시형태들을 4-코어 프로세서 시스템으로 제한하려는 의도는 없다. 컴퓨팅 디바이스 (10), SoC (12), 또는 멀티-코어 프로세서 (14) 는 본 명세서에서 예시 및 설명된 4 개의 프로세서 코어들 (200, 201, 202, 203) 보다 더 적거나 또는 더 많은 프로세서 코어들을 개별로 또는 조합하여 포함할 수도 있다.
도 3 은 일부 실시형태들에 따라 메모리에 저장된 시스템 서비스들의 다양한 버전들을 생성하는 시변하는 ASLR 의 비한정적인 예를 예시한다. 도 3 의 그래프 (300) 는, 상이한 컴퓨팅 디바이스들이 예를 들어 "x" 의 임의의 정수 값에 대해 D1, D2, 내지 Dx 까지 지정되는 수평 축을 포함한다. 그래프 (300) 는 또한 증가하는 시간을 나타내고 나타낸 시간에 걸쳐 상이한 시스템 서비스 요청들을 나타내는 수직축을 포함한다. 상이한 시스템 서비스 요청들에 응답하여 상이한 시간에 할당된 상이한 컴퓨팅 디바이스들 각각에 대해 요청된 다수의 시스템 서비스들 (310-336) 의 다양한 버전들이 그래프 (300) 에 플로팅된다. 예를 들어, 컴퓨팅 디바이스 D1 은 단일 시스템 서비스 S1 에 대해 시간이 지남에 따라 다수의 시스템 서비스 요청들을 하고 시스템 서비스 S1 ("N" 의 임의의 정수 값에 대해 SV1-1 (314), SV1-2 (312), SV1-3 (310), 내지 SV1-N (316) 까지) 의 상이한 버전들에 응답하여 수신하는 것으로 예시된다. 다양한 구현예들에서, 시스템 서비스 S1 (310-316) 의 상이한 버전들의 각각은 시스템 서비스 S1 에 대한 시스템 서비스 요청에 응답하여 랜덤하게 할당될 수 있고, 그리고 시스템 서비스 S1 (310-316) 의 다른 버전들로부터 상이한 가상 메모리 어드레스에서 위치될 수 있다.
그래프 (300) 는, 단일 시스템 서비스 S1 에 대해 시간이 지남에 따라 다수의 시스템 서비스 요청들을 하고 시스템 서비스 S1 ("M" 의 임의의 정수 값에 대해 SV1-1 (320), SV1-2 (326), SV1-3 (324), 내지 SV1-M (322) 까지) 의 상이한 버전들에 응답하여 수신하는, 컴퓨팅 디바이스 D2 를 더 예시한다. 컴퓨팅 디바이스 D1 에 대해서, 다양한 구현예들에서, 시스템 서비스 S1 (320-326) 의 상이한 버전들의 각각은 시스템 서비스 S1 에 대한 시스템 서비스 요청에 응답하여 랜덤하게 할당될 수 있고, 그리고 시스템 서비스 S1 (320-326) 의 다른 버전들로부터 상이한 가상 메모리 어드레스에서 위치될 수 있다. 시스템 서비스 S1 (320-326) 의 상이한 버전들의 랜덤 할당으로 인해, 그래프 (300) 에서의 예는 컴퓨팅 디바이스 D2 의 시스템 서비스 S1 (320-326) 의 상이한 버전들이 컴퓨팅 디바이스 D1 의 시스템 서비스 S1 (310-316) 의 상이한 버전들과 시간이 지남에 따라 상이한 순서로 할당된다는 것을 예시한다. 시스템 서비스 S1 (310-316 및 320-326) 의 상이한 버전들이 시스템 서비스 버전 식별자들 (예를 들어, SV1-1, SV1-2, SV1-3) 을 공유하지만, 시스템 서비스 S1 (310-316 및 320-326) 의 대응되게 식별된 버전들의 각각의 개별 구현은 상이할 수 있다. 예를 들어, 시스템 서비스 S1 (310-316 및 320-326) 의 대응되게 식별된 버전들의 각각의 구현에는 상이한 랜덤 가상 어드레스 공간 레이아웃이 할당될 수 있고, 그리고 개개의 컴퓨팅 디바이스들 D1 또는 D2 상에 시스템 서비스 S1 (310-316 및 320-326) 의 상이한 구현들 또는 버전들에 대한 상이한 데이터를 포함할 수 있다.
그래프 (300) 는, 다수의 시스템 서비스들 S1 및 S2 에 대해 시간이 지남에 따라 다수의 시스템 서비스 요청들을 하고 시스템 서비스들 S1 및 S2 ("Q" 의 임의의 정수 값에 대해 SV1-1 (336), SV1-2 (332), SV2-1 (334), 내지 SV2-Q (330) 까지) 의 상이한 버전들에 응답하여 수신하는, 컴퓨팅 디바이스 (Dx) 를 더 예시한다. 그래프 (300) 의 예는, 컴퓨팅 디바이스들 D1 또는 D2 에 의해 요청된 동일한 시스템 서비스 S1 가 또한 컴퓨팅 디바이스 D3 에 의해 요청된다는 것을 예시한다. 시스템 서비스 S1 (332 및 336) 의 상이한 버전들은 동일한 방식의 시스템 서비스 S1 (310-316 및 320-326) 의 상이한 버전들과 상이할 수 있다. 시스템 서비스 S2 (330 및 334) 의 상이한 버전들은 가상 어드레스 공간 레이아웃들에 유사하게 랜덤하게 할당될 수 있고, 시스템 서비스 S2 (310-316 및 320-326) 의 상이한 버전 및 구현들에 대한 상이한 데이터를 포함할 수 있고, 그리고 시스템 서비스 S2 에 대한 시스템 서비스 요청에 응답하여 랜덤하게 선택될 수 있다.
도 3 에 예시된 예는 비한정적이고, 그리고 컴퓨팅 디바이스는 임의의 수의 시스템 서비스들의 임의의 수의 버전들을 가질 수 있다. 시스템 서비스의 다양한 버전들은 대응하는 시스템 서비스에 대한 다수의 시스템 서비스 요청들에 응답하여 임의의 횟수로 할당될 수 있다.
도 4a 는 다양한 실시형태들을 구현하기에 적합한 시변하는 ASLR 시스템의 예를 예시한다. 컴퓨팅 디바이스는 다양한 형태의 물리적 메모리 (400), 예컨대 도 1 을 참조하여 설명된 메모리 (16) 및 스토리지 메모리 (24) 를 포함할 수 있다. 물리적 메모리 (400) 는 다양한 시스템 서비스들의 코드, 예컨대 시스템 서비스 S1 (402) 에 대한 코드를 저장할 수 있다.
컴퓨팅 디바이스는 컴퓨팅 디바이스 S1 (402) 를 위한 코드에 다양한 액세스하기 위해 시도할 수 있다. 예를 들어, 컴퓨팅 디바이스 상에서 실행되는 부트 프로세스 (404) 는 부팅 시간 동안 시스템 서비스 S1 (402) 에 대한 코드에 액세스하기를 시도할 수 있다. 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션 (406) 은 또한, 컴퓨팅 디바이스가 파워 온되고 애플리케이션 (406) 을 실행할 수 있는 임의의 시간 동안 시스템 서비스 S1 (402) 에 대한 코드에 액세스하기를 시도할 수 있다.
시변하는 ASLR 을 구현하기 위해서, 시스템 서비스 (310-316) 의 다수 버전들은 부트 프로세스 (404) 또는 애플리케이션 (406) 중 어느 것에 의해 시스템 서비스 요청에 응답하여 론처 (408) 에 의해 론칭될 수 있다. 다양한 구현예들에서, 컴퓨팅 디바이스는, 부트 프로세스 (404) 가 임의의 수의 시스템 서비스들에 대한 시스템 서비스 요청을 하여 이들 시스템 서비스들의 다양한 버전들의 론칭을 초래하도록 프로그래밍될 수 있다 (310-316).
다양한 실시형태들에서, 애플리케이션 (406) 은 이미 론칭된 시스템 서비스에 대한 시스템 서비스 요청을 할 수 있고 시스템 서비스의 다양한 버전들이 이미 론칭될 수 있다. 다양한 구현예들에서, 론처 (408) 는 시스템 서비스의 2 이상의 버전이 이미 존재할 때 시스템 서비스의 추가 버전들의 론칭을 억제할 수 있다. 다양한 구현예들에서, 론처 (408) 는 시스템 서비스의 1 이상의 버전들이 이미 존재할 때 시스템 서비스의 제한된 수의 버전들을 론칭할 수 있다.
다양한 구현예들에서, 애플리케이션 (406) 은 그 시간에 론칭된 시스템 서비스의 버전을 가지지 않는 시스템 서비스에 대한 시스템 서비스 요청을 할 수 있다. 예를 들어, 요청된 시스템 서비스는 애플리케이션에 의한 시스템 서비스 요청 이전에 컴퓨팅 디바이스의 파워 온 세션 동안 요청되지 않을 수도 있다. 유사하게, 컴퓨팅 디바이스의 파워 온 세션 동안에 론칭된 시스템 서비스의 이전 버전들은, 사용상의 부족, 제한된 메모리 공간, 제한된 컴퓨팅 디바이스 전력, 및 다른 대체 정책들 및 알고리즘들과 같은 다양한 이유로 폐기되었을 수도 있다. 요청된 시스템 서비스의 버전이 애플리케이션 (406) 에 의한 시스템 서비스 요청시 존재 하지 않으면, 론처 (408) 는 요청된 시스템 서비스의 지정된 수의 버전들을 론칭할 수 있다.
본 명세서에 기재된 바와 같이, 론처 (408) 는 다중 소스들로부터 시스템 서비스 요청들에 응답할 수 있고 요청된 시스템 서비스의 지정된 수의 버전들을 론칭할 수 있다. 요청된 시스템 서비스의 버전들의 수는, 요청 코디네이터 (412) 를 참조하여 본원에 더욱 기재된 바와 같이, 프로그래밍된 값들, 요청된 시스템 서비스의 측정 또는 예상된 사용, 요청된 시스템 서비스의 우선순위 또는 취약성, 컴퓨팅 디바이스의 상태 (메모리 공간 및 전력 가용성을 포함), 또는 시스템 서비스에 대한 검출 또는 의심된 위협에 기초하여 달라질 수 있다. 시스템 서비스의 각 버전은 동일한 시스템 서비스의 다른 버전들 각각으로서 동일한 프로세스 그룹 식별자 (ID) 와 론처 (408) 에 의해 연관될 수 있다. 프로세스 그룹 식별자는 동일한 프로세스 그룹 식별자를 갖는 요청된 시스템 서비스 (310-316) 의 버전들을 포함하는 프로세스 그룹 (416) 을 정의할 수 있다.
론처 (408) 는 지정된 이종의 프로세서들 상에 실행될 수 있는 시스템 서비스의 상이한 버전들을 론칭할 수 있다. 예를 들어, 론칭되는 시스템 서비스의 제 1 버전은 컴퓨팅 디바이스의 CPU에 의해 실행되도록 구성될 수 있고, 그리고 론칭되는 시스템 서비스의 제 2 버전은 컴퓨팅 디바이스의 DSP 에 의해 실행되도록 구성될 수 있다. 론처 (408) 는 임의의 유형의 프로세서에 의해 실행될 시스템 서비스의 상이한 버전들을 론칭할 수 있다. 이종의 프로세서에서 실행될 시스템 서비스의 다양한 버전들은 버전들의 구현을 위한 상이한 명령 세트들을 상이한 프로세서들에 의해 요구함으로써 공격자로부터 시스템 서비스를 난독화하는데 도움을 줄 수 있다. 제 2 프로세서의 실행된 버전으로부터 데이터를 사용하여 제 1 프로세서의 시스템 서비스의 버전을 실행하려고 시도하는 공격자는 제 1 프로세서에 대한 명령 세트를 사용하여 시스템 서비스의 버전을 실행하기에 올바른 데이터 또는 올바른 포맷의 데이터를 제공하지 않아도 된다.
컴퓨팅 디바이스는, 시스템 서비스들 (310-316) 의 다양한 버전들을 가상 메모리 (414) 에 맵핑하도록 구성될 수 있는 맵퍼 (410) 를 포함할 수 있다. 맵퍼 (410) 는 시스템 서비스들 (310-316) 의 다양한 버전들에 대한 가상 메모리 어드레스 공간 레이아웃들을 랜덤하게 선택하고, 그리고 시스템 서비스들 (310-316) 의 다양한 버전들을 시스템 서비스들 (310-316) 의 버전들을 저장하는데 이용가능한 랜덤하게 선택된 가상 어드레스 공간 레이아웃들에 맵핑하도록 구성될 수 있다. 맵퍼 (410) 는 이전의 랜덤 선택에 응답하여 시스템 서비스 (310-316) 의 버전에 대한 상이한 가상 어드레스 공간 레이아웃을 랜덤하게 선택하여, 결과적으로 시스템 서비스 (310-316) 의 버전을 저장하는데 이용불가능한 가상 어드레스 공간 레이아웃을 초래할 수 있다. 맵퍼 (410) 는 또한 가상 어드레스 공간 레이아웃을 시스템 서비스 (310-316) 의 대응 버전에 대한 시스템 서비스 버전 식별자와 상관시키고, 시스템 서비스 요청에 응답하여 시스템 서비스 (310-316) 의 버전을 할당 및 위치시키기 위해 상관된 정보를 저장할 수 있다. 맵퍼 (410) 는 또한 시스템 서비스들 (310-316) 의 다양한 버전들의 가상 어드레스 공간 레이아웃을 물리적 메모리 (400) 내의 대응 시스템 서비스 (402) 의 물리적 어드레스에 맵핑하는 것들을 제공할 수 있다. 대응 시스템 서비스 (402) 에 대한 시스템 서비스들 (310-316) 의 다양한 버전들의 맵핑은 시스템 서비스 (402) 의 실행을 위해 시스템 서비스 (402) 에 시스템 서비스들 (310-316) 의 버전의 데이터를 제공하도록 사용될 수 있다.
맵퍼 (410) 는 또한 시스템 서비스 (310-316) 의 버전에 대한 가상 어드레스 공간 레이아웃을, 시스템 서비스 (310-316) 의 버전의 데이터가 저장되는 시스템 서비스 (310-316) 의 버전의 물리적 어드레스들에 맵핑할 수 있다. 시스템 서비스 (310-316) 의 버전의 데이터는 시스템 서비스 (310-316) 의 버전을 구현하기 위해 힙들, 스택들, 실행파일들, 공유 라이브러리들 등을 포함할 수 있다. 컴퓨팅 디바이스는 시스템 서비스 (310-316) 의 버전의 가상 어드레스 공간 레이아웃을 사용하여 시스템 서비스 (310-316) 의 버전의 데이터를 검색할 수 있고, 그리고 시스템 서비스 (310-316) 의 버전의 데이터를 사용하여 시스템 서비스 (402) 를 실행할 수 있다. 일부 구현예들에서, 시스템 서비스 (310-316) 의 버전의 데이터는 물리적 메모리 (400) 에 시스템 서비스 (402) 를 위치시키기 위한 포인터와 같은 레퍼런스를 포함할 수 있다.
컴퓨팅 디바이스는 애플리케이션 (406) 으로부터 시스템 서비스 요청들을 수신하도록 구성될 수 있는 요청 코디네이터 (412) 를 포함할 수 있다. 시스템 서비스 요청은 시스템 서비스 S1 (402) 와 같은 특정 시스템 서비스에 대한 것일 수 있다. 요청 코디네이터 (412) 는, 요청된 시스템 서비스를 시스템 서비스 (310-316) 의 버전들과 매칭하기 위해 시스템 서비스 요청에 포함된 시스템 서비스의 시스템 서비스 식별자 (예를 들어, 네임, 핸들, 라벨 또는 기타 레퍼런스) 를 사용할 수 있다. 요청 코디네이터 (412) 는 요청된 시스템 서비스를 실행하는데 사용할 시스템 서비스 (310-316) 의 버전들 중 하나를 랜덤하게 선택할 수 있다. 요청 코디네이터 (412) 는, 시스템 서비스 (310-316) 의 버전의 데이터를 위치시키고 검색하기 위해서, 랜덤하게 선택된 가상 어드레스 공간 레이아웃의 시작하는 가상 어드레스와 같은 시스템 서비스 (310-316) 의 랜덤하게 선택된 버전의 가상 어드레스를 검색할 수 있다. 지정된 프로세서에 의해 실행되도록 구성된 시스템 서비스 (310-316) 의 랜덤하게 선택된 버전에 대해, 요청 코디네이터 (412) 는 시스템 서비스의 버전을 갖는 이종의 프로세서를 랜덤하게 선택할 수 있고, 그리고 시스템 서비스 요청을 발행하는 애플리케이션 (406) 또는 부트 프로세스 (404) 및 이종의 프로세서 상의 버전으로/으로부터, 이종의 프로세서에 의해 실행된 시스템 서비스의 버전의 출력들 및 수신된 시스템 서비스 요청을 포함하여, 메시지들을 전송 및 수신하기 위해 프로세서간 메시지들을 사용할 수 있다.
다양한 구현예들에서, 시스템 서비스의 론칭된 버전들의 가변하는 수들은 상이한 활동 상태들에 있을 수 있다. 활동 상태들은 웨이크 (wake) 상태, 슬립 (sleep) 상태, 및 다양한 준 웨이크/슬립 상태들을 포함할 수 있다. 웨이크 상태에서, 시스템 서비스의 버전은 요청된 시스템 서비스를 실행하는데 사용하기 위해 요청 코디네이터 (412) 에 의해 랜덤하게 선택될 수 있다. 슬립 상태에서, 시스템 서비스의 버전은 요청된 시스템 서비스를 실행하는데 사용하기 위해 요청 코디네이터 (412) 에 의해 더 높은 활동 상태 버전보다 덜 쉽게 랜덤하게 선택가능하거나 또는 선택불가능할 수 있다. 다양한 준 웨이크/슬립 상태들 중 하나에서, 시스템 서비스의 버전은 요청된 시스템 서비스를 실행하는데 사용하기 위해 요청 코디네이터 (412) 에 의해 랜덤하게 선택될 수 있다. 요청 코디네이터 (412) 는 보다 낮은 레벨의 준 웨이크/슬립 상태 또는 슬립 상태에서의 시스템의 서비스의 버전에 비해 보다 높은 레벨의 준 웨이크/슬립 상태에서 또는 웨이크 상태에서의 시스템 서비스 버전을 우선순위화할 수 있다. 준 웨이크/슬립 상태에서의 시스템 서비스의 버전들은 웨이크 상태에서의 버전들보다 덜 빠르게 접근가능하고 및/또는 웨이크 상태가 실행되도록 하기 위해 보다 많은 전력을 요구할 수 있다. 마찬가지로, 슬립 상태에서의 시스템 서비스의 버전들은 준 웨이크/슬립 상태 버전보다 웨이크 상태로 가게 하기 위해 더 많은 시간 및/또는 더 많은 전력을 취할 수 있다.
요청 코디네이터 (412) 는 시스템 서비스의 버전이 다양한 팩터들에 의존하여 웨이크 상태, 준 웨이크/슬립 상태, 또는 슬립 상태에 있는지를 제어할 수 있다. 예를 들면, 이러한 팩터들은 프로세서, 컴퓨팅 디바이스, 및/또는 애플리케이션의 활동 상태, 컴퓨팅 디바이스의 전력 상태, 시스템 서비스에 대한 최근의 및/또는 예상된 호출들의 수, 및/또는 프로세서, 컴퓨팅 디바이스, 및/또는 애플리케이션의 위협적인 상태를 포함할 수 있다. 다양한 팩터들에 기초하여 시스템 서비스에 대해 다중 호출들이 보다 가능하게 될수록, 요청 코디네이터 (412) 가 웨이크 상태 및/또는 준 웨이크/슬립 상태에 있도록 제어할 수 있는 시스템 서비스의 버전들의 수가 더 높아진다. 예시적인 팩터들을 이용하여, 프로세서, 컴퓨팅 디바이스, 및/또는 애플리케이션의 활동 상태가 더 높아질수록, 웨이크 상태 및/또는 준 웨이크/슬립 상태에 있는 시스템 서비스의 버전들의 수가 더 높아진다. 마찬가지로, 시스템 서비스에 대한 최근의 및/또는 예상되는 호출들의 수가 더 높아질수록, 웨이크 상태 및/또는 준 웨이크/슬립 상태에 있을 수 있는 시스템 서비스의 버전들의 수가 더 높아진다. 컴퓨팅 디바이스에 이용가능한 전력이 보다 많아질수록, 웨이크 상태 및/또는 준 웨이크/슬립 상태에 있을 수 있는 시스템 서비스의 버전들의 수가 더 높아진다. 또한, 취약성 또는 공격성을 나타내는 프로세서, 컴퓨팅 디바이스, 및/또는 애플리케이션의 위협 상태가 더 높아질수록, 웨이크 상태 및/또는 준 웨이크/슬립 상태에 있을 수 있는 시스템 서비스의 버전들의 수가 더 높아진다.
시스템 서비스의 버전들의 총 수에 대한, 웨이크 상태의 버전들의 수, 준 웨이크/슬립 상태의 버전들의 수, 및/또는 슬립 상태의 버전들의 수에 대한 세트가 한정될 수 있다. 이 한계들은 다양한 상태들에서의 시스템 서비스의 버전들의 총 수를 제어하는데 사용되는 프로파일들에 따라 달라질 수 있다. 프로파일들은 미리 결정된 한계들을 포함할 수 있거나 다양한 팩터들에 기초하여 한계들을 할당할 수 있다.
일부 구현예들에서, 요청 코디네이터 (412) 는 요청된 시스템 서비스를 목표로 하는 잠재적인 공격들을 검출 또는 의심할 수 있다. 요청 코디네이터 (412) 는 비정상적인 액세스 패턴들 및 시스템 서비스 요청자들을 검출할 수 있다. 잠재적인 공격을 검출하거나 의심하는 것에 응답하여, 요청 코디네이터 (412) 는 론처 (408) 에 경보 신호를 전송하여, 론처 (408) 가 요청된 시스템 서비스의 더 많은 버전들의 활동 상태를 론칭 및/또는 증가시키도록 프롬프트할 수 있다. 요청된 시스템 서비스의 추가적으로 론칭 및/또는 증가된 활동 상태 버전들은, 시스템 서비스의 무관 실행들을 위해 상이한 데이터의 보다 많은 뷰들을 생성함으로써, 공격자로부터 시스템 서비스를 더욱 난독화시키는 역할을 할 수 있다. 추가 데이터와 데이터 간의 일관성 부족은, 하나의 실행으로부터 데이터를 사용하는 것이 악의적인 시스템 서비스 요청에 응답하여 시스템 서비스의 상이한 버전을 사용하는 이후 실행에 대응되지 않을 수도 있기 때문에, 시스템 서비스를 활용하는데 사용될 수 있는 데이터를 공격자가 수집하지 않게 하는 것을 돕는다. 악의적인 시스템 서비스에서 이러한 비대응 데이터를 사용하는 것으로, 시스템 서비스를 실행하려는 무효한 시도를 초래할 수 있고, 시스템 서비스의 실행을 방지할 수 있다.
도 4b 는 일부 실시형태들을 구현하기에 적합한 동적 코드 생성 시스템을 갖는 시변하는 ASLR 시스템의 예를 예시한다. 컴퓨팅 디바이스는 사용자 공간 또는 커넬 공간에서 구현된 메모리 할당기 (420), 및 시스템 서비스들을 실행하기 위해 동적으로 생성된 코드들을 저장하는 코드 버퍼 (424) 를 포함할 수 있다. 메모리 할당기 (420) 는, 상관된 시스템 서비스를 실행시키기 위해 동적으로 생성된 코드에 대응하는 동적으로 생성된 코드에 대응하는 코드 버퍼 어드레스와 상관된 시스템 서비스 버전 식별자들의 리스트 (422) (또는 하나의 데이터를 다른 데이터와 연결하도록 구성된 다른 데이터 구조) 를 저장하도록 구성될 수 있다.
시스템 서비스 (310-316) 의 버전의 실행은 시스템 서비스 (402) 를 위한 동적으로 생성된 코드를 초래할 수 있다. 동적으로 생성된 코드는, 코드를 다시 동적으로 생성할 필요없이 시스템 서비스의 이후 실행에서 사용하기 위한 생성된 코드에 액세스하기 위해 코드 버퍼 (424) 에 저장될 수 있다. 메모리 할당기 (420) 는 동적으로 생성된 코드의 크기, 및 대응하는 시스템 서비스의 시스템 서비스 버전 식별자를 포함하여, 동적으로 생성된 코드를 저장하기 위한 파라미터들을 수신할 수 있다. 메모리 할당기 (420) 는 동적으로 생성된 코드를 저장하기에 충분한 크기 및 가용성의 위치를 찾기 위해 코드 버퍼 (424) 를 트래버스할 수 있다. 메모리 할당기 (420) 는 코드 버퍼 어드레스들의 랜덤 선택을 포함하여 다양한 알고리즘들 또는 패턴들을 이용하여 코드 버퍼 (424) 를 트래버스할 수 있다. 충분히 큰 위치를 찾으면, 메모리 할당기 (420) 는, 위치의 임의의 어드레스들이 시스템 서비스 버전 식별자와 이미 연관되어 있는지를 결정하기 위해 코드 버퍼 (424) 에서의 위치의 어드레스들을 리스트 (422) 와 비교할 수 있다. 시스템 서비스 버전 식별자와 연관이 없는 위치들은 동적으로 생성된 코드를 저장하기 위해 이용가능한 위치들일 수 있다. 코드 버퍼 (424) 에 충분히 크고 이용가능한 위치를 찾으면, 메모리 할당기 (420) 는 코드 버퍼 (424) 의 동적 코드 위치 (예를 들어, 동적 코드 위치들 1 내지 Y) 에서 동적 코드를 저장하는 코드 버퍼의 어드레스를 제공할 수 있고, 그리고 코드 버퍼 어드레스에서 동적으로 생성된 코드의 저장을 반영하도록 리스트 (422) 를 업데이트할 수 있다. 코드 버퍼 어드레스는 시스템 서비스 (310-316) 의 버전의 다른 데이터와 함께 저장될 수 있으며, 그 실행에 의해 동적으로 생성된 코드가 생성된다.
도 5 는 시스템 서비스의 버전을 실행하기 위해 일부 실시형태들을 구현하는데 적합한 시변하는 ASLR 시스템의 예를 예시한다. 이 시스템은 사용자 공간 (500) 과 커넬 공간 (516) 을 포함할 수 있다. 사용자 공간 (500) 에서, 다수의 시스템 서비스 프로세스들, 예를 들어 시스템 서비스 S1 프로세스 (508a, 508b) 는 시스템 서비스의 상이한 버전들을 실행하기 위해 구현될 수 있으며, 예를 들어 시스템 서비스 S1 프로세스 (508a) 는 시스템 서비스 버전 SV1-1을 실행할 수 있고, 시스템 서비스 S1 프로세스 (508b) 는 시스템 서비스 버전 SV1-2를 실행할 수 있다. 각 시스템 서비스 프로세스는 (508a, 508b) 는 대응하는 포시스템 서비스 프로세스 (508a, 508b) 의 코드를 실행하기 위한 시스템 서비스 스레드 풀 (510a, 510b) 을 포함할 수 있다. 시스템 서비스의 버전들을 론칭할 때, 시스템 서비스 프로세스 (508a, 508b) 는, 시스템 서비스의 대응 버전을 요청 코디네이터 (412) 또는 시스템 서비스 관리자에 등록하기 위해 등록 신호 (530a, 530b) 를 전송할 수 있다.
요청 코디네이터 (412) 는 시스템 서비스들의 버전들을 등록하고, 그리고 시스템 서비스들의 할당된 버전들을 요청 애플리케이션 (406) 에 제공하도록 구성될 수 있다. 일부 구현예들에서, 애플리케이션 (406) 은 사용자 공간 (500) 에서 실행될 수 있다. 요청 코디네이터 (412) 는, 시스템 서비스를 시스템 서비스의 버전들과 상관시키는데 사용된 정보 및 시스템 서비스들의 버전들의 랜덤 선택의 업데이팅 및 저장을 핸들링하기 위해 시변하는 ASLR 콘텍스트 관리자 (504) 를 포함할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는, 시스템 서비스의 다수의 버전들의 오브젝트들 또는 바인더 레퍼런스들 (핸들들 또는 라벨들) 과 시스템 서비스 식별자를 상관시키기 위해, 등록 테이블 (506) 또는 다수의 다른 데이터와 하나의 데이터를 연결하도록 구성된 다른 데이터 구조를 사용할 수 있다. 등록 테이블 (506) 은 시스템 서비스 식별자를 적어도 하나의 바인더 레퍼런스/오브젝트와 상관시키는 각각의 시스템 서비스 식별자에 대한 하나 이상의 엔트리들을 포함할 수 있다. 도 5 의 비한정적인 예는, 시스템 서비스 버전 SV1-1 에 대해 B1, 시스템 서비스 버전 SV1-2 에 대해 B2, 내지 임의의 정수 값 "N"에 대해 BN까지를 포함하는, 시스템 서비스의 상이한 버전에 각각이 대응하는 바인더 레퍼런스의 리스트와 상관된, 시스템 서비스 식별자, 시스템 서비스 S1 에 대한 엔트리를 도시한다.
커넬 공간 (516) 의 기능들은 컴퓨팅 디바이스의 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14)) 에 의해 구현될 수 있다. 커넬 공간 (516) 은, 시스템 서비스들의 다수의 버전들의 바인더 레퍼런스를 시스템 서비스의 버전의 오브젝트의 가상 어드레스 및 오너 프로세서와 상관시키기 위해, 맵핑 테이블 (520) 또는 다수의 다른 데이터와 하나의 데이터를 연결하도록 구성된 다른 데이터 구조를 포함할 수 있다. 맵핑 테이블 (520) 은 시스템 서비스의 버전이 론칭될 때 채워지고 업데이트될 수 있다. 도 5 의 비한정적인 예는 등록 테이블 (506) 의 바인더 레퍼런스들에 대한 맵핑 테이블 (520) 에서의 엔트리들을 도시한다. 바인더 레퍼런스 B1은 맵핑 프로세스 (520) 에서 오너 프로세스 Pi 및 가상 어드레스 VA1와 상관된다. 유사하게, 바인더 레퍼런스 B2 는 오너 프로세스 Pj 및 가상 어드레스 VA2와 상관되고, 바인더 레퍼런스 BN 은 오너 프로세스 Pk 및 가상 어드레스 VAN 과 상관된다.
애플리케이션 (406) 의 애플리케이션 프로세스 (512) 는 요청된 시스템 서비스의 시스템 서비스 식별자를 사용하여 시스템 서비스 (532) 의 버전에 대한 요청을 전송할 수 있다. 요청 코디네이터 (412) 는 시스템 서비스 (532) 의 버전에 대한 요청을 수신할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 등록 테이블 (506) 에서 요청된 서비스 시스템의 시스템 서비스 식별자와 상관된 바인더 레퍼런스들 중 하나를 랜덤하게 선택할 수 있다.
일부 구현예들에서, 시변하는 ASLR 콘텍스트 관리자 (504) 는 요청된 시스템 서비스의 버전들의 애플리케이션 (406) 에의 이전 할당들의 트랙을 유지할 수 있고, 그리고 애플리케이션 (406) 에 이전에 제공되지 않은 바인더 레퍼런스들을 랜덤하게 선택할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 이전에 제공된 바인더 레퍼런스의 할당을 피할 수 있다. 예를 들어, 시변하는 ASLR 콘텍스트 관리자 (504) 는 랜덤 선택 전에 이전에 제공된 바인더 레퍼런스들을 디스카운팅함으로써 이전에 제공된 바인더 레퍼런스의 할당을 피할 수 있다. 다른 예로서, 시변하는 ASLR 콘텍스트 관리자 (504) 는 이전에 제공된 바인더 레퍼런스를 랜덤하게 선택하는 것에 응답하여 후속 랜덤 선택을 함으로써 이전에 제공된 바인더 레퍼런스의 할당을 피할 수 있다.
요청 코디네이터 (412) 는 랜덤하게 선택된 바인더 레퍼런스를 애플리케이션 (406) 으로 리턴할 수 있다. 애플리케이션 (406) 은 요청된 시스템 서비스의 시스템 서비스 식별자와 상관된 랜덤하게 선택된 바인더 레퍼런스를 수신할 수 있고, 그리고 요청된 시스템 서비스 (534) 를 호출하기 위해 바인더 레퍼런스를 사용할 수 있다.
애플리케이션 (406) 의 서비스 관리자 프록시 (514) 는 요청된 시스템 서비스의 버전을 액세스하기 위해 커넬 공간 (516) 과 인터페이스할 수 있다. 서비스 관리자 프록시 (514) 는 요청된 시스템 서비스 (536) 의 버전의 호출을 바인더 레퍼런스에 제공할 수 있다. 커넬 공간 (516) 에서의 바인더 드라이버 (518) 는, 바인더 레퍼런스와 상관된 요청된 시스템 서비스의 버전의 오브젝트의 가상 어드레스를 위치시키기 위해 바인더 레퍼런스를 사용하여, 요청된 시스템 서비스 (536) 의 버전에 대한 호출을 수신할 수 있다. 바인더 드라이버 (518) 는 요청된 시스템 서비스의 버전에 대해 대응하는 시스템 서비스 프로세스 (508a, 508b) 와 통신할 수 있다. 그렇게 함에 있어서, 바인더 드라이버 (518) 는 바인더 레퍼런스와 상관된 가상 어드레스로부터의 요청된 시스템 서비스의 버전의 데이터를 사용하여 요청된 시스템 서비스 (538) 의 버전의 실행을 요청할 수 있다.
대응 시스템 서비스 프로세스 (508a, 508b) 는, 시스템 서비스 프로세스 (508a, 508b) 에 의해 시스템 서비스의 지정 버전의 데이터를 사용하여 실행이 완료되면 요청된 시스템 서비스 (540) 의 실행의 결과를 리턴할 수 있다. 바인더 드라이버 (518) 는 결과 (542) 를 서비스 관리자 프록시 (514) 로 포워딩할 수 있고, 서비스 관리자 프록시 (514) 는 결과 (544a) 를 애플리케이션 프로세스 (512) 로 포워딩할 수 있다.
도 6 은 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하는데 적합한 시변하는 ASLR 시스템의 예를 예시한다. 도 6 에 도시된 예는 도 5 를 참조하여 상술한 예와 유사하다. 두 예들은 동일한 컴포넌트들을 공유하고, 그리고 시스템 서비스를 실행하기 위한 제 1 요청을 나타내는 통신 신호들 (532a, 534a, 536a, 538a, 540a, 542a 및 544a) 은 도 5 를 참조하여 기재된 통신 신호들 (532, 534, 536, 538, 540, 542 및 544) 에 대응할 수 있다. 도 6 에 도시된 예는 시스템 서비스를 실행하기 위한 제 2 요청을 더 포함한다.
애플리케이션 프로세스 (512) 는 요청된 시스템 서비스의 시스템 서비스 식별자를 사용하여 동일한 시스템 서비스 (532b) 의 버전에 대한 제 2 요청을 전송할 수 있다. 요청 코디네이터 (412) 는 시스템 서비스 (532b) 의 버전에 대한 제 2 요청을 수신할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 등록 테이블 (506) 에서 요청된 서비스 시스템의 시스템 서비스 식별자와 상관된 바인더 레퍼런스들 중 하나를 랜덤하게 선택할 수 있다. 도 5 를 참조하여 기재된 바와 같이, 시변하는 ASLR 콘텍스트 관리자 (504) 는, 예를 들어, 시스템 서비스를 실행하기 위한 제 1 요청에 대한 제 1 할당과 같이, 요청된 시스템 서비스의 버전들의 애플리케이션 (406) 에 이전 할당들의 트랙을 유지할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 애플리케이션 (406) 에 이전에 제공되지 않은 제 2 바인더 레퍼런스를 랜덤하게 선택할 수 있다. 요청 코디네이터 (412) 는 랜덤하게 선택된 제 2 바인더 레퍼런스를 애플리케이션 (406) 으로 리턴할 수 있다.
애플리케이션 (406) 은 요청된 시스템 서비스의 시스템 서비스 식별자와 상관된 랜덤하게 선택된 제 2 바인더 레퍼런스를 수신할 수 있고, 그리고 요청된 시스템 서비스 (534b) 를 호출하기 위해 제 2 바인더 레퍼런스를 사용할 수 있다. 서비스 관리자 프록시 (514) 는 요청된 시스템 서비스의 버전에 액세스하여 요청된 시스템 서비스 (536b) 의 버전에 대한 호출을 제 2 바인더 레퍼런스에 제공하기 위해 커넬 공간 (516) 과 인터페이스할 수 있다. 바인더 드라이버 (518) 는, 제 2 바인더 레퍼런스와 상관된 요청된 시스템 서비스의 버전의 오브젝트의 가상 어드레스를 위치시키기 위해 제 2 바인더 레퍼런스를 사용하여, 요청된 시스템 서비스 (536b) 의 버전에 대한 호출을 수신할 수 있다. 바인더 드라이버 (518) 는 요청된 시스템 서비스의 버전에 대해 대응하는 시스템 서비스 프로세스 (508b) 와 통신할 수 있다. 그렇게 함에 있어서, 바인더 드라이버 (518) 는 제 2 바인더 레퍼런스와 상관된 가상 어드레스로부터의 요청된 시스템 서비스의 버전의 데이터를 사용하여 요청된 시스템 서비스 (538b) 의 버전의 실행을 요청할 수 있다.
대응 시스템 서비스 프로세스 (508b) 는, 시스템 서비스 프로세스 (508b) 에 의해 시스템 서비스의 지정 버전의 데이터를 사용하여 실행이 완료되면 요청된 시스템 서비스 (540b) 의 실행의 결과를 리턴할 수 있다. 바인더 드라이버 (518) 는 결과 (542b) 를 서비스 관리자 프록시 (514) 로 포워딩할 수 있고, 서비스 관리자 프록시 (514) 는 결과 (544b) 를 애플리케이션 프로세스 (512) 로 포워딩할 수 있다.
도 7 은 다수의 애플리케이션들을 위한 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하는데 적합한 시변하는 ASLR 시스템의 예를 예시한다. 도 7 에 도시된 예는 도 5 및 도 6 를 참조하여 상술한 예들과 유사하다. 모든 예들은 동일한 컴포넌트들을 공유하지만, 도 7 에 도시된 예는 다중 애플리케이션들 (406a, 406b), 다중 애플리케이션 프로세스들 (512a, 512b), 및 다중 서비스 관리자 프록시들 (514a, 514b) 을 포함한다. 제 1 애플리케이션 (406a) 은 도 5 및 도 6 을 참조하여 기재된 애플리케이션 (406) 에 대응할 수 있다. 제 2 애플리케이션 (406b) 은 제 1 애플리케이션 (406a) 과 동일한 시스템 서비스를 호출할 수 있는 임의의 애플리케이션일 수 있다. 또한, 도 6 및 도 7 의 예들은 통신 신호들 (532a, 532b, 534a, 534b, 536a, 536b, 538a, 538b, 540a, 540b, 542a, 542b, 544a, 및 544b) 을 공유한다. 그러나, 도 7 에 예시된 예에서, 통신 신호들 (532a, 534a, 536a, 538a, 540a, 542a, 및 544a) 은 제 1 애플리케이션 (406a) 에 의해 시스템 서비스를 실행하기 위해 제 1 요청과 관련될 수 있고, 그리고 통신 신호들 (534b, 536b, 538b, 540b, 542b, 및 544b) 은 제 2 애플리케이션 (406b) 에 의해 시스템 서비스를 실행하기 위해 제 2 요청과 관련될 수 있다.
다양한 구현예들에서, 동일한 애플리케이션에 의해 동일한 시스템 서비스를 실행하기 위한 다수의 요청들과 같이, 요청 코디네이터 (412) 는 요청 애플리케이션이 동일하든지 상이하든지에 관계없이, 시스템 서비스를 실행하기 위한 연속 요청들에 요청된 시스템 서비스의 동일한 버전을 할당하는 것을 방지하도록 구성될 수 있다. 시스템 서비스를 실행하기 위한 요청이 상이한 애플리케이션들로부터 비롯되는 경우에도 시스템 서비스의 동일한 버전의 이용 회피는 ASLR을 무산시키기 위한 시도에서 다중 애플리케이션들을 사용하는 공격자로부터 시스템 서비스를 난독화하는 것을 도울 수 있다.
요청 코디네이터 (412) 는 시스템 서비스 (532b) 의 버전에 대한 제 2 요청을 제 2 애플리케이션 (406b) 의 제 2 애플리케이션 프로세스 (512b) 로부터 수신할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 등록 테이블 (506) 에서 요청된 서비스 시스템의 시스템 서비스 식별자와 상관된 바인더 레퍼런스들 중 하나를 랜덤하게 선택할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 요청된 시스템 서비스의 버전들의 모든 애플리케이션들 (406a, 406b) 에의 이전 할당들의 트랙을 유지할 수도 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 애플리케이션 (406a) 에 이전에 제공되지 않은 제 2 바인더 레퍼런스를 랜덤하게 선택할 수 있다. 요청 코디네이터 (412) 는 랜덤하게 선택된 제 2 바인더 레퍼런스를 제 2 애플리케이션 (406b) 으로 리턴할 수 있다.
제 2 애플리케이션 (406b) 은 요청된 시스템 서비스의 시스템 서비스 식별자와 상관된 랜덤하게 선택된 제 2 바인더 레퍼런스를 수신할 수 있고, 그리고 요청된 시스템 서비스 (534b) 를 호출하기 위해 제 2 바인더 레퍼런스를 사용할 수 있다. 제 2 서비스 관리자 프록시 (514b) 는 요청된 시스템 서비스의 버전에 액세스하여 요청된 시스템 서비스 (536b) 의 버전에 대한 호출을 제 2 바인더 레퍼런스에 제공하기 위해 커넬 공간 (516) 과 인터페이스할 수 있다. 바인더 드라이버 (518) 는, 제 2 바인더 레퍼런스와 상관된 요청된 시스템 서비스의 버전의 오브젝트의 가상 어드레스를 위치시키기 위해 제 2 바인더 레퍼런스를 사용하여, 요청된 시스템 서비스 (536b) 의 버전에 대한 호출을 수신할 수 있다. 바인더 드라이버 (518) 는 제 2 바인더 레퍼런스와 상관된 가상 어드레스로부터의 요청된 시스템 서비스의 버전의 데이터를 사용하여 요청된 시스템 서비스 (538b) 의 버전의 실행을 요청하기 위해 요청된 시스템 서비스의 버전에 대한 대응 시스템 서비스 프로세스 (508b) 와 통신할 수 있다.
대응 시스템 서비스 프로세스 (508b) 는, 시스템 서비스 프로세스 (508b) 에 의해 시스템 서비스의 지정 버전의 데이터를 사용하여 실행이 완료되면 요청된 시스템 서비스 (540b) 의 실행의 결과를 리턴할 수 있다. 바인더 드라이버 (518) 는 결과 (542b) 를 제 2 서비스 관리자 프록시 (514b) 로 포워딩할 수 있고, 서비스 관리자 프록시 (514b) 는 결과 (544b) 를 제 2 애플리케이션 프로세스 (512b) 로 포워딩할 수 있다.
도 8 은 시스템 서비스의 다수의 버전들을 실행하는 실시형태를 구현하는데 적합한 오브젝트 관리자를 갖는 시변하는 ASLR 시스템의 예를 예시한다. 도 8 에 도시된 예는 도 5 및 도 6 을 참조하여 상술한 예들과 유사하다. 모든 예들은 동일한 컴포넌트들을 공유하지만, 도 8 의 예는 애플리케이션 (406) 의 오브젝트 관리자 (800) 를 포함한다. 또한, 도 6 및 도 8 의 예들은 통신 신호들 (5536a, 536b, 538a, 538b, 540a, 540b, 542a, 및 542b) 를 공유한다.
애플리케이션 (406) 의 애플리케이션 프로세스 (512) 는 요청된 시스템 서비스의 시스템 서비스 식별자를 사용하여 시스템 서비스 (802a, 802b) 를 실행하기 위한 요청들을 전송할 수 있다. 오브젝트 관리자 (800) 는 시스템 서비스 (802a, 802b) 를 실행하기 위한 요청들을 수신할 수 있고, 그리고 시스템 서비스 식별자를 포함하는 시스템 서비스 (804a, 804b) 의 버전들에 대한 요청들을 전송할 수 있다. 오브젝트 관리자 (800) 는, 시스템 서비스 (802a, 802b) 을 실행하기 위한 요청들 중 하나를 수신하는 것에 개별적으로 응답하여 시스템 서비스 (804a, 804b) 의 버전에 대한 각 요청을 전송할 수 있다. 요청 코디네이터 (412) 는 시스템 서비스 (804a, 804b) 의 버전들에 대한 요청들을 수신할 수 있다.
시변하는 ASLR 콘텍스트 관리자 (504) 는 시스템 서비스 (804a, 804b) 의 버전들에 대한 요청들 중 하나에 응답하여 등록 테이블 (506) 에서 요청된 서비스 시스템의 시스템 서비스 식별자와 상관된 제 1 바인더 레퍼런스를 랜덤하게 선택할 수 있다. 도 5 를 참조하여 기재된 바와 같이, 시변하는 ASLR 콘텍스트 관리자 (504) 는 예를 들어 시스템 서비스 (804a) 를 실행하기 위한 제 1 요청에 대한 제 1 바인더 레퍼런스의 제 1 할당과 같이, 애플리케이션 (406) 에 대한 요청된 시스템 서비스의 버전들의 이전 할당들의 트랙을 유지할 수 있다. 시변하는 ASLR 콘텍스트 관리자 (504) 는 시스템 서비스 (804a, 804b) 의 버전들에 대한 요청들 중 다른 것에 응답하여 애플리케이션 (406) 에 이전에 제공되지 않은 제 2 바인더 레퍼런스를 랜덤하게 선택할 수 있다. 요청 코디네이터 (412) 는 랜덤하게 선택된 바인더 레퍼런스를 애플리케이션 (406) 으로 개별적으로 리턴할 수 있다.
오브젝트 관리자 (800) 는 랜덤하게 선택된 바인더 레퍼런스를 수신할 수 있고, 그리고 각각의 랜덤하게 선택된 바인더 레퍼런스에 의해 시스템 서비스 (806a, 806b) 를 실행하기 위한 요청들을 서비스 관리자 프록시 (514) 로 전송할 수 있다. 서비스 관리자 프록시 (514b) 는 요청된 시스템 서비스의 버전들에 액세스하여 요청된 시스템 서비스 (536a, 536b) 의 버전에 대한 호출들을 제 2 바인더 레퍼런스에 제공하기 위해 커넬 공간 (516) 과 인터페이스할 수 있다.
바인더 드라이버 (518) 는, 바인더 레퍼런스들과 상관된 요청된 시스템 서비스의 버전들의 오브젝트들의 가상 어드레스들을 위치시키기 위해 바인더 레퍼런스들을 사용하여, 요청된 시스템 서비스 (536a, 536b) 의 버전에 대한 호출들을 수신할 수 있다. 바인더 드라이버 (518) 는 요청된 시스템 서비스의 버전들에 대한 대응 시스템 서비스 프로세스들 (508a, 508b) 과 통신하여, 바인더 레퍼런스들과 상관된 가상 어드레스로부터의 요청된 시스템 서비스의 버전들의 데이터를 사용하여 요청된 시스템 서비스 (538a, 538b) 의 버전들의 실행을 요청할 수 있다.
대응 시스템 서비스 프로세스들 (508a, 508b) 은, 시스템 서비스 프로세스들 (508a, 508b) 에 의해 시스템 서비스의 지정 버전들의 데이터를 사용하여 실행들이 완료되면 요청된 시스템 서비스 (540a, 540b) 의 실행들의 결과들을 리턴할 수 있다. 바인더 드라이버 (518) 는 결과들 (542a, 542b) 을 서비스 관리자 프록시 (514) 로 포워딩할 수 있고, 서비스 관리자 프록시 (514) 는 결과들 (808a, 808b) 을 애플리케이션 관리자 (800) 로 포워딩할 수 있다. 오브젝트 관리자 (800) 는 결과들 (810a, 810b) 을 애플리케이션 프로세스 (512) 로 포워딩할 수 있다.
도 9 는 일 실시형태에 따라 시변하는 ASLR 을 구현하기 위한 방법 (900) 을 예시한다. 방법 (900) 은 컴퓨팅 디바이스에서 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14)) 에서 실행되는 소프트에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 프로세서와 전용 하드웨어의 조합에서, 예컨대 다른 개별 컴포넌트들을 포하하는 시변하는 ASLR 시스템 내에서 소프트웨어를 실행하는 프로세서에서 구현될 수도 있다. 다양한 실시형태에서 사용하게 될 대안의 구성들을 포괄하기 위해, 방법 (900) 을 구현하는 하드웨어는 본원에서 "컴퓨팅 디바이스"로 지칭된다.
블록 902 에서, 컴퓨팅 디바이스는 시스템 서비스를 론칭 또는 실행하기 위한 요청을 수신할 수 있다. 시스템 서비스를 론칭 또는 실행하기 위한 요청은 시스템 서비스의 시스템 서비스 식별자를 포함할 수 있다.
블록 902 에서 수신된 시스템 서비스를 론칭하기 요청은 컴퓨팅 디바이스에 의해 실행되는 부트 프로세스로부터 비롯될 수 있다. 시스템 서비스를 론칭하기 위한 요청은, 서비스가 시스템 서비스를 실행하기 위한 요청에 응답하여 이후 실행에 이용가능할 수 있도록 시스템 서비스를 론칭하기 위한 것일 수 있다. 다른 말로, 시스템 서비스를 론칭하기 위한 요청은 시스템 컴퓨팅 디바이스가 서비스를 실행하지 않고 시스템 서비스를 론칭하도록 프롬프트할 수 있다.
블록 902 에서 수신된 시스템 서비스를 실행하기 요청은 또한 컴퓨팅 디바이스에 의해 실행되는 애플리케이션으로부터 비롯될 수 있다. 시스템 서비스를 실행하기 위한 이러한 요청은, 시스템 서비스가 요청시 론칭되지 않으면 컴퓨팅 디바이스가 시스템 서비스를 론칭하도록 프롬프트할 수 있다.
결정 블록 904 에서, 컴퓨팅 디바이스는 요청된 시스템 서비스가 이미 론칭되어 있는지를 결정할 수 있다. 일부 구현예들에서, 컴퓨팅 디바이스는 시스템 서비스 식별자, 시스템 서비스 버전 식별자, 바이던 레퍼런스, 또는 시스템 서비스 식별자와 상관된 시스템 서비스의 버전의 오브젝트를 갖는 레코드가 존재하는지를 결정하기 위해 (예를 들어 도 5-8을 참조하여 기재된 등록 테이블 (506) 에서) 레코드들을 체크할 수 있다.
일부 구현예들에서, 컴퓨팅 디바이스의 동작 중 아무때나, 컴퓨팅 디바이스는 옵션 블록 918 에서 임의의 시스템 서비스에 대한 공격을 검출하거나 공격을 의심할 수 있다. 다양한 구현예들에서, 컴퓨팅 디바이스는 시스템 서비스에 대한 비정상적인 액세스 또는 요청 패턴들 및 요청자들을 인식함으로써 시스템 서비스에 대한 공격을 검출하거나 공격을 의심할 수 있다.
블록 918 에서 시스템 서비스에 대한 공격을 검출하거나 의심하는 것에 응답하여, 또는 요청된 시스템 서비스이 아직 론칭되지 않는다는 결정에 응답하여 (즉, 결정 블록 904 = "아니오"), 컴퓨팅 디바이스는 블록 906 에서 시스템 서비스의 다수 버전들을 론칭할 수 있다. 컴퓨팅 디바이스는 시스템 서비스의 임의의 수의 버전들들 론칭할 수 있다. 다양한 구현예들에서, 론칭되는 임의의 시스템 서비스의 버전들의 수는 다른 시스템 서비스의 버전들의 수와 같거나 다를 수 있다. 론칭된 시스템 서비스의 버전들의 수는, 시스템 서비스의 예상된 또는 측정된 사용, 시스템 서비스의 우선순위 또는 취약성, 컴퓨팅 디바이스의 상태 (메모리 공간 및 전력 가용성을 포함), 또는 시스템 서비스에 대한 공격의 검출 또는 의심을 포함한, 다수의 팩터들에 따라 사전프로그래밍되거나 또는 달라질 수 있다.
블록 908 에서, 컴퓨팅 디바이스는 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 오브젝트를 시스템 서비스의 각 버전에 할당할 수 있다. 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 오브젝트는 시스템 서비스의 버전을 고유하게 식별하는 기능을 할 수 있다.
블록 910 에서, 컴퓨팅 디바이스는 랜덤 가상 메모리 어드레스 공간 레이아웃을 시스템 서비스의 각 버전에 할당할 수 있다. 시스템 서비스의 각 버전의 랜덤 가상 메모리 어드레스 공간 레이아웃은, 시스템 서비스의 버전을 실행하기 위한 데이터가 저장되는, 물리적 메모리 위치들에 맵핑될 수 있다. 데이터는 스택들, 힙들, 데이터, 실행파일들, 함수 포인터들 또는 라이브러리 메모리 맵들 등을 포함할 수 있다. 일부 구현예들에서, 시스템 서비스의 각 버전의 랜덤 가상 메모리 어드레스 공간 레이아웃은 또한 시스템 서비스를 실행하기 위한 코드의 물리적 메모리 위치에 맵핑될 수 있다. 일부 구현예들에서, 데이터는 시스템 서비스를 실행하기 위한 코드의 물리적 메모리 위치에 대한 포인터들을 포함할 수 있다. 블록 910 에서 시스템 서비스의 각 버전의 랜덤 가상 메모리 어드레스 공간 레이아웃을 할당하기 위한 예시적인 방법 (1000) 은 도 10 을 참조하여 기재된다.
블록 912 에서, 컴퓨팅 디바이스는 시스템 서비스 식별자, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 시스템 서비스의 각 버전의 오브젝트와, 시스템 서비스의 각 버전의 랜덤 가상 메모리 어드레스를 상관시키고 저장할 수 있다. 일부 구현예들에서, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 시스템 서비스의 버전의 오브젝트는, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 시스템 서비스의 버전의 오브젝트를 시스템 서비스의 식별자와 상관시키는 방식으로 컴퓨팅 디바이스에 의해 레코딩될 수 있다. 예를 들어, 상관들의 레코드들은 도 5-도 8 을 참조하여 기재된 등록 테이블 (506) 의 일부일 수 있다. 일부 구현예들에서, 랜덤 가상 메모리 어드레스의 시스템 서비스의 버전에의 할당은, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 시스템 서비스의 버전의 오브젝트를 랜덤 가상 메모리 어드레스와 상관시키는 방식으로 컴퓨팅 디바이스에 의해 레코딩될 수 있다. 예를 들어, 상관들의 레코드들은 도 5-도 8 을 참조하여 기재된 맵핑 테이블 (520) 의 일부일 수 있다.
블록 912 에서 시스템 서비스, 시스템 서비스의 버전들, 및 시스템 서비스의 버전들의 랜덤 가상 어드레스의 모든 관계들을 상관 및 저장한 후, 또는 요청된 시스템 서비스가 이미 론칭되었고 결정하는 것에 응답하여 (즉, 결정 블록 904 = "예"), 컴퓨팅 디바이스는 블록 914 에서 시스템 서비스의 버전을 랜덤하게 선택할 수 있다. 랜덤 선택은 의사 랜덤 알고리즘을 사용하여 구현될 수 있다.
일부 구현예들에서, 블록 914 에서의 랜덤 선택은, 다양한 또는 단일의 애플리케이션에 의해, 시스템 서비스에 대한 요청들의 임계 수 또는 기간 내의 소정 횟수, 시스템 서비스의 동일한 버전의 선택에 응답하여 다수회 실행될 수 있다.
일부 구현예들에서, 블록 914 에서의 랜덤 선택은 현재 사용되고 있거나 또는 최신 사용되었던 시스템 서비스의 버전들을 제외하고 시스템 서비스의 버전들의 세트로부터의 선택을 포함할 수 있다. 최근 사용은 다양한 또는 단일의 애플리케이션에 의해, 기간 내의 시스템 서비스의 버전의 사용 또는 시스템 서비스에 대한 요청들의 임계 수 내의 시스템 서비스의 버전의 사용에 의해 결정될 수도 있다.
블록 916 에서, 컴퓨팅 디바이스는 요청자에게 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 시스템 서비스의 랜덤하게 선택된 버전의 오브젝트를 제공할 수 있다.
도 10 은 일 실시형태에 따른 시변하는 ASLR 에서의 시스템 서비스의 버전들에 대한 가상 메모리 어드레스 공간 레이아웃의 랜덤 할당을 구현하기 위한 예시적인 방법 (1000) 을 예시한다. 방법 (1000) 은 컴퓨팅 디바이스에서 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14)) 에서 실행되는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 프로세서와 전용 하드웨어의 조합에서, 예컨대 다른 개별 컴포넌트들을 포함하는 시변하는 ASLR 시스템 내에서 소프트웨어를 실행하는 프로세서에서 구현될 수도 있다. 다양한 실시형태들에서 사용되는 대안의 구성들을 포괄하기 위해, 방법 (1000) 을 구현하는 하드웨어는 본원에서 "컴퓨팅 디바이스"로 지칭된다.
블록 1002 에서, 컴퓨팅 디바이스는 동일한 프로세스 그룹 식별자 (ID) 를 시스템 서비스의 각 버전에 할당할 수 있다.
블록 1004 에서, 컴퓨팅 디바이스는 물리적 메모리 내의 위치 (물리적 어드레스) 에서 시스템 서비스의 버전을 저장할 수 있다. 일부 구현예들에서, 특정 메모리 디바이스들, 또는 메모리 디바이스들의 파티션들은 시스템 서비스들의 버전들을 저장하기 위해 지정될 수 있다. 컴퓨팅 디바이스는 다양한 메모리 교체 정책들에 따라 물리적 메모리 내의 위치에 저장된 현재 데이터를 오버라이팅함으로써 물리적 메모리 내의 미사용 위치에, 또는 물리적 메모리 내의 사용 위치에 시스템 서비스의 버전을 저장할 수 있다.
블록 1006 에서, 컴퓨팅 디바이스는 시스템 서비스의 버전에 대한 가상 어드레스 공간 레이아웃을 랜덤하게 선택할 수 있다. 일부 구현예들에서, 컴퓨팅 디바이스는 가상 어드레스 공간 레이아웃을 선택하기 위한 의사 선택 알고리즘을 구현할 수 있다. 일부 구현예들에서, 다른 목적들을 위해 사용되는 가상 어드레스들 (예를 들어, 동일하거나 또는 다른 시스템 서비스들의 다른 버전들에 할당된 가상 어드레스 공간 레이아웃들의 가상 어드레스들) 은 시스템 서비스의 버전을 위한 가상 어드레스 공간 레이아웃을 랜덤하게 선택하는데 사용된 일 세트의 가상 어드레스들로부터 제외될 수 있다.
옵션의 결정 블록 1008 에서, 컴퓨팅 디바이스는 랜덤하게 선택된 가상 어드레스 공간 레이아웃이 이용가능한지를 결정할 수 있다. 일부 구현예들에서, 컴퓨팅 디바이스는 랜덤하게 선택된 가상 어드레스 공간 레이아웃이 이미 다른 목적을 위해 사용중인지를 결정하기 위해 다른 사용된 가상 어드레스들과 랜덤하게 선택된 가상 어드레스 공간 레이아웃을 비교할 수 있다.
랜덤하게 선택된 가상 어드레스 공간 레이아웃이 이용가능하지 않다고 결정하는 것에 응답하여 (즉, 옵션의 결정 블록 1008 = "아니오"), 블록 1006 에서 컴퓨팅 디바이스는 시스템 서비스의 버전에 대한 가상 어드레스 공간 레이아웃을 랜덤하게 선택할 수 있다.
랜덤하게 선택된 가상 어드레스 공간 레이아웃이 이용가능하다고 결정하는 것에 응답하여 (즉, 옵션의 결정 블록 1008 = "예"), 블록 1010 에서 컴퓨팅 디바이스는 시스템 서비스가 저장되는 물리적 어드레스에 시스템 서비스의 버전에 대한 랜덤하게 선택된 가상 어드레스 공간 레이아웃을 맵핑할 수 있다.
결정 블록 1012 에서, 컴퓨팅 디바이스는 시스템 서비스의 보다 많은 버전들이 물리적 메모리에서 저장되고 랜덤 가상 어드레스 공간 레이아웃에 할당된 상태를 유지하는지를 결정할 수 있다. 컴퓨팅 디바이스는 시스템 서비스의 보다 많은 버전들이 남아있는지를 결정하기 위해 동일한 시스템 서비스의 버전들에 공통인 프로세스 그룹 식별자를 사용할 수 있다. 동일한 프로세스 그룹 식별자를 갖는 버전이 랜덤 가상 어드레스 공간 레이아웃의 저장 및 할당을 위해 큐에 남아있는 경우, 컴퓨팅 디바이스는 남아있는 시스템 서비스의 버전들이 있음을 인지할 수 있다.
시스템 서비스의 보다 많은 버전들이 물리적 메모리에서 저장되고 랜덤 가상 어드레스 공간 레이아웃에 할당된 상태를 유지한다고 결정하는 것에 응답하여 (즉, 결정 블록 1012 = "예"), 컴퓨팅 디바이스는 블록 1014 에서 동일한 프로세서 식별자로 시스템 서비스의 비저장된 버전을 선택할 수 있고, 블록 1004 에서 물리적 메모리 내의 위치에 시스템 서비스의 버전을 저장할 수 있고, 그리고 기재된 바와 같이 블록 1006 에서 시스템 서비스의 버전에 대한 가상 어드레스 공간 레이아웃을 랜덤하게 선택할 수 있다.
일부 구현예들에서, 컴퓨팅 시스템 서비스의 모든 버전들이 이미 메모리에 저장될 수 있다. 그래서, 시스템 서비스의 보다 많은 버전들이 물리적 메모리에서 저장되고 랜덤 가상 어드레스 공간 레이아웃에 할당된 상태를 유지하지 않는다고 결정하는 것에 응답하여 (즉, 결정 블록 1012 = "아니오"), 컴퓨팅 디바이스는 도 9를 참조하여 기재된 바와 같이 방법 (900) 의 블록 912에서 시스템 서비스 식별자, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 시스템 서비스의 각 버전의 오브젝트와, 시스템 서비스의 각 버전의 가상 메모리 어드레스 공간 레이아웃을 상관시키고 저장할 수 있다. 다양한 실시형태들에서, 블록 912 의 동작들은 결정 블록 1012 의 결과와 상관없이 실행될 수 있고, 그리고 방법 (1000) 의 다양한 블록들 (1002-1014) 의 동작과 동시에 실행될 수 있다.
도 11 은 일 실시형태에 따른 시변하는 ASLR 을 사용하여 시스템 서비스를 구현하기 위한 방법 (1100) 을 예시한다. 방법 (1100) 은 컴퓨팅 디바이스에서 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14)) 에서 실행되는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 프로세서와 전용 하드웨어의 조합에서, 예컨대 다른 개별 컴포넌트들을 포함하는 시변하는 ASLR 시스템 내에서 소프트웨어를 실행하는 프로세서에서 구현될 수도 있다. 다양한 실시형태들에서 사용되는 대안의 구성들을 포괄하기 위해, 방법 (1100) 을 구현하는 하드웨어는 본원에서 "컴퓨팅 디바이스"로 지칭된다.
방법 (1100) 은 도 9 를 참조하여 기재된 방법 (900) 의 구현의 연속일 수 있으며, 여기서 시스템 서비스의 요청자는 애플리케이션이다. 블록 1102 에서, 컴퓨팅 디바이스는 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 스템 서비스의 버전에 대한 오브젝트를 포함하여, 시스템 서비스의 버전에 대한 요청을 애플리케이션으로부터 수신할 수 있다.
블록 1104 에서, 컴퓨팅 디바이스는 시스템 서비스의 버전의 랜덤하게 선택된 가상 어드레스 공간 레이아웃의 시작 가상 어드레스와 같이, 시스템 서비스의 버전의 가상 어드레스를 위치시킬 수 있다. 다양한 구현예들에서, 컴퓨팅 디바이스는, 시스템 서비스 버전 식별자, 바인더 레퍼런스, 또는 시스템 서비스의 오브젝트를 가상 어드레스와 상관시키는 레코드를 구하기 위해 시스템 서비스 버전 식별자, 바인더 레퍼런스, 시스템 서비스의 버전의 오브젝트를 사용할 수 있다. 예를 들어, 컴퓨팅 디바이스는 도 5-도 8 을 참조하여 기재된 맵핑 테이블 (520) 의 레코드들을 탐색할 수 있다.
블록 1106 에서, 컴퓨팅 디바이스는 시스템 서비스의 버전의 가상 어드레스를 시스템 서비스의 버전의 데이터가 저장되는 물리적 메모리 내의 위치의 물리적 어드레스로 변환할 수 있다. 이 동작에서, 컴퓨팅 디바이스는 도 10 을 참조하여 본원에 기재된 바와 같이 블록 1010 에서 시스템 서비스의 버전에 대해 생성된 물리적 어드레스 맵핑에 가상 어드레스를 사용할 수 있다.
블록 1108 에서, 컴퓨팅 디바이스는 물리적 어드레스로부터의 실행을 위해 사용되는 시스템 서비스의 버전의 데이터를 검색할 수 있다.
블록 1110 에서, 컴퓨팅 디바이스는 시스템 서비스를 실행하기 위해 검색된 데이터를 이용할 수 있다. 컴퓨팅 디바이스는 데이터를 사용하여 시스템 서비스를 실행하기 위한 변수들, 조건들 및 코드 주입들 또는 교체들을 제공할 수 있다.
블록 1112 에서, 컴퓨팅 디바이스는 시스템 서비스의 실행의 결과를 애플리케이션으로 리턴할 수 있다.
도 12 는 일 실시형태에 따른 동적 코드 생성과 시변하는 ASLR 을 사용하여 시스템 서비스 실행을 구현하기 위한 방법 (1200) 을 예시한다. 방법 (1200) 은 컴퓨팅 디바이스에서 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14)) 에서 실행되는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 프로세서와 전용 하드웨어의 조합에서, 예컨대 다른 개별 컴포넌트들을 포함하는 시변하는 ASLR 시스템 내에서 소프트웨어를 실행하는 프로세서에서 구현될 수도 있다. 다양한 실시형태들에서 사용되는 대안의 구성들을 포괄하기 위해, 방법 (1200) 을 구현하는 하드웨어는 본원에서 "컴퓨팅 디바이스"로 지칭된다.
다양한 구현예들에서, 시스템 서비스의 이전 실행은, 시스템 서비스의 후속 실행에 사용될 수 있고 시스템의 서비스의 실행 효율을 향상시킬 수 있는, 동적으로 생성된 코드를 초래할 수 있다. 블록 1202 에서, 컴퓨팅 디바이스는 시스템 서비스의 버전으로부터 동적으로 생성된 코드에 대한 코드 버퍼 공간을 할당하라는 요청을 수신할 수 있다. 시스템 서비스의 상이한 버전들은 시스템 서비스 버전의 후속 실행들에서 사용될 수 있는, 동적으로 생성된 다른 코드를 생성할 수 있다.
블록 1204 에서, 컴퓨팅 디바이스는 동적으로 생성된 코드를 저장하기 위해 텅빈 코드 버퍼 공간을 탐색하는 코드 버퍼를 트래버스할 수 있다. 다양한 구현예들에서, 컴퓨팅 디바이스는 코드 버퍼의 어드레스들을 랜덤하게 선택하는 것을 포함하여, 다양한 알고리즘들 및 패턴들을 사용하여 코드 버퍼를 트래버스할 수 있다. 컴퓨팅 디바이스는, 동적으로 생성된 코드를 저장하는데 이용가능하고 충분히 큰 코드 버퍼 공간과 어드레스가 연관되는지를 체크하기 위해 코드 버퍼의 어드레스를 선택할 수 있다. 동적으로 생성된 코드를 저장하는데 충분히 큰 코드 버퍼 공간은 선택된 어드레스를 포함하고 적어도 동적으로 생성된 코드의 크기인 임의의 코드 버퍼 공간일 수 있다.
결정 블록 1206 에서, 컴퓨팅 디바이스는, 선택된 코드 버퍼 어드레스와 연관된 코드 버퍼 공간이 시스템 서비스의 버전으로부터 동적으로 생성된 코드에 대해 사용가능한지를 결정할 수 있다. 다양한 구현예들에서, 식별된 코드 버퍼 공간이 사용가능한지를 결정하는 것은, 코드 버퍼 공간이 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 것을 포함할 수 있다. 컴퓨팅 디바이스는, 코드 버퍼 공간을 리스트, 또는 하나의 데이터를 다른 데이터와 연결하도록 구성된 다른 데이터 구조와 비교함으로써, 시스템 서비스 버전 식별자들, 바인더 레퍼런스들, 시스템 서비스들의 버전들의 오브젝트들을 코드 버퍼 메모리 어드레스들과 상관시킴으로써, 식별 코드 버퍼 공간이 사용 가능하고 충분히 큰지를 결정할 수 있다. 예를 들어, 컴퓨팅 디바이스는 도 4b 를 참조하여 기재된 바와 같이 코드 버퍼 공간을 리스트 (422) 의 레코드들과 비교할 수 있다. 사용 가능하고 충분히 큰 코드 버퍼 공간은, 코드 버퍼 공간의 어떠한 어드레스들도 다른 동적으로 생성된 코드와 상관된 리스트에서 코드 버퍼 어드레스들과 충돌하지 않는 것일 수 있다.
선택된 코드 버퍼 어드레스와 연관된 코드 버퍼 공간이 시스템 서비스의 버전으로부터 동적으로 생성된 코드에 대해 사용가능하다고 결정하는 것에 응답하여 (즉, 결정 블록 1206 = "예"), 컴퓨팅 디바이스는 블록 1208 에서 식별된 코드 버퍼 어드레스에서의 코드 버퍼에 시스템 서비스의 버전으로부터의 동적으로 생성된 코드를 저장할 수 있다.
결정 블록 1210 에서, 컴퓨팅 디바이스는, 시스템 서비스의 버전으로부터 저장된 동적으로 생성된 코드의 코드 버퍼 어드레스들이 이용불가능하거나 또는 사용되는 것을 나타내기 위해, 리스트, 또는 하나의 데이터를 다른 데이터와 연결하도록 구성된 다른 데이터 구조를 업데이트할 수 있다.
시스템 서비스의 버전과 상관된 선택된 코드 버퍼 공간이 시스템 서비스의 버전으로부터 동적으로 생성된 코드에 사용할 수 없다고 결정하는 것에 응답하여 (즉, 결정 블록 1206 = "아니오"), 컴퓨팅 디바이스는 블록 1212 에서 코드 버퍼가 트래버스되는지를 결정할 수 있다. 다양한 실시형태들에서, 코드 버퍼를 트래버스하기 위해서, 컴퓨팅 디바이스는 동적으로 생성된 코드를 저장하는데 이용 가능하고 충분히 큰 코드 버퍼 공간에 대한 코드 버퍼 어드레스마다 체크할 수 있다. 다양한 실시형태들에서, 코드 버퍼를 트래버스하기 위해서, 컴퓨팅 디바이스는 남아있는 코드 버퍼 어드레스들이 동적으로 생성된 코드를 저장하는데 충분한 공간을 갖는 코드 버퍼 공간들과 상관될 수 없다고 코드 버퍼 어드레스들에 대해 충분히 체크할 수 있다.
코드 버퍼가 트래버스되지 않는다고 결정하는 것에 응답하여 (즉, 결정 블록 1212 = "아니오"), 컴퓨팅 디바이스는 블록 1204 에서 동적으로 생성된 코드를 저장하기 위해 텅빈 코드 버퍼 공간을 탐색하는 코드 버퍼를 계속 트래버스할 수 있다.
코드 버퍼가 트래버스된다고 결정하는 것에 응답하여 (즉, 결정 블록 1212 = "예"), 컴퓨팅 디바이스는 블록 1214 에서 시스템 서비스의 버전으로부터 동적으로 생성된 코드를 폐기하거나 또는 다른 메모리에 저장할 수 있다.
다양한 실시형태들 (도 1 내지 도 12 를 참조하여 상기 설명된 실시형태들을 포함하지만, 이들에 제한되지는 않음) 은 매우 다양한 컴퓨팅 디바이스들에서 구현될 수 있으며, 다양한 실시형태들에 의한 이용에 적합한 모바일 컴퓨팅 디바이스의 예는 도 13 에서 예시되어 있다. 모바일 컴퓨팅 디바이스 (1300) 는 터치스크린 제어기 (1304) 및 내부 메모리 (1306) 에 커플링된 프로세서 (1302) 를 포함할 수도 있다. 프로세서 (1302) 는 일반적인 또는 특정 프로세싱 태스크들을 위해 지정된 하나 이상의 멀티코어 집적 회로들일 수도 있다. 내부 메모리 (1306) 는 휘발성 또는 비휘발성 메모리일 수도 있고, 또한 보안 및/또는 암호화된 메모리, 또는 비보안 및/또는 비암호화된 메모리, 또는 그 임의의 조합일 수도 있다. 레버리징될 수 있는 메모리 타입들의 예들은 DDR, LPDDR, GDDR, WIDEIO, RAM, SRAM, DRAM, P-RAM, R-RAM, M-RAM, STT-RAM, 및 임베디드 DRAM 을 포함하지만 이들에 제한되지는 않는다. 터치스크린 제어기 (1304) 및 프로세서 (1302) 는 또한 터치스크린 패널 (1312), 이를 테면 저항-센싱 터치스크린, 용량-센싱 터치스크린, 적외선 센싱 터치스크린 등에 커플링될 수도 있다. 추가적으로, 컴퓨팅 디바이스 (1300) 의 디스플레이는 터치 스크린 능력을 가질 필요가 없다.
모바일 컴퓨팅 디바이스 (1300) 는 하나 이상의 무선 신호 트랜시버들 (1308) (예를 들어, Peanut, Bluetooth, Zigbee, Wi-Fi, RF 라디오) 및 서로에 및/또는 프로세서 (1302) 에 커플링된, 통신물들을 전송 및 수신하기 위한, 안테나 (1310) 를 가질 수도 있다. 트랜시버들 (1308) 및 안테나 (1310) 는 다양한 무선 송신 프로토콜 스택들 및 인터페이스들을 구현하기 위해 상기 언급된 회로부와 함께 이용될 수도 있다. 모바일 컴퓨팅 디바이스 (1300) 는 셀룰러 네트워크를 통한 통신을 가능하게 하고 프로세서에 커플링되는 셀룰러 네트워크 무선 모뎀 칩 (1316) 을 포함할 수도 있다.
모바일 컴퓨팅 디바이스 (1300) 는 프로세서 (1302) 에 커플링된 주변 디바이스 접속 인터페이스 (1318) 를 포함할 수도 있다. 주변 디바이스 접속 인터페이스 (1318) 는 하나의 타입의 접속을 수락하도록 단독으로 구성될 수도 있거나, 또는 범용 직렬 버스 (USB), FireWire, Thunderbolt, 또는 PCIe 와 같은, 공통 또는 독점적인, 다양한 타입들의 물리 및 통신 접속들을 수락하도록 구성될 수도 있다. 주변 디바이스 접속 인터페이스 (1318) 는 또한 유사하게 구성된 주변 디바이스 접속 포트 (미도시) 에 커플링될 수도 있다.
모바일 컴퓨팅 디바이스 (1300) 는 또한 오디오 출력들을 제공하기 위한 스피커 (1314) 를 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1300) 는 또한, 본 명세서에서 설명된 컴포넌트들의 전부 또는 일부를 포함하기 위해, 플라스틱, 금속, 또는 재료들의 조합으로 구성된, 하우징 (1320) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1300) 는 일회용 또는 재충전가능한 배터리와 같은, 프로세서 (1302) 에 커플링된 전력 소스 (power source) (1322) 를 포함할 수도 있다. 재충전가능한 배터리는 또한 모바일 컴퓨팅 디바이스 (1300) 의 외부의 소스로부터 충전 전류를 수신하기 위해 주변 디바이스 접속 포트에 커플링될 수도 있다. 모바일 컴퓨팅 디바이스 (1300) 는 또한 사용자 입력들을 수신하기 위한 물리적 버튼 (1324) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1300) 는 또한 모바일 컴퓨팅 디바이스 (1300) 를 턴 온 및 턴 오프하기 위한 전력 버튼 (1326) 을 포함할 수도 있다.
다양한 실시형태들 (도 1 내지 도 12 를 참조하여 상기 설명된 실시형태들을 포함하지만 이들에 제한되지는 않음) 은 도 14 에 그 예가 예시된 랩톱 컴퓨터 (1400) 와 같은 다양한 모바일 컴퓨팅 디바이스들을 포함할 수도 있는, 매우 다양한 컴퓨팅 시스템들에서 구현될 수도 있다. 많은 랩톱 컴퓨터들은 컴퓨터의 포인팅 디바이스로서 기능하고, 따라서 상기 설명되고 터치 스크린 디스플레이를 갖춘 컴퓨팅 디바이스들 상에서 구현된 것들과 유사한 드래그, 스크롤, 및 플릭 제스처들을 수신할 수도 있는 터치패드 터치 표면 (1417) 을 포함한다. 랩톱 컴퓨터 (1400) 는 통상적으로 휘발성 메모리 (1412) 및 대용량 비휘발성 메모리, 이를 테면 플래시 메모리의 디스크 드라이브 (1413) 에 커플링된 프로세서 (1411) 를 포함할 것이다. 추가적으로, 컴퓨터 (1400) 는 무선 데이터 링크에 접속될 수도 있는 전자기 방사선을 전송 및 수신하기 위한 하나 이상의 안테나 (1408) 및/또는 프로세서 (1411) 에 커플링된 셀룰러 전화기 트랜시버 (1416) 를 가질 수도 있다. 컴퓨터 (1400) 는 또한 프로세서 (1411) 에 커플링된 플로피 디스크 드라이브 (1414) 및 콤팩트 디스크 (CD) 드라이브 (1415) 를 포함할 수도 있다. 노트북 구성에서, 컴퓨터 하우징은 모두가 프로세서 (1411) 에 커플링되는 터치패드 (1417), 키보드 (1418), 및 디스플레이 (1419) 를 포함한다. 컴퓨팅 디바이스의 다른 구성들은 잘 알려진 바와 같이 프로세서에 (예를 들어, USB 입력을 통해) 커플링된 컴퓨터 마우스 또는 트랙볼을 포함할 수도 있으며, 이는 또한 다양한 실시형태들과 함께 이용될 수도 있다.
다양한 실시형태들 (도 1 내지 도 12 를 참조하여 상기 설명된 실시형태들을 포함하지만 이들에 제한되지는 않음) 은 또한 다양한 상업적으로 입수가능한 서버들 중 임의의 것과 같은 고정식 컴퓨팅 디바이스들에서 구현될 수도 있다. 일 예의 서버 (1500) 가 도 15 에 예시된다. 이러한 서버 (1500) 는 통상적으로 휘발성 메모리 (1502) 및 디스크 드라이브 (1504) 와 같은 대용량 비휘발성 메모리에 커플링된 하나 이상의 멀티-코어 프로세서 어셈블리들 (1501) 을 포함한다. 도 15 에 예시한 바와 같이, 멀티-코어 프로세서 어셈블리들 (1501) 은 그들을 어셈블리의 랙들에 삽입함으로써 서버 (1500) 에 부가될 수도 있다. 서버 (1500) 는 또한, 프로세서 (1501) 에 커플링된 플로피 디스크 드라이브, 콤팩트 디스크 (CD) 또는 디지털 다기능 디스크 (DVD) 디스크 드라이브 (1506) 를 포함할 수도 있다. 서버 (1500) 는 또한, 다른 브로드캐스트 시스템 컴퓨터들 및 서버들에 커플링된 로컬 영역 네트워크, 인터넷, 공중 교환 전화 네트워크, 및/또는 셀룰러 데이터 네트워크 (예를 들어, CDMA, TDMA, GSM, PCS, 3G, 4G, LTE, 또는 임의의 다른 타입의 셀룰러 데이터 네트워크) 와 같은, 네트워크 (1505) 와 네트워크 인터페이스 접속들을 확립하기 위해 멀티-코어 프로세서 어셈블리들 (1501) 에 커플링된 네트워크 액세스 포트들 (1503) 을 포함할 수도 있다.
다양한 실시형태들의 동작들을 수행하기 위한 프로그래밍가능 프로세서 상에서의 실행을 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드" 는 C, C++, C#, Smalltalk, Java, JavaScript, Visual Basic, 구조화 질의 언어 (예를 들어, Transact-SQL), Perl 과 같은 하이 레벨 프로그래밍 언어로, 또는 다양한 다른 프로그래밍 언어들로 기록될 수도 있다. 본 출원에서 사용되는 바와 같은 컴퓨터 판독가능 저장 매체 상에 저장된 프로그램 코드 또는 프로그램들은 포맷이 프로세서에 의해 이해가능한 머신 언어 코드 (이를 테면 오브젝트 코드) 를 지칭할 수도 있다.
전술한 방법 설명들 및 프로세스 플로우 다이어그램들은 예시적인 예들로서 단순히 제공될 뿐이며 다양한 실시형태들의 동작들이 제시된 순서로 수행되어야 한다는 것을 요구하거나 또는 의미하도록 의도되지 않는다. 당업자에 의해 인식될 바와 같이, 전술한 실시형태들에서의 동작들의 순서는 임의의 순서로 수행될 수도 있다. "그 후에", "그 후", "다음에" 등과 같은 단어들은 동작들의 순서를 제한하도록 의도되지 않는다; 이들 단어들은 방법들의 설명을 통하여 독자를 안내하는데 단순히 사용된다. 게다가, 관사들 "a", "an" 또는 "the" 를 이용한, 단수로의 청구항 엘리먼트들에 대한 어떤 언급도 그 엘리먼트를 단수로 제한하는 것으로서 해석되지 않는다.
다양한 실시형태들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 동작들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 양자의 조합들로서 구현될 수도 있다. 하드웨어와 소프트웨어의 이 상호교환가능성을 명확히 예시하기 위해, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들, 및 동작들은 일반적으로 그들의 기능성의 관점에서 상기 설명되었다. 이러한 기능성이 하드웨어로서 구현되는지 소프트웨어로서 구현되는지는 전체 시스템에 부과된 설계 제약들 및 특정한 애플리케이션에 의존한다. 당업자들은 각각의 특정한 애플리케이션에 대해 다양한 방식들로 설명된 기능성을 구현할 수도 있지만, 이러한 구현 판정들은 청구항들의 범위로부터 벗어남을 야기하는 것으로 해석되어서는 안된다.
본 명세서에서 개시된 실시형태들과 관련하여 설명된 다양한 예시적인 로직들, 논리 블록들, 모듈들, 및 회로들을 구현하는데 이용되는 하드웨어는 범용 프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA) 또는 다른 프로그래밍가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본 명세서에서 설명된 기능들을 수행하도록 설계된 그 임의의 조합으로 구현 또는 수행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 대안으로, 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로제어기, 또는 상태 머신일 수도 있다. 프로세서는 또한 컴퓨팅 디바이스들의 조합, 예를 들어, DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 이상의 마이크로프로세서들, 또는 임의의 다른 이러한 구성으로서 구현될 수도 있다. 대안적으로, 일부 동작들 또는 방법들은 주어진 기능에 특정적인 회로부에 의해 수행될 수도 있다.
하나 이상의 실시형태들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 그 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되면, 기능들은 비일시적 컴퓨터 판독가능 매체 또는 비일시적 프로세서 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 본 명세서에서 개시된 방법 또는 알고리즘의 동작들은 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체 상에 상주할 수도 있는 프로세서 실행가능 소프트웨어 모듈로 구현될 수도 있다. 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체들은 컴퓨터 또는 프로세서에 의해 액세스될 수도 있는 임의의 저장 매체들일 수도 있다. 제한이 아닌 일 예로, 이러한 비일시적 컴퓨터 판독가능 또는 프로세서 판독가능 매체들은 RAM, ROM, EEPROM, FLASH 메모리, CD-ROM 또는 다른 광 디스크 스토리지, 자기 디스크 스토리지 또는 다른 자기 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는데 이용될 수도 있거나 또는 컴퓨터에 의해 액세스될 수도 있는 임의의 다른 매체를 포함할 수도 있다. 디스크 (disk) 및 디스크 (disc) 는 본 명세서에서 사용한 바와 같이, 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크, 및 블루-레이 디스크를 포함하고, 여기서 디스크 (disk) 들은 보통 데이터를 자기적으로 재생하는 한편, 디스크 (disc) 들은 레이저들로 데이터를 광학적으로 재생한다. 상기의 조합들이 또한 비일시적 컴퓨터 판독가능 및 프로세서 판독가능 매체들의 범위 내에 포함된다. 추가적으로, 방법 또는 알고리즘의 동작들은, 컴퓨터 프로그램 제품에 통합될 수도 있는, 비일시적 프로세서 판독가능 매체 및/또는 컴퓨터 판독가능 매체 상에 코드들 및/또는 명령들 중 하나 또는 임의의 조합 또는 세트로서 상주할 수도 있다.
개시된 실시형태들의 전술한 설명은 임의의 당업자가 청구항들을 제조 또는 이용하는 것을 가능하게 하기 위해 제공된다. 이들 실시형태들에 대한 다양한 변경들은 당업자들에게 용이하게 명백할 것이며, 본 명세서에서 정의된 일반적인 원리들은 청구항들의 범위로부터 벗어남 없이 다른 실시형태들 및 구현예들에 적용될 수도 있다. 따라서, 본 개시는 본 명세서에서 설명된 실시형태들 및 구현예들에 제한되는 것으로 의도되지 않고 다음의 청구항들 및 본 명세서에서 개시된 원리들 및 신규한 피처들에 부합하는 최광의 범위를 부여받게 하려는 것이다.

Claims (36)

  1. 컴퓨팅 디바이스 상에서의 시변하는 어드레스 공간 레이아웃 랜덤화 방법으로서,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 단계;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 단계;
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신하는 단계;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 단계; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 단계를 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  2. 제 1 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 상기 제 1 애플리케이션으로부터 수신하는 단계;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 단계; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  3. 제 1 항에 있어서,
    시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 단계로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자는 상이한, 상기 할당하는 단계;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 단계;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자와 상기 시스템 서비스 식별자의 상관들을 저장하는 단계;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와 상관시키는 단계; 및
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자의, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와의 상관들을 저장하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  4. 제 3 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 상기 제 1 요청은 상기 시스템 서비스 식별자를 포함하고;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 단계는 상기 시스템 서비스의 상기 제 1 버전을 상기 시스템 서비스의 식별자와 상관된 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 단계를 포함하고;
    상기 방법은:
    상기 시스템 서비스의 상기 제 1 버전의 제 1 시스템 서비스 버전 식별자를 상기 제 1 애플리케이션에 제공하는 단계; 및
    상기 제 1 시스템 서비스 버전 식별자를 갖는 상기 시스템 서비스의 상기 제 1 버전을 실행하기 위한 요청을 상기 제 1 애플리케이션으로부터 수신하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  5. 제 4 항에 있어서,
    상기 제 1 시스템 서비스 버전 식별자와 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스 공간 레이아웃 사이의 상관을 사용하여 상기 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 위치시키는 단계;
    상기 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스를 상기 시스템 서비스의 상기 제 1 버전의 데이터가 저장되는 물리적 어드레스로 변환하는 단계; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 검색하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  6. 제 3 항에 있어서,
    프로세스 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 단계를 더 포함하고,
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 프로세스 식별자는 동일하고, 그리고
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 단계, 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 단계, 및 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 단계는 상기 프로세스 식별자를 할당한 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대해 발생하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  7. 제 1 항에 있어서,
    상기 시스템 서비스의 상기 제 1 버전의 실행의 동적으로 생성된 코드에 코드 버퍼 공간을 할당하기 위한 요청을 수신하는 단계;
    코드 버퍼 어드레스를 랜덤하게 선택하는 단계;
    상기 코드 버퍼 어드레스와 상관된 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 단계; 및
    상기 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크다고 결정하는 것에 응답하여 상기 코드 버퍼 어드레스에 상기 동적으로 생성된 코드를 저장하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  8. 제 1 항에 있어서,
    제 2 애플리케이션으로부터 상기 시스템 서비스를 실행하기 위한 제 2 요청을 수신하는 단계;
    상기 제 2 애플리케이션으로부터 상기 시스템 서비스를 실행하기 위한 상기 제 2 요청이 상기 시스템 서비스 상에서의 공격이라고 검출하는 단계;
    상기 시스템 서비스의 제 2 복수의 버전들을 론칭하는 단계;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각에 할당하는 단계로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃 및 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃은 상이한, 상기 할당하는 단계;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들 및 상기 시스템 서비스의 상기 제 2 복수의 버전들로부터 랜덤하게 선택하는 단계; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  9. 제 1 항에 있어서,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 단계는 상이한 명령 세트 아키텍처들을 갖는 복수의 이종의 프로세서 코어들 중 하나의 코어 상에 상기 시스템 서비스의 상기 제 1 복수의 버전들의 상기 시스템 서비스의 다중 버전들 각각을 론칭하는 단계를 포함하고;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 단계는 상기 시스템 서비스의 상기 제 1 버전이 론칭되는 복수의 이종의 프로세서 코어들의 제 1 이종의 프로세서 코어를 랜덤하게 선택하는 단계를 포함하고;
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 단계는 상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스를 실행하는 단계를 포함하고; 그리고
    상기 방법은:
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 상기 제 1 애플리케이션으로부터 상기 제 1 이종의 프로세서 코어로 전달하는 단계;
    상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스의 실행의 출력을 수신하는 단계; 및
    상기 출력을 상기 제 1 애플리케이션으로 리턴하는 단계를 더 포함하는, 시변하는 어드레스 공간 레이아웃 랜덤화 방법.
  10. 컴퓨팅 디바이스로서,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 것을 포함하는 동작들을 수행하도록 구성된 론처;
    상기 론처에 통신가능하게 연결되고, 그리고 랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것을 포함하는 동작들을 수행하도록 구성된 맵퍼;
    상기 론처에 통신가능하게 연결되고, 그리고
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신하는 것;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것
    을 포함하는 동작들을 수행하도록 구성된 요청 코디네이터; 및
    상기 요청 코디네이터에 통신가능하게 연결되고, 그리고 상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는 프로세서를 포함하는, 컴퓨팅 디바이스.
  11. 제 10 항에 있어서,
    상기 요청 코디네이터는,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 상기 제 1 애플리케이션으로부터 수신하는 것; 및
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것
    을 더 포함하는 동작들을 수행하도록 구성되고, 그리고
    상기 프로세서는 상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 더 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  12. 제 10 항에 있어서,
    상기 론처는 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것을 더 포함하는 동작들을 수행하도록 구성되고, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자는 상이하고;
    상기 요청 코디네이터는,
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 것; 및
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자와 상기 시스템 서비스 식별자의 상관들을 저장하는 것
    을 더 포함하는 동작들을 수행하도록 구성되고; 그리고
    상기 프로세서는,
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와 상관시키는 것; 및
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자의, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와의 상관들을 저장하는 것
    을 더 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  13. 제 12 항에 있어서,
    상기 요청 코디네이터는,
    상기 시스템 서비스를 실행하기 위한 상기 제 1 요청을 상기 제 1 애플리케이션으로부터 수신하는 것은 상기 시스템 서비스 식별자를 수신하는 것을 포함하고;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것은 상기 시스템 서비스의 상기 제 1 버전을 상기 시스템 서비스의 식별자와 상관된 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것을 포함하도록
    동작들을 수행하도록 구성되고; 그리고
    상기 프로세서는,
    상기 시스템 서비스의 상기 제 1 버전의 제 1 시스템 서비스 버전 식별자를 상기 제 1 애플리케이션에 제공하는 것; 및
    상기 제 1 시스템 서비스 버전 식별자를 갖는 상기 시스템 서비스의 상기 제 1 버전을 실행하기 위한 요청을 상기 제 1 애플리케이션으로부터 수신하는 것
    을 더 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  14. 제 13 항에 있어서,
    상기 프로세서는,
    상기 제 1 시스템 서비스 버전 식별자와 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스 공간 레이아웃 사이의 상관을 사용하여 상기 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 위치시키는 것;
    상기 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스를 상기 시스템 서비스의 상기 제 1 버전의 데이터가 저장되는 물리적 어드레스로 변환하는 것; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 검색하는 것
    을 더 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  15. 제 12 항에 있어서,
    상기 론처는 프로세스 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것을 더 포함하는 동작들을 수행하도록 구성되고, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 프로세스 식별자는 동일하고;
    상기 맵퍼는 랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것이 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대해 발생하도록 동작들을 수행하도록 구성되고;
    상기 론처는 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것이 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대해 발생하도록 동작들을 수행하도록 구성되고; 그리고
    상기 프로세서는 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자에 상관시키는 것이 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대해 발생하도록 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  16. 제 10 항에 있어서,
    상기 요청 코디네이터에 통신가능하게 연결되고, 그리고
    상기 시스템 서비스의 상기 제 1 버전의 실행의 동적으로 생성된 코드에 코드 버퍼 공간을 할당하기 위한 요청을 수신하는 것;
    코드 버퍼 어드레스를 랜덤하게 선택하는 것;
    상기 코드 버퍼 어드레스와 상관된 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 것; 및
    상기 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크다고 결정하는 것에 응답하여 상기 코드 버퍼 어드레스에 상기 동적으로 생성된 코드를 저장하는 것
    을 포함하는 동작들을 수행하도록 구성된 메모리 할당기를 더 포함하는, 컴퓨팅 디바이스.
  17. 제 10 항에 있어서,
    상기 요청 코디네이터는,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 제 2 애플리케이션으로부터 수신하는 것;
    상기 제 2 애플리케이션으로부터 상기 시스템 서비스를 실행하기 위한 상기 제 2 요청이 상기 시스템 서비스 상에서의 공격이라고 검출하는 것;
    을 더 포함하는 동작들을 수행하도록 구성되고;
    상기 론처는 상기 시스템 서비스의 제 2 복수의 버전들을 론칭하는 것을 더 포함하는 동작들을 수행하도록 구성되고;
    상기 맵퍼는 랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각에 할당하는 것을 더 포함하는 동작들을 수행하도록 구성되고, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃 및 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃은 상이하고;
    상기 요청 코디네이터는 상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들 및 상기 시스템 서비스의 상기 제 2 복수의 버전들로부터 랜덤하게 선택하는 것을 더 포함하는 동작들을 수행하도록 구성되고; 그리고
    상기 프로세서는 상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 더 포함하는 동작들을 수행하기 위한 실행가능한 명령들로 구성되는, 컴퓨팅 디바이스.
  18. 제 10 항에 있어서,
    상기 론처는 시스템 서비스의 제 1 복수의 버전들을 론칭하는 것이 상이한 명령 세트 아키텍처들을 갖는 복수의 이종의 프로세서 코어들 중 하나의 코어 상에 상기 시스템 서비스의 상기 제 1 복수의 버전들의 상기 시스템 서비스의 다중 버전들 각각을 론칭하는 것을 포함하도록 동작들을 수행하도록 구성되고;
    상기 요청 코디네이터는 상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것이 상기 시스템 서비스의 상기 제 1 버전이 론칭되는 상기 복수의 이종의 프로세서 코어들의 제 1 이종의 프로세서 코어를 랜덤하게 선택하는 것을 포함하도록 동작들을 수행하도록 구성되고;
    상기 프로세서는 상기 제 1 이종의 프로세서 코어이고, 그리고 상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것이 상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스를 실행하는 것을 포함하도록 동작들을 수행하기 위한 실행가능한 명령들로 구성되고; 그리고
    상기 요청 코디네이터는,
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 상기 제 1 애플리케이션으로부터 상기 제 1 이종의 프로세서 코어로 전달하는 것;
    상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스의 실행의 출력을 수신하는 것; 및
    상기 출력을 상기 제 1 애플리케이션으로 리턴하는 것
    을 더 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  19. 컴퓨팅 디바이스로서,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 수단;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 수단;
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신하는 수단;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 수단; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 수단을 포함하는, 컴퓨팅 디바이스.
  20. 제 19 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 상기 제 1 애플리케이션으로부터 수신하는 수단;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 수단; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  21. 제 19 항에 있어서,
    시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 수단으로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자는 상이한, 상기 할당하는 수단;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 수단;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자와 상기 시스템 서비스 식별자의 상관들을 저장하는 수단;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와 상관시키는 수단; 및
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자의, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와의 상관들을 저장하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  22. 제 21 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 상기 제 1 요청은 상기 시스템 서비스 식별자를 포함하고; 그리고
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 수단은 상기 시스템 서비스의 상기 제 1 버전을 상기 시스템 서비스의 식별자와 상관된 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 수단을 포함하고;
    상기 컴퓨팅 디바이스는:
    상기 시스템 서비스의 상기 제 1 버전의 제 1 시스템 서비스 버전 식별자를 상기 제 1 애플리케이션에 제공하는 수단; 및
    상기 제 1 시스템 서비스 버전 식별자를 갖는 상기 시스템 서비스의 상기 제 1 버전을 실행하기 위한 요청을 상기 제 1 애플리케이션으로부터 수신하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  23. 제 22 항에 있어서,
    상기 제 1 시스템 서비스 버전 식별자와 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스 공간 레이아웃 사이의 상관을 사용하여 상기 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 위치시키는 수단;
    상기 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스를 상기 시스템 서비스의 상기 제 1 버전의 데이터가 저장되는 물리적 어드레스로 변환하는 수단; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 검색하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  24. 제 21 항에 있어서,
    프로세스 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 수단을 더 포함하고, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 프로세스 식별자는 동일하고;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 수단은 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 상기 랜덤 가상 어드레스 공간 레이아웃을 할당하는 수단을 포함하고;
    시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 수단은 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 상기 시스템 서비스 버전 식별자를 할당하는 수단을 포함하고; 그리고
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 시스템 서비스의 상기 시스템 서비스 식별자에 상관시키는 수단은 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 프로세스 식별자에 할당된 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 시스템 서비스의 상기 시스템 서비스 식별자에 상관시키는 수단을 포함하는, 컴퓨팅 디바이스.
  25. 제 19 항에 있어서,
    상기 시스템 서비스의 상기 제 1 버전의 실행의 동적으로 생성된 코드에 코드 버퍼 공간을 할당하기 위한 요청을 수신하는 수단;
    코드 버퍼 어드레스를 랜덤하게 선택하는 수단;
    상기 코드 버퍼 어드레스와 상관된 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 수단; 및
    상기 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크다고 결정하는 것에 응답하여 상기 코드 버퍼 어드레스에 상기 동적으로 생성된 코드를 저장하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  26. 제 19 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 제 2 애플리케이션으로부터 수신하는 수단;
    상기 제 2 애플리케이션으로부터 상기 시스템 서비스를 실행하기 위한 상기 제 2 요청이 상기 시스템 서비스 상에서의 공격이라고 검출하는 수단;
    상기 시스템 서비스의 제 2 복수의 버전들을 론칭하는 수단;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각에 할당하는 수단으로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃 및 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃은 상이한, 상기 할당하는 수단;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들 및 상기 시스템 서비스의 상기 제 2 복수의 버전들로부터 랜덤하게 선택하는 수단; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  27. 제 19 항에 있어서,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 수단은 상이한 명령 세트 아키텍처들을 갖는 복수의 이종의 프로세서 코어들 중 하나의 코어 상에 상기 시스템 서비스의 상기 제 1 복수의 버전들의 상기 시스템 서비스의 다중 버전들 각각을 론칭하는 수단을 포함하고;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 수단은 상기 시스템 서비스의 상기 제 1 버전이 론칭되는 복수의 이종의 프로세서 코어들의 제 1 이종의 프로세서 코어를 랜덤하게 선택하는 수단을 포함하고;
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 수단은 상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스를 실행하는 수단을 포함하고; 그리고
    상기 컴퓨팅 디바이스는:
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 상기 제 1 애플리케이션으로부터 상기 제 1 이종의 프로세서 코어로 전달하는 수단;
    상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스의 실행의 출력을 수신하는 수단; 및
    상기 출력을 상기 제 1 애플리케이션으로 리턴하는 수단을 더 포함하는, 컴퓨팅 디바이스.
  28. 프로세서 실행가능 명령들이 저장되어 있는 비일시적 프로세서 판독가능 저장 매체로서,
    상기 프로세서 실행가능 명령들은 컴퓨팅 디바이스의 프로세서로 하여금,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 것;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것;
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 제 1 애플리케이션으로부터 수신하는 것;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  29. 제 28 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 상기 제 1 애플리케이션으로부터 수신하는 것;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  30. 제 28 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것으로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자는 상이한, 상기 할당하는 것;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 것;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자와 상기 시스템 서비스 식별자의 상관들을 저장하는 것;
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와 상관시키는 것; 및
    상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자의, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃의 대응 시스템 서비스 버전 식별자와의 상관들을 저장하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  31. 제 30 항에 있어서,
    상기 시스템 서비스를 실행하기 위한 상기 제 1 요청은 상기 시스템 서비스 식별자를 포함하고;
    상기 저장된 프로세서 실행가능 명령들은 상기 프로세서로 하여금, 상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것이 상기 시스템 서비스의 상기 제 1 버전을 상기 시스템 서비스의 식별자와 상관된 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것을 포함하도록 동작들을 수행하게 하도록 구성되고; 그리고
    상기 저장된 프로세서 실행가능 명령들은 상기 프로세서로 하여금,
    상기 시스템 서비스의 상기 제 1 버전의 제 1 시스템 서비스 버전 식별자를 상기 제 1 애플리케이션에 제공하는 것; 및
    상기 제 1 시스템 서비스 버전 식별자를 갖는 상기 시스템 서비스의 상기 제 1 버전을 실행하기 위한 요청을 상기 제 1 애플리케이션으로부터 수신하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  32. 제 31 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    상기 제 1 시스템 서비스 버전 식별자와 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스 공간 레이아웃 사이의 상관을 사용하여 상기 제 1 시스템 서비스 버전의 랜덤 가상 어드레스를 위치시키는 것;
    상기 제 1 시스템 서비스 버전의 상기 랜덤 가상 어드레스를 상기 시스템 서비스의 상기 제 1 버전의 데이터가 저장되는 물리적 어드레스로 변환하는 것; 및
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 검색하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  33. 제 30 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은 상기 프로세서로 하여금, 프로세스 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되고, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대한 상기 프로세스 식별자는 동일하고; 그리고
    상기 저장된 프로세서 실행가능 명령들은 상기 프로세서로 하여금, 랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것, 시스템 서비스 버전 식별자를 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 할당하는 것, 및 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 시스템 서비스 버전 식별자를 상기 시스템 서비스의 시스템 서비스 식별자와 상관시키는 것은 상기 프로세스 식별자를 할당한 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각에 대해 발생하도록, 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  34. 제 28 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    상기 시스템 서비스의 상기 제 1 버전의 실행의 동적으로 생성된 코드에 코드 버퍼 공간을 할당하기 위한 요청을 수신하는 것;
    코드 버퍼 어드레스를 랜덤하게 선택하는 것;
    상기 코드 버퍼 어드레스와 상관된 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크고 이용가능한지를 결정하는 것; 및
    상기 코드 버퍼 공간이 상기 동적으로 생성된 코드를 저장하기에 충분히 크다고 결정하는 것에 응답하여 상기 코드 버퍼 어드레스에 상기 동적으로 생성된 코드를 저장하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  35. 제 28 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    상기 시스템 서비스를 실행하기 위한 제 2 요청을 제 2 애플리케이션으로부터 수신하는 것;
    상기 제 2 애플리케이션으로부터 상기 시스템 서비스를 실행하기 위한 상기 제 2 요청이 상기 시스템 서비스 상에서의 공격이라고 검출하는 것;
    상기 시스템 서비스의 제 2 복수의 버전들을 론칭하는 것;
    랜덤 가상 어드레스 공간 레이아웃을 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각에 할당하는 것으로서, 상기 시스템 서비스의 상기 제 1 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃 및 상기 시스템 서비스의 상기 제 2 복수의 버전들 각각의 상기 랜덤 가상 어드레스 공간 레이아웃은 상이한, 상기 할당하는 것;
    상기 시스템 서비스의 제 2 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들 및 상기 시스템 서비스의 상기 제 2 복수의 버전들로부터 랜덤하게 선택하는 것; 및
    상기 시스템 서비스의 상기 제 2 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
  36. 제 28 항에 있어서,
    상기 저장된 프로세서 실행가능 명령들은, 상기 프로세서로 하여금,
    시스템 서비스의 제 1 복수의 버전들을 론칭하는 것은 상이한 명령 세트 아키텍처들을 갖는 복수의 이종의 프로세서 코어들 중 하나의 코어 상에 상기 시스템 서비스의 상기 제 1 복수의 버전들의 상기 시스템 서비스의 다중 버전들 각각을 론칭하는 것을 포함하고;
    상기 시스템 서비스의 제 1 버전을 상기 시스템 서비스의 상기 제 1 복수의 버전들로부터 랜덤하게 선택하는 것은 상기 시스템 서비스의 상기 제 1 버전이 론칭되는 복수의 이종의 프로세서 코어들의 제 1 이종의 프로세서 코어를 랜덤하게 선택하는 것을 포함하고;
    상기 시스템 서비스의 상기 제 1 버전의 데이터를 사용하여 상기 시스템 서비스를 실행하는 것은 상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스를 실행하는 것을 포함하도록 동작들을 수행하게 하도록 구성되고, 그리고
    상기 저장된 프로세서 실행가능 명령들은 상기 프로세서로 하여금,
    상기 시스템 서비스를 실행하기 위한 제 1 요청을 상기 제 1 애플리케이션으로부터 상기 제 1 이종의 프로세서 코어로 전달하는 것;
    상기 제 1 이종의 프로세서 코어에 의해 상기 시스템 서비스의 실행의 출력을 수신하는 것; 및
    상기 출력을 상기 제 1 애플리케이션으로 리턴하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 비일시적 프로세서 판독가능 저장 매체.
KR1020187027765A 2016-03-31 2017-02-27 시변하는 어드레스 공간 레이아웃 랜덤화 KR20180125976A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/087,198 2016-03-31
US15/087,198 US10013554B2 (en) 2016-03-31 2016-03-31 Time varying address space layout randomization
PCT/US2017/019716 WO2017172164A1 (en) 2016-03-31 2017-02-27 Time varying address space layout randomization

Publications (1)

Publication Number Publication Date
KR20180125976A true KR20180125976A (ko) 2018-11-26

Family

ID=58358838

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187027765A KR20180125976A (ko) 2016-03-31 2017-02-27 시변하는 어드레스 공간 레이아웃 랜덤화

Country Status (9)

Country Link
US (2) US10013554B2 (ko)
EP (1) EP3437008A1 (ko)
JP (1) JP2019513270A (ko)
KR (1) KR20180125976A (ko)
CN (1) CN108885661A (ko)
BR (1) BR112018069707A2 (ko)
CA (1) CA3016005A1 (ko)
TW (1) TW201737150A (ko)
WO (1) WO2017172164A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200064702A (ko) * 2018-11-29 2020-06-08 한국전자통신연구원 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015185071A1 (en) * 2014-06-04 2015-12-10 Giesecke & Devrient Gmbh Method for enhanced security of computational device with multiple cores
US10268601B2 (en) 2016-06-17 2019-04-23 Massachusetts Institute Of Technology Timely randomized memory protection
US10191791B2 (en) * 2016-07-02 2019-01-29 Intel Corporation Enhanced address space layout randomization
US10310991B2 (en) * 2016-08-11 2019-06-04 Massachusetts Institute Of Technology Timely address space randomization
US10481816B2 (en) * 2017-10-18 2019-11-19 Western Digital Technologies, Inc. Dynamically assigning data latches
GB2568527B (en) * 2017-11-20 2020-04-15 Trustonic Ltd Address layout varying process
US11070373B2 (en) * 2018-02-21 2021-07-20 Ebay Inc. Masked key hopping
US11681794B2 (en) 2021-04-07 2023-06-20 Oracle International Corporation ASLR bypass

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4875159A (en) * 1987-12-22 1989-10-17 Amdahl Corporation Version management system using plural control fields for synchronizing two versions of files in a multiprocessor system
EP1870814B1 (en) * 2006-06-19 2014-08-13 Texas Instruments France Method and apparatus for secure demand paging for processor devices
GB0504326D0 (en) * 2005-03-02 2005-04-06 Symbian Software Ltd Dual mode operating system for a computing device
US8756363B2 (en) * 2011-07-07 2014-06-17 Oracle International Corporation Efficient storage of memory version data
US8694738B2 (en) 2011-10-11 2014-04-08 Mcafee, Inc. System and method for critical address space protection in a hypervisor environment

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200064702A (ko) * 2018-11-29 2020-06-08 한국전자통신연구원 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치

Also Published As

Publication number Publication date
EP3437008A1 (en) 2019-02-06
WO2017172164A1 (en) 2017-10-05
JP2019513270A (ja) 2019-05-23
TW201737150A (zh) 2017-10-16
US10013554B2 (en) 2018-07-03
US20180314825A1 (en) 2018-11-01
CA3016005A1 (en) 2017-10-05
BR112018069707A2 (pt) 2019-02-05
CN108885661A (zh) 2018-11-23
US20170286674A1 (en) 2017-10-05

Similar Documents

Publication Publication Date Title
KR20180125976A (ko) 시변하는 어드레스 공간 레이아웃 랜덤화
JP6903682B2 (ja) 仮想リソースビューを使用するデータ保護
EP3295315B1 (en) Method and apparatus for virtualized control of a shared system cache
KR102383900B1 (ko) 타겟 메모리 어드레스에 대응한 메모리 속성 유닛의 영역을 식별하는 영역식별 연산
CN106537360B (zh) 用于具有动态分区的共享高速缓存的方法和装置
TWI610172B (zh) 用於經由集合和通道來靈活地將快取記憶體劃分成分量快取記憶體的方法和裝置
US8850105B2 (en) Method for controlling memory system, information processing apparatus, and storage medium
WO2016137579A1 (en) Return oriented programming attack detection via memory monitoring
US11954051B2 (en) Managed NAND Flash memory region control against endurance hacking
CN102063386B (zh) 一种单载体多目标的缓存系统的缓存管理方法
Kim et al. Analysis of smartphone I/O characteristics—Toward efficient swap in a smartphone
Li et al. SEAL: User experience-aware two-level swap for mobile devices
CN112825041A (zh) 一种内存隔离的装置、内存隔离方法和相关设备
TWI601058B (zh) 減少在固態驅動機中混植輸入與輸出操作的技術
US9542318B2 (en) Temporary cache memory eviction
CN110832462B (zh) 反向平铺
US11714753B2 (en) Methods and nodes for handling memory
US20160103612A1 (en) Approximation of Execution Events Using Memory Hierarchy Monitoring