KR102186675B1 - 데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘 - Google Patents

데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘 Download PDF

Info

Publication number
KR102186675B1
KR102186675B1 KR1020157009802A KR20157009802A KR102186675B1 KR 102186675 B1 KR102186675 B1 KR 102186675B1 KR 1020157009802 A KR1020157009802 A KR 1020157009802A KR 20157009802 A KR20157009802 A KR 20157009802A KR 102186675 B1 KR102186675 B1 KR 102186675B1
Authority
KR
South Korea
Prior art keywords
instruction
domain
data
guard
program
Prior art date
Application number
KR1020157009802A
Other languages
English (en)
Other versions
KR20150065735A (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 KR20150065735A publication Critical patent/KR20150065735A/ko
Application granted granted Critical
Publication of KR102186675B1 publication Critical patent/KR102186675B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/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
    • 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
    • G06F21/629Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
    • 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
    • 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/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/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
    • 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/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2105Dual mode as a secondary aspect

Landscapes

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

Abstract

프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리 회로소자로서, 안전한 도메인과 또 다른 상이한 안전한 도메인으로 이루어진 안전 레벨이 상이한 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 또 다른 상이한 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리 회로소자와; 데이터와 명령어를 기억하는 데이터 스토어로서, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자가 액세스 가능하며 상기 또 다른 상이한 안전한 도메인에서 동작하는 상기 데이터 처리 회로소자가 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과, 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 상기 데이터 스토어를 구비한, 데이터 처리장치. 상기 처리 회로소자는, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 일 영역이 상기 처리 회로소자의 현재 연산의 도메인에 대응하고, 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여, 상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는, 실행될 프로그램 명령어를 검증하도록 구성되고; 상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하여, 상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하도록 구성된다. 상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성한다.

Description

데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘{A SECURE MECHANISM TO SWITCH BETWEEN DIFFERENT DOMAINS OF OPERATION IN A DATA PROCESSOR}
본 발명은, 데이터 처리 분야에 관한 것으로, 특히 상이한 안전 도메인을 이용하는 데이터 처리장치 및 방법에 관한 것이다.
많은 데이터 처리 시스템 및 아키텍처에서는, 비인가된 사람이나 프로세스에 의한 액세스로부터 중요한 데이터(sensitive data)와 코드의 섹션을 분리하여 보호하는 방식을 제공한다. 안전성을 제공할 수 있는 것이 중요하지만, 이 보호에 관한 성능 및 회로 면적에 있어서 부담이 된다.
데이터 및 코드를 안전하게 유지하는 일 방식은, 영국 캠브릿지의 ARM®사가 제공하고, 이들의 TrustZone® 아키텍처에는 안전 상태와 비안전 상태가 있고, 이 상태간에 천이하기 위해 예외 명령어를 사용하고, 안전측의 안전성을 예외 핸들러가 보호한다. 이러한 해결방법은 고도의 안전성을 제공하지만, 그 데이터 처리 시스템의 성능을 저하시키고 또, 상기 예외 핸들러를 통해 모든 호출을 프록시해야 하기 때문에 안전한 소프트웨어를 위한 외부 응용 프로그램 인터페이스 API를 개발하는데 필요한 많은 노력을 들이는, 안전 상태들을 변경시키는데 소프트웨어 예외 핸들러 형태의 상당한 소프트웨어 개입이 필요하다.
마이크로콘트롤러와 같은 소형 시스템의 경우, TrustZone 시스템에 있는 부담은 허용할 수 없을 수도 있어서, 안전성을 손상시키지 않고 성능을 증가시키는 것을 다른 상태간 천이 방법에서 찾아야 한다.
비교적 부담이 낮고 안전한 상태에의 다수의 진입점을 허용하는 덜 안전한 도메인으로부터 더욱 많은 안전한 도메인으로 전환하는 일 방식은, 분기 명령어를 사용하여 퍼블릭(public) 도메인으로부터 프라이빗(private) 도메인의 함수로 분기하는 방식이다. 이 함수는, 안전성 검사 루틴을 호출하는 프로세스가 그 함수를 호출 가능하게 하는 특권이 충분한지를 검사하는 시작부분에서의 안전성 검사 루틴을 포함하기도 하여서, 패스워드나 그 밖의 검사가 행해졌을 수도 있다.
이러한 검사를 피하는 방식의 하나는, 상기 안전성 검사 루틴 외의 포인트에서의 상기 코드로 분기시키는 방식일 것이다. 또 다른 공격은, 상기 함수의 종료까지 프라이빗 함수로 분기시키는 것을 포함하기도 하고, 이에 따라 상기 함수가 퍼블릭측으로 다시 분기하기 전에 1개 또는 2개의 명령어가 실행되면 좋다. 그러나, 이것을 여러 번 행할 수 있으면, 소위 반환 지향 프로그래밍에 함수가 구성될 수 있다.
영국 캠브릿지의 ARM®사에 허가된 특허 US8010772호에는, 공격자가 이러한 함수의 시작부분에 위치된 허가 명령어를 이용하는 함수의 중간으로 점프하는 능력을 금지시키는 방식이 개시되어 있고, 상기 처리회로소자는 덜 안전한 도메인으로부터의 분기 명령어가 보다 안전한 도메인으로 분기할 때 이 허가 명령어에 분기되는 것을 검증한다. 이 시스템의 단점은, 그 허가 명령어에 보낸 상기 명령어가 덜 안전한 도메인으로부터의 분기 명령어이었다는 것을 프로세서가 알게 하는 것이 필요하다는 것이다.
도 1은 허가 명령어 PG를 퍼블릭측으로부터 프라이빗측으로 분기하는 프로그램 코드의 일례를 나타낸다. 도 1에 도시된 것처럼, 분기 명령어와 허가 명령어간에 예외가 일어나는 경우, 이에 따라 상기 PG 명령어 이전에 예외 핸들링 코드를 실행시키므로, 상기 프로세서는 간단한 방식으로 어느 명령어에 의해 분기하는지를 판정하는 것이 가능하지 않을 것이다. 이 포인트에서 일어나는 예외의 문제점을 해결하는 방식의 하나는, 예외가 일어나는 경우에도, 덜 안전한 도메인으로부터의 분기가 보다 일찍 일어났었거나 아직 검사되지 않았었다는 것을 상기 분기 명령어가 실행될 때 나중의 명령어가 알도록 설정될 수 있는 플래그를 이용하는 방식이다. 그러나, 이에 따라 플래그 자체를 함부로 변경할 수 있어 안전성과 밀접한 관계가 있을 가능성이 있다.
효율적인 처리방식으로 상태간에 전환하는 안전성을 향상시키는 것이 바람직할 것이다.
제1 국면에서 본 본 발명의 데이터 처리장치는,
프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리 회로소자로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리 회로소자와;
데이터와 명령어를 기억하는 데이터 스토어로서, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하며 상기 덜 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과, 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 상기 데이터 스토어를 구비하고,
상기 처리 회로소자는,
실행되어야 할 프로그램 명령어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 일 영역이 상기 처리 회로소자의 현재 연산의 도메인에 대응하는 것을 검증하고;
상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여;
상기 프로그램 명령어가 가드(guard) 명령어를 포함하는지 검증하여,
상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하고,
상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하도록, 구성된다.
본 발명은, 일부의 안전 레벨이 서로 다를 수도 있는 상이한 안전한 도메인의 처리간에 전환할 때 일어나는 안전성 관련 문제를 인식한다. 이에 관하여, 많은 처리 회로는, 안전 레벨이 서로 다른 도메인에서 보다 안전한 도메인에서 작동할 때에만 이용 가능한 일부의 중요한 데이터에 액세스한다. 그 상이한 도메인은, 안전 레벨이 서로 달라도 되거나, 안전 레벨이 동일한 형제 도메인이어도 되고 이미 서로 분리되어도 된다. 일반적으로, 보다 안전한 도메인에서의 처리 연산은, 메모리의 덜 안전한 영역이나 이에 대응하게 메모리의 안전한 영역에서 데이터에 액세스할 것이다. 상이하지만 안전 레벨이 동일한 형제 도메인이 있는 경우, 그들 모두는 상기 데이터 스토어의 그 덜 안전한 영역에 액세스하지만, 그들의 도메인에 대응하지 않고 오히려 상기 형제 도메인에 대응하는 그들의 안전한 레벨의 메모리의 영역에 기억된 중요도가 같은 데이터에 액세스 하지 않는다. 또한, 처리되는 프로그램 명령어들도 데이터 스토어의 상이한 안전한 영역내에 기억되며, 현재 실행중인 명령어들이 기억된 상기 데이터 스토어의 영역의 안전한 레벨은 현재의 연산의 도메인의 안전한 레벨에 대응하는 것이 일반적이다. 이에 관해서도, 상기 형제 도메인에 대응하는 메모리의 영역들도 있다. 따라서, 상기 처리 회로소자는, 실행되는 명령어를 상이한 도메인에 대응한 영역으로부터 상기 현재의 연산의 도메인의 영역으로 검색하였다고 판정한 경우, 이것은, 문제가 있다는 표시이거나, 검색된 명령어가 가드 명령어일 경우 도메인 전환이 일어난다는 표시다.
이에 관하여, 상기 현재의 연산의 도메인의 안전 레벨보다 더 안전한 상기 데이터 스토어의 영역에 기억된 중요한 데이터가 상기 처리 회로소자에 액세스 가능하지 않을 수도 있지만, 보다 안전한 영역이나 형제의 안전한 영역에 기억되는 명령어들이 반입(fetch)될 수 있다는 것을 주목해야 한다. 왜냐하면, 데이터 액세스를 할 때 같은 안전성 관련 문제가 없으므로 데이터 액세스와 소프트웨어에 보이지 않는 명령어들 반입에 대해 액세스 허가가 다르게 설정되어 있기 때문이다. 비록 보다 또는 상이한 안전한 영역에 기억된 명령어들을 반입하는 것에 관한 안전성 관련 문제가 있을 수도 있지만, 명령어들을 실행하는 것에 관한 안전성 관련 문제도 있을 수 있다.
따라서, 하나의 명령어를 반입할 때, 그 명령어를 반입한 상기 데이터 스토어의 영역이 상기 현재의 연산의 도메인에 대응하는지를 알기 위해 검사한다. 대응하지 않은 경우, 프로그램 명령어가 가드 명령어인지 아닌지를 판정한다. 프로그램 명령어가 가드 명령어일 경우, 상기 처리 회로소자는, 그 가드 명령어를 검색한 상기 데이터 스토어의 상기 영역에 대응한 연산의 도메인으로 전환시키는 반면에, 그 프로그램 명령어가 가드 명령어가 아닐 경우, 보안 위반 표시를 생성한다.
이렇게, 상이한 도메인에서 하나의 명령어에 분기에 의해 기동된 도메인 전환은 가드 명령어를 거쳐 허가될 뿐이다. 이것은 반드시 상기 처리 회로소자가 가드 명령어에 어떻게 도달하는지를 알 필요가 없으면서 도메인에서의 전환이 가드 명령어에서만 일어나도록 하고, 현재의 연산의 도메인과 다음 실행되는 명령어가 기억되는 영역에 대응한 도메인을 아는 것이 필요할 뿐이다. 이것은 가드 명령어가 액세스된 후에까지 도메인 전환이 일어나지 않기 때문에 잘되어 감에 따라서, 전환에 앞서 연산의 도메인은 현재의 연산의 도메인인 것으로서 알려져 있고, 그 가드 명령어의 존재는 전환이 허용 가능한 것을 나타내기에 충분하다. 또한, 명령어가 가드 명령어일 경우 상기 명령어의 검사 및 가능한 도메인 변경을 일으키는 현재의 연산의 도메인에 대응하지 않는 메모리의 영역으로부터 하나의 명령어를 반입하는 것처럼, 상기 검사 및 도메인 변경은, 중간에 끼어들 수 없는 것을 의미하는 단일 원자적 연산으로서 행해진다.
상이한 도메인에 대응한 영역에 있는 명령어가 액세스되고 가드 명령어가 아닌 경우, 보안 위반 표시가 생성된다.
비록 상기 도메인들과 데이터 스토어가 대응한 안전 레벨을 가질 수도 있지만, 1 대 1 관계가 아닐 수도 있다는 것을 주목해야 한다. 이에 관해서, 상기 처리 회로소자의 연산의 도메인들이 있는 것보다 데이터 스토어 영역에서 더 안전한 레벨일 수도 있다. 그러나, 각 영역은 도메인에 대응하기 때문에, 2개의 처리 도메인(domain), 상기 데이터 스토어의 퍼블릭 및 프라이빗 도메인과 4개의 영역(region), 상기 퍼블릭 도메인에 대응하는 퍼블릭 영역, 및 상기 프라이빗 도메인에 각각 대응한 안전 레벨이 상이한 메모리의 3개의 상이한 안전 영역이 있어, 상기 프라이빗 영역 중 어느 하나에 기억된 가드 명령어는 프라이빗 도메인에서의 처리로 전환을 일으킬 것이다.
일부의 실시예에서, 상기 또 다른 상이한 안전한 도메인과 안전한 도메인이 안전 레벨이 같은 형제 도메인이어도 되지만, 그 밖의 실시예에서는 도메인 모두의 안전 레벨이 상이하고, 상기 또 다른 상이한 안전한 도메인은 상기 안전한 도메인보다 덜 안전한 도메인을 포함한다.
일부의 실시예에서, 상기 처리 회로소자는, 상기 처리 회로소자의 현재의 연산의 도메인의 상기 안전 레벨에 대해 보다 안전한 레벨을 갖는 상기 데이터 스토어의 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답해서만 상기 프로그램 명령어가 가드 명령어를 포함하는지를 검증하도록 구성된다.
일부의 실시예에서, 현재의 연산의 도메인의 상기 안전 레벨에 대해 덜 안전한 레벨을 갖는 도메인에 대응하는 상기 데이터 스토어의 영역에 기억되는 상기 프로그램 명령어에 응답하여, 상기 처리 회로소자는, 상기 명령어가 상기 가드 명령어를 포함하건 포함하지 않건 간에 상기 연산의 도메인을 상기 덜 안전한 레벨로 전환하도록 구성된다.
일반적으로 비록 가드 명령어를 사용하여 상이한 안전 레벨간의 전환을 제어하여도 되지만, 일부의 실시예에서는, 덜 안전한 도메인으로부터 더 안전한 도메인으로 전환할 때만 사용된다. 안전성 관련 쟁점이 덜 안전한 도메인으로부터 더 안전한 도메인으로 전환할 때 보다 자주 생기는 것이 명백하기 때문에, 이 전환시에, 행해질 필요가 있는 임의의 안전성 검사를 행하도록 소정의 포인트에서 전환하는 것이 중요하다. 따라서, 덜 안전한 도메인으로부터 더 안전한 도메인으로의 전환을 제어하는데 가드 명령어가 특히 유용하고, 일부의 경우에는 상기 처리 회로소자는, 가드 명령어의 영역이 더 안전한 레벨이고 덜 안전한 레벨로의 도메인 전환이 항상 허가되는 경우에 상기 가드 명령어를 찾기 위해서만 검사한다.
그러나, 특히 2개보다 많은 도메인이 있는 그 밖의 경우에는, 상기 덜 안전한 도메인이나 상기 더 안전한 도메인으로부터 아주 안전한 도메인으로의 전환은 같은 방식으로, 즉 가드 명령어를 거쳐 행해지면 효율적으로 관리된다. 이러한 대칭을 제공하는 것에 의해, 이러한 보다 쉬운 전환과 보다 효율적인 코드를 제어하기 위한 소프트웨어의 기록을 한다.
일부의 실시예에서, 상기 처리 회로소자는, 상기 보안 위반 표시에 응답하여 예외를 생성하고 장애 처리 코드를 실행한다.
상이한 도메인에 대응한 상기 데이터 스토어의 영역으로부터의 명령어가 가드 명령어가 아닌 경우, 상이한 안전한 연산을 행하여도 된다. 예를 들면, 현재 실행중인 소프트웨어가 소프트웨어를 공격할 가능성이 있고 상기 프로세서의 안전한 측에 액세스가 허용되지 않게 해야 한다는 것을 인식하도록, 예외를 생성하고 나서 장애 처리 코드를 실행하여도 된다. 더 안전한 시스템에서는, 상기 프로세서를 셧다운시키는 것이나 심지어 일부의 심한 경우에는 상기 회로소자 자체를 파괴하는 것과 같은 그 밖의 동작이 행해질 수도 있다.
일부의 실시예에서, 상기 처리 회로소자는 다른 길이의 명령어를 갖는 명령어 세트로부터 프로그램 명령어들을 실행하도록 구성되고, 상기 처리 회로소자가 요구하는 명령어 어드레스 정렬은 상기 다른 길이에 의존하며, 상기 가드 명령어는, 상기 프로그램 명령어들 중 하나에 있는 명령어 어드레스 정렬 포인트들의 적어도 하나의 서브세트 중 하나에 상기 가드 명령어의 시작부분이 있으면, 상기 가드 명령어의 일부가 다음 명령어의 시작부분과 중첩할 수 있을 정도로 충분히 긴 길이를 갖는다.
부주의로 다른 코드를 사용하여 가드 명령어를 흉내 낼 수 없다는 것은 명백히 중요하다. 명령어 세트가 다른 길이의 명령어들을 갖는 경우, 상기 처리 회로소자는, 상기 명령어의 다른 길이에 의해 제어되는 특정 어드레스 정렬 포인트들에서의 명령어들에 액세스할 수 있다. 다른 길이로 인해 명령어들내에서 가끔 일어나는 이들 어드레스 정렬 포인트들 중 하나의 포인트에서 도중에 명령어를 액세스할 수도 있다는 것이다. 이에 따라 비록 상기 가드 명령어가 다른 명령어들과 비교할 때 유일한 코드를 갖도록 상기 명령어 세트가 기록되어 있을 수도 있지만, 그 가드 명령어가 하나의 명령어의 일부와 비교할 때 유일하지 않을 수도 있으므로 문제가 생길 수 있다. 이것은, 상기 명령어의 시작부분에서가 아닌 상기 어드레스 정렬 포인트들 중 하나에서 명령어를 분기하여서 부주의한 진입 포인트들을 상이하게 안전한 도메인에 제공할 수 있었다. 신중하게 명령어들로 분기하여서 유용한 코드 시퀀스를 찾는 기술은, 반환 지향 프로그래밍 공격을 행할 때 일반적인 기술이다.
인접한 명령어들의 일부가 조합된 명령어의 일부가 가드 명령어를 흉내낼 수 없는 것이 확실하다면, 상기 가드 명령어를 보유할 부호화 공간이 대량으로 필요할 수 있다. 이러한 잠재적인 문제는, 가드 명령어가 다른 명령어내에서 시작하는 경우 다음 명령어의 시작부분과 중첩하도록 충분히 긴 상기 가드 명령어를 제공함으로써 해결되어 있다. 이렇게 하여, 부주의로 흉내 내어질 수 없도록 상기 가드 명령어를 보유해야 하는 부호화 공간의 양은 작아질 수 있다.
비록, 일부의 실시예에서, 예를 들면 일부의 어드레스 정렬에 의해 부호화 제약으로 인한 위험을 흉내 내지 못하게 하는 경우를 고려할 필요가 있는 일부분의 어드레스 정렬 포인트들만이어도 되지만, 그 밖의 실시예에서 다른 명령어내에서 시작할 때 다음 명령어와 확실히 중첩하도록 상기 필요한 상기 가드 명령어의 길이를 판정하는 경우에 고려해야 할 필요가 있는 어드레스 정렬 포인트들 전부이어도 된다.
이것은, 상기 가드 명령어의 길이가 상기 명령어 세트로부터 가장 긴 프로그램 명령어의 길이와 같다는 것을 의미하는 경우도 있다.
상기에서는, 예를 들면, 2개의 길이의 명령어가 있고 한쪽이 다른 쪽에 2배인 경우가 있을 것 같다. 이러한 경우, 상기 명령어가 명령어의 시작과 정확히 정렬되지 않으면 항상 다음 명령어와 반드시 중첩하도록, 상기 명령어는 프로그램 명령어의 길이가 가장 길어야 한다.
일부의 실시예에서, 상기 처리 회로소자가 요구하는 상기 어드레스 정렬로 정렬될 때 상기 명령어 세트의 다른 명령어와 중첩하는 상기 가이드 명령어의 일부의 값은, 유효 연산코드나, 상기 명령어 세트의 임의의 다른 명령어용 연산코드의 시작부분이 아니다.
부주의로 흉내 내지 못하게 하는 방식의 하나는, 다른 명령어와 중첩할 수도 있는 상기 가드 명령어의 일부의 값이, 반드시 유효 연산코드나 상기 명령어 세트의 임의의 다른 명령어로부터의 연산코드의 시작부분이 아니도록 하는 방식이 있다. 상기 가드 명령어를 보유하는데 필요한 부호화 공간의 양은, 상기 가드 명령어와 중첩하는 단지 상기 연산코드의 일부가 있을 수도 있기 때문에, 이 일부도 상기 가드 명령어를 부주의로 흉내 내지 못하게 하도록 보유될 필요도 있는 상기와 같은 경우와 같이 명령어들의 오정렬 가능성으로 증가한다.
이를 해결하는 방식의 하나는, 명령어 어드레스 정렬 포인트간의 최소 거리의 길이인 부분들에 상기 가드 명령어를 부호화하고 나서 이 부분들에 동일한 값을 제공하는 방식이 있다. 이 값이 같은 값이 사용되면 나머지 명령어들과 중첩할 값이기 때문에, 이 값은, 상기 연산코드나 나머지 명령어들의 연산코드의 시작부분으로서 사용할 필요가 없는 값일 뿐이다. 이렇게 하여, 상기 가드 명령어를 보유할 부호화 공간의 양이 감소된다.
일부의 경우에, 예를 들면, 한쪽이 다른 쪽의 두 배인 명령어 길이가 2개일 경우, 상기 가드 명령어는, 2개의 부분을 포함하고, 실제로 대칭이 될 것이고, 그 2개의 부분에서의 값은 상기 연산코드나, 상기 명령어 세트에서의 나머지 명령어들 중 어느 하나의 연산코드들의 시작부분에서 사용하는 값이 아닌 값이 될 것이다.
일부의 실시예에서, 상기 동일한 값은, 유효 연산코드나, 상기 명령어 세트로부터의 임의의 다른 명령어용 연산코드의 시작 세그먼트가 아니다.
상술한 것처럼, 이 동일한 값은, 유효 연산코드나, 또는 실제로 상기 명령어 세트의 임의의 다른 명령어들용 연산코드의 시작 세그먼트도 아니어야 한다.
일부의 실시예에서, 상기 데이터 스토어는, 상기 가드 명령어와 동일한 값을 갖는 프로그램 코드내에 리터럴(literal)들로서 임의의 데이터 값들을 기억하지 않도록 구성된다.
상기 명령어 세트로부터의 명령어들의 연산코드들이 부주의로 상기 가드 명령어를 흉내 내지 못하게 하는 것이지만, 일부의 프로그램 코드에서의 데이터 값들은 상기 프로그램 코드내에 리터럴로서 기억되되, 이 리터럴들은 상기 코드내에서 상기 명령어들이 액세스하는 각종 어드레스에 기억되어 있다. 이러한 종류의 프로그램 코드에서도, 상기 리터럴은 공격시 분기의 대상이 될 수도 있기 때문에, 이들도 상기 가드 명령어를 부주의로 흉내 내지 못하게 하는 것이 중요하다. 따라서, 일부의 실시예에서는, 가드 명령어와 동일한 값을 갖는 프로그램 코드내에 데이터 값들이 반드시 리터럴로서 기억되지 않도록 하는 처리가 있다.
일부의 실시예에서, 매칭 리터럴의 생성을 코드 생성 시각에 피할 수 있고; 예를 들면 컴파일러는, 리터럴 액세스에 의해 매칭 리터럴을 반입하는 경우를 검출하고, 리터럴 풀(pool)에서의 상기 매칭 리터럴 값을 방출하기 위한 요구사항을 없애기 위해서 상기 생성된 코드를 변경하도록 구성될 수 있다. 일 실시예에서, 상기 컴파일러는, 데이터 처리 연산을 이용하여 다수의 비매칭 리터럴 액세스의 값들을 조합하여서 프로세서 레지스터에 원하는 값을 형성할 수 있다. 예를 들면, 상기 매칭 리터럴이 4이면, 2에 2를 곱한 것으로 변경될 수 있다. 다른 실시예에서, 상기 컴파일러는, 일련의 즉시 무브(move)와 데이터 처리 연산을 이용하여서 원하는 값을 형성할 수 있다.
일부의 실시예에서, 실행 가능한 프로그램은, 가드 명령어와 동일한 값을 갖는 리터럴 값들을 검출하기 위해서 생성 후 스캐닝되어도 된다. 일부의 실시예에서, 상기 스캐닝 프로세스는, 프로그램 개발 처리의 일부이어도 되고, 소프트웨어를 배포하기 전의 검사로서 사용되어도 된다. 그 밖의 실시예에서, 상기 스캐닝 프로세스는, 실행 가능한 프로그램이 실행을 위해 로딩되고 그 프로그램이 매칭 리터럴 값이 발견되면 실행되지 않게 하는 효과가 있는 것처럼 행해질 수도 있다.
일부의 실시예에서, 상기 데이터 처리장치는, 상기 데이터 스토어의 적어도 하나의 소정의 섹션에 대하여 유효하게 상기 가드 명령어를 기억시키도록 상기 데이터 스토어를 구분하도록 구성되고, 상기 데이터 처리 회로소자는 상기 적어도 하나의 소정의 섹션이 아닌 상기 데이터 스토어의 세그먼트에 위치된 상기 가드 명령어를 검출하는 것에 응답하여 보안 위반 표시를 생성하도록 구성된다.
상기 가드 명령어를 부주의로 흉내 내지 못하게 하는 다른 방식은, 상기 데이터 스토어를 구분하여 소정의 섹션에만 기억하는 방식이다. 이것이 발생하면, 이들 섹션은, 가드 명령어를 부주의로 기억하지 않는 것을 검사하기 위해 감시되면 좋다. 가드 명령어에 분기할 때, 액세스되는 상기 데이터 스토어의 영역이 소정의 섹션인 것을 검사하기 위해 검사하여 소정의 섹션이 아닐 경우 보안 위반 표시를 생성한다. 이에 따라 반드시 리터럴 형태로 가드 명령어를 기억하지 않도록 검사받을 필요가 있는 코드의 양은 감소시키지만, 상기 데이터 스토어를 구분하고 이러한 구분을 일부의 방식으로 나타내야 하는 것이 부담이 된다.
일부의 실시예에서, 덜 안전한 코드가 호출 가능한 상기 프로그램 코드의 일부는 상기 적어도 하나의 소정의 섹션에 기억된다.
상기 가드 명령어는, 상기 코드의 특정한 일부에서만 일어날 것이다. 가드 명령어들을 덜 안전한 도메인에서 보다 안전한 도메인으로 전환하는데만 사용하는 일부의 실시예에서, 이 상기 코드의 일부는, 덜 안전한 함수에서 호출할 수 있는 코드일 것이다. 그렇다면, 이들 코드의 일부를 상기 소정의 섹션내에 기억한다는 것은, 이들 섹션내에 항상 가드 명령어를 위치시킨다는 것을 의미한다.
이와는 달리 및/또는 추가로, 상기 데이터 스토어는, 상기 적어도 하나의 소정의 섹션에 명령어들만을 기억하도록 구성된다.
이전에 언급되었듯이, 비록 명령어들이 가드 명령어를 부주의로 흉내 내지 못하게 하는 것이 아주 쉬울지라도, 데이터 리터럴들이 이렇게 하지 못하게 하는 것은, 데이터 리터럴들이 임의의 값을 가질 수 있기 때문에 더욱 곤란하다. 따라서, 이를 해결하는 방식의 하나는 상기 데이터 스토어를 구분하는 것이고, 가드 명령어를 발견할 수도 있는 소정의 섹션에는 명령어들만이 기억될 수 있다. 달리 말하면, 상기 코드의 이들 섹션에서는 데이터 리터럴들이 허용되지 않는다. 코드를 컴파일링하여 데이터 리터럴들이 내부에 있지 않게 하는 것은, 코드 사이즈와 속도에 상당한 영향을 미친다. 그러나, 이렇게 컴파일링될 필요가 있는 가드 명령어를 코드의 특정 섹션만이 포함하는 경우에는, 성능과 코드 사이즈에 전반적인 영향이 적다.
일부의 실시예에서, 상기 데이터 처리장치는, 상기 데이터 스토어에의 액세스를 제어하는 메모리 액세스 제어 회로소자를 구비하고, 상기 메모리 액세스 제어 회로소자는, 상기 데이터 스토어의 상기 적어도 하나의 소정의 섹션을 상기 메모리 액세스 제어 회로소자내의 메모리 속성 마커(marker)를 설정하여서 나타내도록 구성된다.
소정의 섹션을 마킹하는 방식의 하나는, 그 소정의 섹션을 상기 메모리 액세스 제어 회로소자내의 속성 마커로 마킹하여서 이루어진다. 일반적으로 메모리 액세스 제어 회로소자는 상기 데이터 스토어의 상이하게 안전한 섹션에 대한 액세스들을 제어하도록 구성되고, 상기 데이터 스토어의 섹션들의 속성들은, 액세스 요구의 어드레스와 각종 영역의 어드레스들을 비교하여 어느 속성이 특별한 어드레스를 갖는지와 그 액세스가 허용되는지 아닌지를 판정하는 상기 메모리 액세스 제어 회로소자내에 기억된다. 추가의 메모리 속성 마커는, 상기 데이터 스토어의 특별한 섹션이 상기 가드 명령어를 기억시키는 소정의 섹션인 것을 나타내는데 사용될 수 있다.
소정의 섹션을 마킹하는 다른 방식은, 상기 메모리 액세스 제어 회로소자가, 어드레스 공간의 영역이 소정의 섹션인 것으로서 매핑된 고정 어드레스 맵으로 구성되는 방식이다. 일부의 실시예에서, 상기 처리 회로소자는, 상기 가드 명령어를 도메인 전환 명령어로서 처리하고, 상기 가드 명령어에 응답하여, 상기 연산의 도메인을 상기 가드 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하도록 구성된다.
비록 상기 처리 회로소자의 현재의 연산의 도메인과는 다른 도메인에 대응하는 상기 데이터 스토어의 영역에 적절한 값이 기억되어 있는 명령어를 검출하는 것에 응답하여 도메인들을 전환하도록 상기 처리 회로소자를 구성하였을지라도, 가드 명령어 자신이, 실행될 때에, 도메인들을 상기 처리 회로소자 내부에 기억된 영역의 도메인으로 전환하도록 상기 처리 회로소자를 제어하는 제어 신호들을 생성하는 경우도 있다.
본 발명의 제2 국면에서는, 프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리 회로소자로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리 회로소자와, 데이터와 명령어를 기억하되, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 상이한 안전한 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하고, 상기 덜 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 데이터 스토어를 구비하는, 장치의 데이터 처리 방법으로서, 상기 방법은,
실행되어야 할 프로그램 명렁어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 일 영역이 상기 처리 회로소자의 현재연산의 도메인에 대응하는 것을 검증하는 단계,
상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하고
삭제
상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하는 단계와,
상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하고,
상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하는 단계를 포함한다.
본 발명의 제3 국면의 데이터 처리장치는,
프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리수단으로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리수단과;
데이터와 명령어를 기억하는 데이터 기억수단으로서, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리수단이 액세스 가능하며 상기 덜 안전한 도메인에서 동작하는 상기 처리수단이 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과, 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 상기 데이터 기억수단을 구비하고,
상기 처리수단은,
실행되어야 할 프로그램 명령어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 기억수단의 일 영역이 상기 처리수단의 현재 연산의 도메인에 대응하는 것을 검증하고; 상기 처리수단의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 기억수단의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여;
상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여;
상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하여,
상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 기억수단의 상기 영역에 대응한 도메인으로 전환하고,
상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하기 위한 것이다.
본 발명을, 아래의 첨부도면에 도시된 것과 같은 실시예들을 참조하여 예시로만 더욱 설명한다:
도 1은 종래기술의 도메인들의 전환을 보이는 명령어 스트림을 나타내고,
도 2는 본 발명의 실시예에 따른 데이터 처리장치를 나타내고,
도 3은 처리 도메인들의 3개의 상이한 안전 레벨을 나타내고,
도 4는 본 발명의 실시예에 따른 메모리 보호 유닛을 나타내고,
도 5는 본 발명의 실시예에 따른 메모리 어드레스 공간의 분할을 나타내고,
도 6은 명령어들이 다수의 길이를 갖는 명령어들과 오정렬될 수 있는 모양을 나타내고,
도 7은 퍼블릭 도메인과 프라이빗 도메인간에 전환을 하는 퍼블릭 도메인과 프라이빗 도메인에서의 코드 실행을 나타내고,
도 8은 본 발명의 실시예에 따른 방법에서의 단계들을 설명하는 흐름도이고,
도 9는 상이한 연산의 도메인의 일례를 나타내고,
도 10은 메모리 속성 검사 흐름을 설명하는 흐름도다.
도 2는 예를 들면 마이크로콘트롤러일 수도 있는 본 발명의 실시예에 따른 데이터 처리장치(10)를 나타낸다. 이 데이터 처리장치는, 명령어들을 처리하는 처리 회로소자(20)와, 그 처리 회로소자(20)에서 처리한 데이터를 기억하고 또 상기 처리 회로소자(20)가 실행하는 프로그램 코드를 기억하는 데이터 스토어(30)를 구비한다.
그 프로그램 코드는, 컴파일링된 코드이어도 되거나, (미도시된) 컴파일러에 의해 상기 데이터 처리장치상에서 컴파일링된 코드이어도 된다. 그 프로그램 코드는, 상기 처리 회로소자(20)가 상이한 태스크를 실행하게 하는 프로그램 명령어들로 형성된다.
본 실시예에 있어서, 상기 처리 회로소자(20)는, 명령어 페치(fetch) 스테이지(22), 명령어 복호 스테이지(24) 및 명령어 실행 스테이지(26)를 갖는 파이프라인 형태이다. 여기서 알 수 있듯이, 이것은 단순화된 도면이고, 레지스터 리네이밍 스테이지와 같은 스테이지들이 추가되어도 된다. 상기 처리 회로소자의 연산의 도메인은 안전하거나 덜 안전하고, 본 실시예에서는 이것이 실행중인 코드가 기억된 데이터 스토어 영역의 안전 레벨에 의해 결정되는 것이 일반적이다.
데이터 스토어(30)에는, 상이한 안전성을 갖는 2개의 영역, 즉 안전한 영역(32)과 덜 안전한 영역(34)이 있다. 그 안전한 영역(32)에 기억된 데이터는, 실행중일 때 상기 덜 안전한 영역(34)에 기억된 코드에 액세스 가능하지 않다. 그렇지만, 그 안전한 영역(32)에 기억된 명령어들은, 소프트웨어에 보이지 않으므로 덜 안전한 도메인에서 동작하고 있는 경우 상기 처리 회로소자(20)의 페치 스테이지(22)에 의해 반입되어도 되기 때문에, 도메인을 가로질러 명령어들에의 액세스가 허가된다.
비록 상기 데이터 스토어가 단일의 블록으로서 도시되어 있지만, 상이한 레벨의 캐쉬들이나 주 메모리 등의 계층성이 상이한 여러 종류의 데이터 스토리지로 형성되는 경우도 많이 있다. 이들 스토어의 각각은 안전한 영역이나 덜 안전한 영역에 데이터를 기억할 것이다.
또한, 데이터 처리장치(10)는, 상기 액세스 허가의 분할을 제어하는 메모리 보호 유닛 MPU(40)을 갖는다. 도시된 것처럼 중앙 메모리 보호 유닛이 상기 제어를 행하여도 되지만, 그 밖의 실시예에서는, 현재 실행중의 기억된 상기 영역 코드를 감시하고 이 감시에 따라 상기 메모리의 상이한 영역에의 액세스를 제어하는 상기 처리장치내의 회로소자가 더욱 분산구조로 상기 제어를 행하여도 된다.
본 실시예에서, 상기 MPU에는, 한쪽 섹션이 데이터 스토어(30)에 기억된 명령어들에의 액세스를 제어하고 또 한쪽 섹션이 상기 데이터에의 액세스를 제어하는, 2개의 섹션이 있다. 이전에 설명된 것처럼, 처리 회로소자가 상기 안전한 부분에 기억된 명령어들에 대한 명령어 페치를 상기 덜 안전한 도메인에서 실행되게 한다.
본 실시예에는, 데이터 처리 동안에 사용되는 범용 레지스터를 갖는 레지스터 뱅크(50)가 있다. 이들 범용 레지스터는, 다음에 실행될 명령어를 가리키는 프로그램 카운터 PC와, 분기 명령어의 반환 어드레스를 기억하는 링크 레지스터와 같은 특별한 기능들을 갖는 그 밖의 레지스터를 포함한다.
또한, 레지스터 뱅크(50)에는 처리중인 데이터 값들을 기억하기 위한 데이터 레지스터들도 있다. 이와는 달리, 일부의 실시예에서는, 데이터 값들을 기억하는데 레지스터들을 사용하지 않고, 그 값들을 스택들에 기억하고 그 레지스터 중 하나에 기억된 스택 포인터를 거쳐 간접적으로 액세스한다. 이에 따라 면적이 줄지만 성능 히트가 발생하는 것이 명백하다.
앞서 설명한 것처럼, 본 실시예에서는, 상기 처리 회로소자(20)가 실행중인 도메인을, 현재 실행중의 코드가 기억되는 영역으로부터 판정하는 것이 일반적이다. 따라서, 안전한 데이터 스토어(32)에 기억된 안전한 프로그램 코드는, 그 안전한 도메인에서 실행되는 것이 일반적이다. 상기 실행의 도메인은, 상기 처리 회로소자(20)에서 설정하고 MPU(40)에서 액세스 하여 액세스 허가를 결정하는 도메인 플래그(44)로 나타내어진다.
상기 처리 회로소자(20)가 실행용 명령어를 반입하고 그 도메인 플래그가 상기 처리 회로소자가 현재 실행중이 아닌 도메인인 것을 나타내는 경우, 상기 처리 회로소자(20)는, 그 명령어가 가드 명령어인지를 검증하기 위해 검사를 행할 것이다. 이것은 상기 가드 명령어의 공지된 연산코드에 대해 반입된 명령어의 연산코드를 검사하여서 행할 것이다. 그리고, 가드 명령어일 경우, 이것을 복호하여 실행하여, 상기 처리 회로소자에 대하여 상기 도메인 플래그(44)를 갱신하여 도메인을 상기 가드 명령어가 반입된 메모리의 영역에 대응한 도메인으로 전환시킬 것이다. 따라서, 예를 들면, 상기 처리 회로소자(20)가 현재 상기 덜 안전한 도메인에서 동작중이고 메모리의 안전한 영역(32)으로부터 가드 명령어를 반입하도록 분기를 행하는 경우, 상기 처리 회로소자는 안전한 도메인에서의 실행으로 전환시킨다.
상기 가드 명령어가 안전한 영역에 허가된 진입 포인트들에 있고, 그 가드 명령어 다음에 실행되는 코드는 안전한 도메인에 대한 호출이 유효한지를 검증하기 위해 안전한 검사 루틴을 포함하기도 하고, 이것은 패스워드 검사나, 그 밖에 공급된 함수 인자들의 유효성 검사를 포함하기도 한다.
상기 반입된 명령어가 가드 명령어가 아니고 현재의 연산의 도메인과는 다른 도메인을 갖는 안전한 영역으로부터 반입된 명령어인 경우, 보안 위반 표시를 생성한다. 이것은, 생성되는 예외와 실행되는 장애 처리 루틴의 형태를 취하기도 한다.
도 3은 매우 개략적으로 3개의 처리 도메인, 즉 가장 안전하지 않은 도메인, 안전한 도메인 및 가장 안전한 도메인을 도시한 것이다. 이들 도메인의 각각에서는, 프로그래밍 코드가 실행되고, 그 도메인에 따라 상기 데이터 스토어로부터 상이한 레벨의 안전한 데이터에 액세스되어도 된다. 실행되는 도메인의 안전 레벨과 상기 데이터가 기억된 메모리의 영역의 안전 레벨에 따라, 그 데이터에 액세스하는 것이 허가된다. 본 실시예에서는, 본 예시의 PG로서 도시된 가드 명령어를 거쳐 도메인간에 전환을 행한다. 덜 안전한 도메인으로부터 더 안전한 도메인으로 전환할 때만 가드 명령어가 요구되는 경우도 있지만, 더 안전한 영역으로부터 덜 안전한 영역으로 전달할 때도 가드 명령어를 거쳐 행해지도록 그 전환 요구를 대칭적으로 행하는 경우 시스템을 구현하는 것이 보다 효율적일 수도 있다. 따라서, 이것은, 상이한 안전한 도메인에서 루틴을 호출할 때, 그 루틴 앞에 있는 가드 명령어를 반입하여서 행해진다.
본 실시예에서는 안전 레벨이 상이한 것으로 3개의 도메인이 도시되어 있지만, 일부의 실시예에서, 상기 도메인들의 적어도 2개는 안전 레벨이 같지만 서로 분리되어 있는 형제 도메인이어도 된다는 것을 주목해야 한다. 따라서, 안전한 도메인과 가장 안전한 도메인은 실제로 안전1 및 안전2이어도 되고, 이들 2개의 안전한 도메인에서의 처리 연산은 메모리의 가장 안전하지 않은 영역에 있는 데이터에 액세스 하고 자신의 도메인에 대응한 메모리의 안전한 영역에 액세스하지만 그들의 형제 도메인에는 액세스 하지 않는다.
도 4는 도 2의 메모리 보호 유닛(40)을 보다 상세히 나타낸 것이다. 메모리 보호 유닛MPU(40)는, 상기 처리 회로소자(20)로부터 데이터 스토어(30)에의 액세스를 제어하고, 속성들이 적절한 데이터 스토어(30)의 영역들만 확실히 액세스될 수 있게 한다.
본 실시예에서는, 데이터 액세스들과 명령어 액세스들을 서로 다른 포트에서 수신하여 동시에 처리할 수 있다. 비교기(41, 42)는, 상기 데이터 액세스들과 명령어 액세스들의 액세스 어드레스를 구성 레지스터(43)로부터 검색된 영역들의 어드레스들과 각각 비교한다. 구성 레지스터들(43)은, 데이터 스토어(30)의 상이한 영역의 상세 내용을 기억한다. 즉, 구성 레지스터들은 상기 영역들의 어드레스들, 상기 영역들의 사이즈 및 상기 영역들의 속성들을 기억한다. 이들 속성은, 안전 레벨 또는 영역, 그 영역이 판독전용 영역 또는 기록전용 영역인지의 여부, 기타의 것을 가리킨다. 따라서, 상기 비교기들이 메모리의 어느 영역을 액세스할 대상으로 삼는지를 판정하였다면, 상기 속성 검사 블록들(45)은 상기 구성 레지스터들(43)에 기억된 그 영역에 대한 속성들을 사용하여 그 액세스의 허용 여부를 판정할 것이다. 상기 속성 검사 블록들(45)은, 도메인 플래그(44)에 액세스하여, 액세스가 허용되어야 하는지 아닌지를 판정할 때, 상기 처리 회로소자(20)의 현재의 연산의 도메인의 안전 레벨을 판정할 수 있다. 데이터 액세스가 유효 액세스라고 판정될 경우, 상기 메모리에 액세스 될 수 있고, 그렇지 않은 경우에는, 장애가 발생될 것이다.
이에 관하여, 상기 명령어 액세스가 도메인 플래그(44)로 나타낸 도메인에 대응하지 않는 메모리의 영역내에 있는 명령어에 대한 액세스이면, 이것을 상기 속성 검사가 판정하여, 그 명령어를 반환시킬 때 상기 처리 회로소자(20)에 신호를 보낸다.
이 신호에 응답하여 상기 처리 회로소자는, 그 복구된 명령어가 가드 명령어인지를 알기 위해 검사한다. 가드 명령어일 경우, 상기 도메인 플래그(44)는, 상기 명령어가 반입되었던 데이터 스토어(30)의 영역의 도메인에 해당한 도메인으로 갱신되고, 가드 명령어가 아닐 경우에는, 상기 처리 회로소자(20)가 보안 위반 표시를 생성한다.
가드 명령어를 검출한 경우에만 도메인간에 전환이 허용될 때, 분기될 수 있던 것을 이러한 가드 명령어를 흉내 내는 것으로 부주의로 부호화하지 않는 것이 중요하다. 하나의 명령어 사이즈만을 갖는 명령어 세트들에 있어서, 단순하게 임의의 다른 명령어에서는 사용하지 않는 가드 명령어의 유일한 연산코드를 가지면 좋다. 그러나, 프로그램 코드내에 리터럴들이 부호화되어 있는 경우, 단일 명령어 길이에서도 상기 가드 명령어의 부호화가 상기 프로그램 코드 섹션에 리터럴로서 부주의로 기억되지 않게 하는데 주의를 기울여야 한다.
이렇게 발생하지 않도록, 모든 리터럴들이 가드 명령어를 부호화시키지 않는 것을 검사하기 위해 기억된 그 리터럴들에 관해 검사할 수 있다. 이와는 달리, 상기 메모리의 특별한 섹션만이 가드 명령어를 포함되게 하도록, 상기 메모리를 구분하여도 된다. 이들 섹션이 데이터 리터럴들을 기억시키지 않게 할 수 있고, 이와는 달리, 이 섹션에 기억된 임의의 데이터 리터럴들이 검사될 수 있다.
도 5는 이렇게 하여 구분된 데이터 스토어(30)를 개략적으로 나타낸 것이다. 따라서, 유보 섹션(reserved section), 덜 안전한 섹션(34), 및 가드 명령어가 기억될 수 있는 단일 섹션(35)을 갖는 안전한 섹션(32)이 있다. 이 섹션은 메모리 보호 유닛(40)내의 구성 레지스터들에 특별한 속성을 갖는 것으로서 표시될 수 있다. 따라서, 데이터 스토어의 어딘가 다른 곳에 기억된 가드 명령어가 식별될 경우, 이것은 표시에 있어서 보안 위반을 생성한다.
이렇게 메모리를 구분함으로써, 리터럴들을, 가드 명령어를 부주의로 부호화시키지 않는지를 검사할 필요 없이 상기 메모리의 어딘가 다른 곳에 기억시킬 수 있다. 섹션(35)에는 리터럴들이 기억되지 않게 실행전용 코드가 기억되도록 상기 시스템을 구성하여도 된다. 코드를 컴파일링할 때 리터럴 풀들이 제거될 수 있지만 이는 코드 사이즈와 처리속도에 상당한 영향을 미친다. 그러나, 그것이 이렇게 컴파일링된 코드의 단지 작은 부분일 경우, 전반적인 영향 및 성능과 코드 사이즈는 매우 작다. 섹션(35)의 사이즈와 장소는 초기에 설정될 수 있거나, 현재 실행중인 코드에 따라 처리 회로소자에 의해 설정되어도 된다는 것을 주목해야 한다.
이 섹션에 기억된 코드의 타입을 제한할 수 있는 다른 방식은, 덜 안전한 함수로부터 호출될 수 있는 임의의 코드를 이 섹션에 기억하는 것이다. 가드 명령어는 도메인간에 이동할 때 사용되고, 일부의 실시예에서는 더 안전한 도메인과 덜 안전한 도메인 양쪽 사이에서 이동하는데 사용되어도 되지만, 덜 안전한 도메인에서 더 안전한 도메인으로 이동할 때 보다 중요한 것은 명백하고, 일부의 경우에 그것이 사용되는 것은 이들의 예시뿐이다. 이러한 경우에, 가드 명령어를 내부에 가질지도 모르는 코드인, 덜 안전한 함수로부터 호출될 수 있는 코드일 뿐이고, 따라서, 이 코드의 섹션(35)에의 기억을 제한하는 것은, 어딘가 다른 곳에서 가드 명령어가 발견된 경우에, 이것이 부주의한 부호화이기 때문에 확실히 장애다.
비록 데이터 리터럴들로부터 가드 명령어를 흉내 내지 못하게 하는 것이 아주 곤란한 문제라는 것이 명백하지만, 명령어들에 의해 부주의한 부호화를 해결하는 것이 보다 쉬워야 한다. 그러나, 일부의 경우와 특히, 길이가 다른 명령어들이 있는 경우, 이 자체는 문제가 될 수 있다.
도 6은 예를 들면, 명령어의 길이가 32비트 명령어와 16비트 명령어로 이루어진 명령어 스트림의 일례를 나타낸다. 명령어들의 시작부분이 위치되어야 하는 상기 처리 회로소자에서 요구하는 어드레스 정렬 포인트들이 있고, 이들은 이 경우에 최소의 명령어 길이에 해당하는 16비트마다 생긴다. 각 명령어는 명령어의 기능을 판정하는 연산 또는 op코드에서 시작하고 나서, 또 다른 부분들이 있다, 본 예시에서는 목적지 레지스터가 식별되고 데이터 값 또는 즉시 값이 제공된다.
신중하게 명령어의 중간에 분기하여서 유용한 코드 시퀀스를 찾으려고 하는 것은, 반환 지향 프로그래밍 공격을 행하는 경우의 일반적인 기술이다. 따라서, 명령어가 가드 명령어를 전혀 흉내 내지 않을 뿐만 아니라, 오정렬된 부호화가 뜻하지 않게 가드 명령어를 전혀 흉내 내지 않는 것도 중요하다. 이 경우에, 명령어 길이가 2개만 있고, 그 가드 명령어를 부주의로 흉내 내지 못하게 하기 위해서 가드 명령어의 길이를 가장 길게 하고 2개의 부분이 각기 동일한 값을 갖게 가드 명령어를 대칭으로 한다. 이렇게 하여, 각 부분은, 연산코드나, 임의의 다른 명령어의 연산코드의 시작 섹션을 갖지 않아야 하는데, 그 이유는 오정렬되었을 경우에도 후자의 부분이 다음 명령어의 시작과 중첩하여서, 그것의 연산코드와 중첩하기 때문이다. 따라서, 상기 가드 명령어를 동일한 값으로 부호화함으로써, 이 값은 연산코드들에 있어서 사용되지 않게 하는 값일 뿐이므로, 가드 명령어 전용으로 요구되는 부호화 공간의 양은 감소된다.
반드시 서로의 정배수(direct multiple)가 아닌 명령어의 길이를 갖는 경우를 생각해보면, 상기 어드레스 정렬 포인트들은, 더 자주 일어날 수도 있고, 명령어들내에서 가능한 상이한 위치에 있어도 된다. 이러한 경우에, 가드 명령어가 명령어내에서 시작하는 경우 다음 명령어와 중첩하는 것이 중요하다. 이렇게 하여, 그 중첩하는 부분은 적어도 op코드의 일부에 놓여 있고, 이 부분이 임의의 다른 op코드나 또 다른 op코드의 시작부분과 비교하여 무효라면, 분기들이 일 명령어의 시작을 대상으로 하지 않을 때에도, 상기 명령어 세트의 임의의 명령어가 상기 가드 명령어를 흉내 낼 수 없다.
도 7은 실행되는 프로그램 스트림을 개략적으로 나타낸 것이다. 초기에, 퍼블릭 메모리에 기억된 코드는 퍼블릭 처리 도메인에서 실행되고, 이 실행중에 이전의 링크 레지스터 값은 스택에 보존되고 나서, 분기 명령어가 실행됨으로써, 상기 처리 회로소자에 의해 프라이빗 메모리에 기억된 코드에 분기하고 새로운 분기 반환 어드레스를 상기 링크 레지스터에 기억한다. 본 예시에서, 프라이빗 메모리로부터 반입된 명령어가 가드 명령어이고, 이것은 상기 처리 회로소자가 퍼블릭 도메인에서 계속 작동하고 있는 동안에 반입된다. 따라서, 도메인 플래그는 퍼블릭 도메인을 가리키고, 상기 MPU는 프라이빗 메모리에 상기 검색된 명령어가 기억되어 있는 것을 검출하긴 하지만, 상기 처리 회로소자는 퍼블릭 도메인에서 실행중이다. 상기 MPU는, 현재 도메인의 안전 레벨보다 안전한 영역에 있는 명령어가 반입되어 있다는 것을 상기 처리 회로소자에 알려준다.
이에 따라 상기 처리 회로소자가 기동해서, 그 반입되어 있던 명령어가 가드 명령어인 것과, 검증시에 도메인 플래그를 프라이빗 도메인을 나타내도록 설정하여서 상기 처리 도메인을 전환시키는 것을 검사하여서, 프라이빗 메모리에 기억된 이후의 명령어들이 실행될 수 있다. 그리고, 확실히 함수 호출이 유효하고 나서 프라이빗 함수가 실행되도록 안전성 검사 루틴에서 시작하는 이후의 코드를 실행한다.
이렇게 하여, 상기 안전성 검사 루틴을 피할 수 있을 프라이빗 함수 도중에 명령어로 분기가 일어날 수 없다. 왜냐하면, 현재 동작하는 도메인의 안전 레벨보다 안전한 메모리의 안전한 영역으로부터 반입되는 명령어에 응답하여 생기는 명령어 검사는, 그 반입된 명령어가 가드 명령어가 아니고 보안 위반 표시가 생성되는 것을 나타낼 것이기 때문이다.
도 8은 본 발명의 실시예의 방법에 따른 단계들을 나타내는 흐름도다. 먼저, 명령어를 반입하고 그 반입된 메모리의 영역이 상기 처리 회로소자의 현재의 처리 도메인에 해당하는지를 판정한다. 이는 도 2에 도시된 도메인 플래그(44)를 보고서 행한다.
상기 메모리의 영역이 정말로 대응한 도메인을 가지면, 명령어를 실행하고 다음 명령어를 반입한다. 그 영역이 상이한 도메인에 해당하면, 그 명령어가 가드 명령어인지 아닌지를 판정한다. 가드 명령어가 아닐 경우, 보안 위반이 있어 보안 위반 표시를 어서트한다. 가드 명령어일 경우, 상기 처리 도메인을, 상기 가드 명령어를 기억한 데이터 스토어의 영역에 해당한 처리 도메인으로 전환시키고, 이 경우에도, 상기 처리 회로소자는 가드 명령어를 실행한 후 다음 명령어를 반입한다. 이렇게 하여 도메인의 전환은 가드 명령어가 발견될 때만 일어난다.
비록 이것이 상이한 도메인간의 전환이 가드 명령어가 필요한 매우 일반적인 방법을 상술하지만, 도 7에 관해 개시된 것과 같은 일부의 실시예에서, 상기 가드 명령어는, 덜 안전한 도메인으로부터 더 안전한 도메인으로 전환하고 그 초기의 평가가 처리 도메인의 안전한 레벨보다 더 안전한 명령어를 기억하는 데이터 스토어의 영역의 안전한 레벨일 경우에만 필요하고, 이것이것이 예일 경우만 상기 명령어가 가드 명령어인지 아닌지를 검증하기 위해 그 명령어를 검사하고, 그렇지 않은 경우에는 그 명령어를 실행한다.
특별한 실시예의 더욱 상세한 내용의 일부를 아래에서 설명한다.
주석: 일부의 레지스터는 퍼블릭 상태와 프라이빗 상태 사이에 저장되어 있고, 다음의 네이밍 규약을 사용하여 상기 레지스터의 어느 버전이 액세스되어야 하는지를 규정한다:
● <register name> - 특정 버전이 규정되어 있지 않음, 현재의 상태에 관한 버전이 사용됨. 이 표기도 저장되어 있지 않은 레지스터에 사용된다.
● <register_name>_P - 상기 레지스터의 프라이빗 버전이 사용된다.
● <register_name>_NP - 상기 레지스터의 논프라이빗/퍼블릭 버전이 사용된다.
프라이빗 상태
새로운 프라이빗 상태는, 도 9에 도시된 것처럼, 기존의 쓰레드/핸들러 모드들에 직교하는 코어( 및 매우 큰 시스템)에 추가된다. 자원에의 액세스 시도는 그 시스템이 실행중일 때 프라이빗으로서 마킹되어 결과적으로 퍼블릭 상태중 하나가 결함(fault)이 된다.
상기 프로세서가 이들 4개의 상태 중 어느 상태에서 실행중인지가, 기존의 쓰레드/핸들러 로직과, 소프트웨어에 직접 보이지 않는 새로운 구조적 플래그의 조합으로 규정되어 있다. 의사 코드에 있어서, 이 플래그는, 아래와 같이 규정된 변수 CurrentState로 나타내어진다:
enumeration PrivacyState PrivacyState_Public, PrivacyState_Private;
PrivacyState CurrentState;
어드레스 공간 보호
프라이빗으로서 마킹될 수 있는 메모리 모두와 그 밖의 메모리 매핑된 주변기기가 칩상에 있고, 그러므로 그들을 보호하기 위해서 암호화가 필요하지 않다고 가정한다. 그 어드레스 공간에의 어떠한 액세스도 트랜잭션을 퍼블릭이나 프라이빗으로서 마킹하는데 사용된 새로운 속성P-Attr를 포함한다. P-Attr의 운반은 규정된 실시다.
프라이빗으로서 마킹된 어드레스 범위 전부는, 이들의 시작 어드레스와 끝 어드레스를 32바이트 경계로 정렬시킬 필요가 있다.
자산 보호 확장은 아래에서 필요하다:
● 프라이빗으로서 마킹된 어드레스 공간의 에어리어는, P-Attr이 프라이빗으로 설정된 트랜잭션에 의해서만 액세스 가능해야 한다. P-Attr이 퍼블릭으로 설정된 프라이빗 어드레스에의 어떠한 액세스도 요구를 생성한 구성요소에 보고되는 오류가 되어야 한다.
● 어드레스의 프라이버시 상태를 판정할 수 있는 프로세서, 이것은 아래의 선택사항 중 하나에 의해 이루어진다:
● A PAU
또한, 자산 보호 확장은, 상기 코어가 데이터 트랜잭션이 행해지는 것을 요구하는 프라이버시 상태를 규정하는 새로운 P-Req 속성을 규정하고, 달리 규정되어 있지 않으면 P-Req는 상기 코어의 프라이버시 상태와 같다.
MPU 확장
상기 자산 보호 확장은, MPU 기능성을 다음의 방식으로 확대한다:
● MPU 구성 레지스터에는 프라이버시로 저장되어 있고; MPU 메모리 속성 및 특권 검사는, 현재 프라이버시 상태를 실행하는 프로세서에 대응한 상기 구성 레지스터를 사용한다.
● 프라이버시 속성 유닛(PAU) - 이 새로운 블록은, 메모리 영역들을 퍼블릭이나 프라이빗 중 어느 한쪽으로 귀속시키는 역할을 한다.
프라이버시 속성 유닛
프라이버시 속성 유닛(PAU)은 다음의 함수를 행한다:
● 트랜잭션의 초기 검사. 이에 따라 프라이버시 위반을 초기에 잡아내어(즉, 메모리 액세스의 실행전에) 및 BusFault로서 보고되는 대신에 의미 있는 방식으로 보고될 수 있다.
● 반입되고 있는 프라이버시 도메인 명령어에 대한 정보를 제공한다.
상기 PAU 구성은 다수의 메모리 영역을 규정하고, 그 영역의 수는 IMPLEMENTATION DEFINED이고 PAU_TYPE.PREGION 필드를 판독하여서 발견될 수 있다. 이들 영역은 PAU_REGIONn이라고 부르고, 여기서 n은 0부터 PAU_TYPE.PREGION-1까지의 수이다. 이들 영역에 관한 구성 필드들은, 직접 액세스될 수 없지만, 대신에 아래의 테이블에 도시된 것과 같은 윈도우 레지스터들을 거친 간접 액세스들이다.
Figure 112015037004633-pct00001
메모리 액세스를 실행할 때, 상기 PAU가 조회된다. 상기 어드레스가 상기 PAU에 규정된 영역 중 하나와 일치하면(즉, PAU_REGIONn.BADDR <= Address <PAU_REGIONn.LADDR), 상기 메모리는, PAU_CTRL.RMNP 비트로 규정된 프라이버시 상태로 마킹된다. PrivateFault는 프라이버시 위반이 검출되면(예를 들면, P_Req가 퍼블릭으로 설정된 프라이빗 메모리에 액세스하면) 생성된다. PrivateFault에 의해 생성되는 요구들은 메모리 액세스가 실행되지 않게 되고, 마찬가지로 이러한 액세스들에 의해, MPU 구성에 상관없이, MemManage 폴트가 생성되지 않게 된다. PFSR에 보고된 신드롬 정보와 아울러, MMFAR 레지스터의 프라이빗 버전은, 그 폴트의 원인이 된 트랜잭션의 어드레스를 기억하는데 사용된다. 이 폴트는, 프라이빗 상태의 프라이버시를 위반하려는 시도를 가리키므로 MemManage 폴트와는 구별되므로, 펌웨어 벤더가 상이한 우선권을 이들 2개의 폴트에 할당하기를 원할지도 모르는 것처럼 상기와는 달리 처리되어야 한다. 상기 프로세서의 현재의 상태에 대응한 MPU 구성은, PrivateFault를 생성하지 않는 액세스들을 위한 특권 검사와 메모리 귀속을 행하는데 사용된다(도 10 참조).
상기 PAU_CTRL.ENABLE 필드를 클리어하면 다음의 PAU 작용이 이루어진다:
● P-Attr이 데이터 액세스를 위해 P-Req로 설정되고 명령어 페치를 위한 프라이빗으로 설정된다.
● 명령어 페치를 위해, 어드레스 공간 전체는, 프라이빗으로서 보고된다. 이에 따라 상기 프로세서가 부트 프로세스동안에 부주의로 퍼블릭 상태로 천이시키는 것을 막는다.
상기 PAU에 관한 상기 구성 레지스터들은, 프라이빗 특권 상태로부터 액세스 가능할 뿐이고, 임의의 다른 상태로부터의 액세스는 BusFault를 생성한다.
PAU_CTRL
프라이버시 속성 유닛 제어 레지스터, 어드레스 0xE000EDD0, 0x0 또는 IMPLEMENTATION DEFINED에 리세트(아래 주석 참조)
Figure 112015037004633-pct00002
ENABLE(bit[0]) 1에 세트될 때, 상기 PAU는 인에이블됨
RMNP(bit[1]) 영역들은 논 프라이빗으로서 마킹됨, 이 비트는 그 영역들이 메모리의 에어리어들을 어떻게 마킹하는지를 제어한다.
0: 영역들은 메모리의 에어리어들을 프라이빗으로서 마킹하고, 그 영역들의 임의의 영역에 일치하지 않는 어드레스들은 퍼블릭으로서 마킹됨.
1: 영역들은 메모리의 에어리어들을 퍼블릭으로서 마킹하고, 그 영역들의 임의의 영역에 일치하지 않는 어드레스들은 프라이빗으로서 마킹됨.
PAU_TYPE
프라이버시 속성 유닛 타입 레지스터, 어드레스 0xE000EDD4, 판독전용
Figure 112015037004633-pct00003
PREGION(bits[7:0]) 실시된 PAU 영역들의 수. 이 필드가 제로로서 판독되는 경우, 상기 프로세서는 PAU를 실시하지 않는다.
PAU_RNR
프라이버시 속성 유닛 영역(REGION)번호 레지스터, 어드레스 0xE000EDD8, UNKNOWN에 리세트
Figure 112015037004633-pct00004
REGION(bits[7:0]) 상기 PAU_RBAR과 PAU_RASR 레지스터가 현재 액세스한 영역을 선택한다.
PAU_RBAR
프라이버시 속성 유닛 영역 기저(base) 어드레스 레지스터, 어드레스 0xE000EDDC, UNKNOWN에 리세트
Figure 112015037004633-pct00005
REGION(bits[7:0]) 어느 영역을 수정해야하는지를 선택.
VALID(bit[4]) 0으로 세트되면, 상기 REGION필드는 무시되고, 상기 PAU_RNR 레지스터에서의 값은 어느 영역을 수정해야하는지 규정하는데 사용된다.
BADDR(bits[31:5]) 상기 영역의 기저 어드레스의 비트 31:5, 주석: 상기 기저 어드레스의 비트[4:0]은 0x0으로서 규정된다.
PAU_RLAR
프라이버시 속성 유닛 영역 리미트(limit) 어드레스 레지스터, 어드레스 0xE000EDE0, UNKNOWN에 리세트
Figure 112015037004633-pct00006
REGION(bits[7:0]) 어느 영역을 수정해야하는지를 선택.
VALID(bit[4]) 0으로 세트되면, 상기 REGION필드는 무시되고, 상기 PAU_RNR 레지스터에서의 값은 어느 영역을 수정해야하는지 규정하는데 사용된다.
LADDR(bits[31:5]) 상기 영역의 리미트 어드레스의 비트 31:5, 주석: 상기 기저 어드레스의 비트[4:0]은 0x0으로서 규정된다.
PAU_RAR
프라이버시 속성 유닛 영역 속성 레지스터, 어드레스 0xE000EDE4, UNKNOWN에 리세트
Figure 112015037004633-pct00007
REGION(bits[7:0]) 어느 영역을 수정해야하는지를 선택.
VALID(bit[4]) 0으로 세트되면, 상기 REGION필드는 무시되고, 상기 PAU_RNR 레지스터에서의 값은 어느 영역을 수정해야하는지 규정하는데 사용된다.
NPC(bit[31]) 논 프라이빗 호출 가능. NPC가 1에 세트될 때, 상기 영역은 다른 프라이버시 상태로부터 호출 가능으로서 마킹되어 있다. NPC가 1에 세트된 영역을 대상으로 하지 않는 프라이버시 상태에서 천이를 일으키는 임의의 분기에 의해 폴트가 생기게 될 것이다. 이것은, 추가의 보호레벨을 상기 PG 가드 명령어에 제공하고, 리터럴 풀들에 있는 가드 명령어 op코드에 관련된 리스크를 제거하는데 사용될 수 있다. 필요한 PAU 영역들의 수를 감소시키기 위해서, 진입 포인트 모두를 단일 영역에서 함께 상기 프라이빗 코드에 그룹핑하는 것이 바람직할 것이다. 이 영역에서의 코드는, 실행만으로서 컴파일링될 수 있어서 어떠한 리터럴 풀들도 포함하지 않을 것이다.
CPU 생성 트랜잭션
데이터
데이터 액세스들은 다음과 같이 설정된 P-Attr로 생성된다:
● P-Req가 퍼블릭으로 설정되면(예를 들면, 상기 프로세서가 퍼블릭 상태에 있으면), P-Attr도 퍼블릭으로 설정된다.
● PAU를 갖는 프로세서의 경우- P-Req가 프라이빗으로 설정되고(예를 들면, 프로세서가 프라이빗 상태에 있고) 어드레스가 상기 PAU에 있는 영역 중 하나에 일치하면, P-Attr는 PAU_CTRL.RMNP로 설정되고, 그 어드레스들이 PAU영역에 일치하면, P-Attr는 PAU_CTRL.RMNP와 반대의 프라이버시 상태로 설정된다.
이것에 의해, PAU를 갖는 보다 쉬운 집적 M-프로파일 코어를 TrustZone 유효 시스템으로 제공하면서 프라이빗으로서 마킹된 장소에 대해 퍼블릭 코드가 판독/기록하는 것을 막는다.
명령어 페치
명령어 페치 작용은, 상기 프로세서가 PAU를 포함하는지의 여부에 좌우된다:
● PAU에서는, 상기 어드레스가 상기 PAU 영역 중 하나에 일치하면 상기 P-Attr이 PAU_CTRL.RMNP로 설정된 명령어들을 반입한다. 이 P-Attr 값도, 상기 프로세서의 프라이버시 상태를 결정하는데 사용된다.
주석: 명령어 opcode가 보호 도메인 사이의 경계의 범위에 있으면, PrivateFault가 생긴다.
상태 천이
명령어가 실행되어야 하는 프라이버시 상태는, 명령어를 반입한 장소의 프라이버시 상황으로부터 추론된다. 이 때문에, 퍼블릭 상태에서 프라이빗 코드나, 프라이빗 상태에서의 퍼블릭 코드를 실행하는 것이 불가능하다. 그러나, 공격(예를 들면, 반환 지향 프로그래밍)을 막기 위해서, 프라이버시 상태에의 진입은, 다음의 메카니즘에 의해 엄격하게 제어된다:
● 상기 프로세서의 상태에 상관없이, 상기 메모리 액세스에 의해 프라이버시 위반을 생성하지 않도록 P-Attr가 설정된 모든 명령어 페치를 행한다.
● 이하의 액션 중 하나는, 명령어를 반입한 장소의 프라이버시 상태가, 상기 PC가 퍼블릭 코드로 이동한 것을 가리키는 경우에 일어난다:
○ 상기 분기가 도메인 크로싱으로서 마킹되었을 경우, 코어는 퍼블릭 상태로 천이한다.
○ 그렇지 않은 경우, PrivateFault가 생긴다. 이러한 상황은, 프라이빗 코드가 충돌하는 경우 일어날 수 있어, 그 폴트가 생기면, 임의의 프라이빗 레지스터 상태가 퍼블릭 도메인에 노출되는 것을 막을 수 있다.
● PG가드 명령어의 유무에 의해 유효 진행 포인트로서 마킹되어 있던 프라이빗 메모리 장소에 분기함으로써 프라이빗 상태로 천이한다. 퍼블릭 메모리에서의 PG에 분기에 의해, 프라이빗 상태로 천이시키지 않는다.
가드 명령어는, 프라이빗 코드 베이스에서 퍼블릭 코드가 임의의 장소로 점프하는 것을 막을 수 있다. 이러한 가드 명령어의 유무는, 명령어마다의 실행전에 실행되어야 하는 다음의 의사코드에 의해 검사되고, 그 상세 내용은 아래의 섹션에 기재되어 있다:
// PrivateEntryPointCheck()
// ========================
PrivateEntryPointCheck()
instState = InstMemState();
CurrentState != instPrivate이면,
// 예외, 선형 코드 흐름이나, 새로운 명령어가 유효 진입 포인트(즉, PG)인 분기 //검사에 의해 프라이빗 코드로 천이하면,
instState == PrivacyState_Private && OpCode != 0xE97FE97F이면,
ExceptionEntry(PrivateFault, TRUE);
리턴;
// 퍼블릭 상태에 천이하면, 프라이빗 상태로부터 비제어 출구가 있다.
// 그래서, 폴트가 일어난다
instState == PrivacyState_Public이면,
ExceptionEntry(PrivateFault, TRUE);
리턴;
이 해결방법에 의해 도메인 사이에서 빠르고/효율적인 호출이 가능하고, 프라이빗 코드에의 임의의 수의 진입 포인트를 허가한다. 개념적으로, 자산 보호는, 아래의 차이를 갖는(그 상세 내용은 이후의 섹션에 강조되어 있다) 상기 특권상태/특권 상태 사이에 이미 있는 것들과 동일한 프라이빗 상태/퍼블릭 상태 사이의 특징들을 제공한다:
● SVC예외라기보다는 PG명령어에 의해 진입이 제어된다.
○ 실행 우선권의 변화가 없다- 인터럽트 우선권 계획에 감안될 필요가 없다
○ 단일 진입 포인트에 규정되지 않는다-라우팅/프록싱 부담이 없다
○ 인자는 (SVC 명령어와 SVC 예외 핸들러 사이에 일어나는 예외의 가능성으로 인해 SVC에 의해 가능하지 않은) 레지스터들을 거쳐 건네질 수 있다.
○ 필요한 경우(예를 들면, 4보다 많은 인자가 있을 경우), 상기 스택을 거쳐 다수의 조건 MRS 명령어가 스택 포인터를 얻을 필요 없이, 빠르게 인자를 건넬 수 있다.
● 각 진입 포인트는, 퍼블릭 상태와 프라이빗 상태 모두로부터 호출될 수 있다.
이 해결방법이 프라이빗 외부 API 함수의 일부의 특수한 처리를 필요로 하지만, 프라이빗 도메인에서의 코드 대부분과 퍼블릭 도메인에서의 코드 전부가 어떠한 수정도 필요하지 않다. 역호환성을 증가시킴과 아울러, 이것도, 레거시 라이브러리들이나, 이들 확장(예를 들면, GCC)이 퍼블릭 코드 베이스 전부에 사용되게 지원하기 위해 아직 갱신되지 않은 컴파일러를 유효하게 한다. 정말로 특수한 처리를 필요로 하는 프라이빗 경계 함수는, (일부의 스크립트를 자동으로 생성될 수 있을) 간단한 어셈블리 래퍼(wrapper) 함수로서 실시될 수 있었다. 이에 따라 상기 자산 보호 확장이 특정 컴파일러 지원 없이 사용될 수 있다.
타깃 상태 비트
일부의 경우에는, 첫 번째 명령어를 새로운 도메인으로부터 반입하기 전으로 어느 상태가 천이하고 있는지를 상기 프로세서가 알면 상기 구조를 단순화한다. ARMv7-M 구조는, (ARMv7-AR 구조에서의 ARM/Thumb 상호작용 비트로서 사용된) 분기 타깃 어드레스의 비트 제로가 현재 미사용된 것과 같이, ARM 명령어 세트를 포함하지 않는다(또, 차후에 아주 필요할 것 같지 않다). 자산 보호 확장은, 이 비트를 재사용하여 다음과 같이 프라이빗 상태에서의 분기의 타깃 상태의 신호를 보낸다:
● target_addr[0]=1, 상기 분기의 타깃 상태는 프라이빗 상태다. 이전에 상기 Thumb 명령어 세트를 지정하는데 사용됨.
● target_addr[0]=0, 상기 분기의 타깃 상태는 퍼블릭 상태다. 이전에 상기 ARM 명령어 세트를 지정하는데 유보됨.
상기 프로세서가 프라이빗 상태로 부트하고, Thumb 명령어 세트만이 지원되므로, 상기 구조는 LSB가 1로 세트된 어드레스들에 분기하는 레거시 코드와 역호환 가능하다. 퍼블릭 상태에서 실행할 때, target_addr[0]이 0으로 설정된 장소에의 분기는 INVSTATE UsageFault가 생기고, target_addr[0]=1인 분기들은 통상의 분기들로 작용하고, 프라이빗 상태에 천이시키지 않고, 이 해결방법은 다음의 이점이 있다:
● 퍼블릭 코드가 가능한 공격 벡터인 이 비트를 레버리지 사용을 방지할 수 있는 이점,
● LSB가 1로 설정된 어드레스들에 분기하는, 기존의 레거시 라이브러리들에 대한 작용이나, 레거시 툴로 컴파일링된 코드를 보존하는 이점.
요약하면, 퍼블릭 코드를 호출하는 프라이빗 함수만이, 상기 호출 어드레스 LSB를 0으로 설정할 수 필요가 있다.
프라이빗 코드에 대한 함수 호출
임의의 분기(또는 선형 코드 흐름)에 의해 퍼블릭 코드로부터 프라이빗 코드로 천이시킬 경우, 상기 프라이빗 코드의 첫 번째 명령어는 PG 명령어이어야 한다.
도 7은 도메인 천이가 일어나는 경우를 강조하는 프라이빗 함수를 호출하는 퍼블릭 코드의 간단한 일례를 나타낸다. 프로세서가 상기 PG 명령어가 실행될 때까지 퍼블릭 상태를 유지하므로, (LR을 포함한) 레지스터 상태는, 신뢰할 수 없는 것으로서 취급되므로, 상기 BL과 상기 PG 사이에서 퍼블릭 인터럽트가 생기는 경우에 보호할 필요가 없다. 다른 중요한 특징은, 상기 프로세서가 BXNP LR 명령어 뒤에 퍼블릭 상태로 복귀된다는 것이다. 이것에 의해, 다음 명령어가 퍼블릭 도메인에 없는 경우나, 다른 PG 명령어가 프라이빗 도메인에 있는 경우에, 예외를 생성시킴으로써 반환 공격들을 막는다. 상기 BXNP LR 명령어는, 미리 상기 LR 레지스터의 LSB를 검사하여서 상기 타깃의 프라이버시 상태를 판정할 수 있다. 상기 PG 명령어가 자동으로 상기 반환 어드레스를 깨끗이 검토하므로, 이때에 LR 레지스터의 LSB는 신뢰될 수 있다.
추가의 명령어들
PG
프라이빗 게이트웨이. 이 가드 명령어는, 어드레스가 논(non) 프라이빗 코드로부터의 분기를 위한 유효 분기 타깃인 것을 나타내는데 사용된다. 주석: 이 명령어는 LDRD(리터럴)의 T1부호화에서 UNPREDICTABLE 공간에 끼워 넣는다. ARM ARMv7-M 이슈 D섹션 A7.7.50을 참조한다. 이 부호화는, 상위 16비트 워드와 하위 16비트 워드 모두의 값이 같기 때문에 신중하게 선택되어 있고, 단지 상부 16비트만이 그 명령어를 현재의 ISA에서 UNPREDICTABLE로서 마킹한다. 이것은, 32비트 명령어의 중간에 분기가 행해지는 경우에도, 정상의 코드로 이 비트 패턴을 발견할 가능성이 매우 없게 한다.
부호화 T1 자산 보호 확장
Figure 112015037004633-pct00008
InITBlock()이면, UNPREDICTABLE;
instState = InstMemState();
LR = if CurrentState == PrivacyState_Private이면, LR<31:1>:'1'
그렇지 않으면 LR<31:1>:'0';
CurrentState = instState;
이 명령어의 부작용은, LR[0]을 수정하는 것과, 상기 명령어를 반입한 장소의 것과 일치하기 위해 상기 프로세서의 프라이버시 상태를 갱신하는 것뿐이다. 이 때문에, 이 명령어는, 퍼블릭 상태로부터 실행 가능한 명령어로서 규정되어 있다.
예외
벡터 테이블
상기 자산 보호 확장은, 현재의 VTOR 레지스터와 같은 의미론을 갖는 새로운 VTORP에 의해 지시된 두 번째 벡터 테이블을 추가하고, 기존의 VTOR 레지스터와 같은 어드레스에 저장되어 있다(VTORP에 진행하는 프라이빗 상태로부터 액세스한다). 상기 프라이빗 상태를 대상으로 하는 예외는, 벡터 테이블의 기저 어드레스를 결정하기 위해 VTOR 대신에 VTORP 레지스터를 사용한다. 상기 프라이빗 벡터 테이블을 보호하는데 중요한 것은, VTORP가 프라이빗으로서 마킹된 메모리의 에어리어를 지시하므로, 퍼블릭 상태로부터 액세스 불가능하다. 다음의 규칙을 사용하여 어느 상태가 예외를 대상으로 하는지를 결정한다:
● 예외 수<16: 일반적으로, 대부분의 낮은 수의 예외는, 상기 프로세서가 현재 상기 CurrentState 변수에 의해 결정된 것과 같은 상태를 대상으로 한다. 아래의 예외는 일반 규칙에서 벗어난다:
○ PrivateFault - 항상 프라이빗 상태를 대상으로 한다
PrivateFault
새로운 PrivateFault 예외는, 예외 번호 7로 규정되어 있다. 이 예외는, 여러 가지의 안전성 검사를 행하는 것에 의해 야기된다(예를 들면, 퍼블릭 코드로부터 유효 진입 포인트로서 마킹되지 않은 프라이빗 코드에서의 어드레스로 점프할 때). 이러한 예외를 생성할 수 있는 모든 경우의 아주 상세한 내용은, 본 사양에 의한 의사 코드로 알 수 있다.
PrivateFault의 우선권은, SHPR1 레지스터에서의 PRI_7필드를 사용하여 구성될 수 있다. 이 때문에, 이 필드는, 퍼블릭 상태로부터 액세스될 때 RAZ/WI가 규정되어 있다.
PrivateFault는 항상 프라이빗 상태를 대상으로 하고, 이 때문에 퍼블릭 벡터 테이블에서의 예외 번호 7은 유보되어(reserved) 있다.
PFSR
프라이빗 폴트 상태 레지스터, 어드레스 0xE000ED8C, UNKNOWN에 리세트, ARMv6-M에 없는 레지스터
사용 제약:
● 해당 폴트를 클리어하기 위해 1을 레지스터 비트에 기록.
● 그 폴트 비트들은 추가하는 것이 특징이고, 즉, 하나보다 많은 폴트가 일어나면, 관련된 모든 비트는 1로 설정된다.
● 프라이빗 특권 상태로부터 액세스만 가능하다, 다른 상태로부터의 액세스들은 BusFault를 생성한다.
Figure 112015037004633-pct00009
INVEP(bit[0]) 무효 진입 포인트. 이 비트는, 퍼블릭 상태나 예외로부터의 함수 호출이 프라이빗 상태에서의 논-PG명령어를 대상으로 하는 경우에 세트된다
INVMS(bit[1]) 무효 매직 서명. 이 비트는, 예외 스택 프레임에서의 상기 매직 서명이 언스택킹 연산동안에 무효라는 것을 발견하면 세트된다.
INVER(bit[2]) 무효 예외 반환. 퍼블릭 상태의 예외로부터 반환될 때 EXC_RETURN.SCRS가 0이었다는 것을 가리킨다.
PAUVIOL(bit[3]) PAU 위반. 트랜잭션의 P-Req를 퍼블릭으로 설정된 프라이빗으로서 마킹된 어드레스 공간의 일부를 액세스하려고 시도했던 것을 가리킨다.
INVALIGN(bit[4]) 무효 정렬. 이 예외는, 명령어가 프라이빗 도메인 경계에 정렬되지 않은 경우 일어난다. 즉, 명령어가 그 경계와 교차한다.
INVTRAN(bit[5]) 무효 천이. 이 예외는, 도메인 크로싱인 것으로서 표시해 놓지 않은 분기에 의해 프라이빗에서 퍼블릭 메모리에 천이할 때 생긴다.
Misc PseUdo code
InstMemState()
이 의사코드 함수는, 현재의 명령어가 반입되어 있던 상기 메모리의 상기 PrivacyState를 반환한다.
본 발명의 여러 가지의 또 다른 국면들 및 특징들은 청구범위에 기재되어 있다. 본 명세서에서는 본 발명의 범위를 벗어나지 않고 상술한 실시예들을 여러 가지로 변형할 수 있다.

Claims (23)

  1. 프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리 회로소자로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리 회로소자와;
    데이터와 명령어를 기억하는 데이터 스토어로서, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하며 상기 덜 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과, 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 상기 데이터 스토어를 구비하고,
    상기 처리 회로소자는,
    실행되어야 할 프로그램 명령어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 일 영역이 상기 처리 회로소자의 현재 연산의 도메인에 대응하는 것을 검증하고;
    상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여;
    상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하여;
    상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하고,
    상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하도록 구성된, 데이터 처리장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 처리 회로소자는, 상기 프로그램 명령어가 상기 데이터 스토어의 안전한 영역에 기억되어 있는 것과 상기 처리 회로소자의 현재의 연산의 도메인이 상기 덜 안전한 도메인인 것을 검출하는 것에 응답해서만, 상기 프로그램 명령어가 가드 명령어를 포함하는지를 검증하도록 구성된, 데이터 처리장치.
  4. 제 3 항에 있어서,
    상기 데이터 스토어의 상기 덜 안전한 영역에 기억되는 상기 프로그램 명령어에 응답하여, 상기 처리 회로소자는, 상기 명령어가 상기 가드 명령어를 포함하건 포함하지 않건 간에 상기 연산의 도메인을 상기 덜 안전한 도메인으로 전환하도록 구성된, 데이터 처리장치.
  5. 제 1 항에 있어서,
    상기 처리 회로소자는, 상기 보안 위반 표시에 응답하여 예외를 생성하고 장애(fault) 처리 코드를 실행하는, 데이터 처리장치.
  6. 제 1 항에 있어서,
    상기 처리 회로소자는 다른 길이의 명령어를 갖는 명령어 세트로부터 프로그램 명령어들을 실행하도록 구성되고, 상기 처리 회로소자가 요구하는 명령어 어드레스 정렬은 상기 다른 길이에 의존하며, 상기 가드 명령어는, 상기 프로그램 명령어들 중 하나에 있는 명령어 어드레스 정렬 포인트들의 적어도 하나의 서브세트 중 하나에 상기 가드 명령어의 시작부분이 있으면, 상기 가드 명령어의 일부가 다음 명령어의 시작부분과 중첩할 수 있을 정도로 충분히 긴 길이를 갖는, 데이터 처리장치.
  7. 제 6 항에 있어서,
    상기 명령어 어드레스 정렬 포인트들의 적어도 하나의 서브세트는, 상기 명령어 어드레스 정렬 포인트들 전부를 포함하는, 데이터 처리장치.
  8. 제 6 항에 있어서,
    상기 가드 명령어의 상기 길이가 상기 명령어 세트로부터 가장 긴 프로그램 명령어의 길이와 같은, 데이터 처리장치.
  9. 제 6 항에 있어서,
    상기 가드 명령어는 복수의 부분으로 형성되고, 상기 복수의 부분의 적어도 2개의 부분은 상기 처리 회로소자가 요구한 상기 명령어 어드레스 정렬들 사이의 최소 거리의 길이를 갖고, 상기 복수의 부분의 상기 적어도 2개의 부분이 동일한 값을 갖는, 데이터 처리장치.
  10. 제 9 항에 있어서,
    상기 가드 명령어는 상기 2개의 부분을 포함하는, 데이터 처리장치.
  11. 제 9 항에 있어서,
    상기 동일한 값은, 상기 명령어 세트로부터의 임의의 다른 명령어용 유효 연산코드나, 연산코드의 시작 세그먼트가 아닌, 데이터 처리장치.
  12. 제 6 항에 있어서,
    상기 처리 회로소자가 요구하는 상기 어드레스 정렬로 정렬될 때 상기 명령어 세트로부터 다른 명령어와 중첩하는 상기 가드 명령어의 임의의 부분의 값은, 상기 명령어 세트로부터 임의의 다른 명령어용 유효 연산코드나, 연산코드의 시작부분이 아닌, 데이터 처리장치.
  13. 제 1 항에 있어서,
    상기 데이터 스토어는, 상기 가드 명령어와 동일한 값을 갖는 프로그램 코드내에 리터럴(literal)들로서 임의의 데이터 값들을 기억하지 않도록 구성된, 데이터 처리장치.
  14. 제 1 항에 있어서,
    상기 데이터 처리장치는, 상기 데이터 스토어의 적어도 하나의 소정의 섹션이 상기 가드 명령어를 유효하게 기억시키도록 상기 데이터 스토어를 구분하도록 구성되고, 상기 처리 회로소자는 상기 적어도 하나의 소정의 섹션이 아닌 상기 데이터 스토어의 세그먼트에 위치된 상기 가드 명령어를 검출하는 것에 응답하여 보안 위반 표시를 생성하도록 구성되는, 데이터 처리장치.
  15. 제 14 항에 있어서,
    상기 적어도 하나의 소정의 섹션은, 상기 가드 명령어와 동일한 값을 갖는 임의의 데이터 값을 기억하지 않도록 구성되는, 데이터 처리장치.
  16. 제 14 항에 있어서,
    상기 데이터 스토어의 상기 덜 안전한 영역에 기억된 프로그램 코드가 호출 가능한 상기 프로그램 코드의 일부는 상기 적어도 하나의 소정의 섹션에 기억되는, 데이터 처리장치.
  17. 제 14 항에 있어서,
    상기 데이터 스토어는, 상기 적어도 하나의 소정의 섹션에 명령어들을 기억하도록만 구성되는, 데이터 처리장치.
  18. 제 14 항에 있어서,
    상기 데이터 처리장치는, 상기 데이터 스토어에의 액세스를 제어하는 메모리 액세스 제어 회로소자를 구비하고, 상기 메모리 액세스 제어 회로소자는, 상기 데이터 스토어의 상기 적어도 하나의 소정의 섹션을, 상기 메모리 액세스 제어 회로소자내에 적어도 하나의 메모리 속성 마커를 설정하여서 나타내도록 구성되는, 데이터 처리장치.
  19. 제 1 항에 있어서,
    상기 처리 회로소자는, 상기 가드 명령어를 도메인 전환 명령어로서 처리하고, 상기 가드 명령어에 응답하여 상기 연산의 도메인을 상기 가드 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하도록 구성된, 데이터 처리장치.
  20. 제 1 항에 있어서,
    상기 처리 회로소자는, 상기 현재 연산의 도메인을 가리키는 도메인 플래그로부터 상기 현재 연산의 도메인을 결정하도록 구성된, 데이터 처리장치.
  21. 제 1 항에 있어서,
    분기 명령어의 반환 어드레스를 기억하는 링크 레지스터를 포함하고,
    상기 링크 레지스터에 기억된 상기 반환 어드레스에 분기하는 상기 적어도 하나의 안전한 영역에 기억된 분기 명령어의 실행 후에, 상기 처리 회로소자는 상기 현재 연산의 도메인을 상기 덜 안전한 도메인으로 전환하도록 구성된, 데이터 처리장치.
  22. 프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리 회로소자로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리 회로소자와, 데이터와 명령어를 기억하되, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 상이한 안전한 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하고, 상기 덜 안전한 도메인에서 동작하는 상기 처리 회로소자가 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 데이터 스토어를 구비하는, 장치의 데이터 처리 방법으로서, 상기 방법은,
    (i) 실행되어야 할 프로그램 명렁어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 일 영역이 상기 처리 회로소자의 현재연산의 도메인에 대응하는 것을 검증하는 단계,
    (ii) 상기 처리 회로소자의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 스토어의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하고,
    (iii) 상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하는 단계와,
    (iv) 상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 스토어의 상기 영역에 대응한 도메인으로 전환하고,
    (v) 상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하는 단계를 포함하는, 데이터 처리방법.
  23. 프로그램 명령어에 응답하여 데이터 처리 연산을 행하는 처리수단으로서, 안전한 도메인과 덜 안전한 도메인으로 이루어진 복수의 연산의 도메인을 갖고, 상기 안전한 도메인에서 동작할 때 상기 덜 안전한 도메인에서 액세스 가능하지 않은 적어도 일부의 데이터에 액세스하는, 상기 처리수단과;
    데이터와 명령어를 기억하는 데이터 기억수단으로서, 상기 복수의 연산의 도메인 중 하나에 각 영역이 대응한 복수의 영역을 포함하고, 상기 안전한 도메인에서 동작하는 상기 처리수단이 액세스 가능하며 상기 덜 안전한 도메인에서 동작하는 상기 처리수단이 액세스 가능하지 않은 중요한 데이터를 기억하는 적어도 하나의 안전한 영역과, 덜 중요한 데이터를 기억하는 덜 안전한 영역을 포함하는, 상기 데이터 기억수단을 구비하고,
    상기 처리수단은,
    실행되어야 할 프로그램 명령어에 대하여 상기 프로그램 명령어를 기억하는 상기 데이터 기억수단의 일 영역이 상기 처리수단의 현재 연산의 도메인에 대응하는 것을 검증하고; 상기 처리수단의 상기 현재 연산의 도메인에 대응하지 않는 상기 데이터 기억수단의 일 영역에 상기 프로그램 명령어가 기억되어 있는 것을 검출하는 것에 응답하여;
    상기 프로그램 명령어가 가드 명령어를 포함하는지 검증하여,
    상기 프로그램 명령어가 상기 가드 명령어를 포함하는 경우에는, 상기 연산의 도메인을, 상기 프로그램 명령어를 기억하는 상기 데이터 기억수단의 상기 영역에 대응한 도메인으로 전환하고,
    상기 프로그램 명령어가 상기 가드 명령어를 포함하지 않는 경우에는, 보안 위반 표시를 생성하기 위한 것인, 데이터 처리장치.
KR1020157009802A 2012-10-01 2013-09-17 데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘 KR102186675B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB1217531.1 2012-10-01
GB201217531A GB201217531D0 (en) 2012-10-01 2012-10-01 ARMv7-M Asset Protection Proposal
GB1313869.8A GB2506501A (en) 2012-10-01 2013-08-02 A secure mechanism to switch between different domains of operation
GB1313869.8 2013-08-02
PCT/GB2013/052423 WO2014053806A1 (en) 2012-10-01 2013-09-17 A secure mechanism to switch between different domains of operation in a data processor

Publications (2)

Publication Number Publication Date
KR20150065735A KR20150065735A (ko) 2015-06-15
KR102186675B1 true KR102186675B1 (ko) 2020-12-04

Family

ID=47225487

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157008994A KR102160916B1 (ko) 2012-10-01 2013-08-07 안전한 도메인과 덜 안전한 도메인을 이용한 데이터 처리 장치 및 방법
KR1020157009802A KR102186675B1 (ko) 2012-10-01 2013-09-17 데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020157008994A KR102160916B1 (ko) 2012-10-01 2013-08-07 안전한 도메인과 덜 안전한 도메인을 이용한 데이터 처리 장치 및 방법

Country Status (12)

Country Link
US (1) US9122890B2 (ko)
EP (2) EP2888691B1 (ko)
JP (1) JP6272875B2 (ko)
KR (2) KR102160916B1 (ko)
CN (1) CN104756129B (ko)
AR (1) AR092752A1 (ko)
GB (2) GB201217531D0 (ko)
IL (2) IL237180B (ko)
IN (1) IN2015DN01188A (ko)
MY (2) MY176723A (ko)
TW (1) TWI607342B (ko)
WO (2) WO2014053802A1 (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160314296A1 (en) * 2013-12-17 2016-10-27 Sequitur Labs ,Inc. Method and System for Dynamic Runtime Selection and Modification of Conditional Expressions in Computations
US9703733B2 (en) * 2014-06-27 2017-07-11 Intel Corporation Instructions and logic to interrupt and resume paging in a secure enclave page cache
CN105988713B (zh) * 2015-01-29 2019-01-08 深圳市硅格半导体有限公司 存储装置及存储方法
US9747218B2 (en) * 2015-03-20 2017-08-29 Mill Computing, Inc. CPU security mechanisms employing thread-specific protection domains
US9870466B2 (en) * 2015-09-26 2018-01-16 Mcafee, Inc. Hardware-enforced code paths
CN111651202B (zh) * 2016-04-26 2023-09-22 中科寒武纪科技股份有限公司 一种用于执行向量逻辑运算的装置
US20180004946A1 (en) * 2016-07-01 2018-01-04 Intel Corporation Regulating control transfers for execute-only code execution
US10650156B2 (en) 2017-04-26 2020-05-12 International Business Machines Corporation Environmental security controls to prevent unauthorized access to files, programs, and objects
GB2562102B (en) * 2017-05-05 2019-09-04 Advanced Risc Mach Ltd An apparatus and method for managing use of capabilities
CN109754062B (zh) * 2017-11-07 2024-05-14 上海寒武纪信息科技有限公司 卷积扩展指令的执行方法以及相关产品
US11914726B2 (en) 2018-08-30 2024-02-27 Micron Technology, Inc. Access control for processor registers based on execution domains
US11182507B2 (en) * 2018-08-30 2021-11-23 Micron Technology, Inc. Domain crossing in executing instructions in computer processors
GB2577878B (en) * 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
CN111353595A (zh) * 2018-12-20 2020-06-30 上海寒武纪信息科技有限公司 运算方法、装置及相关产品
CN111339060B (zh) * 2018-12-19 2024-03-12 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
CN111400341B (zh) * 2019-01-02 2022-12-09 上海寒武纪信息科技有限公司 标量查找指令处理方法、装置及相关产品
GB2589895B (en) * 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction
GB2589897B (en) * 2019-12-11 2022-03-23 Advanced Risc Mach Ltd Domain transition disable configuration parameter

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
JP2008257735A (ja) * 2007-04-03 2008-10-23 Arm Ltd 保護された関数呼び出し

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4087856A (en) * 1976-06-30 1978-05-02 International Business Machines Corporation Location dependence for assuring the security of system-control operations
GB0226875D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Control of access to a memory by a device
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US20040168047A1 (en) * 2003-02-24 2004-08-26 Matsushita Electric Industrial Co., Ltd. Processor and compiler for creating program for the processor
CN101076778A (zh) * 2004-12-14 2007-11-21 皇家飞利浦电子股份有限公司 可编程信号处理电路和交织方法
US8621607B2 (en) * 2006-05-18 2013-12-31 Vmware, Inc. Computational system including mechanisms for tracking taint
US8136091B2 (en) * 2007-01-31 2012-03-13 Microsoft Corporation Architectural support for software-based protection
US8578483B2 (en) * 2008-07-31 2013-11-05 Carnegie Mellon University Systems and methods for preventing unauthorized modification of an operating system
GB2482701C (en) * 2010-08-11 2018-12-26 Advanced Risc Mach Ltd Illegal mode change handling
US9798873B2 (en) * 2011-08-04 2017-10-24 Elwha Llc Processor operable to ensure code integrity

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040139346A1 (en) 2002-11-18 2004-07-15 Arm Limited Exception handling control in a secure processing system
JP2008257735A (ja) * 2007-04-03 2008-10-23 Arm Ltd 保護された関数呼び出し

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Mihai Budiu 외 2인, "Architectural Support for Software-Based Protection", ASID’06 October 21, pp.42-51

Also Published As

Publication number Publication date
IL237280A0 (en) 2015-04-30
IN2015DN01188A (ko) 2015-06-26
TWI607342B (zh) 2017-12-01
TW201415287A (zh) 2014-04-16
MY168636A (en) 2018-11-16
KR20150065735A (ko) 2015-06-15
AR092752A1 (es) 2015-04-29
EP2888691A1 (en) 2015-07-01
US9122890B2 (en) 2015-09-01
EP2888691B1 (en) 2018-11-21
WO2014053806A1 (en) 2014-04-10
GB201217531D0 (en) 2012-11-14
GB201313869D0 (en) 2013-09-18
CN104756129A (zh) 2015-07-01
EP2885738B1 (en) 2016-10-26
KR102160916B1 (ko) 2020-09-29
CN104756129B (zh) 2017-11-28
MY176723A (en) 2020-08-19
JP6272875B2 (ja) 2018-01-31
KR20150064069A (ko) 2015-06-10
WO2014053802A1 (en) 2014-04-10
IL237280B (en) 2018-04-30
IL237180B (en) 2018-06-28
JP2015534689A (ja) 2015-12-03
US20140075581A1 (en) 2014-03-13
GB2506501A (en) 2014-04-02
EP2885738A1 (en) 2015-06-24

Similar Documents

Publication Publication Date Title
KR102186675B1 (ko) 데이터 프로세서에서의 상이한 연산의 도메인간 전환을 위한 안전 메카니즘
Shanbhogue et al. Security analysis of processor instruction set architecture for enforcing control-flow integrity
US8010772B2 (en) Protected function calling
CN101351774B (zh) 将存储页面与程序相关联的页面着色的方法、装置和系统
JP6189039B2 (ja) セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法
US20120216281A1 (en) Systems and Methods for Providing a Computing Device Having a Secure Operating System Kernel
US9355276B2 (en) Processing system
JP2013250980A (ja) プロセッサ資源および実行保護の方法および装置
KR102192835B1 (ko) 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호
JP2010511227A (ja) 信頼性の低いアドレス空間への実行コードのコンパイル
US10210349B2 (en) Data processing apparatus and method using secure domain and less secure domain
US20220366037A1 (en) Domain transition disable configuration parameter
KR20210060443A (ko) 스택 포인터의 검증
EP4073635B1 (en) Intermodal calling branch instruction

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