KR102192328B1 - Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 - Google Patents
Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 Download PDFInfo
- Publication number
- KR102192328B1 KR102192328B1 KR1020190014745A KR20190014745A KR102192328B1 KR 102192328 B1 KR102192328 B1 KR 102192328B1 KR 1020190014745 A KR1020190014745 A KR 1020190014745A KR 20190014745 A KR20190014745 A KR 20190014745A KR 102192328 B1 KR102192328 B1 KR 102192328B1
- Authority
- KR
- South Korea
- Prior art keywords
- enclave
- data
- port
- input
- processor
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/53—Monitoring 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 executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing 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/2149—Restricted operating environment
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
프로세서에 의해 실행되는 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하는 프로세서가 제공된다.
Description
실시예들은 입력 디바이스를 통해 입력되는 데이터의 보안과 관련된 것으로, 프로세서에 의해 실행되는 어플리케이션 및 어플리케이션에 대해 입력 디바이스를 통해 입력되는 데이터가 입력되는 입력 채널을 안전하게 보호하는 장치 및 방법에 관한 것이다.
최근 프로세서에 의해 실행되는 어플리케이션(예컨대, 어플리케이션의 코드)이나 어플리케이션에 대해 입력 디바이스를 통해 입력되는 데이터의 보안에 관한 관심이 높아지고 있다.
이와 관련하여, 인텔(Intel)의 프로세서는 SGX(cSoftware Guard Extensions)와 같은 보호 기능을 개발하였다. SGX는 소프트웨어의 공격에 취약하거나 민감한 영역을 별도로 암호화해 보호하기 위한 기능으로, CPU의 확장 권한으로도 관련 내용을 파악할 수 없는 프로세서 내부의 별도 공간인 인클레이브(enclave)라는 암호화 영역을 마련하는 것을 특징으로 하고 있다. 이를 통해, 어플리케이션에서 처리하는 데이터에 대한 보안 강도를 높일 수 있고, 어플리케이션과 연관된 코드가 드러나거나 수정되는 것을 방지할 수 있다.
현재의 상용 TEE(trusted execution environment) 솔루션들은 어플리케이션 로직들의 일부(Piece of Application Logics; PAL) 또는 전체의 OS 및 보안 앱들을 보호한다. 인텔의 SGX와 같이 PAL들만을 보호하는 경우, 데이터의 입출력 채널에 해당하는 I/O에 대해서는 보안이 보장되지 않으므로 그 실용성이 제한적이다. 한편, 전체의 OS 및 보안 앱들을 보호하는 솔루션(예컨대, ARM TrustZone) 경우에는 막대한 TCB(Trusted Computing Base)를 요구한다. 이 때, 보안 OS에서의 하나의 버그는 동일 시스템에 상주하는 모든 컴포넌트들을 오염(corrupt)시킬 수 있다.
따라서, 데이터의 입출력 채널을 안전하게 보호하면서 TCB를 경제성 있게 줄일 수 있도록 하는 방법 및 프로세서의 구조가 요구된다.
한국공개특허 제10-2009-0130121호(공개일: 2009년 12월 17일)에서는, 소프트웨어(software)의 일부(portion)를 실행하기 위해 보안 컴퓨팅(computing) 환경을 수립하고 실시하기 위한 장치, 시스템 및 방법과 관련된 것으로, 컴퓨팅 환경 자원(resource)으로의 제한된 접근(access)을 제공하는 환경에서 소프트웨어의 일부를 실행하는 보안 프로세서를 제공하는 기술을 개시하고 있다.
상기에서 설명된 정보는 단지 이해를 돕기 위한 것이며, 종래 기술의 일부를 형성하지 않는 내용을 포함할 수 있으며, 종래 기술이 통상의 기술자에게 제시할 수 있는 것을 포함하지 않을 수 있다.
일 실시예는, 프로세서에 의해 실행되는 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 입력 디바이스와의 인터페이스를 포함하며, OS와 같은 소프트웨어로부터는 접근이 불가능하도록 구성되는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하는 프로세서가 제공된다.
일 측면에 있어서, 프로세서에 있어서, 상기 프로세서에 의해 실행되는 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 상기 어플리케이션에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고, 상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되는, 프로세서가 제공된다.
상기 I2H는 상기 입력 디바이스를 위한 적어도 하나의 보안 드라이버를 제공할 수 있다.
상기 보안 드라이버는 커널(kernel)의 임계 영역(critical region)을 위한 고립된 실행 환경을 제공하기 위해 사용될 수 있다.
상기 프로세서에 의해 실행되는 복수의 어플리케이션들의 각각과 연관하여 인클레이브 영역이 존재할 수 있다.
상기 복수의 어플리케이션들과 연관된 인클레이브 영역들은 상기 보안 드라이버를 공유하여 사용할 수 있다.
상기 인클레이브 영역은 상기 I2H에 접근하기 위한 인터페이스를 포함하고, 상기 I2H는 공유 데이터 영역(shared data region)을 포함하고, 상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근할 수 있다.
상기 인클레이브 영역은, 루트킷(rootkit)이 상기 인클레이브 영역과 상기 I2H 사이에서의 데이터 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 상기 공유 데이터 영역을 제어할 수 있다.
상기 인터페이스는 상기 입력 디바이스를 위한 I/O 포트이고, 상기 I/O 포트는 상기 I2H에 대한 소정의 명령(instruction)에 따라 잠금 또는 잠금 해제되고, 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용될 수 있다.
상기 I/O 포트가 잠긴 상태에서, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)이 반환될 수 있다.
상기 I2H를 생성하는 동작, 생성된 I2H에 대해 콘텐츠(contents)를 부가하는 동작 및 상기 I2H로 진입하는(jump into) 동작은 각각 소정의 명령에 따라 수행될 수 있다.
상기 입력 디바이스를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우, 상기 I2H와 연관된 플로우가 진행되지 않으면 상기 I2H와 연관된 플로우가 진행되지 않았음을 나타내는 검출 정보가 생성될 수 있다.
다른 일 측면에 있어서, 어플리케이션을 실행하는 프로세서 및 상기 어플리케이션을 실행하기 위해 요구되는 데이터를 적어도 임시적으로 저장하는 메모리를 포함하고, 상기 프로세서는, 상기 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 상기 어플리케이션에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고, 상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되는, 컴퓨터가 제공된다.
또 다른 일 측면에 있어서, 프로세서에 의해 수행되는, 입력 디바이스를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법에 있어서, 상기 프로세서에 의해 실행되는 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 상기 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 생성하는 단계 - 상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성됨 -, 소정의 명령(instruction)에 기반하여, 상기 인터페이스로서 I/O 포트를 잠금 또는 잠금 해제하는 단계 - 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용됨 - 및 상기 I2H를 통해 상기 입력 디바이스를 통해 입력된 데이터에 대응하는 코드를 수신하는 단계를 포함하는, 인터럽트를 처리하는 방법이 제공된다.
상기 인터럽트를 처리하는 방법은 상기 I/O 포트가 잠긴 상태에서, 상기 I2H에 대한 진입 없이, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)을 반환하는 단계를 더 포함할 수 있다.
상기 인클레이브 영역에는 상기 I2H에 접근하기 위한 인터페이스가 포함되고, 상기 I2H에는 공유 데이터 영역(shared data region)이 포함되고, 상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근하되, 루트킷(rootkit)이 상기 인클레이브 영역과 상기 I2H 사이에서의 데이터 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 상기 공유 데이터 영역에 접근할 수 있다.
또 다른 일 측면에 있어서, 어플리케이션을 실행하는 프로세서를 위한 아키텍처에 있어서, 상기 프로세서는, 상기 어플리케이션과 연관된 인클레이브 영역이 접근 가능하고, 상기 어플리케이션에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고, 상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되는, 아키텍처가 제공된다.
인클레이브 영역이 접근 가능하고, 입력 디바이스와의 인터페이스를 포함하며, OS와 같은 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되는 I2H를 사용함으로써, 입출력 채널에 대한 보호가 제대로 이루어지지 않는 인텔의 SGX에 비해 공격자 또는 루트킷(rootkit)으로부터 입력 채널을 제대로 보호할 수 있다.
I2H를 통해 복수의 인클레이브들(인클레이브 영역들)에 대한 보안 드라이버가 공유됨으로써 인클레이브마다 동일한 드라이버를 중복으로 배치할 필요 없이 경제적인 방식으로 입출력 재널에 대한 보호를 실현할 수 있다.
도 1은 일 실시예에 따른 컴퓨터 시스템을 나타낸다.
도 2는 예시적인 일반 시스템과 보안 시스템 간의 비교를 나타낸다.
도 3은 예시적인 각 인클레이브 영역에 드라이버를 배치하고 하이퍼바이저를 이용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 4는 일 실시예에 따른 I2H를 사용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 5는 일 예에 따른 I2H의 구성을 나타낸다.
도 6은 예시적인 루트킷의 I/O 포트에 대한 접근 공격에 대한 프로세서의 동작을 나타낸다.
도 7은 일 예에 따른 루트킷의 I/O 포트에 대한 접근 공격에 대한 I2H를 사용하는 프로세서의 동작을 나타낸다.
도 8은 예시적인 입력 디바이스를 통해 입력된 데이터에 인클레이브가 접근하는 방법을 나타낸다.
도 9는 일 예에 따른 입력 디바이스를 통해 입력된 데이터에 인클레이브가 I2H의 공유 데이터 영역을 통해 접근하는 방법을 나타낸다.
도 10은 일 예에 따른 입력 디바이스를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우의 인터럽트 처리 방법을 나타낸다.
도 11은 일 실시예에 따른 I2H를 포함하는 프로세서에 의한 입력 디바이스를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법을 나타내는 흐름도이다.
도 2는 예시적인 일반 시스템과 보안 시스템 간의 비교를 나타낸다.
도 3은 예시적인 각 인클레이브 영역에 드라이버를 배치하고 하이퍼바이저를 이용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 4는 일 실시예에 따른 I2H를 사용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 5는 일 예에 따른 I2H의 구성을 나타낸다.
도 6은 예시적인 루트킷의 I/O 포트에 대한 접근 공격에 대한 프로세서의 동작을 나타낸다.
도 7은 일 예에 따른 루트킷의 I/O 포트에 대한 접근 공격에 대한 I2H를 사용하는 프로세서의 동작을 나타낸다.
도 8은 예시적인 입력 디바이스를 통해 입력된 데이터에 인클레이브가 접근하는 방법을 나타낸다.
도 9는 일 예에 따른 입력 디바이스를 통해 입력된 데이터에 인클레이브가 I2H의 공유 데이터 영역을 통해 접근하는 방법을 나타낸다.
도 10은 일 예에 따른 입력 디바이스를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우의 인터럽트 처리 방법을 나타낸다.
도 11은 일 실시예에 따른 I2H를 포함하는 프로세서에 의한 입력 디바이스를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법을 나타내는 흐름도이다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 일 실시예에 따른 컴퓨터 시스템을 나타낸다.
컴퓨터 시스템(100)은 어플리케이션 및/또는 프로그램을 실행할 수 있는 컴퓨팅 장치(컴퓨터 또는 서버)를 포함할 수 있다. 컴퓨터 시스템(100)을 통해 실행되는 어플리케이션 및/또는 프로그램은 데이터의 입력 및/또는 출력에 있어서 보안이 요구되는 소프트웨어일 수 있다. 예컨대, 컴퓨터 시스템(100)을 통해 실행되는 어플리케이션 및/또는 프로그램 금융 서비스 및 거래를 위해 사용되는 소프트웨어일 수 있다.
컴퓨터 시스템(100)은 스마트 폰, PC(personal computer), 노트북 컴퓨터(laptop computer), 랩탑 컴퓨터(laptop computer), 태블릿(tablet), 사물 인터넷(Internet Of Things) 기기, 또는 웨어러블 컴퓨터(wearable computer) 등의 사용자가 사용하는 단말(또는 그 일부)일 수 있다. 또는, 컴퓨터 시스템(100)은 서버 또는 그 일부일 수 있다. 컴퓨터 시스템(100)은 사물인터넷(IoT) 환경에서 동작하는 장치일 수 있다.
말하자면, 컴퓨터 시스템(100)은 후술될 실시예들에 따른 입출력 채널을 보호하는 방법을 구현할 수 있는 프로세서를 포함하는 여하한 컴퓨팅 장치 또는 그 일부일 수 있다.
컴퓨터 시스템(100)은 프로세서(110) 및 메모리(120)를 포함할 수 있다.
프로세서(110)는 기본적인 산술, 로직 및 입출력 연산을 수행함으로써, 실행되는 컴퓨터 프로그램 및/또는 어플리케이션의 명령을 처리하도록 구성될 수 있다. 명령은 메모리(120) 또는 도시되지 않은 통신 모듈에 의해 프로세서(110)로 제공될 수 있다. 예를 들어, 프로세서(110)는 메모리(120)와 같은 기록 장치에 저장된 프로그램 코드에 따라 수신되는 명령을 실행하도록 구성될 수 있다.
프로세서(110)는 컴퓨터 시스템(100)의 구성 요소들을 관리할 수 있고, 프로그램 및/또는 어플리케이션의 실행 및 데이터의 처리 등에 필요한 연산을 처리하는 구성으로서 CPU 또는 GPU와 같은 구성일 수 있고, 또는 CPU 또는 GPU의 적어도 하나의 코어(core)일 수 있다.
메모리(120)는 프로세서(110)에 의해 실행되는 어플리케이션 및/또는 프로그램을 실행하기 위해 요구되는 데이터를 적어도 임시적으로 저장하기 위한 구성일 수 있다. 메모리(120)는 비-일시적인 컴퓨터 판독 가능한 기록매체로서, RAM(random access memory), ROM(read only memory), 디스크 드라이브, SSD(solid state drive), 플래시 메모리(flash memory) 등과 같은 비소멸성 대용량 저장 장치(permanent mass storage device)를 포함할 수 있다. 여기서 ROM, SSD, 플래시 메모리, 디스크 드라이브 등과 같은 비소멸성 대용량 저장 장치는 메모리(120)와는 구분되는 별도의 영구 저장 장치로서 컴퓨터 시스템(100) 내에 존재할 수 있다. 또한, 메모리(120)에는 운영체제와 적어도 하나의 프로그램 코드가 저장될 수 있다. 이러한 소프트웨어 구성요소들은 메모리(120)와는 별도의 컴퓨터에서 판독 가능한 기록매체로부터 로딩될 수 있다. 이러한 별도의 컴퓨터에서 판독 가능한 기록매체는 플로피 드라이브, 디스크, 테이프, DVD/CD-ROM 드라이브, 메모리 카드 등의 컴퓨터에서 판독가능한 기록매체를 포함할 수 있다. 다른 실시예에서 소프트웨어 구성요소들은 컴퓨터에서 판독가능한 기록매체가 아닌 통신 모듈을 통해 메모리(120)에 로딩될 수도 있다. 예를 들어, 적어도 하나의 프로그램은 개발자들 또는 어플리케이션의 설치 파일을 배포하는 파일 배포 시스템(예컨대, 외부 서버)을 통해 제공하는 파일들에 의해 설치되는 컴퓨터 프로그램에 기반하여 메모리(120)에 로딩될 수도 있다.
도시되지 않은 통신 모듈은 네트워크를 통해 컴퓨터 시스템(100)이 다른 전자기기 또는 서버와 서로 통신하기 위한 기능을 제공할 수 있다. 통신 모듈은 컴퓨터 시스템(100)의 네트워크 인터페이스 카드, 네트워크 인터페이스 칩 및 네트워킹 인터페이스 포트 등과 같은 하드웨어 모듈 또는 네트워크 디바이스 드라이버(driver) 또는 네트워킹 프로그램과 같은 소프트웨어 모듈일 수 있다.
컴퓨터 시스템(100)은 입력 디바이스(130)를 포함하거나 입력 디바이스와 접속될 수 있다. 입력 디바이스(130)는 키보드, 마우스, 마이크로폰, 카메라 등의 장치를 포함할 수 있다. 한편, 컴퓨터 시스템(100)은 도시되지 않은 출력 장치를 포함하거나 출력 장치와 접속될 수 있다. 출력 장치는 디스플레이, 화자, 햅틱 피드백 디바이스(haptic feedback device) 등과 같은 장치를 포함할 수 있다.
또는, 입력 디바이스(130)는 터치스크린과 같이 입력과 출력을 위한 기능이 하나로 통합된 장치일 수 있다. 입력 디바이스(130)는 도시된 것처럼 컴퓨터 시스템(100)과는 별개의 장치이거나 컴퓨터 시스템(100)에 포함되는 구성일 수 있다. 컴퓨터 시스템(100)은 입력 디바이스(130)와의 인터페이스를 위한 수단으로서 입출력 인터페이스를 더 포함할 수 있다. 설명한 것처럼 유사하게 컴퓨터 시스템(100)은 출력 디바이스와 접속되거나 출력 디바이스를 포함하도록 구성될 수 있다.
프로세서(110)에는 실행되는 어플리케이션과 연관된 인클레이브 영역이 마련될 수 있고, 이러한 인클레이브 영역이 접근 가능하고, 입력 디바이스(130)와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)가 마련될 수 있다. I2H는 (예컨대, OS와 같은) 시스템 소프트웨어로부터는 접근이 불가능하도록 구성될 수 있다. 실시예들에서는, 이러한 I2H를 프로세서(110) 내에 마련하는 것을 통해 입력 디바이스(130)와 연관된 입출력 채널에 대한 보호를 강화할 수 있다.
I2H를 사용하여 입력 디바이스(130)와 연관된 입출력 채널에 대한 보호를 강화하는 보다 구체적인 방법에 대해서는 후술될 도 2 내지 도 11을 참조하여 더 자세하게 설명된다.
도 2는 예시적인 일반 시스템과 보안 시스템 간의 비교를 나타낸다.
도 2의 좌측 그림에서는, 프로세서에서 실행되는 어플리케이션 및 어플리케이션에 대해 입력되는 데이터에 대해 보안 기능이 적용되지 않는 경우의 예를 나타낸다. 도시된 어플리케이션은 프로세서에 의해 실행되는 어플리케이션을 나타낸다. OS는 도시된 것처럼, 프로세서를 관리하는 프로세서 관리부, 어플리케이션과 연관하여 데이터의 입력/출력을 가능하게 하는 디바이스들에 대한 디바이스 드라이버들, 메모리를 관리하는 메모리 관리부 및 파일 시스템을 포함할 수 있다.
도 2의 우측 그림은 프로세서에서 실행되는 어플리케이션 및 어플리케이션에 대해 입력되는 데이터에 대해 보안 기능이 적용되는 경우의 실시예를 나타낸다. 프로세서에 의해 실행되는 어플리케이션은 보안 어플리케이션으로, OS는 보안 OS로 도시되었다. 보안 OS는 프로세서 관리부 및 어플리케이션과 연관하여 데이터의 입력/출력을 가능하게 하는 디바이스들에 대한 보안 드라이버들과 메모리 관리부를 포함할 수 있다. 도시되지는 않았으나 보안 OS는 파일 시스템을 더 포함할 수 있다. 도시된 것처럼 보안 어플리케이션은 입력 디바이스를 통해 입력된 데이터에 대해 보안 드라이버를 통한 보안 경로를 사용하여 접근할 수 있다.
도 2의 우측 그림에서 도시된 보안 기능을 사용하는 아키텍처는 전술된 ARM의 TrustZone을 적용한 아키텍처에 대응할 수 있다.
기타 상용 TEE(예컨대, 인텔의 SCX)에 대해, TrustPath를 적용한 아키텍처 및 실시예들의 I2H를 적용안 아키텍처에 대해서는 후술될 도 3 내지 도 11을 참조하여 더 자세하게 설명된다.
도 3은 예시적인 각 인클레이브 영역에 드라이버를 배치하고 하이퍼바이저를 이용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 3에서는, TrustedPath를 SGX에 적용한 아키텍처를 나타낼 수 있다(예컨대, SGXIO라고도 함). 이러한 아키텍처를 포함하는 프로세서를 프로세서(300)으로 참조하여 설명한다. 프로세서(300)는 실행되는 어플리케이션들(305) 각각에 대한 인클레이브 영역(310)을 포함할 수 있다. 인클레이브 영역(310)은 취약하거나 민감한 영역을 별도로 암호화해 보호하기 위해 프로세서(300) 내부에 별도로 마련된 공간일 수 있다. 인클레이브 영역(310)은 프로세서(300)의 확장 권한으로도 관련 내용을 파악할 수 없도록 접근이 제한될 수 있다.
각 어플리케이션(305)과 연관된 인클레이브 영역(310)은 드라이버(312)를 포함할 수 있다. 드라이버(312)는 어플리케이션에 데이터를 입력(또는 출력)하기 위한 디바이스(130-2)의 보안 드라이버일 수 있다.
프로세서(300)는 하이퍼바이저(330)를 포함할 수 있다. 하이퍼바이저(330)는 프로세서(300) 또는 메모리와 같은 다양한 컴퓨터 자원의 OS(320)에 대한 접근 방법을 통제하는 (얇은 계층의) 소프트웨어일 수 있다.
하이퍼바이저(300) 및 인클레이브 영역(310)을 사용하여 어플리케이션(305)과 디바이스(130-2) 간에 신뢰 경로(trusted path)가 구축될 수 있다. 따라서, 디바이스(130-2)를 통해 입력되는(또는 출력) 데이터에 대한 어플리케이션(305)으로의 입력 채널(또는 출력 채널)이 보호될 수 있다.
보호 기능을 요구하지 않는 디바이스(130-1)의 경우 도 2에서 전술된 바와 같이 OS(320) 내에 포함된 드라이버(322)를 통해 어플리케이션(305)에 대해 입출력 채널이 일반 경로(ordinary path)로서 구축될 수 있다.
도 3과 같이, TrustedPath를 SGX에 적용하는 것에 있어서는 다음과 같은 문제점이 있을 수 있다:
1) 먼저, SGX의 설계와 관련하여 기본적인 장벽들이 존재할 수 있다. 예컨대, SGX의 경우 인클레이브의 내부에 디바이스 입출력과 관련하여 권한을 갖는 명령어들(priviledged instructions, 특권 명령어)이 존재하지 않는다(즉, 디바이스 인터페이스가 존재하지 않음). 또한, AEX (Asynchronous Enclave Exit)가 인터럽트 핸들러가 인클레이브 내에서 실행되는 것을 방지한다. 또한, 인클레이브 영역은 유저 권한으로 동작하는 것인 바 커널의 권한으로 동작하는 드라이버(입출력 드라이버)가 내부에 배치될 수 없다.
2) I/O 독점(I/O Monopolization)의 문제가 있을 수 있다(즉, 보안 어플리케이션(305)이 종료될 때까지 리소스 릴리즈가 없게 됨)
3) 멀티-프로세서 환경에서 이중적인 비용이 발생할 수 있다. 예컨대, 각 인클레이브 영역(310) 당 하나의 드라이버(312)가 요구되므로(즉, 각각의 PAL에 대해 드라이버가 포함되어야 함) 비용의 발생이 과도하게 될 수 있다.
또한, 아키텍처의 빗금 표시된 부분들은 TCB에 해당하는 바, 도 3에서 도시된 아키텍처는 상대적으로 더 크고 복잡한 TCB를 요구할 수 있다.
이 점을 고려할 때, TrustedPath를 SGX와 같은 상업용 TEE에 대해 적용하는 것은 바람직하지 않을 수 있다.
이상, 도 1 및 도 2를 참조하여 전술된 기술적 특징에 대한 설명은, 도 3에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 4를 참조하여서는, 이러한 TrustedPath를 SGX에 적용함에 있어서 발생하는 문제들을 해결할 수 있는 아키텍처에 대해 설명한다.
도 4는 일 실시예에 따른 I2H를 사용하여 입출력 채널을 보호하는 방법을 나타낸다.
도 4에서 도시된 아키텍처는 TCB에서 다른 OS 컴포넌트들을 배제하면서(put off) PAL에 대한 격리가 확장되어 안전한 I/O를 제공할 수 있다. 도시된 아키텍처에서는, PAL의 보안 I/O를 제공하기 위한 드라이버들을 선택적으로 배치하고 작동시키기 위한 I2H(Isolated Interrupt Handler)(430)(또는, I2H 영역)라는 새로운 격리 영역이 마련되었다.
도 4에서는, 이와 같은 I2H를 SGX에 적용한 아키텍처를 나타낼 수 있다. 이러한 아키텍처를 포함하는 프로세서를 프로세서(400)으로 참조하여 설명한다. 프로세서(400)는 실행되는 어플리케이션들(305) 각각에 대한 인클레이브 영역(410)을 포함할 수 있다. 인클레이브 영역(410)은 취약하거나 민감한 영역을 별도로 암호화해 보호하기 위해 프로세서(400) 내부에 별도로 마련된 공간일 수 있다. 인클레이브 영역(410)은 프로세서(400)나 그 확장 권한으로도 관련 내용을 파악할 수 없도록 암호화될 수 있다.
고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)(430)는 프로세서(400)에 의해 실행되는 어플리케이션(305)과 연관된 인클레이브 영역(410)이 접근 가능하도록 구성될 수 있다. 또한, I2H(430)는 어플리케이션(305)에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스(130)와의 인터페이스(434)를 포함할 수 있다. I2H(430)는 프로세서(400) 내에 생성되는 고립된 공간일 수 있다.
I2H(430)는 프로세서(400)와 연관된 시스템 소프트웨어(예컨대, OS(420))로부터는 접근이 불가능하도록 구성될 수 있다.
I2H(430)는 입력 디바이스(130)를 위한 적어도 하나의 보안 드라이버를 제공할 수 있다. 즉, I2H(430)는 입력 디바이스(130)를 위한 적어도 하나의 보안 드라이버를 포함할 수 있다.
I2H(430)는 커널의 임계 영역(critical region)에 대해 고립 실행 환경을 제공할 수 있다. 말하자면, 보안 드라이버는 커널(kernel)의 임계 영역(critical region)을 위한 고립된 실행 환경을 제공하기 위해 사용될 수 있다.
도시된 것처럼, 프로세서(400)에서 실행되는 어플리케이션(305)이 복수인 경우, 복수의 어플리케이션들(305)의 각각과 연관하여 인클레이브 영역(410)이 존재할 수 있다. 복수의 어플리케이션들(305)과 연관된 인클레이브 영역들(410)은 보안 드라이버를 공유하여 사용할 수 있다. 말하자면, 인클레이브 영역들(410)은 동일한 보안 드라이버들을 공유할 수 있고, 자신의 드라이버를 각각 소유하지 않을 수 있다. 도 3의 아키텍처와는 달리 인클레이브 영역(410)이 동일한 드라이버를 중복으로 포함하지 않고, 하나의 보안 드라이버를 여러 인클레이브 영역들(410)이 공유할 수 있으므로 아키텍처의 구현의 비용이 절감될 수 있다.
도시된 아키텍처에서, 인클레이브 영역(410)은 I2H(430)에 접근하기 위한 인터페이스(412)를 포함할 수 있다. 한편, I2H(430)는 공유 데이터 영역(shared data region)(432)을 포함할 수 있다. 인클레이브 영역(410)은 인터페이스(412)를 통해 공유 데이터 영역(432)에 접근할 수 있다. 말하자면, 인클레이브 영역(410)은 입력 디바이스(130)를 통해 입력된 데이터를 획득하기 위해 인클레이브 영역(410)의 인터페이스(412)를 통해 공유 데이터 영역(432)에 접근할 수 있다. 이 때, 인클레이브 영역(410)은, 루트킷(rootkit)이 인클레이브 영역(410)과 I2H(430) 사이에서의 데이터 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 공유 데이터 영역에 접근할 수 있다.
도시된 바와 같이, 인클레이브 영역(410), 보안 드라이버와 공유 데이터 영역(432)를 포함하는 I2H(430)와 인터페이스들(412, 434)을 사용하여 어플리케이션(305)과 디바이스(130) 간에 신뢰 경로(trusted path)가 구축될 수 있다. 따라서, 디바이스(130)를 통해 입력되는(또는 출력) 데이터에 대한 어플리케이션(305)으로의 입력 채널(또는 출력 채널)이 보호될 수 있다.
I2H(430)에 의해 제공되는 입력 디바이스(130)를 위한 인터페이스(434)는 예컨대, I/O 포트일 수 있다. I2H(430)는 입력 디바이스(130)를 위한 인터페이스(434)에 대한 배타적인 접근을 구성할 수 있다.
도 3을 참조하여 전술된 아키텍처에 비해, I2H(430)를 사용함으로써 불필요한 커널 컴포넌트를 제거할 수 있으므로 TCB를 줄일 수 있다.
도 4에서 설명된 아키텍처를 통해서는, 다음의 위협들에 대한 보안이 제공될 수 있다:
1) SGX 본질의 위협 모델(OS와 하이퍼바이저가 신뢰될 수 없음에 따른 위협).
2) 디바이스 I/O 인터페이스들(PIO 및 MMIO)에 대한 공격, 예컨대, I/O 포트 또는 MMIO 매핑 공격(mapping attack).
3) 커널 스페이스 데이터 영역들(드라이버 할당 메모리 영역들)에 대한 공격, 예컨대, 루트킷(rootkit)이 타겟 입력 데이터(스캔코드, 키 코드, 키 이벤트 등을) 독출해 내는 위협.
4) 사용자 스페이스 데이터 영역들에 대한 공격.
이상, 도 1 내지 도 3을 참조하여 전술된 기술적 특징에 대한 설명은, 도 4에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 5는 일 예에 따른 I2H의 구성을 나타낸다.
도 5에서는 도 4를 참조하여 전술된 I2H(430)의 구성들에 대해 더 자세하게 설명한다. 도시된 I2H(430)의 콘텐츠(contents)는 리눅스 시스템의 경우에 대해 예시되었다. 입력 디바이스(130)는 키보드인 것으로 가정되었다. 키보드는 물리적 키를 포함하는 키보드 또는 가상 키보드일 수 있다.
I2H(430)는 입력 코어 시스템(510), 키보드 드라이버(520), 키보드 컨트롤러 드라이버(530), LDISC(540), 버스 드라이버(550) 및 이벤트 핸들러(560)를 포함할 수 있다. 키보드 드라이버(430) 및 키보드 컨트롤러 드라이버(530)는 입력 디바이스(130)에 대한 보안 드라이버에 포함될 수 있다.
예컨대, 도시된 것과 같은 I2H(430)를 생성하는 동작, 생성된 I2H(430)에 대해 구성요소들(510 내지 56)과 같은 콘텐츠(contents)를 부가하는 동작 및 I2H로 진입하는(jump into) 동작은 각각 소정의 명령에 따라 수행될 수 있다. 예컨대, 각 동작에 대해 icreate, iadd 및 ienter와 같은 명령어가 각각 사용될 수 있다.
도시된 것과 같이 I2H(430)이 구성됨으로써, 커널의 접근으로부터 입출력 채널이 보호될 수 있다. 예컨대, MMU(memory management unit) 보호가 적용될 수 있다. 또한, I2H(430)가 입력 디바이스(130)에 대한 드라이버들과 입력 서브 시스템(input subsystem)을 포함함으로써, 따라서, 인클레이브 영역들(410)이 입력 디바이스(130)를 통해 입력된 데이터를 안전하게 수신할 수 있다.
I2H(430)는 커널로부터 입출력과 관련된 중요한 자산(예컨대, 입력 데이터)을 보호하기 위해 I2H(430)에 대한 접근 제어를 수행할 수 있다. 예컨대, 커널은 I2H(430)에 접근할 수 없으나 I2H(430)는 커널에 접근할 수 있다.
이상, 도 1 내지 도 4를 참조하여 전술된 기술적 특징에 대한 설명은, 도 5에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 6은 예시적인 루트킷의 I/O 포트에 대한 접근 공격에 대한 프로세서의 동작을 나타낸다.
도 5를 참조하여 설명한 것처럼, 입력 디바이스(130)는 키보드인 것으로 가정되었다. 입력 디바이스(130)를 통한 데이터 입력에 따른 인터럽트가 발생한 경우, 키보드 컨트롤러 드라이버(530)는 키보드 컨트롤러(610)에 대해 데이터를 요청할 수 있다(1. i8042_read_data() {Inb(0x60)}). 이에 따라, 키보드 컨트롤러(610)는 입력된 데이터에 대응하는 키 스캔코드를 키보드 컨트롤러 드라이버(530)로 전달할 수 있다(2. Key scancode). 키보드 드라이버(520)는 키보드 컨트롤러 드라이버(530)와의 통신에 따라 데이터의 입력 이벤트를 입력 코어 시스템(510)으로 전달할 수 있다(3. Input_event()). 한편, 루트킷(620)으로부터 데이터 입력이 요청되거나, 입력된 데이터에 대한 접근이 요청되는 경우(4. Inb(0x60)), 루트킷(620)은 대응하는 키 스캔코드를 취할 수 있다(5. Key scancode).
말하자면, 도 6의 아키텍처에서는, 데이터가 입력 디바이스(130)로부터 수신되면, 루트킷(620)이 자유럽게 입력 데이터에 접근/입력 데이터를 수정할 수 있다. 즉, 입력 디바이스(130)로부터 입력되는 데이터의 입력 채널에 대한 보호가 이루어지지 않는다. 입력 디바이스(130)에 대한 I/O 포트는 공유된 매체(medium)에 해당하므로 루트킷(620)은 또한, I/O 포트 요청 공격(requesting attack)을 개시할 수 있다.
한편, 'Inb(0x60)'은 예컨대, PS2 키보드가 사용하는 0x60 입력 포트로부터 입력을 수신하는 것을 나타낼 수 있다. 일례로, 'Inb(0x60)'는 CPU 특권 명령어 중 inb/outb 명령어를 통해 지정된 입출력(I/O) 포트에 바이트 크기만큼 읽기/쓰기를 수행할 수 있고, 해당 명령어를 0x60 포트에 대해 수행한 것을 나타낼 수 있다. 루트킷(620)은 일반적인 커널과 마찬가지로 특권 명령어를 실행할 수 있으므로, 키보드로부터의 입력을 받아들일 수 있다. 도 6의 좌측의 블록들(드라이버(520, 530) 및 입력 코어 시스템(510))은 커널 안에서 동작하게 되며, 루트킷(620)은 커널 내부 메모리를 읽을 수 있으므로 해당 블록들(드라이버(520, 530) 및 입력 코어 시스템(510))에서 키보트로부터의 입력 데이터가 처리되는 동안 입력 데이터를 가로챌 수 있게 된다.
한편, 입력 코어 시스템(510)은 리눅스 커널 내부에 위치되는 코드 모듈로서, 다양한 종류의 입력 장치 드라이버로부터 입력 이벤트를 전달 받아 이를 적절한 이벤트 핸들러(예컨대, 키보드 이벤트 핸들러(560))로 전달하는 것을 관리하는 시스템일 수 있다.
도 7을 참조하여 이러한 도 6의 아키텍처의 문제점을 해결할 수 있는 아키텍처에 대해 더 자세하게 설명한다.
이상, 도 1 내지 도 5를 참조하여 전술된 기술적 특징에 대한 설명은, 도 6에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 7은 일 예에 따른 루트킷의 I/O 포트에 대한 접근 공격에 대한 I2H를 사용하는 프로세서의 동작을 나타낸다.
아래에서 설명되는 동작들은 도 4 및 5를 참조하여 전술된 I2H(430)와 연관하여 또는 I2H(430) 내부에서 수행될 수 있다.
입력 디바이스(130)를 통한 데이터 입력에 따른 인터럽트가 발생한 경우, 키보드 컨트롤러 드라이버(530)는 키보드 컨트롤러(610)에 대해 데이터를 요청할 수 있다. I2H(430)의 인터페이스(434)는 입력 디바이스(130)를 위한 I/O 포트일 수 있고, I/O 포트는 I2H(430)에 대한 소정의 명령(instruction)(즉, 명령어)에 따라 잠금 또는 잠금 해제될 수 있다(1. i8042_read_data() {Port_unlock(0x60); Inb(0x60); Port_lock(0x60);}). I/O 포트가 잠긴 상태에서 I/O 포트는 I2H(430)를 통해서만 독점적으로 사용될 수 있다. 키보드 컨트롤러(610)는 입력된 데이터에 대응하는 키 스캔코드를 키보드 컨트롤러 드라이버(530)로 전달할 수 있다(2. Key scancode). 키보드 드라이버(520)는 키보드 컨트롤러 드라이버(530)와의 통신에 따라 데이터의 입력 이벤트를 입력 코어 시스템(510)으로 전달할 수 있다(3. Input_event()). 한편, 루트킷(620)으로부터 데이터 입력이 요청되거나, 입력된 데이터에 대한 접근이 요청되는 경우(4. Inb(0x60)), 루트킷(620)에 대해서는 대응하는 키 스캔코드가 아닌 쓰레기 값이 반환될 수 있다(5. Garbage value). 즉, 잠긴 매체(I/O 포트가 잠긴 상태)에 대한 루트킷(620)의 접근의 요청은 쓰레기 값을 반환하게 된다.
도 7의 아키텍처에서는, 루트킷(620)이 입력 데이터에 접근하거나 입력 데이터를 수정할 수 없고, 입력 디바이스(130)로부터 입력되는 데이터의 입력 채널에 대한 보호가 이루어지게 된다. 말하자면, 루트킷(620)은 I2H(430)의 영역 내에서 및 I2H(430)를 통한 (입력된) 데이터 전달에 대해 접근할 수 없다. 이는 I2H(430) 내부 코드 및 데이터 영역을 특권 모드로부터 접근을 허가하지 못하도록 함과 동시에 I2H(430) 내에서 인터페이스(434)에 해당하는 특정한 I/O 포트의 사용을 잠금/잠금 해제하는 명령을 사용함에 따라 이루어질 수 있다. 예컨대, I/O 포트가 잠긴 상태에서, I/O 포트에 대한 접근이 요청되는 경우에는 해당 요청에 대해서는 쓰레기 값(garbage value)이 반환될 수 있다.
도 7에서 설명된 실시예의 경우, 드라이버(520, 530)) 및 입력 코어 시스템(510)이 I2H(430)에 의해 감싸져 있고(즉, I2H(430) 내부에 존재하고), I2H(430)는 일반 커널 메모리와는 달리 루트킷(620)이 접근할 수 없는 고립된 영역이므로, 루트킷(620)은 I2H(430) 내부에서 데이터가 처리되는 동안에는 입력 데이터를 탈취할 수 없게 된다.
이상, 도 1 내지 도 6을 참조하여 전술된 기술적 특징에 대한 설명은, 도 7에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 8은 예시적인 입력 디바이스를 통해 입력된 데이터에 인클레이브가 접근하는 방법을 나타낸다.
예컨대, 도 8은 일반적인 인클레이브 입력 인터페이스(일례로, 인텔의 SGX)에서의 입력 디바이스(130)를 통해 입력된 데이터에 대한 인클레이브 영역(310)의 접근 방법을 나타낸다. 인클레이브 영역(310)은 신뢰되지 않은 호스트 프로세스(Untrusted Host Process)(810)를 통해 입력 디바이스(130)를 통해 입력된 데이터에 대한 읽기(read)를 요청할 수 있고(1. OCALL(read)), 신뢰되지 않은 호스트 프로세스(810)는 TTY(Line Discipline; LDISC)(540)에 대해 데이터의 읽기를 요청하고(2. Read()), TTY(540)는 신뢰되지 않은 호스트 프로세스(810)로 데이터를 반환할 수 있다(3. ldisc.read(); copy_to_user()). 반환되는 데이터는 입력 코어 시스템(510)으로부터 키보드 이벤트 핸들러(560)를 통해 전달된 것일 수 있다(ldisc.receive_buf()).
도시된 도 8의 구조에서는 신뢰되지 않은 호스트 프로세스(810)가 인클레이브 영역(310)의 인터페이스로서 사용됨으로써, 데이터가 프로세스(process) 및 커널 사이에서 전달되는 동안, 루트킷이 자유롭게 입력 데이터에 접근하거나 입력 데이터를 수정할 수 있다.
한편, "OCALL"은, Intel SGX SDK에서 제공하는 인터페이스로서, 인클레이브 내부에서 시스템 콜을 처리할 수 없기 때문에, 요청된 서비스(예컨대, read 시스템 콜)을 처리하기 위해 인클레이브 바깥(즉, "O"는 Out의 "O"를 나타냄)으로 나가서 신뢰되지 않은 호스트 프로세스(810)를 사용하여 시스템콜을 대신 요청하여 처리하도록 하는 것을 의미할 수 있다.
"Read"는 시스템 콜에 대한 응답이며, Line Discipline 모듈(540)은 입력 데이터가 오기까지 대기하고 있다가(ldisc.read), 키보드 이벤트 핸들러(560)로부터 입력 데이터를 받으면(ldisc.receive_buf) "copy_to_user"를 통해 커널 안에 있는 키보드 입력 데이터를 호스트 프로세스(810)에 전달할 수 있다. "copy_to_user"는 커널 영역에서 사용자 프로세스 영역으로 데이터를 복사하는 것을 나타낼 수 있다.
도 8의 우측 블록들(입력 코어 시스템(510), 이벤트 핸들러(560), TTY(540))은 커널 내에서 동작하게 되며, 루트킷은 커널 내부 메모리(좌측에 해당하는 프로세스 내부 메모리 영역을 포함)를 읽을 수 있으므로 해당 블록들(입력 코어 시스템(510), 이벤트 핸들러(560), TTY(540))에서 입력 데이터가 처리되는 동안 입력 데이터를 가로챌 수 있다.
도 9를 참조하여 이러한 도 8의 아키텍처의 문제점을 해결할 수 있는 아키텍처에 대해 더 자세하게 설명한다.
이상, 도 1 내지 도 7을 참조하여 전술된 기술적 특징에 대한 설명은, 도 8에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 9는 일 예에 따른 입력 디바이스를 통해 입력된 데이터에 인클레이브가 I2H의 공유 데이터 영역을 통해 접근하는 방법을 나타낸다.
도시된 아키텍처에서, 인클레이브 영역(410)은 I2H(430)에 소정의 명령에 따라 접근할 수 있다. 예컨대, 인클레이브 영역(410)의 인터페이스(412)는 소정의 명령에 따라 I2H(430)의 공유 데이터 영역(432)에 접근할 수 있다(i2h_read(){ copy_from_i2h();}). 이에 따라, 인클레이브 영역(410)은 입력 디바이스(130)를 통해 입력된 데이터에 대해 접근할 수 있다.
도 8의 아키텍처에서의 신뢰되지 않은 호스트 프로세스(810)와는 달리, 도 9의 아키텍처에서는 인클레이브 영역(410)의 인터페이스(412) 및 I2H(430)의 공유 데이터 영역(432)과, 공유 데이터 영역(432)에의 접근을 위한 소정의 명령을 사용함으로써, 루트킷은 인클레이브 영역(410)와 I2H(430) 사이에서 (입력된) 데이터가 전달되는 동안 데이터에 접근할 수 없게 될 수 있다. 따라서, 루트킷에 의한 데이터의 탈취 및 수정이 방지될 수 있다. 명령은 예컨대, SGX 명령에 기반한 것(SGX에서 사용되는 명령을 개량한 것)일 수 있다.
한편, 전술된 바와 같이 I2H(430)를 생성하는 동작, 생성된 I2H(430)에 대해 구성요소들(510 내지 56)과 같은 콘텐츠(contents)를 부가하는 동작 및 I2H로 진입하는(jump into) 동작은 각각 소정의 명령에 따라 수행될 수 있다. 예컨대, 각 동작에 대해 icreate, iadd 및 ienter와 같은 명령어가 사용될 수 있다.
도 8에서 설명된 것과는 달리, 인클레이브로부터 "OCALL"을 통해 나갈 필요 없이 바로 실행될 수 있는 "i2h_read"는 "copy_from_i2h"를 통해 I2H(430)로부터 인클레이브 내부 영역으로 커널을 거치지 않고 데이터를 바로 전달할 수 있다.
도 7에서 설명한 것과 마찬가지로 입력 코어 시스템(510), 이벤트 핸들러(560), TTY(540)가 I2H(430)에 의해 감싸져 있고(즉, I2H(430) 내부에 존재하고), I2H(430)는 일반 커널 메모리와는 달리 루트킷이 접근할 수 없는 고립된 영역이기 때문에 I2H(430) 내부에서 데이터가 처리되는 동안 루트킷은 입력 정보를 탈취할 수 없다.
이상, 도 1 내지 도 8을 참조하여 전술된 기술적 특징에 대한 설명은, 도 9에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 10은 일 예에 따른 입력 디바이스를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우의 인터럽트 처리 방법을 나타낸다.
도 10을 참조하여, 입력 디바이스(130)가 키보드인 경우에 있어서, 키보드를 통해 데이터가 입력되어 키보드 컨트롤러(610)에 입력된 데이터에 대응하는 키 스캔코드가 도달되고, 이에 따라 발생된 인터럽트가 처리되는 방법에 대해 설명한다.
인터럽트가 발생되어 수신된 경우에 있어서(예컨대, 인터럽트 #1의 수신), 프로세서의 커널은 전술된 I2H(430)를 사용하는 플로우 또는 I2H(430)를 사용하지 않는 플로우를 통해 인터럽트를 처리할 수 있다. 커널이 어떠한 플로우에 진입할지(jump into)는 커널에 의해 결정될 수 있다.
그러나, 예컨대, 하이잭킹 등에 의해 I2H 플로우가 도달되지 않으면, (I2H(430)를 사용하는 플로우를 통해 인터럽트가 처리되지 않으면) 사용자에 의해 이러한 사실이 검출될 수 있다. 예컨대, 잠긴 매체에 대한 접근/미접근이 사용자에 의해 검출될 수 있다.
말하자면, 입력 디바이스(130)를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우, I2H(430)와 연관된 플로우가 진행되지 않으면 I2H(430)와 연관된 플로우가 진행되지 않았음을 나타내는 검출 정보가 생성될 수 있다. 이러한 검출 정보는 예컨대, 프로세서와 연관된 출력 장치를 통해(또는, 통신 모듈을 통해), 사용자에게 전달(예컨대, 출력 장치를 통해 출력)될 수 있다. 따라서, 사용자는 I2H(430)의 하이잭킹(hijacking) 또는 변조를 확인할 수 있다.
이상, 도 1 내지 도 9를 참조하여 전술된 기술적 특징에 대한 설명은, 도 10에 대해서도 그대로 적용될 수 있으므로 중복되는 설명은 생략한다.
도 11은 일 실시예에 따른 I2H를 포함하는 프로세서에 의한 입력 디바이스를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법을 나타내는 흐름도이다.
도 11을 참조하여서는, 전술된 프로세서(400)에 의해 수행되는, 입력 디바이스(130)를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법이 보다 구체적으로 설명된다.
단계(1110)에서, 프로세서(400)는 프로세서(400)에 의해 실행되는 어플리케이션(305)과 연관된 인클레이브 영역(410)이 접근 가능하고, 입력 디바이스(130)와의 인터페이스(434)를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)(430)를 생성할 수 있다. I2H(430)는 예컨대, OS(420)와 같은, 프로세서(400)와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성될 수 있다. I2H(430)는 소정의 명령에 따라 프로세서(400)의 내부 공간으로서 생성될 수 있다.
단계(1120)에서, 프로세서(400)는 소정의 명령(instruction)에 기반하여, 인터페이스(434)로서 I/O 포트를 잠금 또는 잠금 해제로 설정할 수 있다. 즉, 프로세서(400)는 상기 소정의 명령에 따라 I/O 포트를 잠금 또는 잠금 해제할 수 있다. 잠금 명령에 따라, I/O 포트가 잠긴 상태에서는 I/O 포트는 I2H(430)를 통해서만 독점적으로 사용될 수 있다.
단계(1130)에서, 프로세서(400)는 I2H(430)를 통해 입력 디바이스(130)를 통해 입력된 데이터에 대응하는 코드를 수신할 수 있다. 예컨대, 입력 디바이스(130)가 키보드인 경우 상기 코드는 키 스캔코드 및/또는 키 코드일 수 있다.
단계(1140)에서, 프로세서(400)는 I/O 포트가 잠긴 상태에서, I2H(430)에 대한 진입 없이, I/O 포트에 대한 접근이 요청되는 경우 해당 요청에 대해서는 쓰레기 값(garbage value)을 반환할 수 있다. 즉, 루트킷과 같은 공격자로부터의 데이터에 대한 접근이나 데이터의 수정이 방지될 수 있다.
인클레이브 영역(410)은 I2H(430)에 접근하기 위한 인터페이스(412)가 포함되어 구성될 수 있다. I2H(430)는 소정의 공유 데이터 영역(shared data region)(432)을 포함하도록 구성될 수 있다.
인클레이브 영역(410)은 입력 디바이스(130)를 통해 입력된 데이터를 획득하기 위해 인클레이브 영역(410)의 인터페이스(412)를 통해 공유 데이터 영역(432)에 접근할 수 있으며, 루트킷(rootkit)이 인클레이브 영역(410)과 I2H(430) 사이에서의 데이터의 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 공유 데이터 영역(432)에 접근할 수 있다.
따라서, 디바이스(130)를 통해 입력되는(또는 출력) 데이터에 대한 어플리케이션(305)으로의 입력 채널(또는 출력 채널)이 루트킷과 같은 공격자로부터 안전하게 보호될 수 있다.
실시예의 I2H(430)를 사용하는 아키텍처를 통해서는, TCB를 최소화하면서 PAL들에 대한 격리가 안전한 입력(입력 데이터)를 제공하기 위해 선택된 커널 부분들에 대한 격리와 함께 이루어질 수 있다. 이를 위해 제공되는 격리 영역인 I2H(430)는 전술된 바와 같이 배타적인 (입출력) 디바이스(130)의 접근 및 인클레이브 영역(410)의 직접적인 접근을 특징으로 할 수 있다.
이러한 I2H(430)를 사용하는 방식으로의 x86 아키텍처의 수정을 통해 SGX의 입력(또는 출력) 데이터 및 입출력 채널에 대한 보안 문제를 해결할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
Claims (15)
- 프로세서에 있어서,
상기 프로세서에 의해 실행되는 복수의 어플리케이션들의 각각과 연관하여 인클레이브 영역이 존재하고,
상기 인클레이브 영역 각각이 접근 가능하고, 상기 어플리케이션들의 각각에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고,
상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되고, 상기 입력 디바이스를 위한 적어도 하나의 보안 드라이버를 포함하고, 상기 인클레이브 영역들은 상기 보안 드라이버를 공유하여 사용하고,
상기 I2H는 공유 데이터 영역(shared data region)을 포함하고,
상기 인클레이브 영역은 상기 I2H에 접근하기 위한 인터페이스를 포함하고,
상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근하고, 상기 데이터는 상기 I2H로부터 상기 인클레이브 영역으로 커널을 거치지 않고 전달되고,
상기 입력 디바이스와의 인터페이스는 상기 입력 디바이스를 위한 I/O 포트이고, 상기 I/O 포트는 상기 I2H에 대한 소정의 명령(instruction)에 따라 잠금 또는 잠금 해제되고, 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용되고, 상기 I/O 포트가 잠긴 상태에서, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)이 반환되는, 프로세서. - 삭제
- 제1항에 있어서,
상기 보안 드라이버는 상기 커널(kernel)의 임계 영역(critical region)을 위한 고립된 실행 환경을 제공하기 위해 사용되는, 프로세서. - 삭제
- 삭제
- 제1항에 있어서,
상기 인클레이브 영역은, 루트킷(rootkit)이 상기 인클레이브 영역과 상기 I2H 사이에서의 상기 데이터의 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 상기 공유 데이터 영역에 접근하는, 프로세서. - 삭제
- 삭제
- 제1항에 있어서,
상기 I2H를 생성하는 동작, 생성된 I2H에 대해 콘텐츠(contents)를 부가하는 동작 및 상기 I2H로 진입하는(jump into) 동작은 각각 소정의 명령에 따라 수행되는, 프로세서. - 제1항에 있어서,
상기 입력 디바이스를 통한 데이터의 입력에 따른 인터럽트가 발생한 경우, 상기 I2H와 연관된 플로우가 진행되지 않으면 상기 I2H와 연관된 플로우가 진행되지 않았음을 나타내는 검출 정보가 생성되는, 프로세서. - 어플리케이션을 실행하는 프로세서; 및
상기 어플리케이션을 실행하기 위해 요구되는 데이터를 적어도 임시적으로 저장하는 메모리
를 포함하고,
상기 프로세서에는, 상기 프로세서에 의해 실행되는 복수의 어플리케이션들의 각각과 연관하여 인클레이브 영역이 존재하고,
상기 프로세서는, 상기 인클레이브 영역 각각이 접근 가능하고, 상기 어플리케이션들의 각각에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고,
상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되고, 상기 입력 디바이스를 위한 적어도 하나의 보안 드라이버를 포함하고, 상기 인클레이브 영역들은 상기 보안 드라이버를 공유하여 사용하고,
상기 I2H는 공유 데이터 영역(shared data region)을 포함하고,
상기 인클레이브 영역은 상기 I2H에 접근하기 위한 인터페이스를 포함하고,
상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근하고, 상기 데이터는 상기 I2H로부터 상기 인클레이브 영역으로 커널을 거치지 않고 전달되고,
상기 입력 디바이스와의 인터페이스는 상기 입력 디바이스를 위한 I/O 포트이고, 상기 I/O 포트는 상기 I2H에 대한 소정의 명령(instruction)에 따라 잠금 또는 잠금 해제되고, 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용되고, 상기 I/O 포트가 잠긴 상태에서, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)이 반환되는, 컴퓨터. - 프로세서에 의해 수행되는, 입력 디바이스를 통한 데이터 입력에 따른 인터럽트를 처리하는 방법에 있어서,
상기 프로세서에 의해 실행되는 복수의 어플리케이션들의 각각과 연관하여 인클레이브 영역이 존재하고,
상기 인클레이브 영역 각각이 접근 가능하고, 상기 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 생성하는 단계 - 상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되고, 상기 입력 디바이스를 위한 적어도 하나의 보안 드라이버를 포함하고, 상기 인클레이브 영역들은 상기 보안 드라이버를 공유하여 사용함 -;
소정의 명령(instruction)에 기반하여, 상기 인터페이스로서 I/O 포트를 잠금 또는 잠금 해제하는 단계 - 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용됨 -;
상기 I2H를 통해 상기 입력 디바이스를 통해 입력된 데이터에 대응하는 코드를 수신하는 단계; 및
상기 I/O 포트가 잠긴 상태에서, 상기 I2H에 대한 진입 없이, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)을 반환하는 단계
를 포함하고,
상기 I2H에는 공유 데이터 영역(shared data region)이 포함되고,
상기 인클레이브 영역에는 상기 I2H에 접근하기 위한 인터페이스가 포함되고,
상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근하고, 상기 데이터는 상기 I2H로부터 상기 인클레이브 영역으로 커널을 거치지 않고 전달되는, 인터럽트를 처리하는 방법. - 삭제
- 제12항에 있어서,
상기 인클레이브 영역은 루트킷(rootkit)이 상기 인클레이브 영역과 상기 I2H 사이에서의 데이터 전달 동안 접근할 수 없도록, 소정의 보안 명령을 사용하여 상기 공유 데이터 영역에 접근하는, 인터럽트를 처리하는 방법. - 어플리케이션을 실행하는 프로세서를 구성하는 장치에 있어서,
상기 프로세서에 의해 실행되는 복수의 어플리케이션들의 각각과 연관하여 인클레이브 영역이 마련되고,
상기 프로세서는, 상기 인클레이브 영역 각각이 접근 가능하고, 상기 어플리케이션들의 각각에 대해 데이터를 입력하기 위해 사용되는 입력 디바이스와의 인터페이스를 포함하는 고립된 인터럽트 핸들러(Isolated Interrupt Handler; I2H)를 포함하고,
상기 I2H는 상기 프로세서와 연관된 시스템 소프트웨어로부터는 접근이 불가능하도록 구성되고, 상기 입력 디바이스를 위한 적어도 하나의 보안 드라이버를 포함하고, 상기 인클레이브 영역들은 상기 보안 드라이버를 공유하여 사용하고,
상기 I2H는 공유 데이터 영역(shared data region)을 포함하고,
상기 인클레이브 영역은 상기 I2H에 접근하기 위한 인터페이스를 포함하고,
상기 인클레이브 영역은 상기 입력 디바이스를 통해 입력된 데이터를 획득하기 위해 상기 인클레이브 영역의 인터페이스를 통해 상기 공유 데이터 영역에 접근하고, 상기 데이터는 상기 I2H로부터 상기 인클레이브 영역으로 커널을 거치지 않고 전달되고,
상기 입력 디바이스와의 인터페이스는 상기 입력 디바이스를 위한 I/O 포트이고, 상기 I/O 포트는 상기 I2H에 대한 소정의 명령(instruction)에 따라 잠금 또는 잠금 해제되고, 상기 I/O 포트가 잠긴 상태에서 상기 I/O 포트는 상기 I2H를 통해서만 독점적으로 사용되고, 상기 I/O 포트가 잠긴 상태에서, 상기 I/O 포트에 대한 접근이 요청되는 경우 상기 요청에 대해서는 쓰레기 값(garbage value)이 반환되는, 장치.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190014745A KR102192328B1 (ko) | 2019-02-08 | 2019-02-08 | Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190014745A KR102192328B1 (ko) | 2019-02-08 | 2019-02-08 | Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200097416A KR20200097416A (ko) | 2020-08-19 |
KR102192328B1 true KR102192328B1 (ko) | 2020-12-17 |
Family
ID=72265535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190014745A KR102192328B1 (ko) | 2019-02-08 | 2019-02-08 | Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102192328B1 (ko) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003216374A (ja) | 2002-01-25 | 2003-07-31 | Canon Inc | コンピュータプログラム、デバイスドライバの設定方法及びその設定装置 |
US8397306B1 (en) | 2009-09-23 | 2013-03-12 | Parallels IP Holdings GmbH | Security domain in virtual environment |
US8627414B1 (en) | 2009-08-04 | 2014-01-07 | Carnegie Mellon University | Methods and apparatuses for user-verifiable execution of security-sensitive code |
US20170177854A1 (en) * | 2014-05-15 | 2017-06-22 | Carnegie Mellon University | Method and Apparatus for On-Demand Isolated I/O Channels for Secure Applications |
-
2019
- 2019-02-08 KR KR1020190014745A patent/KR102192328B1/ko active IP Right Grant
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2003216374A (ja) | 2002-01-25 | 2003-07-31 | Canon Inc | コンピュータプログラム、デバイスドライバの設定方法及びその設定装置 |
US8627414B1 (en) | 2009-08-04 | 2014-01-07 | Carnegie Mellon University | Methods and apparatuses for user-verifiable execution of security-sensitive code |
US8397306B1 (en) | 2009-09-23 | 2013-03-12 | Parallels IP Holdings GmbH | Security domain in virtual environment |
US20170177854A1 (en) * | 2014-05-15 | 2017-06-22 | Carnegie Mellon University | Method and Apparatus for On-Demand Isolated I/O Channels for Secure Applications |
Non-Patent Citations (1)
Title |
---|
Hongliang Liang et al, "Aurora: Providing Trusted System Services for Enclaves on an Untrusted System"(2018.02.) |
Also Published As
Publication number | Publication date |
---|---|
KR20200097416A (ko) | 2020-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Pinto et al. | Demystifying arm trustzone: A comprehensive survey | |
Bahmani et al. | {CURE}: A security architecture with {CUstomizable} and resilient enclaves | |
US10114958B2 (en) | Protected regions | |
Guan et al. | Trustshadow: Secure execution of unmodified applications with arm trustzone | |
Sgandurra et al. | Evolution of attacks, threat models, and solutions for virtualized systems | |
Cho et al. | {Hardware-Assisted}{On-Demand} Hypervisor Activation for Efficient Security Critical Code Execution on Mobile Devices | |
Criswell et al. | Virtual ghost: Protecting applications from hostile operating systems | |
CN107077428B (zh) | 保护应用秘密的方法、电子***和计算机存储介质 | |
US8839239B2 (en) | Protection of virtual machines executing on a host device | |
RU2621001C2 (ru) | Содействие взаимодействия для запроса системных служб для аппаратно-защищенных приложений | |
Li et al. | TEEv: Virtualizing trusted execution environments on mobile platforms | |
Nasahl et al. | HECTOR-V: A heterogeneous CPU architecture for a secure RISC-V execution environment | |
KR102105760B1 (ko) | 하드웨어 보안 기술 기반 gpu 컴퓨팅 보호 기법 | |
US10095862B2 (en) | System for executing code with blind hypervision mechanism | |
KR20170095161A (ko) | 시큐어 시스템 온 칩 | |
CN110874468B (zh) | 应用程序安全保护方法以及相关设备 | |
Deng et al. | Strongbox: A gpu tee on arm endpoints | |
Sensaoui et al. | An in-depth study of MPU-based isolation techniques | |
Gu et al. | Enclavisor: A hardware-software co-design for enclaves on untrusted cloud | |
Evtyushkin et al. | Flexible hardware-managed isolated execution: Architecture, software support and applications | |
Sani et al. | The case for I/O-device-as-a-service | |
EP3646216B1 (en) | Methods and devices for executing trusted applications on processor with support for protected execution environments | |
Van Bulck et al. | Secure resource sharing for embedded protected module architectures | |
KR102192328B1 (ko) | Sgx 상의 입력 채널을 보호하기 위한 고립된 인터럽트 핸들러를 포함하는 프로세서 및 인터럽트 처리 방법 | |
US10938857B2 (en) | Management of a distributed universally secure execution environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right |