KR20200051694A - 호출 경로 의존 인증 - Google Patents

호출 경로 의존 인증 Download PDF

Info

Publication number
KR20200051694A
KR20200051694A KR1020207009575A KR20207009575A KR20200051694A KR 20200051694 A KR20200051694 A KR 20200051694A KR 1020207009575 A KR1020207009575 A KR 1020207009575A KR 20207009575 A KR20207009575 A KR 20207009575A KR 20200051694 A KR20200051694 A KR 20200051694A
Authority
KR
South Korea
Prior art keywords
authentication code
path identifier
value
call path
call
Prior art date
Application number
KR1020207009575A
Other languages
English (en)
Other versions
KR102558104B1 (ko
Inventor
시몬 호시
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20200051694A publication Critical patent/KR20200051694A/ko
Application granted granted Critical
Publication of KR102558104B1 publication Critical patent/KR102558104B1/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/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/31User authentication
    • G06F21/42User authentication using separate channels for security data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • 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
    • 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/552Detecting local intrusion or implementing counter-measures involving long-term monitoring or reporting
    • 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/62Protecting access to data via a platform, e.g. using keys or access control rules
    • 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

Abstract

호출 경로 식별자는, 함수 복귀 어드레스에 근거하여, 타겟 함수를 호출하기 위한 호출 명령에 응답하여 치환되게 유지된다. 호출 경로 식별자는, 소스값들과 관련된 인증코드들을 생성 및 확인하기 위한 인증코드 생성 및 확인 명령들을 위한 변경자 값으로서 사용된다. 인증코드 확인 명령에 응답하여, 예상 인증코드가 소스값에 대한 이전에 생성된 인증코드와 불일치하면, 오류 핸들링 응답이 기동된다. 이것은, 그 코드의 일 부분에서 유효한 어드레스 포인터들은 코드의 나머지 부분들에서 사용되려고 시도된 공격들을 방지하는데 유용하다.

Description

호출 경로 의존 인증
본 기술은 데이터 처리 분야에 관한 것이다.
일부 데이터 처리 시스템들은, 공격자는 처리 회로소자에 의해 프로그램 코드의 비인증 섹션들을 실행시키려고 시도할 수도 있는 잠재적 공격들에 대해 보호하기 위한 메카니즘들을 가질 수도 있다. 이러한 공격들에 대해 보호하기 위한 방식의 하나는, 실행 가능한 코드를 메모리에 기록하는 것을 금지하는 방식일 수도 있어, 메모리에 사전설치된 신뢰 소프트웨어만이 실행될 수도 있다. 그렇지만, 이러한 제약으로도, 잠재적 공격은, 합법적으로 실행 가능한 코드의 스니펫(snippet)들을, 그 코드에 있는 간접 분기 명령들을 파괴(subvert)함으로써 함께 속이는 코드 재사용을 수반할 수도 있다. 예를 들면, 공격자가 분기 명령의 타겟 어드레스를 생성하는데 사용된 레지스터에서의 값을 변경하는 경우, 그 공격자는 프로세서를 속여서 코드의 부적절한 포인트로 분기하게 할 수도 있고, 예를 들면 패스워드 확인이나 인증 연산 등의 보안 보호를 제공할 수도 있는 코드의 특정한 섹션들을 우회할 수도 있다.
적어도 일부 예들에서는,
명령들을 실행하는 처리 회로소자; 및
호출 경로 식별자를 기억하는 호출 경로 식별자 기억소자를, 구비하는 장치를 제공하고,
타겟 함수를 호출하기 위한 호출 명령에 응답하여, 처리 회로소자는 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자를 함수 복귀 어드레스로 치환하도록 구성되고;
제1 소스값을 식별하는 인증코드 생성 명령에 응답하여, 처리 회로소자는 제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하도록 구성되고;
이전에 생성된 인증코드와 관련된 제2 소스값을 식별하는 인증코드 확인 명령에 응답하여, 처리 회로소자는 이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하도록 구성되고;
인증코드 생성 명령의 적어도 하나의 변형과 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 의존한 값을 포함한다.
적어도 일부 예들에서는,
타겟 함수의 호출에 응답하여, 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자를 함수 복귀 어드레스로 치환하는 단계;
제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하기 위해 제1 소스값에 관한 인증코드 생성 연산을 수행하는 단계; 및
이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하기 위해, 이전에 생성된 인증코드와 관련된 제2 소스값에 관한 인증코드 확인 연산을 수행하는 단계를 포함하는, 데이터 처리방법을 제공하고,
인증코드 생성 연산의 적어도 하나의 변형과 인증코드 확인 연산의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 의존한 값을 포함한다.
적어도 일부 예들에서는, 데이터 처리장치가 상술한 방법을 수행하도록 제어하는 컴퓨터 프로그램을 제공한다. 이 컴퓨터 프로그램은, 기록매체에 기억되어도 된다. 기록매체는, 비일시적 기록매체이어도 된다.
적어도 일부 예들에서는,
명령 실행 환경에서의 명령들의 실행을 제어하는 처리 프로그램 로직; 및
호출 경로 식별자를 기억하는 호출 경로 식별자 데이터 구조체를 포함하는, 명령들의 실행을 위한 명령 실행 환경을 제공하도록 호스트 데이터 처리장치를 제어하기 위한 컴퓨터 프로그램을 제공하고,
타겟 함수를 호출하기 위한 호출 명령에 응답하여, 처리 프로그램 로직은 호출 경로 식별자 데이터 구조체에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자를 함수 복귀 어드레스로 치환하게 호스트 데이터 처리장치를 제어하도록 구성되고;
제1 소스값을 식별하는 인증코드 생성 명령에 응답하여, 처리 프로그램 로직은 제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하게 호스트 데이터 처리장치를 제어하도록 구성되고;
이전에 생성된 인증코드와 관련된 제2 소스값을 식별하는 인증코드 확인 명령에 응답하여, 처리 프로그램 로직은 이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하게, 호스트 데이터 처리장치를 제어하도록 구성되고;
인증코드 생성 명령의 적어도 하나의 변형과 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 데이터 구조체에 기억된 호출 경로 식별자에 의존한 값을 포함한다.
명령 실행 환경을 제공하기 위해 호스트 데이터 처리장치를 제어하는 컴퓨터 프로그램은, 기록매체에 기억되어도 된다. 기록매체는 비일시적 기록매체이어도 된다.
본 기술의 또 다른 측면들, 특징들 및 이점들은, 첨부도면과 함께 읽혀질 이하의 예들의 설명으로부터 명백해질 것이다.
도 1은 데이터 처리장치의 일례를 개략적으로 도시한 것이고;
도 2는 호출 경로 식별자의 이용을 도시한 것이고;
도 3a, 3b는 인증코드 생성 명령과 인증코드 확인 명령의 일례를 각각 도시한 것이고;
도 4a, 4b는 변경자 값이 호출 경로 식별자에 의존한 인증코드 생성 명령과 인증코드 확인 명령의 예들을 도시한 것이고;
도 5a, 5b는 모드 표시값이 변경자 값의 섹션을 제어하는 경우의 인증코드 생성 명령과 인증코드 확인 명령의 예들을 도시한 것이고;
도 6a, 6b는 호출 경로 식별자 세이브(save) 및 리스토어(restore) 명령의 일례를 각각 도시한 것이고;
도 7은 호출 경로 식별자 치환 명령의 일례를 도시한 것이고;
도 8은 함수 호출에 응답하여 호출 경로 식별자를 치환하는 방법을 도시하는 흐름도이고;
도 9는 함수 복귀에 응답하여 호출 경로 식별자의 치환을 반전시키는 방법을 설명하는 흐름도를 도시한 것이고;
도 10은 인증코드 생성 명령의 처리 방법을 설명하는 흐름도이고;
도 11은 인증코드 확인 명령의 처리 방법을 설명하는 흐름도이며;
도 12는 사용될 수도 있는 시뮬레이터 구현을 도시한 것이다.
장치는, 명령들을 실행하는 처리 회로소자와, 호출 경로 식별자를 기억하는 호출 경로 식별자 기억소자를 갖는다. 타겟 함수를 호출하기 위한 호출 명령에 응답하여, 처리 회로소자는 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자를 함수 복귀 어드레스로 치환하여도 된다. 제1 소스값을 식별하는 인증코드 생성 명령에 응답하여, 처리 회로소자는 제1 소스값과 적어도 하나의 변경자 값에 의존하는 인증코드를 생성하도록 구성된다. 이전에 생성된 인증코드와 관련된 제2 소스값을 식별하는 인증코드 확인 명령에 응답하여, 처리 회로소자는 이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존하는 예상된 인증코드와 일치하는지를 확인하여도 된다. 처리 회로소자는, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하여도 된다. 인증코드 생성 명령의 적어도 하나의 변형과 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 의존한 값을 포함한다.
이것은 코드 재사용 공격들에 대해 보호하기 위한 기술을 제공한다. 호출 경로 식별자는, 하나의 프로그램내에서 현재의 실행 포인트로 이어지는 함수 호출들의 이력을 갖는 레코드를 제공한다. 인증코드 생성 명령은, 분기 어드레스를 생성하기 위한 근거로서 사용되는 값이 생성되는 상기 프로그램에서의 포인트에서 사용될 수 있고, 제1 소스값과 변경자 값에 의존한 인증코드를 생성함으로써, 이것은 그 변경자 값과 관련된 일부 프로그램 콘택스트에 구속될 수 있다. 이러한 호출 경로 식별자를 인증코드 생성 명령의 적어도 하나의 변형에 대해 변경자 값으로서 사용함으로써, 이것은, 상기 소스값의 사용을 상기 프로그램에서의 특별한 포인트에 구속하는 보다 강한 수단을 제공할 수 있는데, 그 이유는, 그 프로그램을 통해 취해진 상이한 루트들로 동일한 함수를 호출하는 경우에도, 호출 경로 식별자는 현재의 실행 포인트로 이어지는 함수 호출들의 이력에 따라 상이한 값들을 취할 수도 있고, 이에 따라 특정한 함수 호출들이 우회되어 있거나 상기 프로그램에서의 특별한 장소에 취해진 상이한 루트를 갖는 경우들이 식별될 수 있기 때문이다. 따라서, 소스값이 사용될 필요가 있을 때의 포인트에서, 인증코드 확인 명령은, 그 값을 제2 소스값으로서 지정할 수도 있고, 해당 제2 소스값에 대한 이전에 생성된 인증코드는 제2 소스값과 적어도 하나의 변경자 값에 의존하는 예상된 인증코드에 대해 확인될 수 있어서, 오류 핸들링 응답은 이전에 생성된 인증코드와 예상된 인증코드가 일치하지 않으면 기동될 수 있다. 따라서, 호출 경로 식별자를 인증코드를 생성하기 위한 변경자로서 사용함으로써, 이것은, 상기 코드의 일 부분에서 그 코드의 다른 부분으로 합법적일 수도 있는 데이터 값들을 공격자가 대체하는 것을 보다 어렵게 할 수도 있다.
일부 예들에서, 호출 경로 식별자에 의존한 값은, 단순히 호출 경로 식별자 자체일 수도 있다. 따라서, 호출 경로 식별자에 따라 변경자를 사용하는 인증코드 생성 명령과 인증코드 확인 명령의 변형들은, 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 직접 적용될 수 있다.
그렇지만, 그 밖의 예들에서, 호출 경로 식별자에 의존한 값은, 암호버전의 호출 경로 식별자를 포함하여도 된다. 이것은, 호출 경로 식별자가 예측될 수 있는 기회를 감소시키고, 공격자가 무차별 공격에서의 호출 경로 식별자를 추측하려고 노력할 필요가 있을 치환의 수를 감소시킬 수 있는 노출중인 호출 경로 식별자에 대한 부채널 정보의 위험을 감소시킴으로써, 보안성을 추가할 수 있다.
일부 구현 예에서, 모든 버전의 인증코드 생성 명령은, 호출 경로 식별자에 의존한 인증코드를 생성할 수 있다. 마찬가지로, 모든 버전의 인증코드 확인 명령은, 호출 경로 식별자에 의존한 값을 포함하는 적어도 하나의 변경자 값을 사용할 수 있다.
그렇지만, 그 밖의 예들에서는, 상이한 변경자 값들을 사용할 수 있는 인증코드 생성 명령과 인증코드 확인 명령의 상이한 변형이 있을 수도 있다.
예를 들면, 인증코드 생성 명령의 제1 변형과 인증코드 확인 명령의 제1 변형은, 호출 경로 식별자와 추가의 변경자 값의 양쪽을 포함하는 다수의 변경자 값들을 사용하여도 된다. 이것은, 호출 경로 식별자의 주어진 값과 스택 포인터의 주어진 값과 관련된 프로그램 코드의 특별한 부분에 인증코드가 생성되는 값의 사용을 제한함으로써 한층 더 보안성을 제공할 수 있다.
또한, 인증코드 생성 명령의 제2 변형과 인증코드 확인 명령의 제2 변형이 제공될 수도 있고, 이때 적어도 하나의 변경자 값은, 호출 경로 식별자에 의존한 값을 포함하고, 인증코드 생성/확인 명령의 적어도 하나의 다른 변형에 사용될 수도 있는 추가의 변경자 값으로부터 독립적이다. 예를 들면, 제2 변형에 대해서, 호출 경로 식별자에 의존한 값은 단지 사용된 변경자일 수도 있다.
인증코드 생성 명령의 추가의 변형과 인증코드 확인 명령의 추가의 변형도, 적어도 하나의 변경자 값이 호출 경로 식별자로부터 독립적인 경우 구현될 수 있다. 따라서, 상이한 버전의 인증코드 생성 명령과 인증코드 확인 명령을 제공하는 것에 의해, 프로그래머 또는 컴파일러가 주어진 소스값의 사용이 특별한 프로그램 콘택스트에 구속되는 범위를 선택할 수 있다. 예를 들면, 일부 시나리오들에서는, 일련의 함수 호출로 프로그램의 대응한 부분이 실행되게 할 수 있는 다수의 상이한 루트들이 있는 경우에도 값이 정확히 인증되게 하는 것이 바람직할 수도 있고, 이 경우에, 상이한 함수 호출 이력들이 유발되는 경우에도 인증이 계속 성공할 수도 있도록 호출 경오 식별자이외의 변경자를 사용하는 추가의 변형을 선택하는 것이 바람직할 수도 있다. 프로그램이 정확히 실행될 때 함수 호출들의 보다 예측가능한 흐름이 있는 프로그램의 그 밖의 부분들에 대해서, 호출 경로 식별자에 의존한 변경자를 사용하는 인증코드 생성 명령의 변형을 사용함으로써 보안성을 높일 수 있다.
인증코드 생성 명령 또는 인증코드 확인 명령의 상이한 변형들은, 여러가지의 방식으로 구별될 수 있다. 일례에서, 인증코드 생성 명령의 각 변형은, 상이한 오피코드를 갖는다. 또는, 상이한 변형들은, 동일한 오피코드를 공유할 수 있지만 인증코드 생성 명령의 어떤 변형이 사용되는지를 지정하는 명령 디코딩내에서의 또 하나의 필드(예를 들면, 사용할 변경자 값의 타입을 특정하는 변경자 필드)를 가질 수 있다. 마찬가지로, 인증코드 확인 명령의 변형들은, 그들의 오피코드에 의해, 또는 해당 명령 인코딩내에서의 추가의 필드에 의해, 구별될 수 있다.
그렇지만, 그 밖의 예들에서는, 모드 기억소자에 기억된 모드 표시값을 사용하여 인증코드 생성 명령 또는 인증코드 확인 명령의 변형을 구별할 수도 있다. 예를 들면, 모드 표시값이 제1 값을 가질 때 인증코드 생성 명령 또는 인증코드 확인 명령을 실행하면, 적어도 하나의 변경자 값은 호출 경로 식별자에 의존한 값을 포함하여도 된다. 모드 표시값이 제2 값을 가질 때, 인증코드 생성 명령/인증코드 확인 명령은, 적어도 하나의 변경자 값이 호출 경로 식별자로부터 독립적이면서 실행되어도 된다. 이것은, 인증코드 생성 명령의 2개이상의 변형들이나 인증코드 확인 명령의 2개이상의 변형들을 표현하기 위한 다수의 명령 인코딩들을 할당할 필요성을 피할 수 있다. 대신에, 단일의 인코딩은, (소스값 자체를 특정하는 비트들이외의) 인증코드 생성 명령의 모든 형태에 사용될 수 있다. 마찬가지로, 이 단일의 인코딩은, 제2 소스값을 특정하는 비트들이외의 인증코드 확인 명령의 모든 변형들에도 사용될 수 있다. 이것은, 그 밖의 타입들의 연산을 표시하기 위해 명령 공간의 그 밖의 인코딩들을 자유롭게 놓아두어, 보다 효율적인 명령 세트 아키텍처 인코딩을 제공한다. 인증코드 생성 명령/인증코드 확인 명령을 실행하기 전에, 또 하나의 명령은, 원하는 변경자 값을 사용하기 위해 이후의 인증코드 생성 명령/인증코드 확인 명령을 제어하는데 필요한 경우 모드 표시값을 변경하여도 된다.
인증코드는 인증코드 생성 명령에 의해 제1 소스값으로서 지정된 임의의 값에 대해 생성될 수 있다. 그렇지만, 제1 소스값이 메모리 어드레스를 포함하는 경우들에 있어서는 이것을 사용하는 것이 특히 유용할 수 있다. 이에 따라 메모리 어드레스에 의존하는 이후의 분기 명령은, 상이한 어드레스가 어드레스 레지스터에 대입되는 코드 재사용에 대해 보호되는 분기 타겟 어드레스를 생성할 수 있다. 인증코드 생성 명령은, 그 인증코드를 사용하여 어드레스를 보호하기 위해서, 어드레스가 먼저 생성될 때 또는, 어드레스가 사용되게 허용되는 프로그램 콘택스트가 도달될 때의 포인트에서 실행될 수 있고, 그 후, 인증코드 확인 명령은 그 어드레스를 예를 들면 이후의 분기 명령이 막 사용하려고 할 때의 포인트에서 실행될 수 있다.
인증코드가 생성될 때, 인증코드는 대응한 소스값과 임의의 방식으로 관련될 수 있다. 예를 들면, 인증코드는 상이한 레지스터에 기억된 제1 소스값과 함께 추가의 레지스터에 기억될 수 있다.
그렇지만, 제1 소스값이 메모리 어드레스를 포함하는 경우, 처리 회로소자는 그 메모리 어드레스로부터의 비트들의 서브세트를 상기 생성된 인증코드로 대체함으로써 그 인증코드를 그 어드레스와 관련지우는 것이 특히 유용할 수 있다. 일부 예들에서, 그 비트들의 서브세트는, 메모리 어드레스의 특정한 수의 최하위 비트들을 포함할 수 있다. 예를 들면, 그 어드레스가 2개의 어드레스 경계의 특정한 파워에 대해 정렬되는 것이라고 알려진 경우, 그 어드레스의 다수의 최하위 비트들이 제로일 수도 있어서 이들이 정보의 손실없이 인증코드로 대체될 수 있다는 것을 예상할 수도 있다. 또는, 그 메모리 어드레스의 상기 대체된 서브세트 비트들은, 다수의 최상위 비트들 또는, 그 메모리 어드레스내의 특정한 임계 비트보다 더 유효한 비트들일 수 있다. 이것은, 프로세서 아키텍처가 특정한 수의 비트들(예: 64비트)을 갖는 어드레스들을 지원할 수도 있긴 하지만, 실제로 실세계 데이터 처리 디바이스들에서는, 전체 64비트 어드레스 공간을 사용할 가능성이 높은 대량의 메모리 스토리지를 갖는 디바이스를 아직 필요로 하지 않는다는 사실을, 이용할 수 있다. 따라서, 비록 물리 어드레스들이 64비트를 가질 수도 있지만, 실제로 보다 적은 수의 비트들만이 실제로 사용되어도 되고, 이때 다수의 최상위 비트들은 제로에 해당한다. 예를 들면, 어드레스의 상위 16비트들이 항상 제로이도록, 48비트 물리 어드레스 공간이 사용되는 것이 현재 구현된 프로세서들에서는 비교적 일반적일 수 있다. 그 48비트 어드레스 공간은 그럼에도 불구하고 오늘날 요구들을 위해 충분한 256테라바이트의 메모리를 제공하지만, 명령 세트 아키텍처는 차후의 확장을 위한 여유를 제공하기 위해 64비트 어드레스가 구현되어 있다. 따라서, 실제로는 사용되지 않는 다수의 상위 비트들이 존재하기 때문에, 이 비트들은 인증코드로 대체될 수 있다(인증코드는 그 어드레스의 상단부에서 이 미사용된 비트들의 임의의 서브세트에 삽입될 수 있다).
그 메모리 어드레스의 특별한 비트들이 인증코드로 대체되는 것에 상관없이, 이것은, 인증코드가 손실되거나 함부로 변경되는 것을 피하기 위해서 메모리 어드레스와 함께 그 인증코드를 유지하는 것을 보장하기 위한 편리한 메카니즘을 제공한다. 그 후, 메모리 어드레스의 상이한 기억소자에의 어떠한 전달도 대응한 인증코드를 본질적으로 전달할 것이어서, 그 후 그 어드레스가 나중에 사용될 때, 인증코드는 그래도 존재된다. 인증코드 확인 명령에 응답하여, 처리 회로소자는, 그 메모리 어드레스의 비트들의 관련된 서브세트로부터 인증코드를 추출하고, 오류 핸들링 응답을, 상기 판독된 인증코드와 상기 예상된 인증코드간에 불일치하면 기동할 수 있다. 상기 판독된 인증코드와 상기 예상된 인증코드간에 일치하면, 인증코드 확인 명령에 응답하여, 처리 회로소자는, 임의의 이후의 분기 또는 그 밖의 명령에 대한 메모리 어드레스를 실제로 사용하기 전에 대응한 비트들의 서브세트를 일부 디폴트 값(이를테면 모두 제로)으로 리세트함으로써 인증코드를 클리어할 수도 있다.
불일치 인증코드에 응답하여 기동된 예외 핸들링 응답은, 구현마다 달라질 수도 있다. 일부 경우들에서, 상기 오류 핸들링 응답은, 예외 조건의 신호를 보내는 것을 포함할 수 있다. 그 후, 예외 핸들러는, 상기 처리 회로소자를 기동하여 상기 검출된 인증 실패에 대해 응답할 수도 있다. 예를 들면, 상기 예외는, 검출되어 있는 보안 위반을 처리하기 위한 운영체계나 다른 감시코드에 대해 현재의 처리 스레드를 포기시키거나 지향시킬 수 있다.
그렇지만, 제2 소스값이 메모리 어드레스를 포함하는 경우, 일 형태의 오류 핸들링 응답은, 그 메모리 어드레스를 무효 어드레스로 변경하는 것을 포함한다. 예를 들면, 그 메모리 어드레스에서의 비트들의 서브세트가 상술한 것처럼 상기 생성된 인증코드로 대체되는 경우(그 메모리 어드레스의 모든 비트들이 실제로 메모리 어드레스의 실제의 비트들을 표현하는데 사용되지 않을 수도 있기 때문이다), 오류 핸들링 응답은, 메모리 어드레스의 그 미사용된 비트들의 서브세트를, 유효 메모리 어드레스들에 대한 그 미사용된 비트들에 보통 보일 디폴트 값이외의 일부 값으로 설정하는 것을 포함할 수 있다. 예컨대, 그 어드레스들이 X비트들 갖지만 단지 Y비트들(Y<X)이 유효 어드레스들에 사용되는 경우, 상위 X-Y비트들의 하나 이상은, 무효 어드레스를 표현하기 위해서 논제로 값으로 설정되어도 된다. 이 해결방법은, 처리장치에 있어서 제공될 필요가 있는 추가된 오류 핸들링 기능성의 양을 감소시킬 수도 있기 때문에 유용할 수 있다. 전형적으로, 처리장치는, 무효 메모리 어드레스에 관한 로드 연산 또는 스토어 연산으로 분기 또는 이 로드 연산 또는 스토어 연산을 수행하려고 할 때 메모리 결함들을 처리하기 위한 예외들을 이미 갖고 있을 수도 있다. 따라서, 불일치 인증코드가 생성될 때 메모리 어드레스를 무효 어드레스로 변경함으로써, 그 오류는 인증코드 확인 명령에 응답하여 명시적으로 플래깅될 필요가 없지만, 그 오류는, 그 어드레스가 이후에 로드/스토어 연산이나 분기를 위해 사용될 때, 메모리 결함이 그 무효 어드레스에의 액세스에 의해 기동되기 때문에 효과적으로 식별될 수도 있다. 예를 들면, 메모리 보호부나 메모리 관리부와 관련된 기존의 메모리 결함 기동 메카니즘들을 사용하여, 인증코드가 불일치할 때 인증코드 확인 명령에 따른 무효 어드레스에 근거하여 그 결함을 생성할 수 있다.
호출 명령에 응답하여 호출 경로 식별자를 함수 복귀 어드레스로 치환하는데 사용된 치환 함수는, 가역치환 함수이어도 된다. 따라서, 타겟 함수로부터 이전의 처리로의 복귀를 기동하기 위한 함수 복귀 명령에 응답하여, 처리 회로소자는, 호출 경로 식별자 기억소자와 함수 복귀 어드레스에 기억된 호출 경로 식별자에 관해 역치환 함수를 수행하여, 그 호출 경로 식별자 기억소자에 대해 기억되는 갱신된 호출 경로 식별자를 생성하여도 된다. 따라서, 이것은, 그 호출 경로 값들은, 특정한 함수의 호출 직전에 또한 그 함수로부터 복귀 직후에 일치하는 것으로 예상되어서, 그 시스템이, 특정한 조건 함수들이 그 사이에 실행되는지에 상관없이 그 프로그램 코드내의 현재의 장소를 일관되게 표현할 수 있다는 것을 의미할 것이다. 이것은, 인증코드 생성 명령/확인 명령을 사용하여 소스값들의 인증을 가능하게 하는 보다 신뢰 가능한 방식을 제공할 수도 있다.
다양한 함수들은 치환 함수로서 사용될 수 있지만, 적어도 하나의 호출 경로 치환 키에 의존하도록 일부의 경우에는 암호함수가 사용되어도 된다. 따라서, 처리 회로소자는, 호출 경로 치환 키에 따라 수행된 암호함수를 사용하여, 호출 경로 식별자를 함수 복귀 어드레스로 치환하도록 구성되어도 된다. 예를 들면, 호출 경로 치환함수는, 블록 암호일 수 있다. 암호적으로 강한 함수의 이용은, 공격자에 의해 호출 경로 식별자의 위조의 위험을 저감시키는데 유용할 수도 있다. 또는, 암호 키에 의존하지 않는 호출 경로 치환함수, 이를테면 순환 중복 체크함수가 사용되어도 된다.
마찬가지로, 인증코드의 생성은, 제1 소스값과 적어도 하나의 변경자 값에 관해 수행된 암호함수에도 기초할 수도 있고, 여기서 암호함수는 인증 키 값에 의존한다. 인증코드 확인 명령에 응답하여 상기 예상된 인증코드를 생성하도록 수행된 함수도, 암호함수에 의존할 수도 있다. 인증 키 값이 호출 경로 치환 키와 동일할 수 있지만, 상이한 키를 호출 경로 치환 치와 인증 키로서 각각 사용함으로써 보안성이 높아질 수도 있다. 일부의 경우들에 있어서, 다수의 버전들의 인증코드 생성 명령이 제공될 수 있음에 따라, 이용 가능한 일 세트의 다수의 인증 키 값들과 상이한 인증 키 값들을 선택할 수 있다. 예를 들면, 하나의 인증코드 생성 명령은 어드레스가 명령 데이터 액세스들이나 분기들에 사용되기 위한 인증코드들을 생성하도록 제공될 수 있고, 상이한 변형의 인증코드 생성 명령은 데이터 액세스 포인터를 위해 인증코드를 생성할 때 상이한 인증 키 값을 선택할 수 있다. 따라서, 일반적으로, 인증코드 생성 명령의 일부의 특성은, 어떤 인증 키 값을 사용할지를 선택할 수도 있다. 마찬가지로, 인증코드 확인 명령도, 상이한 값들을 인증 키로서 선택하기 위한 상이한 버전들을 가질 수도 있다.
호출 경로 식별자 세이브 명령은, 호출 경로 식별자에 의존한 값을 데이터 스토어(예컨대, 스택 데이터 구조체)에 보존하기 위해 처리 회로소자를 기동하도록 제공되어도 된다. 대응한 호출 경로 식별자 리스토어 명령에 응답하여, 상기 처리 회로소자는, 데이터 스토어로부터 판독된 값에 따라 값을 호출 경로 식별자 기억소자에 복원하여도 된다. 이에 따라, 유효 코드 진입점에 이어질 수도 있는 함수 호출의 다른 시퀀스들이 다수가 있는 경우에도, 호출 경로 식별자의 특정한 값이 인증코드를 사용하여 이전에 인증된 값들의 일관된 인증을 보장하기 위해서 계속 복원될 수 있도록, 호출 경로 식별자의 이전의 값들이 보존 및 복원될 수 있다.
보안성을 추가하기 위해서, 호출 경로 식별자 세이브 명령에 응답하여, 데이터 스토어에 기억되는 호출 경로 식별자의 버전은 호출 경로 식별자의 암호 버전이어도 되고, 암호해독은 호출 경로 식별자 리스토어 명령에 응답하여 적용되어 그 데이터 스토어로부터 판독된 값을 암호해독하고 암호해독된 값을 호출 경로 식별자 기억소자에 기억시켜도 된다. 이것은 실제의 호출 경로 식별자를 메모리에 노출시키지 않아 공격자가 호출 경로 치환(해싱) 함수를 추측하거나 얻을 수 있을 기회를 저감시킨다.
일부 예들에서, 호출 경로 식별자를 함수 호출들에 응답하여 치환하는 것과 아울러, 추가의 호출 경로 식별자 치환 명령은, 상기 처리 회로소자를 기동하여 호출 경로 식별자를 그 호출 경로 식별자 치환 명령에서 지정한 소스 오퍼랜드로 치환하여, 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하도록, 구현될 수 있다. 이에 따라, 실제로 함수 호출이 행해지지 않는 중인 경우에도 마치 함수 호출을 행하고 있는 중이었던 것처럼 호출 경로 식별자가 치환될 수 있다. 이에 따라, 프로그램 코드는, 실제로는 대응한 함수 코드를 실행할 필요없이 특정한 시리즈의 함수 호출들에 대한 호출 경로 식별자의 예상 값들을 신속하게 계산할 수 있다. 보안성을 제공하기 위해서, 일부 예들에서는, 임계 특권레벨이상인 특정한 특권 레벨에서 처리 회로소자가 연산중일 때 호출 경로 식별자 치환 명령의 성공적인 실행을 제한할 수도 있다. 현재의 특권 레벨이 임계 특권레벨미만일 때 호출 경로 식별자 치환 명령이 실행되면, 호출 경로 식별자의 성공적인 실행이 (예를 들면, 호출 경로 식별자 치환 명령을 무시함으로써, 또는 예외를 기동함으로써) 방지될 수도 있다. 마찬가지로, 대응한 호출 경로 식별자 역치환 명령은, 그 역치환 명령에 의해 지정된 복귀 어드레스에 근거하여 역치환을 적용하도록 제공될 수 있어, 실제로 함수 복귀가 수행중인 아닐 때에도 함수 복귀를 시뮬레이트 할 수 있다.
일부 예들에서, 상술한 기술은, 하드웨어로 구현되어도 된다. 예를 들면, 하드웨어 기억소자는 호출 경로 식별자 기억소자로서 제공되어도 되고, 하드웨어로 구현된 회로 로직은 타겟 함수의 호출에 응답하여 호출 경로 식별자를 치환하는데 사용되어도 된다. 데이터 처리 시스템은, 인증코드 생성 명령과 인증코드 확인 명령에 대한 명령 디코더 지원을 할 수도 있다. 따라서, 이 명령들에 응답하여, 명령 디코더는, 처리 회로소자를 제어하여, 그 인증코드 각각을 생성 및 확인하기 위해 대응한 연산들을 수행할 수도 있다.
그렇지만, 그 밖의 예들에서, 상기와 같은 연산들은, 호출 경로 식별자 치환과 인증코드 생성 및 확인을 지원하는 하드웨어 요소들을 갖지 않을 수도 있는 범용 컴퓨터상에서 실행된 프로그램 코드를 사용하여 소프트웨어로 제어될 수도 있다. 따라서, 일부의 경우에, 컴퓨터 프로그램은, 데이터 처리장치를 제어하여, 타겟 함수의 호출에 응답하여 호출 경로 식별자 치환을 수행하며, 인증코드 생성 연산과 인증코드 확인 연산을 수행하도록, 구성되어도 된다.
또 하나의 예에서는, 호출 경로 식별자 치환과 인증코드 생성 및 확인 특징들을 지원하는 하드웨어를 자체가 가질 필요가 없는 호스트 데이터 처리장치상에서 실행하기 위한 컴퓨터 프로그램을 포함하는 시뮬레이터를 제공할 수도 있다. 시뮬레이터 프로그램은, 이 특징들을 갖는 프로세서를 에뮬레이트 하여, 상기와 같은 하드웨어 구현 프로세서상에서 실행하도록 구성된 프로그램 코드는, 그 하드웨어 특징들을 요구하지 않는 호스트 데이터 처리장치상에서 실행할 때에도, 정확히 기능할 수 있다. 따라서, 컴퓨터 프로그램은, 호스트 데이터 처리장치를 제어하여 명령들의 실행을 위한 명령 실행 환경을 제공하도록 구성될 수도 있고, 이때의 처리 프로그램 로직은 그 명령 실행 환경에서 상기 명령들의 실행을 제어한다. 컴퓨터 프로그램은, 호출 경로 식별자를 기억하는 호출 경로 식별자 데이터 구조체와, 호출 경로 식별자를 함수 복귀 어드레스로 치환하여 그 호출 경로 식별자 데이터 구조에 대해 기억되는 갱신된 호출 경로 식별자를 생성함으로써 타겟 함수를 호출하기 위한 호출 명령에 응답하는 처리 프로그램 로직을, 제공할 수도 있다. 마찬가지로, 처리 프로그램 로직은 인증코드 생성 명령에 응답하여, 호스트 데이터 처리장치를 제어하여 인증코드를 생성하고, 처리 프로그램 로직은 인증코드 확인 명령에 응답하여, 호스트 데이터 처리장치를 제어하여, 이전에 생성된 인증코드가 예상된 인증코드와 일치하는지를 확인하고 불일치가 검출되면 오류 핸들링 응답을 기동한다. 또, 인증코드 생성 명령 또는 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 변경자 값은, 호출 경로 식별자에 따른 값을 포함하여도 된다.
도 1은 데이터 처리 연산들을 실행하기 위한 처리 로직(4)을 구비하는 데이터 처리장치(2)의 일례를 도시한 것이다. 예컨대, 그 처리 로직은, 다양한 타입들의 처리 연산들을 실행하기 위한 실행 유닛들을 구비하여도 된다. 그 실행 유닛들은, 예를 들면, 가산, 곱셈, AND, OR 등등의 산술 또는 논리연산들을 실시하기 위한 산술/논리유닛(ALU), 부동소수점 오퍼랜드들에 관해 부동소수점 연산들을 수행하기 위한 부동소수점 유닛, 또는 다수의 데이터 요소들을 포함하는 벡터 오퍼랜드들에 관해 벡터처리를 수행하기 위한 벡터 처리유닛을 포함할 수도 있다. 일 세트의 아키텍처 레지스터들(6)은, 처리 로직에 의해 실행된 명령들에 대한 오퍼랜드들을 기억하고, 그 실행된 명령들의 결과들을 기억하도록 구성된다. 명령 디코더(8)는, 상기 처리 로직(4)이나, 데이터 처리장치의 그 밖의 소자들(이를테면, 로드 스토어 유닛(12)이나 암호/암호해독 엔진(14))을 제어하기 위한 제어신호들을 생성하기 위해 명령 해시(10)로부터 페치(fetch)된 명령들을 디코딩하여, 그 디코딩된 명령들로 표현된 연산들을 수행한다. 로드/스토어 유닛(12)은, 데이터 해시(16)이나 메모리(18)로부터 데이터 값을 아키텍처 레지스터들(6)에 로딩하는 로드 연산들이나, 아키텍처 레지스터들(6)로부터 데이터 해시(16)나 메모리(18)에 데이터 값을 기억시키는 스토어 연산들을, 수행하도록 구성된다. 메모리 관리 유닛(20)은, 상기 로드/스토어 연산들에 사용된 어드레스들에 대한 어드레스 변환들을 수행하도록 구성된다. 메모리 관리 유닛(20)은, 어드레스 공간의 상이한 부분들에 사용되는 어드레스 매핑들을 정의하고, 액세스 허가들, 이를테면 그 어드레스 공간의 특정한 페이지들이 판독 가능 또는 기록 가능한지 여부의 허가 설정이나 처리 회로소자(4)의 어떤 특권 레벨들이 특별한 페이지에 액세스하도록 허용되는지의 설정을 정의하는, 메모리(18)로부터의 페이지 테이블들의 일부들을 캐시하기 위한 변환색인버퍼(TLB)를 구비하여도 된다.
암호/암호해독 엔진(14)은, 데이터 값들에 관해 암호 알고리즘들을 수행하여, 키 스토리지(22)에 기억된 암호 키들에 의존하는 데이터를 암호화 또는 암호해독하거나, 암호 해시 함수들을 적용하도록 구성된다. 암호 알고리즘들은, 아키텍처 레지스터들(6)로부터 판독된 일반적인 데이터 값들에 또는, 호출 경로 식별자 기억소자(24)(호출 스택 해시 레지스터)에 기억된 호출 경로 식별자(또는 Call Stack Hash)에 적용되어도 된다. 암호/암호해독 엔진(14)에서 사용한 키들은, 세션마다 생성된 랜덤화된 키들일 수도 있어, 공격자는 또 하나의 세션동안 하나의 세션으로부터 정확히 암호화 또는 해시되는데 재사용할 수 없다.
도 2는 호출 경로 식별자(CSH)의 사용을 도시한 것이다. 아키텍처 레지스터들(6)과는 달리, CSH 레지스터(24)는, 구조적으로 소프트웨어에 보이지 않는 프로세서 코어에 의해 유지된 히든(hidden) 레지스터다. 도 2에 도시된 것처럼, 상기 CSH는, 상기 함수를 호출하였던 호출 명령의 복귀 어드레스에 근거하여 함수 호출에 관해 치환되고, 이전의 값으로 역으로 복귀하기 위해 동일한 함수 복귀 어드레스를 사용하여 함수 복귀에 관해 역으로 치환된다. 따라서, 상기 CSH는, 함수 호출들의 시리즈가 해당 함수의 호출에 이어지는 한 모든 것의 콘택스트내에서 현재 처리된 함수를 표현하는 시그니처로서 작용한다.
예를 들면, 도 2에서는, 함수 복귀 어드레스를 아키텍처 레지스터들(6)내의 링크 레지스터(30)에 기억하는 것에 응답해서, 링크에 의한 분기(branch-with-link) 명령을 사용하여, 함수들을 호출한다. 함수 복귀 어드레스는, 예를 들면, 함수 호출 분기 명령 자체에 후속하는 다음 명령의 어드레스로 설정되어도 된다. 또한, 상기 BL 명령에 응답하여, 현재의 프로그램 실행 포인트를 가리키는 프로그램 카운터 레지스터(32)는, 실행되는 함수 코드의 시작에 대응한 분기 타겟 어드레스로 갱신된다. 분기 타겟 어드레스는, BL 명령의 인코딩에 의해, 또는 레지스터에 지정될 수 있다.
함수 호출 명령 BL에 응답하여, 암호/암호해독 엔진(14)은, 호출 스택 해시(24)의 현재의 값을, 함수 복귀 어드레스와 암호 키 스토리지(22)로부터 판독된 호출 스택 해싱 키로 치환하고, 값의 결과들을 CSH 레지스터(24)에 역으로 기록한다.
제1 호출된 함수(함수 A)내에서 추가의 함수 호출 명령((링크에 의한 분기 명령 BL)에 접하면, 이 함수 호출에 응답하여 CSH는 다시, 추가의 함수 B를 호출하기 위한 프로세스의 일부로서, 제2 함수 호출과 치환 치에 대응한 그 호출 명령의 함수 복귀 어드레스로 치환된다. 이 치환은, 함수 B의 호출로부터 생기는 상기 갱신된 호출 스택 해시가, 함수 B가 상이한 함수내에서부터 호출되어 있었다면 상이한 함수를 함수 A내에서부터 호출할 때 상이한 값을 갖도록 된 것일 수도 있다(예컨대, 함수 A의 호출에 응답하여 수행된 초기의 치환이 생략되었다면, 함수 B의 호출에 의해 결과가 달라질 것이다). 암호 키에 액세스하지 않고 호출 스택 해시의 값을 계산적으로 추측할 수 없게 하는데 비트들의 수가 충분한 암호 해시 함수를 사용함으로써, 이것은, 코드의 현재의 장소와 해당 장소에 도달하는데 사용된 과거 함수 호출들의 이력을 식별하기 위한 강력한 기술을 제공한다.
CSH를 해싱하는데 사용된 치환 함수는, 대응한 역치환 함수를 실행하여서 치환 함수의 주어진 반복을 행할 수 없는 가역 함수다. 주어진 함수로부터 복귀하면, 역치환 함수는, 함수 호출에 사용된 것과 같은 치환 키와 링크 레지스터(30)로부터 판독된 함수 복귀 어드레스를 사용하여 호출 스택 해시(24)의 현재의 값에 적용되어도 된다. 함수들의 네스팅(nesting)을 지원하기 위해서, 링크 레지스터(30)의 콘텐츠는, 다음 네스트(nested) 함수가 호출되기 전에 소프트웨어에 의해 스택에 보존되어도 되어, 그 링크 레지스터는 이후의 함수 호출 명령(BL)에 응답하여 새로운 함수의 함수 복귀 어드레스로 겹쳐써질 수 있다. 마찬가지로, 그 소프트웨어는, 네스트 함수에 대한 함수 복귀를 실행하기 전에 이전의 값을 스택으로부터 링크 레지스터에 복원시키라는 명령을 포함할 수도 있다. 추가의 네스트 함수를 호출하지 않는 함수들에 대해서, 링크 레지스터의 상기와 같은 보존/복원이 필요하지 않다. 따라서, 함수B로부터 복귀할 때에도, 함수A와 관련된 복귀 어드레스의 이전의 값은 링크 레지스터(30)에 복원되어도 되어서, 각 함수 복귀에 있어서, 그 호출 스택 해시 치환은 역치환을 적용함으로써 전개(unwound)될 수 있다. 이 때문에, 소프트웨어가 네스트 함수 호출들을 위한 링크 레지스터의 보존/복원을 정확히 핸들링하면, 함수A에 복귀할 때 호출 스택 해시는 함수B가 호출되었기 전과 같은 값을 가질 것이고, 백그라운드 처리에 복귀할 때는, 호출 스택 해시는 함수A가 호출되었기 전에 가졌었던 동일한 값으로 복귀한다. 공격자가 링크 레지스터(30)에서의 복귀 어드레스를 변경시킴으로써 코드의 상이한 장소로 분기하는 코드를 속이려고 하면, 이에 따라, 그 함수의 호출 전의 호출 스택 해시와 호출 후의 호출 스택 해시간에 불일치해질 수도 있음에 따라, 아래에 설명된 것과 같은 인증연산들이 실패하게 될 수 있으므로 공격이 검출될 수 있다.
예를 들면, CSH 치환 함수는, 64비트 tweak를 갖는 128비트 블록 암호일 수 있다. 복귀 어드레스는, 그 tweak로서 사용된다.
순환 중복 확인(CRC) 알고리즘에 근거한 CSH 치환 함수의 또 하나의 예가 아래에 표시되어 있다:
Figure pct00001
그 알고리즘은 CRC(crc)와 함수 복귀 어드레스(예: 링크 레지스터 값-new_Ir)의 이전의 값을 취하고, 2개의 입력을 갖는 해시로 복귀한다(본 예에서는 그 해시를 수행하기 위해 암호 키가 필요하지 않다). 라인 2에서, 상기 crc의 이전의 값은, 새로운 링크 레지스터 값을 사용하여 배타적 논리합된다(XOR'd). 당업자라면 알 듯이, XOR 연산은 가역적이다. 달리 말하면, A XOR B XOR B는 A로 되돌아간다. 라인 3과 4는, 다항식(POLY)을 사용하여 "XOR 분할"을 수행하는 상기 crc의 비트들을 통해 반복한다. 라인 5에서 복귀되는 종료 결과가 그 다항식을 사용하여 "XOR 분할" 연산의 나머지와 대응하면, 그 출력은 다항식미만일 것을 알 것이다. 이에 따라, 보다 작은 다항식이 사용될 때 일어나는 보다 큰 충돌의 기회가 있다(2개의 입력은 동일한 출력을 가짐). 적절한 다항식을 선택하는 태스크는 당업자에게 알려져 있을 것이다.
본 예에 대응한 역치환 함수는 다음과 같다:
Figure pct00002
그 함수에의 입력들은, 상기 crc와, 함수 호출 복귀 후의 새로운 프로그램 카운터인 new_pc이다(또는, 이와는 달리, 함수 호출 복귀 직전의 링크 레지스터의 값). 상기 알고리즘의 라인 2와 3은, 그 crc의 비트들을 통해 반복한다. 각 반복에 있어서, 고려되는 비트가 '1'이면, 좌측 시프트가 일어나 그 결과는 RPOLY와 XOR되고, 그렇지 않으면, 좌측 시프트가 일어난다. 이것이 행해지면, 라인 4에서, 종료 결과는 new_pc와 XOR되어 결과를 나타낸다. 값 RPOLY는, 제1 자리에서 CRC를 형성하는데 사용되는 POLY의 도함수다. 특히, RPOLY는, POLY를 1비트만큼 좌측으로 시프트한 결과다.
상기 구현에 있어서 POLY는 최하위 비트를 무시하고, RPOLY는 최상위 비트를 무시한다. 따라서, 형태 1abcdef1의 다항식에 대해서, POLY는 '1abcdef'이고, RPOLY는 'abcdef1이다. 달리 말하면, 32비트 다항식에 대해:
RPOLY=(POLY*2+1)& Oxffffffffff.
이들은, 함수 복귀 어드레스에 근거하여 호출 스택 식별자를 해싱하는데 사용될 수 있는 함수들의 단지 일부 예들일 뿐이라는 것을 알 것이다. 그 밖의 함수들도 사용될 수 있다.
도 3a는 인증코드 생성 명령 PAC에 응답하여 수행된 인증코드 생성 연산의 일례를 도시한 것이다. PAC 명령은, 제1 소스 오퍼랜드 src1을 지정한다. 그 소스 오퍼랜드는, 임의의 값일 수 있지만, 인증코드 생성 연산을 어드레스 포인터들에 적용하는데 특히 유용하다. 그 소스 오퍼랜드는 특정한 수의 비트들 X를 포함하는 어드레스를 지정하여도 되지만, 실제로는 특정한 수 Y의 그 비트들만은 유효 어드레스들에 사용되어도 된다(예컨대, X는 64이어도 되고 Y는 48이어도 된다). 따라서, 어드레스의 X-Y 상위 비트들은, 디폴트에 의해 제로로 설정될 것이다.
인증코드 생성 명령 PAC에 응답하여, 상기 소스 오퍼랜드는, 암호 키 스토리지(22)로부터 판독된 암호 키와 적어도 하나의 변경자 값에 근거하여, 인증코드 생성 함수(40)를 제1 소스값에 적용하여도 되는 암호/암호해독 엔진(14)에 건네질 수도 있다. 그 결과로 얻어진 인증코드(PAC)는, 포인터 어드레스의 미사용 상위 비트들에 삽입되어 그 명령의 결과를 생성한다. 그 결과는, 예를 들면, 소스 오퍼랜드에 기억된 동일한 레지스트에 역으로 기록될 수도 있다. 인증코드 생성 함수(40)는, 사용된 함수 또는 암호 키에 대한 지식없이 특별한 어드레스와 관련된 인증코드를 추측하는 것을 계산적으로 실행 불가능하게 하는 암호 해시 함수를 사용하여도 된다.
도 3b는 제2 소스 오퍼랜드 src2를 지정하는 대응한 인증코드 확인 명령 AUT를 도시한 것이다. 제2 소스 오퍼랜드는, 도 3a에 도시된 PAC명령에 응답하여 인증코드 PAC를 그것의 상위 비트들에 삽입함으로써 이전에 인증되어 있던 포인터 어드레스가 될 것이라고 예상되지만, 공격자가 그 포인터를 변경하였으면, 그 인증코드는 유효하지 않을 수도 있다. 상기 인증 확인 명령에 응답하여, 명령 디코더(8)는, 처리 로직(4)과 암호/암호해독 엔진(14)을 제어하여, 동일한 인증코드 생성 함수(40)를, (인증코드 PAC를 제외하는) 제2 소스 오퍼랜드의 어드레스 비트들에 적용하는데, 그 코드가 생성되었을 때 사용된 것들에 대한 변경자 값들과 대응한 암호 키를 사용하는 것이다. 그 후, 예상된 인증코드 PAC'를 제2 소스 오퍼랜드 src2의 상위 비트들로부터 추출된 이전에 생성된 인증코드 PAC와 비교하고, 그 예상된 인증코드와 이전에 생성된 인증코드가 일치하는지를 판정한다. 일치할 경우, 처리를 계속시키고, 그 예상된 인증코드와 이전에 생성된 인증코드가 불일치할 경우는, 오류 핸들링 응답, 예를 들면, 예외를 기동하는 것, 또는, 소스 레지스터의 상위 비트들을 무효 어드레스에 대응하는 값으로 설정하여, 해당 어드레스에의 이후의 액세스가 MMU(20)를 기동하여 어드레스 매핑이 페이지 테이블들에 정의되어 있지 않는 무효 어드레스에 액세스하기 때문에 메모리 장애를 기동하도록 하기 위한 것이, 기동된다.
도 3a 및 3b의 인증코드 생성 및 확인 명령을 사용함으로써, 이것은, 공격자가 비인증 포인터를 투입하고 해당 포인터에 의해 식별된 장소에 코드를 성공적으로 분기시키는 것이 보다 어렵도록, 포인터들이 인증되게 한다. 암호 함수를 인증코드 생성 함수(40)로서 사용함으로써, 이것은 특별한 어드레스와 관련된 인증코드의 무차별 공격 추측을 어렵게 할 수 있다. 이 인증코드 생성 명령 PAC는 포인터 어드레스가 생성될 때의 포인트에서 상기 코드에 포함될 수 있고, 인증코드 확인 명령 AUT은 실제로 그 어드레스에 분기하기 전에 인증코드를 이중으로 확인하는데 그 어드레스를 실제로 사용할 때 나중에 포함될 수 있다.
인증코드 생성 함수(40)는, 구현마다 달라질 수도 있다. 예컨대, 2012년 하이델베르그 베를린 스프린저의 암호 및 정보보안의 이론과 응용에 관한 국제회의에서 Borghoff 등에 의한 "PRINCE-a low-latency block cipher for pervasive computing applications."에서는 블록 암호를 제안한다. 2014년 하이델베르그 베를린 스프린저의 암호 및 정보보안의 이론과 응용에 관한 국제회의에서 Jean 등에 의한 "Tweaks and keys for block ciphers: the TWEAKEY framework."에서는 TWEAKEY 프레임워크, 즉 암호화되는 메시지와 암호 키와 아울러 제2 입력에 의존하도록 암호를 변경 가능하게 하는 프레임워크가 기재되어 있다. 따라서, 일례에서, 인증코드 생성 함수는, TWEAKEY 프레임워크에 근거하여 변경자 값을 제2 입력으로서 사용하여 변경 가능하게 변경된 PRINCE 암호를 포함하여도 된다. PRINCE-TWEAKEY 암호에 대한 추가의 변경은, 청구범위내에 유지하면서 이루어질 수 있다는 것을 알 것이다. 또한, 그 밖의 예들에서, 전체적으로 상이한 암호적 암호들은, 주어진 시스템 구현을 위해 요구된 보안 구현과 하드웨어/소프트웨어 구현간의 균형에 따라, 인증코드 생성 함수(40)으로서 사용될 수 있었다.
상기 PAC 및 AUT 명령의 상이한 변형은, 인증코드를 생성하는데 사용된 암호 함수에 대해 변경하는 상이한 형태의 변경자 값을 사용하여도 된다. 이것은, 공격자가 프로그램 코드의 일부분으로부터 정확히 인증된 포인터들을 판독하고 나서 이 포인터들을 나중에 프로그램 코드에서 재사용하는 것에 의해 프로그램의 해당 특별한 부분에 대한 예상된 유효 천이가 아닌 특별한 포인터 어드레스로 분기를 야기시킬 수 있을 기회를 저감시키기 위해, 그 사용된 변경자 값들이 상기 프로그램 코드의 특별한 영역 고유의 값들이도록 이용될 수 있다.
예를 들면, 일부 변형에서, 변경자 값은, 도 2에 도시된 것처럼 네스트 함수 호출들 동안에 보존/복원되는 함수 복귀 어드레스들을 제공하는 링크 레지스터 값들 등의 임시 변수들을 기억하는 메모리(18)에서의 스택의 장소를 가리키는 아키텍처 레지스터들(6)내의 스택 포인터 레지스터(34)의 콘텐츠에 대응할 수 있다. 예를 들면, 스택 포인터 레지스터(34)는, 콘택스트 전환들 또는 특권 레벨간의 천이들에 응답하여 갱신되어도 되어서(또는 하드웨어로 구현된 일부의 스택 포인터 레지스터들 중에서 현재 액티브 스택 포인터를 제공하기 위해 어떤 레지스터를 참조할지가 달라질 수도 있다), 그 스택 포인터를 변경자 값으로서 사용함으로써 이것은 포인터들의 정확한 인증을 프로그램내의 특별한 콘택스트에 제한할 수 있다.
도 4a 및 4b는, 변경자 값이 CSH 레지스터(24)에 유지된 호출 스택 해시에 의존하는 상기 PAC 및 AUT 명령의 또 하나의 변형을 도시한 것이다. 이 예들에서, 그 변경자는, 암호/암호해독 엔진(14)에 의해 생성된 암호 버전의 호출 스택 해시를 포함한다. CSH를 암호화하는데 사용된 암호 키는, 인증코드 생성 함수(40)에 사용된 암호 키와 다른 키일 수도 있다. 암호 키는, 도 2에 도시된 것과 같은 호출 스택 해시 치환들에 사용된 암호 키와 같을 수 있다. 이와는 달리, 포인터 인증을 위한 호출 스택 해시(24)를 암호화할 때 사용된 암호 키는, 함수 호출들에 관한 호출 스택 해시의 통상의 치환에 사용된 키와는 다를 수도 있다. 일반적으로, 인증코드 생성 함수(40)에 사용된 변경자를 생성하기 위한 근거로서 호출 스택 해시를 사용하는 명령의 변형들을 제공함으로써, 이것은, 특정한 어드레스 포인터들을 프로그램 코드의 특별한 부분들에 대해 사용하는 것을 제한하기 위한 강력한 기술을 제공한다. 프로그램 코드내의 특별한 함수에 처리가 도달할 수도 있는 아주 다양한 루트들이라면, 인증코드 생성 함수에 대한 변경자로서 호출 스택 해시를 사용하는 것은, 스택 포인터에서 사용한 코드의 특별한 영역들의 보다 상세히 정확히 찾아내게 하는데, 특히, 그때는 프로그램들내의 스택 포인터에 대한 잠재적 값들의 수가 호출 스택 해시(24)에 대한 잠재적 값들의 수보다 더 제한되게 될 때이다. 이에 따라, 공격자가 스택 포인터(34)를 변경하거나 동일한 스택 심도에서 그 밖의 함수들로부터 스택 포인터들을 캡처하는 것이 가능하였을 경우에도, 공격자가, 인증된 포인터들을 한쪽의 함수 콘택스트로부터 다른쪽의 함수 콘택스트로 대체하는 것이 보다 어려울 수 있다.
도 4a 및 4b의 예에서, 호출 스택 해시는 사용된 변경자일 뿐이지만, 그 명령들의 일부 변형이, 호출 스택 해시가 스택 포인터(34) 등의 추가의 변경자와 함께 사용되도록 다수의 변경자들을 사용하는 것도 가능할 것이다.
도 5a 및 5b는, 변경자의 어떤 타입을 상기 PAC 및 AUT 명령에 사용할지를 제어하는데 아키텍처 상태(6)내의 상태 레지스터(38)내에 기억된 모드 비트(60)를 사용하는 일례를 도시한 것이다. 예를 들면, 그 모드 비트가 제1값(예컨대, 1)을 가질 때, 암호화된 호출 스택 해시는 변경자로서 사용되고, 그 모드 비트가 제로일 때는, 스택 포인터(34) 등의 또 하나의 변경자가 사용된다. 그렇지 않을 때, 그 명령들은 도 3a 내지 도 4b의 예들과 같은 방식으로 작용한다.
도 6a에 도시된 것처럼, 호출 스택 해시의 현재의 값은, 명령 디코더(8)에 의해 디코딩된 CSH 세이브 명령에 응답하여, CSH 레지스터(24)로부터 메모리(18)에 (예컨대, 스택 기억 구조체내에) 보존되어도 된다. 메모리에 보존되는 CSH의 버전은, 호출 스택 해시 키에 근거하여 암호/암호해독 엔진(14)에서 생성한 암호화된 버전이어도 된다. 이것은, 원래의 호출 스택 해시의 노출을 피한다. 마찬가지로, 도 6b에 도시된 것처럼, 호출 스택 해시 리스토어 명령은, 암호/암호해독 엔진(14)에서 암호해독하고 나서 CSH 레지스터(24)에 복원한, 메모리에서의 스택 또는 다른 장소로부터 판독되는 이전에 보존된 호출 스택 해시를 기동할 수도 있다.
도 7에 도시된 것처럼, 명령 디코더(8)는, 소스 오퍼랜드 op1을 지정하고 상기 처리 로직(4)과 암호/암호해독 엔진(14)을 제어하여 호출 스택 해시 치환 함수나 역치환 함수를 암호 키 스토리지(22)로부터 판독된 호출 스택 해시 키를 사용하여 그 지정된 소스 오퍼랜드 op1에 적용하여, 호출 스택 해시 레지스터(24)에 역으로 기억되는 갱신된 호출 스택 해시 값을 생성하는, 호출 스택 해시 치환 명령이나 호출 스택 해시 역치환 명령도 지원할 수도 있다. 소스 오퍼랜드 op1은, 아키텍처 상태(6)에서 범용 아키텍처 레지스터들 중 하나로부터 판독되어도 된다. 이러한 명령에 의해, 프로그램 코드는, 상기와 같은 함수로부터 생기는 것으로 예상될 대응한 호출 스택 해시를 얻기 위해서 함수들의 호출과 함수 복귀들을 시뮬레이트 할 수 있다. 일부 경우에, 호출 스택 해시 치환 명령이나 역치환 명령은, 상기 프로세서의 특정한 특권레벨들에서만 실행하는 것으로 제한될 수도 있다.
도 8은 함수 호출들을 핸들링하는 방법을 설명하는 흐름도이다. 단계 100에서는, 함수 호출 명령이, 처리 로직(4)을 기동하여 함수의 처리에 분기하도록 실행된다. 일부 경우에, 함수 호출 명령은, 그 함수에 건네지는 인수들을 지정하여도 된다. 함수 호출 명령은 함수의 처리가 완료된 후 처리가 복귀되어야 하는 함수 복귀 어드레스를 지정하여도 되거나, 보다 일반적으로 함수 복귀 어드레스는 함수 호출 명령에 후속하는 다음 명령의 어드레스가 되게 디폴트에 의해 설정되어도 된다. 단계 104에서는, 함수 호출을 위한 함수 복귀 어드레스는, 이전의 콘텐츠를 겹쳐쓰기 위해 링크 레지스터(30)에 기억된다. 링크 레지스터(30)의 이전의 콘텐츠가 유지되는데 필요하였으면(예컨대, 처리가 이미 이전에 호출된 함수내에 있고 다음 함수 호출이 해당 이전에 호출된 함수내의 네스트 함수를 가지기 때문이다), 소프트웨어는, 함수 호출 명령을 실행하기 전에 링크 레지스터 콘텐츠를 상기 스택에 보존하는 명령을 실행할 수도 있다. 단계 106에서는, 암호/암호해독 엔진(14)은, 호출 스택 해시 레지스터(24)를, 링크 레지스터의 새로운 콘텐츠와 암호 키 스토리지(22)로부터 판독된 호출 스택 해시 암호 키로 치환하여, CHS 레지스터(24)에 역으로 기억되는 새로운 값 CSH'을 생성한다. 단계 108에서는, 프로그램 카운터 레지스터(32)는, 함수 호출의 타겟 어드레스에 근거하여, 처리 로직(4)을 제어하여 함수의 타겟 어드레스에 의해 식별된 명령의 처리로 분기하도록, 갱신된다. 그 후, 상기 함수 내에서 처리가 계속된다.
도 9는 함수의 처리로부터의 복귀를 처리하는 방법을 도시한 것이다. 단계 110에서는, 함수 복귀 명령은, (선택사항으로, 스택으로부터 링크 레지스터(30)에 적절한 함수 복귀 어드레스를 복원하는 명령의 실행 후 )실행된다. 단계 112에서는, 암호/암호해독 엔진(40)은, 역치환을 도 8의 단계 106에서 수행된 치환 함수에 적용하여, 현재의 함수를 호출하였기 전에 가졌던 값으로 호출 스택 해시(24)의 현재의 값을 역으로 변환시킨다. 역치환 함수는, 호출 스택 값(24), (함수의 함수 복귀 어드레스를 제공하는) 링크 레지스터(30)의 현재의 콘텐츠 및 상기 스토리지(22)로부터 판독된 호출 스택 해시 키에 적용되어, 그 결과들을 CSH 레지스터(24)에 기록한다. 단계 114에서는, 프로그램 카운터(32)는, 링크 레지스터에 표현된 어드레스로 분기하도록 갱신된다.
도 10은, 인증코드 생성 명령을 처리하는 방법을 도시한 것이다. 단계 120에서는, 제1 소스 오퍼랜드를 지정하는 인증코드 생성 명령이 실행된다. 단계 122에서는, 인증코드 생성 명령의 변형은 어떤 변경자 값을 사용할지를 판정하는데 식별된다. 즉, 인증코드 생성 명령의 디코딩 동안에, 디코더(8)는, 처리 로직에서의 처리 경로들을 활성화하는 제어신호들을 제공하여 적절한 변경자를 선택할 수도 있다. 이와는 달리, 상태 레지스터(38)내의 모드 값은, 사용되는 변경자 변형을 가리킬 수도 있다. 그 변형에 따라, 단계 124, 126 또는 128 중 하나는, 상기 변경자를, 암호화된 호출 스택 해시 값(단계 124), 스택 포인터(34)와 같은 또 하나의 변경자 값(단계 126), 또는 암호화된 호출 스택 해시와 그 또 하나의 변경자 값의 함수(단계 128)로서 판정하도록 수행된다. 일부 경우에, 상기 변경자는, 암호화된 호출 스택 해시나 다른 변경자에 대응한 절대값이 아닐 수도 있지만, 이 값들로부터 얻어진 일부 함수일 수 있다. 변경자의 선택여부에 상관없이, 단계 130에서는, 암호 엔진(14)은, 인증코드 생성 함수를, 상기 명령에서 지정한 소스값, 상기 선택된 변경자 및 인증코드 생성 암호 키에 적용한다. 이 결과로부터 얻어지는 인증코드는, (예컨대, 소스 어드레스의 상위 비트들을 상술한 것과 같은 인증코드로 대체함으로써) 단계 132에서 상기 소스값과 관련된다.
도 11은 인증코드 확인 명령의 처리 방법을 도시하는 흐름도다. 단계 140에서는, 제2 소스 오퍼랜드를 지정하는 인증코드 확인 명령이 실행된다. 단계 142에서는, 그 명령의 변경자 변형은, 도 10의 단계 122와 같은 방식으로 식별된다. 변형이 제공됨에 따라, 상기 변경자는, 각각 단계 144, 146, 148에서, 암호화된 호출 스택 해시의 함수, 스택 포인터와 같은 또 하나의 변경자 값의 함수, 또는 암호화된 호출 스택 해시와 다른 변경자 값 양쪽의 함수 중 하나라고 판정된다. 변경자의 사용에 상관없이, 단계 150에서는, 예상된 인증코드 PAC'는, 도 10의 단계 130에 대한 대응한 함수를 사용하고 상기 선택된 변경자에 근거하여 생성된다. 단계 152에서는, 처리 로직(4)은, 상기 생성된 예상된 인증코드 PAC'가 상기 명령의 제2 소스 오퍼랜드 src2와 관련되는 이전에 생성된 인증코드 PAC와 일치하는지를 판정한다(예를 들면, PAC는 상술한 것처럼 상기 어드레스의 상위 비트들로부터 추출되어도 된다). 인증코드가 불일치하는 경우에, 단계 154에서는, 오류 핸들링 응답이 기동된다. 그후, 그 코드들이 일치할 때, 단계 156에서는, 인증코드는, 예를 들면, 상위 어드레스 비트들을 제로로 클리어함으로써 제2 소스값으로부터 제거되고 나서, 단계 158에서는 제2 소스값을 사용하는 임의의 이후의 연산이 진행되게 할 수도 있다.
요약하면, 히든 레지스터는, 각 함수 호출의 복귀 어드레스에 근거하여 해당 함수 호출에 관해 치환되고, 역으로 그것의 이전의 값으로 동일한 어드레스를 사용하여 상기 복귀시에 역으로 치환되는, 상기 프로세서 코어에 의해 유지되어도 된다. 호출과 복귀에 대한 복귀 어드레스가 값에 있어서 일치하는 한은, 상기 레지스터는, 함수내에서 안정하고, 프로세스가 그것을 호출하는 한 모든 것의 콘택스트내의 해당 함수를 표현하는 시그니처로서 작용한다. 함수 호출과 함수 복귀에서 보여진 복귀 어드레스의 버전간에 불일치하면, 그 치환은 부정확한 결과를 나타낼 수도 있고 이후의 모든 치환은 부정확할 수도 있다(이것은, 예를 들면, 함수의 처리동안에 복귀 어드레스를 변경함으로써 의도된 프로그램 흐름을 파괴하려고 하는 공격자를 검출하는데 사용되어도 된다). 응용레벨 함수 호출들과 감시코드 함수 호출들 양쪽은, 호출 스택 해시에 통합되어도 된다. 호출 스택 치환 함수는, 64비트 tweak를 가진 128비트 블록 암호이어도 된다. 복귀 어드레스는 tweak로서 사용되고, 호출 스택 해시는 필요에 따라 공급되고 암호/암호해독되고, 호출 스택 해시 레지스터에 역으로 기록된다. 커널(운영체계)은, 암호 키를 셋업하여 그 응용으로부터 계속 숨겨질 수도 있다.
(상술한 것처럼 인증코드 생성 명령을 실행함으로써) 소프트웨어로부터의 요구시에, 호출 스택 레지스터의 콘텐츠는, 소프트웨어용 인수(인증코드 생성 명령의 제1 소스 오퍼랜드)와 암호방식으로 혼합되어도 된다. 예를 들면, 상기 인수는, 스택 포인터 또는 함수 복귀 어드레스이어도 된다. 이 값들이 프로그램의 나중의 포인트에서 사용하기 위해 재로딩될 때, 그들은 조합된 시그니처에 대해 인증되어도 된다. 수반된 값들 중 어느 하나(보존된 포인터, 스택 포인터 또는 함수 시그니처)가 변경되면, 인증은 실패할 것이고 그 포인터는 사용 불가능하게 될 수도 있어 상기 응용이 장애가 있을 것이다.
호출 스택 해시(CSH)를 판독하여 또 하나의 파라미터와 조합하는 소프트웨어 액세스는, 전달(판독 또는 기록)용 2개의 스칼라 레지스터와 상기 tweak용 제3 스칼라 레지스터를 지정하는 소프트웨어 명령들을 통해 이루어질 수도 있다. CSH 값은, 호출들과 복귀들을 위한 동일한 블록 암호를 통해 공급될 수도 있지만, 구체적으로는 명령 액세스를 위해 사용된 교체 키를 사용하여 공급될 수도 있다. 이 교체 키는 다시 커널에 의해 구성되고 비밀이 유지될 수도 있다. 이러한 인터페이스는, 스레드 전환 등을 위한 CSH를 보존/복원하는데, 또한 일부의 구현에 있어서는 인증코드 생성/확인 명령을 위한 변경자 값을 추출하는데 사용된다. 상이한 키의 사용은, 이 인터페이스를 사용하여 가짜 호출들을 해시에 또는 해시로부터 교묘히 들맞추려고(wind) 하는 응용 소프트웨어의 가능성에 대해 보호한다.
또 하나의 명령은, 호출 스택 해시가, 마치 호출들 또는 복귀들에 의해, 하지만 복귀 어드레스를 지정하는 레지스터 오퍼랜드를 사용하는 것처럼, 치환되게 한다. 이 명령들은, 직접 소프트웨어인 CSH에 대해 변경을 허용한다. 이 명령은, 커널 특권들을 요구하도록 제한되어도 되거나, 이와는 달리, 추가의 소프트웨어 파라미터들을 CSH에 일시적으로 통합하게 응용 소프트웨어에 대해 이용 가능한 상태로 있을 수도 있다(예를 들면, 스레드 전환동안에 보존된 레지스터들을 유효화함). CSH 치환 명령 또는 역치환 명령은, 상술한 교체 키를 사용하여도 된다. 커널은, 일시적으로 호출 키와 일치하도록 그 교체 키를 설정할 수 있고, 그것의 계산을 행한다. 이에 따라, 커널은 외부 데이터에 근거한 실행시에 CSH의 예상된 값을 신속하게 계산할 수 있다.
도 1은 호출 스택 해시의 생성과, 인증코드 생성 및 확인을 지원하기 위한 하드웨어 자원들을 갖는 데이터 처리장치의 일례를 도시한 것이다. 예를 들면, 이 하드웨어 자원들은, 상기 명령 디코더(8), 상기 호출 스택 해시 레지스터(24) 및 상기 암호/암호해독 엔진(14)을 포함할 수도 있다. 그렇지만, 도 8 내지 도 11에 도시된 방법도, 범용 프로세서상에서 실행하는 범용 소프트웨어를 사용하여 구현될 수 있다.
도 12는 사용할 수도 있는 시뮬레이터 구현을 도시한 것이다. 상술한 실시예들은 관련된 기술들을 지원하는 특정한 처리 하드웨어를 동작시키는 장치 및 방법들의 관점에서 본 발명을 구현하지만, 컴퓨터 프로그램의 이용을 통해 구현되는 여기서 설명된 실시예들에 따라 명령 실행 환경을 제공하는 것도 가능하다. 이러한 컴퓨터 프로그램들은, 하드웨어 아키텍처의 소프트웨어 기반 구현을 제공하는 한, 시뮬레이터라고 하는 경우가 많다. 각종의 시뮬레이터 컴퓨터 프로그램들은, 에뮬레이터들, 가상 머신들, 모델들, 및 동적 이진 변환기를 비롯한 이진 변환기들을 포함한다. 전형적으로, 시뮬레이터 구현은, 시뮬레이터 프로그램(210)을 지원하는 호스트 운영체계(220)를 선택적으로 동작시키는 호스트 프로세서(230)상에서 동작할 수도 있다. 일부의 구성들에는, 하드웨어와 상기 제공된 명령 실행 환경간의 시뮬레이션의 다수의 층들, 및/또는 동일한 호스트 프로세서상에 제공된 다수의 별개의 명령 실행 환경들이 존재할 수도 있다. 역사적으로, 강력한 프로세서들은 합리적 속도로 실행하는 시뮬레이터 구현을 제공하는데 필요하지만, 이러한 해결방법은, 특정한 상황에서, 이를테면, 호환성 또는 재사용 목적을 위해 또 하나의 프로세서 고유의 코드를 실행하기를 바라는 경우에 정당화될 수도 있다. 예를 들면, 시뮬레이터 구현은, 호스트 프로세서 하드웨어에서 지원하지 않는 추가의 기능성을 명령 실행 환경에 제공하여도 되거나, 전형적으로 상이한 하드웨어 아키텍처와 관련된 명령 실행 환경을 제공하여도 된다. 시뮬레이션의 개요는, "Some Efficient Architecture Simulation Techniques", Robert Bedichek, Winter 1990 USENIX Conference, Pages 53-63에 제시되어 있다.
시뮬레이션된 실시예에서, 특별한 하드웨어 구성들 또는 특징들을 참조하여 실시예들을 이전에 설명한 결과로, 동등한 기능성이 적절한 소프트웨어 구성들 또는 특징들에 의해 제공되어도 된다. 예를 들면, 회로소자는, 시뮬레이션된 실시예에서 컴퓨터 프로그램 로직으로서 구현되어도 된다. 마찬가지로, 메모리 하드웨어, 이를테면 레지스터나 해시는, 시뮬레이션된 실시예에서 소프트웨어 데이터 구조체로서 구현되어도 된다. 이전에 설명된 실시예들에서 참조한 하드웨어 요소들 중 하나 이상이 호스트 하드웨어(예를 들면, 호스트 프로세서 230)상에 존재하는 구성들에 있어서, 일부의 시뮬레이션된 실시예들은, 적절한 경우, 호스트 하드웨어를 이용하여도 된다.
시뮬레이터 프로그램(210)은, (비일시적 매체일 수도 있는) 컴퓨터 판독 가능한 기억매체에 기억되어도 되고, 이 시뮬레이터 프로그램(210)에 의해 모형이 만들어지는 하드웨어 아키텍처의 애플리케이션 프로그램 인터페이스와 같은 (애플리케이션들, 운영체계들, 및 하이퍼바이저를 포함할 수도 있는) 타겟 코드(200)에 프로그램 인터페이스(명령 실행 환경)를 제공한다. 따라서, 상술한 함수 호출 명령들과 인증코드 생성/확인 명령들을 포함하는 타겟 코드(200)의 프로그램 명령들은, 시뮬레이터 프로그램(210)을 사용하여 그 명령 실행 환경내에서 실행되어도 되어, 상술한 장치(2)의 하드웨어 특징을 실제로 갖지 않는 호스트 컴퓨터(230)는, 이 특징들을 에뮬레이트 할 수 있다.
본 출원에서, "...하도록 구성된"의 단어는, 장치의 요소가 상기 명시된 연산을 실시할 수 있는 구성을 갖는다는 것을 의미하는데 사용된다. 본 문맥에서, "구성"은, 하드웨어 또는 소프트웨어의 상호연결의 배치 또는 방식을 의미한다. 예를 들면, 상기 장치는 상기 명시된 연산을 제공하는 전용 하드웨어를 가져도 되거나, 프로세서 또는 다른 처리 디바이스는 그 기능을 행하도록 프로그래밍되어도 된다. "하도록 구성된"은, 상기 장치 요소가 임의의 방식으로 상기 명시된 연산을 제공하기 위해서 변경될 필요가 있다는 것을 암시하지는 않는다.
여기서는 예시적 실시예들을 첨부도면을 참조하여 상세히 설명하였지만, 본 발명은 그 구체적인 실시예들에 한정되지 않고, 첨부된 청구항에서 기재된 것과 같은 본 발명의 범위 및 사상으로부터 벗어나지 않고 당업자가 변경 및 수정을 여러 가지로 실시할 수 있다는 것을 알 수 있다.

Claims (20)

  1. 명령들을 실행하는 처리 회로소자; 및
    호출 경로 식별자를 기억하는 호출 경로 식별자 기억소자를, 구비하는 장치로서,
    타겟 함수를 호출하기 위한 호출 명령에 응답하여, 처리 회로소자는 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자를 함수 복귀 어드레스로 치환하도록 구성되고;
    제1 소스값을 식별하는 인증코드 생성 명령에 응답하여, 처리 회로소자는 제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하도록 구성되고;
    이전에 생성된 인증코드와 관련된 제2 소스값을 식별하는 인증코드 확인 명령에 응답하여, 처리 회로소자는 이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하도록 구성되고;
    인증코드 생성 명령의 적어도 하나의 변형과 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 의존한 값을 포함하는, 장치.
  2. 제 1 항에 있어서,
    호출 경로 식별자에 의존한 상기 값은, 암호버전의 호출 경로 식별자를 포함하는, 장치.
  3. 제 1 항 또는 제 2 항에 있어서,
    인증코드 생성 명령의 제1 변형과 인증코드 확인 명령의 제1 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자에 의존한 상기 값과 추가의 변경자 값을 포함하는, 장치.
  4. 제 3 항에 있어서,
    상기 추가의 변경자 값은 스택 포인터를 포함하는, 장치.
  5. 선행하는 청구항 중 어느 한 항에 있어서,
    인증코드 생성 명령의 제2 변형과 인증코드 확인 명령의 제2 변형에 대해서, 상기 적어도 하나의 변경자 값은, 호출 경로 식별자에 의존한 상기 값을 포함하고, 인증코드 생성 명령의 적어도 하나의 다른 변형과 인증코드 확인 명령의 적어도 하나의 다른 변형에 대한 상기 적어도 하나의 변경자 값의 하나로서 사용된 추가의 변경자 값으로부터 독립적인, 장치.
  6. 선행하는 청구항 중 어느 한 항에 있어서,
    인증코드 생성 명령의 추가의 변형과 인증코드 확인 명령의 추가의 변형에 대해서, 상기 적어도 하나의 변경자 값이 상기 호출 경로 식별자로부터 독립적인, 장치.
  7. 선행하는 청구항 중 어느 한 항에 있어서,
    모드 표시값을 기억하는 모드 기억소자를 구비하고;
    모드 표시값이 제1 값을 가질 때 실행된 인증코드 생성 명령 또는 인증코드 확인 명령에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자에 의존한 상기 값을 포함하고;
    모드 표시값이 제2 값을 가질 때 실행된 인증코드 생성 명령 또는 인증코드 확인 명령에 대해서, 상기 적어도 하나의 변경자 값은 상기 호출 경로 식별자로부터 독립적인, 장치.
  8. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제1 소스값이 메모리 어드레스를 포함하고, 인증코드 생성 명령에 응답하여 상기 처리 회로소자는, 메모리 어드레스의 비트들의 서브세트를 상기 생성된 인증코드로 대체하도록 구성되는, 장치.
  9. 선행하는 청구항 중 어느 한 항에 있어서,
    상기 제2 소스값이 메모리 어드레스를 포함하고, 오류 핸들링 응답은 메모리 어드레스를 무효 어드레스로 변경하는 것을 포함하는, 장치.
  10. 선행하는 청구항 중 어느 한 항에 있어서,
    오류 핸들링 응답은, 예외 조건의 신호를 보내는 것을 포함하는, 장치.
  11. 선행하는 청구항 중 어느 한 항에 있어서,
    호출 명령에 응답하여, 처리 회로소자는, 가역치환 함수를 사용하여 호출 경로 식별자를 함수 복귀 어드레스로 치환하도록 구성되고;
    타겟 함수로부터 이전의 처리로의 복귀를 기동하기 위한 함수 복귀 명령에 응답하여, 처리 회로소자는, 호출 경로 식별자 기억소자와 함수 복귀 어드레스에 기억된 호출 경로 식별자에 관해 역치환 함수를 수행하여, 그 호출 경로 식별자 기억소자에 대해 기억되는 갱신된 호출 경로 식별자를 생성하도록 구성되는, 장치.
  12. 선행하는 청구항 중 어느 한 항에 있어서,
    처리 회로소자는, 제1 소스값과 상기 적어도 하나의 변경자 값에 관해 암호함수를 수행함으로써 인증코드를 생성하도록 구성되고, 상기 암호함수는 인증 키 값에 의존하는, 장치.
  13. 제 12 항에 있어서,
    처리 회로소자는, 인증코드 생성 명령의 특성에 의존한 복수의 인증 키 값들 중에서 인증 키 값을 선택하도록 구성되는, 장치.
  14. 선행하는 청구항 중 어느 한 항에 있어서,
    호출 경로 식별자 세이브 명령에 응답하여, 처리 회로소자는, 호출 경로 식별자에 의존한 값을 데이터 스토어에 보존하도록 구성되고;
    호출 경로 식별자 리스토어 명령에 응답하여, 처리 회로소자는, 데이터 스토어로부터 판독된 값에 의존한 호출 경로 식별자 기억소자에, 값을 복원하도록 구성되는, 장치.
  15. 제 14 항에 있어서,
    호출 경로 식별자 세이브 명령에 응답하여, 처리 회로소자는 호출 경로 식별자의 암호 버전을 데이터 스토어에 보존하도록 구성되고,
    호출 경로 식별자 리스토어 명령에 응답하여, 처리 회로소자는 데이터 스토어로부터 판독된 값을 암호해독하고 그 암호해독된 값을 호출 경로 식별자 기억소자에 기억하도록 구성되는, 장치.
  16. 선행하는 청구항 중 어느 한 항에 있어서,
    호출 명령이외의 호출 경로 식별자 치환 명령에 응답하여, 처리 회로소자는, 호출 경로 식별자를 호출 경로 식별자 치환 명령에서 지정한 소스 오퍼랜드로 치환하여, 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하도록 구성되는, 장치.
  17. 제 16 항에 있어서,
    처리 회로소자는 복수의 특권 레벨들 중 하나에서 연산하도록 구성되고;
    처리 회로소자는, 처리 회로소자의 현재의 특권 레벨이 임계 특권레벨미만일 때 호출 경로 식별자 치환 명령의 성공적인 실행을 방지하도록 구성되는, 장치.
  18. 타겟 함수의 호출에 응답하여, 호출 경로 식별자 기억소자에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자를 함수 복귀 어드레스로 치환하는 단계;
    제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하기 위해 제1 소스값에 관한 인증코드 생성 연산을 수행하는 단계; 및
    이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하기 위해, 이전에 생성된 인증코드와 관련된 제2 소스값에 관한 인증코드 확인 연산을 수행하는 단계를 포함하는, 데이터 처리방법으로서,
    인증코드 생성 연산의 적어도 하나의 변형과 인증코드 확인 연산의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 기억소자에 기억된 호출 경로 식별자에 의존한 값을 포함하는, 데이터 처리방법.
  19. 데이터 처리장치가 청구항 18의 방법을 수행하도록 제어하는 컴퓨터 프로그램.
  20. 호스트 데이터 처리장치가 명령들의 실행을 위한 명령 실행 환경을 제공하도록 제어하는 컴퓨터 프로그램으로서,
    명령 실행 환경에서의 상기 명령들의 실행을 제어하는 처리 프로그램 로직; 및
    호출 경로 식별자를 기억하는 호출 경로 식별자 데이터 구조체를 포함하고,
    타겟 함수를 호출하기 위한 호출 명령에 응답하여, 처리 프로그램 로직은 호출 경로 식별자 데이터 구조체에 기억되는 갱신된 호출 경로 식별자를 생성하기 위해, 호출 경로 식별자를 함수 복귀 어드레스로 치환하게 호스트 데이터 처리장치를 제어하도록 구성되고;
    제1 소스값을 식별하는 인증코드 생성 명령에 응답하여, 처리 프로그램 로직은 제1 소스값과 적어도 하나의 변경자 값에 의존한 인증코드를 생성하게 호스트 데이터 처리장치를 제어하도록 구성되고;
    이전에 생성된 인증코드와 관련된 제2 소스값을 식별하는 인증코드 확인 명령에 응답하여, 처리 프로그램 로직은 이전에 생성된 인증코드가 제2 소스값과 적어도 하나의 변경자 값에 의존한 예상된 인증코드와 일치하는지를 확인하고, 이전에 생성된 인증코드와 예상된 인증코드간에 불일치가 검출될 때 오류 핸들링 응답을 기동하게, 호스트 데이터 처리장치를 제어하도록 구성되고;
    인증코드 생성 명령의 적어도 하나의 변형과 인증코드 확인 명령의 적어도 하나의 변형에 대해서, 상기 적어도 하나의 변경자 값은 호출 경로 식별자 데이터 구조체에 기억된 호출 경로 식별자에 의존한 값을 포함하는, 컴퓨터 프로그램.
KR1020207009575A 2017-09-15 2018-08-13 호출 경로 의존 인증 KR102558104B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/705,605 US10740452B2 (en) 2017-09-15 2017-09-15 Call path dependent authentication
US15/705,605 2017-09-15
PCT/GB2018/052293 WO2019053396A1 (en) 2017-09-15 2018-08-13 AUTHENTICATION DEPENDING ON A CALL PATH

Publications (2)

Publication Number Publication Date
KR20200051694A true KR20200051694A (ko) 2020-05-13
KR102558104B1 KR102558104B1 (ko) 2023-07-21

Family

ID=63364085

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207009575A KR102558104B1 (ko) 2017-09-15 2018-08-13 호출 경로 의존 인증

Country Status (7)

Country Link
US (1) US10740452B2 (ko)
EP (1) EP3682362B1 (ko)
JP (1) JP7101761B2 (ko)
KR (1) KR102558104B1 (ko)
CN (1) CN111052115B (ko)
IL (1) IL272691B2 (ko)
WO (1) WO2019053396A1 (ko)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11860996B1 (en) * 2018-04-06 2024-01-02 Apple Inc. Security concepts for web frameworks
US11269786B2 (en) * 2018-07-25 2022-03-08 Intel Corporation Memory data protection based on authenticated encryption
FR3094107B1 (fr) * 2019-03-21 2021-02-26 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
FR3095869B1 (fr) * 2019-05-09 2021-04-09 Commissariat Energie Atomique Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
US11403430B2 (en) * 2019-06-11 2022-08-02 At&T Intellectual Property I, L.P. Secure CPU architecture using encryption of return addresses
FR3098319A1 (fr) 2019-07-05 2021-01-08 Commissariat à l'énergie atomique et aux énergies alternatives Procédé d'exécution d'un code binaire d'une fonction sécurisée par un microprocesseur
US11687646B2 (en) * 2019-08-15 2023-06-27 Dellfer, Inc. Forensic data collection and analysis utilizing function call stacks
US20220277072A1 (en) * 2019-08-16 2022-09-01 Regents Of The University Of Michigan Thwarting control plane attacks with displaced and dilated address spaces
US11263316B2 (en) * 2019-08-20 2022-03-01 Irdeto B.V. Securing software routines
US10831884B1 (en) * 2019-09-16 2020-11-10 International Business Machines Corporation Nested function pointer calls
CN111191203A (zh) * 2020-01-02 2020-05-22 北京字节跳动网络技术有限公司 身份验证方法及装置
US11714676B2 (en) * 2020-01-03 2023-08-01 International Business Machines Corporation Software-directed value profiling with hardware-based guarded storage facility
GB2597249B (en) * 2020-07-16 2022-12-21 Advanced Risc Mach Ltd Authentication code generation/checking instructions
CN111953497B (zh) * 2020-08-06 2023-07-14 山东云海国创云计算装备产业创新中心有限公司 一种基于hmac算法的消息认证码生成装置及方法
CN112100954A (zh) * 2020-08-31 2020-12-18 北京百度网讯科技有限公司 验证芯片的方法、装置和计算机存储介质
US20220191020A1 (en) * 2020-12-16 2022-06-16 International Business Machines Corporation Hardware support for software pointer authentification in a computing system
US20220206825A1 (en) * 2020-12-26 2022-06-30 Intel Corporation Memory-independent and scalable state component initialization for a processor
FR3120718B1 (fr) * 2021-03-09 2023-02-10 Commissariat Energie Atomique Procédé d’exécution d’un programme d’ordinateur par un appareil électronique
WO2023127314A1 (ja) * 2021-12-28 2023-07-06 ソニーセミコンダクタソリューションズ株式会社 情報処理装置および情報処理方法
JP2023101334A (ja) * 2022-01-07 2023-07-20 ソニーセミコンダクタソリューションズ株式会社 情報処理装置および情報処理方法
CN117251165A (zh) * 2023-08-24 2023-12-19 上海合芯数字科技有限公司 Buildroot编译方法、装置、终端及介质
US11941262B1 (en) * 2023-10-31 2024-03-26 Massood Kamalpour Systems and methods for digital data management including creation of storage location with storage access ID

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7020772B2 (en) * 1999-04-06 2006-03-28 Microsoft Corporation Secure execution of program code
US20090144309A1 (en) * 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US20160094552A1 (en) * 2014-09-26 2016-03-31 David M. Durham Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks
US20160110545A1 (en) * 2014-10-17 2016-04-21 Qualcomm Incorporated Code pointer authentication for hardware flow control

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08249206A (ja) * 1995-03-13 1996-09-27 Toshiba Corp スタック領域破壊検出機能付き計算機
US7401330B2 (en) 2003-12-11 2008-07-15 Hewlett-Packard Development Company, L.P. Cloning programming code
US20060143454A1 (en) * 2004-05-27 2006-06-29 Silverbrook Research Pty Ltd Storage of multiple keys in memory
US7469362B2 (en) 2005-04-15 2008-12-23 Microsoft Corporation Using a call stack hash to record the state of a process
US7987450B2 (en) 2005-12-19 2011-07-26 International Business Machines Corporation Stack-based problem identification for a software component
US8880901B2 (en) * 2006-05-25 2014-11-04 Red Hat, Inc. Secure address handling in a processor
US8370821B2 (en) 2007-08-21 2013-02-05 International Business Machines Corporation Method for enabling profile-based call site tailor-ing using profile gathering of cloned functions
US9177147B2 (en) 2012-09-28 2015-11-03 Intel Corporation Protection against return oriented programming attacks
US9015835B2 (en) 2013-06-23 2015-04-21 Intel Corporation Systems and methods for procedure return address verification
GB2516999B (en) 2014-01-31 2015-07-22 Imagination Tech Ltd An improved return stack buffer
US9390264B2 (en) * 2014-04-18 2016-07-12 Qualcomm Incorporated Hardware-based stack control information protection
US9992352B2 (en) 2014-11-01 2018-06-05 Somos, Inc. Toll-free telecommunications and data management platform
US9672351B2 (en) * 2015-02-02 2017-06-06 Qualcomm Incorporated Authenticated control stacks
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7020772B2 (en) * 1999-04-06 2006-03-28 Microsoft Corporation Secure execution of program code
US20090144309A1 (en) * 2007-11-30 2009-06-04 Cabrera Escandell Marco A Method and apparatus for verifying a suspect return pointer in a stack
US20160094552A1 (en) * 2014-09-26 2016-03-31 David M. Durham Creating stack position dependent cryptographic return address to mitigate return oriented programming attacks
US20160110545A1 (en) * 2014-10-17 2016-04-21 Qualcomm Incorporated Code pointer authentication for hardware flow control

Also Published As

Publication number Publication date
US10740452B2 (en) 2020-08-11
EP3682362B1 (en) 2021-09-29
IL272691A (en) 2020-04-30
US20190087566A1 (en) 2019-03-21
IL272691B1 (en) 2023-03-01
CN111052115B (zh) 2023-09-05
CN111052115A (zh) 2020-04-21
JP2020533683A (ja) 2020-11-19
JP7101761B2 (ja) 2022-07-15
WO2019053396A1 (en) 2019-03-21
EP3682362A1 (en) 2020-07-22
KR102558104B1 (ko) 2023-07-21
IL272691B2 (en) 2023-07-01

Similar Documents

Publication Publication Date Title
KR102558104B1 (ko) 호출 경로 의존 인증
US11550962B2 (en) Secure processor and a program for a secure processor
KR20210097021A (ko) 컴퓨터 시스템의 추측적 사이드 채널 분석에 대항하는 방어
US10237059B2 (en) Diversified instruction set processing to enhance security
US8782435B1 (en) System and method for validating program execution at run-time using control flow signatures
KR101457355B1 (ko) 보안 애플리케이션 실행을 제공하는 방법 및 장치
US10095636B2 (en) Secure computing
Milenković et al. Using instruction block signatures to counter code injection attacks
CN113673002A (zh) 一种基于指针加密机制和risc-v协处理器的内存溢出防御方法
Schilling et al. SecWalk: Protecting page table walks against fault attacks
WO2024028565A1 (en) No-operation-compatible instruction
TW202407538A (zh) 無操作相容指令
GB2622065A (en) Counter integrity tree
Milenkovic et al. An efficient runtime instruction block verification for secure embedded systems
Kemerlis et al. Enhancing Security by Diversifying Instruction Sets

Legal Events

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