KR20210060443A - 스택 포인터의 검증 - Google Patents

스택 포인터의 검증 Download PDF

Info

Publication number
KR20210060443A
KR20210060443A KR1020217005759A KR20217005759A KR20210060443A KR 20210060443 A KR20210060443 A KR 20210060443A KR 1020217005759 A KR1020217005759 A KR 1020217005759A KR 20217005759 A KR20217005759 A KR 20217005759A KR 20210060443 A KR20210060443 A KR 20210060443A
Authority
KR
South Korea
Prior art keywords
stack pointer
exception
processing
stack
secure
Prior art date
Application number
KR1020217005759A
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 KR20210060443A publication Critical patent/KR20210060443A/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/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • 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
    • G06F21/54Monitoring 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 by adding security routines or objects to programs
    • 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/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • 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/1458Protection against unauthorised use of memory or access to memory by checking the subject access rights
    • G06F12/1491Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
    • 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
    • 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
    • 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/556Detecting local intrusion or implementing counter-measures involving covert channels, i.e. data leakage between processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Executing Machine-Instructions (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)
  • Hardware Redundancy (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Stereo-Broadcasting Methods (AREA)

Abstract

장치는, 적어도 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 수행하는 처리 회로(4), 및 타겟 주소와 연결된 도메인을 나타내는 보안 속성 데이터에 따라 메모리 액세스가 허용되는지 여부를 확인하기 위한 메모리 액세스 검사 회로(22)를 포함한다. 덜 안전한 도메인의 처리에서 안전한 도메인과 관련된 주소를 가진 타겟 명령으로 프로그램 흐름의 주어진 변경에 대한 응답으로 : 타겟 명령이 안전한 도메인에의 유효한 진입 점을 나타내는 게이트웨이 명령이 아닌 다른 명령일 때 오류가 트리거된다. 타겟 명령이 상기 게이트웨이 명령인 경우, 스택 포인터 검증 동작이 트리거되어 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증한다.

Description

스택 포인터의 검증
본 기술은 데이터 처리 분야에 관한 것이다.
처리 회로는 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 다수의 보안 도메인 중 하나에서 데이터 처리를 수행하는 것을 지원할 수 있다. 이렇게 하면 안전한 도메인과 관련된 민감한 데이터 또는 코드가, 덜 안전한 도메인에서 동작하는 덜 안전한 코드에 의한 부적절한 액세스로부터 보호될 수 있다.
적어도 어떤 예는, 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 수행하는 처리 회로; 상기 복수의 보안 도메인 중 어느 것이 메모리 액세스의 타겟 주소와 연관되는지를 나타내는 보안 속성(attribute) 데이터에 따라 메모리 액세스가 허용되는지 여부를 검사하는 메모리 액세스 검사 회로; 및 메모리에 스택 데이터 구조를 나타내는 스택 포인터를 저장하는 적어도 하나의 스택 포인터 레지스터; 를 포함하고, 여기에서 : 상기 덜 안전한 도메인에서의 처리에서부터 상기 안전한 도메인과 연관된 명령 주소를 가진 타겟 명령으로의 프로그램 흐름의 주어진 변경에 대한 응답으로 : 상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점(entry point)을 나타내는 게이트웨이 명령 이외의 명령인 경우, 상기 처리 회로는 오류(fault)를 트리거하도록 구성되고; 그리고 상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 회로는 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해 스택 포인터 검증 동작(action)을 트리거하도록 구성되는 장치를 제공한다.
적어도 어떤 예는, 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 수행할 수 있는 처리 회로를 위한 데이터 처리 방법으로서, 메모리 액세스 허용 여부를 검사하는 것은, 복수의 보안 도메인 중 어느 것이 상기 메모리 액세스의 타겟 주소와 연관되는지를 표시하는 보안 속성 데이터에 의존하고; 상기 방법은, 덜 안전한 도메인에서의 처리로부터 상기 안전한 도메인과 연관된 명령 주소를 갖는 타겟 명령으로의 프로그램 흐름의 주어진 변경에 응답하여 : 상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점을 나타내는 게이트웨이 명령인지 여부를 결정하는 단계; 상기 타겟 명령이 상기 게이트웨이 명령이 아닌 다른 명령일 때, 오류를 트리거링하는 단계; 및 상기 타겟 명령이 게이트웨이 명령인 경우, 스택 포인터 검증 동작을 트리거하여 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해, 상기 스택 포인터 검증 동작을 트리거링하는 단계를 포함하는 데이터 처리 방법을 제공한다.
적어도 어떤 예는, 명령 실행을 위한 명령 실행 환경을 제공하기 위해 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램에 있어서, 상기 컴퓨터 프로그램은: 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 지원하기 위한 처리 프로그램 로직; 상기 복수의 보안 도메인 중 어느 것이 상기 메모리 액세스의 타겟 주소와 연관되는지를 나타내는 보안 속성 데이터에 따라 메모리 액세스가 허용되는지 여부를 검사하는 메모리 액세스 검사 프로그램 로직; 및 상기 컴퓨터 프로그램에 의해 시뮬레이션된 타겟 아키텍처의 시뮬레이션된 아키텍처 레지스터에 대한 액세스를 시뮬레이션 하기 위해 호스트 데이터 처리 장치의 메모리에 대한 액세스를 제어하는 레지스터 에뮬레이팅 프로그램 로직을 포함하고, 상기 시뮬레이션된 아키텍처 레지스터는 메모리에 스택 데이터 구조를 나타내는 스택 포인터를 저장하는 적어도 하나의 스택 포인터 레지스터를 포함하고; 여기에서: 상기 덜 안전한 도메인의 처리에서 상기 안전한 도메인과 연관된 명령 주소를 가진 타겟 명령으로의 프로그램 흐름의 주어진 변경에 대한 응답으로 : 상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점을 나타내는 게이트웨이 명령 이외의 명령인 경우, 상기 처리 프로그램 로직은 오류를 트리거하도록 구성되고; 그리고 상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 프로그램 로직은 상기 시뮬레이션된 아키텍처 레지스터의 선택된 스택 포인터 레지스터와 연관된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해 스택 포인터 검증 동작을 트리거하도록 구성되는 컴퓨터 프로그램을 제공한다.
컴퓨터 판독 가능 저장 매체는 전술한 컴퓨터 프로그램을 저장할 수 있다. 저장 매체는 비 일시적 저장 매체일 수 있다.
본 기술의 추가적인 양상, 특징 및 장점은 첨부 도면과 함께 읽어야 하는 하기 실시 예의 설명으로부터 명백해질 것이다.
도 1은 안전하고 덜 안전한 도메인을 지원하는 처리 회로를 갖는 데이터 처리 시스템의 예를 개략적으로 도시한다.
도 2는 처리 회로의 다른 도메인 및 동작 모드의 예를 보여준다.
도 3은 처리 회로의 레지스터의 예를 보여준다.
도 4는 피 호출자(callee) 레지스터와 관련된 아키텍처 상태(state)를 생략하고 무결성 서명을 생략하는 제 1 예외(exception) 스택 프레임의 여러 예를 보여준다.
도 5는 피 호출자 레지스터로부터의 추가 아키텍처 상태를 포함하고 무결성 서명을 포함하는 제 2 예외 스택 프레임의 예를 보여준다.
도 6은 데이터 처리 장치에 의해 지원되는 다른 예외 진입 트랜지션을 나타내는 표이다.
도 7은 데이터 처리 장치에 의해 지원되는 다수의 다른 예외 리턴(return) 트랜지션을 보여주는 표이다.
도 8은 검출하는 것이 바람직할 수 있는 잠재적으로 부적절한 도메인 / 모드 트랜지션의 시퀀스를 보여준다.
도 9는 재진입 시나리오의 예를 보여주는데, 이 시나리오에서는 함수(function)가 처음으로 호출되고, 도중에 중단된(interrupted) 다음, 함수가 처음 호출되었을 때부터 함수 코드의 나머지 부분을 완료하지 않고 두 번째로 호출되는 경우이다.
도 10은 게이트웨이 명령에 응답하여 동작을 검증하는 스택 포인터를 트리거하는 것을 포함하는 데이터 처리 방법을 도시한다. 그리고,
도 11은 사용될 수 있는 시뮬레이터 예를 보여준다.
데이터 처리 장치는 적어도 안전한 도메인 및 덜 안전한 도메인을 포함하는 다수의 보안 도메인 중 하나에서 데이터 처리를 지원하는 처리 회로를 가질 수 있다. 메모리 액세스 검사 회로는 어느 도메인이 메모리 액세스의 타겟 주소와 연관되는지를 나타내는 보안 속성(attribute) 데이터에 따라, 메모리 액세스가 허용되는지 여부를 검사하기 위해 제공될 수 있다. 예를 들어, 덜 안전한 도메인에서 동작할 때 메모리 액세스 검사 회로는 안전한 도메인과 관련된 주소에 대한 메모리 액세스를 방지할 수 있는 반면, 안전한 도메인에서 동작할 때 처리 회로는 안전한 도메인 및 덜 안전한 도메인과 관련된 주소에 액세스하도록 허용될 수 있다. 스택 데이터 구조를 나타내는 스택 포인터를 메모리에 저장하기 위해 적어도 하나의 스택 포인터 레지스터가 제공될 수 있다. 예를 들어 스택 데이터 구조는 예외를 핸들링할 때 아키텍처 상태를 저장하고 복원하는 데 사용될 수 있다.
아래에서 논의되는 기술에서, 덜 안전한 도메인에서의 처리로부터 안전한 도메인과 관련된 명령 주소를 갖는 타겟 명령으로의 프로그램 흐름의 주어진 변경에 응답하여 : 타겟 명령이 안전한 도메인에 대한 유효한 진입 점을 나타내는 게이트웨이 명령 이외의 명령일 때, 처리 회로는 오류를 트리거하고; 그리고 타겟 명령이 게이트웨이 명령일 때, 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해, 처리 회로는 스택 포인터 검증 동작을 트리거한다.
게이트웨이 명령이 안전한 도메인에 대한 유효한 진입 점을 표시하는데 사용될 수 있다. 덜 안전한 도메인에서 안전한 도메인과 관련된 명령 주소를 가진 타겟 명령으로 프로그램 흐름을 변경한 다음, 타겟 명령이 게이트웨이 명령이 아닌 경우 오류를 트리거함으로써, 안전한 메모리 영역에 저장된 안전한 코드 내의 임의 지점으로 분기를 트리거링하여 덜 안전한 도메인에서 처리된 코드를 제어하는 공격자가 보안을 위반하는 것을 방지한다. 타겟 명령이 게이트웨이 명령인지 확인하는 것을 트리거하는 프로그램 흐름의 주어진 변경은, 프로그램 흐름의 순차적 변경일 수 있거나(분기없이, 일련의 명령을 실행하면 덜 안전한 것으로 지정된 주소와 안전한 것으로 지정된 주소 사이의 경계를 넘는 데에서), 프로그램 흐름의 비 순차적 변경일 수 있다(예, 분기 또는 기타 명령으로 인해 발생하거나, 또는 예외 진입 또는 리턴 이벤트로 인해 발생하며, 이로 인해 현재 실행 시점을 나타내는 명령 주소를 나타내는 프로그램 카운터의 업데이트가 발생 함).
반면에, 프로그램 흐름의 주어진 변경에 따라, 타겟 명령이 게이트웨이 명령인 경우, 처리 회로는 스택 포인터 검증 작업을 트리거하여, 선택한 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증할 수 있다. 이는 덜 안전한 도메인에서 동작하는 비-안전한 코드가 안전한 도메인에서 실행되는 명령에 영향을 미칠 수 있도록, 안전한 도메인 내에서 사용되는 스택 포인터를 조작하려는 특정 공격으로부터 보호할 수 있다. 게이트웨이 명령에 대한 응답으로 스택 포인터 검증 동작을 트리거함으로써, 안전한 도메인이 덜 안전한 도메인에서부터 들어올 때마다 스택 포인터 검증 동작이 트리거되도록 할 수 있다. 다음에 실행되는 명령이 게이트웨이 명령이 아닌 다른 명령이면, 프로그램 흐름의 주어진 변경 이후에 오류가 발생하므로, 이는 게이트웨이 명령에 따라 안전한 도메인에서 실행될 나머지 코드가 공격자에 의해 호출된 악성 코드인 경우에도, 추가 보안 검사를 구현하도록 게이트웨이 명령을 신뢰할 수 있음을 의미한다. 따라서 게이트웨이 명령은 스택 포인터를 오용하려는 공격으로부터 보호하기 위해, 선택된 스택 포인터가 사용하기에 안전한지 여부를 검증하는 동작을 트리거할 수 있다. 특정 보안 도메인 트랜지션을 모니터링하는 명령에 의해 직접 트리거되지 않은 로직을 기반으로 하지 않고, 게이트웨이 명령에 대한 응답으로 동작을 검증하는 스택 포인터를 트리거하는 것도, 하드웨어 시스템 설계자를 위한 마이크로 아키텍처에서 구현하는 것이 더 간단할 수 있다.
어떤 예에서, 장치는 각각의 스택 포인터를 저장하기 위해 둘 이상의 스택 포인터 레지스터를 포함할 수 있다. 스택 액세스가 필요할 때 액세스되는 스택 포인터 레지스터는 현재 보안 도메인 및 / 또는 처리 회로의 현재 동작 모드에 따라 달라질 수 있으며, 일부 경우에는 예를 들어 제어 레지스터에 저장된 아키텍처 상태를 기반으로 할 수도 있다.
예를 들어, 어떤 경우에 시스템은 안전한 도메인에서 액세스 가능한 안전한 스택 포인터 레지스터와, 안전한 도메인 및 덜 안전한 도메인 모두에서 액세스 가능한 덜 안전한 스택 포인터 레지스터를 포함하는 적어도 두 개의 스택 포인터 레지스터를 포함할 수 있다. 예외를 핸들링할 때 아키텍처 상태를 저장 / 복원하기 위한 스택 포인터를 제공하는 데 사용되는 스택 포인터 레지스터는, 예외 진입 또는 예외 리턴 트랜지션과 관련된 도메인에 따라 선택될 수 있다. 별도의 안전한 및 덜 안전한 스택 포인터 레지스터를 제공함으로써, 안전한 도메인에 의해 사용되는 스택 구조를 포함하는 메모리 영역을 식별하거나 수정할 수 있는 덜 안전한 코드를 방지할 수 있다. 따라서 어떤 경우에, 선택된 스택 포인터 레지스터는 안전한 스택 포인터 레지스터일 수 있다.
보다 구체적으로, 어떤 예는 주어진 보안 도메인 내에서, 복수의 모드 중 하나에서의 처리를 지원하는 처리 회로를 가질 수 있다. 이 모드에는 예외 처리를 위한 핸들러 모드와 백그라운드 처리를 위한 스레드 모드가 포함될 수 있다. 스레드 및 핸들러 모드의 분리는 처리 회로에 액세스 할 수 있는 아키텍처 상태의 관리를 단순화하는 데 유용할 수 있고, 이는 예외 처리를 단순화하고 예외 처리에 필요한 특정 상태를 예를 들어 스레드 모드의 백그라운드 처리에 사용할 수 없도록 할 수 있다. . 따라서 메모리 영역에 대한 액세스 및 처리 회로에서 아키텍처 레지스터에 액세스 할 수 있는 제어는, 현재 보안 도메인과 처리 회로의 현재 모드의 조합을 기반으로 할 수 있으며, 어떤 경우에는 아키텍처의 다른 제어 파라미터를 기반으로 할 수도 있다.
스레드 및 핸들러 모드를 지원하는 시스템에서, 스택 포인터 레지스터는 프로세스 스택 포인터를 저장하기 위한 프로세스 스택 포인터 레지스터 및 메인 스택 포인터를 저장하기 위한 메인 스택 포인터 레지스터를 포함할 수 있다. 안전하고 덜 안전한 뱅킹 버전(banked version)의 프로세스 및 메인 스택 포인터 레지스터가 있을 수 있으므로, 경우에 따라 적어도 4 개의 서로 다른 스택 포인터 레지스터(안전한 메인 스택 포인터, 안전한 프로세스 스택 포인터, 덜 안전한 메인 스택 포인터 및 덜 안전한 프로세스 스택 포인터)가 있을 수 있다. 일반적으로 메인 스택 포인터 레지스터는 핸들러 모드에서 동작할 때 선택될 수 있다. 스레드 모드에서, 프로세스 스택 포인터 레지스터와 메인 스택 포인터 레지스터 중 하나는 제어 레지스터에 저장된 스택 포인터 선택 값을 기반으로 선택될 수 있다. 전술한 4 개의 스택 포인터 레지스터를 포함하여, 뱅킹된 스택 포인터 레지스터를 제공하는 아키텍처에서, 게이트웨이 명령에 응답하여 스택 포인터 검증 동작이 수행되는 선택된 스택 포인터 레지스터는 안전한 메인 스택 포인터 레지스터 또는 안전한 프로세스 스택 포인터 레지스터일 수 있다.
스택 포인터 검증 동작은 다른 방식으로 수행될 수 있다. 일 예에서, 스택 포인터 검증 동작은, 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터로부터 파생된 타겟 주소로부터 값의 로딩을 요청하는 로드 요청이 허용되는지 여부를 검사하기 위해 퍼미션 체크를 트리거하는 것을 포함할 수 있다. 어떤 구현에서 이 퍼미션 체크는 타겟 주소에 실제 로드 요청을 발행하여 트리거될 수 있다. 대안적으로, 저장 요청과 같은 다른 유형의 메모리 액세스 요청을 발행하거나, 또는 실제로 메모리에 대한 액세스를 트리거하지는 않지만 타겟 주소에 대한 액세스가 허용되는지 여부의 표시를 리턴하는 메모리 액세스 검사 회로를 제어하는, 타겟 주소를 나타내는 퍼미션 체킹 요청을 발행함으로써, 퍼미션 체크가 트리거될 수 있다.
게이트웨이 명령이 발생할 때 스택 포인터에서 파생된 주소에 대한 메모리 퍼미션 검사를 트리거하는 것이 유용하다는 것은, 안전한 도메인에 대한 유효한 진입 점을 표시하는 게이트웨이 명령의 기능은 메모리에서 값을 액세스할 필요가 없는 것처럼 보이 때문에, 직관적이지 않은 것처럼 보일 수 있다. 그러나 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터에서 파생된 타겟 주소에 대한 퍼미션 검사를 트리거함으로써 퍼미션 체크는 선택된 스택 포인터가 사용하기에 안전한지 여부를 검사하는 역할을 할 수 있다. 예를 들어, 처리 회로는 다수의 권한 레벨 중 하나에서 동작하도록 구성될 수 있다. 메모리 액세스 검사 회로는, 게이트웨이 명령에 대한 응답으로 트리거된 타겟 주소에 적용할 수 있는 선택된 액세스 퍼미션 세트가, 선택된 권한 레벨이 타겟 주소에 액세스하는 것을 금지하도록 지정하는 경우에, 오류를 트리거할 수 있다. 따라서, 게이트웨이 명령은 선택된 스택 포인터가 안전한지 여부를 검증하는 방법을 제공하기 위해, 메모리 액세스 검사 회로에 의해 구현된 권한 기반 메모리 퍼미션 체크를 호출하는 데 사용될 수 있다.
특히, 선택된 권한 레벨은 프로그램 흐름의 주어진 변경시에 안전한 도메인 및 처리 회로의 현재 동작 모드의 조합에서의 처리와 관련된 권한 레벨일 수 있다. 예를 들어 안전한 도메인과 현재 모드의 조합이 권한 없음으로 정의된 경우, 메모리 액세스 검사 회로는 선택된 액세스 퍼미션 세트가 선택된 스택 포인터에서 파생된 타겟 주소가 실행될 수 있음을 나타내는 지 여부를 검사할 수 있고, 권한이 없는 코드가 해당 주소에 액세스할 수 없는 경우에 오류가 트리거될 수 있다. 이는 공격자가 권한이 없는 코드를 사용하여 메모리의 권한 영역에 있는 스택 데이터 구조를 가리키는 스택 포인터를 조작하려는 공격으로부터 보호할 수 있다.
로드 요청에 대한 응답으로, 선택된 스택 포인터에서 기인된 타겟 주소에 액세스할 수 있는지 여부를 검사하는 데 사용되는, 선택된 액세스 퍼미션 세트는, 처리 회로의 현재 도메인이 안전한 도메인일 때, 타겟 주소에 적용될 수 있는 액세스 퍼미션 세트를 포함할 수 있다. 어떤 예들에서, 메모리 액세스 검사 회로는 안전한 및 덜 안전한 도메인 각각에 대한 별도의 액세스 퍼미션 데이터 세트를 유지할 수 있다. 따라서 현재 도메인이 아직 덜 안전한 도메인일 때 게이트웨이 명령이 실행되더라도(게이트웨이 명령이 메모리의 안전한 영역에 저장되어 있지만 도메인 스위치가 아직 트리거되지 않았을 수 있음), 게이트웨이 명령은 안전한 도메인과 관련된 액세스 퍼미션을 사용하여 퍼미션 체크를 트리거하여, 나중에 안전한 도메인에서 액세스할 수 있는 스택 포인터가 사용하기에 안전한지 여부를 검증할 수 있다.
어떤 예에서 게이트웨이 명령에 의해 트리거되는 퍼미션 체크에서 검사되는 타겟 주소는 선택된 스택 포인터에 특정 오프셋을 추가함으로써 선택된 스택 포인터로부터 기인될 수 있다. 다른 예들에서 타겟 주소는 단순히 선택된 스택 포인터 자체와 동일할 수 있다.
일례에서, 처리 회로는 게이트웨이 명령에 응답하여 재진입 검사를 수행할 수도 있다. 재진입 검사는 선택된 스택 포인터로부터 유도된 타겟 주소로부터 로드된 값이 적어도 하나의 무결성 서명 값 중 하나일 때 오류를 트리거하는 것을 포함할 수 있다. 무결성 서명 값은 메모리의 스택 데이터 구조에 대한 일부 무결성 검사를 가능하게 하는 데 사용될 수 있는 소정의 비트 패턴 일 수 있다. 어떤 구현에서, 둘 이상의 서로 다른 무결성 서명 값(예, 하나는 예외 스택 프레임에 사용되고 다른 하나는 함수 스택 프레임에 사용됨)에 대한 지원이 있을 수 있다. 이 경우, 오류를 트리거하는 무결성 서명 값은 이러한 무결성 서명 값(예, 예외 스택 프레임에 사용되는 무결성 서명 값) 중 특정 값이거나, 이러한 무결성 서명 중 하나에 의해 오류가 트리거될 수 있다..
이러한 재진입 검사는 특정 함수를 한 번 호출하고, 함수가 부분적으로 중단된 다음, 특정 일련의 이벤트(예, 도메인 트랜지션, 모드 트랜지션, 예외 진입 또는 리턴 이벤트, 함수 호출 함수 리턴을 포함한 이벤트)가 따라오는 재진입 시나리오에 대한 아키텍처 보호를 제공하는데 유용할 수 있고, 함수가 처음 호출되었을 때부터의 함수 코드의 나머지 부분을 먼저 완료하지 않고 두 번째로 함수가 호출되어 종료된다. 일부 함수 코드 유형은, 함수를 다시 호출하기 전에 함수의 이전 인스턴스가 완전히 완료되지 않은 경우 잘못된 결과를 제공할 수 있으므로, 이러한 재진입 시나리오에서 실행하기에 안전하지 않을 수 있다. 예를 들어, 함수는 동일한 함수를 호출하는 다른 인스턴스와 관련하여 핵심적으로 완료해야 하는 일련의 동작을 구현할 수 있다. 함수 코드 자체는 재진입에 대해 안전하도록 재설계될 수 있지만, 이렇게 하면 코드 복잡성이 크게 증가하고 추가적인 보안 취약성이 발생하며 유지 관리가 더 어려워지고 바람직하지 않을 수 있는 코드 크기가 증가할 수 있다. 대안적으로 재진입이 발생하더라도 소프트웨어가 안전하도록 설계하는 대신, 재진입을 감지하고 재진입이 감지되면 두 번째로 함수 실행을 방지하는 명령 시퀀스를 포함하는 소프트웨어를 제공하는 다른 접근 방안이 있다. 그러나 재진입에 대한 이러한 소프트웨어 감지는 오류가 발생하기 쉽고 코드 크기를 늘리며 성능을 저하시킬 수 있으므로 이는 바람직하지 않을 수 있다. 재진입을 방지하기 위한 또 다른 옵션은, 예를 들어 인터럽트 또는 예외 선점을 방지하기 위해 중요한 동작 기간 동안 함수의 우선 순위를 높이는(boosting) 등에 의해, 함수가 도중에 중단될 가능성을 줄이는 것이다. 그러나 이것은 모든 사용 케이스에서 작동하지 않을 수 있다. 우선 순위 부스팅은 특정 권한 레벨에서만 사용할 수 있으며 이러한 우선 순위 부스팅은 바람직하지 않을 수 있는 인터럽트 대기 시간을 크게 방해할 수 있다.
재진입 시나리오에서 종종, 이것은 선택된 스택 포인터 레지스터에서 선택된 스택 포인터에 의해 표시된 관련 스택 데이터 구조에 무결성 서명 값이 존재하도록 하는 일련의 예외 트랜지션을 때때로 따를 수 있다는 것이 인식되어 왔다. 따라서, 게이트웨이 명령에 대한 응답으로 선택된 스택 포인터에서 파생된 주소에 대한 로드를 트리거하고, 로드된 값이 적어도 하나의 무결성 서명 값과 일치할 때 오류를 트리거함으로써, 이러한 재진입에 대한 아키텍처 방어를 제공한다. 이는 의도한 결과를 달성하는 소프트웨어를 제공하는 프로그래머 또는 컴파일러의 부담을 크게 줄일 수 있다.
재진입 검사를 수행하기 위해 게이트웨이 명령에 의해 트리거된 로드를 사용함으로써, 안전한 도메인의 각 진입에 대해 재진입 검사가 수행될 수 있다. 재진입 자체가 안전한 도메인과 덜 안전한 도메인간의 경계를 적용하는 데 문제가 되지 않기 때문에, 재진입 검사가 덜 안전한 도메인(재진입의 주요 위험은 소프트웨어 코드가 보안 이슈가 아니라 의도한 결과를 달성하지 못할 수 있다는 것 보다)보다 안전한 도메인에 더 관련이 있다는 것은 직관적이지 않을 수 있다. 그러나 재진입을 위한 소프트웨어 수정은 공격자가 악용할 수 있는 보안 취약성을 도입하는 2 차 위험을 유발할 수 있다. 따라서 재진입 검사를 위한 이러한 아키텍처 지원을 제공함으로써, 프로그래머 또는 컴파일러가 재진입을 방지하거나 검출하기 위한 소프트웨어 수정을 제공할 필요가 없도록 하여, 이러한 소프트웨어 수정이 의도하지 않게 보안 취약성을 유발할 가능성을 감소시킨다. 따라서 모든 안전한 함수가 안전한 도메인에 대한 안전한 진입 점을 표시하는 게이트웨이 명령의 존재로 인해 아키텍처에서 자동으로 트리거되는 재진입 검사에 대한 방어를 보장하므로, 게이트웨이 명령에 응답하여 재진입 검사를 트리거하는 것이 특히 유용하다.
게이트웨이 명령에 대한 응답으로 재진입 검사를 수행하는 경우, 타겟 주소로부터 값을 얻기 위해 재진입 검사에 사용되는 로드 요청도 스택 포인터 검증 동작에 사용되는 퍼미션 체크의 트리거 역할을 할 수 있다. 따라서 로드를 트리거하는 것은, 동작을 검증하는 스택 포인터와 재진입 검사라는 두 가지 용도로 사용될 수 있다.
그러나 이러한 재진입 검사가 항상 필요한 것은 아니다. 일부 안전한 함수의 경우 프로그램 코드는, 예를 들어 핵심적으로(atomically) 업데이트 해야 하는 공유 변수에 의존하지 않기 때문에, 재진입에 대해 이미 안전할 수 있다. 따라서, 어떤 예들에서 아키텍처는 재진입 검사가 인에이블 또는 디스에이블되는지 여부를 지정하는 재진입 검사 인에이블 값(예, 제어 레지스터에 저장 됨)을 제공할 수 있다. 타겟 명령이 게이트웨이 명령일 때 프로그램 흐름의 주어진 변경에 응답하여, 처리 회로는 재진입 검사를 인에이블 또는 디스에이블인지를 지정하는 재진입 검사 인에이블 값에 기초하여, 게이트웨이 명령에 응답하여 재진입 검사를 수행할지 여부를 결정할 수 있다. 따라서 실행중인 특정 함수와 관련이 없는 경우 재진입 검사가 디스에이블될 수 있다.
그러나 재진입 검사 인에이블 값이 재진입 검사가 디스에이블되도록 지정하더라도, 처리 회로는 게이트웨이 명령에 대한 응답으로, 게이트웨이 명령이 안전한 메모리에서 페치되고 덜 안전한 도메인에서 프로그램 흐름의 주어진 변경 후에 실행되는 타겟 명령일 때, 타겟 주소에 대한 로드 요청이 허용되는지 여부를 검사하기 위해 퍼미션 체크를 트리거할 수 있다. 재진입 검사가 디스에이블된 경우, 로드된 값이 무결성 서명 값과 일치하는지 검사할 필요가 없기 때문에, 타겟 주소에 대한 퍼미션 체크를 수행할 필요가 없다고 예상할 수 있고, 타겟 주소의 퍼미션 체크는, 재진입 검사가 디스에이블된 경우에도, 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하여 보안에 대한 일부 형태의 공격에 대한 보호를 제공하는데 여전히 유용하다.
재진입 검사가 디스에이블된 경우, 스택 포인터 검증을 위해 수행되는 퍼미션 체크를 트리거하는 다양한 옵션이 있다. 한 가지 접근 방안은 재진입 검사가 디스에이블되었기 때문에 메모리에서 로드된 값이 필요하지 않더라도, 로드 요청이 여전히 발행되는 것이다. 이는 재진입 검사가 인에이블되었는지 또는 디스에이블되었는지 여부에 관계없이 스택 포인터 검증 동작을 수행하기 위해 트리거된 요청이 동일할 수 있음을 의미하므로 마이크로 아키텍처에서 구현하는 것이 더 간단할 수 있다.
그러나 또 다른 옵션은, 재진입 검사가 수행되고 그러나 재진입 검사가 수행되지 않을 때 로드 요청을 발행하여 퍼미션 체크를 트리거하고, 스택 포인터 검증 동작에 대한 퍼미션 체크를 트리거하기 위해 다른 유형의 요청이 사용될 수 있다 예를 들어, 다른 유형의 요청은 메모리 액세스를 트리거하지 않고 퍼미션 체크를 수행하도록 요청하는 주소 검사 요청일 수 있다. 이는 타겟 주소에 대한 실제 로드를 생략함으로써 성능을 향상시킬 수 있고, 이렇게 하면 시간과 전력을 절약하고 다른 메모리 액세스 동작을 위한 메모리 액세스 대역폭을 절약할 수 있다.
장치에는 예외 및 예외 리턴을 처리하기 위한 예외 제어 회로가 있을 수 있다. 예외 조건에 응답하여, 예외 제어 회로는 처리 회로의 적어도 현재 보안 도메인에 기초하여 선택된 다수의 예외 진입 트랜지션 중 하나를 수행할 수 있다(그리고 어떤 경우에는 또한 현재 모드에 기초 함). 예외 진입 트랜지션의 적어도 서브 세트에 대해, 예외 제어 회로는 적어도 하나의 스택 포인터 리지스터에 저장된 스택 포인터에 의해 식별된 스택 데이터 구조에 적어도 하나의 무결성 서명 값 중 하나를 포함하는 스택 프레임의 저장을 트리거할 수 있다. 예를 들어, 무결성 서명 값을 포함하는 스택 프레임이 저장되는 예외 진입 트랜지션의 서브 세트는 안전한 도메인에서 덜 안전한 도메인으로의 트랜지션을 포함할 수 있다.
한편, 예외 리턴 조건의 경우, 예외 리턴 조건과 관련된 적어도 하나의 보안 도메인을 기반으로 다수의 예외 리턴 트랜지션 중 하나가 선택될 수 있다. 예외 리턴 트랜지션의 적어도 서브 세트에 대해 예외 제어 회로는, 해당 예외 리턴 트랜지션을 위해 선택된 주어진 스택 데이터 구조에서 스택 프레임에 액세스하기 위한 무결성 서명 검사를 수행할 수 있고, 액세스 스택 프레임 내의 소정의 위치의 값과 적어도 하나의 무결성 서명 값 중 하나 사이에 불일치가 검출될 때 오류를 트리거하는 것을 수행할 수 있다. 따라서 예외 리턴 트랜지션의 경우, 적어도 일부 예외 리턴 트랜지션의 경우, 오류의 트리거링을 방지하기 위해 무결성 서명이 스택 데이터 구조에 존재하도록 할 필요가 있을 수 있다. 이러한 무결성 서명 값을 포함하면 공격자가 특정 시퀀스의 예외 진입을 위조하거나 트랜지션 또는 함수 호출을 리턴하거나 안전한 도메인으로 돌아갈 때 부적절한 스택 프레임이 복원되는 방식으로 리턴되는 공격으로부터 보호할 수 있다(여기서 공격자는 스택 프레임의 불일치를 사용하여, 공격자가 제어하는 덜 안전한 코드에 의해 제공되는 정보를 기반으로 선택된 안전한 도메인에서의 주소로부터 코드를 처리하도록 안전한 도메인을 트리거 할 수 있음). 무결성 서명 값을 사용하면 이러한 공격으로부터 보호하기 위해 부적절한 트랜지션 시퀀스를 검출할 수 있다.
따라서 일부 예외 리턴 트랜지션에서 무결성 서명 값은 유효한 예외 및 예외 리턴 시퀀스가 수행되었음을 나타내는 표시로 존재해야 할 수 있다(무결성 서명 값이 없으면 어떤 예외 리턴 트랜지션에서 오류가 발생할 수 있음). 반면에, 재진입 검사의 경우 스택의 소정의 위치에 있는 값이 무결성 서명 값과 일치할 때 오류가 트리거될 수 있다. 이 경우 무결성 서명 값은, 재진입을 원하지 않는 경우 동일한 함수를을 실행하는 이전에 중단된 인스턴스 다음에 특정 안전한 함수가 다시 호출되었다는 사인일 수 있다. 따라서 재진입 검사는 무결성 서명(일반적으로 스태킹이 적절하게 핸들링되었다는 사인으로 사용됨)이 검출될 때 오류를 트리거한다는 점에서 직관에 반하는 것으로 보일 수 있으며, 이는 예상과 반대이다. 본 발명은 동일한 함수의 이전에 중단된 호출 이후 함수의 재진입을 검출하는 관점에서 설명되었지만, 본 발명은 또한 제 1 함수에 대한 이전에 중단된 호출 이후에 제 2 안전한 함수의 호출되는 상이한 형태의 재진입에 대해 보호할 수 있음이 이해될 것이다. 서로 다른 함수가이 동일한 상태를 공유하고 수정하는 것이 일반적이므로 안전한 도메인으로의 함수 재진입 조합을 보호하는 것이 바람직할 수 있다.
재진입 검사가 지원되는 경우, 선택된 스택 포인터로부터 타겟 주소의 유도는 타겟 주소가 무결성 서명 값이 저장될 것으로 예상되는 선택된 스택 포인터에 상대적인 주소에 대응하도록 할 수 있다. 예를 들어 무결성 서명 값이 스택 포인터로부터의 특정 오프셋에 있는 스택 프레임의 어떤 지점에 있으면, 게이트웨이 명령에 응답하여 타겟 주소를 유도할 때 동일한 오프셋이 선택된 스택 포인터에 추가될 수 있다. 그러나 어떤 아키텍처에서는 스택 포인터 및 오프셋(지연(latency)을 증가시킬 수 있음)의 추가를 수행할 필요가 없도록. 무결성 서명 값이 스택 포인터 자체에 해당하는 스택 프레임의 위치에 저장될 수 있고, 이 경우 타겟 주소는 선택된 스택 포인터와 동일할 수 있다.
무결성 서명이 있는지 여부를 검사하는 이 기술은, 예외 진입 및 리턴 트랜지션의 특정 시퀀스의 후에 재진입 시나리오가 발생한 경우에 유용할 수 있다. 그러나 동일한 함수의 제 1호출과 후속 호출 사이의 특정 지점에서 함수 호출이 사용된 경우에도 재진입 시나리오가 발생할 수 있고, 따라서 때때로, 선택된 스택 포인터에서 파생된 타겟 주소에 대한 로드가, 수행되는 함수 호출에 대한 응답으로 메모리에 저장된 스택 프레임을 액세스할 수 있다. 함수 호출의 경우, 무결성 서명 값이 전혀 저장되지 않거나 예외 진입 트랜지션의 서브 세트에 대한 응답으로 저장된 것과 다른 무결성 서명 값이 저장될 수 있고, 또는 함수 호출에 대한 무결성 서명 값은 예외에 대한 무결성 서명 값과 비교하여 스택 포인터에 상대적인 다른 오프셋이 될 수 있다. 이러한 경우 로드된 값이 예외에 사용된 지정된 무결성 서명 값과 일치하는지 확인하는 것만으로는 모든 재진입 시나리오를 검출하는데 충분하지 않을 수 있다. 함수 호출에 무결성 서명이 사용되지 않는 어떤 예에서는, 재진입이 발생하지 않을 때 재진입 검사 오류를 부주의하게 트리거할 수 있기 때문에, 타겟 주소의 값이 무결성 서명 값과 의도하지 않게 일치하지 않도록 하는 것이 바람직할 수 있다. 이를 가능하게 하기 위해 어떤 실시 예는 함수 리턴 주소를 타겟 주소에 배치하고 실행 가능 주소가 아닌 무결성 서명 값을 선택함으로써, 함수 리턴 주소가 의도하지 않게 무결성 서명과 일치하지 않도록 보장할 수 있다. 어떤 실시 예들에서, 함수 호출에 응답하여 메모리에 스택 프레임을 저장하는 것은 프로세서에 의해 자동으로 수행될 수 있고, 덜 안전한 함수를 호출하는 보안 함수에 응답하여만 발생할 수 있다.
따라서,어떤 예들에서 재진입 검사는 또한 아키텍처 상태를 스태킹 또는 언스태킹하는 데 사용하는 스택 포인터 레지스터를 결정하기 위해, 스택 포인터 선택 값이 소정의 값을 가질 때, 오류를 트리거하는 것을 포함할 수 있다. 스택 포인터 선택 값이 소정의 값을 갖는다는 사실은 재진입이 발생하고 있다는 또 다른 표시일 수 있으므로, 재진입 검사가 인에이블된 경우 스택 포인터 선택 값이 소정의 값을 가질 때 오류를 트리거하면 재진입 검사에 대한 추가적인 보호를 제공할 수 있다.
예를 들어, 위에서 논의된 바와 같이 처리 회로는 핸들러 모드 및 스레드 모드를 지원할 수 있다. 스택 포인터 선택 값은 스레드 모드에서 프로세스 스택 데이터 구조와 메인 스택 데이터 구조 사이의 선택을 제어할 수 있다. 프로세스 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 프로세스 스택 데이터 구조는 스택 포인터 선택 값이 제 1 값을 가질 때 스레드 모드에서 발생하는 예외 조건에 응답하여 아키텍처 상태를 저장하기 위해 선택될 수 있다. 메인 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 메인 스택 데이터 구조는 스레드 모드에서 예외 조건이 발생하고 스택 포인터 선택 값이 제 2 값을 가질 때 선택될 수 있다. 핸들러 모드에서 예외 조건이 발생하면 스택 포인터 선택 값의 현재 값에 관계없이 메인 스택 데이터 구조가 사용될 수 있다. 전술한 바와 같이, 프로세스 및 메인 스택 데이터 구조의 안전하고 덜 안전한 버전이 제공될 수 있으며, 따라서 어떤 버전이 사용되는지는 예외가 발생하기 전에 수행 된 백그라운드 처리와 관련된 보안 도메인에 따라 달라질 수 있음을 알 수 있을 것이다.
따라서, 재진입 검사를 위해 스택 포인터 선택 값이 전술한 제 2 값을 가질 때, 오류가 일부 예에서 트리거될 수 있으며, 이는 스레드 모드에 대해 메인 스택 데이터 구조가 사용되어야 함을 나타낸다. 다시 말하지만, 이것은 재진입이 일어나고 있다는 사인일 수 있다. 재진입 검사가 수행되고 스택 포인터 선택 값이 제 2 값을 가질 때, 게이트웨이 명령에 대한 응답으로 오류를 트리거함으로써, 재진입에 대한 아키텍처 방어를 제공하여 코드 개발을 단순화하고 이에 따라, 소프트웨어에서 재진입을 처리하려는 시도에 기인한 보안 취약성의 기회를 감소시킨다.
특히, 이 접근 방안은 안전한 핸들러 모드 예외 진입 트랜지션에 대한 적어도 하나의 안전한 스레드 모드에 응답하여, 예외 제어 회로가 스택 포인터 선택 값을 제 2 값으로 업데이트 할 수 있는 아키텍처에서 유용할 수 있다. 이는, 예외가 안전한 도메인에서 안전한 도메인으로의 트랜지션을 트리거할 때, 아키텍처 레지스터 상태 저장/삭제 및 전술한 무결성 서명 값 저장 등과 같은, 안전한 도메인에서 덜 안전한 도메인으로 트랜지션할 때 수행되는 특정 보호 조치를 생략할 수 있다는 사실을 악용할 수 있는 추가적인 유형의 보안 공격에 대한 방어로 취해진 조치일 수 있다. 이러한 보호 조치를 생략하면 성능이 향상될 수 있으며, 시스템이 이미 안전한 도메인에 있고 신뢰할 수 있기 때문에 안전한 스레드 모드에서 안전한 핸들러 모드로 트랜지션할 때 정당화될 수 있지만 공격자가 부적절한 예외 시퀀스를 위조할 수 있는 경우 안전한 스레드 모드로 돌아갈 때 무결성 서명이 없는 스택 프레임에 액세스할 수 있도록 함수 진입 및 리턴 조건에 따라 일부 보안 취약점이 발생할 수 있다. 스레드 모드는 일반적으로 프로세스 스택 데이터 구조에 액세스할 것으로 예상되지만, 핸들러 모드 예외 진입 트랜지션을 안전하게 하는 적어도 하나의 안전한 스레드에 대한 응답으로 스택 포인터 선택 값을 제 2 값으로 스위칭하는데, 이는 처리 회로가 이러한 트랜지션의 부적절한 시퀀스 중 하나를 통해 안전한 스레드 모드로 돌아가고 스택 포인터 선택 값이 여전히 제 2 값을 갖는다면, 프로세스 스택 데이터 구조 대신 메인 스택 데이터 구조가 액세스될 수 있으며, 이로 인해 다른 보안 검사가 실패할 수 있다. 스택 포인터 선택 값을 두 번째 값으로 설정하는 것은, 중간(intervening) 함수 호출이, 때때로 함수 호출의 이전 인스턴스가 완료되기 전에 덜 안전한 도메인으로부터 함수가 두 번째로 호출되는 재진입 시나리오를 발생시키는 트랜지션 시퀀스의 일부로 사용되기 때문에, 재진입 검사를 위해 악용될 수 있고, 트랜지션 시퀀스는 스택 포인터 선택 값이 제 2 값으로 설정되어 핸들러 모드 예외 진입 트랜지션을 안전하게 하는 안전한 스레드 모드를 적어도 하나 포함한다.
전술한 재진입 검사는 안전한 도메인에서의 처리에서 안전한 도메인과 연관된 명령 주소를 갖는 게이트웨이 명령으로의 프로그램 흐름의 변경이 있을 때 생략될 수 있다. 따라서 재진입 검사는 덜 안전한 도메인에서 안전한 메모리에 저장된 게이트웨이 명령으로의 트랜지션에 대해 수행될 수 있지만, 프로그램 흐름이 안전한 도메인에서 이러한 게이트웨이 명령으로 스위칭될 때는 필요하지 않는다. 위에서 논의한 바와 같이, 무결성 서명 값의 저장은 안전한 도메인에서 덜 안전한 도메인으로의 트랜지션이 있을 때만 수행될 수 있으며, 따라서 안전한 도메인에서 게이트웨이 명령으로의 프로그램 흐름 스위치에서 스택 데이터 구조는 무결성 서명 값을 포함하지 않을 수 있다. 이는 재진입 검사에서 선택된 스택 포인터에서 파생된 주소에서의 값이 보안 함수가 다른 보안 함수를 호출할 때 임의의 값이 될 수 있음을 의미한다. 안전한 도메인에서부터 안전한 도메인과 관련된 주소에 저장된 주소에 저장된 게이트웨이 명령으로의 프로그램 흐름 변경에 대한 재진입 검사를 생략함으로써, 스택의 값이 실수로 무결성 서명과 일치하는 경우 실수로 오류가 트리거되는 것을 방지한다.
보안 검사를 트리거하는 것 외에도 게이트웨이 명령은 덜 안전한 도메인에서 안전한 도메인으로 현재 보안 도메인의 스위치를 트리거하는 함수도 가질 수 있다. 따라서 주어진 프로그램 흐름 변경 이후의 타겟 명령이 게이트웨이 명령인 경우, 적어도 하나의 보안 검사(예, 인에이블된 경우의 재진입 검사 및/또는 도메인간의 경계 방침에 대한 다른 보안 검사)가 수행될 수 있고, 적어도 하나의 보안 검사가 통과되면 처리 회로는 덜 안전한 도메인에서 안전한 도메인으로 현재 보안 도메인의 스위치를 트리거 할 수 있다
위에서 논의된 예에서, 프로그램 흐름의 주어진 변경 후에 게이트웨이 명령에 응답하여 트리거되는 스택 포인터 검증 동작은, 선택된 스택 포인터로부터 파생된 타겟 주소에 대한 로드가 허용되는지의 여부를 검사하는 퍼미션 체크의 트리거링을 포함할 수 있다. 이 접근 방안은 스택 포인터 검증 동작(예, 로드 요청의 발행)을 수행할 때 오버 헤드의 일부를 위에서 제공된 이유에 유용할 수 있는 재진입 검사와 공유할 수 있다는 장점이 있다. 또한 안전한 스레드 모드로 호출할 때 스택 포인터 선택 값이 제 2 값을 갖는 특정 유효한 사용 사례가 계속 지원될 수 있음을 의미다. 어떤 실시 예에서, 재진입 검사가 수행되면 스택 포인터 선택 값이 여전히 검사될 수 있고, 스택 포인터 선택 값이 제 2 값이면 오류가 발생할 수 있다. 재진입 검사가 디스에이블 된 경우 재진입 검사가 수행되지 않을 수 있다. 또한 안전한 도메인으로부터 메모리의 안전한 영역에 저장된 게이트웨이 명령으로의 프로그램 흐름의 안전한에서 안전한으로의 변경에 대해서는 재진입 검사가 수행되지 않을 수 있다.
그러나, 다른 예에서, 프로그램 흐름의 주어진 변경이 검출되고 타겟 명령이 게이트웨이 명령인 경우, 스택 포인터 검증 동작은 스택 포인터 선택 값이 제 2 값을 갖는 경우 오류를 트리거링하는 것을 포함할 수 있다. 이것은 부적절한 코드 시퀀스를 수행하도록 안전한 도메인을 트리거하려는 시도에서 안전한 메인 스택 포인터를 조작하는 것을 목표로 하는 공격으로부터 보호하는 또 다른 방법을 제공할 수 있다. 재진입 검사가 수행될 때는 스택 포인터 선택 값의 검사가 수행되지만 재진입 검사가 생략될 때는 수행되지 않는 위에서 논의된 제 1 접근 방안과 달리, 제 2 접근 방안에서는 스택 포인터 선택 값은 재진입 검사의 수행 여부에 관계없이 게이트웨이 명령에 응답하여 검사될 수 있다. 따라서, 이것은 프로그램 흐름의 주어진 변경 후에 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검사하기 위한 대안적인 실시 예를 제공한다. 안전한 도메인에 대한 유효한 스위치에 존재하는 것으로 보장되는 게이트웨이 명령에 대한 응답으로, 이 동작을 트리거함으로써(게이트웨이 명령이 존재하지 않는 경우, 후속 명령을 실행하기 전에 오류가 트리거됨), 이는 스택 포인터 선택 값을 확인하는 데 필요한 동작은 게이트웨이 명령 식별에 대한 응답으로 명령 디코더에 의해 트리거될 수 있기 때문에. 마이크로 아키텍처 설계를 더 간단하게 만든다.
스택 포인터 검증 동작의 어떤 변형이 사용되는지에 관계없이, 제어 흐름의 주어진 변경 후에 게이트웨이 명령을 만나는 모든 인스턴스에 대해 스택 포인터 검증 동작이 트리거될 필요는 없다. 어떤 경우에는, 처리 회로가 프로그램 흐름의 주어진 변경시에 소정의 동작 모드에 있을 때 스택 포인터 검증 동작이 트리거될 수 있다. 예를 들어, 소정의 모드는 스레드 모드일 수 있다. 스택 포인터 검증 동작은 처리 회로가 소정의 동작 모드가 아닌 동작 모드에 있을 때 생략될 수 있다. 위에서 논의한 유형의 스택 포인터 기반의 공격은 스레드 모드로 들어갈 때 가장 가능성이 높고 핸들러 모드로 들어갈 때 이슈가 되지 않을 수 있기 때문에 유용할 수 있다. 스택 포인터 검증 동작과 관련된 검사는 핸들러 모드에 있을 때 어쨌든 통과될 수 있지만(스택 포인터 검증 동작이, 선택된 스택 포인터로부터 유도된 타겟 주소의 퍼미션 체크를 트리거하는 것을 포함하는, 그리고 핸들러 모드로부터의 액세스가, 핸들러 모드가 기본적으로 권한이 있는 것으로 정의되어 있어 액세스 퍼미션의 권한 기반의 검사를 일반적으로 통과할 수 있는, 적어도 하나의 실시 예들에 대해) 성능상의 이유로, 처리 능력을 절약하고 다른 목적을 위해 리소스를 확보할 수 있도록 하기 위해 스택 포인터 검증 도작을 트리거링하는 것을 생략하는 것이 바람직하다. 예를 들어, 스택 포인터 검증 동작이 로드 요청의 트리거링을 포함하는 실시 예에서, 처리 회로가 핸들러 모드에 있을 때 스택 포인터 검증 동작을 생략하면 다른 메모리 액세스에 사용될 수 있는 로드 큐의 슬롯을 해제(free-up) 할 수 있다. 따라서 스택 포인터 검증 동작을, 스레드 모드와 같은 소정의 모드로 제한하면 성능이 향상될 수 있다. 마찬가지로 다중 중첩 예외 핸들러를 지원할 필요가 있기 때문에, 핸들러 모드에서 안전한 재진입에 대한 지원이 필요할 수 있다. 따라서 어떤 실시 예는 핸들러 모드에서 재진입 검사를 억제할 수 있고,. 핸들러 모드 코드의 경우 이 코드가 이미 재진입에 대해 안전할 것으로 예상될 수 있으므로, 아키텍처 수준에서 재진입에 대한 추가적인 보호가 필요하지 않다.
명령 실행을 위한 명령 실행 환경을 제공하기 위해 호스트 데이터 처리 장치를 제어하기 위한 시뮬레이터 컴퓨터 프로그램이 제공될 수 있다. 컴퓨터 프로그램은 처리 프로그램 로직 및 메모리 액세스 검사 프로그램 논리를 포함 할 수 있으며, 이는 위에서 논의된 처리 회로 및 메모리 액세스 검사 회로에 기능적으로 대응한다. 또한, 프로그램은 컴퓨터 프로그램에 의해 시뮬레이션 된 타겟 아키텍처의 시뮬레이션된 아키텍처 레지스터에 대한 액세스를 시뮬레이션 하기 위해 호스트 장치의 메모리에 대한 액세스를 제어하는 레지스터 에뮬레이션 프로그램 로직을 가질 수 있다. 시뮬레이션된 아키텍처 레지스터는 전술한 바와 같이 적어도 하나의 스택 포인터 레지스터를 포함할 수 있다. 처리 프로그램 로직은 시뮬레이터에서 실행되는 타겟 코드의 게이트웨이 명령에 응답하여 스택 포인터 검증 동작을 트리거할 수 있다. 따라서, 이러한 시뮬레이터 컴퓨터 프로그램은, 비록 시뮬레이터 컴퓨터 프로그램을 실행하는 호스트 컴퓨터에는 이러한 기능을 제공하는 실제 하드웨어가 없을 수 있음에도 불구하고, 시뮬레이터 컴퓨터 프로그램에서 실행되는 소프트웨어에 실제 하드웨어 장치가 제공하는 것과 유사한 명령 환경을 제공할 수 있다. 위에서 논의된 하드웨어 아키텍처의 기능은 명령어 세트 또는 데이터 구조와 같은 프로그램 로직을 제공함으로써 에뮬레이션 될 수 있으며, 이는 일반 호스트 컴퓨터가, 실제로 이러한 기능을 가진 장치에서 달성될 수 있는 결과와 호환되는 방식으로, 위에서 논의된 특징을 가진 장치에서 실행되도록 의도된 타겟 코드를 실행할 수 있도록 한다. 호스트 데이터 처리 장치를 제어하기 위한 시뮬레이터 컴퓨터 프로그램은 저장 매체에 저장될 수 있다. 이 저장 매체는 비 일시적 저장 매체일 수 있다.
도 1은 메모리 시스템(6)으로부터 페치된 명령에 응답하여 데이터 처리를 수행하기 위한 처리 회로(4)를 포함하는 데이터 처리 시스템(2)의 예를 개략적으로 도시한다. 메모리 시스템(6)은 캐시(예, 하나 이상의 레벨의 데이터 캐시 및/또는 명령 캐시)뿐만 아니라 메인 메모리를 포함한다. 처리 회로(4)는, 다수의 파이프라인 단계(stage)를 포함하는 처리 파이프라인을 포함하는데, 이는 예를 들어 메모리 시스템(6)으로부터 실행될 명령을 페치하기 위한 페치 단계(8), 데이터 처리를 수행하기 위해 나머지 파이프라인 단계를 제어하기 위한 제어 신호를 생성하여 페치된 명령을 디코딩하는 디코딩 단계(10), 디코딩된 명령을 실행하여 데이터 처리 동작을 수행하는 실행 단계(12)를 포함한다. 레지스터(14)는 파이프 라인(4)에 의해 처리되는 명령에 대한 입력 피연산자(operand)를 저장하기 위해 제공된다. 레지스터(14)는 정수 값을 저장하기 위한 범용(정수) 레지스터(16), 부동 소수점 값을 저장하기 위한 부동 소수점 레지스터(18) 및 처리 회로(4)에 의한 명령의 실행 및 예외 핸들링, 보안 검사 등과 같은 다른 동작을 제어하기 위한 제어 파라미터를 저장하기 위한 제어 레지스터(20)를 포함한다.
도 1에 도시된 파이프 라인 단계는 단순화된 표현이며, 레지스터 이름 변경(renaming)을 수행하기 위한 이름 변경 단계, 실행을 기다리는 명령을 큐잉하고 그에 필요한 피연산자가 가용할 때 실행을 위해 이를 발행하는 발행(issue) 단계, 및 명령 커밋(commitment)을 핸들링하고 결과를 레지스터(14)에 다시 쓰는 다시 쓰기 단계와 같은, 다른 유형의 파이프 라인 단계도 제공될 수 있음을 알 수 있을 것이다. 파이프 라인은 순서가 맞거나 순서가 맞지 않는 파이프 라인일 수 있다.
시스템(2)은 또한 메모리 주소 공간의 다양한 영역에 대해 지정된 속성(attribute) 데이터에 기초하여 메모리 시스템(6)에 대한 액세스가 허용되는지 여부를 검사하기 위한 메모리 액세스 검사 회로(22)를 포함한다. 메모리 액세스 검사 회로는 메모리 주소 공간의 각각의 영역과 관련된 보안 도메인을 정의하는 보안 도메인 정의 데이터를 저장하기 위한 보안 속성 유닛(SAU)(24)을 포함한다. 보안 속성 데이터에 기초하여, 보안 속성 유닛(24)은 처리 회로의 현재 동작의 보안 도메인 및 메모리 액세스의 타겟 주소를 포함하는 영역과 연관된 보안 도메인에 따라, 메모리 액세스가 허용되는지 여부를 확인할 수 있다. 다른 실시 예에서, SAU는 데이터를 정의하는 보안 도메인을 직접 저장하지 않을 수 있지만, 대신 메모리 액세스 검사를 수행하기 위해 다른 곳에 저장된 데이터를 정의하는 보안 도메인에 액세스 할 수 있다. 어떤 시스템에서 데이터를 정의하는 보안 도메인은 메모리 시스템(6)에 저장되거나, 시스템(2)의 다른 곳에서의 구성(configuration) 레지스터일 수 있다. 처리 회로(4)는 현재 동작의 보안 도메인에서 동작할 수 있는데, 이는 현재 실행중인 명령의 주소와 관련되는 보안 도메인에 일반적으로 대응할 수 있다(일부 예외가 있을 수 있음, 예, 도메인 간 핸들링 트랜지션을 할 때). 명령이 SAU 24에 의해 한 도메인에 있는 것으로 지정된 영역의 주소에서 다른 도메인과 연관된 영역의 주소로 분기될 때, 이것은 처리 회로(4)가 동작하고 있는 현재 보안 도메인의 트랜지션을 트리거할 수 있다. 다른 실시 예에서, 이러한 분기는 현재 보안 도메인의 트랜지션을 직접 트리거하지 않을 수 있지만, 대신 게이트웨이 명령이 존재하는지 여부와 같은 추가적인 보안 검사를 트리거할 수 있고, 이러한 실시 예에서 이는 현재 보안 도메인에서 변경을 트리거하는 게이트웨이 명령 자체일 수 있다. 일반적으로, 보안 도메인에서 동작하는 동안, 처리 회로는 안전한 도메인 및 덜 안전한 도메인 모두와 관련된 메모리 영역의 데이터에 액세스할 수 있는 반면, 덜 안전한 도메인에서 동작할 때 처리 회로는 덜 안전한 도메인과 관련된 영역의 데이터에 액세스할 수 있지만, SAU 24가 안전한 도메인과 관련된 것으로 지정하는 주소 공간 영역의 데이터에 액세스하는 것은 허용되지 않을 수 있다. 이를 통해 덜 안전한 도메인에서 동작하는 코드의 무단 액세스로부터 민감한 데이터를 보호할 수 있다.
또한, 메모리 액세스 검사 회로는 메모리 시스템(6)에 대한 메모리 액세스가 액세스 퍼미션(permission)을 충족하는지 여부를 검사하는 메모리 보호 유닛(MPU)(26)을 포함할 수 있으며, 이는 예를 들어 처리 회로(4)의 어떤 권한 레벨이 주어진 메모리 영역을 지정하거나, 주소 공간의 메모리 영역이 읽기 및 쓰기 동작 모두에 의해 액세스될 수 있는지 또는 쓰기가 금지된 읽기 전용 영역인지 여부를 지정할 수 있다. MPU(26)에 의해 사용되는 액세스 퍼미션은 예를 들어 권한이 낮은 프로세스(예, 애플리케이션)가 액세스, 그리고(일기 전용 또는 읽기/쓰기) 방법을 할 수 있는 메모리 영역을 제어하기 위해 더 많은 권한이 있는 프로세스(예, 하이퍼바이저 또는 운영 체제)에 의해 지정될 수 있다. MPU(26)에 의해 제공되는 퍼미션은 SAU(24)에 의해 제공된 퍼미션과 직교(orthogonal) 할 수 있으므로, 주어진 메모리 액세스가 허용되려면 MPU(26)와 SAU(24) 모두에 대해 정의된 액세스 퍼미션을 기반으로 검사를 통과해야 한다. MPU(26)가 도 1에서 단일 엔티티로 도시되어 있지만, 어떤 예에서는 보안 도메인 중 하나와 각각 연관된 별도의 안전한 및 덜 안전한 MPU(26)가 제공될 수 있으므로, 현재 도메인이 안전한 도메인인지 덜 안전한 도메인인지에 따라 주어진 메모리 영역에 대해 다른 메모리 액세스 퍼미션이 지정될 수 있다.(예, 영역은 덜 안전한 도메인에서만 읽혀질 수 있지만 안전한 도메인에서는 읽기 및 쓰기가 가능함).
따라서, 도 2에 도시된 바와 같이, 처리 회로(4)는 적어도 하나의 안전한 도메인(S) 및 덜 안전한 도메인(LS)을 포함하는 다수의 보안 도메인 중 하나에서 데이터 처리를 수행하는 것을 지원할 수 있다. 도 2는 보안 도메인이 오직 두 개인 시스템을 보여 주지만, 서로 다른 보안 레벨과 관련된 세 개 이상의 도메인을 제공할 수 있다.
또한, 주어진 보안 도메인 내에서, 도 2에 도시된 바와 같이 처리 회로는 예외 처리를 위한 핸들러 모드(H)와 백그라운드 처리를 위한 스레드 모드(T)를 포함하여 다수의 모드 중 하나에서 데이터 처리를 수행할 수 있다. 도 1에 도시된 바와 같이, 예외 제어 회로(28)는 예외 진입 트랜지션 및 예외 리턴 트랜지션을 포함하는 예외 핸들링 동작의 제어, 그리고 그러한 트랜지션 동안 아키텍처 상태의 임의의 저장 / 복원의 제어가 제공될 수 있다. 예외 핸들링을 전용 핸들러 모드 H로 분리하면, 처리 회로에서 액세스할 수 있는 레지스터의 관리를 단순화하는 데 유용할 수 있(예, 예외 핸들링에 사용되는 어떤 레지스터는 핸들러 모드 H에서 액세스될 수 있지만 스레드 모드 T에서는 액세스될 수 없을 수도 있음). 일반적으로, 핸들러 모드 H에서 동작할 때, 기본적으로 처리 회로(4)는 더 권한이 있는 동작 모드를 갖는 것으로 가정될 수 있어서, 메모리 및 레지스터에 대한 액세스는 최소 권한 레벨 이외의 특정 레벨의 권한 레벨에 따라 제어되고, 스레드 모드 T에 있는 동안 처리 회로는 제어 레지스터(20)에 저장된 다른 아키텍처 상태에 따라 다수의 다른 권한 레벨 중 하나를 가질 수 있다.
따라서, 도 2에 도시된 바와 같이, 처리 회로(4)에서 동작하는 보안 도메인 및 모드의 조합은, 처리 회로(4)에 의해 처리가 수행되는 방법의 양상을 결정할 수 있다. 도 2는 다음을 포함하는 이러한 모드의 4 가지 다른 조합을 보여준다. :
? 안전한 스레드 모드(안전한 도메인 및 스레드 모드 조합의 약어)
? 덜 안전한 스레드 모드(덜 안전한 도메인과 스레드 모드의 조합)
? 안전한 핸들러 모드(안전한 도메인과 핸들러 모드의 조합) 및
? 덜 안전한 핸들러 모드(덜 안전한 도메인과 핸들러 모드의 조합).
아래에서 설명하는 것처럼, 예외 조건 및 예외 리턴 조건에 대한 응답으로, 수행되는 동작은 보안 도메인과 모드의 이러한 각 조합간에 수행되는 특정 트랜지션에 따라 달라질 수 있다.
도 3은 처리 시스템의 레지스터(14) 중 일부를 도시한다. 이 표현은 제공될 수 있는 모든 가능한 레지스터를 보여주지 않으며, 다른 많은 레지스터도 제공될 수 있음을 이해할 것이다. 도 3에 도시된 바와 같이, 레지스터(14)는 범용 레지스터(16), 부동 소수점 레지스터(18) 및 다수의 제어 레지스터(20)를 포함한다(제어 레지스터 중 오직 일부만 도 3에 도시되어 있으며 다른 것도 제공될 수 있다). 이 예에는 R0에서 R15로 레이블이 지정된 16 개의 범용 레지스터와 S0에서 S31로 레이블이 지정된 32 개의 부동 소수점 레지스터가 있다. 어떤 실시 예에서 부동 소수점 레지스터(18)는 또한 부동 소수점 플래그 값, 부동 소수점 라운딩 모드 등을 포함할 수 있는 부동 소수점 상태(status) 및 제어 레지스터(FPSCR)를 포함할 수 있다. 어떤 실시 예에서 범용 레지스터(16)는 또한, 정수 플래그 값 및 현재 컨텍스트와 관련된 기타 정보를 포함할 수 있는 프로그램 상태 레지스터(XPSR)를 포함할 수 있다.
범용 레지스터 R0 ~ R15 중 레지스터 R0 ~ R12는 산술 또는 논리 명령을 위한 입력 피연산자 또는 메모리 시스템(6)에 액세스하기 위한 로드 / 저장 명령의 주소를 파생하는 데 사용되는 피연산자와 같은, 범용 피연산자를 저장하는 데 사용된다. 이러한 범용 피연산자에 범용 레지스터 R13 ~ R15를 사용할 수 있지만, 다른 제어 함수도 제공한다.
레지스터 R15는 처리 회로(4)에 의해 도달한 프로그램의 현재 지점 표시를 제공하는 프로그램 카운터를 저장하는 프로그램 카운터(PC) 레지스터로 사용된다. 프로그램 카운터 레지스터는 메모리 시스템에서 페치되는 명령을 결정하기 위해 페치 단계(8)에 의해 사용될 수 있다.
레지스터 R14는 함수가 호출될 때 함수 리턴 주소를 저장하는데 사용되는 링크 레지스터(LR)로 사용되므로, 함수와 관련된 처리가 완료되면, 링크 레지스터에서의 주소가, 함수 호출 명령 이후 프로그램 흐름을 다음 명령으로 다시 리디렉션 하는데 사용될 수 있다. 또한 링크 레지스터는, 해당 예외 리턴 조건이 발생했을 때 아키텍처 상태(state)의 언스택킹을 제어하기 위한 정보를 제공하는 예외 리턴 값을 저장하기 위해, 예외 발생시에 사용될 수 있다. 이는 이하에서 상세히 설명될 것이다.
레지스터 R13은 메모리에서 스택 데이터 구조의 주소를 나타내는 스택 포인터를 제공하는 스택 포인터 레지스터로 사용된다. 스택 데이터 구조는 예외 조건 발생시 아키텍처 상태를 저장하고 예외 리턴 조건 발생시 아키텍처 상태를 복원하는 데 사용될 수 있다. 도 3에서 도시된 바와 같이, 레지스터 R13은 현재 보안 도메인 및 처리 회로의 모드에 따라 R13이 지정 될 때 선택되는 특정 뱅크 레지스터와 함께, 레지스터 지정자(specifier) R13을 사용하여 각각 액세스 할 수 있는, 다수의 다른 물리적 레지스터가 하드웨어에 제공되도록 뱅크된다.
예를 들어 뱅크된 스택 포인터 레지스터는, 안전한 메인 스택 포인터 레지스터(MSP_S), 안전한 프로세스 스택 포인터 레지스터(PSP_S), 덜 안전한 메인 스택 포인터 레지스터(MSP_LS) 및 덜 안전한 프로세스 스택 포인터 레지스터(PSP_LS)를 포함할 수 있다. 일반적으로 안전한 스택 포인터 레지스터 MSP_S 및 PSP_S는 안전한 도메인 S에 있을 때 처리 회로(4)에 액세스될 수 있지만, 덜 안전한 도메인 NS에 있을 때는 액세스될 수 없다. 덜 안전한 스택 포인터 레지스터 MSP_LS 및 PSP_LS는 덜 안전한 도메인에서 액세스될 수 있다. 일반적으로, 프로세스 스택 포인터 PSP_S 또는 PSP_LS는 스레드 모드 T 내에서 사용될 것으로 예상되며, 메인 스택 포인터 MSP_S 또는 MSP_LS는 핸들러 모드 H 내에서 사용될 것으로 예상된다. 예외 핸들러가 메인 스택에 남길 수 있는 데이터는 일반적으로 예외 리턴 후 스레드 모드에서 실행중인 스레드에 액세스될 수 없음을 의미하기 때문에, 핸들러 모드와 스레드 모드 각각에 대해 별도의 메인 및 프로세스 스택을 제공하면 예외 핸들러 코드를 더 간단하게 개발할 수 있다. 이는 예외 핸들러가 메인 스택 데이터 구조에서 모든 데이터를 지우는 명령을 포함할 필요가 없기 때문에, 예외 핸들러 코드의 개발을 단순화 할 수 있다. 그러나, 아래에서 더 자세히 논의되는 바와 같이, 스레드 모드 T에 있을 때 메인 스택 포인터 또는 프로세스 스택 포인터가 사용되어야 하는지 여부를 제어하는 제어 레지스터(32)에 저장된 스택 포인터 선택 값(30)과 함께, 스레드 모드 T의 일부 프로세스가 메인 스택 포인터를 사용하는 것이 가능하다. 따라서 어떤 스택 포인터가 사용되어야 하는지는, 현재 모드(스레드 또는 핸들러)와 현재 도메인(안전한 또는 덜 안전한)의 조합뿐만 아니라 스택 포인터 선택 값(30)에 기초하여 결정될 수 있다. 도 3에 도시된 바와 같이, 스택 포인터 선택 값(30)은 보안 상태(state) 간에 뱅킹될 수 있으며, 따라서 안전한 그리고 덜 안전한 도메인은, 스택 포인터 선택 값(30)의 별도의 안전한 및 덜 안전한 버전 SPSEL-S, SPSEL-LS를 사용하여, 안전한 그리고 덜 안전한 스레드 모드가 각각 메인 스택 포인터를 사용하는지 여부를 독립적으로 제어할 수 있다.
일반적으로, 핸들러 모드 H에서 예외 핸들러 동작 또는 스레드 모드 T에서 스레드 동작의 본체(body) 내에서, 안전한 또는 안전하지 않은 스택 포인터의 선택은 처리 회로(4)가 코드를 실행하는 현재 보안 도메인에 따라 달라질 수 있다. 예외 진입 및 리턴의 경우, 상태 스태킹 및 언스태킹은, 예외가 발생하기 전에 실행 중이던 백그라운드 코드의 보안 도메인과 연관된 스택 포인터에 의해 식별되는 스택으로부터 수행된다.
제어 레지스터(32)는 또한, 스레드 모드에서 실행되는 코드가 권한이 있는지 권한이 없는지를 제어하는 권한 제어 값(31)을 포함할 수 있다. 안전한 그리고 덜 안전한 도메인에 대해 권한 제어 값이 다르게 설정될 수 있다(예, 안전한 스레드 모드는 권한이 없는 반면, 덜 안전한 스레드 모드는 권한이 있을 수 있으며 그 반대의 경우도 가능). 대안적으로, 안전한 그리고 덜 안전한 스레드 모드 모두 동일한 권한 레벨에서 동작할 수 있다. 권한 제어 값(31)은 단지 하나의 예일 뿐이며, 안전한 / 덜 안전한 스레드 모드에서 코드에 할당된 권한 레벨을 제어하기 위해 제어 레지스터에 저장된 아키텍처 상태를 사용하는 다른 방법이 있을 수 있음을 알 수 있을 것이다. 도 3의 예에서, 권한 제어 값(31)은 안전한 및 덜 안전한 도메인에서 각각 스레드 모드에 의해 사용되는 권한 레벨을 제어하기 위해 개별적으로 안전한 및 덜 안전한 권한 제어 값 PRIV-S 및 PRIV_LS가 제공되도록 뱅크된다. 그러나 또 다른 접근 방안은 도메인 트랜지션시 스위치되는 단일 제어 비트를 제공하는 것이다.
도 3에 도시된 바와 같이, 제어 레지스터(20)는, 처리 회로가 아래에서 설명되는 바와 같이 안전한 게이트웨이 명령에 응답하여 재진입 검사를 수행해야 하는지 여부를 지정할 수 있는 재진입 인에이블 구성 표시자(36)를 포함하는 구성 데이터를 저장할 수 있는 구성 레지스터(34)를 포함할 수 있다.
또한 제어 레지스터(20)는 안전한 스택 포인터(MSP_S 및 PSP_S)에 의해 가리키는 안전한 스택 데이터 구조가 성장할 수 있는 정도에 제한을 제공하는 제한(limit) 주소를 지정하는 데 사용되는, 하나 이상의 안전한 스택 포인터 제한 레지스터(38, 39)를 포함할 수 있다. 이 예에는 2 개의 제한 레지스터가 있는데, 하나는 안전한 메인 스택 포인터 MSP_S 를 위한 39 개와 안전한 프로세스 스택 포인터 PSP_S를 위한 38 개이다. 각 제한 레지스터 내의 제한 주소를 사용하여 스택 데이터 구조가 확장될 수 있는 범위가 제한될 수 있다. 처리 회로 또는 예외 제어 회로(28)가 메인 또는 프로세스 안전한 스택 데이터 구조가 해당 제한 레지스터(38, 39)의 제한 주소를 넘어 확장되었음이 감지되면(또는 제한 주소를 초과하는 값으로 스택 포인터를 업데이트하려는 시도를 감지함), 그 후 예외 제어 회로(28)는 자체적으로 예외를 트리거할 수 있는 오류를 시그널링하도록 트리거 할 수 있고, 예외 핸들러는 보안을 보장하기 위해 일부 복구(recovery) 조치 또는 다른 조치를 취함으로써 오류에 응답할 수 있다. 이는 공격자가 너무 많은 예외를 발생시키거나 너무 많은 함수를 호출하여 보안 조치를 깰 수 없도록 하는 데 유용할 수 있어, 스택 데이터 구조가 다른 영역의 데이터를 손상시킬 수 있는 다른 데이터에 사용되는 영역으로 확장된다.
예외 진입 및 리턴 핸들링의 한 가지 측면은 아키텍처 상태(state)의 스태킹 및 언스태킹이다. 예외 조건이 발생하면, 레지스터(14)에 저장된 일부 아키텍처 상태를 메모리에 저장해야 할 수 있으므로, 예외가 진입된 후 실행된 예외 핸들러가 해당 레지스터를 덮어 쓰더라도, 레지스터의 이전 내용은 나중에 예외가 발생하기 전에 수행중인 처리로 돌아가려는 경우에 메모리에서 복원된다. 도 3에 도시된 뱅크된 스택 포인터 레지스터 중 하나가 가리키는 스택 데이터 구조를 사용하여 이 상태를 저장할 수 있다.
성능상의 이유로, 이러한 예외 진입 이벤트에 대한 응답으로 저장되어야 하는 레지스터를 "호출자" 레지스터와 "피 호출자" 레지스터라고 하는 두 그룹으로 나누는 것이 유용할 수 있다. 호출자 레지스터는 하드웨어로 구현된 예외 제어 회로(28)가 스택에 저장할 책임이 있는 레지스터이다. 따라서 예외 핸들러의 소프트웨어가 호출자 레지스터를 스택 데이터 구조에 저장하는 명령을 포함할 필요가 없다.
도 4에 도시된 바와 같이, 호출자 레지스터는 범용 레지스터의 서브 세트를 포함할 수 있다. 이 예에서 호출자 상태(state)에는 범용 레지스터 R0, R1, R2, R3 및 R12, 링크 레지스터 LR(R14), 예외 처리 후 처리가 리턴될 리턴 주소 표시, 그리고 조건부 명령의 결과를 제어하기 위한 조건 코드를 제공할 수 있는 프로그램 상태(status) 레지스터 XPSR를 포함한다. 레지스터 상태(state)가 호출자 레지스터에 포함될 수 있는 하나의 특정 예일 뿐임을 알 수 있을 것이다.
도 4의 오른쪽 부분의 기본 스택 프레임에 도시된 바와 같이, 부동 소수점 레지스터(18)를 사용하지 않는 프로세스의 경우, 기본 스택 프레임은 특정 정수 레지스터(16) 또는 제어 레지스터(20) 및 리턴 주소만을 포함할 수 있다. 그러나 예외 이전에 실행되는 프로세스가 부동 소수점 레지스터 18도 사용하는 경우, 도 4의 왼쪽에 있는 확장된 스택 프레임에 도시된 것처럼, 호출자 레지스터는 부동 소수점 레지스터(18)의 서브 세트 S0-S15를 포함할 수도 있다. 부동 소수점 컨텍스트는 부동 소수점 연산(operation)의 처리를 제어하는데 사용되는 부동 소수점 상태(state) 제어 레지스터 FPSCR과 같은 추가적인 제어 레지스터를 포함할 수도 있다.
도 4의 중간 부분에 도시된 바와 같이, 확장된 부동 소수점 스택 프레임이 추가 부동 소수점 컨텍스트를 위해 예약된 공간을 포함할 수도 있지만, 그러나 실제로 예외 진입을 핸들링 할 때 스택의 이 예약된 공간에 부동 소수점 컨텍스트가 저장되지는 않는다. 대신에, 예외에 대한 응답으로 공간이 스택에 예약되어 예외 진입 다음에 생성된 새 스택 포인터가 예측될 수 있지만, 이 예약된 공간에 대한 부동 소수점 컨텍스트의 실제 저장은 처음 부동 소수점 상태가 필요할 때까지 연기되는, 지연(lazy) 부동 소수점 컨텍스트 저장이 사용될 수 있다. 이러한 방식으로, 예외 핸들러가 부동 소수점 컨텍스트에 액세스하기 전에 후속 예외 리턴이 발생하면, 부동 소수점 레지스터(18)에서 메모리로 부동 소수점 컨텍스트를 저장하는 데 소요되는 시간과 에너지를 피할 수 있다.
따라서 도 4에 도시된 스택 프레임의 모든 예는, 호출자 레지스터(첫번째 스택 프레임)에서 저장된 상태를 포함하지만 피 호출자 레지스터와 관련된 상태는 포함하지 않는, 호출자 레지스터 스택 프레임의 예이다.
호출자 스택 프레임이 예외 이벤트에 대한 응답으로 예외 제어 회로(28)에 의해 스택에 저장된 후, 예외 핸들링 코드의 실행이 시작될 수 있으며, 예외 핸들러 소프트웨어는, 그 실행 중에 이 상태를 덮어쓰여질 것임을 알고 있는 경우, 추가 피 호출자 레지스터의 상태를 스택에 저장할 수 있다. 그러나 예외 핸들러에 의한 이러한 상태 저장은 예외 핸들러 코드에 제공된 로드 / 저장 명령에 응답하여 관련 데이터를 메모리에 저장하기 위해 처리 회로(4)의 로드 / 저장 유닛을 제어함으로써 수행되며, 예외 제어 회로(28)가 하드웨어에서의 스태킹을 제어하는 경우에, 이는 보다 느릴 수 있다. 그러나 예외가 진입된 후 실행되는 소프트웨어가, 저장되어야 하는 레지스터에 영향을 미칠 수 있도록, 호출자와 피 호출자 레지스터 상태 사이에 파티션을 허용하는 것이 유용할 수 있다. 예외 핸들러가 특정 피 호출자 레지스터(예, 범용 레지스터 R7 또는 부동 소수점 레지스터 S27)에 액세스하지 않는 경우, 예외 핸들러는 해당 아키텍처 상태를 저장할 필요가 없어, 예외 제어 회로(28) 및 하드웨어에서 이러한 상태 저장을 수행하는 것과 관련된 에너지 및 시간이 또한 회피된다. 예외 핸들러에 대한 코드 작성자, 또는 이러한 코드의 컴파일러는, 소프트웨어에서 추가 상태 저장이 필요한 기회를 줄이기 위해, 추가 피 호출자 레지스터를 사용하기 전에 먼저 호출자 레지스터를 사용하도록 권장될 수 있다.
그러나 예외 진입으로 인해 안전한 도메인에서 덜 안전한 도메인으로 트랜지션되고, 예외가 안전한 도메인에 있기 전에 스레드 모드에서 원래의 백그라운드 처리가 수행되는 경우, 오직 호출자 레지스터만 예외 제어 회로(28)에 의해 메모리에 저장되는 경우, 레지스터 뱅크(14) 내에서 액세스 가능한 피 호출자 레지스터를 가장 최근의 예외 이후에 실행되는 덜 안전한 예외 핸들러로 남겨둘 수 있다. 이는 피 호출자 레지스터가 SAU(24)가, 그렇지 않으면 덜 안전한 예외 핸들러 액세싱을 방지하는 메모리 주소 공간의 보안 영역으로부터 파생된 정보를 포함할 수 있기 때문에 바람직하지 않을 수 있다.
따라서, 백그라운드 처리가 안전한 도메인에서 이전에 수행된, 안전한 도메인에서 덜 안전한 도메인으로의 어떤 트랜지션의 경우, 예외 제어 회로(28)는 호출자 레지스터를 저장하는 것 외에도 피 호출자 레지스터를 관련 스택 데이터 구조에 저장하고, 저장된 레지스터(호출자 및 피 호출자 레지스터 포함)의 내용을 지울 수 있다. 따라서 하드웨어에서 추가 상태 저장을 수행하면, 일반적으로 피 호출자 레지스터를 저장하는 소프트웨어가, 예외가 발생하기 전에 이러한 레지스터에 저장된 잠재적 안전한 정보에 액세스 할 수 없음을 의미한다.
따라서, 특정 예외 진입 트랜지션에 대해, 도 4에 도시된 호출자 스택 프레임을 저장하는 대신에, 대신에 도 5에 도시된 제 2 스택 프레임이 저장될 수 있다(예외 제어 회로(28)에 의한 하드웨어 제어 하에, 즉 처리 회로(4)에 의해 실행될 명령의 명시적인 로드 / 저장). 다시, 도 5의 왼쪽 부분에 도시된 바와 같이, 부동 소수점 컨텍스트가 필요하지 않은 경우 스택 프레임은 부동 소수점 상태(state)의 저장을 생략할 수 있다. 이 경우 제 2 스택 프레임에는 도 4에 도시된 호출자 상태와 레지스터 R4-R11을 포함한 추가 피 호출자 상태를 모두 포함한다. 하드웨어에 의해 저장된 추가 상태는 또한 아래에서 더 자세히 설명될 무결성 서명(50)을 포함할 수 있다. 대안적으로, 부동 소수점 컨텍스트도 저장해야 하는 경우, 도 4의 왼쪽 예에 표시된 호출자 상태 외에도 확장된 제 2 스택 프레임에는, 도 5의 오른쪽에 도시된 바와 같이, 추가 피 호출자 부동 소수점 레지스터 S16 ~ S31이 포함된다. 비록 도 5에 도시되지 않았지만 어떤 실시 예는 피 호출자 및 호출자 부동 소수점 레지스터를 위한 공간을 예약할 수 있으며, 도 4에 대해 설명된 것과 동일한 방식으로 이러한 레지스터를 느리게(lazily) 저장할 수 있다.
따라서, 도 4의 예에 도시된 기본 호출자 스택 프레임은 제 1 예외 스택 프레임의 예일 수 있으며, 피 호출자 레지스터와 관련된 추가 아키텍처 상태도 포함하는 도 5의 스택 프레임 예는 제 1 예외 스택 프레임에서 생략된 레지스터의 아키텍처 상태 데이터 서브 세트를 포함하는 제2 예외 스택 프레임의 예일 수 있다. 예외 진입 트랜지션시 예외 제어 회로는, 예를 들어 예외 전후에 수행된 처리와 관련된 보안 도메인 또는 제어 레지스터(20)와 관련된 다른 상태 정보에 따라, 하드웨어에 의해 저장되어야 하는 제 1 및 제 2 예외 스택 프레임을 선택할 수 있다. 부동 소수점 컨텍스트의 저장 여부 및 지연 부동 소수점 컨텍스트 저장 옵션의 사용 여부는 제어 레지스터(20) 중 하나에 지정된 제어 파라미터에 따라 달라질 수 있다.
무결성 서명(50)은 호출자 및 피 호출자 상태 모두가 예외 제어 하드웨어(28)에 의해 저장되지만 도 4에 도시된 제 1 예외 스택 프레임에서 누락될 때, 제 2 예외 스택 프레임에 포함된다. 무결성 서명(50)은, 실행 가능한 주소에 해당하지 않는, 예를 들어, 그로부터 명령을 페치하려는 시도가 있을 때 오류를 알리는 주소와 같은, 특별한 예약 값을 가질 수 있다. 이 무결성 서명은 안전한 도메인과 덜 안전한 도메인 간의 분할을 시행하는 하드웨어에 의해 제공되는 보안 보호를 우회하려는 시도를 위해 처리 회로에 탑재될 수 있는 특정 형태의 공격을 감지하는 데 사용될 수 있다. 공격에 대한 한 가지 가능한 방법은 공격자가 예외 처리를 시작하기 위해 예외 진입 트랜지션을 수행하려고 시도하고, 그 다음에 함수 리턴 트랜지션 수행과 같이 예외 진입에서 리턴될 것으로 예상되는 다른 유형의 리턴 트랜지션을 위조하는 것이다. 서명(50)는 함수 리턴이 이루어지면 함수 리턴 주소를 저장할 것으로 예상되는 스택 프레임상의 위치에 위치할 수 있으며, 무결성 서명(50)는 실행 가능한 주소에 대응하지 않는 특별한 값을 가질 수 있으므로, 이는 유효한 함수 리턴 주소가 서명과 일치할 수 없음을 의미한다. 따라서 함수 리턴에서 리턴 주소가 무결성 서명(50)(또는 실행 불가능한 주소에 해당)과 일치하는 것으로 감지되면, 함수 리턴을 수행하는 데 사용되는 스택 프레임은 실제로 예외 진입 이벤트에 대한 응답으로 스택에 저장되었기 때문에, 오류가 트리거될 수 있고, 이는 실제로 공격이 수행되고 있음을 표시자가 될 수 있다. 또한, 피 호출자 레지스터와 관련된 추가 아키텍처 상태가 스택에 존재하는 예외로부터 리턴할 때, 서명이 없으면 예외 재진입 및 리턴 이벤트의 부적절한 시퀀스가 트리거되었음을 나타낼 수 있어, 보안 검사의 일부는 무결성 서명(50)에 해당하는 스택의 관련 오프셋 값이 예상 값을 갖는지 여부가 검사될 수 있다.
따라서, 스택에 무결성 서명을 제공하는 것은, 특정 예외 진입 트랜지션에 대해 수행할 수 있는 보호 조치의 예이다. 특히, 스택에 대한 무결성 서명의 이러한 저장은 안전한 스레드 모드의 적어도 한 가지 형태에서 덜 안전한 핸들러 모드 예외 진입 트랜지션으로 발생할 수 있다. 그러나 무결성 서명(50)은 도 4에 도시된 바와 같이, 안전한 도메인으로부터, 또한 안전한 도메인의 예외 핸들러로 예외 진입이 수행될 때 보호 조치가 필요하지 않을 것으로 예상될 수 있기 때문에, 기본 호출자 스택 프레임에 포함되지 않는다. 하드웨어에서 피 호출자 상태(무결성 서명 포함)를 피하면, 스레드 모드에서 안전한 백그라운드 처리를 처리하는 동안 안전한 예외가 발생하고, 안전한 예외 처리 중에 다른 예외가 발생하지 않으므로 다음 예외가 이전의 안전한 백그라운드 처리로 간단히 돌아가는 경우, 인터럽트 핸들링 지연(latency)을 줄이는 데 도움이 된다.
그러나 도 8에서 도시된 바와 같이, 덜 안전한 핸들러 모드 예외 진입 트랜지션으로의 안전한 트랜지션을 위한 보호 조치의 생략은, 때때로 공격자가 악용할 수 있는 방법을 제공할 수 있다. 도 8은 다음과 같은 일련의 이벤트를 도시한다.
1. 인터럽트(IRQ 1)로 인해 안전한(Secure) 핸들러 모드로 트랜지션된다. 호출자 저장 레지스터는 예외 제어 하드웨어 28에 의해 안전한 프로세스 스택(PSP_S로 표시)에 자동으로 저장된다. 인터럽트 핸들링 지연을 줄이기 위해 피 호출자 저장 레지스터는 저장되지 않으므로, 도 4에 도시된 유형의 제 1 예외 스택 프레임이 저장된다(무결성 서명 생략). 이는 타겟 상태(state)가 안전한(Secure)이므로 이러한 레지스터를 손상시키지 않도록 신뢰할 수 있으므로 허용된다.
2. 다른 인터럽트(IRQ 2)로 인해 비-안전한(Non-secure) 핸들러 모드로 트랜지션됩니다. 이 시점에서, 안전한(Secure) 값을 핸들링하는 데 신뢰할 수 없는, 비-안전한(Non-secure) 상태로 트랜지션 되므로, 호출자와 피 호출자 저장 레지스터를 모두 보존한다. 따라서 도 5에 도시된 유형의 제 2 예외 스택 프레임은 MSP_S로 표시된 안전한 메인 스택에 저장된다. 핸들러 모드에서 처리하는 동안 이 예외가 발생했으므로 메인 스택이 사용된다.
3. 비-안전한 도메인을 제어하는 공격자는, 일련의 예외 리턴 또는 함수 리턴을 위조하여 안전한 스레드 모드로 돌아가도록 할 수 있다(예상된 예외 리턴이 IRQ2에서 리턴하기 위해 안전한 핸들러 모드로 리턴하는 대신). 단계 1에서 안전한 프로세스 스택에 저장된 스택 프레임에는 스택에 무결성 서명이 없기 때문에, 만일 안전한 스레드 모드로 리턴할 때 언스태킹이 단계 1에서 안전한 프로세스 스택에 저장된 호출자 전용 예외 스택 프레임을 언스태킹한다면, 보안 위반이 발생할 가능성이 있다.
이 이슈는, 단계 1에서, 스택 포인터 선택 값 30을 설정하여, 스레드 모드에서 일반적으로 사용되는 프로세스 스택 포인터(PSP) 대신, 언스태킹 동작에 스레드 모드가 메인 스택 포인터(MSP)를 후속적으로 사용해야 함을 표시함으로써 해결할 수 있다. 이는, 공격자가 단계 3에서 오류 예외 리턴을 위조하는 경우, 언스태킹은 보호되지 않은 프로세스 스택이 아닌 메인 스택에서 발생함을 의미한다. 메인 스택에서의 스택 프레임은 실제로 IRQ2(핸들러 모드로)의 리턴용이고 스레드 모드로의 리턴용이 아니기 때문에, 다른 무결성 검사가 실패할 수 있다(예, 스택 프레임이 언스태킹될 때 모드가 리턴되고자 하는 모드로 될 수 있으므로, 실제 리턴된 모드와 언스태킹된 상태에서 표시되는 모드간의 불일치가 검출될 수 있음). 따라서 공격이 검출될 수 있다.
도 6은 예외 제어 회로에 의해 지원될 수 있는 여러 가지 다른 형태의 예외 진입 트랜지션을 보여주는 표이다. 표의 처음 4 개 열에 도시된 것처럼, 예외 진입 트랜지션이 선택되는 것은, 백그라운드 처리가, 스택 포인터 선택 값(30)에 의해 스레드 모드로 표시되는, 메인 스택 포인터 또는 프로세스를 사용했는지 여부에 관계없이, 예외 항목이 발생하기 전에 수행되는 백그라운드 처리와 관련된 보안 도메인 및 모드, 그리고 예외 조건 그 자체와 관련된 안전한 도메인에 따라 다르다. 예를 들어, 발생한 예외 유형은 안전한 예외인지 또는 덜 안전한 예외인지를 암시하거나, 예외는, 그 예외와 관련된 보안 도메인을 지정하는 추가 제어 정보와 관련될 수 있다. 프로세스 스택 포인터가, 오직 백그라운드 모드가 스레드 모드인 경우에 사용될 수 있기 때문에, 프로세스 스택 포인터를 사용하는 핸들러 모드에서 수행되는 백그라운드 처리에 대응되는 트랜지션이 없음을 알아야 한다. 따라서 백그라운드 모드가 핸들러 모드인 경우 표의 9 ~ 12 행에 해당하는 항목이 없다.
도 6의 표의 다섯 번째 열은, 서로 다른 예외 진입 트랜지션 각각에 대해, 사용되는 스택 프레임 포맷을 도시한다.
행 5-8, 11 및 12에 표시된 트랜지션의 경우, 수행중인 백그라운드 처리가 덜 안전한 도메인에 있고 따라서 피 호출자 레지스터가 저장되지 않으면 중요한 정보의 손실 위험이 없기 때문에. 호출자가 저장한 레지스터만 저장하면 된다.
행 2, 4 및 10 행에 표시된 트랜지션의 경우, 백그라운드 처리가 안전한 도메인에 있었고 예외에 대한 타켓 보안 도메인은 덜 안전한 도메인에 있으므로, 피 호출자 저장 레지스터의 추가 상태 저장은 하드웨어의 예외 제어 회로(28)에 의해 수행되어, 이러한 레지스터의 데이터가 덜 안전한 예외 핸들러로 누출되는 것을 방지한다.
도 8의 행 1, 3 및 9에 도시된 트랜지션에 대해, 아키텍처는 호출자 레지스터만 저장하도록 요구할 수 있지만, 원하는 경우 피 호출자 레지스터도 선택적으로 저장하도록 허용할 수 있다. 시스템이 호출자 및 피 호출자 저장 레지스터를 모두 저장해야 하는 예외 진입 트랜지션 을 먼저 수행하지만 피 호출자 레지스터를 저장하는 동안 우선 순위가 더 높은 예외가 발생하여 대신, 피 호출자 레지스터가 저장될 필요가 없는 다른 예외 진입이 선택되기 때문에, 유용할 수 있고, 하드웨어가 저장을 중단하고 첫 번째 예외에 대한 응답으로 이미 발생한 피 호출자 레지스터의 이전 저장과 관련된 변경 사항을 취소하는 것보다 피 호출자 레지스터를 계속 저장하는 것이 더 간단할 수 있다. 링크 레지스터 R14에 기록되는 예외 리턴 값에는, 기본 스태킹 규칙을 따르고 호출자 레지스터만 스택에 있는지 또는 피 호출자 레지스터도 스택에 있는지 여부를 나타내도록 설정할 수 있는 플래그 DCRS가 포함될 수 있다. 이 플래그는 예외 리턴을 수행할 때 검사하여 수행해야 하는 언스태킹을 결정하고, 무결성 서명을 기반으로 수행해야 하는 무결성 검사를 결정하는 데 사용될 수도 있다. 링크 레지스터에 위치하는 이 예외 리턴 값은, 스태킹에 안전한 스택이 사용되었는지 또는 덜 안전한 스택이 사용되었는지 여부, 스태킹이 수행된(해당 예외 리턴이 예상되는) 동작의 모드를 나타내는 플래그, 또는 스택 프레임이 표준 정수 전용 스택 프레임인지 또는 확장된 부동 소수점 스택 프레임인지를 나타내는 플래그와 같은, 예외 리턴 동안 참조를 위한 다른 정보를 또한 표시할 수 있다. 다른 정보도 예외 리턴 값에 표시될 수 있음을 알 수 있다.
도 7은 예외가 취해지기 전에 수행된 이전 처리로 처리를 리턴시키기 위해 예외 제어 회로(28)에 의해 사용될 수 있는 다수의 상이한 형태의 예외 리턴 트랜지션을 도시하는 표이다. 표의 처음 5 개 열에 도시된 바와 같이, 선택한 특정 트랜지션은 예외와 관련된 보안 도메인, 예외 리턴이 요청된 보안 상태(state), 리턴되는 스택 포인터, 리턴되는 모드 및 리턴되는 보안 상태에 달려 있다. 어떤 스택 포인터, 모드 및 보안 상태가 리턴되는가는, 예외 리턴 이벤트를 트리거하는 예외 리턴 명령과 관련된 정보에 따라 결정될 수 있다. 예외 리턴이 요청되었을 때 보안 상태는, 예를 들어 덜 안전한 도메인과 안전한 도메인 사이의 트랜지션을 발생시킬 수 있는 예외가 발행할 수 있어 함수 호출이 있을 수 있기 때문에, 원래의 예외와 관련된 보안 도메인과 다를 수 있다. 따라서 예외와 관련된 보안 도메인은, 예외가 발생했을 때 링크 레지스터의 예외 리턴 값에 있는 플래그에서 결정될 수도 있다. 도 6의 예외 진입 트랜지션과 유사하게, 도 7의 경우, 핸들러 모드에서 프로세스 스택 포인터를 사용할 수 없기 때문에, 행 5, 6, 11, 12, 17 및 18의 트랜지션에 해당하는 "핸들러로 리턴" 이 없다. 또한 현재 덜 안전한 상태(예, 예외 리턴 요청시 보안 상태가 덜 안전한 행 1 ~ 6의 미러가 없음)에 있는 동안, 이러한 트랜지션도 금지되기 때문에, 보안 예외에서 리턴되는 예외 리턴 트랜지션도 없다. 덜 안전한 예외는 이후에 예외 리턴을 트리거하는 안전한 함수를 호출할 수 있지만, 안전한 예외의 경우 안전한 예외가 예외 리턴을 트리거하는 덜 안전한 함수를 호출하는 것은 허용되지 않는다.
도 7의 여섯 번째 열은, 각 예외 리턴 트랜지션에 대해, 피 호출자 레지스터가 이 예외와 관련된 스택 프레임에 있을 것으로 예상되는지 여부와, 따라서 스택 프레임의 특정 오프셋에 있는 값이 예상되는 무결성 서명 값과 일치하는지 여부를 결정하는데 어떤 무결성 서명 검사가 필요한지의 여부를 도시한다. 대부분의 예외 리턴 트랜지션의 경우, 피 호출자 레지스터가 예상되지 않아 무결성 서명이 검사되지 않거나, 피 호출자 레지스터가 예상되어 무결성 서명 검사가 수행되거나 한다. 그러나 행 1, 3 및 5에 도시된 트랜지션에 대해(도 8의 행 1, 3 및 9에서 예외 진입 트랜지션에 해당하며, 호출자 레지스터 외에 선택적으로 저장된 피 호출자 레지스터를 가질 수 있음), 피 호출자 레지스터가 예상되고 무결성 서명이 검사되는지 여부는, 예외가 발생했을 때 링크 레지스터의 예외 리턴 값에 저장된 DCRS 플래그에 따라 달라질 수 있다.
누락된 무결성 서명을 악용하는 잠재적인 공격이 도 8과 관련하여 위에서 설명되었으며, 이는 안전한에서 안전한 예외 진입 트랜지션에 대한 응답으로 스택 포인터 선택 값 30을 설정함으로써 해결된다. 그러나, 다른 형태의 공격으로부터 보호하기 위해, 스택 포인터 선택 값(30)이, 선택된 스택 포인터로서 스레드 모드에 의해 사용될 것임을 메인 스택 포인터가 나타내는 시나리오에서, 안전한 스레드 모드로 다시 스위치하도록 하는 일련의 트랜지션을 검출하는 구조적 수단을 제공하는 것이 바람직할 수 있다.
처리 회로(4)는 덜 안전한 도메인에서 안전한 도메인으로 스위칭할 때 안전한 도메인으로 유효한 진입 점을 표시하는 데 사용될 수 있는 게이트웨이 명령(또는 "안전한 게이트웨이" 명령, SG)이라고 하는 특정 명령을 지원할 수 있다. 덜 안전한 도메인에서의 처리로부터 SAU 24가 안전한 도메인과 연관되어 있음을 나타내는 명령 주소의 명령으로의 프로그램 흐름 변경시, 처리 회로(4)는, 프로그램 흐름 변경 후 타겟 주소에서 실행된 첫 번째 명령이 안전한 게이트웨이 명령인지 여부를 검사할 수 있고, 그렇지 않은 경우, 처리 회로(4)는 오류를 트리거할 수 있다. 안전한 코드 작성자 또는 컴파일러는 안전한 게이트웨이 명령을 사용하여, 안전한 코드를 호출할 수 있는 덜 안전한 코드의 코드 지점을 표시할 수 있다. 예를 들어 일부 보안 조치를 우회할 수 있도록 허용하여 보안 취약성을 유발할 수 있는 안전한 코드 내의 임의 위치로 덜 안전한 코드가 분기되는 것을 방지한다. 예를 들어, 안전한 코드에 암호 검사가 포함되어 있는 경우, 임의의 분기 지점에 대한 보호가 제공되지 않으면 덜 안전한 코드가 암호 검사를 넘어 안전한 함수의 일부로 분기되어, 비-안전한 코드가 정확한 암호를 갖고 있지 않아도, 암호 검사를 효과적으로 우회할 수 있다. 이것은 비교적 단순한 예이지만, 덜 안전한 코드가 안전한 함수 내의 특정 지점으로 분기될 수 있는 경우, 심각한 보안 위험이 있을 수 있는 다른 더 복잡한 예가 있을 수 있다. 따라서 안전한 게이트웨이 명령의 제공은 안전한 코드에 대한 유효한 진입 점을 보호할 수 있으며, 다른 진입 점은 보안을 향상시키기 위해 오류를 트리거링하는 잘못된 진입 점으로 취급될 수 있다.
안전한 게이트웨이 명령은 일반적으로 안전한 도메인으로의 유효한 진입 점에 위치하므로, 안전한 게이트웨이 명령은, 레지스터 MSP_S에 저장된 안전한 메인 스택 포인터를 사용하는 것이 안전한지 여부를 검사하기 위해, 안전한 메인 스택 포인터의 검사를 트리거하는데 사용될 수도 있다. 공격자가 안전한 게이트웨이 명령을 포함하는 악성의 안전한 함수에 대한 코드를 제공하더라도, 안전한 스레드 모드 코드의 나머지 부분이 악성이라 하더라도, 안전한 스레드 모드 코드가 입력된 지점에서 안전한 게이트웨이 명령 이외의 다른 명령이 오류를 트리거하므로, 공격자는 안전한 게이트웨이 명령을 제공하는 것을 피할 수 없기 때문에, 안전한 게이트웨이 명령은 처리 회로(4)를 트리거하여 스택 포인터에 대한 추가 보안 검사를 수행하도록 신뢰할 수 있다.
하나의 예에서, 덜 안전한 도메인으로부터의 트랜지션에 대해 안전한 게이트웨이 명령에 의해 트리거된 스택 포인터 검사 동작은, 단순히 스택 포인터 선택 값(30)이 0과 동일한지 여부를 검사하여, 메인 스택 포인터가 스레드 모드에서 사용되어야 함을 나타낼 수 있다. 따라서 스택 포인터 선택 값이 0이면 오류를 트리거링할 수 있다. 이것은 공격으로부터 보호할 수 있지만, 안전한 스레드 모드가 메인 스택 포인터를 사용하도록 허용하는 것이 여전히 바람직한 일부 유효한 사용 사례를 배제할 수 있다.
그러므로 아래에서 논의되는 예에서, 스택 포인터 검증 동작은 메모리 액세스 검사 회로(22)가, 안전한 스레드 모드에서 사용될 수 있도록 스택 포인터 선택 값(30)에 의해 표시된 스택 포인터로부터 유도된 타겟 주소를 지정하는 로드 요청을 허용하는지 여부를 검사하기 위해 트리거링 퍼미션 체크를 대신에 포함할 수 있다. 따라서 스택 포인터 선택 값(30)이, 이전에 메인 스택 포인터를 나타내도록 설정된 경우, 퍼미션 체크는 안전한 메인 스택 포인터 레지스터(MSP_S)에 저장된 주소를 기반으로 하여, 스레드 모드가 메인 스택 포인터가 나타내는 스택 데이터 구조에 액세스할 수 있는지 여부, 따라서 스택 포인터를 사용하는 것이 안전한지 여부를 검사한다.
어떤 경우에, 안전한 게이트웨이 명령은, 로드의 타겟 주소에 대해 메모리 액세스 검사 회로(22)에 의해 수행되는 퍼미션 체크를 호출하기 위해, 타겟 주소에 대한 로드 요청을 실제로 트리거할 수 있다. 이러한 로드 요청은 때때로 잘못된 처리 결과로 이어질 수 있는 재진입 시나리오에 대한 방어로도 유용할 수 있다. 이것은 도 9의 예에 도시되어 있다. 지점 1에서 안전한 스레드 모드 함수가 덜 안전한 상태로부터 호출된다. 안전한(Secure) 상태로 분기한 후 첫 번째 명령은 SG 명령이어야 한다(그렇지 않으면 오류가 발생함). 이 호출 전에 비-안전한(non-secure) 상태는 지정된 시간 후에 발생하도록 타이머 인터럽트를 설정한다. 비-안전한 코드는 재진입을 지원하도록 설계되지 않은 중요한 안전한 동작중에 이 타이머가 실행되도록 할 수 있다. 타이머가 실행되면, 제어가 덜 안전한 핸들러 모드로 리디렉션된다. 덜 안전한 핸들러 모드는 그 다음 덜 안전한 스레드 모드로 리턴된다(권한제거 동작). 지점 2에서, 덜 안전한 스레드 모드는 다시 안전한 상태(state)를 호출한다. 재진입에 대해 안전하도록 설계되지 않은 중요한 동작을 완료하지 않은 경우, 안전한 상태가 재진입되므로 재진입 공격으로 이어질 수 있다. 예를 들어, 중요한 동작은 주어진 이벤트의 발생 횟수를 계산하기 위한 이벤트 카운터의 업데이트와 같은 동작일 수 있다. 이벤트가 발생할 때마다 다음 함수가 호출될 수 있다(여기서 #count는 카운터 값이 메모리에 저장되는 주소를 나타냄).
LDR r0, [#count] // 메모리로부터 현재 카운트 값을 로드
ADD r0, r0, # 1 // 현재 카운트 값에 1을 추가
STR r0, [#count] // 업데이트된 카운트 값을 메모리에 다시 저장.
로드 명령과 저장 명령 사이에 타이머 인터럽트가 발생하고, 이벤트의 후속 발생에서 함수가 다시 호출되면, 함수를 실행하는 두 인스턴스 모두 로드 명령에 대해 동일한 초기 값을 읽으므로, 따라서 함수가 두 번 호출되더라도 카운트가 한 번만 증가하기 때문에, 계수에서 누락 된 이벤트의 두 가지 발생 중 하나가 발생할 수 있다. 이것은 비교적 간단한 예이며, 재진입에 대해 안전하지 않은 다른 많은 코드 예가 제공 될 수 있음을 알 수 있을 것이다.
이러한 재진입 이슈는 안전한 함수와 덜 안전한 함수 모두에 영향을 미칠 수 있지만, 소프트웨어 작성자 또는 컴파일러가 재진입에 대해 안전하도록 덜 안전한 기능을 설계하거나 재진입이 발생했는지 여부를 검출하기 위한 검사를 포함할 수 있는 소프트웨어 기술이 있을 수 있기 때문에, 덜 안전한 코드에 대해 재진입이 발생하는지 여부를 검사하기 위한 아키텍처 기능을 제공하는 것이 정당하다고 간주되지 않을 수 있고, 이로 인해 코드가 증가하거나 성능이 저하될 수 있지만 덜 안전한 도메인에서 코드를 실행하면 보안 취약점이 발생할 것으로 예상되지 않을 수 있다. 그러나 안전한 도메인의 경우, 보안 취약성을 유발할 수 있는 재진입을 검출하거나 보호하기 위한 이러한 소프트웨어 기술이 있을 수 있으므로, 이러한 취약성의 가능성을 줄일 수 있고, 재진입이 발생하였는지 여부에 대한 아키텍처 검사를 제공하는 것이 바람직하다.
재진입 검사의 경우, 안전한 스레드 모드 함수에 대한 재진입 시나리오는 안전한 도메인에서 덜 안전한 도메인으로 예외 진입이 트랜지션되었을 때(도 9의 실선) 또는, 안전한 도메인에서 안전한 도메인으로 예외 진입이 트랜지션된 후 안전한 도메인에서 덜 안전한 도메인으로의 함수 호출이 있을 때(도 9의 점선), 발생하는 것으로 인식된다. 안전한에서 덜 안전한으로의 예외 트랜지션(실선)의 경우, 무결성 서명 값이 예상되므로, 덜 안전한 도메인으로부터의 스레드 모드에서 안전한 함수를 두 번 호출하고(도 9에서 호출 2로 레이블됨), 안전한 게이트웨이가 있는 경우, 스텝 포인터 선택 값(30)을 기반으로 안전한 스레드 모드에서 사용하기 위해 선택된 선택된 스택 포인터를 타겟 주소로 지정하여 로드가 트리거 될 수 있다. 처리 회로는 무결성 서명(50)이 해당 주소에 존재하는지 여부를 확인할 수 있으며, 그렇다면 안전한 도메인에서 덜 안전한 도메인으로의 예외 진입 트랜지션에서 메모리에 저장된 관련 스택 프레임이 해당 예외 리턴에서 아직 언스태킹되었음을 나타내기 때문에 오류를 트리거하고, 이는 동일한 안전한 함수를 처리하는 이전 인스턴스를 상세하게 완료하지 않고 동일한 안전한 함수 코드로의 재진입 시나리오임을 나타낸다.
반면에, 함수 호출이 사용된 경우(도 9에서 점선), 무결성 서명(50)은 선택된 스택 포인터 값으로 표시된 스택의 위치(location)에 존재하지 않지만, 이 경우에는 안전한 스레드 모드에 대한 두 번째 호출을 수행하는 시점의 스택 포인터 선택 값(SPSEL)(30)이 메인 스택 포인터가 사용됨을 나타내는 0으로 여전히 설정되기 때문에 재진입이 검출될 수 있고, 도 9에서 점선으로 레이블된(3) 트랜지션으로 인해 스택 포인터 섹션 값이 0으로 설정되었으며, 도 9에서(3)으로 표시된 인터럽트를 반전하는 해당 예외 리턴 트랜지션이 아직 없었기 때문에, 재진입의 경우 스택 포인터 선택 값은 아직 1로 다시 설정되지 않을 것이다. 따라서, 안전한 스레드 모드 함수를 호출할 때 값이 0 인 SPSEL은 다시 재진입이 발생하고 있다는 신호이다.
따라서, 어느 쪽이든 이러한 재진입 검사는, 인터럽트 되었지만 아직 재개되지 않은 동일한 함수를 이전에 호출한 후 안전한 스레드 모드에서 안전한 코드가 호출되는 일련의 트랜지션으로 인해, 잘못된 처리 결과가 발생하는 것을 방지할 수 있다.
이러한 재진입 검사는 덜 안전한 도메인에서 호출한 후 실행되는 안전한 게이트웨이 명령에 대해 항상 수행될 필요는 없습니다. 도 3에 도시된 바와 같이, 재진입 인에이블 구성 비트(36)는 구성 레지스터(34)에 제공되어, 안전한 도메인과 관련된 주소에서 덜 안전한 도메인에서 안전한 게이트웨이 명령으로 트랜지션 할 때 재진입 검사가 필요한지 여부를 제어한다. 예를 들어, 안전한 함수가 재진입에 대해 안전한 코드를 가지는 것으로 알려진 경우, 재진입 검사는 디스에이블 되어 성능을 향상시키고 전력을 절 할 수 있다. 그러나 재진입 검사가 디스에이블 되었다 하더라도, 전술한 스택 포인터의 조작과 관련된 어떤 유형의 공격으로부터 여전히 보호하기 때문에, 안전한 게이트웨이 명령은 여전히 처리 회로를 트리거하여, 선택한 스택 포인터에 해당하는 타겟 주소로 로드 요청을 발행하거나, 다른 유형의 요청을 발행하여 퍼미션 검사를 트리거할 수 있다.
도 10은 보안 게이트웨이 명령에 응답하여 수행된 검사를 포함하는, 도 1에 도시된 처리 장치(2)를 사용하여 데이터 처리를 수행하는 방법을 예시하는 흐름도를 도시한다. 단계 100에서, 처리될 다음 명령이 획득된다. 단계 102에서, 현재 도메인이 덜 안전한 도메인인지 여부가 검출되고, 단계 104에서, 다음 명령이 안전한 도메인과 연관된 것으로 SAU(24)의 속성 데이터에 의해 표시된 메모리 영역으로부터 페치되었는지 여부가 검출된다. 일반적으로 덜 안전한 도메인에서 메모리의 안전한 영역에서 페치한 명령으로 트랜지션할 때 안전한 도메인에 대한 진입이 유효한지 여부를 확인하기 위해 특정 검사가 필요할 수 있다. 현재 도메인이 덜 안전한 도메인이고 안전한 메모리에서 다음 명령어를 가져오는 경우를 제어 흐름의 지정된 변경이라고 한다. 현재 도메인이 안전한 도메인이거나, 덜 안전한 메모리 영역에서 명령을 페치한 경우, 이는 제어 흐름의 지정된 변경이 아니며 후속 보안 / 재진입 검사가 필요하지 않다. 현재 도메인이 안전한 도메인이거나 명령이 덜 안전한 메모리에서 페치되면, 단계 106에서 다음 명령은 해당 명령이 나타내는 기능에 따라 정상적으로 실행될 수 있다.
덜 안전한 도메인에서 안전한 메모리로부터 페치된 명령으로의 제어 흐름의 주어진 변경이 식별되면, 단계 108에서, 처리 회로(4)는 다음 명령이 보안 게이트웨이(SG) 명령인지 여부를 확인한다. 다음 명령이 보안 게이트웨이 명령이 아닌 다른 명령이면 단계 110에서 안전(secure) 오류가 발생한다. 이렇게 하면 시스템이 오직 보안 게이트웨이 명령으로 표시된 코드의 특정 지점에서 안전한 도메인으로 트랜지션할 수 있다.
명령이 안전한 게이트웨이 명령으로 식별되면, 단계 112에서 처리 회로(4)는 현재 동작 모드가 스레드 모드인지 여부를 결정한다. 현재 모드가 핸들러 모드인 경우, 재진입에 대한 후속 검사 및 스택 포인터 검증이 생략될 수 있으며, 단계 106에서 명령이 정상적으로 실행될 수 있다. 보안 게이트웨이 명령의 경우, 이러한 정상적인 실행에는 안전한 도메인으로의 트랜지션이 허용되는지 여부를 확인하기 위한 적어도 하나의 보안 검사가 포함될 수 있다. 보안 게이트웨이 명령에 필요한 모든 보안 검사가 통과되면, 안전한 게이트웨이 명령을 실행하면 처리 회로 4가 현재 보안 동작 도메인을 지정하는 레지스터를 업데이트하여, 현재 도메인이 덜 안전한 도메인에서 안전한 도메인으로 스위치된다.
현재 도메인이 안전한 도메인인 경우에도, 안전한 게이트웨이 명령이 발생할 수 있다는 것이 가능하다. 이는 덜 안전한 함수나 안전한 함수로에서 동일한 코드가 호출될 수 있기 때문일 수 있다. 이미 안전한 도메인에 있을 때 안전한 게이트웨이 명령이 실행되는 경우, 프로그램 흐름은 위에서 논의된 바와 같이 단계 102에서 단계 106으로 진행할 것이다.
단계 112에서 현재 모드가 스레드 모드인 것으로 결정되면, 단계 114에서 안전한 게이트웨이 명령에 응답하여 처리 회로(4)는 메모리 액세스 검사 회로(22)를 트리거하여 로드 요청 여부를 결정하기 위해 퍼미션 체크를 수행하고, 이는 안전한 스레드 모드에 사용되는 것으로 스택 포인터 선택 값(30)에 의해 표시되는 선택된 스택 포인터로부터 유도된 타겟 주소에서 메모리(6)로부터 데이터의 로딩을 요청하는 것이 허용될 것이다. 특히, 타겟 주소는 스택 포인터 선택 값(30)에 따라 선택된 선택된 레지스터 MSP_S 또는 PSP_S에 저장된 스택 포인터와 동일할 수 있다. 퍼미션 체크의 트리거링은, MPU(26)가 액세스 퍼미션에 대한 타겟 주소를 체크하게 한다. MPU(26)는 각각 안전한 도메인과 덜 안전한 도메인에 대한 별도의 메모리 속성 진입의 세트를 유지할 수 있다. 안전한 게이트웨이 명령의 경우, 현재 도메인이 여전히 덜 안전한 도메인일 수 있지만, 로드 요청은 안전한 도메인과 관련된 액세스 퍼미션에 대해 검사될 수 있다. 또한 안전한 게이트웨이 명령에 의해 트리거된 로드가, 권한이 있는 액세스 요청으로 간주되는지 또는 권한 없는 액세스 요청으로 간주되는지 여부는, 안전한 스레드 모드의 액세스가 권한이 있는 것으로 처리되어야 하는지 아니면 권한 없는 것으로 처리되어야 하는지 여부를 지정하는 도 3에 표시된 권한 제어 값 31에 따라 달라질 수 있다.
단계 114에서의 퍼미션 체크는 다양한 방식으로 트리거될 수 있다. 일 예에서, 처리 회로(4)는 실제 로드 동작이 수행되는 경우와 유사하게, 타겟 주소를 지정하는 로드 요청을 실제로 발행할 수 있다. 대안적으로, 예를 들어, 메모리 시스템(6)에 대한 실제 메모리 액세스를 트리거링하지 않고 퍼미션 체크를 트리거하는 저장소 요청 또는 주소 검사 요청과 같이, 다른 유형의 요청이 메모리 액세스 검사 회로(22)에 발행될 수 있다. 재진입 검사가 수행되는 경우, 로드 요청을 발행하는 것이 가장 효율적일 수 있으나(그러한 로드 요청에 의해 로드된 값이 단계 122에서 필요할 것이므로), 재진입 검사가 수행되지 않는 경우, 다른 유형의 요청이 사용될 수 있다. 대안적으로, 재진입 검사가 디스에이블된 경우에도 메모리 액세스 퍼미션 체크를 호출하기 위해 로드 요청을 발행하여 재진입 검사의 인에이블 여부에 관계없이 동일한 유형의 요청을 발행함으로써 복잡성을 줄일 수 있니다.
따라서, MPU(26)에 의한 메모리 액세스 퍼미션의 룩업(look up)에 기초한 단계 116에서, 메모리 액세스 검사 회로(22)는 타겟 주소에 대한 로드가 허용될 것인지를 결정하고 그렇지 않은 경우 단계 118에서 메모리 보호 오류가 발생한다. 따라서 보안 스레드 모드가 권한이 없는 것으로 처리되고 선택한 스택 포인터와 관련된 주소가 권한이 있는 메모리(메인 스택 포인터가 현재 선택된 경우 일반적으로 예상됨)를 가리키는 경우 로드가 허용되지 않고 메모리 오류는 부적절하거나 보안 취약성을 유발할 수 있는 방식으로 메인 스택 포인터 값을 조작하는 후속 안전한 코드를 방지할 수 있다..
퍼미션 체크가 통과하면(타겟 주소에 대한 로드가 허용됨) 단계 120에서 처리 회로는 재진입 인에이블 구성 값(36)이 재진입 검사가 인에이블되었음을 나타내는지 여부를 검출한다. 재진입 검사가 디스에이블된 경우 방법은 단계 106으로 진행하여 전술한 대로 정상적으로 SG 명령을 실행한다. 재진입 검사가 디스에이블된 경우에도 단계 116에서 퍼미션 체크가 여전히 트리거되어 스택 조작 공격에 대한 보호를 제공한다.
재진입 검사가 인에이블되면 방법은 단계 122로 진행한다. 단계 114에서 로드 요청이 아직 발행되지 않은 경우, 타겟 주소를 지정하는 로드 요청이 단계 122에서 발행될 수 있다(실제로 재진입 검사가 인에이블된 경우에는 단계 114에서 로드 요청을 발행하여 퍼미션 체크를 트리거하는 것이 더 효율적일 수 있다.). 로드 요청이 단계 114에서 발행되었는지 또는 단계 122에서 발행되었는지에 관계없이, 단계 122에서 처리 회로(4)는 타겟 주소에 대한 로드 요청에 응답하여 메모리(6)로부터 로드된 값이, 도 5에 도시된 바와 같이 호출자 상태의 추가 상태 저장이 수행될 때 스택에 저장되는 무결성 서명(50)과 일치하는지 여부를 검출한다. 로드된 값이 무결성 서명과 일치하면, 재진입 시나리오가 있으므로 단계 124에서 제 1인스턴스가 아직 완료되지 않았을 때 안전한 함수의 제 2 인스턴스를 실행하여 잘못된 처리 결과가 발생하지 않도록 보안(secure) 오류가 발생한다.
또한, 재진입 검사가 인에이블되면, 단계 126에서 처리 회로는 스택 포인트 선택 값(30)이 현재 선택된 상태 포인터가 메인 스택 포인터임을 나타내는지, 즉 스택 포인터 선택 값이 이 예에서 0과 같은지 여부를 검사한다. 현재 선택된 스택 포인터가 메인 스택 포인터이면 다시 단계 124에서 보안 오류가 발생한. 로드된 값이 무결성 서명과 일치하지 않고 현재 선택된 스택 포인터가 프로세스 스택 포인터(스택 포인터 선택 값이 1과 같음)이면 단계 106에서 재진입 검사가 통과되었으므로 SG 명령이 정상적으로 실행된다.
따라서 요약하면 보안 게이트웨이 명령을 사용하여 스택 포인터 값의 검증을 트리거하고 인에이블된 경우 재진입 검사를 실행하면, 공격에 대한 보호를 제공할 뿐만 아니라 재진입 시나리오에 대한 소프트웨어 검출 또는 완화의 필요성을 피하여 성능을 향상시킬 수 있다.
도 11은 사용될 수 있는 시뮬레이터 구현을 도시한다. 전술한 실시 예는 관련 기술을 지원하는 특정한 처리 하드웨어를 동작시키기 위한 장치 및 방법의 관점에서 본 발명을 구현하지만, 컴퓨터 프로그램의 사용을 통해 구현된 여기서 설명된 실시 예에 따른 명령 실행 환경을 제공하는 것도 가능하다. 이러한 컴퓨터 프로그램은 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한, 시뮬레이터라고도 한다. 다양한 시뮬레이터 컴퓨터 프로그램은, 에뮬레이터, 가상 머신, 모델 및 동적 이진 변환기를 포함하는 이진 변환기를 포함한다. 일반적으로, 시뮬레이터 구현은 호스트 프로세서(230)에서 실행될 수 있고, 선택적으로 호스트 운영 체제(220)를 실행하고, 시뮬레이터 프로그램(210)을 지원할 수 있다. 일부 배열에서, 하드웨어와 제공된 명령 실행 환경 사이에 시뮬레이션의 다중 계층이 있을 수 있으며, 및/또는 동일한 호스트 프로세서에서 제공되는 다중 개별 명령 실행 환경이 있을 수 있다. 역사적으로, 합리적인 속도로 실행되는 시뮬레이터 구현을 제공하려면 강력한 프로세서가 필요했지만, 호환성이나 재사용을 위해 다른 프로세서에 고유한 코드를 실행하려는 경우와 같은 특정 상황에서는 그러한 접근 방안이 정당화될 수 있다. . 예를 들어, 시뮬레이터 구현은 호스트 프로세서 하드웨어에 의해 지원되지 않는 추가 기능을 가진 명령 실행 환경을 제공하거나 일반적으로 다른 하드웨어 아키텍처와 연관된 명령 실행 환경을 제공할 수 있다. 시뮬레이션에 대한 개요는 "어떤 효율적인 아키텍처 시뮬레이션 기술", Robert Bedichek, 1990 겨울 USENIX Conference, 페이지 53-63에 나와 있다.
실시 예가 특정 하드웨어 구성 또는 특징을 참조하여 전술된 범위로, 시뮬레이션 된 실시 예에서, 동등한 기능이 적절한 소프트웨어 구성 또는 특징에 의해 제공될 수 있다. 예를 들어, 컴퓨터 프로그램 로직으로서 시뮬레이션 된 실시 예에서 특정 회로가 구현될 수 있다. 유사하게, 레지스터 또는 캐시와 같은 메모리 하드웨어는 시뮬레이션 된 실시 예에서 소프트웨어 데이터 구조로 구현될 수 있다. 또한, 하드웨어 장치(2)에서 메모리(6)에 액세스하기 위해 사용되는 물리적 주소 공간은 시뮬레이터(210)에 의해 호스트 운영 체제(220)에 의해 사용되는 가상 주소 공간에 매핑되는 시뮬레이션된 주소 공간(200)으로서 에뮬레이션될 수 있다. 전술한 실시 예에서 참조된 하나 이상의 하드웨어 요소가 호스트 하드웨어(예를 들어, 호스트 프로세서(230))에 존재하는 배열에서, 일부 시뮬레이션 된 실시 예는 적절한 경우 호스트 하드웨어를 사용할 수 있다.
시뮬레이터 프로그램(210)은 컴퓨터로 읽을 수 있는 저장 매체(비-일시적 매체 일 수 있음)에 저장될 수 있으며, 타겟 코드(200)(애플리케이션, 운영 체제 및 하이퍼바이저를 포함할 수 있음)에 프로그램 인터페이스(명령 실행 환경)를 제공할 수 있으며, 이는 시뮬레이터 프로그램(210)에 의해 모델링되는 하드웨어 아키텍처의 응용 프로그램 인터페이스와 동일하다. 따라서, 전술한 제 1 및 제 2 유형의 트랜잭션 시작 명령을 포함하는 타겟 코드(200)의 프로그램 명령이, 시뮬레이터 프로그램(210)을 사용하는 명령 실행 환경 내에서부터, 실행될 수 있고, 전술한 장치(2)의 하드웨어 특징을 실제로 갖지 않는 호스트 컴퓨터(230)가 이러한 특징을 에뮬레이트 할 수 있다. 시뮬레이터 프로그램은 프로세싱 프로그램 로직(235), 메모리 액세스 검사 프로그램 로직(240)(MPU 프로그램 로직(242) 및 SAU 프로그램 로직(244) 포함) 및 프로세싱 파이프 라인(4)의 동작을 에뮬레이트하는 기능을 제공하는 예외 제어 프로그램 로직, 메모리 액세스 검사 회로(22)(MPU 26 및 SAU 24 포함) 및 도 1의 하드웨어 장치(2)의 예외 제어 회로(28)를 포함할 수 있다. 시스템(2)의 아키텍처 레지스터(14)는, 호스트 하드웨어(230)에 의해 사용되는 메모리 공간에 타겟 아키텍처의 아키텍처 레지스터를 매핑하기 위해, 시뮬레이터 코드(210)에 의해 유지되는 프로그램 로직(255)을 에뮬레이트하는 레지스터를 사용하여 에뮬레이션 될 수도 있다. 따라서, 위에서 논의된 예에서 하드웨어의 게이트웨이 명령에 의해 트리거되는 보안 검사 및 재진입 검사는, 타겟 코드(200)의 처리에서 프로그램 흐름의 주어진 변경 이후에 보안 게이트웨이 명령이 타겟 코드(200) 내에서 식별될 때, 시뮬레이터 프로그램(210)에 의해 소프트웨어에서 수행되는 대신 도 11의 예에서 가능하다.
본 출원에서 "…하도록 구성된…" 이라는 단어는 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는 것을 의미하기 위해 사용된다. 이러한 맥락에서 "구성"은 하드웨어 또는 소프트웨어의 상호 연결 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 처리 장치가 기능을 수행하도록 프로그래밍 될 수 있다. "구성된"은 정의된 동작을 제공하기 위해 어떤 방식으로든 장치 요소를 변경해야 함을 의미하지 않는다.
본 발명의 예시적인 실시 예가 첨부된 도면을 참조하여 본 명세서에서 상세하게 설명되었지만, 본 발명은 이러한 정확한 실시 예에 한정되지 않으며, 첨부된 특허청구범위에 의해 정의된 본 발명의 범위 및 정신을 벗어나지 않고 당업자에 의해 다양한 변경 및 수정이 이루어질 수 있음을 이해해야 한다.

Claims (23)

  1. 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 수행하는 처리 회로;
    상기 복수의 보안 도메인 중 어느 것이 메모리 액세스의 타겟 주소와 연관되는지를 나타내는 보안 속성(attribute) 데이터에 따라 메모리 액세스가 허용되는지 여부를 검사하는 메모리 액세스 검사 회로; 및
    메모리에 스택 데이터 구조를 나타내는 스택 포인터를 저장하는 적어도 하나의 스택 포인터 레지스터; 를 포함하고, 여기에서:
    상기 덜 안전한 도메인에서의 처리에서부터 상기 안전한 도메인과 연관된 명령 주소를 가진 타겟 명령으로의 프로그램 흐름의 주어진 변경에 대한 응답으로:
    상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점(entry point)을 나타내는 게이트웨이 명령 이외의 명령인 경우, 상기 처리 회로는 오류(fault)를 트리거하도록 구성되고; 그리고
    상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 회로는 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해 스택 포인터 검증 동작(action)을 트리거하도록 구성되는, 장치.
  2. 제 1 항에 있어서,
    상기 스택 포인터 검증 동작은 상기 선택된 스택 포인터 레지스터에 저장된 상기 선택된 스택 포인터로부터 도출된 타겟 주소로부터 값의 로딩을 요청하는 로드 요청이 허용되는지 여부를 검사하기 위해 퍼미션 체크를 트리거하는 단계를 포함하는 장치.
  3. 제 2 항에 있어서,
    상기 처리 회로는 복수의 권한(privilege) 레벨 중 하나에서 동작하도록 구성되고; 그리고
    상기 메모리 액세스 검사 회로는, 타겟 주소에 적용할 수 있는 선택된 액세스 퍼미션 세트가, 선택한 권한 레벨이 상기 타겟 주소에 액세스하는 것을 금지되도록 지정하는 경우, 오류를 트리거하도록 구성되는 장치.
  4. 제 3 항에 있어서,
    상기 처리 회로는 복수의 동작 모드 중 하나에서 데이터 처리를 수행하도록 구성되고; 그리고
    상기 선택된 권한 레벨은 상기 주어진 프로그램 흐름의 변경시에 상기 처리 회로의 현재 동작 모드 및 안전한 도메인의 조합에서의 처리와 관련된 권한 레벨을 포함하는 장치.
  5. 제 3 항 또는 제 4 항에 있어서,
    상기 선택된 액세스 퍼미션 세트는 상기 처리 회로의 현재 도메인이 안전한 도메인일 때 상기 타겟 주소에 적용 가능한 액세스 퍼미션 세트를 포함하는 장치.
  6. 제 2 항 내지 제 5 항 중 어느 한 항에 있어서,
    상기 타겟 주소는 상기 선택된 스택 포인터와 동일한 장치.
  7. 제 2 항 내지 제 6 항 중 어느 한 항에 있어서,
    상기 주어진 프로그램 흐름의 변경에 응답하여, 상기 타겟 명령이 게이트웨이 명령일 때, 상기 처리 회로는 상기 게이트웨이 명령에 응답하여 재진입 검사를 수행하도록 구성되고;
    상기 재진입 검사는 상기 타겟 주소로부터 로드된 값이 적어도 하나의 무결성 서명 값(integrity signature value) 중 하나일 때 오류를 트리거하는 것을 포함하는 장치.
  8. 제 7 항에 있어서,
    상기 주어진 프로그램 흐름의 변경에 응답하여, 상기 타겟 명령이 게이트웨이 명령인 경우 :
    상기 처리 회로는 상기 재진입 검사가 인에이블 또는 디스에이블되었는지를 지정하는 재진입 검사 인에이블 값(enable value)에 기초하여 상기 게이트웨이 명령에 응답하여 상기 재진입 검사를 수행할지 여부를 결정하도록 구성되는 장치.
  9. 제 7 항에 있어서,
    상기 주어진 프로그램 흐름의 변경에 응답하여, 상기 타겟 명령이 게이트웨이 명령인 경우 :
    상기 처리 회로는 상기 재진입 검사 인에이블 값이 재진입 검사가 디스에이블됨을 지정하는 경우에도 상기 타겟 주소에 대한 상기 퍼미션 체크를 트리거하도록 구성되는 장치.
  10. 제 7 항 내지 제 9 항 중 어느 한 항에 있어서,
    적어도 상기 처리 회로의 현재 보안 도메인에 기초하여 선택된 복수의 예외(exception) 진입 트랜지션 중 하나를 수행하기 위해 예외 조건에 응답하는 예외 제어 회로를 포함하고, 여기서 적어도 복수의 예외 진입 트랜지션의 서브 세트인 경우, 상기 예외 제어 회로는 적어도 하나의 무결성 서명 값 중 상기 하나를 포함하는 스택 프레임을 상기 적어도 하나의 스택 포인터 레지스터에 저장된 상기 스택 포인터에 의해 식별되는 스택 데이터 구조로 저장하는 것을 트리거하도록 구성되는 장치.
  11. 제 7 항 내지 제 10 항 중 어느 한 항에 있어서,
    적어도 예외 리턴(return) 조건과 관련된 보안 도메인에 기초하여 선택된 복수의 예외 리턴 트랜지션 중 하나를 수행하기 위해 예외 리턴 조건에 응답하는 예외 제어 회로를 포함하고, 여기서 복수의 예외 리턴 트랜지션의 적어도 서브 세트인 경우, 상기 예외 제어 회로는, 상기 액세스된 스택 프레임의 소정의 위치(position)에서의 값과 상기 적어도 하나의 무결성 서명 값 중 적어도 하나 사이에 불일치(mismatch)가 검출될 때, 해당 예외 리턴 트랜지션을 위해 선택된 주어진 스택 데이터 구조로부터 스택 프레임에 액세스하고 오류를 트리거하는 것을 포함하는 무결성 서명 검사를 수행하도록 구성되는 장치.
  12. 제 7 항 내지 제 11 항 중 어느 한 항에 있어서,
    상기 재진입 검사는, 또한 스택 포인터 선택 값이, 아키텍처 상태를 스태킹 또는 언 스태킹하는 데 사용할 스택 포인터 레지스터를 결정하기 위한, 소정의 값을 가질 때 오류를 트리거하는 단계를 포함하는 장치.
  13. 제 12 항에 있어서,
    주어진 보안 도메인 내에서, 상기 처리 회로는 예외 처리를 위한 핸들러 모드 및 백그라운드 처리를 위한 스레드 모드를 포함하는 복수의 모드 중 하나에서 데이터 처리를 수행하도록 구성되고;
    상기 장치는, 예외 조건에 응답하여,
    상기 스레드 모드에서 예외 조건이 발생하고 상기 스택 포인터 선택 값이 제 1 값을 갖는 경우, 프로세스 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 프로세스 스택 데이터 구조; 및
    상기 스레드 모드에서 예외 조건이 발생하고 상기 스택 포인터 선택 값이 제 2 값을 갖는 경우, 메인 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 메인 스택 데이터 구조로;
    아키텍처 상태 데이터의 저장을, 트리거하는 예외 제어 회로를 포함하고:
    상기 소정의 값은 상기 제 2 값을 포함하는 장치.
  14. 제 13 항에 있어서,
    보안 핸들러 모드 예외 진입 트랜지션에 대한 적어도 하나의 보안 스레드 모드에 응답하여, 상기 예외 제어 회로는 상기 스택 포인터 선택 값을 상기 제 2 값으로 업데이트하도록 구성되는 장치.
  15. 제 7 항 내지 제 14 항 중 어느 한 항에 있어서,
    상기 안전한 도메인에서의 처리로부터 상기 안전한 도메인과 관련된 명령 주소를 갖는 게이트웨이 명령으로의 프로그램 흐름의 변경에 응답하여, 상기 처리 회로는 상기 재진입 검사를 생략하도록 구성되는 장치.
  16. 제 1 항에 있어서,
    주어진 보안 도메인 내에서, 상기 처리 회로는 예외 처리를 위한 핸들러 모드 및 백그라운드 처리를 위한 스레드 모드를 포함하는 복수의 모드 중 하나에서 데이터 처리를 수행하도록 구성되고;
    상기 장치는, 예외 조건에 응답하여,
    상기 스레드 모드에서 예외 조건이 발생하고 상기 스택 포인터 선택 값이 제 1 값을 갖는 경우, 프로세스 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 프로세스 스택 데이터 구조; 및
    상기 스레드 모드에서 예외 조건이 발생하고 상기 스택 포인터 선택 값이 제 2 값을 갖는 경우, 메인 스택 포인터 레지스터에 저장된 스택 포인터에 의해 식별되는 메인 스택 데이터 구조로;
    아키텍처 상태 데이터의 저장을, 트리거하는 예외 제어 회로를 포함하고:
    상기 스택 포인터 검증 동작은 상기 스택 포인터 선택 값이 상기 제 2 값을 가질 때 오류를 트리거하는 것을 포함하는 장치.
  17. 제 1 항 내지 제 16 항 중 어느 한 항에 있어서,
    상기 주어진 프로그램 흐름의 변경에 응답하여, 상기 타겟 명령이 게이트웨이 명령이고 상기 게이트웨이 명령에 응답하여 수행된 적어도 하나의 보안 검사가 통과될 때, 상기 처리 회로는 상기 덜 안전한 도메인에서 안전한 도메인으로 현재 보안 도메인의 스위치를 트리거하도록 구성하는 장치.
  18. 제 1 항 내지 제 17 항 중 어느 한 항에 있어서,
    상기 주어진 제어 흐름의 변경에 응답하여, 상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 회로는 적어도 상기 처리 회로가 소정의 동작 모드에 있을 때 동작을 검증하는 상기 스택 포인터를 트리거하도록 구성되는 장치.
  19. 제 18 항에 있어서,
    상기 주어진 보안 도메인 내에서, 상기 처리 회로는 예외 처리를 위한 핸들러 모드 및 백그라운드 처리를 위한 스레드 모드를 포함하는 복수의 모드 중 하나에서 데이터 처리를 수행하도록 구성되고; 그리고
    상기 소정의 동작 모드는 스레드 모드를 포함하는 장치.
  20. 제 18 항 또는 제 19 항에 있어서,
    제어 흐름의 상기 주어진 변경에 응답하여, 상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 회로는 상기 처리 회로가 상기 소정의 동작 모드 이외의 동작 모드에 있을 때 상기 스택 포인터 검증 동작을 생략하도록 구성되는 장치.
  21. 적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 수행할 수 있는 처리 회로를 위한 데이터 처리 방법으로서, 메모리 액세스 허용 여부를 검사하는 것은, 복수의 보안 도메인 중 어느 것이 상기 메모리 액세스의 타겟 주소와 연관되는지를 표시하는 보안 속성 데이터에 의존하고;
    상기 방법은, 덜 안전한 도메인에서의 처리로부터 상기 안전한 도메인과 연관된 명령 주소를 갖는 타겟 명령으로의 프로그램 흐름의 주어진 변경에 응답하여:
    상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점을 나타내는 게이트웨이 명령인지 여부를 결정하는 단계;
    상기 타겟 명령이 상기 게이트웨이 명령이 아닌 다른 명령일 때, 오류를 트리거링하는 단계; 및
    상기 타겟 명령이 상기 게이트웨이 명령인 경우, 스택 포인터 검증 동작을 트리거하여 선택된 스택 포인터 레지스터에 저장된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해, 상기 스택 포인터 검증 동작을 트리거링하는 단계를 포함하는 데이터 처리 방법.
  22. 명령 실행을 위한 명령 실행 환경을 제공하기 위해 호스트 데이터 처리 장치를 제어하기 위한 컴퓨터 프로그램에 있어서, 상기 컴퓨터 프로그램은:
    적어도 하나의 안전한 도메인 및 덜 안전한 도메인을 포함하는 복수의 보안 도메인 중 하나에서 데이터 처리를 지원하기 위한 처리 프로그램 로직;
    상기 복수의 보안 도메인 중 어느 것이 상기 메모리 액세스의 타겟 주소와 연관되는지를 나타내는 보안 속성 데이터에 따라 메모리 액세스가 허용되는지 여부를 검사하는 메모리 액세스 검사 프로그램 로직; 및
    상기 컴퓨터 프로그램에 의해 시뮬레이션된 타겟 아키텍처의 시뮬레이션된 아키텍처 레지스터에 대한 액세스를 시뮬레이션 하기 위해 호스트 데이터 처리 장치의 메모리에 대한 액세스를 제어하는 레지스터 에뮬레이팅 프로그램 로직을 포함하고, 상기 시뮬레이션된 아키텍처 레지스터는 메모리에 스택 데이터 구조를 나타내는 스택 포인터를 저장하는 적어도 하나의 스택 포인터 레지스터를 포함하고; 여기에서:
    상기 덜 안전한 도메인의 처리에서 상기 안전한 도메인과 연관된 명령 주소를 가진 타겟 명령으로의 프로그램 흐름의 주어진 변경에 대한 응답으로:
    상기 타겟 명령이 상기 안전한 도메인에 대한 유효한 진입점을 나타내는 게이트웨이 명령 이외의 명령인 경우, 상기 처리 프로그램 로직은 오류를 트리거하도록 구성되고; 그리고
    상기 타겟 명령이 상기 게이트웨이 명령일 때, 상기 처리 프로그램 로직은 상기 시뮬레이션된 아키텍처 레지스터의 선택된 스택 포인터 레지스터와 연관된 선택된 스택 포인터를 사용하는 것이 안전한지 여부를 검증하기 위해 스택 포인터 검증 동작을 트리거하도록 구성되는 컴퓨터 프로그램.
  23. 제 22 항의 컴퓨터 프로그램을 저장하는 컴퓨터 판독 가능 저장 매체.
KR1020217005759A 2018-10-08 2019-09-03 스택 포인터의 검증 KR20210060443A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB1816354.3 2018-10-08
GB1816354.3A GB2577878B (en) 2018-10-08 2018-10-08 Transition disable indicator
GB1819123.9 2018-11-23
GB1819123.9A GB2577947B (en) 2018-10-08 2018-11-23 Verifying stack pointer
PCT/GB2019/052449 WO2020074854A1 (en) 2018-10-08 2019-09-03 Verifying stack pointer

Publications (1)

Publication Number Publication Date
KR20210060443A true KR20210060443A (ko) 2021-05-26

Family

ID=64397424

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020217004820A KR20210068006A (ko) 2018-10-08 2019-08-22 트랜지션 디스에이블 표시기
KR1020217005759A KR20210060443A (ko) 2018-10-08 2019-09-03 스택 포인터의 검증

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020217004820A KR20210068006A (ko) 2018-10-08 2019-08-22 트랜지션 디스에이블 표시기

Country Status (9)

Country Link
US (2) US11354404B2 (ko)
EP (2) EP3864554B1 (ko)
JP (2) JP7364668B2 (ko)
KR (2) KR20210068006A (ko)
CN (2) CN112805709B (ko)
GB (2) GB2577878B (ko)
IL (1) IL280715A (ko)
TW (2) TWI811456B (ko)
WO (2) WO2020074853A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2589895B (en) * 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
US11784786B2 (en) 2020-08-14 2023-10-10 Intel Corporation Mitigating security vulnerabilities with memory allocation markers in cryptographic computing systems
GB2611823B (en) * 2021-10-18 2023-10-11 Advanced Risc Mach Ltd Technique for handling sealed capabilities
US20230315457A1 (en) * 2022-03-31 2023-10-05 Mellanox Technologies, Ltd. Processor with Instructions for Resetting Multiple Registers
GB2623800A (en) * 2022-10-27 2024-05-01 Advanced Risc Mach Ltd Stack pointer switch validity checking

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5701493A (en) * 1995-08-03 1997-12-23 Advanced Risc Machines Limited Exception handling method and apparatus in data processing systems
US6363473B1 (en) * 1999-04-01 2002-03-26 Compaq Information Technologies Group, L.P. Simulated memory stack in a stackless environment
EP1329787B1 (en) 2002-01-16 2019-08-28 Texas Instruments Incorporated Secure mode indicator for smart phone or PDA
KR100941104B1 (ko) * 2002-11-18 2010-02-10 에이알엠 리미티드 데이터 처리 장치, 데이터 처리 방법 및 컴퓨터 프로그램을 기억한 컴퓨터 판독가능한 기억매체
GB2396034B (en) * 2002-11-18 2006-03-08 Advanced Risc Mach Ltd Technique for accessing memory in a data processing apparatus
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
EP1865435A1 (en) * 2006-06-06 2007-12-12 Texas Instruments France Enhanced exception handling
US8838924B2 (en) * 2008-05-24 2014-09-16 Via Technologies, Inc. Microprocessor having internal secure memory
US8516577B2 (en) * 2010-09-22 2013-08-20 Intel Corporation Regulating atomic memory operations to prevent denial of service attack
TW201234206A (en) * 2011-02-15 2012-08-16 Ying-Hwi Chang Digital storage device for providing data security and the operation method thereof
US8615614B2 (en) * 2011-11-30 2013-12-24 Freescale Semiconductor, Inc. Message passing using direct memory access unit in a data processing system
GB2499287A (en) * 2012-02-08 2013-08-14 Advanced Risc Mach Ltd Exception handling in data processing with different security domains
US9116711B2 (en) * 2012-02-08 2015-08-25 Arm Limited Exception handling in a data processing apparatus having a secure domain and a less secure domain
US9477834B2 (en) 2012-02-08 2016-10-25 Arm Limited Maintaining secure data isolated from non-secure access when switching between domains
US10210349B2 (en) * 2012-02-08 2019-02-19 Arm Limited Data processing apparatus and method using secure domain and less secure domain
GB201217531D0 (en) 2012-10-01 2012-11-14 Advanced Risc Mach Ltd ARMv7-M Asset Protection Proposal
US9213828B2 (en) * 2012-02-08 2015-12-15 Arm Limited Data processing apparatus and method for protecting secure data and program code from non-secure access when switching between secure and less secure domains
US9262320B2 (en) * 2012-06-15 2016-02-16 International Business Machines Corporation Tracking transactional execution footprint
JP5992632B2 (ja) * 2012-11-21 2016-09-14 アップル インコーポレイテッド アクセス制御を管理するためのポリシーベース技法
GB2515047B (en) * 2013-06-12 2021-02-10 Advanced Risc Mach Ltd Security protection of software libraries in a data processing apparatus
GB2525596B (en) * 2014-04-28 2021-05-26 Arm Ip Ltd Access control and code scheduling
US9501667B2 (en) * 2014-06-20 2016-11-22 Arm Limited Security domain prediction

Also Published As

Publication number Publication date
JP7364668B2 (ja) 2023-10-18
WO2020074854A1 (en) 2020-04-16
IL280715A (en) 2021-03-25
JP2022503899A (ja) 2022-01-12
US20210294924A1 (en) 2021-09-23
CN112805709A (zh) 2021-05-14
US11354404B2 (en) 2022-06-07
EP3864554A1 (en) 2021-08-18
CN112805710A (zh) 2021-05-14
TW202030634A (zh) 2020-08-16
US11727110B2 (en) 2023-08-15
JP2022503921A (ja) 2022-01-12
EP3864555A1 (en) 2021-08-18
GB201816354D0 (en) 2018-11-28
TWI808261B (zh) 2023-07-11
GB2577947A (en) 2020-04-15
EP3864554B1 (en) 2023-09-27
TWI811456B (zh) 2023-08-11
TW202029045A (zh) 2020-08-01
EP3864555B1 (en) 2023-10-25
GB2577878A (en) 2020-04-15
US20210224380A1 (en) 2021-07-22
CN112805709B (zh) 2023-08-29
GB2577878B (en) 2020-11-11
JP7432586B2 (ja) 2024-02-16
GB2577947B (en) 2023-07-05
GB201819123D0 (en) 2019-01-09
KR20210068006A (ko) 2021-06-08
WO2020074853A1 (en) 2020-04-16

Similar Documents

Publication Publication Date Title
JP7432586B2 (ja) スタック・ポインタを検証すること
KR102192835B1 (ko) 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호
KR20130036189A (ko) 하드웨어 모드와 보안 플래그에 의존하여 판독된 명령어에 대한 메모리 영역의 제한
US20220366037A1 (en) Domain transition disable configuration parameter
JP2023038361A (ja) 命令セット内の変更を制御する装置及び方法
EP4073635B1 (en) Intermodal calling branch instruction
TW202418067A (zh) 堆疊指標切換有效性檢查
KR20220127325A (ko) 메모리 맵핑된 제어 레지스터들의 세트에 대한 액세스를 제어하기 위한 장치 및 방법
TW202409842A (zh) 例外返回狀態鎖定參數