KR102266342B1 - 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 - Google Patents
소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 Download PDFInfo
- Publication number
- KR102266342B1 KR102266342B1 KR1020190061810A KR20190061810A KR102266342B1 KR 102266342 B1 KR102266342 B1 KR 102266342B1 KR 1020190061810 A KR1020190061810 A KR 1020190061810A KR 20190061810 A KR20190061810 A KR 20190061810A KR 102266342 B1 KR102266342 B1 KR 102266342B1
- Authority
- KR
- South Korea
- Prior art keywords
- memory data
- memory
- data
- value
- stored
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 36
- 230000006870 function Effects 0.000 claims abstract description 22
- 238000013507 mapping Methods 0.000 claims description 79
- 238000004590 computer program Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 16
- 238000012795 verification Methods 0.000 description 9
- 238000012545 processing Methods 0.000 description 3
- 230000015556 catabolic process Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
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/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/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- 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/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/0292—User address space allocation, e.g. contiguous or non contiguous base addressing using tables or multilevel address translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
-
- 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/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/629—Protecting access to data via a platform, e.g. using keys or access control rules to features or functions of an application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Databases & Information Systems (AREA)
- Storage Device Security (AREA)
Abstract
컴퓨터 프로세서에서 실행하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치가 개시된다.
소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법은 암호화 기능이 주입된 기계어로 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계 및 복호화 기능이 주입된 기계어로 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계를 포함한다.
소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법은 암호화 기능이 주입된 기계어로 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계 및 복호화 기능이 주입된 기계어로 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계를 포함한다.
Description
본 발명은 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치에 관한 것으로, 더욱 상세하게는 컴퓨터 프로세서의 기계어 명령(machine instruction) 단계에서 컴퓨터 구조상의 메모리 영역에 저장되는 데이터인 메모리 데이터를 암호화 및 복호화하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치에 관한 것이다.
컴퓨터 프로세서에서 프로그램 실행 시 발생하는 제어 플로우들과 메모리 데이터의 취약 특성에 의해 데이터가 변경될 수 있으며, 이를 탐지하기 위한 다양한 소프트웨어적 방법들이 제안된바 있다.
그러나 소프트웨어적 방법들은 시스템 콜이나 프로시저 콜 등의 하이 레벨에서 검증하는 단계에 머물러 실제 검증과 컴퓨터 프로세서의 기계어 명령 단계에서 실행되는 기계어 명령 간의 세멘틱(semantic) 갭이 존재한다.
이를 해결하기 위해 CFI(Control flow integrity) 소프트웨어 보호 방법이 제안되었다. CFI 방법에 따르면 소프트웨어 프로그램의 코드를 정적 분석하여 제어 플로우를 수집하고, 제어 플로우의 시작과 끝에 고유 ID를 부여하며, 제어 플로우가 이루어질 때마다 고유 ID를 확인하여 올바른 제어 플로우인지를 검증하는 방식이다.
그러나 이러한 CFI 방법 또한 한계점이 발견되었는데, 성능저하를 피하기 위해 각 제어 플로우의 고유 ID를 타겟 주소들의 단순 그룹핑으로 결정하므로 제어 플로우의 무결성 검증이 어렵다는 것이다.
또한 다른 소프트웨어 또는 공격자에 의해 검증단계를 통과하거나, 메모리 데이터의 취약 특성으로 인해 검증에 사용되는 변수들의 값이 변경될 수 있어 소프트웨어 투과적(transparent)이지 못하다는 문제점이 있다.
본 발명의 일측면은 컴퓨터 프로세서의 기계어 명령 단계에서 제어 플로우를 변경하는 경우, 그 제어 데이터의 암호화 및 복호화를 함께 진행하여 제어 플로우의 무결성을 보장하는 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치를 제공한다.
본 발명의 기술적 과제는 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 당업자에게 명확하게 이해될 수 있을 것이다.
상기 과제를 해결하기 위한 본 발명의 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법은 소프트웨어를 실행하는 컴퓨터 프로세서가 상기 소프트웨어 보안을 위해 메모리 영역에 저장되는 데이터인 메모리 데이터를 암호화 및 복호화 하는 방법에 있어서, 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계 및 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계를 포함한다.
한편, 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계는, 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)를 이용하여 상기 메모리 데이터를 암호화하는 단계를 포함할 수 있다.
또한, 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계는, 메모리 데이터의 값 및 메모리 데이터가 저장되는 메모리 영역의 주소 각각에 랜덤 넘버를 매핑하여 저장한 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta) 각각의 암호화 키를 생성하는 단계를 포함할 수 있다.
또한, 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)를 이용하여 상기 메모리 데이터를 암호화하는 단계는, 상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산을 통해 상기 메모리 데이터를 암호화하는 단계를 포함할 수 있다.
또한, 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계는, 상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산 결과를 상기 메모리 데이터에 대한 고유 ID로 획득하는 단계 및 상기 고유 ID를 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)에 저장하는 단계를 포함할 수 있다.
또한, 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계는, 메모리 데이터가 저장되는 메모리 영역의 주소 각각에 랜덤 넘버를 매핑하여 저장한 매핑 테이블을 이용하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키를 생성하는 단계, 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키 및 암호화 된 상기 메모리 데이터 간의 배타적 논리합 연산을 통해 상기 메모리 데이터의 값(Td)의 암호화 키를 획득하는 단계 및 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하여 상기 메모리 데이터의 값(Td)을 획득하는 단계를 포함할 수 있다.
또한, 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하여 상기 메모리 데이터의 값(Td)을 획득하는 단계는, 상기 메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블의 역 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하는 단계를 포함할 수 있다.
또한, 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계는, 상기 컴퓨터 프로세서의 기계어 명령 단계 중 간접 분기 명령(indirect branch instruction) 단계일 수 있다.
또한, 상기 메모리 데이터의 암호화 및 복호화 방법을 수행하기 위한, 컴퓨터 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체일 수 있다.
한편, 본 발명의 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치는 소프트웨어를 실행하는 컴퓨터 프로세서에 포함되어 상기 소프트웨어 보안을 위해 메모리 영역에 저장되는 데이터인 메모리 데이터를 암호화 및 복호화 하는 장치에 있어서, 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 암호화부 및 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 복호화부를 포함한다.
한편, 메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블, 메모리 데이터가 저장되는 메모리 영역의 주소에 랜덤 넘버를 매핑하여 저장한 매핑 테이블 및 상기 메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블의 역 매핑 테이블로 구성되는 매핑 테이블을 더 포함할 수 있다.
또한, 상기 암호화부는, 상기 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta) 각각의 암호화 키를 생성하는 암호화 키 생성부, 상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산을 통해 상기 메모리 데이터를 암호화하는 암호화 연산부 및 상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산 결과를 상기 메모리 데이터에 대한 고유 ID로 하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)에 저장하는 저장부를 포함할 수 있다.
또한, 상기 복호화부는, 상기 매핑 테이블을 이용하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키를 생성하는 복호화 키 생성부, 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키 및 암호화 된 상기 메모리 데이터 간의 배타적 논리합 연산을 통해 상기 메모리 데이터의 값(Td)의 암호화 키를 획득하고, 상기 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하는 복호화 연산부 및 상기 메모리 데이터의 값(Td)으로 제어 플로우를 변경하는 호출부를 포함할 수 있다.
또한, 상기 암호화부는, 메모리 데이터의 저장 기능 및 암호화 기능을 갖는 명령어에 의해 실행될 수 있다.
또한, 상기 복호화부는, 상기 컴퓨터 프로세서의 간접 분기 명령 단계에서 제어 플로우를 변경하는 명령어에 의해 실행될 수 있다.
본 발명에 따르면 프로세서의 기계어 명령 단계에서 제어 플로우의 무결성을 검증함으로써 컴퓨터 시스템을 보호할 수 있으며, 나아가 시스템 호출(system call) 또는 프로시저 호출(procedure call)과 같은 high-level에서 실행되는 소프트웨어 적 데이터 검증 방법에 수반되는 semantic gap의 한계를 극복하고, 소프트웨어 투과적(transparent)으로 다른 소프트웨어 또는 공격자에 의해 검증단계를 우회하거나 검증에 사용되는 변수 값이 변경되는 것을 방지할 수 있다.
아울러 매핑 테이블을 이용하여 암호화 및 복호화 키를 생성하고, 이를 이용하여 XOR 연산에 따라 암호화 및 복호화 단계를 진행하므로, 단순한 연산법에 의한 빠른 연산을 가능하게 하여 전체 프로세서의 성능 저하를 방지할 수 있다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치의 블록도이다.
도 2 및 도 3은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치를 실행하는 코드의 일 예를 보여주는 도면이다.
도 4는 도 1에 도시된 암호화부에서의 동작을 개략적으로 보여주는 개념도이다.
도 5는 도 1에 도시된 복호화부에서의 동작을 개략적으로 보여주는 개념도이다.
도 6은 도 1에 도시된 암호화부의 세부 블록도이다.
도 7은 도 1에 도시된 암호화부에 의한 메모리 데이터의 암호화 단계를 설명하기 위한 도면이다.
도 8은 도 1에 도시된 복호화부의 세부 블록도이다.
도 9는 도 1에 도시된 복호화부에 의한 메모리 데이터의 복호화 단계를 설명하기 위한 도면이다.
도 10은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법을 보여주는 흐름도이다.
도 2 및 도 3은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치를 실행하는 코드의 일 예를 보여주는 도면이다.
도 4는 도 1에 도시된 암호화부에서의 동작을 개략적으로 보여주는 개념도이다.
도 5는 도 1에 도시된 복호화부에서의 동작을 개략적으로 보여주는 개념도이다.
도 6은 도 1에 도시된 암호화부의 세부 블록도이다.
도 7은 도 1에 도시된 암호화부에 의한 메모리 데이터의 암호화 단계를 설명하기 위한 도면이다.
도 8은 도 1에 도시된 복호화부의 세부 블록도이다.
도 9는 도 1에 도시된 복호화부에 의한 메모리 데이터의 복호화 단계를 설명하기 위한 도면이다.
도 10은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법을 보여주는 흐름도이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예와 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 도면들을 참조하여 본 발명의 바람직한 실시예들을 보다 상세하게 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치의 블록도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 암호화부(10), 복호화부(30) 및 매핑 테이블(50)을 포함할 수 있다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 도 1에 도시된 구성요소보다 많은 구성요소에 의해 구현될 수 있고, 그보다 적은 구성요소에 의해 구현될 수도 있다.
본 발명의 일 실시예예 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 정보의 입출력이 가능한 장치로, 메모리 데이터의 암호화 및 복호화를 위한 소프트웨어(애플리케이션)가 설치되어 실행될 수 있으며, 도 1에 도시된 암호화부(10) 및 복호화부(30)는 본 발명의 일 실시예예 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)에서 실행되는 소프트웨어에 의해 제어될 수 있다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서의 일 구성으로 포함될 수 있다. 컴퓨터 프로세서는 일반적인 컴퓨터의 통합 정보 처리 시스템으로, 중앙처리장치(CPU), 저장장치(메모리) 및 하드디스크 등의 구성 요소들을 포함할 수 있으며, 예를 들면, 저장장치로 소프트웨어 관련 데이터를 로드하여 소프트웨어를 실행할 수 있다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서의 일 구성으로 포함되어, 중앙처리장치, 저장장치 및 하드디스크 등의 구성 요소들과 시스템 버스를 통해 데이터를 송수신할 수 있다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서에서 소프트웨어를 실행시킴에 따라 저장장치에 저장되는 데이터인 메모리 데이터의 암호화 및 복호화를 진행할 수 있다.
컴퓨터 프로세서의 저장장치는 Stack, Heap, BBS 등과 같은 컴퓨터의 메모리 영역을 의미하고, 메모리 데이터는 메모리 영역에 저장되는 데이터를 의미한다. 이하에서는 메모리 데이터 중 제어 데이터(control data)를 예로 들어 설명하나, 이에 한정하는 것은 아니며 메모리 영역에 저장되는 모든 종류의 데이터가 적용될 수 있음은 물론이다. 제어 데이터는 메모리 데이터 중 간접 분기 명령(indirect branch instruction) 단계에서 사용되는 데이터에 해당한다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서의 기계어 명령(machine instruction) 단계에서 제어 데이터의 암호화 및 복호화를 진행할 수 있다. 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 메모리 데이터의 암호화 및 복호화 단계를 기존 기계어에 일체화시킬 수 있다. 예를 들면, 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 메모리 데이터를 저장하는 기계어에 데이터 암호화 단계를 포함시킬 수 있으며, 메모리 데이터가 제어 데이터인 경우, 제어 데이터를 불러오는 기계어에 데이터 복호화 단계를 포함시킬 수 있다.
이를 위해 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서에서 기계어 명령 단계를 실행 또는 제어할 수 있도록 구성될 수 있다.
예를 들면, 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 컴퓨터 프로세서의 기계어 명령 단계 중 간접 분기 명령(indirect branch instruction) 단계를 진행할 수 있다. 간접 분기 명령의 경우, call, ret, jmp 등과 같은 명령어를 사용하는데, 메모리 영역에 제어 데이터를 저장하고, 메모리 영역에 저장된 제어 데이터를 프로그램 카운터로 로드함으로써 제어 플로우를 변경하므로, 제어 플로우 전이의 무결성 검증이 요구된다.
한편 직접 분기 명령(direct branch instruction) 단계의 경우, conditional branch 또는 absolute jmp와 같은 명령어를 사용하는데, 제어 데이터를 정해진 주소로 분기하여 실행하기 때문에 제어 플로우(control flow) 전이의 무결성 검증이 불필요하다. 따라서 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 간접 분기 명령 단계에 한정하여 제어 데이터의 암호화 및 복호화를 진행할 수 있다.
예를 들면, 암호화부(10)는 제어 데이터를 메모리 영역에 저장할 때에 암호화할 수 있다. 복호화부(30)는 메모리 영역에 저장된 암호화된 제어 데이터를 프로그램 카운터로 로드할 때에 복화화할 수 있다.
이를 위해, 암호화부(10)는 제어 데이터의 저장 기능 및 암호화 기능을 갖는 명령어에 의해 실행될 수 있다. 복호화부(30)는 간접 분기 명령 단계에서 제어 플로우를 변경하는 명령어에 의해 실행될 수 있다. 이와 관련하여 도 2 및 도 3을 참조하여 설명한다.
도 2 및 도 3은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치를 실행하는 코드의 일 예를 보여주는 도면이다.
도 2를 참조하면, 제어 데이터(%ecx)는 mov 명령어에 의해 메모리 영역(20(%eax))에 저장될 수 있다. 즉, 제어 데이터의 값은 간접 분기 명령 단계의 jmp 명령어에 의해 분기될 타겟 주소(target address)에 해당하며, mov 명령어에 의해 메모리 영역의 지정된 주소에 저장되는 값으로 정의될 수 있다.
암호화부(10)는 이처럼 제어 데이터를 메모리 영역의 지정된 주소에 저장하도록 구현될 수 있는데, mov 명령어 대신 emov 명령어에 의해 실행될 수 있다.
본 실시예에서 emov 명령어는 mov 명령어의 기능에 제어 데이터의 암호화 기능을 더한 명령어로 정의될 수 있다. 암호화부(10)는 emov 명령어에 의해 제어 데이터를 암호화하여 메모리 영역의 지정된 주소에 저장할 수 있을 것이다.
제어 데이터(%ecx)는 간접 분기 명령 단계의 jmp 명령어에 의해 프로그램 카운터에 호출될 수 있다. 즉, 간접 분기 명령 단계는 jmp 명령어를 이용하여 메모리 영역으로부터 제어 데이터의 값을 읽어 와서 해당 제어 데이터의 값으로 분기함으로써, 제어 플로우를 변경할 수 있다.
복호화부(30)는 이처럼 메모리 영역의 지정된 주소로부터 제어 데이터를 읽어 와서 분기하는 간접 분기 명령 단계를 진행할 수 있는데, 복호화 기능이 부가된 간접 분기 명령 단계를 진행하는 명령어에 의해 실행될 수 있다.
본 실시예에서는 간접 분기 명령 단계를 진행하는 명령어가 Intel 사의 x86 또는 x64의 call, ret, jmp인 것으로 예를 들어 설명한다.
call 명령어는 복호화 기능이 주입되어 메모리 영역에 저장된 제어 데이터를 복호화하여 분기하는 기능을 가질 수 있다. 이때 call 명령어는 리턴 주소(return address)에 해당하는 제어 데이터를 메모리 영역(stack)의 지정된 주소에 암호화하여 저장할 수 있다(도 3 참조).
ret 명령어 또한 복호화 기능이 주입되어 메모리 영역에 저장된 제어 데이터를 복호화하여 분기하는 기능을 가질 수 있다. 이때 ret 명령어는 call 명령어에 의해 메모리 영역(stack)에 저장된 리턴 주소를 복호화하여 프로그램 카운터로 호출할 수 있다.
jmp 명령어 또한 복호화 기능이 주입되어 메모리 영역에 저장된 제어 데이터를 복호화하여 분기하는 기능을 가질 수 있다.
이처럼 복호화부(30)는 복호화 기능이 주입된 명령어들에 의해 실행되어 메모리 영역에 저장된 제어 데이터를 복호화하여 분기할 수 있을 것이다.
한편 암호화부(10) 및 복호화부(30)는 각각 매핑 테이블(50)를 참조하여 제어 데이터의 암호화 및 복호화에 사용되는 키를 생성할 수 있다. 매핑 테이블(50)은 제어 데이터의 값 및 제어 데이터가 저장되는 메모리 영역의 주소에 기반하여 구성될 수 있다. 이와 관련하여 도 4 및 도 5를 참조하여 설명한다.
도 4는 도 1에 도시된 암호화부에서의 동작을 개략적으로 보여주는 개념도이고, 도 5는 도 1에 도시된 복호화부에서의 동작을 개략적으로 보여주는 개념도이다.
도 4를 참조하면, 암호화부(10)는 메모리 영역의 특정 주소(address(/a))에 제어 데이터(target address(ta))를 암호화하여 저장할 수 있다. 암호화부(10)는 매핑 테이블(50)을 이용하여 제어 데이터(target address(ta))가 저장되는 메모리 영역의 주소(address(/a)) 및 제어 데이터의 값(target address(ta)) 각각의 암호화 키를 생성하고, 생성한 암호화 키 간의 배타적 논리합(exclusive OR, 이하 XOR 연산)을 통해 제어 데이터의 값(target address(ta))을 암호화할 수 있다. 암호화부(10)는 암호화 한 제어 데이터의 값(target address(ta))을 고유 아이디(dynamic ID)로 하여 메모리 영역의 특정 주소(address(/a))에 저장할 수 있다.
도 5를 참조하면, 복호화부(30)는 메모리 영역의 특정 주소(address(/a))로부터 제어 데이터를 불러 와서 제어 데이터의 값(target address(ta))으로 지정된 주소로 분기할 수 있다. 복호화부(30)는 매핑 테이블(50)을 이용하여 메모리 영역의 특정 주소(address(/a))의 복호화 키를 생성하고, 복호화 키와 해당 주소에 저장된 고유 아이디(dynamic ID) 간의 XOR 연산을 통해 암호화 된 제어 데이터의 값을 획득하며, 매핑 테이블(50)을 이용하여 암호화 된 제어 데이터의 값을 복호화함으로써 제어 데이터의 값(target address(ta))을 획득할 수 있다. 복호화부(30)는 제어 데이터를 프로그램 카운터로 호출하여 지정된 주소(target address(ta))로 분기할 수 있다.
한편, 본 실시예에서는 암호화부(10) 및 복호화부(30)가 매핑 테이블(50)을 참조하여 암호화 및 복호화를 진행하는 것을 예로 들어 설명하였으나, 이에 한정하는 것은 아니며 공지된 다양한 암호화 및 복호화 방법을 이용하여 제어 데이터의 암호화 및 복호화를 진행할 수도 있음은 물론이다.
이하 도 1에 도시된 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)의 각 구성 요소에 대해 구체적으로 설명한다.
도 6은 도 1에 도시된 암호화부의 세부 블록도이고, 도 7은 도 1에 도시된 암호화부에 의한 메모리 데이터의 암호화 단계를 설명하기 위한 도면이다.
도 6을 참조하면, 암호화부(10)는 암호화 키 생성부(11), 암호화 연산부(13) 및 저장부(15)를 포함할 수 있다.
암호화 키 생성부(11)는 제어 데이터의 암호화를 위한 암호화 키를 생성할 수 있다. 암호화 키 생성부(11)는 제어 데이터의 갑(Td) 및 제어 데이터가 저장되는 주소(Ta)에 기반하여 암호화 키를 생성할 수 있다. 여기서, 제어 데이터의 값(Td)은 제어 데이터가 분기될 주소(타겟 주소 또는 리턴 주소)에 해당하고, 제어 데이터가 저장되는 주소(Ta)는 제어 데이터가 emov 명령어에 의해 저장되는 메모리 영역의 주소에 해당한다.
암호화 키 생성부(11)는 제어 데이터의 값(Td) 및 제어 데이터가 저장되는 주소(Ta)에 기반하여 암호화 키를 생성하기 위해 매핑 테이블(50)을 이용할 수 있다. 매핑 테이블(50)은 제어 데이터의 값(Td) 및 제어 데이터가 저장되는 주소(Ta) 각각에 랜덤 넘버(random number)를 매핑하여 저장한 테이블이다. 암호화 키 생성부(11)는 매핑 테이블(50)을 이용하여 제어 데이터의 값(Td) 및 제어 데이터가 저장되는 주소(Ta) 각각의 암호화 키를 생성할 수 있다. 이와 관련하여 도 7을 참조하여 컴퓨터 프로세서가 64bit인 경우를 예로 들어 설명한다.
도 7을 참조하면, 매핑 테이블(50)은 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))과 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))을 포함할 수 있다. 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))은 8bit로 나뉜 제어 데이터의 값(Td) 마다 랜덤 넘버(random number)를 매핑하여 저장한 테이블이고, 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))은 8bit로 나뉜 메모리 영역의 주소(Ta) 마다 랜덤 넘버를 매핑하여 저장한 테이블일 수 있다. 이때 매핑 테이블(50)은 각각 다른 데이터와 매핑되는 랜덤 넘버를 모두 다르게 설정할 수 있다.
암호화 키 생성부(11)는 제어 데이터가 저장되는 주소(Ta)를 8bit씩 구간을 나누고, 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))로부터 각 구간이 나타내는 데이터와 매핑된 랜덤 넘버를 획득하며, 각 구간을 랜덤 넘버로 대체하여 제어 데이터가 저장되는 주소(Ta)의 암호화 키를 생성할 수 있다.
또한 암호화 키 생성부(11)는 제어 데이터의 값(Td)을 8bit씩 구간을 나누고, 제어 데이터의 값에 대한 매핑 테이블(Mapping Table(Td))로부터 각 구간이 나타내는 데이터와 매핑된 랜덤 넘버를 획득하며, 각 구간을 랜덤 넘버로 대체하여 제어 데이터의 값(Td)의 암호화 키를 생성할 수 있다.
암호화 연산부(13)는 제어 데이터가 저장되는 주소(Ta)의 암호화 키 및 제어 데이터의 값(Td)의 암호화 키 간의 XOR 연산을 수행하여 제어 데이터의 값(Td)을 암호화할 수 있다. 암호화 연산부(13)는 제어 데이터가 저장되는 주소(Ta)의 암호화 키 및 제어 데이터의 값(Td)의 암호화 키 간의 XOR 연산 결과를 제어 데이터에 대한 고유 ID로 획득할 수 있다.
암호화 연산부(13)는 이러한 XOR 연산을 통해 제어 데이터의 값에 대한 매핑 테이블(Mapping Table(Td))의 유추가 어렵게 하고, 단순한 연산법에 의한 빠른 연산을 가능하게 하여 전체 프로세서의 성능 저하를 도모할 수 있다.
저장부(15)는 고유 ID를 메모리 영역에 저장할 수 있다. 저장부(15)는 메모리 영역에서 제어 데이터가 저장되도록 미리 지정되는 주소(Ta)에 고유 ID를 저장할 수 있다. 이러한 고유 ID는 간접 분기 명령 단계의 고유 ID가 될 수 있다.
도 8은 도 1에 도시된 복호화부의 세부 블록도이고, 도 9는 도 1에 도시된 복호화부에 의한 메모리 데이터의 복호화 단계를 설명하기 위한 도면이다.
도 8을 참조하면, 복호화부(30)는 복호화 키 생성부(31), 복호화 연산부(33) 및 호출부(35)를 포함할 수 있다.
복호화 키 생성부(31)는 메모리 영역의 특정 주소에 저장된 제어 데이터를 복호화하기 위한 복호화 키를 생성할 수 있다. 다시 말하면, 복호화 키 생성부(31)는 간접 분기 명령 단계의 고유 ID를 복호화하기 위한 복호화 키를 생성할 수 있다.
본 실시예에서 메모리 영역에는 제어 데이터가 암호화되어 각각 고유 ID로 저장될 수 있다. 즉 암호화 된 제어 데이터는 고유 ID라 할 수 있으며, 상술한 것처럼 고유 ID가 저장된 주소(Ta) 및 제어 데이터의 값(Td)의 암호화 키를 XOR 연산하여 획득할 수 있다.
복호화 키 생성부(31)는 이러한 고유 ID의 복호화를 위해 먼저 매핑 테이블(50)을 이용하여 고유 ID가 저장된 주소(Ta), 다시 말하면, 제어 데이터가 저장되는 주소(Ta)의 복호화 키를 생성할 수 있다. 이와 관련하여 도 9를 참조하여 컴퓨터 프로세서가 64bit인 경우를 예로 들어 설명한다.
도 9를 참조하면, 매핑 테이블(50)은 상술한 것처럼 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))을 포함할 수 있다. 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))은 8bit로 나뉜 메모리 영역의 주소(Ta) 마다 랜덤 넘버를 매핑하여 저장한 테이블일 수 있다.
복호화 키 생성부(31)는 제어 데이터가 저장되는 주소(Ta)를 8bit씩 구간을 나누고, 제어 데이터가 저장되는 주소에 대한 매핑 테이블(Mapping Table(Ta))로부터 각 구간이 나타내는 데이터와 매핑된 랜덤 넘버를 획득하며, 각 구간을 랜덤 넘버로 대체하여 제어 데이터가 저장되는 주소(Ta)의 복호화 키를 생성할 수 있다.
복호화 연산부(33)는 제어 데이터가 저장되는 주소(Ta)의 복호화 키 및 해당 주소에 저장되어 있는 고유 ID 간의 XOR 연산을 수행하여 제어 데이터의 값(Td)의 암호화 키를 획득할 수 있다. 복호화 연산부(33)는 제어 데이터가 저장되는 주소(Ta)의 복호화 키 및 해당 주소에 저장되어 있는 고유 ID 간의 XOR 연산 결과를 제어 데이터의 값(Td)의 암호화 키로 획득할 수 있다.
또한 복호화 연산부(33)는 제어 데이터의 값(Td)의 암호화 키를 복호화하여 제어 데이터의 값(Td)을 획득할 수 있다. 상술한 것처럼 제어 데이터의 값(Td)의 암호화 키는 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))에 의해 생성될 수 있다. 따라서 복호화 연산부(33)는 매핑 테이블(50)을 이용하여 제어 데이터의 값(Td)의 암호화 키를 복호화할 수 있다.
도 9를 참조하면, 매핑 테이블(50)은 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))의 역 매핑 테이블(Reverse Mapping Table(Tr))을 더 포함할 수 있다. 역 매핑 테이블(Reverse Mapping Table(Tr))은 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))에 따라 암호화 된 데이터를 획득할 수 있도록 구축된 테이블로, 예를 들면, 제어 데이터의 값(Td)에 대한 매핑 테이블(Mapping Table(Td))에 포함되는 랜덤 넘버 마다 8bit로 나뉜 제어 데이터의 값(Td)을 매핑하여 저장한 테이블일 수 있다.
복호화 연산부(33)는 제어 데이터의 값(Td)의 암호화 키를 8bit씩 구간을 나누고, 역 매핑 테이블(Reverse Mapping Table(Tr))로부터 각 구간이 나타내는 랜덤 넘버와 매핑된 데이터를 획득하며, 각 구간을 데이터로 대체하여 제어 데이터의 값(Td)을 획득할 수 있을 것이다.
호출부(35)는 제어 데이터의 값(Td)으로 제어 플로우를 변경할 수 있다. 호출부(35)는 프로그램 카운터로 제어 데이터를 호출하여 제어 데이터의 값(Td)으로 분기할 수 있다.
이와 같은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 프로세서의 기계어 명령 단계에서 제어 플로우를 변경하는 경우, 그 제어 데이터의 암호화 및 복호화를 함께 진행할 수 있다. 즉 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 프로세서의 기계어 명령 단계에서 제어 플로우의 무결성을 검증함으로써 컴퓨터 시스템을 보호할 수 있으며, 나아가 시스템 호출(system call) 또는 프로시저 호출(procedure call)과 같은 high-level에서 실행되는 소프트웨어 적 데이터 검증 방법에 수반되는 semantic gap의 한계를 극복하고, 소프트웨어 투과적(transparent)으로 다른 소프트웨어 또는 공격자에 의해 검증단계를 우회하거나 검증에 사용되는 변수 값이 변경되는 것을 방지할 수 있다.
아울러 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)는 매핑 테이블을 이용하여 암호화 및 복호화 키를 생성하고, 이를 이용하여 XOR 연산에 따라 암호화 및 복호화 단계를 진행하므로, 단순한 연산법에 의한 빠른 연산을 가능하게 하여 전체 프로세서의 성능 저하를 방지할 수 있다.
이하에서는 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법에 대하여 설명한다.
본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법은 도 1에 도시된 본 발명의 일 실시예예 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치(1)와 실질적으로 동일한 구성 하에서 진행될 수 있다. 따라서 도 1의 장치(1)와 동일한 구성요소는 동일한 도면부호를 부여하고 반복되는 설명은 생략한다.
도 10은 본 발명의 일 실시예에 따른 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법을 보여주는 흐름도이다.
도 10을 참조하면, 암호화부(10)는 제어 데이터를 암호화하여(S100), 메모리 영역에 암호화 된 제어 데이터를 저장할 수 있다(S200).
암호화부(10)는 메모리 영역의 특정 주소에 제어 데이터를 암호화하여 저장할 수 있다. 암호화부(10)는 매핑 테이블(50)을 이용하여 제어 데이터가 저장되는 메모리 영역의 주소 및 제어 데이터의 값 각각의 암호화 키를 생성하고, 생성한 암호화 키 간의 XOR 연산을 통해 제어 데이터의 값을 암호화할 수 있다. 암호화부(10)는 암호화 한 제어 데이터의 값을 고유 아이디로 하여 메모리 영역의 특정 주소에 저장할 수 있다.
한편 암호화부(10)가 제어 데이터를 암호화 및 저장하는 것을 예로 들어 설명하였으나 이에 한정하는 것은 아니며 제어 데이터 외에도 프로세서의 메모리 영역에 저장되는 모든 종류의 메모리 데이터가 적용될 수 있음은 물론이다.
복호화부(30)는 메모리 영역에 저장된 제어 데이터를 복호화하여(S300), 프로그램 카운터로 호출할 수 있다(S400).
복호화부(30)는 메모리 영역의 특정 주소로부터 제어 데이터를 불러 와서 제어 데이터의 값으로 지정된 주소로 분기할 수 있다. 복호화부(30)는 매핑 테이블(50)을 이용하여 메모리 영역의 특정 주소의 복호화 키를 생성하고, 복호화 키와 해당 주소에 저장된 고유 아이디 간의 XOR 연산을 통해 암호화 된 제어 데이터의 값을 획득하며, 매핑 테이블(50)을 이용하여 암호화 된 제어 데이터의 값을 복호화함으로써 제어 데이터의 값을 획득할 수 있다. 복호화부(30)는 제어 데이터를 프로그램 카운터로 호출하여 지정된 주소로 분기할 수 있다.
이와 같은, 본 발명의 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법은 어플리케이션으로 구현되거나 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거니와 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD 와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다.
프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서는 실시예들을 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
1: 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치
10: 암호화부
30: 복호화부
50: 매핑 테이블
10: 암호화부
30: 복호화부
50: 매핑 테이블
Claims (15)
- 소프트웨어를 실행하는 컴퓨터 프로세서가 상기 소프트웨어 보안을 위해 메모리 영역에 저장되는 데이터인 메모리 데이터를 암호화 및 복호화 하는 방법에 있어서,
암호화 기능이 주입된 기계어로 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계; 및
복호화 기능이 주입된 기계어로 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계를 포함하며,
상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계는,
메모리 데이터의 값 및 메모리 데이터가 저장되는 메모리 영역의 주소 각각에 랜덤 넘버를 매핑하여 저장한 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta) 각각의 암호화 키를 생성하는 단계;
상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산을 통해 상기 메모리 데이터를 암호화하는 단계;
상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산 결과를 상기 메모리 데이터에 대한 고유 ID로 획득하는 단계; 및
상기 고유 ID를 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)에 저장하는 단계를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법. - 제1항에 있어서,
상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 단계는,
상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)를 이용하여 상기 메모리 데이터를 암호화하는 단계를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법. - 삭제
- 삭제
- 삭제
- 제1항에 있어서,
상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계는,
메모리 데이터가 저장되는 메모리 영역의 주소 각각에 랜덤 넘버를 매핑하여 저장한 매핑 테이블을 이용하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키를 생성하는 단계;
상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키 및 암호화 된 상기 메모리 데이터 간의 배타적 논리합 연산을 통해 상기 메모리 데이터의 값(Td)의 암호화 키를 획득하는 단계; 및
상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하여 상기 메모리 데이터의 값(Td)을 획득하는 단계를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법. - 제6항에 있어서,
상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하여 상기 메모리 데이터의 값(Td)을 획득하는 단계는,
상기 메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블의 역 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하는 단계를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법. - 제1항에 있어서,
상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 단계는,
상기 컴퓨터 프로세서의 기계어 명령 단계 중 간접 분기 명령(indirect branch instruction) 단계인 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법. - 제1항, 제2항, 제6항 내지 제8항 중 어느 하나의 항에 따른 메모리 데이터의 암호화 및 복호화 방법을 수행하기 위한, 컴퓨터 프로그램이 기록된 컴퓨터로 판독 가능한 기록 매체.
- 소프트웨어를 실행하는 컴퓨터 프로세서에 포함되어 상기 소프트웨어 보안을 위해 메모리 영역에 저장되는 데이터인 메모리 데이터를 암호화 및 복호화 하는 장치에 있어서,
암호화 기능이 주입된 기계어로 상기 메모리 데이터를 암호화하여 상기 메모리 영역에 저장하는 암호화부; 및
복호화 기능이 주입된 기계어로 상기 메모리 영역에서 암호화 된 상기 메모리 데이터를 복호화하여 상기 메모리 데이터의 값으로 지정된 주소로 분기하는 복호화부를 포함하며,
메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블, 메모리 데이터가 저장되는 메모리 영역의 주소에 랜덤 넘버를 매핑하여 저장한 매핑 테이블 및 상기 메모리 데이터의 값에 랜덤 넘버를 매핑하여 저장한 매핑 테이블의 역 매핑 테이블로 구성되는 매핑 테이블을 더 포함하고,
상기 암호화부는,
상기 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td) 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta) 각각의 암호화 키를 생성하는 암호화 키 생성부;
상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산을 통해 상기 메모리 데이터를 암호화하는 암호화 연산부; 및
상기 메모리 데이터의 값(Td)의 암호화 키 및 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 암호화 키 간의 배타적 논리합 연산 결과를 상기 메모리 데이터에 대한 고유 ID로 하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)에 저장하는 저장부를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치. - 삭제
- 삭제
- 제10항에 있어서,
상기 복호화부는,
상기 매핑 테이블을 이용하여 상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키를 생성하는 복호화 키 생성부;
상기 메모리 데이터가 저장되는 메모리 영역의 주소(Ta)의 복호화 키 및 암호화 된 상기 메모리 데이터 간의 배타적 논리합 연산을 통해 상기 메모리 데이터의 값(Td)의 암호화 키를 획득하고, 상기 매핑 테이블을 이용하여 상기 메모리 데이터의 값(Td)의 암호화 키를 복호화하는 복호화 연산부; 및
상기 메모리 데이터의 값(Td)으로 제어 플로우를 변경하는 호출부를 포함하는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치. - 제10항에 있어서,
상기 암호화부는,
메모리 데이터의 저장 기능 및 암호화 기능을 갖는 명령어에 의해 실행되는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치. - 제10항에 있어서,
상기 복호화부는,
상기 컴퓨터 프로세서의 간접 분기 명령 단계에서 제어 플로우를 변경하는 명령어에 의해 실행되는 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190061810A KR102266342B1 (ko) | 2019-05-27 | 2019-05-27 | 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 |
US16/829,109 US12086278B2 (en) | 2019-05-27 | 2020-03-25 | Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020190061810A KR102266342B1 (ko) | 2019-05-27 | 2019-05-27 | 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20200136142A KR20200136142A (ko) | 2020-12-07 |
KR102266342B1 true KR102266342B1 (ko) | 2021-06-16 |
Family
ID=73550489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020190061810A KR102266342B1 (ko) | 2019-05-27 | 2019-05-27 | 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US12086278B2 (ko) |
KR (1) | KR102266342B1 (ko) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102421746B1 (ko) * | 2020-12-10 | 2022-07-15 | 한국항공우주연구원 | 메모리에 포함된 보안 데이터 영역의 통합 방법 |
CN112559097B (zh) * | 2020-12-28 | 2021-12-28 | 上海纬百科技有限公司 | 函数调用方法、装置及计算机可读存储介质 |
CN113312327A (zh) * | 2021-05-24 | 2021-08-27 | 何细妹 | 一种适用于移动端的云存储文件共享系统 |
KR102647140B1 (ko) | 2023-11-14 | 2024-03-13 | 주식회사 월드씨엔에스 | IoT 기반 실시간 이상 모니터링 및 진단이 가능한 LED 등기구 장치 및 시스템 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006023957A (ja) * | 2004-07-07 | 2006-01-26 | Sony Corp | 半導体集積回路及び情報処理装置 |
JP2007094728A (ja) * | 2005-09-28 | 2007-04-12 | Digital Electronics Corp | 情報処理装置、情報処理システム、プログラムおよび記録媒体 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH10320291A (ja) * | 1997-05-16 | 1998-12-04 | Taisei Corp | データ変換装置 |
KR101173761B1 (ko) | 2010-07-06 | 2012-08-20 | 고려대학교 산학협력단 | 프로그램의 외부 공격에 대한 공격 방어 및 탐지를 위한 장치 및 방법 |
CN103984637A (zh) * | 2013-02-07 | 2014-08-13 | 上海芯豪微电子有限公司 | 一种指令处理系统及方法 |
US20160335201A1 (en) * | 2014-01-28 | 2016-11-17 | Hewlett Packard Enterprise Development Lp | Data and instruction set encryption |
FR3047100B1 (fr) * | 2016-01-26 | 2018-03-02 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Methode de chiffrement d'un flot d'instructions et execution d'un flot d'instructions ainsi chiffre. |
FR3060789A1 (fr) * | 2016-12-19 | 2018-06-22 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Procede d'execution par un microprocesseur d'un code machine polymorphique d'une fonction predeterminee |
US20200143043A1 (en) * | 2018-11-07 | 2020-05-07 | Raytheon Company | Edge verification and elimination control flow integrity |
US11580234B2 (en) * | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
-
2019
- 2019-05-27 KR KR1020190061810A patent/KR102266342B1/ko active IP Right Grant
-
2020
- 2020-03-25 US US16/829,109 patent/US12086278B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006023957A (ja) * | 2004-07-07 | 2006-01-26 | Sony Corp | 半導体集積回路及び情報処理装置 |
JP2007094728A (ja) * | 2005-09-28 | 2007-04-12 | Digital Electronics Corp | 情報処理装置、情報処理システム、プログラムおよび記録媒体 |
Also Published As
Publication number | Publication date |
---|---|
US12086278B2 (en) | 2024-09-10 |
KR20200136142A (ko) | 2020-12-07 |
US20200380150A1 (en) | 2020-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102266342B1 (ko) | 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 | |
JP7101761B2 (ja) | コール・パス依存認証 | |
KR101216995B1 (ko) | 인덱스 테이블 기반 코드 암호화 및 복호화 장치 및 그 방법 | |
JP5785762B2 (ja) | 自己修正計算機コードのチェックサム検証のための方法、装置およびコンピュータ・プログラム担体 | |
KR102433011B1 (ko) | Apk 파일 보호 방법, 이를 수행하는 apk 파일 보호 시스템, 및 이를 저장하는 기록매체 | |
KR101687439B1 (ko) | 소프트웨어 무결성을 보장하기위한 프로세서 실행 방법 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
US8402448B2 (en) | Compiler system and a method of compiling a source code into an encrypted machine language code | |
CN104539432A (zh) | 一种对文件进行签名的方法和装置 | |
US20110202996A1 (en) | Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code | |
KR20160145014A (ko) | 하드웨어-기반 스택 제어 정보 보호 | |
US9116765B2 (en) | System and method for obfuscating data using instructions as a source of pseudorandom values | |
US11341282B2 (en) | Method for the execution of a binary code of a secure function by a microprocessor | |
US10862682B2 (en) | Nonce generation for encryption and decryption | |
US10120987B2 (en) | Device and method for executing protected iOS software modules | |
JP2024528585A (ja) | 暗号的に検証された命令に基づくソフトウェアのセキュアな実行 | |
Lin et al. | Control-flow carrying code | |
US11442738B2 (en) | Method for executing a machine code of a secure function | |
US11210135B2 (en) | Lightweight dispatcher for program control flow flattening | |
EP3944106A1 (en) | Obfuscating method of protecting code | |
KR102177920B1 (ko) | 원본코드 패킹장치 및 원본코드 패킹방법 | |
Sonnleitner et al. | Indirect Data Representation Via Offset Vectoring: A Code-integrity-driven In-memory Data Regeneration Scheme. | |
Togan et al. | Virtual machine for encrypted code execution | |
CN114266082A (zh) | 防御控制流攻击的装置、方法、处理器、设备及存储介质 | |
Park et al. | Control Flow Hardening with Program Counter Encoding for ARM® Processor Architecture |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |