KR100922862B1 - 명령어의 부호화를 통한 시스템 보안방법 - Google Patents

명령어의 부호화를 통한 시스템 보안방법 Download PDF

Info

Publication number
KR100922862B1
KR100922862B1 KR1020070116182A KR20070116182A KR100922862B1 KR 100922862 B1 KR100922862 B1 KR 100922862B1 KR 1020070116182 A KR1020070116182 A KR 1020070116182A KR 20070116182 A KR20070116182 A KR 20070116182A KR 100922862 B1 KR100922862 B1 KR 100922862B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
command
encoding
encoded
Prior art date
Application number
KR1020070116182A
Other languages
English (en)
Other versions
KR20090049857A (ko
Inventor
김종태
윤석민
Original Assignee
성균관대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 성균관대학교산학협력단 filed Critical 성균관대학교산학협력단
Priority to KR1020070116182A priority Critical patent/KR100922862B1/ko
Priority to US12/027,740 priority patent/US20090125728A1/en
Publication of KR20090049857A publication Critical patent/KR20090049857A/ko
Application granted granted Critical
Publication of KR100922862B1 publication Critical patent/KR100922862B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions

Landscapes

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

Abstract

본 발명은 명령어의 부호화를 통한 시스템 보안방법에 관한 것으로, 시스템 개발자에 의해 작성된 명령어를 암호화모듈을 통하여 부호화하여 저장하고, 부호화된 명령어를 복호화모듈을 통하여 복호하되, 명령어의 부호화 단계에서는 시스템 개발자에 의해 작성된 명령어 집합에서 명령어들의 시간적인 선후관계를 사용하여 부호화된 명령어를 생성하는 것을 특징으로 한다.
이와 같은 구성을 구비함으로써, 불필요한 메모리 오버헤드를 줄이고 보안화된 프로그램의 개발과정을 간단하게 할 수 있으며, 외부의 소프트웨어 또는 하드웨어적 공격에 대해서 명령어의 개별적인 보안뿐만 아니라 프로그램의 비정상적인 흐름을 방지할 수 있게 된다.
부호화, 복호화, 명령어, 연관성, 임베디드 시스템

Description

명령어의 부호화를 통한 시스템 보안방법{SECURITY METHOD OF SYSTEM BY  ENCODING INSTRUCTIONS}
본 발명은 명령어의 부호화를 통한 시스템 보안방법에 관한 것으로, 더욱 상세하게는 명령어들의 시간적인 선후관계(이하 '명령어들 사이의 연관성'이라 한다)를 이용하여 명령어들을 암호화 또는 복호화 함으로써, 공격자가 불법적인 프로그램을 실행하여 대상이 된 임베디드 시스템을 물리적 혹은 소프트웨어적인 기법으로 공격하는 것을 방지할 수 있는 시스템 보안방법에 관한 것이다.
일반적으로 임베디드 시스템(embedded system)이란 특정한 제품이나 솔루션에서 주어진 작업을 수행할 수 있도록 추가로 탑재되는 솔루션이나 시스템을 의미한다. 예컨대, 첨단 기능이 들어 있는 컴퓨터, 가전제품, 공장자동화 시스템, 엘리베이터, 휴대폰 등 현대의 각종 전자·정보·통신 기기는 대부분 임베디드 시스템을 갖추고 있다.
최근에는 임베디드 시스템이 인터넷에 연결됨에 따라 임베디드 시스템에서의 보안문제가 대두되고 있다. 종래 임베디드 시스템에서의 보안에 관한 연구는 소프트웨어적인 공격에 대비한 기술이 근간을 이루어 왔기 때문에, 상대적으로 하드웨어적인 공격에는 무방비 상태가 되어 중요한 정보가 공격자에게 쉽게 공개되어 버리는 문제가 있었다. 특히, 휴대폰, PDA 등과 같은 정보의 저장과 처리, 통신을 위한 장치가 널리 사용되면서, 이들 휴대용 기기를 이용하는 소비자들은 하드웨어 공격에 의한 잠재적 보안 위협에 대한 대책을 요구하기 시작하였으며, 이에 따라 하드웨어적인 공격에도 보안성을 보장하는 보안 프로세서에 대한 개발이 필요하게 되었다.
지금까지 임베디드 시스템의 보안 프로세서에 관한 연구는 메모리에 저장된 명령어를 개별적으로 보호하거나, 또는 실행되는 프로그램의 흐름을 감시하는 방법으로 진행되었다.
이와 관련하여, A. Murat Fiskiran 등은 "Runtime Execution Monitoring(REM) to Detect and Prevent Malicious Code Execution"(ICCD, 2004)에서 HMAC 알고리즘을 이용한 블록단위의 해싱을 통하여 실행명령어를 인증하는 기술을 개시하였다. 또한, A. Divya 등은 "Secure Embedded Processing through Hardware-Assisted Run-Time Monitoring"(p.178-183, 2005)에서 명령어의 실행흐름을 감시하여 명령어의 침해여부를 탐지하는 기술을 개시하였다. 이는 실행 전 컴파일단계에서 명령어의 흐름을 FSM(Finite State Machine)화하여 프로세서 외부의 FPGA(Field-Programmable Gate Array)에 저장한 후, FPGA를 참고하여 프로그램의 명령어 흐름을 모니터링함으로써 비정상적인 명령어의 흐름을 방지할 수 있도록 한 것이다. 그러나 상기 기술은 프로그램 상의 분기 이상을 검사하기 위하여 매 프로그램마다 FPGA의 내용을 갱신하여야 하므로, 보안화된 프로그램의 개발과정이 복잡하다는 단점이 있었다.
더욱이, 상기 선행 기술들에서와 같이 해시함수 또는 암호알고리즘을 사용하여 개별 명령어 또는 명령어 그룹을 암호화하거나, 시스템에 적재된 프로그램의 명령어 흐름을 모니터링하여 비정상적인 명령어의 흐름을 방지하도록 한 기술을 채택한 보안프로세서의 경우, 시스템의 보안이 암호화에 사용된 비밀키나 해시함수의 값에 전적으로 의존하게 되므로, 시스템 버스의 도청 등과 같은 하드웨어 공격을 통해 비밀키나 해시값이 유출될 경우 보안성이 쉽게 파괴될 수 있다는 문제점이 있었다.
본 발명은 상기한 바와 같은 문제점을 해결하기 위하여 안출된 것으로, 시간적으로 선후관계에 있는 명령어들 사이의 연관성을 이용하여 명령어를 부호화함으로써, 명령어 수준에서 비정상적인 프로그램의 실행을 방지하여 시스템의 보안성을 높일 수 있는 명령어의 부호화를 통한 시스템 보안방법을 제공하는 데에 발명의 목적이 있다.
또한, 본 발명은 시간적으로 선후관계에 있는 명령어들 사이의 연관성을 이용하여 명령어를 부호화함으로써, 불필요한 메모리 오버헤드를 줄이고 보안화된 프 로그램의 개발과정을 간단하게 할 수 있는 명령어의 부호화를 통한 시스템 보안방법을 제공하는 것을 발명의 목적으로 한다.
상술한 목적을 달성하기 위하여, 본 발명에 의한 명령어의 부호화를 통한 시스템 보안방법은, 시스템 개발자에 의해 작성된 명령어를 암호화모듈을 통하여 컴파일링 단계에서 부호화하여 저장하되, 명령어의 부호화 단계에서 시스템 개발자에 의해 작성된 명령어 집합에서 명령어들의 시간적인 선후관계(이하 '명령어들 사이의 연관성'이라 함)를 사용하여 부호화된 명령어를 생성하는 것을 특징으로 한다.
또한, 상기한 명령어의 부호화를 통한 시스템 보안방법에 있어서, 상기 명령어들 사이의 연관성은, 현재시간의 명령어, 현재시간의 명령어와 시간적으로 인접한 이전시간의 명령어 및 현재시간의 명령어와 시간적으로 인접한 다음시간의 명령어의 관계에 기초하여 생성될 수 있다.
바람직하게는, 상기 명령어의 부호화는,
C(t)=Ek(I(t), I(t-1), C(t+1))의 연산식에 따라 부호화될 수 있다. (여기서, C(t)는 부호화된 현재시간의 명령어, 함수 E는 k를 비밀키로 하여 부호화하는 함수, I(t)는 현재시간의 명령어, I(t-1)는 이전시간의 명령어, C(t+1)는 부호화된 다음시간의 명령어 임)
또한, 상기 명령어의 부호화에 사용되는 함수(E)는, 암호화 함수 또는 역연 산이 가능한 해시함수로 이루어질 수 있다.
한편, 상술한 명령어의 부호화를 통한 시스템 보안방법은, 명령어들 사이의 연관성이 프로그램의 시작점 및 종료점에서 단절되는 것을 막기 위하여, 최선(最先) 명령어가 저장된 메모리 주소의 인접한 이전 메모리 주소와 최후(最後) 명령어가 저장된 메모리 주소의 인접한 다음 메모리 주소에는 매직넘버(magic number)를 삽입하여 프로그램의 시작점 및 종료점을 부호화하도록 구성될 수 있다.
또한, 상기 명령어의 부호화를 통한 시스템 보안방법에서는, 명령어들 사이의 연관성이 프로그램의 분기점에서 단절되는 것을 막기 위하여, 분기명령어가 실행될 때마다 그 분기의 목적주소에 프로그램의 자체기능에 영향을 미치지 않는 명령어를 삽입하여 부호화하는 구성이 추가적으로 구비될 수 있다.
여기서, 프로그램의 자체기능에 영향을 미치지 않는 명령어는 무연산 명령어(No Operation)로 구성할 수 있다.
한편, 본 발명의 시스템 보안방법에서는, 부호화된 명령어를 복호화모듈을 통하여 복호할 때, 명령어들 사이의 연관성을 사용하여 부호화된 명령어를 복호화하는 구성으로 이루어진다.
이 경우, 부호화된 현재시간의 명령어는,
I(t)=Dk(C(t), I(t-1), C(t+1))의 연산식에 따라 복호되도록 구성될 수 있다. (여기서, I(t)는 현재시간의 명령어, 함수 D는 k를 비밀키로 하여 복호하는 함수, C(t)는 부호화된 현재시간의 명령어, I(t-1)는 이전시간의 명령어, C(t+1)는 부호 화된 다음시간의 명령어 임)
또한, 상기 부호화된 명령어의 복호화에 사용되는 함수(D)는, 암호화 함수 또는 역연산이 가능한 해시함수로 이루어질 수 있다.
본 발명에 의한 명령어의 부호화를 통한 시스템 보안방법에 의하면, 명령어들 사이의 연관성을 사용하여 명령어를 부호화함으로써, 추가로 발생하는 메모리 오버헤드가 없으며 간단하게 보안화된 프로그램을 개발할 수 있는 효과가 있다.
더욱이, 외부의 소프트웨어 또는 하드웨어적 공격에 대해서 명령어의 개별적인 보안뿐만 아니라 프로그램의 비정상적인 흐름을 방지할 수 있기 때문에, 시스템의 보안성을 한층 높일 수 있게 되어 임베디드 시스템의 사용자들이 보안위협 없이 안심하고 시스템을 사용할 수 있게 해주는 이점이 있다.
이하 본 발명의 바람직한 실시예를 첨부한 도면을 참조하면서 상세히 설명한다.
도 1은 본 발명이 적용되는 임베디드 시스템의 보안모델을 나타낸다.
도 1에 도시된 바와 같이, 본 발명이 적용되는 임베디드 시스템은 프로세서(100)의 내부는 침해에 대하여 매우 안전하다고 가정하지만, 외부버스(101), 주 변장치(102), 메모리(103) 등 프로세서의 외부 주변기기는 소프트웨어 및 하드웨어적 공격 모두에 취약하다고 전제한다. 여기서 본 발명에 의한 명령어의 부호화를 통한 시스템 보안방법은, 프로세서의 내부에서 명령어의 암호화 및 무결성 점검을 수행하게 되는 보안 프로세서에 적용됨으로써, 프로세서의 외부 주변기기에 공격이 발생하여 명령어에 침해가 발생했을 때 그 침해를 감지하여 비정상적인 프로그램이 실행되는 것을 방지할 수 있게 한다.
본 발명에 의한 명령어의 부호화를 통한 시스템 보안방법이 적용되는 보안 프로세서의 구조에 대한 이해를 돕기 위하여, 도 2에 종래 암호화모듈 기반의 보안프로세서 구조를 나타내었다.
도시된 바와 같이, 종래의 보안 프로세서는 암호화모듈(201)에서 암호화 알고리즘 등을 통하여 프로그램 코드를 전체적 또는 부분적으로 암호화하여 메모리(200)에 저장하고, 복호화모듈(202)에서는 암호화된 프로그램 코드를 복호화하여 프로그램이 실행되도록 함으로써 프로그램의 변조 여부를 동적으로 감시할 수 있는 구성으로 이루어진다.
본 발명에 의한 명령어의 부호화를 통한 시스템 보안방법은, 기본적으로 도 2에 도시된 바와 같은 암호화 및 복호화 보안 프로세서의 구조를 따르지만, 구체적으로 컴파일 단계에서 프로그램의 실행순서정보를 부호화하고 이를 프로그램 실행 단계에서 검증한다는 점에서 차이가 있다. 즉, 본 발명은 프로그램을 구성하는 명령어들의 실행순서를 명령어들 사이의 연관성을 이용하여 부호화함으로써, 해당 명령어가 시간적 및 공간적으로 인접한 다른 명령어들과의 연관성이 단절된 비정상적인 명령어일 경우, 해당 시스템(프로세서)에서 상기 비정상적인 명령어가 실행되는 것을 사전에 차단하도록 구성된다.
해당 시스템(프로세서)에서 수행되는 명령어가 정상이고, 그 수행순서도 정상인지를 판별할 수 있는 기본적인 논리는 다음의 판단과정에 근거한다.
제1단계: 시간 t-1에서 수행된 명령어는 정상적인 명령어이다. 즉, 정상적으로 개발자로부터 의도된 명령어이다. 여기서, 시간 t-1이란 현재시간인 시간 t를 기준으로 한 단계 과거의 시간을 의미한다.
제2단계: 시간 t에서 수행중인 현재시간의 명령어는 시간 t-1에서 수행된 명령어 다음에 수행되어야 하는 명령어이다. 즉, 정상적으로 프로그램의 개발자가 의도한 순서이다.
제3단계: 시간 t+1에서 수행 예정인 명령어는 시간 t 다음에 수행될 명령어이다. 이 또한 정상적으로 개발자로부터 의도된 명령어 실행의 순서이다. 여기서, 시간 t+1이란 현재시간인 시간 t에 비하여 한 단계 미래의 시간을 의미한다.
상기 제1단계 내지 제3단계에서 기술한 바와 같이, 프로세서는 현재 수행되는 명령어가 이전에 수행된 명령어와 연관성을 가지고 있고, 더불어 다음에 수행되는 명령어와도 연관성을 가지고 있는지를 연속적으로 확인함으로써, 현재 자신이 수행중인 명령어가 개발자가 의도한 정상적인 프로그램의 동작에 해당하는 것인지의 여부를 판단하게 된다. 따라서 이러한 연관성이 단절되는 경우 현재 수행되는 명령어는 비정상적인 명령어로 단정할 수 있게 되는 것이다.
예시로서, 도 3에 나타낸 바와 같은 프로그램 명령어 코드가 주어진다고 가 정하면, 정상적인 동작상황에서 프로그램 명령어 코드 (a)는 메모리주소 0x2000018에 저장된 분기 명령어(bne)의 조건식 결과에 따라 명령어 코드 (b)와 (c) 두 가지의 실행순서를 가진다. 상기 두 가지 이외의 명령어 실행순서는 명령어 수준에서 침해를 받았다고 단정할 수 있는 것이다.
이와 같이, 프로세서가 각 명령어를 실행하기 전에 해당 명령어의 변조여부와 그 명령어의 실행이 정상실행 순서인지 여부를 사전에 판별할 수 있다면, 소프트웨어적 기법 및 하드웨어적 기법을 통해 시스템에 가해지는 보안 위협을 효과적으로 방지할 수 있게 된다.
상기한 관점에 착안하여, 본 발명의 일 실시예에서는 시스템 개발자에 의해 작성된 명령어를 암호화모듈을 통하여 컴파일링 단계에서 부호화하여 저장하고, 부호화된 명령어를 복호화모듈을 통하여 복호화 하는 보안 프로세서에 적용되는 명령어의 부호화방법을 제시한다. 즉, 본 발명에 의하면 암호화모듈에서의 명령어 부호화과정은 시스템 개발자에 의해 작성된 명령어 집합에서 명령어들 사이의 시간적인 선후관계(이하, '명령어들 사이의 연관성'이라고 함)를 사용하여 명령어를 부호화하도록 구성된다.
도 4에 명령어들 사이의 연관성을 이용한 명령어의 부호화과정을 예시로서 나타내었다. 여기서는 프로세서가 단위시간에 하나의 명령어만을 페치(fetch)한다고 가정한다. 도시된 바와 같이, 현재시간의 명령어(400)와, 현재시간의 명령어(400)와 시간적으로 인접한 이전시간의 명령어(401) 및 현재시간의 명령어(400)와 시간적으로 인접한 다음시간의 부호화된 명령어(402)의 내용이 상호 연관되어 부호화함수(403)를 통해 부호화된 현재시간의 명령어(404)를 생성할 수 있다.
즉, 현재시간 t를 기준으로 각 명령어들은 다음의 수학식에 의해 부호화 연산될 수 있다.
C(t)=Ek(I(t), I(t-1), C(t+1))
상기 연산식에서, C(t)는 부호화된 현재시간의 명령어, 함수 E는 k를 비밀키로 하여 부호화하는 함수, I(t)는 현재시간의 명령어, I(t-1)은 이전시간의 명령어, C(t+1)는 부호화된 다음시간의 명령어를 나타낸다.
한편, 상기 명령어의 부호화에 사용되는 함수(E)는, 예컨대 AES, DES 등의 암호화 함수 또는 역연산이 가능한 해시함수로 구성할 수 있다.
상술한 바와 같이 명령어들 사이의 연관성을 이용하여 부호화된 각각의 명령어들은, 상기 부호화과정과 마찬가지로 복호화모듈에서 명령어들 사이의 연관성을 이용하여 복호된다.
도 5에 명령어들 사이의 연관성을 이용한 명령어의 복호화과정을 예시로서 나타내었다. 도시된 바와 같이, 부호화된 현재시간의 명령어(404)와, 이전시간의 명령어(401) 및 부호화된 다음시간의 명령어(501)의 내용이 상호 연관되어 복호화함수(503)를 통해 현재시간의 명령어(400)를 생성할 수 있다.
즉, 현재시간 t를 기준으로 각 명령어들은 다음의 수학식에 의해 복호화 연산될 수 있다.
I(t)=Dk(C(t), I(t-1), C(t+1))
상기 연산식에서, I(t)는 현재시간의 명령어, 함수 D는 k를 비밀키로 하여
복호하는 함수, C(t)는 부호화된 현재시간의 명령어, I(t-1)은 이전시간의 명령어, C(t+1)는 부호화된 다음시간의 명령어를 나타낸다.
또한, 상기 명령어의 복호화에 사용되는 함수(D)는, 예컨대 AES, DES 등의 암호화 함수 또는 역연산이 가능한 해시함수로 구성할 수 있다.
본 발명에서와 같이 명령어들 사이의 연관성을 사용하여 명령어를 부호화 및 복호화 하도록 구성할 경우, 추가로 발생하는 메모리 오버헤드가 없으며 간단하게 보안화된 프로그램을 개발할 수 있는 이점이 있다. 더욱이, 외부에서 소프트웨어 또는 하드웨어적 공격을 통해 명령어를 변경(침해)하는 것이 불가능하게 되어 대상 시스템의 보안성을 한층 높일 수 있게 된다.
예컨대, 본 발명이 적용된 시스템에서, 외부 공격자가 현재시간의 명령어를 부호화한 코드 C(t)를 복호하여 현재시간의 명령어 I(t)를 변경하고, 이를 다시 부 호화하여 C'(t)로 변경하여 메모리에 저장하거나 버스라인의 도청 등을 통하여 프로세서로 명령을 주입하는 공격상황이 발생했다고 가정하면, 본 발명에서와 같이 명령어들이 서로 연관성을 가지고 부호화되어 있을 경우, 우선 이전 시간의 명령어를 부호화한 코드 C(t-1)는 정상적인 복호가 불가능하게 된다. 이는 부호화에 사용되었던 C(t)가 변경되었기 때문이다.
따라서, 공격자는 의도한 비정상적인 프로그램이 시스템에서 실행되도록 하려면, 마찬가지 방법으로 C(t-1)를 복호화하여 이전시간의 명령어 I(t-1)을 변경하고, 이를 다시 부호화하여 C'(t-1)로 변경한 후 프로세서에 주입하는 등의 행위를 하여야 한다. 즉, C(t)를 변경하면 C(t-1)도 변경되어야 하고, C(t-1)가 변경되면 C(t-2)도 변경되어야 하는 등, 하나의 명령어가 변조되면 공격시점으로부터 프로그램의 시작점까지의 모든 부호화된 코드가 변경되어야 한다.
그러나 시간적으로 앞서 있는 명령어, 즉 프로세서의 파이프라인에 저장되어 있는 코드를 현재 시점에서 변경하는 것은 불가능하다. 따라서 공격에 의해 특정 명령어가 침해되었다면, 명령어들은 제대로 복호되지 않을 것이고, 명령어가 제대로 복호되지 않았기 때문에, 프로그램이 정상적으로 실행될 수 없게 된다. 이로써, 사용자는 시스템에 공격상황이 발생하였다는 것을 인지할 수 있게 된다.
본 발명에서 명령어의 부호화 및 복호화에 명령어들 사이의 연관성을 사용한다고 하는 것은, 공간적 및 시간적으로 선후관계에 있는 명령어들 사이의 연관성을 연속적으로 확인한다는 것을 의미한다. 그러나 실제 정상적인 프로그램에서 명령어 들 사이의 연관성은 프로그램 자체의 본질적인 특성으로 단절되는 경우가 발생한다. 그 예로서, 프로그램의 시작점, 프로그램의 종료점 및 프로그램 내의 분기 명령어 등이 있다. 이러한 연관성의 단절은 외부의 공격자들에게 명령어 침해의 빌미를 제공하게 되어 문제가 되는바, 이하에서는 명령어들 사이의 연관성이 단절되는 경우의 취약점을 해결하기 위한 본 발명의 다른 실시예를 설명한다.
먼저, 도 6의 실시예에서는 프로그램의 시작점과 프로그램의 종료점에서 명령어들 사이의 연관성이 단절되는 경우의 해결방법을 나타내었다.
도시된 바와 같이, 프로그램의 시작점(600)은 그 이전시간의 명령어가 존재하지 않아 이전 명령어와의 연관성을 확인할 수 없으며, 프로그램의 종료점(601)은 그 다음시간의 명령어가 존재하지 않아 다음 명령어와의 연관성을 확인할 수 없으므로, 명령어의 연관성이 단절될 수 있는 문제가 있다. 본 실시예에서는 프로그램의 시작점 및 종료점에 명령어의 보안화 과정에서 사용자만이 알고 있는 번호(이하 '매직넘버'(magic number)라 함)를 삽입함으로써 이러한 문제를 해결한다.
즉, 본 발명에서는 프로그램의 시작점인 최선(最先)명령어가 저장된 메모리 주소의 인접한 이전 메모리 주소와, 프로그램의 종료점인 최후(最後) 명령어가 저장된 메모리 주소의 인접한 다음 메모리 주소에 매직넘버를 각각 삽입하여 프로그램의 시작점 및 종료점을 부호화하도록 구성한다.
예컨대, 도 6에서와 같이 m개의 명령어를 가지는 프로그램의 경우, 프로그램 의 시작점(600)인 I1의 부호화에 사용되는 입력은 현재시간의 명령어 I1와 시작점의 매직넘버(602)인 M1 및 다음 명령어의 부호화된 코드 C2가 된다. 그리고 프로그램의 종료점(601)인 Im은 현재시간의 명령어 Im와, 이전시간의 명령어 Im -1 및 종료점의 매직넘버(603) M2를 입력으로 하여 부호화될 수 있다. 이렇듯 본 발명에서와 같이 프로그램의 시작점과 종료점에 매직넘버를 삽입하면, 프로그램의 시작점과 종료점에서 명령어의 연관성이 단절되는 상황을 방지할 수 있게 된다.
다음으로, 프로그램 내의 분기 명령어의 존재로 인하여 연관성이 단절되는 경우의 해결방법에 대해 설명한다.
분기 명령어는 무조건 분기 명령어와 조건 분기 명령어로 구분된다. 무조건 분기 명령어는 조건식 없이 프로그램의 특정 어드레스로 분기하여 명령어를 실행하기 때문에 명령어의 연관성이 단절된다. 한편, 조건 분기 명령어는 조건식이 거짓(false)일 경우에는 다음시간의 명령어를 수행하게 되어 명령어와의 연관성이 단절되지 않지만, 조건식이 참(true)일 경우에는 프로그램의 특정 어드레스로 분기하여 다른 부분의 명령어가 실행되므로 연관성이 단절되게 된다.
이와 같이 분기 명령어에 의해 명령어들 사이의 연관성이 단절되는 경우에 대처하기 위하여, 본 발명에서는 분기명령어가 실행될 때마다 그 분기의 목적주소에 프로그램의 자체기능에 영향을 미치지 않는 명령어를 삽입하여 부호화하도록 구성한다. 바람직하게는, 상기 프로그램의 자체기능에 영향을 미치지 않는 명령어로 서, 무연산(No Operation) 명령어를 삽입할 수 있다.
예컨대, 도 3에 나타낸 프로그램에서와 같이 메모리주소 0x2000018에 분기 명령어(bne)가 존재할 경우, 본 발명에서는 분기명령어의 목적주소인 0x2000008에 프로그램의 자체기능에 영향을 미치지 않는 명령어를 삽입하여 부호화한다. 이 경우의 프로그램 명령어 코드를 도 7에 나타내었다. 도 7은 분기 명령어의 목적주소에 무연산(NOP, No Operation) 명령어(700)가 삽입된 상태를 나타낸다.
이와 같이 프로그램의 분기점에 무연산 명령어가 삽입된 경우, 분기 명령이 실행되면 항상 무연산 명령이 실행되게 된다. 이때 삽입된 무연산 명령어는 이전시간의 명령어 및 다음시간의 명령어와 연관성을 가지고 있어서, 분기점에서 명령어간의 연관성이 단절되는 것을 방지할 수 있게 된다. 한편, 일반적으로 무연산 명령어는 오퍼랜드를 갖지 않으므로, 그 자리에 패리티(parity)를 저장하여 별도의 비교과정을 첨부할 수도 있다.
분기 명령을 처리하기 위한 무연산 명령어의 삽입은 프로그램의 크기를 증가시키는 요인이 될 수 있다. 그러나 이는 프로그램의 보안화 과정에서 발생하는 불가피한 오버헤드로 간주되어야 할 것이다.
상술한 바와 같이 본 발명의 명령어의 부호화를 통한 시스템 보안방법에 의하면, 시간적으로 선후관계에 있는 명령어들이 서로 연관성을 가지고 부호화되어 있기 때문에, 외부의 공격자가 암호화된 특정 명령어를 침해하여 비정상적인 프로그램을 실행시키는 것이 불가능해진다. 따라서 명령어 수준의 공격으로부터 시스템 을 안전하게 보호할 수 있게 되며, 궁극적으로는 소비자들이 소프트웨어 뿐 아니라 하드웨어적인 공격에 의한 보안 위협 없이 안심하고 휴대용 기기를 이용할 수 있게 해준다.
이상 본 발명을 특정의 바람직한 실시예에 대해서 도시하고 설명하였다. 그러나 본 발명은 상술한 실시예에 국한되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자라면 다음의 청구범위에 기재된 본 발명의 기술적 사상을 벗어남이 없이 얼마든지 다양하게 변경실시할 수 있을 것이다.
도 1은 본 발명이 적용되는 임베디드 시스템의 보안모델을 나타내는 도면, 도 2는 종래의 암호화 모듈기반의 보안프로세서의 구조를 나타내는 블록도, 도 3은 분기명령에 따른 정상적인 프로그램의 실행경로를 설명하기 위해 프로그램 코드를 예시적으로 나타내는 도면,
도 4는 본 발명의 일실시예에 따른 명령어의 부호화 과정을 나타내는 블록도,
도 5는 본 발명의 일실시예에 따른 명령어의 복호화 과정을 나타내는 블록도,
도 6은 본 발명의 다른 실시예에 따라 프로그램의 시작점과 종료점에서의 문제점을 보완하기 위한 방법을 나타내는 도면,
도 7은 본 발명의 또 다른 실시예에 따라 프로그램의 분기점에서의 문제점을 보완하기 위한 방법을 나타내는 도면.
*도면의 주요 부분에 대한 부호의 설명*
100 : 프로세서 101 : 외부버스
102 : 주변장치 103 : 메모리
200 : 메모리 201 : 암호화모듈
202 : 복호화모듈 400 : 현재시간의 명령어
401 : 이전시간의 명령어 402 : 다음시간의 명령어
403 : 부호화함수 404 : 부호화된 현재시간의 명령어
501 : 부호화된 다음시간의 명령어
600 : 프로그램의 시작점 601 : 프로그램의 종료점
602 : 시작점의 매직넘버 603 : 종료점의 매직넘버
700 : 무연산 명령어

Claims (11)

  1. 프로그램 명령어를 암호화모듈을 통하여 컴파일링 단계에서 부호화하여 저장하고, 부호화된 명령어를 복호화모듈을 통하여 복호화하여 실행함으로써, 외부 공격에 의한 불법적인 프로그램의 실행으로부터 대상 시스템을 보호하는 명령어의 부호화를 통한 시스템 보안방법으로서,
    명령어의 부호화 단계에서는, 프로그램 명령어 집합에서 명령어들 사이의 연관성(명령어들의 실행 순서 선후관계)을 사용하여 부호화된 명령어를 생성하는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  2. 제1항에 있어서,
    상기 명령어들 사이의 연관성은, 일 명령어와, 일 명령어 실행 이전에 실행된 명령어 및 일 명령어 실행 이후에 실행될 명령어의 관계에 기초하여 생성되는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  3. 제2항에 있어서,
    일 명령어는,
    C(t)=Ek(I(t), I(t-1), C(t+1))
    (여기서, C(t)는 부호화된 일 명령어, 함수 E는 k를 비밀키로 하여 부호화하는 함수, I(t)는 일 명령어, I(t-1)은 일 명령어 실행 이전에 실행된 명령어, C(t+1)는 부호화된 일 명령어 실행 이후에 실행될 명령어)
    의 연산식에 따라 부호화되는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법..
  4. 제3항에 있어서,
    상기 명령어의 부호화에 사용되는 함수(E)는, 암호화 함수 또는 역연산이 가능한 해시함수인 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    명령어들 사이의 연관성이 프로그램의 시작점 및 종료점에서 단절되는 것을 막기 위하여, 최선(最先) 명령어가 저장된 메모리 주소의 인접한 이전 메모리 주소와 최후(最後) 명령어가 저장된 메모리 주소의 인접한 다음 메모리 주소에는 임의의 번호를 삽입하여 프로그램의 시작점 및 종료점을 부호화하는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  6. 제1항 내지 제4항 중 어느 한 항에 있어서,
    명령어들 사이의 연관성이 프로그램의 분기점에서 단절되는 것을 막기 위하여, 분기명령어가 실행될 때마다 그 분기의 목적주소에 프로그램의 자체기능에 영향을 미치지 않는 명령어를 삽입하여 부호화하는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  7. 제6항에 있어서,
    상기 프로그램의 자체기능에 영향을 미치지 않는 명령어는 무연산 명령어(No Operation)인 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  8. 제1항에 있어서,
    부호화된 명령어의 복호화 단계에서는, 명령어들 사이의 연관성을 사용하여 부호화된 명령어를 복호하는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  9. 제8항에 있어서,
    상기 명령어들 사이의 연관성은, 일 명령어와, 일 명령어 실행 이전에 실행된 명령어 및 일 명령어 실행 이후에 실행될 명령어의 관계에 기초하여 생성되는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  10. 제9항에 있어서,
    부호화된 일 명령어는,
    I(t)=Dk(C(t), I(t-1), C(t+1))
    (여기서, I(t)는 일 명령어, 함수 D는 k를 비밀키로 하여 복호하는 함수, C(t)는 부호화된 일 명령어, I(t-1)은 일 명령어 실행 이전에 실행된 명령어, C(t+1)는 부호화된 일 명령어 실행 이후에 실행될 명령어)
    의 연산식에 따라 복호화되는 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
  11. 제10항에 있어서,
    상기 부호화된 명령어의 복호화에 사용되는 함수(D)는, 암호화 함수 또는 역 연산이 가능한 해시함수인 것을 특징으로 하는 명령어의 부호화를 통한 시스템 보안방법.
KR1020070116182A 2007-11-14 2007-11-14 명령어의 부호화를 통한 시스템 보안방법 KR100922862B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020070116182A KR100922862B1 (ko) 2007-11-14 2007-11-14 명령어의 부호화를 통한 시스템 보안방법
US12/027,740 US20090125728A1 (en) 2007-11-14 2008-02-07 Security method of system by encoding instructions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020070116182A KR100922862B1 (ko) 2007-11-14 2007-11-14 명령어의 부호화를 통한 시스템 보안방법

Publications (2)

Publication Number Publication Date
KR20090049857A KR20090049857A (ko) 2009-05-19
KR100922862B1 true KR100922862B1 (ko) 2009-10-20

Family

ID=40624858

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070116182A KR100922862B1 (ko) 2007-11-14 2007-11-14 명령어의 부호화를 통한 시스템 보안방법

Country Status (2)

Country Link
US (1) US20090125728A1 (ko)
KR (1) KR100922862B1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102959556B (zh) * 2010-07-22 2015-12-16 纳格拉影像股份有限公司 用于确保软件完整性的处理器实现的方法
US9547758B2 (en) 2014-05-19 2017-01-17 Nxp B.V. Program cable obfuscation based upon recently executed program code
KR101611199B1 (ko) 2014-07-30 2016-04-27 (주)우리 레이저를 이용한 뜸 점화장치
CN108217349B (zh) * 2017-12-06 2020-10-13 上海新时达电气股份有限公司 一种电梯预先授权控制系统及调试方法
KR102160950B1 (ko) * 2020-03-30 2020-10-05 주식회사 이글루시큐리티 보안취약점 점검 시 데이터 분산처리 시스템 및 그 방법
EP4002165A1 (en) * 2020-11-18 2022-05-25 Thales DIS France SA Code flow protection with error propagation

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030037423A (ko) * 2001-11-05 2003-05-14 한국전자통신연구원 보안 전송 계층의 사전 연관 설정을 이용한 에이에이에이시스템의 이중화 방법
KR20050111290A (ko) * 2004-05-21 2005-11-24 엔에이치엔(주) 명령어의 유효성 판단 방법 및 그 시스템
KR20060021370A (ko) * 2003-06-13 2006-03-07 에이알엠 리미티드 다수의 명령어 세트를 갖는 데이터 처리 장치 내에서의명령어 부호화
KR20060075226A (ko) * 2004-12-28 2006-07-04 삼성전자주식회사 암호화된 명령어와 데이터가 저장되는 외부 메모리를포함하는 시스템

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4027482B2 (ja) * 1997-12-24 2007-12-26 富士通株式会社 暗号復元を行う翻訳装置およびその方法
US6782478B1 (en) * 1999-04-28 2004-08-24 Thomas Probert Techniques for encoding information in computer code
US6594761B1 (en) * 1999-06-09 2003-07-15 Cloakware Corporation Tamper resistant software encoding
US6950926B1 (en) * 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US7984304B1 (en) * 2004-03-02 2011-07-19 Vmware, Inc. Dynamic verification of validity of executable code
KR20070118589A (ko) * 2005-02-11 2007-12-17 유니버셜 데이터 프로텍션 코퍼레이션 마이크로프로세서 데이터 보안을 위한 방법 및 시스템
US20070260856A1 (en) * 2006-05-05 2007-11-08 Tran Thang M Methods and apparatus to detect data dependencies in an instruction pipeline
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20030037423A (ko) * 2001-11-05 2003-05-14 한국전자통신연구원 보안 전송 계층의 사전 연관 설정을 이용한 에이에이에이시스템의 이중화 방법
KR20060021370A (ko) * 2003-06-13 2006-03-07 에이알엠 리미티드 다수의 명령어 세트를 갖는 데이터 처리 장치 내에서의명령어 부호화
KR20050111290A (ko) * 2004-05-21 2005-11-24 엔에이치엔(주) 명령어의 유효성 판단 방법 및 그 시스템
KR20060075226A (ko) * 2004-12-28 2006-07-04 삼성전자주식회사 암호화된 명령어와 데이터가 저장되는 외부 메모리를포함하는 시스템

Also Published As

Publication number Publication date
US20090125728A1 (en) 2009-05-14
KR20090049857A (ko) 2009-05-19

Similar Documents

Publication Publication Date Title
US8683224B2 (en) Processor-implemented method for ensuring software integrity
US9582650B2 (en) Security of program executables and microprocessors based on compiler-architecture interaction
JP6347819B2 (ja) 暗号アルゴリズムの弱点保護
KR101687439B1 (ko) 소프트웨어 무결성을 보장하기위한 프로세서 실행 방법
Fiskiran et al. Runtime execution monitoring (REM) to detect and prevent malicious code execution
KR100922862B1 (ko) 명령어의 부호화를 통한 시스템 보안방법
US20090144561A1 (en) Method and System for Software Protection Using Binary Encoding
Cappaert et al. Towards tamper resistant code encryption: Practice and experience
Milenković et al. Using instruction block signatures to counter code injection attacks
EP3179396B1 (en) Device and method for executing protected ios software modules
Li et al. A control flow integrity checking technique based on hardware support
Kleber et al. Secure execution architecture based on puf-driven instruction level code encryption
WO2023001624A1 (en) Securely executing software based on cryptographically verified instructions
US9740837B2 (en) Apparatus and method for preventing cloning of code
KR100978605B1 (ko) 시스템 보안용 침해탐지방법 및 침해 탐지기
CN112332973A (zh) 一种细粒度的物联网设备控制流保护方法
Monden et al. Tamper-resistant software system based on a finite state machine
US8555387B2 (en) Apparatus and method for protecting asset in computer system
EP4357957A1 (en) Method for securing against physical or logical attacks an execution of a machine language instructions code
KR101173761B1 (ko) 프로그램의 외부 공격에 대한 공격 방어 및 탐지를 위한 장치 및 방법
Vaslin ‘Hardware Core for Off-Chip Memory Security Management in Embedded Systems
Duc et al. Improving virus protection with an efficient secure architecture with memory encryption, integrity and information leakage protection
CN117378170A (zh) 增强型密码术系统和方法
Wang et al. Architectural-enhanced intrusion detection and memory authentication schemes in embedded systems
Leontie et al. A Simple Compiler-FPGA Technique to Detect Memory Spoofing in Encrypted-Execution Platforms

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
FPAY Annual fee payment

Payment date: 20120724

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20131007

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee