KR102186221B1 - 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치 - Google Patents

하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치 Download PDF

Info

Publication number
KR102186221B1
KR102186221B1 KR1020180151116A KR20180151116A KR102186221B1 KR 102186221 B1 KR102186221 B1 KR 102186221B1 KR 1020180151116 A KR1020180151116 A KR 1020180151116A KR 20180151116 A KR20180151116 A KR 20180151116A KR 102186221 B1 KR102186221 B1 KR 102186221B1
Authority
KR
South Korea
Prior art keywords
address
memory
program
hardware
embedded system
Prior art date
Application number
KR1020180151116A
Other languages
English (en)
Other versions
KR20200064702A (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 KR1020180151116A priority Critical patent/KR102186221B1/ko
Priority to US16/695,731 priority patent/US20200174920A1/en
Publication of KR20200064702A publication Critical patent/KR20200064702A/ko
Application granted granted Critical
Publication of KR102186221B1 publication Critical patent/KR102186221B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • G06F13/26Handling requests for interconnection or transfer for access to input/output bus using interrupt with priority control
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem

Landscapes

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

Abstract

하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치가 개시된다. 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 방법은 임베디드 시스템(EMBEDDED SYSTEM)의 하드웨어 로더(HARDWARE LOADER)가, 프로그램을 로딩할 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하고, 상기 랜덤하게 설정된 주소 영역을 기반으로 상기 복수개의 주변 장치들 및 상기 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(ADDRESS TABLE)에 기록하고, 상기 어드레스 테이블을 기반으로 상기 메모리에 마운트된 프로그램 코드를 상기 랜덤하게 설정된 주소 영역에 상응하게 재설정한다.

Description

하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치 {METHOD FOR RANDOMZING ADDRESS SPACE LAYOUT OF EMBEDDED SYSTEM BASED ON HARDWARE AND APPARATUS USING THE SAME}
본 발명은 임베디드 시스템의 주소 공간의 랜덤화 기술에 관한 것으로, 특히 하드웨어 장치를 이용하여 프로그램이 로딩될 때마다 주소 공간 레이아웃 랜덤화를 수행함으로써 임베디드 시스템의 보안을 강화할 수 있는 기술에 관한 것이다.
최근 사물 인터넷(Internet of Things, IoT)이 화두가 되며 우리가 사용하는 임베디드 장비의 개수가 점점 늘어가고 있다. 이러한 임베디드 장비들은 저비용으로 구현되어 일반적으로 대상 소프트웨어(Target application)들이 하드웨어 위에서 직접 동작하며(Bare-metal로 동작), 부족한 리소스 때문에 대부분 전통적인 데스크톱 환경에서 제공되는 보안 메커니즘들이 결여되어 있다. 특히, 최근 운영체제들이 제공하는 주소 공간 레이아웃 랜덤화 역시 Bare-metal 기반의 임베디드 시스템에서는 Memory Management Unit(MMU)의 부재로 인해 적용되기 어렵다.
일반적인 임베디드 시스템은 도 1에 도시된 것과 같이 메인 연산 유닛 (Central Processing Unit, CPU)에 메모리를 포함한 다양한 주변 장치들이 버스에 연결된 형태이거나, 단순한 어드레스 디코더 회로에 연결되어 동작한다. 이 때, CPU에서 수행되는 프로그램이 다양한 주변 장치나 메모리에 접근하기 위해서는, 첫 번째로 어떤 주변 장치 및 메모리에 접근할 지를 결정해야 하고, 해당 주변 장치 및 메모리를 활성화 시킨 후 사전에 정의된 규약에 따라 정보를 주고받아야 한다.
일반적으로 시스템은 프로그램에게 이러한 접근에 있어 편의성을 제공하기 위해 도 2에 도시된 것과 같이 시스템 레벨의 시스템 주소 공간(200)을 갖고, 전체 주소 영역 중 일부의 영역들을 각 주변 장치들 및 메모리에 할당해 주는 방식으로 구현되어 있다. 따라서, 프로그램이 특정 주소 영역에 접근하게 되면 자동으로 해당 주변 장치 혹은 메모리가 활성화 되게 되고, 시스템 주소 영역(200)에 정의된 다양한 메모리에 사전 정의된 규약에 맞추어 데이터를 단순한 메모리 접근 명령어를 통해 쓰거나 읽는 방식으로 주변 장치 및 메모리를 사용 할 수 있게 된다.
이러한 시스템 주소 영역(200)은 임베디드 시스템이 구현될 때 이미 정해져 있으며, 임베디드 시스템이 사용되는 도중에는 일반적으로 변경되지 않는다. 따라서, 버스/어드레스 디코더 역시 하드웨어적으로 고정된 상태로 CPU로부터 입력받은 주소를 체크하고, 입력받은 주소가 시스템 주소 공간(200)의 어느 주변 장치 혹은 메모리에 대한 접근인지 체크한 후 해당 주변 장치 혹은 메모리에 접근을 시도하게 된다.
이처럼 고정된 시스템 주소 영역(200)은 프로그램의 작성 및 수행에 편의성을 제공한다는 장점이 존재한다. 반면에 시스템 주소 영역(200)에 대한 정보가 데이터 시트 등을 통해 사전에 노출되는 경우, 공격자가 단순히 메모리에 데이터를 읽거나 쓸 수 있는 권한만 갖게 되더라도 원하는 주변 장치에 대한 잘못된 동작을 야기하거나 메모리의 주요 데이터를 손쉽게 취득할 수 있다는 보안상 취약점이 있다. 특히, 이러한 취약성은 사용자의 안전에 직결되는 장치들을 제어하는 임베디드 시스템, 예를 들어 차량 내부에 들어가는 시스템 혹은 사람의 몸에 직접적으로 부착되는 형태의 장치에서 발견되는 경우에 심각한 문제를 야기할 수 있다.
한국 공개 특허 제10-2005-0043299호, 2005년 5월 11일 공개(명칭: 임베디드 시스템에서 동적 할당 메모리를 사용하여 인터럽트를 처리하기 위한 장치 및 방법)
본 발명의 목적은 임베디드 시스템에서도 보안성을 향상시킬 수 있도록 프로그램이 로딩될 때마다 시스템의 주소 공간 레이아웃을 랜덤하게 업데이트하는 것이다.
또한, 본 발명의 목적은 공격자가 임베디드 시스템을 공격하기 위해 필요한 코드의 위치나 주요 주변 장치들의 주소를 메모리에서 파악하기 어렵게 함으로써 시스템 보안성을 향상시키는 것이다.
또한, 본 발명의 목적은 공격자가 메모리의 위치를 파악하여 일정 주소 영역에 쓰기 가능한 취약점을 찾은 경우에도 보안상 중요한 주변 장치들의 주소를 프로그램 실행시마다 변경함으로써 주변 장치로의 직접적인 공격을 차단하는 것이다.
또한, 본 발명의 목적은 시스템에서 구현 및 변경이 까다로운 CPU에 대한 변경을 수행하지 않고, 변경이 용이한 버스/어드레스 디코더 측에 대한 수정만으로도 보안 메커니즘이 부족한 임베디드 시스템의 보안성을 향상시키는 것이다.
상기한 목적을 달성하기 위한 본 발명에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법은 임베디드 시스템(EMBEDDED SYSTEM)의 하드웨어 로더(HARDWARE LOADER)가, 프로그램을 로딩할 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하는 단계; 상기 하드웨어 로더가, 상기 랜덤하게 설정된 주소 영역을 기반으로 상기 복수개의 주변 장치들 및 상기 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(ADDRESS TABLE)에 기록하는 단계; 및 상기 하드웨어 로더가, 상기 어드레스 테이블을 기반으로 상기 메모리에 마운트된 프로그램 코드를 상기 랜덤하게 설정된 주소 영역에 상응하게 재설정하는 단계를 포함한다.
이 때, 설정하는 단계는 현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 상기 주소 영역을 랜덤하게 업데이트하고, 상기 어드레스 테이블은 랜덤하게 업데이트된 주소 영역에 상응하게 업데이트될 수 있다.
이 때, 재설정하는 단계는 상기 프로그램 코드가 상기 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 상기 접근 코드에 포함된 상기 타겟 주변 장치의 시작 주소를 상기 어드레스 테이블에 기록된 상기 타겟 주변 장치의 랜덤 시작 주소로 변경할 수 있다.
이 때, 주소 공간 레이아웃 랜덤화 방법은 상기 하드웨어 로더가, 상기 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 상기 메모리에 기반한 인터럽트 서비스 루틴(INTERRUPT SERVICE ROUTINE, ISR) 영역을 매핑하는 단계; 및 상기 프로그램 코드의 재설정이 완료된 경우, 상기 하드웨어 로더가 인터럽트를 발생시켜 상기 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출하는 단계를 더 포함할 수 있다.
이 때, 인터럽트 서비스 루틴 영역에 대한 접근 권한은 상기 하드웨어 로더에게만 할당될 수 있다.
이 때, 설정하는 단계는 상기 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 상기 주소 영역을 랜덤하게 설정하되, 상기 하드웨어 관련 정보는 상기 복수개의 주변 장치들과 메모리의 개수 및 상기 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함할 수 있다.
이 때, 프로그램 코드는 위치-독립 코드(POSITION-INDEPENDENT CODE)에 상응하고, 상기 접근 코드는 하나의 패턴으로 단일화될 수 있다.
이 때, 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 상기 접근 코드가 입력되는 경우, 상기 임베디드 시스템의 어드레스 디코더(ADDRESS DECODER)가 상기 접근 코드에 포함된 랜덤 시작 주소를 참조하여 상기 타겟 주변 장치로의 접근을 수행할 수 있다.
또한, 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 장치는, 임베디드 시스템에서 프로그램이 로딩될 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하고, 상기 랜덤하게 설정된 주소 영역을 기반으로 복수개의 주변 장치들 및 상기 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(ADDRESS TABLE)에 기록하고, 상기 어드레스 테이블을 기반으로 상기 메모리에 마운트된 프로그램 코드를 상기 랜덤하게 설정된 주소 영역에 상응하게 재설정하는 하드웨어 로딩부; 및 상기 프로그램이 로딩될 때마다 상기 난수를 생성하는 난수 생성부를 포함한다.
이 때, 하드웨어 로딩부는 현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 상기 주소 영역을 랜덤하게 업데이트하고, 랜덤하게 업데이트된 주소 영역에 상응하게 상기 어드레스 테이블을 업데이트할 수 있다.
이 때, 하드웨어 로딩부는 상기 프로그램 코드가 상기 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 상기 접근 코드에 포함된 상기 타겟 주변 장치의 시작 주소를 상기 어드레스 테이블에 기록된 상기 타겟 주변 장치의 랜덤 시작 주소로 변경할 수 있다.
이 때, 하드웨어 로딩부는 상기 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 상기 메모리에 기반한 인터럽트 서비스 루틴(INTERRUPT SERVICE ROUTINE, ISR) 영역을 매핑하고, 상기 프로그램 코드의 재설정이 완료된 경우에 인터럽트를 발생시켜 상기 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출할 수 있다.
이 때, 인터럽트 서비스 루틴 영역에 대한 접근 권한은 상기 하드웨어 로딩부에게만 할당될 수 있다.
이 때, 하드웨어 로딩부는 상기 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 상기 주소 영역을 랜덤하게 설정하되, 상기 하드웨어 관련 정보는 상기 복수개의 주변 장치들과 메모리의 개수 및 상기 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함할 수 있다.
이 때, 프로그램 코드는 위치-독립 코드(POSITION-INDEPENDENT CODE)에 상응하고, 상기 접근 코드는 하나의 패턴으로 단일화될 수 있다.
이 때, 상기 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 상기 접근 코드가 입력되는 경우, 상기 임베디드 시스템의 어드레스 디코더(ADDRESS DECODER)를 기반으로 상기 접근 코드에 포함된 랜덤 시작 주소를 참조하여 상기 타겟 주변 장치로의 접근을 수행할 수 있다.
본 발명에 따르면, 임베디드 시스템에서도 보안성을 향상시킬 수 있도록 프로그램이 로딩될 때마다 시스템의 주소 공간 레이아웃을 랜덤하게 업데이트할 수 있다.
또한, 본 발명은 공격자가 임베디드 시스템을 공격하기 위해 필요한 코드의 위치나 주요 주변 장치들의 주소를 메모리에서 파악하기 어렵게 함으로써 시스템 보안성을 향상시킬 수 있다.
또한, 본 발명은 공격자가 메모리의 위치를 파악하여 일정 주소 영역에 쓰기 가능한 취약점을 찾은 경우에도 보안상 중요한 주변 장치들의 주소를 프로그램 실행시마다 변경함으로써 주변 장치로의 직접적인 공격을 차단할 수 있다.
또한, 본 발명은 시스템에서 구현 및 변경이 까다로운 CPU에 대한 변경을 수행하지 않고, 변경이 용이한 버스/어드레스 디코더 측에 대한 수정만으로도 보안 메커니즘이 부족한 임베디드 시스템의 보안성을 향상시킬 수 있다.
도 1 및 도 2는 기존의 임베디드 시스템과 시스템 주소 공간의 일 예를 나타낸 도면이다.
도 3은 본 발명의 일실시예에 따른 임베디드 시스템을 나타낸 도면이다.
도 4는 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법을 나타낸 동작 흐름도이다.
도 5는 본 발명에 따른 어드레스 테이블의 일 예를 나타낸 도면이다.
도 6은 본 발명에 따른 시스템 주소 영역의 일 예를 나타낸 도면이다.
도 7은 본 발명에 따른 접근 코드 패턴의 단일화 과정의 일 예를 나타낸 도면이다.
도 8은 본 발명에 따른 메모리 관점에서의 하드웨어 로더 실행 결과의 일 예를 나타낸 도면이다.
도 9는 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법을 상세하게 나타낸 동작흐름도이다.
도 10은 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 장치를 나타낸 블록도이다.
본 발명을 첨부된 도면을 참조하여 상세히 설명하면 다음과 같다. 여기서, 반복되는 설명, 본 발명의 요지를 불필요하게 흐릴 수 있는 공지 기능, 및 구성에 대한 상세한 설명은 생략한다. 본 발명의 실시형태는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위해서 제공되는 것이다. 따라서, 도면에서의 요소들의 형상 및 크기 등은 보다 명확한 설명을 위해 과장될 수 있다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 3은 본 발명의 일실시예에 따른 임베디드 시스템을 나타낸 도면이다.
도 3을 참조하면, 본 발명의 일실시예에 따른 임베디드 시스템은 어드레스를 디코딩해주는 버스/어드레스 디코더가 동적으로 업데이트 가능한 어드레스 테이블을 참조하여 주변 장치나 메모리에 접근할 수 있도록 구현된 새로운 구조를 제안하고자 한다.
이를 위해, 본 발명에서는 CPU 및 버스/어드레스 디코더와 연동되어 동작하는 하드웨어 로더를 기반으로 프로그램이 로딩될 때마다 난수를 이용하여 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정할 수 있다. 따라서, 본 발명의 일실시예에 따른 임베디드 시스템은 도 3에 도시된 것처럼 별도의 난수 생성기 또는 랜덤 번호 생성기를 구비할 수 있다.
이 때, 랜덤하게 설정되는 주소 영역은 임베디드 시스템의 시스템 주소 공간 내에 설정될 수 있다.
이 때, 시스템 주소 공간이란, 소프트웨어가 특별한 명령어의 이용 없이 손쉽게 단순 메모리 연산만으로 메모리나 주변 장치들에 접근할 수 있도록 각 장치들에게 일정 크기의 주소 기반 공간을 부여해 놓은 것에 해당할 수 있다.
일반적으로 복잡한 데스크탑 기반의 시스템들은 메모리 가상화를 지원하기 때문에 소프트웨어 기반의 주소 공간 레이아웃 랜덤화(Address Space Layout Randomization)가 적용되어 공격자로부터 시스템을 보호받을 수 있다. 이에 반해 메모리 가상화를 지원하지 않는 대다수의 임베디드 시스템들은 이러한 방어 기법이 존재하지 않으므로, 본 발명에서는 임베디드 시스템에서도 적용 가능한 주소 공간 레이아웃 랜덤화 방법을 제안하고자 한다. 특히, 본 발명에서는 소프트웨어 기반이 아닌 하드웨어 장치를 이용하여 프로그램이 로딩될 때마다 시스템 주소 공간 레이아웃 랜덤화를 수행하는 방법을 제안한다.
이 때, 하드웨어 로더를 통해서 랜덤하게 설정된 주소 영역은 각각의 주소 영역에 상응하는 랜덤 시작 주소와 함께 어드레스 테이블에 저장될 수 있다.
이 후, 하드웨어 로더는 로딩된 프로그램이 메모리에 마운트(mount)되는 과정에서 어드레스 테이블을 참조하여 주변 장치들이나 메모리에 접근하기 위한 프로그램 코드를 재설정할 수 있다.
따라서, 임베디드 시스템의 CPU가 메모리에 마운트된 프로그램을 실행하는 도중에 주변 장치로 접근하는 접근 코드를 만나게 되면, 버스/어드레스 디코더가 어드레스 테이블에 저장된 랜덤 시작 주소를 참조하여 CPU가 해당 주변 장치나 메모리에 접근할 수 있도록 할 수 있다.
도 4는 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법을 나타낸 동작 흐름도이다.
도 4를 참조하면, 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법은 임베디드 시스템(Embedded System)의 하드웨어 로더(Hardware Loader)가, 프로그램을 로딩할 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정한다(S410).
이 때, 하드웨어 로더는 임베디드 시스템에 전원이 인가되어 리셋되는 과정에서 읽기 전용 메모리에 저장된 정보를 기반으로 초기화될 수 있다.
이 때, 임베디드 시스템의 읽기 전용 메모리에는 하드웨어 장치들이 동작하기 위해 필요한 코드 및 하드웨어 관련 정보들이 저장되어 있을 수 있다.
예를 들어, 읽기 전용 메모리의 시작 위치에는 임베디드 시스템을 정상적으로 동작시키기 위해 필수적으로 초기화되어야 하는 하드웨어들을 초기화하는 코드가 포함되어 있을 수 있다. 따라서, 하드웨어 로더는 읽기 전용 메모리에 기반한 하드웨어 초기화 과정을 기반으로 호출될 수 있다.
이와 같이 호출된 하드웨어 로더는 먼저, 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 메모리에 기반한 인터럽트 서비스 루틴(Interrupt Service Routine, ISR) 영역을 매핑할 수 있다.
이 때, 인터럽트 서비스 루틴 영역에 저장되는 인터럽트 서비스 루틴은, 임베디드 시스템에서 인터럽트가 발생하였을 경우에 랜덤하게 설정된 메모리의 주소 영역을 기반으로 프로그램 시작 주소로 이동하기 위한 루틴에 상응할 수 있다.
이 때, 읽기 전용 메모리의 시작 위치에 메모리에 기반한 인터럽트 서비스 루틴 영역을 매핑해하는 이유는 인터럽트 서비스 루틴을 재설정하기 위한 것일 수 있다. 즉, 읽기 전용 메모리에서는 인터럽트 서비스 루틴의 변경이 불가능하므로 본 발명에서 프로그램이 로딩될 때마다 주소 영역이 변경되는 메모리의 주소 영역을 반영하여 프로그램 시작 주소로 이동할 수 없는 문제점이 발생한다.
따라서, 본 발명에서는 도 6에 도시된 시스템 주소 영역과 같이, 쓰기 가능한 메모리의 일부를 읽기 전용 메모리의 앞부분에 인터럽트 서비스 루틴 영역으로써 할당함으로써 현재 프로그램이 종료되고 새로운 프로그램이 로딩되는 경우에도 인터럽트 서비스 루틴의 호출을 기반으로 새로운 프로그램의 시작 주소로 이동할 수 있다.
이 때, 인터럽트 서비스 루틴 영역은 항상 시스템 주소 공간 상에서 고정된 위치, 즉 읽기 전용 메모리의 앞부분에 위치하기 때문에 공격자가 프로그램의 시작 주소를 알아내어 메모리의 주소를 알아내기 위해 읽기를 시도할 가능성이 있다. 또는, 공격자가 인터럽트 서비스 루틴 영역을 직접 업데이트하여 자신이 원하는 코드를 실행하려 할 가능성도 존재한다.
따라서, 본 발명에서는 인터럽트 서비스 루틴 영역에 대한 접근 권한을 하드웨어 로더에게만 할당할 수 있다. 이에 따라, 인터럽트 서비스 루틴 영역에 대한 어드레스 디코더의 소프트웨어적 쓰기 및 읽기를 금지되므로 접근하는 공격자에 대해 보안성이 향상될 수 있다.
이 때, 하드웨어 로더는 인터럽트 서비스 루틴을 인터럽트 서비스 루틴 영역에 저장한 뒤, 난수 생성기 또는 랜덤 번호 생성기에 접근하여 하드웨어적으로 생성된 난수를 획득할 수 있다.
이 때, 난수는 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하기 위한 계산 과정에서 사용될 수 있다.
예를 들어, 사전에 복수개의 주변 장치들 및 메모리의 주소 영역 조합을 테이블 형태로 만들어 두고, 난수를 이용하여 테이블에 포함된 여러 조합들 중 하나의 조합을 선택할 수 있다.
다른 예를 들어, 하드웨어 로더의 내부에 하드웨어적으로 구현된 알고리즘을 통해 복수개의 주변 장치들 및 메모리의 주소 영역 조합을 만들어 두고, 난수를 이용하여 하나의 조합을 선택할 수도 있다.
이 때, 현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 주소 영역을 랜덤하게 업데이트할 수 있다.
이 때, 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 주소 영역을 랜덤하게 설정하되, 하드웨어 관련 정보는 복수개의 주변 장치들과 메모리의 개수 및 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함할 수 있다.
예를 들어, 하드웨어 로더는 읽기 전용 메모리를 참조하여 랜덤하게 설정할 주소 영역의 개수와 각각의 주소 영역의 크기를 체크하고, 임베디드 시스템의 시스템 주소 영역을 고려하여 도 6에 도시된 것과 같이 랜덤하게 주소 영역을 설정할 수 있다.
이 때, 읽기 전용 메모리의 앞부분에는 인터럽트 서비스 루틴 영역이 매핑되어야 하므로, 하드웨어 관련 정보는 읽기 전용 메모리의 후반 부분에 위치하도록 구현하여 하드웨어 로더의 정상적인 수행을 보장할 수 있다.
또한, 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법은 하드웨어 로더가, 랜덤하게 설정된 주소 영역을 기반으로 복수개의 주변 장치들 및 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(Address Table)에 기록한다(S420).
이 때, 도 5를 참조하면, 어드레스 테이블(500)은 복수개의 주변 장치들 및 메모리 각각에 상응하는 랜덤 시작 주소와 함께 주소 영역 크기와 관련된 정보를 포함할 수도 있다. 이와 같은 어드레스 테이블은, 추후 임베디드 시스템의 어드레스 디코더가 입력으로 주소를 체크하거나 복수개의 주변 장치들 및 메모리로 접근하는 과정에서 참조되어 사용될 수 있다.
이 때, 도 5에 도시된 것처럼 어드레스 테이블(500)이 생성되면, 임베디드 시스템의 시스템 주소 공간은 도 6과 같은 모습으로 나타날 수 있다.
이 때, 현재 프로그램이 종료되고 새로운 프로그램이 로딩되어 복수개의 주변 장치들 및 메모리 각각의 주소 영역이 랜덤하게 업데이트되는 경우, 어드레스 테이블도 랜덤하게 업데이트된 주소 영역에 상응하게 업데이트될 수 있다.
이 때, 어드레스 테이블은 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 업데이트를 수행할 수 있다.
또한, 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법은 하드웨어 로더가, 어드레스 테이블을 기반으로 메모리에 마운트된 프로그램 코드를 랜덤하게 설정된 주소 영역에 상응하게 재설정한다(S430).
예를 들어, 어드레스 테이블에 대한 기록이 완료되면, 하드웨어 로더는 비휘발성 메모리에 접근하여 실행하고자 하는 대상 프로그램을 프로그램 코드 단위로 읽어올 수 있다. 이 때, 하드웨어 로더는 읽어온 프로그램 코드를 분석하여 일반적인 코드인지 또는 복수개의 주변 장치들로 접근하기 위한 접근 코드인지를 체크할 수 있다.
이 때, 프로그램 코드가 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 접근 코드에 포함된 타겟 주변 장치의 시작 주소를 어드레스 테이블에 기록된 타겟 주변 장치의 랜덤 시작 주소로 변경할 수 있다.
이 때, 프로그램을 구성하는 모든 프로그램 코드들에 대해서 일반적인 코드 및 랜덤 시작 주소로 변경된 접근 코드를 모두 메모리에 업데이트함으로써 프로그램 전체적으로 업데이트를 수행할 수 있다.
이와 같은 방식을 통해 프로그램을 구성하는 모든 프로그램 코드의 재설정이 완료된 경우, 하드웨어 로더가 인터럽트를 발생시켜 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출할 수 있다.
이 때, 호출되는 인터럽트 서비스 루틴을 통해 최종적으로 매핑된 프로그램 코드의 시작 주소, 즉 프로그램 코드가 업데이트된 메모리 공간으로 점프하는 명령어가 수행될 수 있고, 이를 통해 프로그램이 실행될 수 있다.
이 때, 최종적으로 프로그램의 수행이 끝나거나 다른 프로그램이 로딩되어야 할 경우에는 하드웨어 로더를 다시 호출하되, 인터럽트 서비스 루틴 영역을 매핑하는 과정은 생략하고 난수를 생성하는 단계부터 실시할 수 있다.
이 때, 본 발명의 일실시예에 따른 하드웨어 로더가 프로그램 코드 중 주변 장치 및 메모리로 접근하기 위한 접근 코드를 프로그램 로딩 타임에 손쉽게 변경하기 위해서는 프로그램을 작성함에 있어 몇 가지 제약 조건이 필요하다.
먼저, 프로그램이 마운트되는 메모리의 시작 주소가 동적으로 변경 가능해야 하기 때문에 프로그램 코드는 위치-독립 코드(Position-Independent Code)에 상응할 수 있다. 예를 들어, 프로그램은 위치-독립 코드로 작성되거나 컴파일된 것일 수 있다. 이 경우, 프로그램은 말 그대로 로딩되는 주소에 독립적으로 동작하므로 메모리의 주소 영역이 동적으로 변경되더라도 문제가 없이 수행될 수 있다.
또한, 주변 장치나 메모리로 접근하기 위한 접근 코드는 하나의 패턴으로 단일화될 수 있다. 예를 들어, 도 7에 도시된 3개의 접근 코드(710, 720, 730)들은 모두 '0x1500'번지에 존재하는 주변 장치에 접근하는 프로그램 코드에 상응할 수 있다. 그러나, 접근 코드의 패턴이 도 7에 도시된 것처럼 다양하게 존재한다면 하드웨어 로더는 해당 접근 코드의 패턴들을 모두 찾아낼 수 있도록 구현되어야 하며, 이는 하드웨어 로더 디자인의 복잡도를 크게 높이는 원인이 될 수 있다.
따라서, 본 발명에서는 도 7에 도시된 다양한 패턴의 접근 코드(710, 720, 730)들을 단일화된 패턴의 접근 코드(700)로 작성할 수 있도록 단일화를 수행할 수도 있다.
이 때, 접근 코드의 패턴을 단일화하는 과정에서 기존에 주변 장치의 주소를 직접 저장하고 있던 Immediate 값에는 단순히 시스템이 지원하는 주변 장치의 번호를 명기해 줌으로써 하드웨어 로더로 하여금 현재 접근 코드가 어떤 주변 장치로 접근하려 하는지 알도록 할 수 있다.
또는, 도 8에 도시된 비휘발성 메모리(810)와 같이, 주변 장치로의 접근을 시작하는 접근 코드의 바로 앞에 하드웨어 로더가 인식할 수 있도록, 원래 CPU의 Instruction Set Architecture(ISA)에서는 사용하지 않는 Opcode를 이용하는 임의의 명령어 PERI_ACCESS를 삽입할 수도 있다.
이와 같은 부가적인 명령어는 하드웨어 로더가 명령어 단위로 명령어를 분석함에 있어서, 다음 명령어가 주변 장치에 접근하는 명령어 라는 것을 인지시켜주는 역할만을 수행할 수 있다. 따라서, 도 8에 도시된 것과 같이 하드웨어 로더를 통해 메모리(820)에 명령어를 업데이트하는 단계에서는 폐기되어 실제로 메모리(800)에 마운트되는 프로그램에는 존재하지 않을 수 있다.
이 때, 하드웨어 로더는 PERI_ACCESS 명령어 이후에 읽어 들이는 명령어의 Immediate 값을 읽어 들여 어드레스 테이블의 인덱스로 사용함으로써 실제 주변 장치의 주소를 가져와 명령어의 Immediate 값을 다시 업데이트할 수도 있다.
이 때, 어드레스 디코더는 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 접근 코드가 입력되는 경우, 접근 코드에 포함된 랜덤 시작 주소를 참조하여 타겟 주변 장치로의 접근을 수행할 수 있다.
상기와 같은 과정을 통해 메모리의 주소 영역이 변경되더라도 소프트웨어 리셋과 같은 인터럽트 서비스를 수행한 후 변경된 메모리의 주소 영역의 프로그램 시작 주소로 정확하게 이동하여 프로그램이 실행될 수 있도록 구현할 수 있다.
이와 같은 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법을 통해 공격자가 임베디드 시스템을 공격하기 위해 필요한 코드의 위치나 주요 주변 장치들의 주소를 메모리에서 파악하기 어렵게 함으로써 시스템 보안성을 향상시킬 수 있다.
도 9는 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법을 상세하게 나타낸 동작흐름도이다.
도 9를 참조하면, 본 발명의 일실시예에 따른 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법은 먼저 임베디드 시스템으로 전원이 인가되면, 읽기 전용 메모리로 접근하여(S902), 읽기 전용 메모리에 저장된 정보를 기반으로 임베디드 시스템을 정상적으로 동작시키기 위해 필수적으로 초기화되어야 하는 하드웨어들을 초기화될 수 있다(S904).
이 후, 하드웨어들의 초기화가 성공하였는지 여부를 판단하고, 초기화에 성공하면 하드웨어 로더를 호출할 수 있다(S908).
이 후, 호출된 하드웨어 로더는 먼저, 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 메모리에 기반한 인터럽트 서비스 루틴(Interrupt Service Routine, ISR) 영역을 매핑하고(S910), 매핑된 인터럽트 서비스 루틴 영역에 인터럽트 서비스 루틴을 저장할 수 있다(S912).
이 후, 하드웨어 로더는 비휘발성 메모리에 저장된 프로그램을 로딩할 수 있고, 난수 생성기 또는 랜덤 번호 생성기를 통해 프로그램이 로딩에 따른 난수를 생성할 수 있다(S914).
이 후, 하드웨어 로더는 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하고, 랜덤하게 설정된 주소 영역을 기반으로 복수개의 주변 장치들 및 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(Address Table)에 기록할 수 있다(S915).
이 후, 하드웨어 로더는 메모리에 마운트된 프로그램 코드를 읽어 들여(fetch)(S916) 접근 코드인지 여부를 판단하고(S918), 접근 코드이면 프로그램 코드를 재설정하여(S920) 메모리에 업데이트할 수 있다(S922).
또한, 단계(S918)의 판단결과 접근 코드가 아니면 재설정과정을 수행하지 않고 메모리에 업데이트할 수 있다(S922).
이 후, 프로그램을 구성하는 전체 프로그램 코드에 대한 업데이트가 완료되었는지 여부를 판단하고(S924), 업데이트가 완료되지 않았으면 다음 프로그램 코드를 읽어 들여 단계(S918)을 수행할 수 있다.
또한, 단계(S924)의 판단결과 프로그램 업데이트가 완료되었으면, 하드웨어 로더가 인터럽트 서비스 루틴을 호출하여(S926) 프로그램을 실행시킬 수 있다(S928).
이 후, 다른 프로그램이 로딩되면(S930), 다시 단계(S914)부터 반복적으로 수행될 수 있다.
도 10은 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 장치를 나타낸 블록도이다.
도 10을 참조하면, 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 장치는 하드웨어 로딩부(1010) 및 난수 생성부(1020)를 포함한다.
하드웨어 로딩부(1010)는 임베디드 시스템(Embedded System)에서 프로그램을 로딩할 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정한다.
이 때, 주소 공간 레이아웃 랜덤화 장치는 임베디드 시스템에 전원이 인가되어 리셋되는 과정에서 읽기 전용 메모리에 저장된 정보를 기반으로 초기화될 수 있다.
이 때, 임베디드 시스템의 읽기 전용 메모리에는 하드웨어 장치들이 동작하기 위해 필요한 코드 및 하드웨어 관련 정보들이 저장되어 있을 수 있다.
예를 들어, 읽기 전용 메모리의 시작 위치에는 임베디드 시스템을 정상적으로 동작시키기 위해 필수적으로 초기화되어야 하는 하드웨어들을 초기화하는 코드가 포함되어 있을 수 있다. 따라서, 주소 공간 레이아웃 랜덤화 장치는 읽기 전용 메모리에 기반한 하드웨어 초기화 과정을 기반으로 호출될 수 있다.
이와 같이 호출된 주소 공간 레이아웃 랜덤화 장치는 먼저, 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 메모리에 기반한 인터럽트 서비스 루틴(Interrupt Service Routine, ISR) 영역을 매핑할 수 있다.
이 때, 인터럽트 서비스 루틴 영역에 저장되는 인터럽트 서비스 루틴은, 임베디드 시스템에서 인터럽트가 발생하였을 경우에 랜덤하게 설정된 메모리의 주소 영역을 기반으로 프로그램 시작 주소로 이동하기 위한 루틴에 상응할 수 있다.
이 때, 읽기 전용 메모리의 시작 위치에 메모리에 기반한 인터럽트 서비스 루틴 영역을 매핑해하는 이유는 인터럽트 서비스 루틴을 재설정하기 위한 것일 수 있다. 즉, 읽기 전용 메모리에서는 인터럽트 서비스 루틴의 변경이 불가능하므로 본 발명에서 프로그램이 로딩될 때마다 주소 영역이 변경되는 메모리의 주소 영역을 반영하여 프로그램 시작 주소로 이동할 수 없는 문제점이 발생한다.
따라서, 본 발명에서는 도 6에 도시된 시스템 주소 영역과 같이, 쓰기 가능한 메모리의 일부를 읽기 전용 메모리의 앞부분에 인터럽트 서비스 루틴 영역으로써 할당함으로써 현재 프로그램이 종료되고 새로운 프로그램이 로딩되는 경우에도 인터럽트 서비스 루틴의 호출을 기반으로 새로운 프로그램의 시작 주소로 이동할 수 있다.
이 때, 인터럽트 서비스 루틴 영역은 항상 시스템 주소 공간 상에서 고정된 위치, 즉 읽기 전용 메모리의 앞부분에 위치하기 때문에 공격자가 프로그램의 시작 주소를 알아내어 메모리의 주소를 알아내기 위해 읽기를 시도할 가능성이 있다. 또는, 공격자가 인터럽트 서비스 루틴 영역을 직접 업데이트하여 자신이 원하는 코드를 실행하려 할 가능성도 존재한다.
따라서, 본 발명에서는 인터럽트 서비스 루틴 영역에 대한 접근 권한을 주소 공간 레이아웃 랜덤화 장치에게만 할당할 수 있다. 이에 따라, 인터럽트 서비스 루틴 영역에 대한 어드레스 디코더의 소프트웨어적 쓰기 및 읽기를 금지되므로 접근하는 공격자에 대해 보안성이 향상될 수 있다.
이 때, 하드웨어 로딩부(1010)는 인터럽트 서비스 루틴을 인터럽트 서비스 루틴 영역에 저장한 뒤, 난수 생성부(1020)에 접근하여 하드웨어적으로 생성된 난수를 획득할 수 있다.
이 때, 난수는 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하기 위한 계산 과정에서 사용될 수 있다.
예를 들어, 사전에 복수개의 주변 장치들 및 메모리의 주소 영역 조합을 테이블 형태로 만들어 두고, 난수를 이용하여 테이블에 포함된 여러 조합들 중 하나의 조합을 선택할 수 있다.
다른 예를 들어, 주소 공간 레이아웃 랜덤화 장치의 내부에 하드웨어적으로 구현된 알고리즘을 통해 복수개의 주변 장치들 및 메모리의 주소 영역 조합을 만들어 두고, 난수를 이용하여 하나의 조합을 선택할 수도 있다.
이 때, 현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 주소 영역을 랜덤하게 업데이트할 수 있다.
이 때, 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 주소 영역을 랜덤하게 설정하되, 하드웨어 관련 정보는 복수개의 주변 장치들과 메모리의 개수 및 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함할 수 있다.
예를 들어, 하드웨어 로딩부(1010)는 읽기 전용 메모리를 참조하여 랜덤하게 설정할 주소 영역의 개수와 각각의 주소 영역의 크기를 체크하고, 임베디드 시스템의 시스템 주소 영역을 고려하여 도 6에 도시된 것과 같이 랜덤하게 주소 영역을 설정할 수 있다.
이 때, 읽기 전용 메모리의 앞부분에는 인터럽트 서비스 루틴 영역이 매핑되어야 하므로, 하드웨어 관련 정보는 읽기 전용 메모리의 후반 부분에 위치하도록 구현하여 하드웨어 로딩부(1010)의 정상적인 수행을 보장할 수 있다.
또한, 하드웨어 로딩부(1010)는 랜덤하게 설정된 주소 영역을 기반으로 복수개의 주변 장치들 및 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(Address Table)에 기록한다.
이 때, 도 5를 참조하면, 어드레스 테이블(500)은 복수개의 주변 장치들 및 메모리 각각에 상응하는 랜덤 시작 주소와 함께 주소 영역 크기와 관련된 정보를 포함할 수도 있다. 이와 같은 어드레스 테이블은, 추후 임베디드 시스템의 어드레스 디코더가 입력으로 주소를 체크하거나 복수개의 주변 장치들 및 메모리로 접근하는 과정에서 참조되어 사용될 수 있다.
이 때, 도 5에 도시된 것처럼 어드레스 테이블(500)이 생성되면, 임베디드 시스템의 시스템 주소 공간은 도 6과 같은 모습으로 나타날 수 있다.
이 때, 현재 프로그램이 종료되고 새로운 프로그램이 로딩되어 복수개의 주변 장치들 및 메모리 각각의 주소 영역이 랜덤하게 업데이트되는 경우, 어드레스 테이블도 랜덤하게 업데이트된 주소 영역에 상응하게 업데이트될 수 있다.
이 때, 어드레스 테이블은 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 업데이트를 수행할 수 있다.
또한, 하드웨어 로딩부(1010)는 어드레스 테이블을 기반으로 메모리에 마운트된 프로그램 코드를 랜덤하게 설정된 주소 영역에 상응하게 재설정한다.
예를 들어, 어드레스 테이블에 대한 기록이 완료되면, 하드웨어 로딩부(1010)는 비휘발성 메모리에 접근하여 실행하고자 하는 대상 프로그램을 프로그램 코드 단위로 읽어올 수 있다. 이 때, 하드웨어 로딩부(1010)는 읽어온 프로그램 코드를 분석하여 일반적인 코드인지 또는 복수개의 주변 장치들로 접근하기 위한 접근 코드인지를 체크할 수 있다.
이 때, 프로그램 코드가 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 접근 코드에 포함된 타겟 주변 장치의 시작 주소를 어드레스 테이블에 기록된 타겟 주변 장치의 랜덤 시작 주소로 변경할 수 있다.
이 때, 프로그램을 구성하는 모든 프로그램 코드들에 대해서 일반적인 코드 및 랜덤 시작 주소로 변경된 접근 코드를 모두 메모리에 업데이트함으로써 프로그램 전체적으로 업데이트를 수행할 수 있다.
이와 같은 방식을 통해 프로그램을 구성하는 모든 프로그램 코드의 재설정이 완료된 경우, 하드웨어 로더가 인터럽트를 발생시켜 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출할 수 있다.
이 때, 호출되는 인터럽트 서비스 루틴을 통해 최종적으로 매핑된 프로그램 코드의 시작 주소, 즉 프로그램 코드가 업데이트된 메모리 공간으로 점프하는 명령어가 수행될 수 있고, 이를 통해 프로그램이 실행될 수 있다.
이 때, 최종적으로 프로그램의 수행이 끝나거나 다른 프로그램이 로딩되어야 할 경우에는 주소 공간 레이아웃 랜덤화 장치를 다시 호출하되, 인터럽트 서비스 루틴 영역을 매핑하는 과정은 생략하고 난수를 생성하는 단계부터 실시할 수 있다.
이 때, 본 발명의 일실시예에 따른 주소 공간 레이아웃 랜덤화 장치가 프로그램 코드 중 주변 장치 및 메모리로 접근하기 위한 접근 코드를 프로그램 로딩 타임에 손쉽게 변경하기 위해서는 프로그램을 작성함에 있어 몇 가지 제약 조건이 필요하다.
먼저, 프로그램이 마운트되는 메모리의 시작 주소가 동적으로 변경 가능해야 하기 때문에 프로그램 코드는 위치-독립 코드(Position-Independent Code)에 상응할 수 있다. 예를 들어, 프로그램은 위치-독립 코드로 작성되거나 컴파일된 것일 수 있다. 이 경우, 프로그램은 말 그대로 로딩되는 주소에 독립적으로 동작하므로 메모리의 주소 영역이 동적으로 변경되더라도 문제가 없이 수행될 수 있다.
또한, 주변 장치나 메모리로 접근하기 위한 접근 코드는 하나의 패턴으로 단일화될 수 있다. 예를 들어, 도 7에 도시된 3개의 접근 코드(710, 720, 730)들은 모두 '0x1500'번지에 존재하는 주변 장치에 접근하는 프로그램 코드에 상응할 수 있다. 그러나, 접근 코드의 패턴이 도 7에 도시된 것처럼 다양하게 존재한다면 주소 공간 레이아웃 랜덤화 장치는 해당 접근 코드의 패턴들을 모두 찾아낼 수 있도록 구현되어야 하며, 이는 주소 공간 레이아웃 랜덤화 장치 디자인의 복잡도를 크게 높이는 원인이 될 수 있다.
따라서, 본 발명에서는 도 7에 도시된 다양한 패턴의 접근 코드(710, 720, 730)들을 단일화된 패턴의 접근 코드(700)로 작성할 수 있도록 단일화를 수행할 수도 있다.
이 때, 접근 코드의 패턴을 단일화하는 과정에서 기존에 주변 장치의 주소를 직접 저장하고 있던 Immediate 값에는 단순히 시스템이 지원하는 주변 장치의 번호를 명기해 줌으로써 주소 공간 레이아웃 랜덤화 장치로 하여금 현재 접근 코드가 어떤 주변 장치로 접근하려 하는지 알도록 할 수 있다.
또는, 도 8에 도시된 비휘발성 메모리(810)와 같이, 주변 장치로의 접근을 시작하는 접근 코드의 바로 앞에 주소 공간 레이아웃 랜덤화 장치가 인식할 수 있도록, 원래 CPU의 Instruction Set Architecture(ISA)에서는 사용하지 않는 Opcode를 이용하는 임의의 명령어 PERI_ACCESS를 삽입할 수도 있다.
이와 같은 부가적인 명령어는 주소 공간 레이아웃 랜덤화 장치가 명령어 단위로 명령어를 분석함에 있어서, 다음 명령어가 주변 장치에 접근하는 명령어 라는 것을 인지시켜주는 역할만을 수행할 수 있다. 따라서, 도 8에 도시된 것과 같이 하드웨어 로더를 통해 메모리(820)에 명령어를 업데이트하는 단계에서는 폐기되어 실제로 메모리(800)에 마운트되는 프로그램에는 존재하지 않을 수 있다.
이 때, 주소 공간 레이아웃 랜덤화 장치는 PERI_ACCESS 명령어 이후에 읽어 들이는 명령어의 Immediate 값을 읽어 들여 어드레스 테이블의 인덱스로 사용함으로써 실제 주변 장치의 주소를 가져와 명령어의 Immediate 값을 다시 업데이트할 수도 있다.
이 때, 어드레스 디코더는 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 접근 코드가 입력되는 경우, 접근 코드에 포함된 랜덤 시작 주소를 참조하여 타겟 주변 장치로의 접근을 수행할 수 있다.
상기와 같은 과정을 통해 메모리의 주소 영역이 변경되더라도 소프트웨어 리셋과 같은 인터럽트 서비스를 수행한 후 변경된 메모리의 주소 영역의 프로그램 시작 주소로 정확하게 이동하여 프로그램이 실행될 수 있도록 구현할 수 있다.
한편, 주소 공간 레이아웃 랜덤화 장치는 메모리가 탑재되어 그 장치 내에서 정보를 저장할 수 있다. 일 구현예의 경우, 메모리는 컴퓨터로 판독 가능한 매체이다. 일 구현 예에서, 메모리는 휘발성 메모리 유닛일 수 있으며, 다른 구현예의 경우, 메모리는 비휘발성 메모리 유닛일 수도 있다. 일 구현예의 경우, 저장장치는 컴퓨터로 판독 가능한 매체이다. 다양한 서로 다른 구현 예에서, 저장장치는 예컨대 하드디스크 장치, 광학디스크 장치, 혹은 어떤 다른 대용량 저장장치를 포함할 수도 있다.
이와 같은 주소 공간 레이아웃 랜덤화 장치를 이용함으로써 공격자가 임베디드 시스템을 공격하기 위해 필요한 코드의 위치나 주요 주변 장치들의 주소를 메모리에서 파악하기 어렵게 함으로써 시스템 보안성을 향상시킬 수 있다.
이상에서와 같이 본 발명에 따른 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치는 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
200, 600: 시스템 주소 공간 500: 어드레스 테이블
700: 단일화된 패턴의 접근 코드 710~730: 접근 코드
810: 비휘발성 메모리 820: 메모리
1010: 하드웨어 로딩부 1020: 난수 생성부

Claims (16)

  1. 임베디드 시스템(EMBEDDED SYSTEM)의 하드웨어 로더(HARDWARE LOADER)가, 프로그램을 로딩할 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하는 단계;
    상기 하드웨어 로더가, 상기 랜덤하게 설정된 주소 영역을 기반으로 상기 복수개의 주변 장치들 및 상기 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(ADDRESS TABLE)에 기록하는 단계; 및
    상기 하드웨어 로더가, 상기 어드레스 테이블을 기반으로 상기 메모리에 마운트된 프로그램 코드를 상기 랜덤하게 설정된 주소 영역에 상응하게 재설정하는 단계
    를 포함하는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  2. 청구항 1에 있어서,
    상기 설정하는 단계는
    현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 상기 주소 영역을 랜덤하게 업데이트하고,
    상기 어드레스 테이블은 랜덤하게 업데이트된 주소 영역에 상응하게 업데이트되는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  3. 청구항 1에 있어서,
    상기 재설정하는 단계는
    상기 프로그램 코드가 상기 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 상기 접근 코드에 포함된 상기 타겟 주변 장치의 시작 주소를 상기 어드레스 테이블에 기록된 상기 타겟 주변 장치의 랜덤 시작 주소로 변경하는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  4. 청구항 1에 있어서,
    상기 주소 공간 레이아웃 랜덤화 방법은
    상기 하드웨어 로더가, 상기 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 인터럽트 서비스 루틴(INTERRUPT SERVICE ROUTINE, ISR) 영역을 매핑하는 단계; 및
    상기 프로그램 코드의 재설정이 완료된 경우, 상기 하드웨어 로더가 인터럽트를 발생시켜 상기 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출하는 단계를 더 포함하는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  5. 청구항 4에 있어서,
    상기 인터럽트 서비스 루틴 영역에 대한 접근 권한은 상기 하드웨어 로더에게만 할당되는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  6. 청구항 1에 있어서,
    상기 설정하는 단계는
    상기 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 상기 주소 영역을 랜덤하게 설정하되, 상기 하드웨어 관련 정보는 상기 복수개의 주변 장치들과 메모리의 개수 및 상기 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함하는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  7. 청구항 3에 있어서,
    상기 프로그램 코드는 위치-독립 코드(POSITION-INDEPENDENT CODE)에 상응하고, 상기 접근 코드는 하나의 패턴으로 단일화되는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  8. 청구항 3에 있어서,
    상기 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 상기 접근 코드가 입력되는 경우, 상기 임베디드 시스템의 어드레스 디코더(ADDRESS DECODER)가 상기 접근 코드에 포함된 랜덤 시작 주소를 참조하여 상기 타겟 주변 장치로의 접근을 수행하는 것을 특징으로 하는 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법.
  9. 임베디드 시스템에서 프로그램이 로딩될 때마다 난수를 기반으로 복수개의 주변 장치들 및 메모리 각각의 주소 영역을 랜덤하게 설정하고, 상기 랜덤하게 설정된 주소 영역을 기반으로 복수개의 주변 장치들 및 상기 메모리 각각에 상응하는 랜덤 시작 주소를 어드레스 테이블(ADDRESS TABLE)에 기록하고, 상기 어드레스 테이블을 기반으로 상기 메모리에 마운트된 프로그램 코드를 상기 랜덤하게 설정된 주소 영역에 상응하게 재설정하는 하드웨어 로딩부; 및
    상기 프로그램이 로딩될 때마다 상기 난수를 생성하는 난수 생성부
    를 포함하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  10. 청구항 9에 있어서,
    상기 하드웨어 로딩부는
    현재 프로그램의 실행이 종료되고 다른 프로그램이 로딩되는 경우, 새롭게 생성되는 난수를 기반으로 상기 주소 영역을 랜덤하게 업데이트하고, 랜덤하게 업데이트된 주소 영역에 상응하게 상기 어드레스 테이블을 업데이트하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  11. 청구항 9에 있어서,
    상기 하드웨어 로딩부는
    상기 프로그램 코드가 상기 복수개의 주변 장치들 중 어느 하나의 타겟 주변 장치로 접근하기 위한 접근 코드일 경우, 상기 접근 코드에 포함된 상기 타겟 주변 장치의 시작 주소를 상기 어드레스 테이블에 기록된 상기 타겟 주변 장치의 랜덤 시작 주소로 변경하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  12. 청구항 9에 있어서,
    상기 하드웨어 로딩부는
    상기 임베디드 시스템의 읽기 전용 메모리의 시작 위치에 상기 메모리에 기반한 인터럽트 서비스 루틴(INTERRUPT SERVICE ROUTINE, ISR) 영역을 매핑하고, 상기 프로그램 코드의 재설정이 완료된 경우에 인터럽트를 발생시켜 상기 메모리에 마운트된 프로그램 코드의 시작 위치로 이동하기 위한 인터럽트 서비스 루틴을 호출하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  13. 청구항 12에 있어서,
    상기 인터럽트 서비스 루틴 영역에 대한 접근 권한은 상기 하드웨어 로딩부에게만 할당되는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  14. 청구항 9에 있어서,
    상기 하드웨어 로딩부는
    상기 임베디드 시스템의 읽기 전용 메모리에 저장된 하드웨어 관련 정보를 참조하여 상기 주소 영역을 랜덤하게 설정하되, 상기 하드웨어 관련 정보는 상기 복수개의 주변 장치들과 메모리의 개수 및 상기 복수개의 주변 장치들과 메모리 각각의 주소 영역 크기를 포함하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  15. 청구항 11에 있어서,
    상기 프로그램 코드는 위치-독립 코드(POSITION-INDEPENDENT CODE)에 상응하고, 상기 접근 코드는 하나의 패턴으로 단일화되는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
  16. 청구항 11에 있어서,
    상기 프로그램 코드의 재설정이 완료된 이후에 프로그램의 실행을 기반으로 상기 접근 코드가 입력되는 경우, 상기 임베디드 시스템의 어드레스 디코더(ADDRESS DECODER)를 기반으로 상기 접근 코드에 포함된 랜덤 시작 주소를 참조하여 상기 타겟 주변 장치로의 접근을 수행하는 것을 특징으로 하는 주소 공간 레이아웃 랜덤화 장치.
KR1020180151116A 2018-11-29 2018-11-29 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치 KR102186221B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020180151116A KR102186221B1 (ko) 2018-11-29 2018-11-29 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치
US16/695,731 US20200174920A1 (en) 2018-11-29 2019-11-26 Method for randomizing address space layout of embedded system based on hardware and apparatus for the same

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180151116A KR102186221B1 (ko) 2018-11-29 2018-11-29 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치

Publications (2)

Publication Number Publication Date
KR20200064702A KR20200064702A (ko) 2020-06-08
KR102186221B1 true KR102186221B1 (ko) 2020-12-03

Family

ID=70848902

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180151116A KR102186221B1 (ko) 2018-11-29 2018-11-29 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치

Country Status (2)

Country Link
US (1) US20200174920A1 (ko)
KR (1) KR102186221B1 (ko)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014528623A (ja) 2011-10-11 2014-10-27 マカフィー, インコーポレイテッド ハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステム及び方法
US20170206357A1 (en) 2014-11-17 2017-07-20 Morphisec Information Security Ltd. Malicious code protection for computer systems based on process modification

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20050043299A (ko) 2003-11-05 2005-05-11 삼성전자주식회사 임베디드 시스템에서 동적 할당 메모리를 사용하여인터럽트를 처리하기 위한 장치 및 방법
KR102028704B1 (ko) * 2016-03-17 2019-10-07 한국전자통신연구원 전자기기에서 코드 삽입 공격으로부터 보호를 위한 메모리 운용 방법
US10013554B2 (en) * 2016-03-31 2018-07-03 Qualcomm Incorporated Time varying address space layout randomization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014528623A (ja) 2011-10-11 2014-10-27 マカフィー, インコーポレイテッド ハイパーバイザ環境におけるクリティカル・アドレス空間保護のためのシステム及び方法
US20170206357A1 (en) 2014-11-17 2017-07-20 Morphisec Information Security Ltd. Malicious code protection for computer systems based on process modification

Also Published As

Publication number Publication date
KR20200064702A (ko) 2020-06-08
US20200174920A1 (en) 2020-06-04

Similar Documents

Publication Publication Date Title
JP5571201B2 (ja) ハードウェアモードおよびセキュリティフラグに基づく、読み出される命令用のメモリエリアの制限
JP6652491B2 (ja) 目標メモリ・アドレスに対応するメモリ属性ユニットの領域を特定するための領域特定演算
ES2381428T3 (es) Traducción de dirección dinámica con gestión de trama.
EP2805246B1 (en) Dynamic execution prevention to inhibit return-oriented programming
KR102095614B1 (ko) 메모리 보호
JP2019504403A5 (ko)
JP4939387B2 (ja) データ処理装置及びアドレス空間保護方法
JP2022503562A (ja) 範囲チェック命令
JP2008257734A (ja) メモリドメインを基にしたデータ処理システム内のセキュリティ制御
JP7432586B2 (ja) スタック・ポインタを検証すること
JP2009129394A (ja) 情報処理装置及びそのプログラム実行制御方法
US20190370439A1 (en) Secure system on chip for protecting software program from tampering, rehosting and piracy and method for operating the same
CN113485716B (zh) 防内存越界的程序编译方法及装置
JP7269942B2 (ja) 複数ガード・タグ設定命令
JP2017010347A (ja) 情報処理装置
KR20200128720A (ko) 링크를 갖는 분기 명령의 분기 타겟 변종
KR102186221B1 (ko) 하드웨어 기반의 임베디드 시스템의 주소 공간 레이아웃 랜덤화 방법 및 이를 위한 장치
CN107851015B (zh) 向量操作数位大小控制
US11893113B2 (en) Return-oriented programming protection
KR20170139547A (ko) 메모리 오버런 공격들을 저지하기 위한 미세 메모리 보호
CN110569205A (zh) 安全系统单芯片及其操作方法
TW202420076A (zh) 基於指令提取位址的區域識別符
WO2017020194A1 (zh) 一种文件系统保护方法、装置及存储设备
JP2008027236A (ja) プログラマブルコントローラ
JP2016157331A (ja) マイクロコントローラ

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right