KR100772881B1 - 자기 수정 코드의 무결성 검증 장치 및 방법 - Google Patents

자기 수정 코드의 무결성 검증 장치 및 방법 Download PDF

Info

Publication number
KR100772881B1
KR100772881B1 KR1020060047232A KR20060047232A KR100772881B1 KR 100772881 B1 KR100772881 B1 KR 100772881B1 KR 1020060047232 A KR1020060047232 A KR 1020060047232A KR 20060047232 A KR20060047232 A KR 20060047232A KR 100772881 B1 KR100772881 B1 KR 100772881B1
Authority
KR
South Korea
Prior art keywords
code
self
modifying
hash value
modifying code
Prior art date
Application number
KR1020060047232A
Other languages
English (en)
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 KR1020060047232A priority Critical patent/KR100772881B1/ko
Application granted granted Critical
Publication of KR100772881B1 publication Critical patent/KR100772881B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum

Abstract

자기 수정 코드의 무결성 검증 장치 및 방법을 제공한다. 자기 수정 코드의 무결성 검증 장치는 자기 수정 코드(self modifying code) 및 자기 수정 코드 내에 마크(mark)된 소정 코드 블록에 대한 정보를 저장하고 있는 데이터 테이블 중 적어도 어느 하나를 기준 해쉬 값으로 생성하는 생성부 및 생성된 기준 해쉬 값과 자기 수정 코드가 자신을 수정할 때 생성되는 소정의 해쉬 값을 비교하여 자기 수정 코드의 무결성을 검증하는 제어부를 포함한다.
자기 수정 코드, TCG, TPM

Description

자기 수정 코드의 무결성 검증 장치 및 방법{Apparatus and method for checking self modifying code}
도 1은 종래 TCG 기반 컴퓨팅 시스템을 도시한다.
도 2는 종래 신뢰된 컴퓨팅 시스템에서 실행 및 검증의 개념도이다.
도 3은 실행 파일의 내부 구조를 도시한다.
도 4는 자기 수정 코드의 동작의 일 예를 도시한다.
도 5는 본 발명의 일 실시예에 따른 자기 수정 코드의 무결성 검증 장치의 블록도이다.
도 6는 본 발명의 일 실시예에 따른 자기 수정 코드의 길이 및 오프셋(offset)을 검증하기 위한 프로그램 코드의 일 예를 도시한다.
도 7은 본 발명의 일 실시예에 따른 매크로를 이용한 수정될 코드 블록의 정보 및 해쉬 값 생성의 순서도이다.
도 8은 본 발명의 일 실시예에 따른 SMC 접근 테이블의 일 예를 도시한다.
도 9는 본 발명의 일 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 순서도이다.
도 9 a는 본 발명의 일 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 개념도이다.
도 10는 본 발명의 다른 실시예에 따른 자기 수정 코드의 RIM을 생성하기 위한 순서도이다.
도 11은 본 발명의 다른 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 순서도이다.
<도면의 주요 부분에 관한 부호의 설명>
510: 산술부 520: 제1 저장부
530: 생성부 540: 제2 저장부
550: 검색부 560: 제어부
본 발명은 자기 수정 코드의 무결성 검증 장치 및 방법에 관한 것으로서, 더욱 상세하게는 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성을 검증하는 자기 수정 코드의 무결성 검증 장치 및 방법에 관한 것이다.
TCG(Trusted Computing Group)는 노키아와 삼성전자, 에릭슨 등 16개 대형 IT업체가 컴퓨터 보안강하를 위해 설립한 컨소시엄으로 이미 PC와 서버분야의 표준 보안 스펙을 만든 바 있다. TCG에 따르면, TPM(Trusted Platform Module)은 PC와 서버에서 인증, 스토리지 보안, 이메일 보안 등 다양한 보안 기능을 추가할 수 있도록 설계된 보안 칩으로 권고되고 있다.
도 1은 종래 TCG 기반 컴퓨팅 시스템을 도시한다.
TCG 구조의 명세에 따라 전형적인 신뢰된 컴퓨팅 디바이스(trusted computing device)의 구성요소들을 나타내고 있다. 도시된 주요 하드웨어 구성요소는 신뢰된 플랫폼 모듈인 즉, TPM(10)이다. TPM(10)은 변형 억제 모듈(tamper resistant module)로서, 제한된 스토리지(storage) 용량, 동작 및 필수 암호 알고리즘 함수들(cryptographic functions)을 가지고 있다. TPM(10)의 스토리지는 대개 프로그램/OS 코드의 해쉬 값을 저장하거나, 예를 들어 OS 커널(kernel)을 위한 컴퓨팅 시스템의 중요 구성요소들을 저장하는 데에 사용되어진다. 저장된 상기 해쉬 값들은 무결성을 검증하기 위한 참조 값(RIM; Reference Integrity Metric)으로 사용되어지고, 프로그램 소스 코드가 로드(loaded)되기 전에 프로그램 소스 코드의 해쉬 값이 계산되고 TPM(10)에 저장된 RIM과 비교되어 진다. 만약 프로그램 소스 코드의 해쉬 값과 RIM이 매치(match)되면, 상기 프로그램의 로드 및 실행이 허가된다.
도 2는 종래 신뢰된 컴퓨팅 시스템에서 실행 및 검증의 개념도이다.
TCG의 명세에 따라 실행 플로우(flow) 및 무결성(integrity) 검증 플로우를 도시하고 있으며, 신뢰된 기반(trusted base)은 CRTM(Core Root of Trust for Measurement)으로 구성되고 상기 CRTM은 신뢰된 요소(entity)이다. 단계 1에서, 신뢰된 기반은 OS 로더(loader) 코드의 무결성을 검증한다. 즉, OS 로더 코드는 자체 OS를 로딩하는 역할을 수행하며, 신뢰된 기반은 OS 로더 코드의 해쉬 값을 계산하고, TPM 내 RIM과 비교한다. 만약, OS 로더 코드의 해쉬 값과 TPM 내 RIM이 매치되면 단계 2에서 실행이 허가된다. 상기한 원리를 이용하여 단계 3에서, OS가 로드되 기 전에 OS 로더 코드는 OS의 무결성을 검증하고, 이어서 단계 4에서 OS 로딩이 뒤따르게 된다. 단계 5에서, 소정의 프로그램 소스 코드가 로드되기에 앞서 OS는 프로그램 소스 코드의 무결성을 검증하고, 상기 프로그램 소스 코드는 단계 6에서 로드된다. 도 2에서, 점선으로 표기된 부분은 신뢰된 OS가 런타임(runtime) 동안 프로그램 소스 코드의 무결성을 검증하는 역할을 수행함을 나타내고 있다. 이와 같은 순차적인 검증은 전이 신뢰(transitive trust)로 호칭되며, 상기 검증 단계들에서 RIM은 TPM에 저장된다.
종래 신뢰된 플랫폼들에 있어서, 무결성이 검증된 프로그램은 예를 들어 런타임 동안 자신의 코드를 수정하지 않는 정적(static) 프로그램으로 가정되었다. 런타임 동안 자신의 코드를 수정하는 프로그램들은 자기 수정(self-modifying) 프로그램들로 호칭되고, 이러한 기술들은 수많은 애플리케이션들에 사용되어진다.
그러나, 상기 자기 수정 프로그램들의 존재(existence)와 무결성 검증은 신뢰된 플랫폼에서는 고려되지 않는다. 또한, 자기 수정 코드(SMC; Self Modifying Code)는 자신의 코드 블록(segment)를 수정하고, 상기 수정이 유효한지 여부에 대한 강력하고 안정된 검증 수단이 없는 실정이다.
따라서, TCG 명세에 기반을 둔 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 실행을 지원하고, 상기 신뢰된 컴퓨팅 디바이스에서 런타임 동안 자기 수정 코드의 무결성을 유지할 필요성이 제기된다.
본 발명은 자기 수정 코드의 무결성 검증 장치 및 방법을 제공하는데 그 목 적이 있다.
본 발명의 목적들은 이상에서 언급한 목적들로 제한되지 않으며, 언급되지 않은 또 다른 목적들은 아래의 기재로부터 당업자에게 명확하게 이해되어질 수 있을 것이다.
상기 목적을 달성하기 위하여, 본 발명의 실시예에 따른 자기 수정 코드의 무결성 검증 장치는 자기 수정 코드(self modifying code) 및 자기 수정 코드 내에 마크(mark)된 소정 코드 블록에 대한 정보를 저장하고 있는 데이터 테이블 중 적어도 어느 하나를 기준 해쉬 값으로 생성하는 생성부 및 생성된 기준 해쉬 값과 자기 수정 코드가 자신을 수정할 때 생성되는 소정의 해쉬 값을 비교하여 자기 수정 코드의 무결성을 검증하는 제어부를 포함한다.
본 발명의 실시예에 따른 자기 수정 코드의 무결성 검증 방법은 자기 수정 코드(self modifying code) 및 자기 수정 코드 내에 마크(mark)된 소정 코드 블록에 대한 정보를 저장하고 있는 데이터 테이블 중 적어도 어느 하나를 기준 해쉬 값으로 생성하는 단계 및 생성된 기준 해쉬 값과 자기 수정 코드가 자신을 수정할 때 생성되는 소정의 해쉬 값을 비교하여 자기 수정 코드의 무결성을 검증하는 단계를 포함한다.
기타 실시예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
도 3은 실행 파일의 내부 구조를 도시한다.
실행 파일의 구조를 나타내며, 실행 파일은 섹션들의 개수를 가지고 있으며, 상기 섹션들에는 초기화된 글로벌 변수들(intitialized gloval variables)을 저장하기 위한 ‘.data’ 섹션(304), 초기화되지 않은 글로벌 변수들을 포함하는 ‘.bss’ 섹션(302), 실행 파일이 로드되었을 때 실행되는 액츄얼(actual) 코드를 포함하는 ‘.text’ 섹션(306)을 포함한다. 본 발명에서 상기 실행 파일이 로드될 때, 실행 프로세스의 한 부분인 자기 수정 코드도 함께 로드된다.
도 4는 자기 수정 코드의 동작의 일 예를 도시한다.
자기 수정 코드가 코드 블록을 내포하고 있는 특정 코드의 조각(piece)을 변경하는 방법을 나타내고 있으며, 이러한 프로세스 진행을 위해 세가지 요소들이 사용될 수 있다. 즉, 코드를 변경하기 위해 소정의 명령을 전달하는 명령 요소(402), 상기 명령에 따라 오버라이트(overwrite)되는 타겟 요소(404), 상기 타겟 요소(404)를 사실상 오버라이트하는 실행 요소(406)가 사용될 수 있다. 이하, 자기 수정 코드(SMC)의 동작 과정을 예로써 좀더 구체적으로 설명하기로 한다.
예를 들어 상기 명령 요소(402)는 타겟 요소(404)의 시작 부분인 라벨 L1을 포인팅(pointing)한다. 만약, 포인터(pointer)가 특정 라벨을 지시하고 있다면, 명령 요소(402)는 자동으로 상기 라벨을 포인팅할 수 있다. 상기 명령 요소(402)가 라벨 L1을 포인팅하고 있다면, 실질적으로 타겟 요소(404)인 ‘addl’를 포인팅하게 된다. 상기 명령 요소(402) 동작시, 어셈블리 언어에서 ‘xorl’ 과 동일한 ‘0x02’값으로 타겟 요소(404)인 ‘addl’의 오버라이트(수정)를 실행하게 되고, 이로써 런타임중에 코드를 변경하여 자기 수정(self-modifying)하게 된다. 일반적으로 상기 소정 코드 블록의 변경이 정당한 것인지를 검증할 만한 솔루션이 없다. 이하 실시예들을 통해, 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 실행을 지원하고, 신뢰된 컴퓨팅 디바이스에서 런타임 동안 자기 수정 코드의 무결성을 검증하는 방법에 대해서 보다 더 구체적으로 후술하기로 한다.
도 5는 본 발명의 일 실시예에 따른 자기 수정 코드의 무결성 검증 장치의 블록도이다.
자기 수정 코드의 무결성 검증 장치(500)는 산술부(510), 제1 저장부(520), 생성부(530), 제2 저장부(540), 검색부(550) 및 제어부(560)를 포함한다.
산술부(510)는 소정 매크로를 이용하여 마크된 자기 수정 코드의 코드 블록의 길이 및 오프셋을 계산한다. 또한, 상기 매크로에 수정될 코드 블록의 주소 값, 및 코드 블록의 시작과 끝이 정의되어 계산될 수 있으며, 코드 블록의 시작 값인 오프셋은 바람직하게는 헥스(hex) 값으로 나타낼 수 있고, 상기 코드 블록의 길이는 상기 코드 블록에서 수정이 허가된 바이트의 개수를 나타낸다. 상기 매크로를 이용한 코드 블록의 정보를 수집하는 내용은 이하 도 6에서 보다 더 구체적으로 후술하기로 한다. 또한 산술부(510)는 수정전의 자기 수정 코드의 코드 블록의 바이트와 수정후 자기 수정 코드의 코드 블록의 바이트 간의 차(difference)를 계산할 수 있으며 이에 대해서는 이하 도 9에서 상세히 설명하기로 한다. 상기 산술부(510)는 다른 실시예에서는 생략될 수 있다.
제1 저장부(520)는 상기 매크로를 이용하여 계산된 정보들을 저장한다. 이때, SMC 접근 테이블과 같은 데이터 테이블의 각 필드에 상기 정보들을 각 필드의 속성에 따라 저장할 수 있다. 상기 SMC 접근 테이블의 필드들은 시리얼 번호, 라벨, 오프셋, 및 길이 필드를 포함할 수 있다. 또한, 상기 SMC 접근 테이블은 파일 시스템 또는 데이터 베이스에 파일로 저장될 수 있으며, 상기 오프셋 및 길이 필드에는 상기 런타임에서 수정될 코드 블록의 길이 및 오프셋 값을 포함할 수 있으며, SMC 접근 테이블의 포맷은 이하 도 8을 참조하기 바란다. 상기 제1 저장부(520)는 다른 실시예에서는 생략될 수 있다.
생성부(530)는 소정 정보를 포함하는 객체에 대한 해쉬 값을 생성한다. 예를 들어, 생성부(530)는 상기 제1 저장부(520)에 저장된 데이터 테이블(이하 SMC 접근 테이블이라고도 함)에 대한 해쉬 값을 생성할 수 있다. 또한, 생성부(530)는 자기 수정 코드에 대한 수정전/수정후의 다수의 해쉬 값을 생성할 수 있다. 상기 생성된 해쉬 값은, 자기 수정 코드의 무결성 검증을 위한 참조 값(RIM)인 기준 해쉬 값으로 사용되어질 수 있으며, 상기 다수의 해쉬 값은 미리 수정된(modified) 자기 수정 코드의 해쉬 값(기준 해쉬 값)을 포함할 수 있다. 즉 상기 자기 수정 코드 내에 서, 사용자가 마크한 소정 코드의 블록에 따라 수정된 자기 수정 코드(전체 코드)를 해쉬한 값들로서, 상기 수정된 자기 수정 코드의 값은 소정의 시뮬레이션(simulation)을 통해 얻을 수 있다. 예를 들어, 자기 수정 코드의 수정되기 전의 상태가 ‘상태 0’이고, 대응하는 RIM 값이 RIM1_run이라고 하면, 자기 수정 코드의 수정된 이후의 상태는 ‘상태 1’이고, 대응하는 RIM 값은 RIM2_run가 된다. 따라서, 상술한 원리를 이용하여 수정된 자기 수정 코드를 대표하는 다수의 기준 해쉬 값들을 미리 생성할 수 있으며, 이후 자기 수정 코드가 자신을 수정할 때마다 자기 수정 코드의 해쉬 값을 계산하여 상기 미리 계산된 수정된 자기 수정 코드의 기준 해쉬 값과 비교하여 자기 수정 코드의 무결성 여부를 체크할 수 있게 된다. 따라서 다수의 기준 해쉬 값을 이용할 경우에는 SMC 접근 테이블을 사용하지 않고 저장된 다수의 RIM값들을 이용하여, 자기 수정 코드의 무결성 여부를 검증할 수 있게 된다. 상기 해쉬 알고리즘에는 MD(Message Digest), SHA-1(Secure Hash Algorithm), 및 DES(Data Encryption Standard) 등의 다양한 알고리즘을 사용할 수 있다. 생성부(530)에 대한 보다 더 구체적인 내용은 이하 도 7 내지 도 11을 참조하기 바란다.
제2 저장부(540)는 상기 생성부(530)에서 생성한 해쉬 값을 저장한다. 제2 저장부(540)는 신뢰된 플랫폼 모듈(TPM; Trusted Platform Module)일 수 있고, 상기 TPM내의 해쉬 값들은 기준 해쉬 값으로, 자기 수정 코드의 무결성을 검증하는 데 이용될 수 있다.
검색부(550)는 상기 제1 저장부(520) 및 제2 저장부(540)의 정보들을 검색한 다. 예를 들어, 검색부(550)는 수정될 코드 블록의 상대 가상 주소(relative virtual address) 값을 상기 매크로를 이용하여 계산된 데이터 테이블의 오프셋 필드 내에서 검색할 수 있다. 검색부(550)에 대한 보다 더 구체적인 내용은 이하 도 9를 참조하기 바란다.
제어부(560)는 상기 제1 저장부(520)에 저장된 정보 및 상기 제2 저장부(540)에 저장된 해쉬 값을 이용하여 상기 자기 수정 코드의 무결성을 검증한다. 예를 들어 제어부(560)는 상기 자기 수정 코드가 소정의 코드 블록을 수정하려고 시도할 때 동작중인 프로그램을 인터럽트(interrupt)하고, 상기 제1 저장부(520)에 저장된 데이터 테이블을 해쉬한 값과 상기 제2 저장부(540)에 저장된 해쉬 값을 비교하여 상기 수정될 자기 수정 코드의 정당성 유무를 판단할 수 있다. 자기 수정 코드의 무결성 검증 방법은 이하 도 9 및 도 11에서 자세히 설명하기로 하고 이하 생략한다.
도 5에서 도시된 각각의 구성요소는 일종의 '모듈'로 구성될 수 있다. 상기 '모듈'은 소프트웨어 또는 Field Programmable Gate Array(FPGA) 또는 주문형 반도체(Application Specific Integrated Circuit, ASIC)과 같은 하드웨어 구성요소를 의미하며, 모듈은 어떤 역할들을 수행한다. 그렇지만 모듈은 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. 모듈은 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 실행시키도록 구성될 수도 있다. 따라서, 일 예로서 모듈은 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스 들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 모듈들에서 제공되는 기능은 더 작은 수의 구성요소들 및 모듈들로 결합되거나 추가적인 구성요소들과 모듈들로 더 분리될 수 있다.
도 6는 본 발명의 일 실시예에 따른 자기 수정 코드의 길이 및 오프셋(offset)을 검증하기 위한 프로그램 코드의 일 예를 도시한다.
자기 수정 코드의 코드 블록이 복수개의 매크로(macros)를 이용하여 어떻게 마크될 수 있는 지 프로그램 내 자기 수정 코드의 샘플을 나타내고 있다. 이때, ‘printf’ 문(612)을 이용하여 코드 블록의 속성을 출력할 수 있다.
사용자가 수정할 코드 블록에 마킹을 수행한다. 이때 매크로(함수)를 이용하며, 상기 매크로에는 런타임(runtime)에서 수정될 코드 블록의 시작과 끝(602, 604)이 정의될 수 있다. 또한, 매크로에는 수정될 코드 블록의 길이(606), 코드 블록의 주소 값(608), 및 코드 블록의 시작 값인 오프셋(610) 이 정의될 수 있다. 상기 코드 블록의 시작 값인 오프셋(610)은 바람직하게는 헥스(hex) 값으로 나타낼 수 있고, 또한 상기 코드 블록의 길이(606)는 상기 코드 블록에서 수정이 허가된 바이트의 개수를 나타낸다.
상기 복수개의 매크로는 런타임 동안 마크된 수정될 코드 블록의 변수 정보를 알려주며, 상기 변수 정보에는 코드 블록내에서 수정될 부분에 대한 정보들을 포함할 수 있다. 상기 코드 블록내에서 수정될 부분에 대한 정보들은 SMC 접근 테 이블(데이터 테이블)을 만드는 데에 이용될 수 있다.
상기 도 6를 이용하여, 이하 도 7에서 SMC 접근 테이블을 생성하기 위한 과정에 대해서 후술하기로 한다.
도 7은 본 발명의 일 실시예에 따른 매크로를 이용한 수정될 코드 블록의 정보 및 해쉬 값 생성의 순서도이다.
먼저, 사용자는 런타임(runtime) 동안 프로그램 내 자기 수정 코드의 어느 부분이 수정될 수 있을 지를 결정하고, 상기 도 6에서 설명된 매크로를 이용하여 상기 수정될 자기 수정 코드의 블록들을 마크한다.
산술부(510)는 소정의 매크로를 이용하여 마크된 자기 수정 코드의 코드 블록의 길이 및 오프셋을 계산한다(S701). 이때, ‘printf’ 문을 이용하여 상기 계산된 코드 블록의 길이 및 오프셋 값을 출력할 수 있다. 또한, 매크로에 수정될 코드 블록의 주소 값, 및 코드 블록의 시작과 끝이 정의되어 계산될 수 있으며, 코드 블록의 시작 값인 오프셋은 바람직하게는 헥스(hex) 값으로 나타낼 수 있고, 또한 상기 코드 블록의 길이는 상기 코드 블록에서 수정이 허가된 바이트의 개수를 나타낸다.
상기 매크로를 이용하여 계산된 정보들은 제1 저장부(520)의 데이터 테이블의 각 필드에 저장된다(S711).
생성부(530)는 상기 제1 저장부(520)에 저장된 데이터 테이블(SMC 접근 테이블)에 대한 해쉬 값을 생성한다(S721).
이후, 제2 저장부(540)는 상기 생성부(530)에서 생성한 해쉬 값을 저장한 다(S731).
도 8은 본 발명의 일 실시예에 따른 SMC 접근 테이블의 일 예를 도시한다.
상기 매크로를 이용하여 계산한 수정될 코드 블록의 정보들을 SMC 접근 테이블(800)의 필드 값으로 구성할 수 있다. 시리얼 번호 필드(802)는 순차적인 번호 값을 포함하고, 라벨 필드(804)는 바람직하게는 스트링 타입(string type)으로 자기 수정 코드의 수정될 코드 블록을 마크하기 위한 자기 수정 코드 내에서 사용되는 라벨의 명칭을 나타낸다. SMC 접근 테이블(800)에서는 오프셋 필드(806)과 길이 필드(808)가 주요 필드라 할 수 있는 데, 오프셋 필드(806)는 수정될 코드 블록의 시작 값으로 바람직하게는 헥스(hex) 값으로 나타내고, 길이 필드(808)는 상기 코드 블록에서 수정이 허가된 바이트의 개수를 제공한다. 상기 라벨 필드(804)는 상기 오프셋 필드(806)가 자기 수정 코드 내의 수정될 코드를 추적(trace)하는 데에 충분한 정보를 제공하므로, 부차적인 옵션으로 제공될 수 있다.
도 9 는 본 발명의 일 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 순서도이고, 도 9a는 본 발명의 일 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 개념도이다.
이하, 도 9a를 참조로 하여 사용자의 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드(902a)를 무결성 검증 방법 및 실행 동작을 단계적으로, 보다 더 구체적으로 설명하기로 한다.
TCG 기반의 사용자의 디바이스에서, 상기 제1 저장부(520)는 상기 매크로를 이용하여 계산된 정보들을 각 필드에 저장하고 있는 SMC 접근 테이블을 저장하고 있으며, 제2 저장부(540)는 자기 수정 코드에 대한 해쉬 값 및 상기 제1 저장부(520)에 저장된 SMC 접근 테이블에 대한 해쉬 값 중 적어도 어느 하나를 저장하고 있다(S901). 이때, 상기 TPM내의 해쉬 값들(이하 RIM이라고도 함)은 기준 해쉬 값으로, 자기 수정 코드의 무결성을 검증하는 데 이용될 수 있다.
이때, RIM(906a) 및 SMC 접근 테이블(800)은 TPM에 함께 저장되거나, SMC 접근 테이블(800)이 소정의 스토리지(storage) 내에 분리되어 저장될 수 있다. 실행 파일이 메모리에 로드될 때 상기 자기 수정 코드(902a)를 비롯한, 데이터들, 테이블에 관련된 리소스들, 및 기타 데이터 구조들이 메모리의 인접 블록에 로드될 수 있다.
먼저, 생성부(530)는 프로그램이 로드되기 전 초기에, 자기 수정 코드(902a)의 해쉬 값(RIM_run1(904a))을 소정 해쉬 알고리즘을 통해 생성한다(S911). RIM_run1(904a)은 런타임(runtime) 동안 자기 수정 코드(902a)의 무결성이 검증하는 데 사용될 수 있다. 즉, RIM_run1(904a)은 정기적으로(예를 들어 20 내지 30초 후) 체크되어 자기 수정 코드(902a)의 무결성을 체크하는 데 이용될 수 있다. 상기 RIM_run1(904a)은 하드웨어, 안전한 분할된 저장 공간 또는 안전한 메모리(RAM) 영역에 저장될 수 있다.
다음 단계에서, 자기 수정 코드(902a)가 소정의 코드 블록을 수정하려고 시도할 때, 제어부(560)는 동작중인 프로그램을 인터럽트(interrupt)한다(S921).
제어부(560)는 자기 수정 코드(902a)가 수정하려고 시도하는 코드 블록이 정당한지 여부를 검증하기 위해, 스토리지 내의 SMC 접근 테이블(800)을 액세스하고, 생성부(530)를 통해 SMC 접근 테이블(800)의 해쉬 값을 생성하고, TPM 내의 RIM(906a)(즉 SMC 접근 테이블(800)의 해쉬 값)과 비교한다(S931, 910a, 920a).
제어부(560)는 상기 해쉬 값과 TPM 내의 RIM(906a)이 동일한지 여부를 판단한다(S941).
만약, 상기 해쉬 값과 TPM 내의 RIM(906a)이 동일하지 않다면, 제어부(560)는 TPM의 상태를 신뢰 상태(trust)에서 신뢰할 수 없는 상태(un-trust)로 변경하거나 사용자의 시스템을 리부트(reboot)한다(S997).
반면, 상기 해쉬 값과 TPM 내의 RIM(906a)이 동일하다면 제어부(560)는, 자기 수정 코드(902a)에 의해 수정될 코드 블록의 상대 가상 주소(relative virtual address) 값을 검색부(550)를 통해 스토리지 내의 SMC 접근 테이블(800)의 오프셋 필드 내에서 검색한다(S951, 910a). 상기 상대 가상 주소는 헥스(hex) 값으로 표현되는 수정될 소정 코드 블록의 오프셋이며, 파일이 메모리 맵(memory-mapped)된 부분의 상대 값일 수 있다. 예를 들어, 로더가 실행 파일을 가상 주소 공간에서 0x10000 주소(값)에서 시작하는 메모리로 맵(map)시킨다. 만약, 이미지(image)에서 소정의 코드 블록이 0x10464 주소로 시작한다면, 상대 가상 주소는 가상 주소 0x10464에서 기본 주소 0x10000를 뺀 값인 0x464 값이 된다.
제어부(560)는 상대 가상 주소와 동일한 값이 상기 SMC 접근 테이블(800)의 오프셋 필드내의 정보에 존재하는 지 여부를 판단한다(S961).
만약, 상대 가상 주소와 동일한 값이 상기 SMC 접근 테이블(800)의 오프셋 필드내의 정보에 존재하는 경우, 생성부(530)는 다시 수정전의 자기 수정 코 드(902a)의 해쉬 값을 생성하고, 제어부(560)는 상기 수정전의 자기 수정 코드(902a)의 해쉬 값과 상기 저장된 RIM_run1(904a)과 비교하여, 초기 런타임 동안 자기 수정 코드(902a)가 수정되었는 지 여부에 대한 검증을 수행한다(S971). 즉, 제어부(560)는 자기 수정 코드(902a) 실행시 RIM_run1(904a)을 체크하여 정기적으로(예를 들어 20 내지 30초 후) 자기 수정 코드(902a)의 무결성을 체크하게 된다.
상기 수정전의 자기 수정 코드(902a)의 해쉬 값이 RIM_run1(904a)과 동일하다면, 제어부(560)는 자기 수정 코드(902a)의 소정의 코드 블록의 수정을 허가한다(S973, S981).
반면, 수정전의 자기 수정 코드(902a)의 해쉬 값이 RIM_run1(904a)과 동일하지 않다면, 제어부(560)는 컴퓨팅 디바이스의 상태를 신뢰할 수 없는 상태로 변경하고, 프로그램의 실행을 정지시키거나 또는 시스템을 리부트(reboot)한다(S997).
자기 수정 코드(902a)가 소정의 코드 블록을 수정한 이후, 산술부(510)는 수정전의 자기 수정 코드(902a)의 코드 블록의 바이트와 수정후 자기 수정 코드(902a)의 코드 블록의 바이트 간의 차(difference)를 계산한다(S991).
제어부(560)는 상기 바이트의 차를 이용하여 수정된 바이트의 수가 SMC 접근 테이블에서 길이 필드의 정보와 동일한 지 여부를 판단한다(S993, 910a).
상기 바이트의 차를 이용하여 수정된 바이트의 수가 SMC 접근 테이블에서 길이 필드의 정보와 동일할 경우, 제어부(560)는 RIM_run1(904a)을 RIM_run2(904b)로 변경하고 상기 단계의 과정을 반복한다(S995, 930a).
바이트의 수가 SMC 접근 테이블의 길이 필드의 정보와 동일하지 않을 경우, 알람을 출력하거나, 시스템을 리부트한다(S997). 이후, 상기 RIM_run2(904b)는 자기 수정 코드(902a)의 무결성 검증을 위한 RIM(906a)으로 사용될 수 있다.
도 10는 본 발명의 다른 실시예에 따른 자기 수정 코드의 RIM을 생성하기 위한 순서도이다.
먼저, 사용자는 런타임(runtime) 동안 프로그램 내 자기 수정 코드의 어느 부분이 수정될 수 있을 지를 결정하고, 상기 수정될 자기 수정 코드의 블록들을 마크한다(S1001). 이때 소정의 매크로 함수를 이용할 수 있다.
다음 단계에서, 생성부(530)는 상기 자기 수정 코드를 소정의 해쉬 알고리즘을 이용하여 다수의 해쉬 값으로 생성한다(S1011). 이때, 상기 다수의 해쉬 값은 미리 계산된 수정된 자기 수정 코드의 기준 해쉬 값이라 할 수 있으며, 자기 수정 코드 내에서 사용자가 마크한 소정 코드의 블록에 따라 수정된 자기 수정 코드의 전체 코드를 해쉬한 값이다. 이때, 상기 수정된 자기 수정 코드의 값은 소정의 시뮬레이션(simulation)을 통해 얻을 수 있다.
제2 저장부(540)는 생성부(530)에서 생성한 다수의 해쉬 값(예를 들어 RIM1_run, RIM2_run, ..)을 저장한다(S1021).
상술한 바와 같이, 상기 SMC 접근 테이블을 사용하지 않고 저장된 다수의 RIM 값들을 이용하여, 이하 도 11의 과정을 통해 자기 수정 코드의 무결성 여부를 검증할 수 있다.
도 11은 본 발명의 다른 실시예에 따른 신뢰된 컴퓨팅 디바이스에서 자기 수정 코드의 무결성 검증 방법의 순서도이다.
프로그램이 로드되기 전 초기에, 생성부(530)는 전체 자기 수정 코드의 해쉬 값을 소정 해쉬 알고리즘을 통해 생성하고, 제어부(560)는 상기 해쉬 값을 제2 저장부(540)에 저장된 해쉬 값(기준 해쉬 값)과 비교한다(S1001, S1011). 상기 제2 저장부(540)는 바람직하게는 TPM일 수 있다.
만약, 상기 해쉬 값과 TPM내의 해쉬 값이 동일하지 않다면, 제어부(560)는 TPM의 상태를 신뢰 상태(trust)에서 신뢰할 수 없는 상태(un-trust)로 변경하거나 사용자의 시스템을 리부트(reboot)한다(S1051).
반면, 상기 해쉬 값과 TPM내의 해쉬 값이 동일하다면, 제어부(560)는 자기 수정 코드의 실행/수정을 허가한다(S1013).
제어부(560)는 자기 수정 코드가 자신을 수정할 때마다, 수정된 자기 수정 코드의 해쉬 값을 계산하고 대응되는 해쉬 값이 TPM내에 존재하는 지 검색부(550)를 통해 검색하여, 상호 값을 비교한다(S1021, S1031).
만약 수정된 자기 수정 코드의 해쉬 값과 동일 값이 TPM 내에 존재하는 경우, 제어부(560)는 자기 수정 코드의 실행/수정을 허가하며 상기 단계들을 반복한다(S1041).
반면, 존재하지 않을 경우에는 TPM의 상태를 신뢰 상태(trust)에서 신뢰할 수 없는 상태(un-trust)로 변경하거나 프로그램의 실행을 중단한다(S1051).
이상 첨부된 도면을 참조하여 본 발명의 실시예를 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다.
상기한 바와 같은 본 발명의 자기 수정 코드의 무결성 검증 장치 및 방법에 따르면 자기 수정 코드의 기준 해쉬 값들을 통해 자기 수정 코드의 무결성을 검증할 수 있는 장점이 있다.

Claims (5)

  1. 자기 수정 코드(self modifying code) 및 상기 자기 수정 코드 내에 마크(mark)된 소정 코드 블록에 대한 정보를 저장하고 있는 데이터 테이블 중 적어도 어느 하나를 기준 해쉬 값으로 생성하는 생성부; 및
    상기 생성된 기준 해쉬 값과 상기 자기 수정 코드가 자신을 수정할 때 생성되는 소정의 해쉬 값을 비교하여 상기 자기 수정 코드의 무결성을 검증하는 제어부를 포함하는, 자기 수정 코드의 무결성 검증 장치.
  2. 제 1항에 있어서,
    상기 생성부는 상기 마크된 코드 블록에 따라서 수정된 다수의 상기 자기 수정 코드의 기준 해쉬 값을 생성하는, 자기 수정 코드의 무결성 검증 장치.
  3. 제 2항에 있어서,
    상기 데이터 테이블은 상기 마크된 코드 블록의 시작 값 및 수정 가능한 상기 마크된 코드 블록의 길이 값 중 적어도 어느 하나를 포함하고, 상기 기준 해쉬 값은 SHA-1(Secure Hash Algorithm), MD(Message Digest), 및 DES(Data Encryption Standard) 알고리즘 중 어느 하나를 이용하여 생성되는, 자기 수정 코드의 무결성 검증 장치.
  4. 자기 수정 코드(self modifying code) 및 상기 자기 수정 코드 내에 마크(mark)된 소정 코드 블록에 대한 정보를 저장하고 있는 데이터 테이블 중 적어도 어느 하나를 기준 해쉬 값으로 생성하는 단계; 및
    상기 생성된 기준 해쉬 값과 상기 자기 수정 코드가 자신을 수정할 때 생성되는 소정의 해쉬 값을 비교하여 상기 자기 수정 코드의 무결성을 검증하는 단계를 포함하는, 자기 수정 코드의 무결성 검증 방법.
  5. 제 4항에 있어서,
    상기 마크된 코드 블록에 따라서 수정된 다수의 상기 자기 수정 코드의 기준 해쉬 값을 생성하는 단계를 더 포함하고, 상기 데이터 테이블은 상기 마크된 코드 블록의 시작 값 및 수정 가능한 상기 마크된 코드 블록의 길이 값 중 적어도 어느 하나를 포함하는, 자기 수정 코드의 무결성 검증 방법.
KR1020060047232A 2006-05-25 2006-05-25 자기 수정 코드의 무결성 검증 장치 및 방법 KR100772881B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020060047232A KR100772881B1 (ko) 2006-05-25 2006-05-25 자기 수정 코드의 무결성 검증 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020060047232A KR100772881B1 (ko) 2006-05-25 2006-05-25 자기 수정 코드의 무결성 검증 장치 및 방법

Publications (1)

Publication Number Publication Date
KR100772881B1 true KR100772881B1 (ko) 2007-11-05

Family

ID=39060658

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060047232A KR100772881B1 (ko) 2006-05-25 2006-05-25 자기 수정 코드의 무결성 검증 장치 및 방법

Country Status (1)

Country Link
KR (1) KR100772881B1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102163268A (zh) * 2010-02-18 2011-08-24 汤姆森许可贸易公司 在执行期间验证软件代码的完整性的方法和设备
CN109145651A (zh) * 2018-08-22 2019-01-04 何晓行 一种数据处理方法及装置
KR20200057438A (ko) * 2018-11-16 2020-05-26 순천향대학교 산학협력단 자원이 충분한 환경에서의 무결성 상호 검증 방안

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Jonathon T. Giffin, Strengthening Software Self-Checksumming via Self-Modifying Code, 21st Annual Computer Security Applications Conference (ACSAC'05) pp. 23-32
Yuqun Chen, "Oblivious hashing: A stealthy software integrity verification primitive," Information Hiding 2002, Noordwijkerhout, The Netherlands, Oct. 7-9, 2002.

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102163268A (zh) * 2010-02-18 2011-08-24 汤姆森许可贸易公司 在执行期间验证软件代码的完整性的方法和设备
EP2362314A1 (en) * 2010-02-18 2011-08-31 Thomson Licensing Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code
JP2011170847A (ja) * 2010-02-18 2011-09-01 Thomson Licensing ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置
CN109145651A (zh) * 2018-08-22 2019-01-04 何晓行 一种数据处理方法及装置
CN109145651B (zh) * 2018-08-22 2021-12-28 何晓行 一种数据处理方法及装置
KR20200057438A (ko) * 2018-11-16 2020-05-26 순천향대학교 산학협력단 자원이 충분한 환경에서의 무결성 상호 검증 방안
KR102176118B1 (ko) * 2018-11-16 2020-11-09 순천향대학교 산학협력단 자원이 충분한 환경에서의 무결성 상호 검증 방안

Similar Documents

Publication Publication Date Title
US11520894B2 (en) Verifying controller code
CN103093150B (zh) 一种基于可信芯片的动态完整性保护方法
CN103914658B (zh) 终端设备的安全启动方法及终端设备
JP5740573B2 (ja) 情報処理装置および情報処理方法
US9990255B2 (en) Repairing compromised system data in a non-volatile memory
US20190114401A1 (en) On device structure layout randomization for binary code to enhance security through increased entropy
CN101504704B (zh) 由星型信任链支持的嵌入式平台应用程序完整性验证方法
US20160098555A1 (en) Program code attestation circuitry, a data processing apparatus including such program code attestation circuitry and a program attestation method
CN110069316B (zh) 实体的完整性验证
US20220198003A1 (en) Detecting added functionality in open source package
US20130091394A1 (en) Data processing apparatus and validity verification method
CN103793651A (zh) 基于Xen虚拟化的内核完整性检测方法
US11044096B2 (en) Blockchain based digital identity generation and verification
KR100772881B1 (ko) 자기 수정 코드의 무결성 검증 장치 및 방법
CN114661540A (zh) 测量容器
KR20220027965A (ko) 펌웨어 롤백 방지
CN109753788B (zh) 内核运行时的完整性校验方法及计算机可读存储介质
Paul et al. Take control of your PC with UEFI secure boot
TWI682296B (zh) 映像檔打包方法及映像檔打包系統
JP7050503B2 (ja) 完全性検証装置、完全性検証システム、完全性検証方法、及び、完全性検証プログラム
KR101893504B1 (ko) 리눅스 환경에서 파일 무결성 검증 장치 및 방법
CN113157543A (zh) 一种可信度量方法及装置、服务器、计算机可读存储介质
CN113360914A (zh) 一种bios更新的方法、系统、设备及介质
KR102369874B1 (ko) 무결성 검증 대상 디바이스에 대한 os 및 무결성 정보의 통합 업데이트 방법 및 원격 검증 시스템, os 배포 서버 및 무결성 검증 대상 디바이스
JP7341376B2 (ja) 情報処理装置、情報処理方法、及び、情報処理プログラム

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee