KR102192835B1 - 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호 - Google Patents

데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호 Download PDF

Info

Publication number
KR102192835B1
KR102192835B1 KR1020157035730A KR20157035730A KR102192835B1 KR 102192835 B1 KR102192835 B1 KR 102192835B1 KR 1020157035730 A KR1020157035730 A KR 1020157035730A KR 20157035730 A KR20157035730 A KR 20157035730A KR 102192835 B1 KR102192835 B1 KR 102192835B1
Authority
KR
South Korea
Prior art keywords
library
software
active
secure domain
libraries
Prior art date
Application number
KR1020157035730A
Other languages
English (en)
Other versions
KR20160019454A (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 KR20160019454A publication Critical patent/KR20160019454A/ko
Application granted granted Critical
Publication of KR102192835B1 publication Critical patent/KR102192835B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/74Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • 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
    • 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

Abstract

처리장치(2)는 안전한 도메인(90)과 덜 안전한 도메인(80)을 갖는다. 처리회로(2)가 도메인들 사이에서 호출할 때 보안 보호 하드웨어(40)가 보안 검사 동작을 행한다. 데이터 저장소(6)는 다수의 소프트웨어 라이브러리들(100)과 라이브러리 관리 소프트웨어(110)를 기억한다. 라이브러리 관리 소프트웨어(110)는, 라이브러리들 중에서 적어도 한 개를 처리회로(4)에 의해 실행 가능한 활성 라이브러리로 선택하고 적어도 한 개의 다른 라이브러리(100)를 실행이 가능하지 않은 비활성 라이브러리로 선택한다. 비활성 라이브러리에 대한 액세스에 응답하여, 라이브러리 관리 소프트웨어(110)는 어떤 라이브러리가 활성인지를 전환한다.

Description

데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호{SECURITY PROTECTION OF SOFTWARE LIBRARIES IN A DATA PROCESSING APPARATUS}
본 발명은 데이터 프로세싱 분야에 관한 것이다. 특히, 본 발명은 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호에 관한 것이다.
데이터 처리장치는 안전한 도메인과 덜 안전한 도메인을 갖는다. 안전한 도메인에서 동작할 때, 덜 안전한 도메인에서 동작할 때 액세스 가능하지 않는 데이터를 액세스할 수 있다. 이것은 권한이 없는 사람이나 프로그램에 의해 잠재적으로 민감한 데이터 및 코드를 액세스하지 못하도록 보호하는 방법을 제공한다.
그러나, 다수의 소프트웨어 어플리케이션들을 서로로부터 보고할 필요성이 증가하고 있다. 어플리케이션들의 수가 증가함에 따라, 보안을 유지하는 것이 더욱 더 복잡해지고 있다. 본 발명은 이와 같은 문제를 해소하는 것을 목적으로 한다.
일면에 따르면, 본 발명은, 데이터 처리장치로서,
명령들에 응답하여 데이터 처리를 행하고, 안전한 도메인과 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리회로를 구비하고, 상기 안전한 도메인에서 동작할 때 상기 명령들이 액세스가능한 적어도 일부 데이터를 상기 덜 안전한 도메인에서 동작할 때에는 액세스가 불가능하고,
상기 데이터 처리장치는,
상기 처리회로가 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여 제 1 보안 보호 동작을 행하도록 구성된 보안 보호 하드웨어와,
상기 처리회로에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하도록 구성된 데이터 저장소를 더 구비하고,
상기 라이브러리 관리 소프트웨어는, 상기 처리회로를 제어하여, 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리회로에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리회로에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하도록 구성되고,
상기 처리회로가 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리회로를 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하도록 구성된, 데이터 처리장치를 제공한다.
처리장치에서 복수의 다른 소프트웨어 라이브러리를 제공하는 것이 바람직하다. 라이브러리들은 서로 신뢰하지 못할지도 모르는 다양한 소프트웨어 벤더들에 의해 제공되므로, 라이브러리들 사이에서 보안을 실시하는 것이 바람직하다. 한기지 옵션은, 예를 들어 운영체계를 사용하여, 소프프웨어 라이브러리들 사이에서의 모든 보안 검사가 소프트웨어로 처리하는 것일 수 있다. 그러나, 그러나, 보호를 받는 라이브러리에 대한 함수 호출이 존재할 때마다 운영체계 보안 거동을 작동시키기 위해 처리회로의 처리를 인터럽트해야 하기 때문에 이와 같은 접근방식은 속도가 느려지는 경향이 있다. 한편, 완전히 하드웨어로 구현된 솔루션이 별개의 보안 도메인으로서 각각의 소프트웨어 라이브러리를 구현하고 전용 하드웨어를 사용하여 라이브러리들 사이의 보안을 실시할 수도 있다. 그러나, 동일한 장치 상에 존재하는 소프트웨어 라이브러리들의 수가 커지므로, 각각의 라이브러리를 별개의 도메인으로서 유지하기 위한 전용 하드웨어 자원의 양이 회로 면적 및 소비전력면에서 비싸질 수 있다.
이와 같은 문제를 해소하기 위해, 본 발명은 전용 보안 보호 하드웨어 및 라이브러리 관리 소프트웨어를 이용하는 하이브리드식 접근방식을 제공한다. 보안 보호 하드웨어는 덜 안전한 도메인과 안전한 도메인 사이에서 호출한다. 도메인들 사이에서 호출할 때, 보안 보호 하드웨어는, 덜 안전한 코드가 허가없이 안전한 데이터 또는 안전한 코드를 액세스할 수 없도록 보장하기 위한 다양한 조치를 포함하는 제1 보안 보호 동작을 행할 수 있다. 한편, 도메인 내에서 서로 다른 소프트웨어 라이브러리들 사이에서의 전환은 처리회로 자체에 의해 실행된 라이브러리 관리 소프트웨어를 사용하여 제어된다. 라이브러리 관리 소프트웨어는 소프트웨어 라이브러리들 중에서 적어도 한 개를 활성 라이브러리로 선택하고 적어도 한 개의 다른 소프트웨어 라이브러리를 비활성 소프트웨어 라이브로서 선택한다. 비활성으로 지정된 소프트웨어 라이브러리들은 처리회로에 의해 실행될 수 없고, 이 라이브러리와 관련된 보안 중요 자원들을 활성 라이브러리가 액세스할 수 없다. 처리회로가 비활성 소프트웨어 라이브러리를 호출하려고 시도하면, 라이브러리 관리 소프트웨어가 처리회로를 제어하여 라이브러리가 활성인 것을 전환함으로써, 필요한 라이브러리가 활성이 되고 이전에 활성인 라이브러리가 비활성이 된다. 따라서, 라이브러리 관리 소프트웨어가 서로 다른 소프트웨어 라이브러리들 사이에서 보안 보호 프로코톨들을 효율적으로 가상화함으로써, 처리회로가 서로 다른 보호를 받는 라이브러리들에 각각 대응하는 다수의 보호 도메인들을 갖는 한편, 하드웨어 관점에서는 한번에 한 개의 소프트웨어가 활성 라이브러리소서 선택되는 도메인들의 수가 더 적어지는 것처럼 시스템이 거동한다.
전용 보안 보호 하드웨어가 처리회로 상에서 소프트웨어를 불러올 필요가 없이 함수 호출이 다른 도메인에 있는 활성 소프트웨어 라이브러리에 대해 직접 행해질 수 있도록 하기 때문에, 이와 같은 접근방식은 완전히 소프트웨어로 구현된 접근방식보다 더 속도가 빠르다. 동일한 활성 라이브러리에 대한 반복된 호출이 라이브러리 관리 소프트웨어를 불러오지 않으며, 덜 안전한 도메인과 안전한 도메인 사이에서의 호출과 관련된 보안 예방조치가 처리회로에 의해 행해지고 있는 처리를 거의 인터럽트하지 않으면서 하드웨어로 신속하게 제어될 수 있다. 비활성 라이브러리가 필요할 때에만 라이브러리 관리 소프트웨어를 사용한 라이브러리들 사이에서의 전환의 성능 오버헤드가 생긴다. 실제로는, 이미 활성인 라이브러리에 대한 호출에 비해 이것이 자주 일어나지 않으므로, 전체적인 성능은 완전히 하드웨어로 구현된 접근방식에 의해 달성되는 것과 근접하지만, 하드웨어 오버헤드가 더 적다.
각각의 소프트웨어 라이브러리는 이 라이브러리와 관련된 명령들 및 데이터 모두를 포함한다. 예를 들어, 라이브러리는 뱅킹 또는 가상 지불 어플리케이션 등의 특정한 어플리케이션을 표시해도 된다.
처리회로가 비활성 소프트웨어 라이브러리를 호출하면, 라이브러리 관리 소프트웨어가 처리회로를 제어하여 제2 보안 보호 동작을 행하게 한다. 이 제2 보안 보호 동작이 성공적이 아니면, 에러가 기동될 수 있는 반면에, 성공적이면, 활성 라이브러리 전환을 행하여 목표 라이브러리를 활성으로 만든다. 따라서, 하드웨어로 행해진 제1 보안 보호 동작 이외에, 교차 도메인(cross-domain) 호출이 존재하는 경우에는, 라이브러리 관리 소프트웨어에 의해 추가적인 층의 보안 보호가 제공된다. 보안 보호 하드웨어에 의해 감시되고 있는 교차 도메인 호출이 존재하지 않더라도 제2 보안 보호 동작이 행해질 수 있다. 예를 들어, 어떤 소프트웨어 라이브러리는 다른 소프트웨어 라이브러리가 라이브러리 코드의 특정한 지점으로만 분기될 수 있도록 하며, 다른 소프트웨어 라이브러리가 유효한 진입점에 위치하지 않는 라이브러리 내부의 위치로 분기를 시도하는 경우에는, 라이브러리 관리 소프트웨어에 의해 에러가 기동될 수 있다. 또한, 특정한 라이브러리들만이 주어진 라이브러리로 분기하는 것이 신뢰되고, 라이브러리 관리 소프트웨어가 라이브러리를 호출하는 신뢰되지 않는 라이브러리를 검출하는 경우에는 에러가 기동된다.
보안을 유지하기 위해, 라이브러리 관리 소프트웨어가 한 개의 라이브러리를 활성 라이브러리로 선택하고 다른 라이브러리들을 비활성 라이브러리로 선택하는 것이 바람직할 수도 있으므로, 한번에 한 개의 라이브러리가 활성이고, 라이브러리들이 서로 상호작용하기 위해서는 안전하게 제어된 라이브러리 전환이 필요하다.
한편, 복수의 활성 라이브러리들과 나머지 라이브러리들을 비활성으로 유지하는 것이 바람직할 수도 있다. 예를 들면, 침입으로부터 일부의 라이브러리들을 보호하는 것만이 필요하고, 나머지 라이브러리들은 보호할 필요가 없을 수도 있다. 이 경우에, 일부의 라이브러리들은 영구적으로 활성으로 될 수도 있다. 또한, 서로 상호작용하는 것이 신뢰되는 라이브러리들의 세트가 존재하므로, 이들 라이브러리들 중에서 한 개가 활성이며, 나머지 라이브러리들도 활성이 된다. 또한, 다른 서브셋들의 라이브러리들이 존재할 수도 있으며, 각각의 서브셋의 라이브러리들 내에서 한 개의 활성 라이브러리가 선택되고 이 서브셋의 나머지 라이브러리들이 비활성이 될 수 있다. 또한, 보안 보호 하드웨어가 안전한 도메인과 덜 안정한 도메인 사이에서 보안을 실시할 수 있을 때, 하드웨어에 의해 제공된 보호로 인해 허가가 없이는 여전히 서로를 액세스할 수 없는, 안전한 도메인에 있는 한 개의 활성 라이브러리와 덜 안전한 도메인에 있는 한 개의 활성 라이브러리를 지정하는 것이 가능하다. 따라서, 복수의 라이브러리들을 동시에 활성으로 설정하는 것이 바람직할 수도 있는 다양한 이유가 존재한다. 일반적으로, 라이브러리 관리 소프트웨어는, 비활성 라이브러리가 활성 라이브러리에 의해 부적절하게 액세스되는 것을 방지하도록 보장한다.
본 발명이 덜 안전한 도메인에서 사용될 수 있지만, 일반적으로 민감한 정보를 처리할 가능성이 큰 소프트웨어 라이브러리들에 대해 사용되는 안전한 도메인에서 본 발명이 가장 유용하다. 따라서, 일 실시예에서는, 관리된 소프트웨어 라이브러리들이 안전한 도메인에 있는 안전한 소프트웨어 라이브러리들이고, 라이브러리 관리 소프트웨어가 덜 안전한 도메인에 있는 라이브러리들을 관리하지 않는다. 이와 달리, 안전한 도메인과 덜 안전한 도메인에 있는 라이브러리들 사이의 전환을 처리하기 위해 별개의 안전한 및 덜 안전한 라이브러리 관리자가 각각 설치되어도 된다.
메모리 보호 유닛(MPU)을 사용하여 어떤 라이브러리들이 활성 또는 비활성인지를 제어해도 된다. MPU를 사용하여 데이터 저장소의 영역들을 액세스 가능 또는 액세스 불가능으로서 지정할 수 있으며, 액세스 불가능한 영역들에 대한 액세스는 결함 조건을 기동한다. 따라서, 라이브러리 관리 소프트웨어에 의한 활성 라이브러리 전환은 서로 다른 영역들을 액세스 가능 또는 액세스 불가능으로 표시하기 위해 MPU 내부의 액세스 허가를 갱신하는 것을 포함해도 된다. 비활성 라이브러리가 액세스되면, 대응하는 메모리 영역이 MPU에서 액세스 불가능으로 표시되므로, MPU가 결함을 발생하고 이것은 라이브러리 관리 소프트웨어를 기동하여 활성 라이브러리 전환을 행할 수 있다.
활성 라이브러리 전환은, 새롭게 활성인 라이브러리에 대응하도록 스택 포인터 기억 위치 내부의 스택 포인터를 갱신하는 것을 포함해도 된다. 스택은 적어도 일부의 소프트웨어 라이브러리들에 대해 데이터 저장소 내부에 설치되어도 된다. 활성일 때, 라이브러리가 스택을 사용하여 임시 데이터를 기억할 수 있다. 라이브러리들이 비활성 상태로부터 활성 상태로 전환될 때 스택들이 동적으로 할당될 수 있으므로, 모든 라이브러리들이 데이터 저장소 내부에 할당된 스택들을 가질 필요는 없다. 각각의 할당된 스택은 메모리 내부의 그것의 위치를 식별하는 대응하는 스택 포인터를 갖는다. 스택 포인터가 표시하는 정확한 위치는 변할 수도 있다. 예를 들어, 스택 포인터는, 스택 위에 놓인 최종 데이터 값의 위치, 또는 스택 위에 놓인 다음의 데이터 값이 기록되어야 하는 위치를 표시한다. 한 개로 라이브러리로부터 다른 라이브러리로 전환할 때 MPU 및 스택 포인터를 갱신함으로써, 새롭게 활성인 라이브러리가 민감한 데이터일 수도 있는 이전의 활성인 라이브러리와 관련된 스택을 액세스할 수 없다. 복수의 라이브러리들이 동시 활성이 되는 것이 허용되는 경우에는, 복수의 스택 포인터 레지스터들이 설치되어도 된다. 예를 들면, 현재 활성인 안전한 라이브러리와 덜 안전한 라이브러리에 대한 스택 포인터들을 각각 기억하는 안전한 스택 포인터 기억 위치와 덜 안전한 스택 포인터 기억 위치가 존재해도 된다.
보안 보호 하드웨어는, 안전한 도메인 및 덜 안전한 도메인과 각각 관련된 데이터 저장소의 안전한 영역과 덜 안전한 영역을 규정하는 보안 데이터를 기억하는 보안 보호 유닛을 가져도 된다. 현재 처리되고 있는 명령이 데이터 저장소의 안전한 영역에 있는지 또는 덜 안전한 영역에 있는지에 근거하여 처리회로의 연산의 현재 도메인이 선택되어도 된다. 일부 예외가 존재하지만, 일반적으로 안전한 영역에 위치한 코드가 안전한 도메인에서 실행되는 한편, 덜 안전한 영역에 위치한 코드가 덜 안전한 도메인에서 실행될 것이다. 분기 명령이 안전한 도메인과 덜 안전한 도메인 중에서 한 개와 관련된 위치로부터 나머지 도메인과 관련된 위치로 분기를 시도할 때, 보안 보호 하드웨어에 의해 제1 보안 보호 동작이 행해져도 된다.
제1 보안 보호 동작은 안전한 정보에 대한 부적절한 액세스를 방지하는 다양한 서로 다른 조치들을 포함한다. 안전한 도메인으로부터 덜 안전한 도메인으로 또는 역으로 호출할 때에만 일부의 조치가 필요할 수도 있다.
예를 들어, 제1 보안 보호 동작은, 프로그램 흐름의 보호된 변화 이후에 실행할 첫 번째 명령이 이 프로그램 흐름의 변화에 대한 허용된 목표 명령인지 여부를 검사하는 과정을 포함해도 된다. 이것은, 프로그램 명령의 보호된 변화가 안전한 도메인에서 실행할 명령으로의 분기일 때 특히 유용하다. 안전한 함수의 중간으로의 점프로 분기를 허용하는 것은 위험할 수 있는데, 이것이 안전한 함수 내부에 이전에 주어진 패스워드 검사 등의 보안 예방책들을 우회할 수 있도록 할 수도 있기 때문이다. 이것을 방지하기 위해, 소정의 명령(예를 들면, 특수한 가드 명령)이 프로그램 명령의 변화에 대한 허용된 목표 명령으로서 지정되고, 허용된 함수 진입점들을 표시하기 위해 안전한 코드 내부에 허용된 명령이 포함되어도 된다. 프로그램 흐름의 보호된 변화(예를 들어, 안전한 영역에 있는 명령으로의 분기) 이후에, 보안 보호 하드웨어는, 호출 이후에 실행할 첫 번째 명령이 허용된 목표 명령인지 여부를 검사할 수 있다. 허용된 목표 명령이 아닌 경우에는, 보안 결함이 기동될 수 있다.
또한, 제1 보안 보호 동작은 보호된 함수 호출 이후의 함수 복귀 어드레스들의 보호를 포함해도 된다. 예를 들어, 안전한 도메인에 있는 코드로부터 함수가 호출되어 덜 안전한 도메인에 있는 코드를 목표로 하는 경우에는, 덜 안전한 도메인에 있는 코드가 함수의 복귀 어드레스를 액세스할 수 있도록 하는 것이 바람직하지 않을 것이다. 덜 안전한 함수가 복귀 어드레스를 수정할 수 있다면, 안전한 코드의 프로그램 코드에 영향을 미칠 수 있게 될 것이고, 이것은 안전한 함수들의 중간으로 점프함으로써 보안 보호들을 우회할 수 있게 할 수 있을 것이다. 이것을 방지하기 위해, 하드웨어가 함수 호출 후에 실행된 명령들로부터 복귀 어드레스의 함수를 숨기기 위한 조치를 취할 수도 있다. 예를 들어, 덜 안전한 도메인에 있는 코드가 액세스할 수 없는, 함수를 호출한 안전한 코드와 관련된 스택에 복귀 어드레스가 기억되어도 된다.
제1 보안 보호 동작은, 프로그램 흐름의 변화 이후에, 처리가 전환되는 도메인이 이 프로그램 흐름의 변화에 대해 지정된 허용된 도메인인지 여부를 검사하는 단계를 더 포함해도 된다. 덜 안전한 코드가 덜 안전한 도메인으로 분기할 것으로 예측되는 안전한 도메인에 있는 분기 명령을 코드 대신에 안전한 도메인에 있는 위치로 분기하게 함으로써, 더 안전한 코드가 안전한 도메인에서 통제되지 않은 프로그램 흐름의 변화를 하게 할 수 있는 특정한 보안 공격이 존재한다. 이것을 방지하기 위해, 적어도 한 개의 허용된 도메인이 특정한 프로그램 흐름의 변화에 대해 지정되고, 이 프로그램 흐름의 변화 이후에, 목적지 도메인이 허용된 도메인과 일치하는지 여부를 하드웨어가 검사한다. 제1 보안 보호 동작은 전술한 것 이외의 보안 검사 및 연산을 포함해도 된다.
보안 보호 하드웨어는 덜 안전한 도메인과 안전한 도메인 사이에서 호출할 때 보안을 확보하기 위한 조치를 제공한다. 그러나, 이들 조치는 동일한 도메인 내부의 서로 다른 소프트웨어 라이브러리들 사이에서 호출할 때에도 바람직할 수 있다. 이것은 다양한 방식으로 달성될 수 있다. 일 실시예에서는, 동일한 도메인에 있는 라이브러리들 사이에서 호출할 때, 처리회로가 원래의 도메인으로 다시 전환하기 전에 다른 도메인으로 일시적으로 전환된다. 도메인들의 일시적인 전환은, 이들 라이브러리들이 실제로 동일한 도메인에 위치하더라도 라이브러리 호출이 안전한 도메인과 덜 안전한 도메인 사이에서의 호출로서 나타나게 함으로써, 하드웨어를 기동하여 제1 보안 보호 동작을 행하게 하므로, 도메인들 사이에서 호출할 때 행해진 동일한 보안 조치가 동일한 도메인에 있는 라이브러리들 사이에서 호출할 때에도 사용될 수 있다.
예를 들어, 동일한 도메인에 있는 라이브러리들 사이에서 호출할 때 보안 보호 하드웨어를 작동시키기 위해, 활성 라이브러리가, 분기를 행할 때 시스템이 다른 도메인으로 전환되어야 한다는 표시와 함께, 목표의 비활성 라이브러리 내부의 위치의 목표 어드레스를 지정하는 분기 명령을 실행해도 된다. 이것은, 목표 위치가 원래의 도메인과 실제로 관련되는 것으로 판정될 때로 다시 전환하기 전의 기간 동안 시스템이 다른 도메인으로 전환하게 한다. 이와 같은 접근방법은 라이브러리들의 전환에 대한 보안 조치가 하드웨어로 신속하게 행해진다는 이점을 갖는다.
이와 달리, 동일한 도메인에 있는 2개의 라이브러리들 사이에서 호출할 때 시스템이 현재 도메인에 유지되고, 라이브러리 관리 소프트웨어가 제1 보안 보호 동작을 행해도 된다. 서로 다른 도메인들 사이에서 호출할 때 보안 보호 하드웨어에 의해 보통 행해지는 모든 동작은 그 대신에 처리회로 상에서 실행되는 라이브러리 관리 소프트웨어에 의해 행해질 수 있다. 이와 같은 구성은, 전술한 실시예에서와 같이 도메인들 사이에서 일시적으로 전환하기 위한 특수한 메카니즘을 필요가 없게 하며, 라이브러리들 사이에서 전달된 피연산자들을 덜 안전한 도메인이 액세스 가능하게 되지 않도록 보장한다.
전술한 것과 같이, 보안 보호 하드웨어에 의해 제공된 제1 보안 보호 동작의 일부는 함수 호출에 뒤따르는 이후의 소프트웨어로부터 함수 복귀 어드레스를 숨기는 것일 수 있다. 이것도 동일한 도메인에 있는 라이브러리들 사이에서의 전환이 존재할 때 라이브러리 관리 소프트웨어에 의해 행해져도 된다. 모든 함수 호출에 대해 이것을 행할 필요는 없으며, 특정한 보호된 함수 호출들에 대해서만 함수 복귀 어드레스를 숨기면 충분하다. 이것을 달성하는 한가지 방법은, 활성 소프트웨어 라이브러리로 전환하기 전에 이 라이브러리와 관련된 스택에 함수 복귀 어드레스를 기억하는 것이다.
이와 같은 접근방법은 모든 라이브러리들이 액세스 가능한 링크 레지스터에 함수 복귀 어드레스를 기억하는 통상의 방법과 대비된다. 그 대신에 더미 함수 복귀 어드레스가 링크 레지스터에 기억될 수 있다. 더미 함수 복귀 어드레스는 유효한 명령 어드레스에 대응하지 않는데, 이것은, 더미 어드레스로 함수 복귀가 행해질 때, 보안 보호 하드웨어가 활성 소프트웨어 라이브러리와 관련된 스택으로부터 실제의 함수 복귀 어드레스를 판독한 후, 이 실제의 함수 복귀 어드레스로의 함수 복귀를 기동해야 한다는 것을 나타낸다.
그러나, 스택에 실제의 함수 복귀 어드레스를 기억한 후, 스택 포인터가 스왑(swap)되도록 하는 다른 소프트웨어 라이브러리로의 전환이 존재할 수도 있다. 따라서, 함수 호출로부터 복귀시에, 함수 복귀 어드레스를 기억하는 스택을 더 이상 액세스할 수 없을 수도 있다. 이와 같은 문제를 해소하기 위해, 보호된 함수 호출이 행해진 후, 라이브러리 관리 소프트웨어가 정보를 설정하여, 다른 소프트웨어 라이브러리의 전환이 존재하였다는 것을 표시해도 된다. 대응하는 함수 복귀시에, 라이브러리 관리 소프트웨어가 정보를 검사하여 라이브러리 전환이 존재하였는지 확인하고, 라이브러리 전환이 존재하였으면, 다시 원래의 라이브러리로의 활성 라이브러리 전환을 행하여, 함수 복귀 어드레스를 스택으로부터 액세스할 수 있다.
활성 라이브러리들의 전환이 존재하였다는 것을 표시하기 위해 설정된 정보는 다양한 형태를 가져도 된다. 이 정보는 유효한 명령 어드레스에 대응하지 않는 무효한 복귀 어드레스(예를 들어, 하드웨어에 의해 링크 레지스터에 기억된 더미 복귀 어드레스와 다른 무효한 어드레스)이어도 된다. 예를 들어, 무효한 복귀 어드레스는, 보호된 함수 호출이 행해진 후 처리가 전환되는 다른 소프트웨어 라이브러리의 스택에 기억되어도 된다. 다른 소프트웨어 라이브러리에 의한 무효한 복귀 어드레스의 이용은 결함을 발생하며, 이것을 이용하여 라이브러리 관리 소프트웨어를 기동하여 다시 원래의 라이브러리로의 활성 라이브러리 전환을 행해도 된다.
또한, 라이브러리 관리 소프트웨어는, 소프트웨어 라이브러리들 중에서 어느 것이 보호된 함수 호출을 행하였는지 표시하는 상태 정보를 유지해도 된다. 보호된 함수 호출로부터 복귀시에, 상태 정보에 의해 표시된 라이브러리가 현재 비활성이면, 라이브러리 관리 소프트웨어가 이 상태 정보에 의해 표시된 라이브러리로 전환될 수 있다. 이와 같은 구성은, 복귀 어드레스를 얻어야만 하는 스택을 시스템이 결정할 수 있게 한다. 라이브러리 관리 소프트웨어에 의해 관리된 단지 2개의 라이브러리가 존재하는 경우에는, 상태 정보가 필수적이 아니어도 된다.
상태 정보는 보호된 함수 호출을 할 때 기억되거나, 다른 활성 라이브러리로 전환할 때 기억될 수도 있다. 일 실시예에서, 상태 정보는 호출되었던 함수들의 적어도 부분 이력을 표시하여, 나중에 되짚어가서 원래의 함수를 호출한 라이브러리를 식별하는 것이 가능하다. 그러나, 원래의 함수 호출로 복귀하기 전에 처리되는 다수의 네스티드(nested) 함수들이 존재할 수도 있으므로, 함수 호출 트리를 감시하는 것은 복잡할 수 있다. 함수들의 모든 후속하는 처리를 추적하지 않고 원래의 호출자 라이브러리의 표시를 기억하는 것이 더 간단할 수도 있다. 이것을 행하는 한가지 방법은, 다른 소프트웨어 라이브러리와 관련된 스택에 상태 정보를 기억하는 것이다.
다른 소프트웨어 라이브러리에 의해 액세스 가능한 위치에 상태 정보가 기억되는 경우, 다른 라이브러리가 상태 정보를 수정할 수 있으므로, 예측 불가능하고 안전하지 못한 연산을 일으킬 수도 있다. 이것을 방지하기 위해, 라이브러리 관리 소프트웨어가 처리회로를 제어하여, 보호 함수를 호출하게 만든 라이브러리의 스택에 검증 정보를 기억해도 된다. 이 검증 정보를 함수 복귀시에 사용하여 상태 정보가 수정되었는지를 검사할 수 있다. 예를 들어, 검증 정보는, 어떤 라이브러리가 상태 정보를 기억하는 스택을 갖는 다른 라이브러리인지의 표시를 포함해도 된다. 소프트웨어에 의해 상대 정보가 수정되는 경우에는, 함수 복귀가 더 이상 원래의 호출자 라이브러리로 복귀하지 않고, 그 대신에 처리가 전환되는 라이브러리가 올바른 검증 정보를 갖지 않을 수 있어, 수정을 검출할 수 있고 에러를 발생할 수 있도록 한다.
안전한 도메인과 덜 안정한 도메인을 위에서 설명하였지만, 상기 장치는 추가적인 도메인들을 가져도 되고, 보안 보호 하드웨어가 도메인들 사이의 전이를 제어한다. 따라서, 전술한 안전한 도메인과 덜 안전한 도메인은 더 많은 수의 도메인들 중에서 2개이어도 된다. 도메인들 각각에 활성 라이브러리가 존재할 수도 있으므로, 동시에 복수의 활성 라이브러리들이 존재할 수 있다.
다른 일면에 따르면, 본 발명은, 데이터 처리장치로서,
명령들에 응답하여 데이터 처리를 행하고, 안전한 도메인과 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리수단을 구비하고, 상기 안전한 도메인에서 동작할 때 상기 명령들이 액세스가능한 적어도 일부 데이터를 상기 덜 안전한 도메인에서 동작할 때에는 액세스가 불가능하고,
상기 데이터 처리장치는,
상기 처리수단이 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여 제 1 보안 보호 동작을 행하는 보안 보호 하드웨어수단과,
상기 처리수단에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하는 저장수단을 구비하고,
상기 라이브러리 관리 소프트웨어는, 상기 처리수단을 제어하여, 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리수단에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리수단에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하도록 구성되고,
상기 처리수단이 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리수단을 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하도록 구성된, 데이터 처리장치를 제공한다.
또 다른 일면에 따르면, 본 발명은,
안전한 도메인에서 동작할 때 명령들이 액세스가능한 적어도 일부 데이터가 덜 안전한 도메인에서 동작할 때에는 액세스가 불가능한, 상기 안전한 도메인과 상기 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리회로와, 상기 처리회로에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하는 데이터 저장소를 구비한 장치에 대한 데이터 처리방법으로서,
상기 라이브러리 관리 소프트웨어의 제어하에서, 상기 처리회로가 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리회로에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리회로에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하는 단계와,
상기 처리회로가 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여, 보안 보호 하드웨어가 제 1 보안 보호 동작을 행하는 단계와,
상기 처리회로가 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리회로를 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하는 단계를 포함하는 데이터 처리방법을 제공한다.
본 발명의 전술한 목적, 특징 및 이점은 다음의 첨부도면을 참조하여 주어지는 예시적인 실시예들의 상세한 설명으로부터 명백해질 것이다.
도 1은 안전 보호 하드웨어를 갖는 데이터 처리장치를 나타낸 것이다.
도 2는 소프트웨어 라이브러리들 사이에서 보안을 유지하는 소프트웨어 기술을 나타낸 것이다.
도 3은 소프트웨어 라이브러리들 사이에서 보안을 유지하는 하드웨어 기술을 나타낸 것이다.
도 4는 소프트웨어를 사용하여 안전한 도메인에 있는 서로 다른 소프트웨어 라이브러리들을 분할하고 하드웨어를 사용하여 덜 안전한 도메인으로부터 안전한 도메인을 분리하는 하이브리드 기술을 나타낸 것이다.
도 5는 안전한 영역과 덜 안전한 영역을 갖는 어드레스 공간의 일례를 나타낸 것이다.
도 6은 안전한 도메인에 있는 서로 다른 안전한 라이브러리들 사이의 전환의 첫 번째 예를 나타낸 것이다.
도 7은 안전한 도메인에 있는 서로 다른 안전한 라이브러리들 사이의 전환의 두 번째 예를 나타낸 것이다.
도 8은 보안 보호방법을 나타낸 것이다.
도 9는 메모리 보호 결함에 응답하여 활성 라이브러리 전환을 행하는 방법을 나타낸 것이다.
도 10은 네스티드 함수 호출의 일례를 나타낸 것이다.
도 11은 도 10에 도시된 함수 호출들을 행할 때 함수 복귀 어드레스를 보호하는 예시적인 기술을 나타낸 것이다.
도 12는 안전한 도메인과 덜 안전한 도메인 각각이 이 도메인에 있는 라이브러리들 사이의 전환을 제어하는 라이브러리 관리 소프트웨어를 각각 갖는 예를 나타낸 것이다.
도 1은 처리회로(4), 데이터 저장소(6) 및 레지스터들(8)을 구비한 데이터 처리장치(2)를 개략적으로 나타낸 것이다. 처리회로(4)는, 데이터 저장소(6)로부터 명령들을 페치하는 페치 스테이지(10)와, 페치된 명령들을 디코드하는 디코드 스테이지(12)와, 디코드된 명령들을 실행하는 실행 스테이지(14)를 구비한 처리 파이프라임을 구비한다. 이때, 파이프라인은 다른 스테이지들, 예를 들어, 레지스터 리네이밍(renaming) 스테이지 또는 발행 스테이지를 구비해도 된다는 것은 명백하다.
레지스터들(8)은 처리회로(4)를 대신하여 데이터를 기억하는 다수의 범용 레지스터들 R0 내지 R12를 구비한다. 도 1에는 13개의 범용 레지스터들 R0 내지 R12가 도시되어 있지만, 다른 수의 레지스터들이 설치되어도 되고, 옵션으로 부동소수점 값들을 기억하는 부동소수점 레지스터들도 설치될 수 있다. 레지스터들(8)은, 프로그램 카운터(PC) 레지스터(20), 링크 레지스터(LR)(22) 및 스택 포인터 레지스터들(24, 26)을 포함하는 일부의 전용 레지스터들을 더 구비한다. 프로그램 카운터 레지스터(20)는 처리회로(4)에 의해 실행할 다음 프로그램 명령의 어드레스를 표시하는 프로그램 카운터를 기억한다. 일반적으로, 명령의 실행 후에, 프로그램 카운터가 갱신되어 메모리로부터의 다음 명령을 표시한다. 그러나, 제어 흐름 변경 명령에 응답하여, 프로그램 카운터가 이전의 값으로부터 순차적으로 뒤따르지 않는 값으로 설정될 수 있다. 링크 레지스터(22)는, 함수 또는 예외로부터 복귀시에, 함수나 예외의 완료후에 어떤 프로그램 명령을 처리해야 하는지를 결정하기 위해 사용되는 복귀값을 기억해도 된다. 스택 포인터 레지스터들(24, 26)은, 데이터 저장소(6) 내부의 안전한 스택(30)과 덜 안전한 스택(32)을 가리키는 안전한 스택 포인터와 덜 안전한 스택 포인터를 각각 기억한다. 예를 들어, 스택 포인터들은, 스택(30, 32) 위에 놓인 최종 항목의 위치를 표시하거나, 스택(30, 32) 상에 놓인 데이터 값들을 기록해야 하는 다음 위치를 표시할 수 있다.
안전한 도메인과 덜 안전한 도메인 사이의 분리를 실행하기 위해 보안 보호 하드웨어(40)가 설치된다. 보안 보호 하드웨어는, 데이터 저장소(6)의 각각의 영역에 대해, 그 영역이 안전한 영역인지 또는 덜 안전한 영역인지 정의하는 보호 데이터를 기억하는 보안 보호 유닛(42)을 갖는다. 도 1은 데이터 저장서(6)가 한 개의 안전한 영역(44)과 덜 안전한 영역(46)을 갖는 예를 나타내고 있지만, 실제적으로는 데이터 저장소(6)가 각 종류의 다수의 영역들을 포함해도 된다. 데이터 저장소(6)의 안전한 영역(44) 내에 놓인 코드 46은 처리회로(4)에 의해 안전한 도메인에서 실행되는 반면에, 덜 안전한 영역(46) 내부에 놓인 코드(48)는 덜 안전한 영역에서 실행된다. 덜 안전한 도메인에 있을 때에는, 처리회로(4)가 안전한 영역(44)에 기억된 데이터 또는 명령들을 액세스할 수 없다. 특정한 허용된 전이만 허용되도록 보장하기 위해 덜 안전한 도메인과 안전한 도메인 사이의 전이는 보안 보호 하드웨어(40)에 의해 제어된다.
데이터 처리장치(2)는, 데이터 저장소(6)의 안전한 영역과 덜 안전한 영역(44, 46)에 대한 액세스 허가를 규정하는 안전한 메모리 보호 유닛(MPU)(50) 및 덜 안전한 MPU(52)를 구비한다. 액세스 허가는, 안전한 영역과 덜 안전한 영역(44, 46)의 서브영역들이 액세스 가능한지 액세스 불가능한지 제어한다. 안전한 MPU(50) 및 덜 안전한 MPU(52)에 의해 규정된 영역들은 중첩되어도 된다. 예를 들어, 안전한 MPU(50)와 덜 안전한 MPU(52)는 동일한 메모리 영역에 대해 서로 다른 속성을 규정해도 된다.
도 2는 서로 다른 소프트웨어 라이브러리들(55) 사이에서 분리를 유지하기 위한 소프트웨어 기술을 나타낸 것이다. 서로 다른 소프트웨어 라이브러리들(55)은 서로 다른 서로 믿을 수가 없는 소프트웨어 벤더들에 의해 제공되므로, 한 개의 라이브러리(55)에 의한 다른 라이브러리(55)와 관련된 데이터 또는 코드에 대한 액세스를 방지할 필요가 있을 수 있다. 소프트웨어 라이브러리들(55) 사이에서의 전환을 관리하기 위해 실시간 운영체계(58) 또는 신뢰 관리자가 설치되어도 된다. 한 개의 라이브러리가 운용체계(58)에 의해 보호되는 것으로 규정된 다른 라이브러리와 관련된 데이터 또는 코드를 액세스하고자 할 때, MPU 하드웨어가 이것이 허용되는지 여부를 검사하고, 허용되지 않는 경우에는 결함을 기동한다. 이와 같은 구현예에서는, 도 1의 보안 보호 하드웨어(40)가 설치되어 있지 않다. 라이브러리들을 전환할 때, 처리회로(4) 상에서의 처리가 인터럽트될 필요가 있으므로, 운영체계(58) 내부의 보안 핸들러가 실행될 수 있다. 이것은 처리회로(4)의 처리 성능을 줄이므로, 이와 같은 기술은 하드웨어 기술에 비해 속도가 느리다.
한편, 도 3은 서로 다른 도메인들을 분리하기 위한 하드웨어 기술의 일례를 나타낸 것이다. 이와 같은 경우에는, 보안 보호 하드웨어(40)가 덜 안전한 도메인과 안전한 도메인 사이의 경계(70)를 유지하며, 각각의 소프트웨어 라이브(60)가 그 자신의 도메인을 갖는다. 도메인 사이에서의 전이의 보안이 하드웨어에 의해 제어되므로, 라이브러리들 사이의 전이가 빠르며, 소프트웨어 핸들러를 작동시킬 필요가 없다. 도 3의 하드웨어 구현으로는, 보안 보호 유닛(42)에 기억된 데이터의 양이 매우 커져, 실제적으로는 이것이 지원될 수 있는 서로 다른 도메인들의 수를 제한하기 때문에, 다수의 서로 다른 서로 보호된 소프트웨어 라이브러리들을 유지하는 것이 곤란하다.
이들 문제를 해소하기 위해, 도 4는 도 3에 도시된 기술보다 더욱 더 하드웨어 효율적으로 그리고 도 2에 도시된 접근방식보다 더 큰 성능을 갖고 다수의 서로 신뢰할 수 없는 소프트웨어 라이브러리들을 유지할 수 있도록 하는 하이브리드식 하드웨어/소프트웨어 기술을 나타낸 것이다. 보안 보호 하드웨어(40)는 덜 안전한 도메인(80)과 안전한 도메인(90) 사이의 경계(70)를 유지하기 위한 보안 보호를 제공한다. 다수의 안전한 소프트웨어 라이브러리들(100)은, 안전한 도메인에서 실행되고, 안전한 MPU(50)와 마찬가지로 안전한 도메인에서 실행되는 라이브러리 관리 소프트웨어(100)를 사용하여 서로 액세스하지 못하게 보호된다. 라이브러리 관리 소프트웨어(110)는 서로 다른 안전한 라이브러리들(100) 사이의 전이를 관리한다. 라이브러리 관리 소프트웨어(110)는 한 개 이상의 라이브러리들(100)을 활성 라이브러리로 선택하고 나머지 라이브러리들을 비활성으로 선택한다. 예를 들어, 도 4에서는, 안전한 라이브러리 0이 활성 라이브러리로 설정되고 나머지 라이브러리들 1 내지 N이 비활성이다. 활성 및 비활성 라이브러리들은 안전한 MPU(50) 내부의 MPU 허가를 설정함으로써 선택될 수 있으므로, 활성 라이브러리에 대응하는 영역은 액세스가 가능하고 비활성 라이브러리에 대응하는 영역은 액세스가 불가능하다. 라이브러리 환경설정 데이터(112)를 라이브러리 관리 소프트웨어(100)가 사용하여 특정한 라이브러리들이 활성일 때 안전한 MPU(50)에 기록되는 액세스 허가를 판정한다.
덜 안전한 도메인(90)에 있는 소프트웨어로부터 활성 라이브러리로 함수 호출(120)이 행해지면, 보안 보호 하드웨어(40)가 보안 검사 연산을 행한다. 보안 검사가 하드웨어로 행해지기 때문에, 속도가 빠르고, 처리회로(4)에 의해 다른 소프트웨어 루틴들을 먼저 행할 필요가 없이 함수 호출(120)이 안전한 라이브러리(100)에 대해 곧바로 행해질 수 있다.
한편, 덜 안전한 도메인(80)에 있는 코드로부터 안전한 도메인(9)에 있는 비활성 라이브러리(100)로 함수 호출(130)이 행해진 경우에는, 비활성 라이브러리에 대응하는 영역이 현재 액세스 불가능한 것으로 설정되어 있기 때문에, 안전한 MPU(50)에 의해 메모리 보호 결함이 기동된다. 이와 같은 결함에 의해 메모리 관리 예외(140)가 기동되고, 이것은 라이브러리 관리자(110)에 있는 결함 핸들러(150)를 불러내어, 활성 라이브러리가 전환되게 함으로써, 함수 호출 130이 목표로 하는 라이브러리(본 실시예에서는 라이브러리 1)가 활성 라이브러리로 되는 한편, 이전의 활성 라이브러리(본 실시예에서는 라이브러리 0)가 비활성이 된다. 결함 핸들러(150)가 라이브러리 환경설정 데이터((112)에 근거하여 안전한 MPU(50)의 환경설정을 전환함으로써, 새롭게 비활성인 라이브러리에 대한 이후의 함수 호출이 허용되고, 이제는 비활성인 이전의 라이브러리에 대한 함수 호출이 이제는 결함을 기동하게 된다. 또한, 결함 핸들러(150)는 안전한 스택 포인터 레지스터(24)에 있는 스택 포인터를 변경하여, 이전의 활성 라이브러리와 관련된 스택 대신에 새롭게 활성인 라이브러리와 관련된 스택을 데이터 저장소(6) 내부에 표시한다. 이것은, 새로운 라이브러리가 그것과 관련된 스택을 액세스할 수 있도록 보장한다. 새로운 라이브러리가 이미 스택을 갖고 있지 않는 경우에는, 스택이 데이터 저장소(6)의 안전한 영역(44)에 할당된다. 라이브러리 관리자(110)는 소프트웨어 보안 검사를 행하여, 라이브러리들의 전환이 허용되는지 여부를 판정할 수도 있다. 한편, 함수 호출 130이 도메인 경계(70)를 교차했으므로, 함수 호출 120과 유사하게 보안 보호 하드웨어(40)에 의해 하드웨어 보안 조치가 마찬가지로 제공된다.
따라서, 라이브러리 관리자(110)는 동일한 하드웨어 보안 도메인에서 동작하고 있는 서로 다른 안전한 라이브러리들(100)을 가상화하여, 일부의 라이브러리들만이 한번에 활성이 되고 활성인 라이브러리들은 비활성이 라이브러리들을 액세스하는 것이 금지되고, 비활성 라이브러리들에 대한 호출이 라이브러리 관리자(110)에 의해 관리되어 보안을 확보한다. 비활성 라이브러리에 대해 호출이 행해질 때에만 라이브러리 관리자(110)를 사용한 안전한 MPU(50) 환경설정의 오버헤드가 발생하며, 동일한 라이브러리에 대한 이후의 호출들은 결함(140)을 일으키지 않고 최소의 오버헤드를 갖는다. 이와 같은 구성은, 서로 다른 소프트웨어 라이브러리들(100)에 대응하는 거의 무제한의 수의 보호 도메인들을 지원할 수 있도록 한다.
도 5는 데이터 저장소(6)의 메모리 어드레스 공간의 일례를 나타낸 것이다. 어드레스 공간은 안전한 영역(44)과 덜 안전한 영역(46)을 갖는다. 도 5에는 한 개의 덜 안전한 영역(44)과 한 개의 안전한 영역(46)이 도시되어 있지만, 더 많은 수의 안전한 영역들 및 덜 안전한 영역들이 설치될 수도 있다. 보안 보호 유닛(42)은, 데이터 저장소(6)의 어떤 영역들이 안전한 영역이고 어떤 영역들이 덜 안전한 영역인지 규정하는 데이터를 기억한다.
안전한 영역(44)은 안전한 소프트웨어 라이브러리들(100)의 적어도 일부에 대응하는 한 개 이상의 안전한 스택들(30)을 포함한다. 모든 소프트웨어 라이브러리들(100)에 대해 어드레스 공간에 스택을 설치할 필요는 없다. 그 대신에, 라이브러리들에 활성이 될 때 스택 기억 공간이 라이브러리들(100)에 할당될 수 있다. 안전한 영역(34)은, 소프트웨어 라이브러리들(100)에 대응하는 비특권(unprivileged)의 안전한 코드(46)와, 라이브러리 관리 소프트웨어(110)에 대응하는 특권의 안전한 코드(47)를 더 포함한다. 안전한 MPU(50)는 어떤 코드와 데이터가 비특권인지 특권인지 제어한다.
마찬가지로, 덜 안전한 영역(46)은, 덜 안전한 도메인(80)에서 실행하기 위한 (특권 및 비특권 코드를 포함하는) 덜 안전한 코드(48)와, 덜 안전한 코드(48)에 의해 사용된 덜 안전한 스택(32)과, 덜 안전한 데이터(39)를 포함한다. 덜 안전한 MPU(62)는 덜 안전한 영역(46)에 있는 데이터 또는 코드가 특권인지 비특권인지를 제어한다. 일반적으로, 비특권 모드는 특권 데이터 또는 코드를 액세스할 수 없다.
메모리 어드레스 공간은 유효한 명령 어드레스에 대응하지 않는 예약 어드레스 범위(150)를 더 포함한다. 이와 같은 예약 범위는, 후술하는 더미 복귀 어드레스 등의 특수한 기능을 위해 사용될 수 있다. 예를 들어, 예약 어드레스 범위(150)는 범위 0xF00000000 내지 9xFFFFFFFF의 어드레스들을 포함해도 된다.
덜 안전한 도메인과 안전한 도메인 사이의 경계(7)를 교차할 때, 보안 보호 하드웨어(40)는 다음 중에서 적어도 한가지를 포함하는 보안 보호 동작을 행한다.
· 덜 안전한 도메인(80)으로부터 안전한 도메인(90)으로의 분기 이후에, 분기 목표 어드레스에 위치한 명령이 안전한 코드 내부에의 유효한 진입점을 표시하는 가드 명령을 포함하지 않는 경우에, 보안 보호 하드웨어(40)는 결함을 발생한다. 이것은 덜 안전한 코드가 안전한 함수의 중간으로의 분기를 시도하는 경우 공격을 방지하는데, 이와 같은 공격은 함수에서 이전에 행해진 보안 검사(예를 들어, 패스워드 검사)를 피할 수 있도록 하여, 적절한 보안 허가가 없이 안전한 연산이 행해질 수 있도록 하기 때문에 위험할 수 있다.
· 안전한 도메인(90)에 있는 라이브러리에 의해 분기가 실행되어 덜 안전한 도메인으로의 전이를 일으키면, 복귀 어드레스가 이 라이브러리(100)와 관련된 스택으로 자동으로 푸시되고, 예약 어드레스 범위(150)로부터의 예약 더미값이 링크 레지스터(22) 내부에 배치된다. 이후의 함수 복귀가 더미값으로 분기되면, 이것이 보안 보호 하드웨어(40)에 의해 검출되어, 안전한 라이브러리(100)의 스택으로부터 실제 복귀 어드레스를 페치한다. 이와 같은 구성은, 안전한 어드레스를 안전하지 않은 코드가 액세스 가능하지 않도록 보호한다. 이것은 도 11을 참조하여 이하에서 더욱 상세히 설명된다.
· 덜 안전한 도메인(80)으로부터 안전한 함수가 호출될 때, 공용(public) 코드에 의해 제공된 함수 복귀 어드레스가 보안 보호 하드웨어(40)에 수정되어, 함수로부터 복귀시에 처리가 덜 안전한 도메인(80)으로 복귀된다는 것을 나타낼 수 있다. 예를 들어, 복귀 어드레스에서 목표 도메인 비트가 설정되어, 함수 복귀가 덜 안전한 도메인(80)으로 복귀해야 한다는 것을 나타낼 수 있다. 함수 복귀를 행할 때, 함수 복귀 어드레스가 실제로 설정된 목표 도메인 비트에 의해 표시된 도메인으로부터 호출가능한 위치에 대응하는지 여부를 검사하여, 대응하지 않는 경우에는, 결함을 기동할 수 있다. 이와 같은 구성은, 해커가 덜 안전한 도메인(80)에 의해 건네진 함수 복귀 어드레스를 수정하여 안전한 도메인들로부터 다른 안전한 코드로의 통제되지 않은 전이를 기동하려고 시도하는 공격을 방지한다. 안전으로부터 안전으로의 분기는 일반적으로 보안 보호 하드웨어(40)에 의해 감시되지 않기 때문에 이것은 위험할 수 있다. 함수 복귀가 행해지기 전에 덜 안전한 도메인으로부터 전달된 함수 복귀 어드레스를 새니타이즈(sanitize)함으로써, 이와 같은 공격을 방지할 수 있다.
따라서, 다양한 보안 조치를 하드웨어(40)에 의해 취할 수 있다. 그러나, 안전한 도메인(90) 내부의 안전한 라이브러리들(100) 사이에서 전환시에, 이들 라이브러리가 별개의 하드웨어 보호 도메인들에서 구현되는 것처럼, 동일한 보호를 제공하는 것이 바람직할 수도 있다. 도 6 및 도 7은 이것을 달성하는 다양한 기술을 나타낸 것이다.
도 6에서는, 제1의 안전한 라이브러리 0으로부터 제2의 안전한 라이브러리 1로의 함수 호출이, 안전한 도메인(90)에 있는 제2의 안전한 라이브러리 1로 다시 전환하기 전에, 덜 안전한 도메인(80)으로의 전환을 일으킨다. 덜 안전한 도메인(80)으로 일시적으로 전환함으로써, 제2의 안전한 라이브러리에 대한 호출이 덜 안전한 도메인(80)으로부터 안전한 도메인(90)으로의 전환인 것처럼 하드웨어(40)에게 나타나므로, 덜 안전한 코드가 제2의 안전한 라이브러리 1을 호출한 경우와 마찬가지로 보안 보호 하드웨어(40)에 의해 전술한 하드웨어 보호 조치가 행해진다. 라이브러리 관리자(110)는 호출이 덜 안전한 도메인을 거쳐서 갔는지를 검사하고, 그렇지 않은 경우에는 하드웨어(40)에 의해 행해진 보안 조치를 행할 필요가 없다. 도메인들의 일시적인 전환을 기동하는 한가지 방법은, 덜 안전한 도메인(80))을 나타내는 한편 실제 목표 어드레스가 안전한 라이브러리 1에 대응하는 안전한 도메인(90) 내부의 위치에 대응하도록 함수 호출의 목표 어드레스 내부의 전술한 목표 도메인 비트를 설정하는 것이다.
그러나, 덜 안전한 도메인(80)으로 전환시에, 2개의 안전한 라이브러리들 사이에서 전달되는 피연산자들이 덜 안전한 코드에게 보일 수 있다. 공격자는 프로세서가 덜 안전한 도메인(80)에 있을 때 인터럽트를 기동하여, 스택을 거쳐 또는 레지스터들을 거쳐 전달되는 피연산자들을 액세스할 수도 있다. 일부의 어플리케이션에 대해서는 이것이 중요하지 않을지도 모른다. 일부의 소프트웨어 어플리케이션에 대해서는, 소프트웨어 벤더들이 데이터에 대한 액세스를 보호하기 보다는 경쟁사들이 그들의 소프트웨어 코드를 복제하지 못하도록 라이브러리들(100) 사이의 보안 보호를 요구할 수도 있다. 이와 같은 어플리케이션에 대해서는, 도 6에 도시된 기술이 허용될 수 있으며, 안전한 라이브러리들에 의해 처리된 데이터가 덜 안전한 도메인에서 액세스 가능한지 여부를 중요하지 않을 수도 있다.
그러나, 다른 어플리케이션들(예를 들어, 뱅킹)에 대해서는, 데이터 자체가 민감하며 덜 안전한 도메인이 안전한 라이브러리들 사이에서 전달되고 있는 피연산자들을 액세스하지 못하도록 방지해야 한다. 이와 같은 어플리케이션에 대해서는, 서로 다른 안전한 라이브러리들(100) 사이에서의 함수 호출이 전체가 도 7에 도시된 것과 같이 안전한 도메인에서 일어나며, 라이브러리 관리자(110)는 보통 보안 보호 하드웨어(40)에 의해 행해지는 보안 보호 기능을 행한다. 따라서, 라이브러리들 사이의 전이에 덜 안전한 도메인과 안전 도메인 사이의 전이에서와 동일하면서도 하드웨어를 작동시키지 않는 보호가 제공된다. 소프트웨어로 보안 조치를 행하는 것은 하드웨어를 사용하는 것보다 속도가 느리기는 하지만, 이와 같은 접근방식은 라이브러리들 사이에 전달되는 피연산자들의 보안을 유지한다.
일부 시스템에 대해서는, 도 6 및 도 7에 도시된 기술 모드가 지원된다. 안전한 라이브러리들 사이의 주어진 함수 호출에 대해, 라이브러리 관리자(110)는 호출이 덜 안전한 도메인(80)을 거쳐 갔는지 여부를 검출한다. 그러면, 하드웨어가 보안 보호 동작을 행하게 될 것으로 가정할 수 있다. 호출이 덜 안전한 도메인(8)을 거쳐 가지 않은 경우에는, 라이브러리 관리자(110)가 보안 보호 동작을 행한다. 다른 실시예들에서는, 도 6 및 도 7에 도시된 기술들 중에서 단지 한 개 또는 나머지가 지원되어도 된다.
함수 호출을 행할 때, 종래의 시스템은 보통 범용 레지스터들(8)을 사용하여 인수들을 전달한다. 범용 레지스터들에 충분한 공간이 충분하지 않는 경우에는, 스택을 사용하여 여분의 인수들을 전달할 수 있다. 그러나, 이와 같은 전근방식은 도 6 및 도 7에 도시된 것과 같이 한 개의 안전한 라이브러리(100)가 다른 안전한 라이브러리(100)를 호출할 때에는 사용될 수 없는데, 이것은 각각의 라이브러리들(100)이 다른 라이브러리들(100)이 액세스할 수 없는 데이터 저장소(6) 내부의 그 자신의 스택들(30)을 갖기 때문이다. 함수 인수들이 민감하지 않은 경우에는, 이들 인수를 안전한 도메인(9)에 있는 안전한 라이브러리들(100)에 의해 액세스 가능한 덜 안전한 스택(32)에 기억함으로써 이들 인수를 라이브러리들(100) 사이에서 전달할 수 있다. 한편, 라이브러리들 사이에서 민감한 데이터가 전달되는 경우에는, 라이브러리 관리 소프트웨어(110)에 의해 제공되는 메일박스 등의 소프트웨어 방법을 사용하여 인수들의 보안을 확보할 수 있다.
도 8은 하드웨어(40)와 안전 및 덜 안전한 MPU들(50, 52)을 사용하여 보안 검사를 행하는 방법을 나타낸 것이다. 스텝 200에서는, 분기 연산이 발생하여 프로그램 흐름을 목표 어드레스에 있는 명령으로 변경한다. 스텝 202에서, 보안 보호 유닛(42)이 보안 보호 하드웨어(40)가 액세스 위반이 존재하는지 여부를 판정한다. 현재의 연산 도메인이 덜 안전한 도메인기고, 목표 어드레스가 안전한 영역(44)에 있으며, 목표 어드레스에 위치한 명령이 가드 명령이 아닌 경우에는, 액세스 위반이 검출된다. 액세스 위반이 검출되면, 하드웨어(40)가 스텝 204에서 보안 결함을 기동한다. 스텝 205에서, 하드웨어(40)는 분기가 덜 안전한 도메인(80)과 안전한 도메인(90) 사이의 경계(70)를 교차하는지 여부를 검출한다. 교차한 경우에는, 스텝 206에서 보안 보호 하드웨어(40)가 전술한 하드웨어 보안 보호 동작을 행한다. 교차하지 않은 경우에는, 스텝 296을 생략한다.
스텝 208에서는, (데이터 저장소(6)의 어느 영역 44, 46이 목표 어드레스를 포함하는지에 근거하여) 분기 목표 어드레스가 안전한 도메인(90)에 있는지 덜 안전한 도메인(80)에 있는지 판정한다. 목표 어드레스가 안전한 도메인(90)에 있는 경우에는, 스텝 210에서 안전한 MPU(50)가 활성이 되고, 목표 어드레스를 포함하는 서브영역에 대한 그것의 액세스 허가를 검사하여, 안전한 MPU(50) 액세스 위반이 존재하는지를 검출한다. 분기가 비활성 라이브러리로 이어지거나, 비특권 코드가 특권 영역을 액세스하려고 시도하고 있기 때문에 위반이 발생한다. 안전한 MPU(50) 액세스 위반이 존재하는 경우에는, 스텝 212에서 안전한 메모리 관리 예외가 기동된다. 한편, 목표 어드레스가 덜 안전한 도메인(80)에 있으면, 스텝 214에서 덜 안전한 MPU(52)가 활성이 되고, 액세스 위반이 존재하였는지 여부를 판정하고, 존재한 경우에는 스텝 216에서 덜 안전한 메모리 관리 예외가 기동된다. 액세스 위반이 검출되지 않는 경우에는, 스텝 220에서 분기 명령과 관련된 액세스가 행해지고 처리가 진행한다.
도 8에 도시된 것과 유사한 방법도 목표 어드레스를 지정하는 데이터 액세스들에 대해 행해져도 된다. 그러나, 데이터 액세스에 대해서는, 스텝 208이 처리회로(4)가 (목표 어드레스와 관련된 도메인보다는) 현재 동작하고 있는 도메인을 검출하게 되고, 그후 스텝 210 또는 스텝 214에서 현재의 도메인에 대응하는 MPU가 사용될 것이다.
도 9는 도 8의 스텝 212 및 216에서 기동되는 메모리 관리 예외를 처리하는 방법을 나타낸 것이다. 도 4의 예에서는, 라이브러리 관리자(110)가 안전한 도메인에 있는 복수의 안전한 소프트웨어 라이브러리들(100)을 관리하고, 덜 안전한 도메인에서는 이 기술을 사용하지 않는다. 이 경우에는, 도 9의 방법이 스텝 212에서만 행해지고 스텝 216에서는 행해지지 않게 된다. 그러나, 도 12를 참조하여 후술하는 것과 같이, 유사한 라이브러리 관리자가 덜 안전한 도메인(80)에 설치되는 것이 가능하며, 이 경우에는 도 9의 방법이 스텝 216에 대해서도 행해질 수 있다.
스텝 230에서, 라이브러리 관리자(110)는 라이브러리 환경설정 데이터(112)를 참조하여, 스텝 232에서 라이브러리 관리자는 라이브러리 환경설정 데이터(112)를 사용하여 활성 라이브러리의 변화가 존재하는지 판정한다. 이것은 다양한 방식으로 행해질 수 있다. 예를 들어, 어떤 MPU 영역들이 각각의 라이브러리에 대응하는지 규정하는 라이브러리 환경설정 데이터(112)에 대해 목표 어드레스를 검사해도 된다. 그러나, 이것은 약간의 시간이 걸릴 수 있다. 더 신속한 접근방법은 라이브러리 코드를 재구성하여, 라이브러리에 대한 모든 유효한 진인점들이 "트램펄린(trampoline)" 영역으로 불리는 소형의 고정된 크기를 갖는 메모리의 영역 내부에 놓이도록 하고, 이 영역으로부터 실행될 필요가 있는 코드의 영역으로 이후의 분기를 행할 수 있도록 하는 것이다. 비활성 라이브러리들로의 분기들이 행해질 수 있는 트램펄린 영역들을 제한함으로써, 더 적은 환경설정 데이터를 검사할 필요가 있으므로, 어떤 라이브러리가 주어진 액세스에 대응하는지 검출하는 것이 더 빨라진다. 예를 들어, 각각의 라이브러리(100)와 관련된 트램펄린 영역들이 고정된 크기를 갖고 어드레스 공간에서 서로 인접하는 경우에, 다음 식을 사용하여 라이브러리 식별자를 신속하게 산출할 수도 있다:
Figure 112015123704399-pct00001
트램펄린 영역들이 모두 동일한 크기가 아니고 고정된 크기의 배수이더라도, 이 수학식의 결과를 이용하여 더 작은 테이블에 색인을 만듦으로써 실제의 라이브러리 식별자를 얻을 수도 있다. 따라서, 어떤 라이브러리가 목표 어드레스에 대응하는지를 라이브러리 관리자(110)가 판정할 수 있는 다양한 방법이 존재한다.
목표 어드레스가 라이브러리의 변경(스텝 23)에 대응하지 않는 경우에는, 스텝 234에서 결함 처리를 행하여 212 또는 216에서 기동된 메모리 보호 결함을 처리한다. 메모리 보호 결함을 처리하는 모든 공지된 기술을 사용해도 된다. 예를 들어, 처리를 중단하여 비특권 코드에 의한 특권 데이터에 대한 액세스를 방지하여도 된다.
한편, 스텝 232에서, 비활성 라이브러리로의 변경에 의해 메모리 관리 예외가 발생한 것으로 판정되면, 이것이 다른 메모리 보호 결함만큼 위험하지는 않으므로, 라이브러리 관리자(110)에 의해 처리될 수 있다. 스텝 234에서, 라이브러리 관리자(110)는 MPU(50)의 액세스 허가를 전환하여, 이전의 활성 라이브러리에 대응하는 영역들은 액세스가 불가능하게 되고 새롭게 활성인 라이브러리에 대응하는 영역들은 액세스 가능하게 된다. 이제부터는, 이전 라이브러리에 대한 액세스가 메모리 보호 결함을 기동하는 한편, 새로운 목표 라이브러리에 대한 액세스는 기동을 하지 않는다. 라이브러리 환경설정 데이터(112)는, 특정한 라이브러리가 활성으로 될 때 어떤 영역들을 액세스 가능한 것으로 또는 액세스 불가능한 것으로 설정해야 하는지를 규정한다.
스텝 235에서, 라이브러리 관리자(110)는, 현재 스택 포인터 레지스터(24)에 기억된 이전의 활성 라이브러리의 스택 포인터를 라이브러리 환경설정 데이터(112)에 기억한다. 이 라이브러리가 활성화된 이래로 스택 포인터가 변경되었을지도 모르므로, 라이브러리 환경설정 데이터(112)에 이전에 유지된 스택 포인터가 쓸모가 없을 수도 있다. 라이브러리 환경설정 데이터(112)에 있는 이전의 활성 라이브러리에 대한 스택 포인터를 갱신함으로써, 이 라이브러리가 나중에 다시 활성화되면, 대응하는 스택의 위치를 결정할 수 있다.
스텝 236에서, 라이브러리 관리자(110)는, 새로운 활성 라이브러리에 대해 스택(20)이 이미 할당되었는지 여부를 판정한다. 할당되지 않은 경우에는, 스텝 236에서 새로운 활성 라이브러리에 대한 스택이 데이터 저장소(6)에서 할당되고, 스택이 이미 할당된 경우에는, 스텝 238을 생략한다. 스텝 240에서는, 라이브러리 관리자(110)가 새로운 활성 라이브러리에 대응하는 스택의 스택 포인터를 스택 포인터 레지스터(24)에 복원한다. 라이브러리 환경설정 데이터(112)로부터 새로운 스택 포인터를 얻는다.
스텝 242에서, 라이브러리 관리자(110)는, 보안 보호 하드웨어(40)가 스텝 206에서 이미 보안 보호를 행하였는지 여부를 판정한다. 이것은 분기가 덜 안전한 도메인과 안전한 도메인 사이의 경계(70)를 교차한 경우에 해당한다. 하드웨어(40)가 보안 보호 동작을 이미 행한 경우에는, 스텝 246에서 메모리 관리 예외가 복귀되고 라이브러리의 처리가 계속된다. 하드웨어(40)가 보안 보호 동작을 아직 행해지지 않은 경우에는, 스텝 246에서 예외로 복귀하기 전에, 이 보안 보호 동작이 스텝 248에서 라이브러리 관리자(110)에 의해 소프트웨어로 행해진다. 라이브러리 관리자(110)는, 하드웨어가 이미 첫 번째 보안 보호 동작을 행하였는지 여부에 무관하게, 두 번째 보안 보호 동작을 행해도 된다. 예를 들면, 특정한 라이브러리들만 특정한 라이브러리에 대해 함수 호출을 하는 것이 허용되고, 다른 라이브러리들로부터의 함수 호출을 계속하는 것이 금지되어도 된다.
도 10은 덜 안전한 코드(105)와 2개의 안전한 라이브러리들(100-0, 100-1) 사이의 네스티드 함수 호출의 일례를 나타낸 것이다. 안전한 라이브러리 100-1으로부터 덜 안전한 코드(105)로 첫 번째 함수 호출(Call 1)이 행해진다. 그후, 덜 안전한 코드(105)로부터 안전한 라이브러리 100-1로 두 번째 함수 호출(Call 2)이 일어난다. 두 번째 함수 호출로부터의 함수 복귀(Ret 2) 이후에, 마찬가지로 안전한 라이브러리 100-1을 목표로 하는 세 번째 함수 호출(Call 3)이 발생한다. 그후, 세 번째 함수 호출로부터의 복귀(Ret 3) 후에, 덜 안전한 코드(105)로부터 첫 번째 함수 호출(Call 1)을 행한 안전한 라이브러리 100-0으로 처리가 복귀한다(Ret 1).
전술한 것과 같이, 보안 보호 하드웨어(40)는, 안전한 코드(105)가 복귀 어드레스를 액세스하는 것을 방지하기 위해 Call 1의 복귀 어드레스를 숨길 수도 있다. Call 1의 함수 복귀 어드레스를 안전한 라이브러리 100-0과 관련된 스택에 기억하고 더미 복귀 어드레스를 링크 레지스터(22)에 기억하고, 하드웨어(40)를 기동하여, 함수 복귀 Ret 1을 행할 때 스택으로부터 실제의 함수 복귀 어드레스를 취득함으로써 이것을 행할 수 있다. 그러나, 안전한 라이브러리 100-1에 대해 Call 2가 행해질 때, 라이브러리들의 전환은 라이브러리 100-0이 비활성화된다는 것을 의미하므로, 덜 안전한 코드(105)가 함수 복귀 Ret 1을 행할 때, 함수 복귀 어드레스가 더 이상 액세스 가능하지 않다.
이와 같은 문제를 해소하기 위해, 도 11에 도시된 것과 같이 복귀 어드레스를 처리할 수 있다. Call 1 이후에, 실제의 복귀 어드레스(300)가 안전한 라이브러리 100-0과 관련된 스택 305에 놓이는 한편, 유효한 명령 어드레스에 대응하지 않는 더미 어드레스(310)가 링크 레지스터(22) 내부에 놓인다. 이것은, 첫 번째 함수 호출을 처리하는 덜 안전한 코드(105)가 더미 어드레스만 볼 수 있으며 안전한 복귀 어드레스(300)를 볼 수 없다는 것을 의미한다.
덜 안전한 코드(105)로부터 안전한 라이브러리 100-1로 Call 2가 행해지면, Call 2의 복귀 어드레스가 링크 레지스터(22)에 기억된다(Call 1이 덜 안전한 코드(105)로부터 행해지기 때문에, 복귀 어드레스를 차폐하는 것은 불필요하며 실제의 복귀 어드레스가 링크 레지스터(22)에 기억될 수 있다). Call 2도 라이브러리 관리자(110)가 라이브러리들의 전환을 행하도록 하며, 복귀 어드레스(300)를 포함하는 라이브러리 100-0과 관련된 스택 305의 스택 프레임에 검증값(320)을 기억한다. 검증값은 이제는 활성화되고 있는 라이브러리 100-1의 식별자를 포함한다. 라이브러리 100-0으로부터 라이브러리 100-1로 활성 라이브러리를 전환하고 안전한 스택 포인터 레지스터(24) 내부의 스택 포인트들을 전환하는 동안, 라이브러리 관리자는 안전한 라이브러리 100-1과 관련된 스택 315에 두 번째 더미 어드레스(312)를 놓는다. 라이브러리 관리자(110)는 하드웨어에 의해 링크 레지스터(22)에 기억된 더미 어드레스 310과 다른 더미 어드레스 312를 사용하여, Call 1으로부터의 복귀시에 활성 라이브러리들의 전환이 필요하게 된다는 것을 표시한다. 라이브러기 관리자(110)는 라이브러리 100-1의 스택 315에 상태값(340)을 더 기억한다. 상태값(340)은 이전의 활성 라이브러리 100-0, 따라서 return 1을 처리할 때 재활성화할 라이브러리를 표시한다.
Call 2로부터 복귀시에(함수 복귀 Ret 2), 링크 레지스터(22)에 기억된 어드레스로 처리가 분기한다. 안전한 라이브러리 1이 활성이 되어 예외가 발생하지 않고 라이브러리 관리자와 관련된 오버헤드가 생기지 않는 것을 제외하고는, Call 3과 그것의 대응하는 함수 복귀 Ret 3은 Call 2 및 Ret 2와 마찬가지로 처리된다.
Ret 3 이후에, 원래의 함수 호출 Call 1에 대응하여, 함수 복귀 Ret 1이 일어난다. 덜 안전한 코드(105)는, Call 1이 행해졌을 때 링크 레지스터에 놓인 원래의 더미값(310)으로 분기한다. 하드웨어는 예약 어드레스로의 이와 같은 분기를 검출하고 현재 활성인 안전한 스택 315로부터 복귀 어드레스를 검색한다. 예약된 어드레스는 실제로는 라이브러리 관리 소프트웨어(110)에 의해 스택이 이전에 놓인 예약된 실행불가능한 더미 어드레스 312이므로, 하드웨어에 의해 메모리 관리 예외가 발생한다. 라이브러리 관리 소프트웨어(110)는 이와 같은 예외를 처리하고 그것이 활성 라이브러리 전환을 행할 필요가 있는지 판정한다. 라이브러리 관리 소프트웨어(110)는, 상태 정보(340)로부터, 라이브러리 100-0이 활성이 되어야 하는지와 라이브러리 100-1이 비활성이 되어야 하는지를 검출한다. 라이브러리 관리 소프트웨어(110)는, 라이브러리 100-0의 스택 305에 기억된 검증 정보(320)를 검사하여, 라이브러리 100-1이 비활성이 된 라이브러리인 것과 상태 정보(340)가 수정되지 않은 것을 검증 정보(320)가 표시하도록 확보한다. 한편, 라이브러리 100-1과 관련된 스택 315에 있는 동안 상태 정보(340)가 수정된 경우에는, 그것의 복수 어드레스 스택 프레임에 검증값(320)을 포함하지 않는 스택을 갖는 다른 라이브러리가 재활성화될 필요가 있는 것으로 표시되고, 올바른 검증값(320)의 부재는 결함을 기동하는 라이브러리 관리 소프트웨어(110)에 의해 검출된다.
따라서, 상태값(340)과 검증값(320)은, 라이브러리 관리자(110)가 호출된 함수 이후에 어떤 라이브러리고 다시 전환할 것인지를 판정할 수 있도록 하고 이것이 올바르게 행해졌는지 검증할 수 있게 한다. 따라서, 활성 라이브러리들의 전환이 발생할 때에도, 스택들을 이용하여 덜 안전한 코드(105)가 안전한 복귀 어드레스를 액세스하는 것을 여전히 방지할 수 있다.
상태 정보(340)의 무결성이 일단 검증되면, 라이브러리 관리자 소프트웨어(110)가 라이브러리 0(305)의 스택에 명시된 복귀 어드레스(300)에서 처리를 재개하게 할 수 있다.
도 4에서는 라이브러리 관리자(110)가 안전한 도메인(90)에 있는 다수의 안전한 소프트웨어 라이브러리들(100) 사이에서 보호를 실시하는 예를 나타내었지만, 덜 안전한 도메인(80)에 있는 라이브러리들에 대해서도 이 기술을 이용할 수 있다. 도 12는, 안전한 라이브러리 관리자(110)와 유사한 덜 안전한 라이브러리 관리자(410)가 설치되는 예를 나타낸 것이다. 안전한 라이브러리 관리자(110)는 활성의 안전한 라이브러리 100과 한 개 이상의 비활성의 안전한 라이브러리들 100을 선택하고, 덜 안전한 라이브러리 관리자(410)는 활성의 덜 안전한 라이브러리 400과 한 개 이상의 비활성의 덜 안전한 라이브러리들 400을 선택한다. 어느 한 개의 도메인 80, 90에 있는 비활성 라이브러리들에 대한 액세스(420)는 대응하는 라이브러리 관리자 110, 410을 기동하여 라이브러리 전원을 행한다. 액세스(420)가 도메인 경계(70)를 교차할 때 보안 보호 하드웨어(40)에 의해 보안 보호 동작이 행해진다. 동일한 도메인에 있는 라이브러리들 사이에서 전환할 때, 도 6 및 도 7에 나타낸 것과 같이, 하드웨어(40)가 일시적으로 전환하는 도메인들에 의해 작동하거나, 대응하는 라이브러리 관리자 110, 410이 대응하는 보안 보호 동작을 행할 수 있다. 이에 따르면, 하드웨어 오버헤드를 거의 갖지 않으면서, 덜 안전한 도메인(80)과 안전한 도메인(9) 모두에서 다수의 소프트웨어 라이브러리들을 서로로부터 보호한다.
보안 보호 하드웨어(40)에 의해 행해질 수 있는 보안 보호 동작의 추가적인 예는 UK 특허출원 1220769.2 및 1217531.1과 US 특허출원 13/368,419, 13/680,298 및 13/741,709에 기재되어 있으며, 이들 특허출원의 내용은 참조를 위해 본 발명에 원용한다.
첨부도면을 참조하여 본 발명의 예시적인 실시예들을 상세히 설명하였지만, 본 발명은 이들 실시예에 한정되지 않으며, 첨부된 청구범위의 보호범위 및 사상을 벗어나지 않으면서 본 발명이 속한 기술분야의 당업자에 의해 다양한 변경, 부가 및 변화가 행해질 수 있다는 것은 자명하다. 예를 들면, 종속항들의 특징들의 다양한 조합이 독립항들의 특징과 행해질 수도 있다.

Claims (23)

  1. 데이터 처리장치로서,
    명령들에 응답하여 데이터 처리를 행하고, 안전한 도메인과 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리회로를 구비하고, 상기 안전한 도메인에서 동작할 때 상기 명령들에 액세스가능한 적어도 일부 데이터는 상기 덜 안전한 도메인에서 동작할 때에 액세스가 불가능하고,
    상기 데이터 처리장치는,
    상기 처리회로가 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여 제 1 보안 보호 동작을 행하도록 구성된 보안 보호 하드웨어와,
    상기 처리회로에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하도록 구성된 데이터 저장소를 더 구비하고,
    상기 라이브러리 관리 소프트웨어는, 상기 처리회로를 제어하여, 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리회로에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리회로에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하도록 구성되고,
    상기 처리회로가 목표 비활성 소프트웨어 라이브러리를 호출하는 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리회로를 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하도록 구성된, 데이터 처리장치.
  2. 제 1항에 있어서,
    상기 복수의 소프트웨어 라이브러리들은 상기 안전한 도메인에서 실행하기 위한 복수의 안전한 소프트웨어 라이브러리들을 포함하는 데이터 처리장치.
  3. 제 1항 또는 제 2항에 있어서,
    상기 처리회로가 상기 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어는, 상기 처리회로를 제어하여, 제2 보안 보호 동작을 행하고, 상기 제2 보안 보호 동작이 성공적인 경우에, 상기 활성 라이브러리 전환을 행하도록 구성된 데이터 처리장치.
  4. 제 1항 또는 제 2항에 있어서,
    상기 데이터 저장소의 영역들이 액세스 가능한지 또는 액세스 불가능한지를 표시하는 액세스 허가를 기억하도록 구성된 메모리 보호 유닛을 구비하고, 상기 메모리 보호 유닛은 명령 페치 또는 액세스 불가능한 영역에 대한 메모리 액세스에 응답하여 결함 조건을 기동하도록 구성되고,
    상기 활성 라이브러리 전환은, 상기 처리회로를 제어하여, 상기 목표 비활성 소프트웨어 라이브러리에 대응하는 상기 데이터 저장소의 적어도 한 개의 영역을 액세스 가능으로 표시하고 상기 이전의 활성 소프트웨어 라이브러리에 대응하는 상기 데이터 저장소의 적어도 한 개의 영역을 액세스 불가능으로 표시하도록 상기 메모리 보호 유닛의 상기 액세스 허가를 설정하는 것을 포함하는 데이터 처리장치.
  5. 제 4항에 있어서,
    상기 처리회로가 상기 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 메모리 보호 유닛이, 상기 목표 비활성 소프트웨어 라이브러리에 대응하는 영역이 액세스 불가능한 것을 상기 액세스 허가로부터 검출하고, 예외를 기동하여 상기 라이브러리 관리 소프트웨어가 상기 활성 라이브러리 전환을 행하게 하도록 구성된 데이터 처리장치.
  6. 제 1항 또는 제 2항에 있어서,
    상기 데이터 저장소는 상기 복수의 소프트웨어 라이브러리의 적어도 일부에 대한 스택을 기억하도록 구성되고,
    상기 데이터 처리장치는, 상기 활성 소프트웨어 라이브러리에 대한 스택에 대응하는 스택 포인터를 기억하도록 구성된 스택 포인터 기억 위치를 포함하는 데이터 처리장치.
  7. 제 6항에 있어서,
    상기 활성 라이브러리 전환은, 상기 처리회로를 제어하여 상기 스택 포인터 기억 위치를 갱신함으로써, 상기 목표 비활성 소프트웨어 라이브러리에 대한 스택에 대응하는 스택 포인터를 기억하는 것을 포함하는 데이터 처리장치.
  8. 제 6항에 있어서,
    상기 데이터 저장소가 상기 목표 비활성 소프트웨어 라이브러리에 대한 스택을 아직 기억하지 않은 경우에는, 상기 활성 라이브러리 전환이 상기 목표 비활성 소프트웨어 라이브러리에 대한 상기 데이터 저장소에 스택을 할당하는 것을 포함하는 데이터 처리장치.
  9. 제 1항 또는 제 2항에 있어서,
    상기 보안 보호 하드웨어는, 상기 안전한 도메인과 관련된 상기 데이터 저장소의 적어도 한 개의 안전한 영역과 상기 덜 안전한 도메인과 관련된 상기 데이터 저장소의 적어도 한 개의 덜 안전한 영역을 규정하는 보안 데이터를 기억하도록 구성된 보안 보호 유닛을 구비하고,
    상기 처리회로는, 처리되고 있는 명령이 상기 데이터 저장소의 상기 안전한 영역에 있는지 또는 상기 덜 안전한 영역에 있는지에 따라, 상기 안전한 도메인에서 동작할지 또는 상기 덜 안전한 도메인에서 동작할지를 선택하도록 구성된 데이터 처리장치.
  10. 제 1항 또는 제 2항에 있어서,
    상기 제1 보안 보호 동작은,
    (i) 프로그램 흐름의 보호된 변화 이후에 실행할 첫 번째 명령이 상기 프로그램 흐름의 변화에 대한 허용된 목표 명령인지 여부를 검사하는 것과,
    (ii) 함수의 처리를 기동하기 위한 보호된 함수 호출에 응답하여, 상기 함수가 처리된 후 처리할 명령을 식별하는 함수 복귀 어드레스를 상기 함수의 명령들이 액세스하지 못하게 하는 것과,
    (iii) 프로그램 흐름의 보호된 변화에 응답하여 처리가 전환되는 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 한 개가 상기 프로그램 흐름의 변화에 대해 명시된 허용된 도메인인지 여부를 검사하는 것 중에서 적어도 한 가지를 포함하는 데이터 처리장치.
  11. 제 1항 또는 제 2항에 있어서,
    상기 처리회로가 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 한 개에서 실행된 상기 활성 소프트웨어 라이브러리의 명령으로부터 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 상기 한 개에서 실행할 상기 목표 비활성 소프트웨어 라이브러리의 명령으로 전환하는 것에 응답하여, 상기 처리회로는, 상기 안전한 도메인과 상기 덜 안전한 도메인에 있는 상기 목표 비활성 소프트웨어 라이브러리의 상기 명령으로 전환하기 전에, 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 나머지 한 개로 일시적으로 전환하도록 구성된 데이터 처리장치.
  12. 제 1항 또는 제 2항에 있어서,
    상기 처리회로가 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 한 개에서 실행된 상기 활성 소프트웨어 라이브러리의 명령으로부터 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 상기 한 개에서 실행할 상기 목표 비활성 소프트웨어 라이브러리의 명령으로 전환하는 것에 응답하여, 상기 처리회로가 상기 안전한 도메인과 상기 덜 안전한 도메인 중에서 상기 한 개에 유지되도록 구성되고, 상기 라이브러리 관리 소프트웨어는 상기 처리회로를 제어하여 상기 제1 보안 보호 동작을 행하도록 구성된 데이터 처리장치.
  13. 제 1항 또는 제 2항에 있어서,
    상기 활성 소프트웨어 라이브러리가 다른 소프트웨어에 의해 실행할 함수를 호출하기 위한 보호된 함수 호출을 행하는 것에 응답하여, 상기 제1 보안 보호 동작은 상기 함수의 함수 복귀 어드레스를 상기 활성 소프트웨어 라이브러리와 관련된 스택에 기억하는 것을 포함하는 데이터 처리장치.
  14. 제 13항에 있어서,
    상기 보호된 함수 호출에 응답하여, 상기 제1 보안 보호 동작은 더미 함수 복귀 어드레스를 링크 레지스터에 기억하는 것을 포함하고, 상기 더미 함수 복귀 어드레스는 유효한 명령 어드레스에 대응하지 않는 어드레스를 포함하고,
    상기 더미 함수 복귀 어드레스로의 함수 복귀에 응답하여, 상기 보안 보호 하드웨어는, 상기 활성 소프트웨어 라이브러리와 관련된 상기 스택으로부터 상기 함수 복귀 어드레스를 판독하고, 상기 함수 복귀 어드레스로의 함수 복귀를 기동하도록 구성된 데이터 처리장치.
  15. 제 1항 또는 제 2항에 있어서,
    상기 활성 소프트웨어 라이브러리로부터 보호된 함수 호출이 행해진 후 다른 소프트웨어 라이브러리로의 활성 라이브러리 전환을 행할 때, 상기 라이브러리 관리 소프트웨어는 상기 처리회로를 제어하여, 활성 라이브러리의 전환이 존재하였다는 것을 표시하기 위해 정보를 설정하도록 구성되고,
    상기 보호된 함수 호출에 대응하는 함수 복귀시에, 활성 라이브러리의 전환이 존재하였다는 것을 표시하도록 상기 정보가 설정된 경우에, 상기 라이브러리 관리 소프트웨어는 상기 보호된 함수 호출을 행했던 상기 활성 소프트웨어 라이브러리로 다시 상기 활성 라이브러리 전환을 행하도록 구성된 데이터 처리장치.
  16. 제 15항에 있어서,
    상기 정보는 유효한 명령 어드레스에 대응하지 않는 무효한 복귀 어드레스를 포함하고,
    상기 라이브러리 관리 소프트웨어는, 상기 무효한 복귀 어드레스로의 함수 복귀에 의해 기동된 예외에 응답하여, 상기 보호된 함수 호출을 행했던 상기 활성 소프트웨어 라이브러리로 다시 상기 활성 라이브러리 전환을 행하도록 구성된 데이터 처리장치.
  17. 제 15항에 있어서,
    상기 정보는 다른 소프트웨어 라이브러리의 스택에 기억되는 데이터 처리장치.
  18. 제 13항에 있어서,
    상기 보호된 함수 호출에 응답하여, 상기 라이브러리 관리 소프트웨어는 상기 처리회로를 제어하여, 상기 복수의 소프트웨어 라이브러리들 중에서 어느 것이 상기 보호된 함수 호출을 행하였었는지를 나타내는 상태 정보를 유지하도록 구성된 데이터 처리장치.
  19. 제 18항에 있어서,
    상기 보호된 함수 호출을 행했던 소프트웨어 라이브러리가 함수의 처리가 완료한 후 비활성 소프트웨어 라이브러리인 경우에, 상기 라이브러리 관리 소프트웨어는 상기 활성 라이브러리 전환을 행하여 상기 처리회로를 제어함으로써, 상기 함수 호출을 행했던 것으로 상기 상태 정보가 나타내는 소프트웨어 라이브러리를 상기 활성 소프트웨어 라이브러리로 설정하도록 구성된 데이터 처리장치.
  20. 제 18항에 있어서,
    상기 보호된 함수 호출 이후에 그리고 상기 보호된 함수 호출에 대응하는 함수 복귀 이전에 다른 소프트웨어 라이브러리로의 활성 라이브러리 전환을 행할 때, 상기 라이브러리 관리 소프트웨어는 상기 처리회로를 제어하여, 상기 상태 정보를 상기 다른 소프트웨어 라이브러리와 관련된 스택에 기억하도록 구성된 데이터 처리장치.
  21. 제 18항에 있어서,
    상기 보호된 함수 호출에 응답하여, 상기 라이브러리 관리 소프트웨어는 상기 처리회로를 제어하여 상기 활성 소프트웨어 라이브러리와 관련된 상기 스택에 검증 정보를 기억하도록 구성되고,
    함수의 처리가 완료한 후, 상기 라이브러리 관리 소프트웨어는, 상기 처리회로를 제어하여 상기 검증 정보를 검사함으로써 상기 상태 정보가 수정되었는지 여부를 검출하도록 구성된 데이터 처리장치.
  22. 데이터 처리장치로서,
    명령들에 응답하여 데이터 처리를 행하고, 안전한 도메인과 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리수단을 구비하고, 상기 안전한 도메인에서 동작할 때 상기 명령들에 액세스가능한 적어도 일부 데이터는 상기 덜 안전한 도메인에서 동작할 때에 액세스가 불가능하고,
    상기 데이터 처리장치는,
    상기 처리수단이 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여 제 1 보안 보호 동작을 행하는 보안 보호 하드웨어수단과,
    상기 처리수단에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하는 저장수단을 구비하고,
    상기 라이브러리 관리 소프트웨어는, 상기 처리수단을 제어하여, 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리수단에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리수단에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하도록 구성되고,
    상기 처리수단이 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리수단을 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하도록 구성된 데이터 처리장치.
  23. 안전한 도메인에서 동작할 때 명령들에 액세스가능한 적어도 일부 데이터가 덜 안전한 도메인에서 동작할 때에는 액세스가 불가능한, 상기 안전한 도메인과 상기 덜 안전한 도메인을 포함하는 복수의 연산 도메인들을 갖는 처리회로와, 상기 처리회로에 의해 실행하기 위한 복수의 소프트웨어 라이브러리와 라이브러리 관리 소프트웨어를 기억하는 데이터 저장소를 구비한 장치에 대한 데이터 처리방법으로서,
    상기 라이브러리 관리 소프트웨어의 제어하에서, 상기 처리회로가 상기 복수의 소프트웨어 라이브러리 중에서 적어도 한 개를 상기 처리회로에 의해 실행가능한 활성 소프트웨어 라이브러리로 설정하고, 적어도 한 개의 다른 소프트웨어 라이브러리를 상기 처리회로에 의해 실행이 가능하지 않은 비활성 소프트웨어 라이브러리로 설정하는 단계와,
    상기 처리회로가 상기 덜 안전한 도메인과 상기 안전한 도메인 사이에서 호출하는 것에 응답하여, 보안 보호 하드웨어가 제 1 보안 보호 동작을 행하는 단계와,
    상기 처리회로가 목표 비활성 소프트웨어 라이브러리를 호출한 것에 응답하여, 상기 라이브러리 관리 소프트웨어가 활성 라이브러리 전환을 행하여 상기 처리회로를 제어함으로써 상기 목표 비활성 소프트웨어 라이브러리를 활성 소프트웨어 라이브러리로 설정하고 이전의 활성 소프트웨어 라이브러리를 비활성 소프트웨어 라이브러리로 설정하는 단계를 포함하는 데이터 처리방법.
KR1020157035730A 2013-06-12 2014-03-13 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호 KR102192835B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1310421.1 2013-06-12
GB1310421.1A GB2515047B (en) 2013-06-12 2013-06-12 Security protection of software libraries in a data processing apparatus
PCT/GB2014/050747 WO2014199118A1 (en) 2013-06-12 2014-03-13 Security protection of software libraries in a data processing apparatus

Publications (2)

Publication Number Publication Date
KR20160019454A KR20160019454A (ko) 2016-02-19
KR102192835B1 true KR102192835B1 (ko) 2020-12-18

Family

ID=48876120

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157035730A KR102192835B1 (ko) 2013-06-12 2014-03-13 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호

Country Status (6)

Country Link
US (1) US9251378B2 (ko)
KR (1) KR102192835B1 (ko)
CN (1) CN105264540B (ko)
GB (1) GB2515047B (ko)
TW (1) TWI667611B (ko)
WO (1) WO2014199118A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9268970B2 (en) 2014-03-20 2016-02-23 Analog Devices, Inc. System and method for security-aware master
CN105046116B (zh) * 2015-06-25 2018-07-31 上海斐讯数据通信技术有限公司 Android系统中保护dex文件不被反编译的方法
GB2540388B (en) 2015-07-15 2019-01-23 Advanced Risc Mach Ltd Secure mode state data access tracking
GB2552966B (en) * 2016-08-15 2019-12-11 Arm Ip Ltd Methods and apparatus for protecting domains of a device from unauthorised accesses
GB2563881B (en) * 2017-06-28 2019-12-25 Advanced Risc Mach Ltd Realm execution context masking and saving
US10567359B2 (en) 2017-07-18 2020-02-18 International Business Machines Corporation Cluster of secure execution platforms
EP3547122B1 (en) * 2018-03-27 2023-06-07 CODESYS Holding GmbH A method and system for replacing a software component of a runtime system
WO2020014787A1 (en) * 2018-07-17 2020-01-23 Mergebase Software Inc. Systems and methods for managing and securing computer systems
GB2577878B (en) * 2018-10-08 2020-11-11 Advanced Risc Mach Ltd Transition disable indicator
GB2589897B (en) * 2019-12-11 2022-03-23 Advanced Risc Mach Ltd Domain transition disable configuration parameter
GB2589895B (en) * 2019-12-11 2022-03-16 Advanced Risc Mach Ltd Intermodal calling branch instruction

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040170046A1 (en) * 2002-11-18 2004-09-02 Arm Limited Technique for accessing memory in a data processing apparatus
US20090210874A1 (en) * 2008-02-20 2009-08-20 Peter William Harris Non-native program execution across multiple execution environments

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6317742B1 (en) * 1997-01-09 2001-11-13 Sun Microsystems, Inc. Method and apparatus for controlling software access to system resources
US6282657B1 (en) * 1997-09-16 2001-08-28 Safenet, Inc. Kernel mode protection
US7082615B1 (en) * 2000-03-31 2006-07-25 Intel Corporation Protecting software environment in isolated execution
US6789200B1 (en) * 2000-05-18 2004-09-07 International Business Machines Corporation Method of automatically instituting secure, safe libraries and functions when exposing a system to potential system attacks
JP4153653B2 (ja) * 2000-10-31 2008-09-24 株式会社東芝 マイクロプロセッサおよびデータ保護方法
GB0226875D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Control of access to a memory by a device
CN1886712B (zh) * 2003-11-28 2010-09-08 松下电器产业株式会社 数据处理装置
US7735136B2 (en) * 2005-04-18 2010-06-08 Vmware, Inc. 0-touch and 1-touch techniques for improving the availability of computer programs under protection without compromising security
CN101189586B (zh) * 2005-06-01 2011-06-15 松下电器产业株式会社 计算机系统及程序生成装置
JPWO2007040228A1 (ja) * 2005-10-04 2009-04-16 日本電気株式会社 情報処理装置、情報処理方法およびプログラム
US9158941B2 (en) * 2006-03-16 2015-10-13 Arm Limited Managing access to content in a data processing apparatus
EP1865435A1 (en) * 2006-06-06 2007-12-12 Texas Instruments France Enhanced exception handling
US8234506B2 (en) * 2006-10-08 2012-07-31 International Business Machines Corporation Switching between unsecure system software and secure system software
US8775824B2 (en) * 2008-01-02 2014-07-08 Arm Limited Protecting the security of secure data sent from a central processor for processing by a further processing device
GB2460393B (en) * 2008-02-29 2012-03-28 Advanced Risc Mach Ltd A data processing apparatus and method for controlling access to secure memory by virtual machines executing on processing circuitry
US9411634B2 (en) * 2010-06-21 2016-08-09 Microsoft Technology Licensing, Llc Action framework in software transactional memory

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040170046A1 (en) * 2002-11-18 2004-09-02 Arm Limited Technique for accessing memory in a data processing apparatus
US20090210874A1 (en) * 2008-02-20 2009-08-20 Peter William Harris Non-native program execution across multiple execution environments

Also Published As

Publication number Publication date
TW201447754A (zh) 2014-12-16
US20140373171A1 (en) 2014-12-18
US9251378B2 (en) 2016-02-02
GB2515047B (en) 2021-02-10
WO2014199118A1 (en) 2014-12-18
CN105264540A (zh) 2016-01-20
TWI667611B (zh) 2019-08-01
GB2515047A (en) 2014-12-17
CN105264540B (zh) 2019-05-03
KR20160019454A (ko) 2016-02-19
GB201310421D0 (en) 2013-07-24

Similar Documents

Publication Publication Date Title
KR102192835B1 (ko) 데이터 처리장치에서의 소프트웨어 라이브러리들의 보안 보호
KR102075372B1 (ko) 안전한 도메인과 덜 안전한 도메인을 갖는 데이터 처리장치에서의 예외처리
KR102160916B1 (ko) 안전한 도메인과 덜 안전한 도메인을 이용한 데이터 처리 장치 및 방법
JP6189039B2 (ja) セキュアドメインおよび低セキュアドメインを使用するデータ処理装置および方法
US10140448B2 (en) Systems and methods of asynchronous analysis of event notifications for computer security applications
KR20130036189A (ko) 하드웨어 모드와 보안 플래그에 의존하여 판독된 명령어에 대한 메모리 영역의 제한
US11727110B2 (en) Verifying stack pointer
US10210349B2 (en) Data processing apparatus and method using secure domain and less secure domain
US20220366037A1 (en) Domain transition disable configuration parameter
JP2023038361A (ja) 命令セット内の変更を制御する装置及び方法
EP4073635B1 (en) Intermodal calling branch instruction
TW202131191A (zh) 用於控制對一組記憶體映射的控制暫存器的存取的設備及方法

Legal Events

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