KR20190045640A - 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 - Google Patents
부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 Download PDFInfo
- Publication number
- KR20190045640A KR20190045640A KR1020170138460A KR20170138460A KR20190045640A KR 20190045640 A KR20190045640 A KR 20190045640A KR 1020170138460 A KR1020170138460 A KR 1020170138460A KR 20170138460 A KR20170138460 A KR 20170138460A KR 20190045640 A KR20190045640 A KR 20190045640A
- Authority
- KR
- South Korea
- Prior art keywords
- memory
- library
- area
- input
- loaded
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/002—Countermeasures against attacks on cryptographic mechanisms
- H04L9/003—Countermeasures against attacks on cryptographic mechanisms for power analysis, e.g. differential power analysis [DPA] or simple power analysis [SPA]
-
- 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/54—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 adding security routines or objects to programs
-
- 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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- 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/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/034—Test or assess a computer or a system
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Storage Device Security (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 제1 계층의 메모리로 로딩하고, 미리 설정된 소정 값을 라이브러리의 소정의 함수에 입력 값으로 입력하고, 소정 값이 입력됨에 따라, 라이브러리가 로드된 제1 계층의 메모리의 영역 중 디바이스에 의해 접근된 메모리의 영역을 검출하고, 라이브러리가 로드된 제1 계층의 메모리의 영역 중 검출된 메모리 영역 이외의 영역에 접근하는 보호 코드를 생성하고, 보호 코드를 라이브러리의 소정의 함수에 추가하는, 디바이스가 부채널 공격으로부터 정보를 보호하는 방법이 제공된다.
Description
본 발명은 부채널 공격으로부터 정보를 보호하기 위한 방법 및 디바이스에 관한 것이다.
부채널 공격(side channel attack)이란, 디바이스에서 정보를 처리하는 과정에서 발생되는 전력 소모, 전자 기파, 실행 시간, 소리, 및 연산 수행 시간 등 측정 가능한 물리량(physical quantity)를 수집하고 분석하여, 암호 키나 입력값 등의 비밀 정보를 알아내는 방법을 의미한다. 타겟 알고리즘 자체가 고도의 암호학적 이론으로 보호되어 있더라도, 타겟 알고리즘이 연산되는 과정에서 발생되는 물리적 정보들은 외부에 노출되어 있으므로 공격자가 측정 가능하다. 그러므로, 고도로 암호화된 알고리즘이어도, 연산 과정에서 발생되는 물리량을 이용한 부채널 공격으로부터 안전하다고 볼 수 없다.
따라서, 기기가 고도의 보안 수준을 유지하기 위해서는 부채널 공격으로부터 정보를 보호하기 위한 방법을 미리 대비해두는 것이 필요하다.
일부 실시 예는, 부채널 공격으로부터 정보를 보호하기 위한 방법 및 디바이스를 제공하기 위한 것이다. 구체적으로, 일부 실시 예는 라이브러리의 소정 함수에 입력된 값을 부채널 공격으로부터 보호하기 위한 방법 및 디바이스를 제공하기 위한 것이다.
상술한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본 개시의 제1 측면은, 디바이스가 부채널 공격으로부터 정보를 보호하는 방법에 있어서, 상기 디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 제1 계층의 메모리로 로딩하는 단계; 미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력하는 단계; 상기 소정 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 디바이스에 의해 접근된 메모리의 영역을 검출하는 단계; 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 검출된 메모리 영역 이외의 영역에 접근하는 보호 코드(protection code)를 생성하는 단계; 및 상기 보호 코드를 상기 라이브러리의 소정의 함수에 추가하는 단계를 포함하는, 방법을 제공할 수 있다.
또한, 본 개시의 제2 측면은, 디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 로딩하는 제1 계층의 메모리; 및 미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력하고, 상기 소정 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 적어도 하나의 메모리의 영역에 접근하고, 상기 라이브러리가 로드된 상기 메모리의 영역 중 상기 접근된 메모리 영역 이외의 영역에 접근하는 보호 코드를 생성하고, 상기 보호 코드를 상기 라이브러리의 소정의 함수에 추가하는 프로세서를 포함하는, 디바이스를 제공할 수 있다.
또한, 본 개시의 제 3 측면은, 제 1 측면의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공할 수 있다.
일 실시 예에 의하면, 메모리 주소에 대한 접근 시간을 측정하여 라이브러리에 입력된 값을 알아내는 부채널 공격을 방어할 수 있다.
도 1은 일부 실시 예에 있어서 사용자 입력에 따라 라이브러리에 의해 접근된 메모리 영역의 예시를 나타내는 도면이다.
도 2 및 도 3은 일부 실시 예에 따른 디바이스의 블록도이다.
도 4는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 추가하는 방법의 일 예를 나타낸 도면이다.
도 5는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 삽입하는 방법을 나타낸 순서도이다.
도 6은 일부 실시 예에 따라 보호 코드에 의해 라이브러리에 입력된 값이 공격자로부터 보호되는 방법을 나타낸 도면이다.
도 2 및 도 3은 일부 실시 예에 따른 디바이스의 블록도이다.
도 4는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 추가하는 방법의 일 예를 나타낸 도면이다.
도 5는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 삽입하는 방법을 나타낸 순서도이다.
도 6은 일부 실시 예에 따라 보호 코드에 의해 라이브러리에 입력된 값이 공격자로부터 보호되는 방법을 나타낸 도면이다.
아래에서는 첨부한 도면을 참조하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 발명의 실시예를 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다.
이하 첨부된 도면을 참고하여 본 발명을 상세히 설명하기로 한다.
도 1은 일부 실시 예에 있어서 사용자 입력에 따라 라이브러리에 의해 접근된 메모리 영역의 예시를 나타내는 도면이다.
도 1을 참조하면, 디바이스(1000)는 소정의 어플리케이션을 통하여 사용자로부터 입력 값을 수신할 수 있다. 사용자에 의해 입력되는 값은, 예를 들면, 고도의 보안 수준이 요구되는 개인 정보와 관련된 데이터나, 비밀번호 등을 포함할 수 있다. 또한, 소정의 어플리케이션은, 예를 들면, 고도의 보안이 요구되는 금융 관련 어플리케이션일 수 있다.
일부 실시 예에 의하면, 소정의 어플리케이션은, 사용자로부터 입력을 수신하고 입력된 값을 처리하기 위한 라이브러리의 함수를 호출할 수 있다. 라이브러리는 디바이스(1000)에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리일 수 있다. 사용자로부터 수신된 입력 값은, 소정 어플리케이션에 의해 호출된 함수로 입력될 수 있다.
일부 실시 예에 의하면, 소정 어플리케이션이 입력된 값을 처리하기 위한 함수를 호출하면, 디바이스(1000)는 메모리에 로딩되어 있는 라이브러리들 중 호출된 함수를 포함한 라이브러리가 로딩된 메모리 영역에 접근할 수 있다. 라이브러리는 시스템 부팅이나 다른 이벤트 발생으로 인해 하드 디스크 영역에서 메모리로 로딩될 수 있다. 또는 라이브러리는 상술한 소정 어플리케이션의 호출로 하드 디스크 영역에서 메모리로 로딩될 수도 있다.
메모리로 라이브러리가 로딩되면, 각각의 메모리 주소가 할당된 메모리 영역에 라이브러리의 데이터가 저장될 수 있다. 디바이스(1000)는 메모리 주소를 이용하여 메모리에 저장된 라이브러리 데이터에 접근함으로써, 라이브러리 데이터를 획득하고, 획득된 데이터를 이용하여 소정의 동작을 수행할 수 있다. 예를 들면, 디바이스(1000)는 라이브러리 데이터를 획득함으로써, 어플리케이션에 의해 호출된 함수를 이용하여 입력된 값을 처리할 수 있다. 라이브러리가 적어도 하나의 어플리케이션에 의해 공유된 라이브러리인 경우, 라이브러리 데이터가 저장된 메모리의 주소는 상기 적어도 하나의 어플리케이션이 라이브러리를 이용할 수 있도록 공유될 수 있다.
일부 실시 예에 있어서, 디바이스(1000)가 소정의 메모리 주소에 접근하면, 디바이스(1000)의 빠른 연산 처리를 위해, 메모리에 저장된 데이터는 현재 메모리의 계층 보다 상위 계층의 메모리로 로딩될 수 있다.
데이터가 저장된 메모리는 메인 메모리일 수 있다. 또한, 메모리의 계층보다 상위 계층의 메모리는, 캐시 메모리 및 레지스터 중 적어도 하나를 포함할 수 있다. 상위 계층의 메모리에 데이터가 로딩되면 디바이스(1000)가 소정의 메모리 주소의 데이터에 접근하는데 걸리는 시간이 더 짧아질 수 있다. 데이터에 접근하는데 걸리는 시간이 짧아지면, 연산 처리 속도가 빨라지므로, 재이용될 가능성이 있는 데이터는 상위 계층의 메모리로 로딩됨이 바람직하다. 따라서, 디바이스(1000)가 소정의 메모리 영역에 접근하면, 접근된 메모리 영역에 저장된 데이터에 대한 빠른 연산 처리를 위해, 데이터가 상위 계층의 메모리로 로딩될 수 있다.
데이터가 상위 계층의 메모리로 로딩되어도, 메인 메모리의 데이터가 삭제되지 않는 한, 메모리 주소는 변경되지 않는다. 따라서, 디바이스(1000)는, 데이터가 상위 계층의 메모리로 로딩되어도 기존의 메모리 주소를 통해 상위 계층의 메모리로 로딩된 데이터에 접근할 수 있다.
일부 실시 예에 의하면, 메모리에 로딩된 라이브러리의 함수에 소정의 입력 값이 입력됨에 따라, 디바이스(1000)는 입력 값을 처리하기 위해 라이브러리 데이터가 저장된 소정의 메모리 영역에 접근할 수 있다. 또한, 소정 메모리 영역이 디바이스(1000)에 의해 접근됨에 따라, 접근된 메모리 영역에 저장된 데이터가 상위 계층의 메모리로 로딩될 수 있다.
메모리에 로딩된 라이브러리의 함수에 소정의 입력 값이 입력됨에 따라, 각 메모리 주소의 데이터가 상위 계층의 메모리로 로딩될 확률을 캐시 적중률이라 한다. 일부 실시 예에 의하면, 캐시 적중률에 기초하여, 정보를 탈취하기 위한 부채널 공격이 수행될 수 있다.
소정 값이 입력되는 함수가 공유 라이브러리의 함수인 경우, 다른 어플리케이션이 공유 라이브러리를 이용할 수 있도록 공유 라이브러리가 저장된 메모리 주소는 다른 어플리케이션에도 공유될 수 있다. 또한, 다른 어플리케이션도 공유 라이브러리를 이용할 수 있도록 공유 라이브러리가 저장된 메모리 주소에 다른 어플리케이션이 접근할 수 있다. 따라서, 공유 라이브러리의 데이터가 저장된 메모리의 주소가 공격자에게도 공유되어 접근되는 경우, 공격자는 상술한 방법을 통해, 사용자 입력 값을 유추해낼 수 있다. 공유 라이브러리는, 예를 들면, Libinput.so일 수 있다.
도 1의 110은, 라이브러리의 함수에 사용자 입력 값으로 4(111)가 입력된 경우, 각 메모리 주소의 데이터가 상위 계층의 메모리인 캐시 메모리로 로딩될 확률을 나타내는 캐시 적중률(cache-hit ratio)의 일 예를 나타낸 것이다. 110에 도시된 메모리 주소들인 0x980 내지 0x9980은, 사용자 입력 값이 입력되는, 라이브러리가 저장된 메모리 영역의 주소들 중 일부 또는 전부를 포함할 수 있다.
일부 실시 예에서, 캐시 적중률은, 소정 값이 라이브러리의 함수에 입력됨에 따라, 각각의 메모리 주소의 데이터가 상위 계층의 메모리인 캐시 메모리로 로딩될 확률을 의미할 수 있다. 각 메모리 주소에 대한 캐시 적중률은, 입력값이 입력되는 함수 및 입력 값에 따라 서로 다른 값으로 결정될 수 있다.
소정 입력값에 의해 메모리 주소의 데이터가 상위 계층의 메모리로 로딩될지 여부는, 동일한 입력값이 동일한 함수에 입력되어도, 달라질 수 있다. 따라서, 캐시 적중률은 동일한 입력값이 동일한 함수에 여러번 입력됨으로써 각 메모리 주소의 데이터가 캐시 메모리로 로딩되는지 여부에 기초하여, 그 확률 값으로써 결정될 수 있다.
캐시 적중률은 0~1 사이의 값을 가질 수 있고, 1에 가까울 수록, 각 메모리 주소의 데이터가 각각의 입력 값에 의해 캐시 메모리로 로딩될 확률이 높음을 나타낸다.
각 메모리 주소의 데이터가 캐시 메모리로 로딩되는지 여부는, 소정 값이 라이브러리의 함수에 복수 회 입력될 때마다 각각의 메모리 주소에 대해 디바이스(1000)가 접근하는데 걸리는 시간에 기초하여, 결정될 수 있다. 예를 들어, 소정 메모리 주소에 대해 디바이스(1000)가 접근하는데 걸리는 시간이 기준 시간보다 짧으면, 소정 메모리 주소의 데이터가 캐시 메모리로 로딩된 것으로 결정될 수 있다. 디바이스(1000)는, 입력 값을 라이브러리의 함수에 복수 회 입력함으로써, 각각의 메모리 주소에 대한 접근 시간을 각각 구할 수 있고, 접근 시간에 기초하여, 소정 입력 값에 대한 각 메모리 주소의 데이터가 캐시 메모리로 로딩되는지 여부를 결정할 수 있다. 그리고, 각 메모리 주소의 데이터가 캐시 메모리로 로딩되는지 여부에 기초하여, 캐시 적중률이 결정될 수 있다.
일부 실시 예에 의하면, 각 메모리 주소의 캐시 적중률은, 소정 입력값에 대해 일정한 패턴을 가질 수 있다. 예를 들면, 동일한 입력값이 동일한 라이브러리의 함수에 입력될 때, 각각의 메모리 주소에 대한 캐시 적중률이 동일한 값을 가질 수 있다.
110에 도시된 예를 참조하면, 입력값 4가 소정 함수에 입력되면, 메모리 주소 중 0x4980을 제외한 다른 주소들의 캐시 적중률은 0에 가깝고, 0x4980의 캐시 적중률은 1에 가까운 값을 가진다.
공격자는, 110에 도시된 것과 같이 각 입력값과 대응되는 메모리 주소들의 캐시 적중률을 미리 구해둘 수 있다. 예를 들면, 공격자는, 타겟팅한 라이브러리의 소정 함수에, 적어도 하나의 값을 차례대로 입력하여, 캐시 적중률을 미리 구해둘 수 있다. 그리고, 사용자 입력값이 타겟팅한 라이브러리의 소정 함수로 입력되면, 공격자는 각 메모리 주소에 대한 접근 시간을 구함으로써, 미리 구해둔 캐시 적중률을 이용하여 사용자 입력값을 유추해낼 수 있다.
예를 들어, 공격자는 도 1의 110에 도시된 것과 같은 캐시 적중률을 미리 파악해 둘 수 있다. 그리고, 사용자 입력값이 입력되었을 때, 공격자는, 0x4980에 대한 접근 시간이 기준 시간보다 짧아, 0x4980의 데이터가 캐시 메모리에 로딩된 것으로 판단할 수 있다. 또한, 공격자는 나머지 메모리 주소에 대한 접근 시간이 기준 시간보다 길어, 나머지 메모리 주소의 데이터는 캐시 메모리에 로딩되지 않은 것으로 판단할 수 있다. 공격자는, 미리 파악해둔 110의 입력값 4에 대한 각 메모리 주소의 캐시 적중률과, 현재 입력된 값에 의한 각 메모리 주소의 캐시 메모리 로딩 여부를 비교함으로써, 현재 입력된 값은 4인 것으로 유추할 수 있다.
일부 실시 예에 의하면, 공격자가 상술한 방법을 통해 사용자 입력값을 유추하지 못하도록, 디바이스(1000)는 입력 값이 입력됨에 따라 다른 메모리 주소로도 접근하는 보호 코드를 함수에 추가할 수 있다. 예를 들면, 디바이스(1000)는, 도 1의 110에 도시된 것과 같이, 입력값 4가 라이브러리의 소정 함수에 입력될 때, 0x4980 이외 다른 메모리 주소로도 접근하는 보호 코드를 입력값이 입력되는 소정 함수에 추가할 수 있다.
따라서, 일부 실시 예에 의하면 적어도 하나의 메모리 주소로 접근하는 보호 코드가 라이브러리의 소정 함수에 추가됨으로써, 공격자로부터 사용자 입력값을 보호할 수 있다.
일부 실시 예에 의하면, 디바이스(1000)는 메모리에 로딩된 라이브러리 데이터에 대하여, 보호 코드를 추가할 수 있다. 따라서, 디바이스(1000)는 시스템에 설치된 라이브러리 데이터를 변경할 필요 없이, 메모리에 로딩된 데이터에 보호 코드를 추가함으로써 사이드 채널 공격으로부터 입력값을 보호할 수 있다.
일부 실시 예에 의한 공격자는, 디바이스(1000)에 설치된 어플리케이션, 악성 코드, 랜섬웨어 등 디바이스(1000)의 정보를 유출시키는 프로그램 중 하나일 수 있다.
상술한 예에서는, 사용자 입력값이 라이브러리의 함수로 입력되는 경우를 예로 들었으나, 일부 실시 예에 의하면, 사용자가 입력한 값에 한하지 않고, 여러가지 경로로 전달된 값이 라이브러리의 함수로 입력되는 경우도 포함될 수 있다. 예를 들면, 다른 어플리케이션 또는 외부 장치로부터 전달된 암호화 키 값이 라이브러리의 함수로 입력될 수 있고, 상술한 방법에 따라, 공격자가 입력된 값을 유추해낼 수 있다. 그리고, 상술한 방법에 따라 입력된 값을 보호하기 위한 보호 코드가 라이브러리의 함수에 추가될 수 있다.
도 2 및 도 3은 일부 실시 예에 따른 디바이스(1000)의 블록도이다.
도 2를 참조하면, 디바이스(1000)는 메모리(1700) 및 프로세서(1300)를 포함할 수 있다. 메모리(1700)는 제1 계층의 메모리(1710) 및 제2 계층의 메모리(1720)를 포함할 수 있다. 그러나 도시된 구성요소 모두가 필수구성요소인 것은 아니다. 도시된 구성요소보다 많은 구성요소에 의해 디바이스(1000)가 구현될 수도 있고, 그보다 적은 구성요소에 의해서도 디바이스(1000)는 구현될 수 있다.
예를 들어, 도 3에 도시된 바와 같이, 일부 실시 예에 따른 디바이스(1000)는, 메모리(1700) 및 프로세서(1300) 이외에, 사용자 입력부(1100), 출력부(1200), 통신부(1500)를 더 포함할 수도 있다.
이하 상기 구성요소들에 대해 차례로 살펴본다.
사용자 입력부(1100)는, 사용자가 디바이스(1000)를 제어하기 위한 데이터를 입력하는 수단을 의미한다. 예를 들어, 사용자 입력부(1100)에는 키 패드(key pad), 돔 스위치 (dome switch), 터치 패드(접촉식 정전 용량 방식, 압력식 저항막 방식, 적외선 감지 방식, 표면 초음파 전도 방식, 적분식 장력 측정 방식, 피에조 효과 방식 등), 조그 휠, 조그 스위치 등이 있을 수 있으나 이에 한정되는 것은 아니다.
사용자 입력부(1100)는, 사용자로부터 고도의 보안이 요구되는 중요 정보를 포함하는 입력을 수신할 수 있다.
출력부(1200)는, 오디오 신호 또는 비디오 신호 또는 진동 신호를 출력할 수 있으며, 출력부(1200)는 디스플레이부(1210), 음향 출력부(1220), 및 진동 모터(1230)를 포함할 수 있다.
디스플레이부(1210)는 디바이스(1000)에서 처리되는 정보를 표시 출력한다. 예를 들어, 디스플레이부(1210)는, 소프트웨어 키보드를 디스플레이할 수 있다. 또한, 디스플레이부(1210)는, 사용자 입력에 따라 소정의 어플리케이션이 실행된 결과 화면을 디스플레이할 수 있다.
한편, 디스플레이부(1210)와 터치패드가 레이어 구조를 이루어 터치 스크린으로 구성되는 경우, 디스플레이부(1210)는 출력 장치 이외에 입력 장치로도 사용될 수 있다. 디스플레이부(1210)는 액정 디스플레이(liquid crystal display), 박막 트랜지스터 액정 디스플레이(thin film transistor-liquid crystal display), 유기 발광 다이오드(organic light-emitting diode), 플렉시블 디스플레이(flexible display), 3차원 디스플레이(3D display), 전기영동 디스플레이(electrophoretic display) 중에서 적어도 하나를 포함할 수 있다. 그리고 디바이스(1000)의 구현 형태에 따라 디바이스(1000)는 디스플레이부(1210)를 2개 이상 포함할 수도 있다.
음향 출력부(1220)는 통신부(1500)로부터 수신되거나 메모리(1700)에 저장된 오디오 데이터를 출력한다.
진동 모터(1230)는 진동 신호를 출력할 수 있다. 또한, 진동 모터(1230)는 터치스크린에 터치가 입력되는 경우 진동 신호를 출력할 수도 있다.
프로세서(1300)는, 통상적으로 디바이스(1000)의 전반적인 동작을 제어한다. 예를 들어, 프로세서(1300)는, 메모리(1700)에 저장된 프로그램들을 실행함으로써, 사용자 입력부(1100), 출력부(1200), 통신부(1500) 등을 전반적으로 제어할 수 있다.
구체적으로, 프로세서(1300)는 디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 제1 계층의 메모리로 로딩할 수 있다. 그리고, 프로세서(1300)는 미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력하여, 라이브러리가 로드된 제1 계층의 메모리의 영역 중 중 적어도 하나의 메모리의 영역에 접근할 수 있다. 프로세서(1300)는 라이브러리가 로드된 제1 계층의 메모리의 영역 중 프로세서(1300)가 접근한 메모리 영역 이외의 영역에 접근하는 보호 코드(protection code)를 생성할 수 있다. 그리고, 프로세서(1300)는 보호 코드를 라이브러리의 소정의 함수에 추가할 수 있다.
또한, 프로세서(1300)는, 복수 개의 값을 소정의 함수에 입력하고, 복수 개의 값이 입력됨에 따라, 라이브러리가 로드된 제1 계층의 메모리(1710)의 영역 중 적어도 하나의 메모리의 영역에 접근할 수 있다. 프로세서(1300)는 복수 개의 값이 입력됨에 따라, 각각 접근된 메모리 영역을 검출할 수 있다. 그리고, 프로세서(1300)는 복수 개의 값 각각에 대해 검출된 메모리 영역이 서로 다른지 여부에 기초하여, 보호 코드를 생성할 지 여부를 결정할 수 있다. 일부 실시 예에 의하면, 복수 개의 값이 라이브러리의 소정 함수에 입력됨에 따라 프로세서(1300)에 의해 접근된 메모리 영역이 서로 동일한 경우, 라이브러리의 함수에 입력된 값이 상술한 복수 개의 값 중 어느 것인지 유추될 수 없다. 따라서, 이 경우, 프로세서(1300)는 보호 코드를 생성하지 않을 수 있다.
또한, 프로세서(1300)는, 소정 값이 입력된 후, 라이브러리가 로드된 메모리의 영역 중 적어도 하나의 제1 계층의 메모리의 영역에 접근하는데 걸린 시간을 측정할 수 있다. 프로세서(1300)는 측정된 시간에 기초하여, 라이브러리의 소정의 함수에 의해 접근된 적어도 하나의 제1 계층의 메모리의 영역을 검출할 수 있다.
통신부(1500)는, 디바이스(1000)가 외부 디바이스(미도시)와 통신을 하게 하는 하나 이상의 구성요소를 포함할 수 있다. 예를 들어, 통신부(1500)는, 근거리 통신부(1510), 이동 통신부(1520), 방송 수신부(1530)를 포함할 수 있다.
근거리 통신부(short-range wireless communication unit)(151)는, 블루투스 통신부, BLE(Bluetooth Low Energy) 통신부, 근거리 무선 통신부(Near Field Communication unit), WLAN(와이파이) 통신부, 지그비(Zigbee) 통신부, 적외선(IrDA, infrared Data Association) 통신부, WFD(Wi-Fi Direct) 통신부, UWB(ultra wideband) 통신부, Ant+ 통신부 등을 포함할 수 있으나, 이에 한정되는 것은 아니다.
이동 통신부(1520)는, 이동 통신망 상에서 기지국, 외부의 단말, 서버 중 적어도 하나와 무선 신호를 송수신한다. 여기에서, 무선 신호는, 음성 호 신호, 화상 통화 호 신호 또는 문자/멀티미디어 메시지 송수신에 따른 다양한 형태의 데이터를 포함할 수 있다.
방송 수신부(1530)는, 방송 채널을 통하여 외부로부터 방송 신호 및/또는 방송 관련된 정보를 수신한다. 방송 채널은 위성 채널, 지상파 채널을 포함할 수 있다. 구현 예에 따라서 디바이스(1000)가 방송 수신부(1530)를 포함하지 않을 수도 있다.
또한, 통신부(1500)는, 소정의 어플리케이션에 입력될 수 있는 암호화된 정보를, 서버(4000) 및 외부 디바이스(미도시)와 송수신할 수 있다.
메모리(1700)는, 프로세서(1300)의 처리 및 제어를 위한 프로그램을 저장할 수 있고, 디바이스(1000)로 입력되거나 디바이스(1000)로부터 출력되는 데이터를 저장할 수도 있다. 메모리(1700)는 스와이프 입력에 대응되는 사용자의 문자 입력을 결정하는데 이용되는 학습 모델을 저장할 수 있다.
메모리(1700)는 플래시 메모리 타입(flash memory type), 하드디스크 타입(hard disk type), 멀티미디어 카드 마이크로 타입(multimedia card micro type), 카드 타입의 메모리(예를 들어 SD 또는 XD 메모리 등), 램(RAM, Random Access Memory) SRAM(Static Random Access Memory), 롬(ROM, Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), PROM(Programmable Read-Only Memory), 자기 메모리, 자기 디스크, 광디스크 중 적어도 하나의 타입의 저장매체를 포함할 수 있다.
메모리(1700)에는 프로세서 동작을 위한 데이터 및 어플리케이션들을 저장할 수 있다. 예를 들면, 메모리(1700)는 디바이스(1000)에 설치된 적어도 하나의 어플리케이션 및 라이브러리 데이터를 저장할 수 있다. 또한, 메모리(1700)는 상술한 공격자로써 동작하는 랜섬웨어, 스파이웨어, 악성 어플리케이션, 악성 코드 등을 저장할 수 있다.
메모리(1700)는 제1 계층의 메모리(1710) 및 제2 계층의 메모리(1720)를 포함할 수 있다. 또한, 메모리(1700)는 도 2 및 3에 도시된 예에 한하지 않고, 복수 개 계층의 메모리들을 포함할 수 있다.
제1 계층의 메모리(1710)는 제2 계층의 메모리(1720)보다 하위 계층의 메모리일 수 있다. 예를 들면, 제1 계층의 메모리(1710)는, 메인 메모리일 수 있고, 제2 계층의 메모리(1720)는 캐시 메모리 및 레지스터 중 적어도 하나를 포함할 수 있다. 또한, 상위 계층의 메모리는, 하위 계층이 메모리보다 접근 속도가 더 빠를 수 있다.
제1 계층의 메모리(1710)는 디바이스(1000)에 설치된 적어도 하나의 어플리케이션에 의해 공유된 라이브러리를 로딩할 수 있다. 어플리케이션의 동작에 따라 소정의 함수가 호출되면, 호출된 함수를 포함하는 라이브러리가 제1 계층의 메모리(1710)로 로딩될 수 있다. 예를 들면, 라이브러리의 데이터는, 하드 디스크(미도시) 등 제1 계층의 메모리(1710)보다 낮은 계층의 메모리에 저장되어 있다가, 어플리케이션 호출에 따라 제1 계층의 메모리(1710)로 로딩될 수 있다.
제2 계층의 메모리(1720)는 프로세서(1300)에 의해 제1 계층의 메모리(1710)의 영역이 접근되면, 접근된 제1 계층의 메모리(1710) 영역의 데이터를 로딩할 수 있다. 제2 계층의 메모리 (1720)는 제1 계층의 메모리(1710)보다 상위 계층의 메모리일 수 있다.
도 4는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 추가하는 방법의 일 예를 나타낸 도면이다.
도 4를 참조하면, 410은 디바이스(1000)에서, 라이브러리가 로딩된 메모리 영역을 나타낸 것이고, 420은 디바이스(1000)에서, 라이브러리가 저장된 시스템 영역을 나타낸 것이다. 또한, 도 4의 단계 431 내지 434는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 방법을 나타낸 것이다.
일부 실시 예에 의한 보호 프로세스(411)는 일부 실시 예에 의한 라이브러리에 입력된 값을 보호하기 위한 방법을 수행하는 디바이스(1000)에 설치된 프로그램일 수 있다.
보호 프로세스(411)는 보호 코드가 추가될 라이브러리(412) 및 라이브러리(412)의 함수를 결정할 수 있다.
미리 정해진 조건에 속하는 라이브러리, 예를 들면, 사용자 입력 라이브러리(user input library), 크립토 라이브러리(crypto library) 등에 속하는 라이브러리의 경우, 보호 코드가 추가될 라이브러리(412)로 결정될 수 있다.
보호 프로세스(411)는 보호 코드가 추가될 라이브러리(412)에 대해 도 4에 도시된 방법에 따라 보호 코드를 생성하고 추가할 수 있다. 일부 실시 예에 의하면, 보호 프로세스(411)는 라이브러리(412)에 포함된 적어도 하나의 함수에 보호 코드를 추가할 수 있다.
일부 실시 예에 의하면, 보호 프로세스(411)는 보호 코드를 생성하기 위해 시스템의 라이브러리(421)를 메모리 영역으로 로딩시킬 수 있다. 또는, 운영체제 시작을 위해 디바이스(1000)의 시스템이 부팅됨에 따라, 시스템의 라이브러리(421)들이 메모리 영역으로 로딩될 수 있다. 일부 실시 예에 의하면, 라이브러리(421)는 메모리 영역으로 로딩되기 전 하드디스크 영역에 저장될 수 있다. 상술한 예에 한하지 않고 라이브러리(421)는 다양한 방법을 통해 메모리 영역으로 로딩될 수 있다.
단계 431에서, 디바이스(1000)의 보호 프로세스(411)는, 라이브러리(421)가 메모리 영역으로 로딩되면, 미리 설정된 소정 값을 메모리 영역에 로딩된 라이브러리(412)에 포함된 함수들 중 하나에 입력할 수 있다. 미리 설정된 소정 값은, 소정 함수에 입력될 수 있는 적어도 하나의 값 중 결정될 수 있다. 일부 실시 예에 의하면, 보호 프로세스(411)는, 라이브러리(421)에 포함된 적어도 하나의 함수에 대하여, 각 함수에 입력될 수 있는 적어도 하나의 값을 입력할 수 있다.
일부 실시 예에 의하면, 보호 프로세스(411)는 보호 코드를 생성하기 위해, 단계 431에서 소정 값을 입력할 함수를 결정할 수 있다. 예를 들면, 보호 프로세스(411)는 사용자의 입력 값 또는 암호화 키값을 입력값으로 받는 함수를 단계 431에서 소정 값을 입력할 함수로 결정할 수 있다. 상술한 예에 한하지 않고 보호 프로세스(411)는 다양한 방법을 통해 라이브러리(412)에 포함된 적어도 하나의 함수 중 소정 값을 입력할 함수로 결정할 수 있다.
단계 432에서, 보호 프로세스(411)에 의해 소정 값이 함수에 입력됨에 따라, 디바이스(1000)는 라이브러리(412)가 저장된 메모리(413) 영역에 접근할 수 있다. 일부 실시예에 의하면, 디바이스(1000)는 라이브러리(421)의 함수에 입력된 소정 값을 처리하기 위해, 라이브러리(412)가 저장된 메모리(413) 영역에 접근하여, 데이터를 획득할 수 있다. 일부 실시 예에 의하면, 디바이스(1000)에 의해 접근된 메모리(413) 영역의 데이터는, 디바이스(1000)가 빠른 연산을 수행할 수 있도록, 상위 계층의 메모리인 캐시 메모리로 로딩될 수 있다.
단계 433에서, 보호 프로세스(411)는 단계 432에서, 디바이스(1000)에 의해 입력 값에 따라 접근된 메모리 영역에 기초하여, 입력 값에 따라 각각의 메모리 주소의 영역의 데이터가 캐시 메모리로 로딩될 확률을 나타내는 캐시 적중률을 구할 수 있다. 일부 실시 예에 의하면, 보호 프로세스(411)는 입력값에 대한, 각각의 메모리 주소의 영역의 캐시 적중률에 기초하여, 라이브러리(412)의 소정 함수에 보호 코드를 추가할지 여부를 결정할 수 있다.
예를 들면, 보호 프로세스(411)는 각 입력 값에 따른, 복수 개의 메모리 주소 영역들의 캐시 적중률이 서로 다른지 여부에 기초하여, 라이브러리(412)의 소정 함수에 보호 코드를 추가할지 여부를 결정할 수 있다. 각 입력 값에 따른, 복수 개의 값에 대한 메모리 주소 영역들의 캐시 적중률이 서로 같으면, 공격자가 각 메모리 주소의 영역이 캐시 메모리에 로딩되어 있는지에 따라 소정 함수에 입력된 값이 상술한 복수 개의 값 중 어느 것인지 유추하기 어렵다. 보호 프로세스(411)는 공격자가 입력 값을 유추해내기 어려운 경우이면, 소정 함수에 대한 보호 코드를 생성하지 않을 수 있다.
또 다른 예로, 보호 프로세스(411)는 각 입력 값에 따른, 복수 개의 메모리 주소 영역들의 캐시 적중률의 패턴이 입력 값에 따라 구분될 수 있는지에 따라, 라이브러리(412)의 소정 함수에 보호 코드를 추가할지 여부를 결정할 수 있다. 메모리 주소 영역들의 캐시 적중률의 패턴은 입력 값 마다 구분될 수 있는 메모리 주소 영역들의 캐시 적중률을 의미할 수 있다. 각 입력 값에 따른, 복수 개의 메모리 주소 영역들의 캐시 적중률의 패턴이 서로 같으면, 공격자가 각 메모리 주소의 영역이 캐시 메모리에 로딩되어 있는지에 따라 소정 함수에 입력된 값을 유추하기 어렵다. 보호 프로세스(411)는 공격자가 입력 값을 유추해내기 어려운 경우이면, 소정 함수에 대한 보호 코드를 생성하지 않을 수 있다.
단계 434에서, 보호 프로세스(411)는, 각 입력 값에 따른, 복수 개의 메모리 주소 영역들의 캐시 적중률 또는 캐시 적중률의 패턴이 서로 다른지에 따라 소정 함수에 보호 코드를 추가할 수 있다.
일부 실시 예에 의한 보호 코드는, 소정 값이 입력됨에 따라 접근된 메모리 영역 이외의 메모리 영역에 접근하기 위한 코드를 포함할 수 있다. 소정 값이 입력될 때, 소정 함수의 라이브러리 데이터가 로딩된 메모리 주소의 일부 또는 전부에 접근하기 위한 코드를 포함할 수 있다.
예를 들면, 보호 코드는, 434에 도시된 바와 같이, 소정 함수에 4가 입력될 때, 메모리 주소 0x4980 이외 0x980~0x9980의 메모리 영역에도 접근하는 코드를 포함할 수 있다.
일 실시 예에 의한 보호 코드는, 디바이스(1000)가 부팅되거나 유휴 상태일 때 미리 생성될 수 있다. 디바이스(1000)는 보호 코드를 미리 생성해 둘 수 있다. 추후 라이브러리가 메모리 영역으로 로드되면, 디바이스(1000)는 미리 생성해둔 보호 코드를 대응되는 라이브러리의 함수에 추가할 수 있다. 메모리 주소는, 라이브러리가 메모리 영역으로 로드될 때 마다 변경될 수 있으므로, 디바이스(1000)는, 변경된 메모리 주소에 기초하여, 미리 생성해둔 보호 코드를 변경하여 대응되는 라이브러리의 함수에 추가할 수 있다.
또한, 일 실시 예에 의한 보호 코드는, 소정 값이 입력됨에 따라 접근된 메모리 영역 이외의 메모리 영역에 접근하기 위한 코드가 저장된 위치를 포함할 수 있다. 디바이스(1000)는 소정 값이 입력됨에 따라 접근된 메모리 영역 이외의 메모리 영역에 접근하기 위한 코드를 식별하고 식별된 코드가 저장된 위치를 포함한 보호 코드를 생성할 수 있다.
도 5는 일부 실시 예에 따라 라이브러리에 입력된 값을 보호하기 위한 보호 코드를 삽입하는 방법을 나타낸 순서도이다.
단계 510에서, 디바이스(1000)는 디바이스(1000)에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 제1 계층의 메모리로 로딩할 수 있다. 일부 실시 예에 의하면, 디바이스(1000)는 보호 코드를 생성하기 위하여 보호될 라이브러리를 제1 계층의 메모리로 로딩할 수 있다. 또는, 디바이스 (1000)는 다양한 이벤트 발생으로 인해 보호될 라이브러리가 제1 계층의 메모리로 로딩됨을 감지함에 따라 일부 실시예에 의한 보호코드를 생성할 수 있다. 디바이스(1000)는 보호될 라이브러리가 제1 계층의 메모리로 로딩되면, 보호될 라이브러리에 대한 보호 코드를 생성하고 라이브러리에 보호 코드를 삽입할 수 있다.
단계 520에서, 디바이스(1000)는 미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력할 수 있다. 미리 설정된 소정 값은 소정 함수에 입력될 수 있는 값 중 적어도 하나를 포함할 수 있다. 라이브러리의 소정 함수는, 라이브러리에 포함된 적어도 하나를 포함할 수 있다. 일부 실시 예에 의하면, 디바이스(1000)는 미리 설정된 조건에 따라, 보호 코드가 추가될 라이브러리 및 소정 함수를 결정할 수 있다.
단계 530에서, 디바이스(1000)는 소정 값이 입력됨에 따라, 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 디바이스(1000)에 의해 접근된 메모리의 영역을 검출할 수 있다. 일부 실시 예에 의하면, 디바이스(1000)는 소정 값이 입력된 후, 각각의 메모리의 영역에 접근하는데 걸린 시간을 측정할 수 있다. 디바이스(1000)는 측정된 시간이 기준값보다 짧은 메모리의 영역은, 디바이스(1000)에 의해 접근된 메모리 영역으로 검출할 수 있다.
단계 540에서, 디바이스(1000)는 라이브러리가 로드된 제1 계층의 메모리의 영역 중 검출된 메모리 영역 이외의 영역에 접근하는 보호 코드를 생성할 수 있다. 디바이스(1000)는 공격자에 의해 각각의 메모리 주소에 대한 접근 여부에 대한 판단으로 라이브러리의 소정 함수에 입력된 값이 유추되지 않도록, 보호 코드를 생성할 수 있다. 보호 코드는, 소정 값이 소정 함수에 입력될 때, 검출된 메모리 영역 이외의 영역에 접근하는 프로세스를 수행함으로써, 공격자가 입력된 값을 유추할 수 없도록 할 수 있다.
단계 550에서, 디바이스(1000)는 보호 코드를 라이브러리의 소정의 함수에 추가할 수 있다. 단계 550에서, 디바이스(1000)는 제1 계층의 메모리에 로딩된 라이브러리 데이터에 대하여, 보호 코드를 추가할 수 있다. 따라서, 디바이스(1000)는 시스템에 설치된 라이브러리 데이터를 변경할 필요 없이, 메모리에 로딩된 데이터에 보호 코드를 추가함으로써 공격자의 사이드 채널 공격을 방어할 수 있다.
또한, 일부 실시 예에 의하면, 시스템에 설치된 라이브러리 데이터를 변경할 필요 없이 메모리에 로딩된 데이터에 보호 코드를 추가할 수 있으므로, 시스템 데이터 변경으로 인한 성능 저하를 방지할 수 있다.
또한, 일부 실시예에 의하면, 디바이스(1000)는 라이브러리가 제1 계층의 메모리에 로딩될 때마다 단계 540에서 생성한 보호 코드를 라이브러리 내 소정 함수에 추가할 수 있다.
도 6은 일부 실시 예에 따라 보호 코드에 의해 라이브러리에 입력된 값이 공격자로부터 보호되는 방법을 나타낸 도면이다.
도 6의 610은, 공격자의 공격 프로세스를 나타낸 것이고, 620은, 보호 코드에 의해 라이브러리에 대한 입력 값이 보호되는 프로세스를 나타낸 것이다. 또한, 도 6의 단계 631 내지 634는 일부 실시 예에 따라 라이브러리에 입력된 값이 공격자로부터 보호되는 방법을 나타낸 것이다.
단계 631에서, 공격자(611)는, 각각의 입력 값과 대응되는 메모리 접근 영역에 관한 정보를 얻기 위해 라이브러리(621)의 소정 함수에 대하여 소정 값을 입력할 수 있다.
단계 632에서, 공격자(611)에 의해 라이브러리(621)의 소정 함수에 대해 소정 값이 입력됨에 따라 소정 함수에 포함된 보호 코드가 실행될 수 있다. 보호 코드는, 단계 631가 수행되기 전, 보호 프로세스(411)에 의해, 제1 계층의 메모리에 로드되어 있는 라이브러리(621)의 소정 함수에 추가될 수 있다. 보호 코드가 실행됨에 따라, 소정 값의 입력에 따라 접근된 메모리 영역뿐만 아니라 다른 라이브러리의 메모리 영역들도 접근될 수 있다.
단계 633에서, 공격자(611)는 각각의 입력 값과 대응되는 메모리 접근 영역에 관한 정보를 얻기 위해, 메모리 주소별로 캐시 메모리에 로딩되어 있는지 여부를 모니터링할 수 있다. 공격자(611)는 라이브러리(621)의 각 메모리 주소에 대해 접근하는데 걸리는 시간을 측정함으로써, 각 메모리 주소의 데이터가 캐시 메모리에 로딩되어 있는지 여부를 판단할 수 있다.
단계 634에서는, 단계 632의 보호 코드 실행으로 인해, 소정 값의 입력에 따라 접근된 메모리 영역뿐만 아니라 다른 라이브러리의 메모리 영역들도 접근됨에 따라, 다른 라이브러리의 메모리 영역들도 캐시 메모리로 로딩될 수 있다. 따라서, 공격자(611)는, 입력값에 따라 각 메모리 주소에 대한 캐시 메모리 로딩 여부가 구분할 수 없게될 수 있다. 따라서, 공격자(611)는 각각의 입력 값을 캐시 메모리로 로딩된 메모리 영역들과 대응시키기 어려울 수 있다.
일부 실시 예에 의하면, 소정 값이 입력되면, 보호 코드에 의하여, 소정 값의 입력에 따라 접근되는 메모리의 영역뿐 아니라, 다른 라이브러리의 메모리 영역들도 접근될 수 있다. 따라서, 공격자(611)가 소정 값에 대한 각 메모리 영역의 접근 여부, 즉 캐시 메모리 로딩 여부를 모니터링하여도, 소정 값과 대응되는 메모리 영역의 접근 패턴을 파악할 수 없다.
일부 실시 예에 의하면, 메모리 접근 여부의 판단으로 입력 값을 유추해내는 사이드 채널 공격으로부터 라이브러리에 대한 입력 값을 보호할 수 있다.
일부 실시예는 컴퓨터에 의해 실행되는 프로그램 모듈과 같은 컴퓨터에 의해 실행가능한 명령어를 포함하는 기록 매체의 형태로도 구현될 수 있다. 컴퓨터 판독 가능 매체는 컴퓨터에 의해 액세스될 수 있는 임의의 가용 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 모두 포함한다. 또한, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 모두 포함할 수 있다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 통신 매체는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 또는 프로그램 모듈을 포함하며, 임의의 정보 전달 매체를 포함한다.
또한, 본 명세서에서, "부"는 프로세서 또는 회로와 같은 하드웨어 구성(hardware component), 및/또는 프로세서와 같은 하드웨어 구성에 의해 실행되는 소프트웨어 구성(software component)일 수 있다.
전술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본 발명의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
Claims (13)
- 디바이스가 부채널 공격으로부터 정보를 보호하는 방법에 있어서,
상기 디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 제1 계층의 메모리로 로딩하는 단계;
미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력하는 단계;
상기 소정 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 디바이스에 의해 접근된 메모리의 영역을 검출하는 단계;
상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 검출된 메모리 영역 이외의 영역에 접근하는 보호 코드(protection code)를 생성하는 단계; 및
상기 보호 코드를 상기 라이브러리의 소정의 함수에 추가하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 보호 코드를 생성하는 단계는
복수 개의 값을 상기 소정의 함수에 입력하는 단계;
상기 복수 개의 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 디바이스에 의해 접근된 메모리의 영역을 상기 복수 개의 값 각각에 대하여 검출하는 단계; 및
상기 복수 개의 값 각각에 대하여 상기 검출된 메모리 영역이 서로 다른지 여부에 기초하여, 상기 보호 코드를 생성할 지 여부를 결정하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 보호 코드를 생성하는 단계는
상기 검출된 메모리 영역에 기초하여, 상기 보호 코드에 의해 접근될 제1 계층의 메모리 영역을 결정하는 단계를 포함하는, 방법. - 제1항에 있어서, 상기 라이브러리의 소정의 함수에 의해 접근된 적어도 하나의 제1 계층의 메모리의 영역을 검출하는 단계는
상기 소정 값이 입력된 후, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 적어도 하나의 메모리의 영역에 접근하는데 걸린 시간을 측정하는 단계; 및
상기 측정된 시간에 기초하여, 상기 디바이스에 의해 접근된 메모리의 영역을 검출하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 라이브러리의 소정의 함수에 의해 상기 제1 계층의 메모리의 영역이 접근되면, 상기 접근된 제1 계층의 메모리의 데이터는, 제2 계층의 메모리로 로딩되는, 방법. - 제5항에 있어서, 상기 제1 계층의 메모리는 상기 제2 계층의 메모리보다 하위 계층의 메모리인, 방법.
- 디바이스 내에 설치된 적어도 하나의 어플리케이션에 의해 공유되는 라이브러리를 로딩하는 제1 계층의 메모리; 및
미리 설정된 소정 값을 상기 라이브러리의 소정의 함수에 입력 값으로 입력하고, 상기 소정 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 적어도 하나의 메모리의 영역에 접근하고, 상기 라이브러리가 로드된 상기 메모리의 영역 중 상기 접근된 메모리 영역 이외의 영역에 접근하는 보호 코드를 생성하고, 상기 보호 코드를 상기 라이브러리의 소정의 함수에 추가하는 프로세서를 포함하는, 디바이스. - 제7항에 있어서, 상기 프로세서는
복수 개의 값을 상기 소정의 함수에 입력하고, 상기 복수 개의 값이 입력됨에 따라, 상기 라이브러리가 로드된 상기 제1 계층의 메모리의 영역 중 상기 프로세서에 의해 접근된 메모리의 영역을 상기 복수 개의 값 각각에 대하여 검출하고, 상기 복수 개의 값 각각에 대하여 상기 검출된 메모리 영역이 서로 다른지 여부에 기초하여, 상기 보호 코드를 생성할 지 여부를 결정하는, 디바이스. - 제7항에 있어서, 상기 프로세서는
상기 프로세서에 의해 접근된 메모리 영역에 기초하여, 상기 보호 코드에 의해 접근될 제1 계층의 메모리 영역을 결정하는, 디바이스. - 제7항에 있어서, 상기 프로세서는
상기 소정 값이 입력된 후, 상기 라이브러리가 로드된 상기 메모리의 영역 중 상기 제1 계층의 메모리의 영역에 접근하는데 걸린 시간을 측정하고, 상기 측정된 시간에 기초하여, 상기 디바이스에 의해 접근된 메모리의 영역을 검출하는, 디바이스. - 제7항에 있어서, 상기 디바이스는, 제2 계층의 메모리를 더 포함하고,
상기 라이브러리의 소정의 함수에 의해 상기 제1 계층의 메모리의 영역이 접근되면, 상기 접근된 제1 계층의 메모리의 데이터는, 상기 제2 계층의 메모리로 로딩되는, 디바이스. - 제11항에 있어서, 상기 제1 계층의 메모리는 상기 제2 계층의 메모리보다 하위 계층의 메모리인, 디바이스.
- 상기 제1항 내지 제6항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170138460A KR102424357B1 (ko) | 2017-10-24 | 2017-10-24 | 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 |
US16/035,196 US10846399B2 (en) | 2017-10-24 | 2018-07-13 | Method and device for protecting information from side channel attack |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170138460A KR102424357B1 (ko) | 2017-10-24 | 2017-10-24 | 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190045640A true KR20190045640A (ko) | 2019-05-03 |
KR102424357B1 KR102424357B1 (ko) | 2022-07-25 |
Family
ID=66169403
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170138460A KR102424357B1 (ko) | 2017-10-24 | 2017-10-24 | 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10846399B2 (ko) |
KR (1) | KR102424357B1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11372647B2 (en) | 2019-12-05 | 2022-06-28 | Marvell Asia Pte, Ltd. | Pipelines for secure multithread execution |
US11263015B1 (en) * | 2019-12-05 | 2022-03-01 | Marvell Asia Pte, Ltd. | Microarchitectural sensitive tag flow |
US11307857B2 (en) | 2019-12-05 | 2022-04-19 | Marvell Asia Pte, Ltd. | Dynamic designation of instructions as sensitive for constraining multithreaded execution |
US11567878B2 (en) * | 2020-12-23 | 2023-01-31 | Intel Corporation | Security aware prefetch mechanism |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005149164A (ja) * | 2003-11-17 | 2005-06-09 | Hitachi Ltd | 共有ライブラリに格納された外部公開関数の呼び出し方法 |
KR20130111721A (ko) * | 2012-04-02 | 2013-10-11 | 삼성전자주식회사 | 부분 곱 생성기의 부스코드 생성방법, 컴퓨터 시스템 및 그 매체와 디지털 신호프로세서 |
US9436603B1 (en) * | 2014-02-27 | 2016-09-06 | Amazon Technologies, Inc. | Detection and mitigation of timing side-channel attacks |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7424706B2 (en) | 2003-07-16 | 2008-09-09 | Microsoft Corporation | Automatic detection and patching of vulnerable files |
US20070150530A1 (en) | 2005-12-13 | 2007-06-28 | Intel Corporation | Resisting cache timing based attacks |
DE102011078645A1 (de) | 2011-07-05 | 2013-01-10 | Robert Bosch Gmbh | Verfahren zum sicheren Prüfen eines Codes |
US9569612B2 (en) * | 2013-03-14 | 2017-02-14 | Daniel Shawcross Wilkerson | Hard object: lightweight hardware enforcement of encapsulation, unforgeability, and transactionality |
WO2015084344A1 (en) | 2013-12-04 | 2015-06-11 | Empire Technolgy Development, Llc | Detection of side channel attacks between virtual machines |
US9507951B2 (en) * | 2014-10-20 | 2016-11-29 | Intel Corporation | Technologies for secure input and display of virtual touch user interfaces |
US9990249B2 (en) * | 2015-12-24 | 2018-06-05 | Intel Corporation | Memory integrity with error detection and correction |
-
2017
- 2017-10-24 KR KR1020170138460A patent/KR102424357B1/ko active IP Right Grant
-
2018
- 2018-07-13 US US16/035,196 patent/US10846399B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2005149164A (ja) * | 2003-11-17 | 2005-06-09 | Hitachi Ltd | 共有ライブラリに格納された外部公開関数の呼び出し方法 |
KR20130111721A (ko) * | 2012-04-02 | 2013-10-11 | 삼성전자주식회사 | 부분 곱 생성기의 부스코드 생성방법, 컴퓨터 시스템 및 그 매체와 디지털 신호프로세서 |
US9436603B1 (en) * | 2014-02-27 | 2016-09-06 | Amazon Technologies, Inc. | Detection and mitigation of timing side-channel attacks |
Also Published As
Publication number | Publication date |
---|---|
US10846399B2 (en) | 2020-11-24 |
US20190121966A1 (en) | 2019-04-25 |
KR102424357B1 (ko) | 2022-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Briongos et al. | {RELOAD+ REFRESH}: Abusing Cache Replacement Policies to Perform Stealthy Cache Attacks | |
EP3792805A1 (en) | Data transmission with obfuscation for a data processing (dp) accelerator | |
KR102424357B1 (ko) | 부채널 공격으로부터 정보를 보호하는 방법 및 디바이스 | |
Genkin et al. | Drive-by key-extraction cache attacks from portable code | |
EP3103056B1 (en) | Methods and apparatus for protecting operating system data | |
US9122506B2 (en) | Virtualization apparatus and method for controlling access to hardware device by I/O request | |
Yan et al. | A study on power side channels on mobile devices | |
Gruss et al. | Page cache attacks | |
CN109033885B (zh) | 一种数据响应方法、终端设备以及服务器 | |
KR101006721B1 (ko) | 키보드 입력정보 보안장치 및 그 방법 | |
CN105447406A (zh) | 一种用于访问存储空间的方法与装置 | |
CN108809906B (zh) | 数据处理方法、***及装置 | |
CN111738623B (zh) | 业务风险检测方法及装置 | |
AU2012337403A1 (en) | Cryptographic system and methodology for securing software cryptography | |
CN113821821B (zh) | 安全架构***、安全架构***的密码运算方法和计算设备 | |
CN109922056B (zh) | 数据安全处理方法及其终端、服务器 | |
US11880496B2 (en) | Mitigating against a persistent consistent threat in a network device based on reducing temporal surface area | |
CN111625278B (zh) | 一种源代码文件的生成方法及相关设备 | |
US20140366156A1 (en) | Method and device for protecting privacy information with browser | |
US11886581B1 (en) | Rapid verification of executing processes | |
EP3793162B1 (en) | Data transmission with obfuscation using an obfuscation unit for a data processing (dp) accelerator | |
CN111177726B (zh) | 一种***漏洞检测方法、装置、设备及介质 | |
US11366766B2 (en) | Electronic device and control method thereof | |
Palfinger et al. | Androtime: Identifying timing side channels in the android api | |
Fazea et al. | Side-Channel Vulnerabilities in Discrete Ziggurat Sampler in Post-Quantum Cryptography |
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 |