KR102132933B1 - 소프트웨어의 제어 흐름 보호장치 및 그 방법 - Google Patents

소프트웨어의 제어 흐름 보호장치 및 그 방법 Download PDF

Info

Publication number
KR102132933B1
KR102132933B1 KR1020190111702A KR20190111702A KR102132933B1 KR 102132933 B1 KR102132933 B1 KR 102132933B1 KR 1020190111702 A KR1020190111702 A KR 1020190111702A KR 20190111702 A KR20190111702 A KR 20190111702A KR 102132933 B1 KR102132933 B1 KR 102132933B1
Authority
KR
South Korea
Prior art keywords
protection
code
pointer
pointers
control flow
Prior art date
Application number
KR1020190111702A
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 KR1020190111702A priority Critical patent/KR102132933B1/ko
Application granted granted Critical
Publication of KR102132933B1 publication Critical patent/KR102132933B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • G06F8/434Pointers; Aliasing
    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Storage Device Security (AREA)

Abstract

본 발명은 프로그램에 포함된 민감한 포인터들 중에 공격 가능성이 높고 낮음을 판단하여 선택적으로 보호 메커니즘을 적용함으로써 프로그램의 보안성을 높임과 함께 성능 부하를 최소화하도록 한 소프트웨어의 제어 흐름 보호장치 및 그 방법에 관한 것으로서, 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 사용자의 코드 변환 설정을 통해 코드 변환을 설정하는 코드변환 설정기와, 상기 코드변환 설정기로부터 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 입력받고, 주어진 설정 정보에 따라 소스 코드에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리를 생성하는 프로그램 분석 및 코드 변환기를 포함한다.

Description

소프트웨어의 제어 흐름 보호장치 및 그 방법{Protection Device and method for Software control flow}
본 발명은 성능 향상을 위해 소프트웨어(SOFTWARE; 이하 SW라고 함)의 제어 흐름 보호 기술을 적용한 소프트웨어의 제어 흐름 보호 장치 및 그 방법에 관한 것이다.
최근에는 보안에 취약한 소프트웨어를 사용함으로 인해 해킹과 같은 사이버 공격에 노출되는 사례가 증가하고 있다. 이에, 소프트웨어 개발자들은 소프트웨어 개발단계에서부터 보안 취약점(vulnerability)을 줄이기 위한 다양한 연구들을 진행하고 있다. 이처럼 소프트웨어의 보안 취약점을 줄이는 것에 관한 중요성이 커지고 있다.
따라서 소프트웨어의 보안 취약점을 개선하기 위해 소프트웨어의 제어 흐름 보호 기술을 적용하고 있는데, 이는 버퍼오버플로우 등 SW 취약점을 악용한 메모리 오염공격을 통해 공격자가 의도한 코드로 SW의 실행흐름을 변조하려는 시도를 미연에 방어하는 기술이다.
이러한 운영체제 수준에서 응용 프로그램의 일반적인 제어 흐름을 보호하려는 기술은 ASLR(Address Space Layout Randomization) 등의 기법을 통해 이미 일반화가 되었고, 최근에는 응용 SW 코드 내부에 제어 흐름 보호 감시 코드를 탑재하여 실행 시간에 제어흐름을 더욱 정밀하게 보호하려는 기법이 시도되고 있다.
예를 들면, CPI(Code Pointer Integrity)는 CFI(Control Flow Integrity)와 더불어 응용 SW 내부에 제어흐름 감시 관련 코드를 탑재하여 실행시간에 응용 SW의 제어흐름을 보호하는 대표적인 기법으로 점차 적용범위를 넓혀가고 있다.
CPI는 프로그램의 코드 포인터 정보를 정적 분석하여 실행 시간에 코드 포인터 정보를 안전한 메모리 공간에 저장하여 보호하고, 공격자의 코드 포인터 변조에 의한 제어흐름 탈취를 미연에 방어하는 기법이다.
CPI에 의한 제어 흐름 보호 기능의 핵심은 공격자에 의해 변조된 코드 포인터 사용을 구조적으로 방지하는 것이다. 제어 흐름에 영향을 줄 수 있는 민감한 포인터(sensitive pointer) 집합(코드 포인터 및 코드 포인터를 포함하는 데이터 구조체의 포인터)은 공격자가 접근할 수 없는 안전한 메모리 공간에 별도로 재할당하고, 보호 영역에 재할당된 민감한 포인터 집합은 컴파일된 코드에 명시된 값으로만 업데이트 한다.
실행시간 공격자에 의해 포인터가 변조되더라도 프로그램은 안전한 메모리 공간의 대체된 포인터 값만 사용하게 함으로써 공격자에 의해 변조된 포인터 값 사용을 원천적으로 방지한다. 즉, 제어흐름에 영향을 미치는 포인터의 무결성을 보증하여 프로그램의 제어흐름을 보호한다.
그러나 프로그램에 포함된 코드 포인터의 개수가 늘어나면, 이를 저장할 안전한 메모리 공간 역시 비례해서 늘어야 하고, 대체된 코드 포인터 그룹 값의 초기화, 업데이트, 접근을 위한 명령코드 또한 부가적으로 늘어나게 되어 프로그램의 오버헤드가 늘어나는 문제가 있었다.
특히, 코드 포인터를 포함하는 데이터 구조체 포인터가 늘어나거나, C++처럼 객체 상속에 따른 가상 포인터 사용이 빈번히 발생하게 되면, 프로그램에 포함되는 제어 흐름 관련 포인터의 수가 늘어나 심각한 성능저하를 일으킬 수 있다.
본 발명의 목적은 프로그램에 포함된 민감한 포인터들 중에 공격 가능성이 높고 낮음을 판단하여 선택적으로 보호 메커니즘을 적용함으로써 프로그램의 보안성을 높임과 함께 성능 부하를 최소화하도록 한 소프트웨어의 제어 흐름 보호장치 및 그 방법을 제공하는 데에 있다.
상술한 목적을 달성하기 위한 본 발명의 일 실시 예에 따른 소프트웨어의 제어 흐름 보호장치는 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 사용자의 코드 변환 설정을 통해 코드 변환을 설정하는 코드변환 설정기와, 상기 코드변환 설정기로부터 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 입력받고, 주어진 설정 정보에 따라 소스 코드에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리를 생성하는 프로그램 분석 및 코드 변환기를 포함한다.
이때, 상기 코드 변환 설정기는 상기 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 CPI적용대상 코드 포인터를 선별적으로 선택하여 코드 변환에 적용할 수 있다.
또한, 상기 보호 수준은 대상 프로그램의 1 단계 내지 N 단계 중 CPI 보호 수준 n을 지정하고, 적용대상 포인터의 그룹을 G, 전체 CPI 보호대상 포인터의 크기를 K라고 할 때(K=|G|) n/N*K개 만큼의 포인터만 보호할 수 있다.
또한, 상기 대상 프로그램의 1 단계 내지 N 단계 중 1단계에서 n/N*K개 만큼의 포인터만 보호하고 N 단계에서는 모든 포인터를 CPI 기법으로 보호하고, 상기 보호 수준 n에서 보호할 포인터의 선택은 포인터의 그룹 G의 포인터를 순서화했을 때 첫 번째 포인터부터 시작하여 N/n번마다 혹은 N/n번마다 하나씩 보호할 포인터를 선택할 수 있다.
상기 보호 파일의 범위는 상기 대상 프로그램 중 보안 위험성이 높은 파일들에 대해 선별적으로 보호 메커니즘을 적용하고, 상기 보호 함수의 지정 범위는 상기 대상 프로그램 중 함수 단위 별로 보호 메커니즘을 적용할 수 있다.
또한, 본 발명의 실시예에 따른 소프트웨어의 제어 흐름 보호방법은 대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계; 상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계; 상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함한다.
또한, 본 발명의 실시예에 따른 컴퓨터 프로그램을 저장하고 있는 컴퓨터 판독 가능 기록매체로서, 상기 컴퓨터 프로그램은, 프로세서에 의해 실행되면, 대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계와, 상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계와, 상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함하는 방법을 상기 프로세서가 수행하도록 하기 위한 명령어를 포함한다.
또한, 본 발명의 실시예에 따른 컴퓨터 판독 가능한 기록매체에 저장되어 있는 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은, 프로세서에 의해 실행되면, 대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계와, 상기 보호 그룹에 속한 포인터들에 대해 프로그램에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계와, 상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함하는 방법을 포함하는 방법을 상기 프로세서가 수행하도록 하기 위한 명령어를 포함한다.
본 발명에 따르면, 프로그램에 포함된 민감한 포인터들 중에 공격 가능성이 높고 낮음을 판단하여 선택적으로 보호 메커니즘을 적용함으로써 프로그램의 보안성을 높임과 함께 성능 부하를 최소화할 수 있다.
즉, 일반적으로 보안 메커니즘이 응용프로그램에 적용되면 본래의 기능 수행에 있어 성능저하가 수반되는 것이 일반적이나 보호 대상인 민감한 포인터에 대해 선별적으로 보호 메커니즘을 적용한다면 프로그램의 성능 저하를 최소화하면서 제어 흐름 보호 메커니즘의 보안성을 유지할 수 있다.
또한, 본 발명은 안전성이 높거나 보안적으로 중요하지 않은 것으로 판단되는 파일 및 함수들을 보호 대상에서 제외함으로써 보호 메커니즘에 의한 불필요한 성능저하를 최소화할 수 있다.
따라서, 높은 성능 요구조건에 의해 제어 흐름 보호 메커니즘을 적용할 수 없었던 프로그램들에 대해서도 성능 요구조건 충족 범위에서 보안수준을 조절하고 적용 대상 파일 및 함수를 제한함으로써 제어 흐름 보호 메커니즘을 적용하여 보안성을 한층 더 강화할 수 있다.
도 1은 본 발명에 의한 소프트웨어의 제어 흐름 보호장치를 개략적으로 나타낸 구성도이고,
도 2는 도 1의 코드변환 설정기를 이용하여 제어 흐름 보호하기 위한 적용 방법을 설명하기 위한 순서도이며,
도 3은 본 발명에 의한 소프트웨어의 제어 흐름 보호 방법을 설명하기 위한 순서도이다.
먼저, 본 명세서 및 청구범위에서 사용되는 용어는 본 발명의 다양한 실시 예들에서의 기능을 고려하여 일반적인 용어들을 선택하였다. 하지만, 이러한 용어들은 당 분야에 종사하는 기술자의 의도나 법률적 또는 기술적 해석 및 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 일부 용어는 출원인이 임의로 선정한 용어일 수 있다. 이러한 용어에 대해서는 본 명세서에서 정의된 의미로 해석될 수 있으며, 구체적인 용어 정의가 없으면 본 명세서의 전반적인 내용 및 당해 기술 분야의 통상적인 기술 상식을 토대로 해석될 수도 있다.
또한, 본 명세서에 첨부된 각 도면에 기재된 동일한 참조 번호 또는 부호는 실질적으로 동일한 기능을 수행하는 부품 또는 구성요소를 나타낸다. 설명 및 이해의 편의를 위해서 서로 다른 실시 예들에서도 동일한 참조번호 또는 부호를 사용하여 설명하도록 한다. 즉, 복수의 도면에서 동일한 참조 번호를 가지는 구성 요소를 모두 도시하고 있다고 하더라도, 복수의 도면들이 하나의 실시 예를 의미하는 것은 아니다.
또한, 본 명세서 및 청구범위에서는 구성요소들 간의 구별을 위하여 '제1', '제2' 등과 같이 서수를 포함하는 용어가 사용될 수 있다. 이러한 서수는 동일 또는 유사한 구성 요소들을 서로 구별하기 위하여 사용하는 것이며, 이러한 서수 사용으로 인하여 용어의 의미가 한정 해석되어서는 안될 것이다. 일 예로, 이러한 서수와 결합된 구성 요소는 그 숫자에 의해 사용 순서나 배치 순서 등이 제한 해석되어서는 안된다. 필요에 따라서는, 각 서수들은 서로 교체되어 사용될 수도 있다.
본 명세서에서 단수의 표현은 문맥상 명백하게 다름을 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, '포함하다' 또는 '구성하다' 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
또한, 본 발명의 실시 예에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적인 연결뿐 아니라, 다른 매체를 통한 간접적인 연결의 경우도 포함한다. 또한 어떤 부분이 어떤 구성 요소를 포함한다는 의미는, 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있다는 것을 의미한다.
이하, 첨부된 도면을 참조하여 본 발명을 더욱 구체적으로 설명하기로 한다.
도 1은 본 발명에 의한 소프트웨어의 제어 흐름 보호장치를 개략적으로 나타낸 구성도이다.
본 발명에 의한 소프트웨어의 제어 흐름 보호장치는 도 1에 도시된 바와 같이, 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 사용자의 코드 변환 설정을 통해 코드 변환을 설정하는 코드변환 설정기(100)와, 상기 코드변환 설정기(100)로부터 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 입력받고, 주어진 설정 정보에 따라 소스코드에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리를 생성하는 프로그램 분석 및 코드 변환기(200)를 포함한다.
여기서, 상기 코드변환 설정기(100)는 대상 프로그램에 대한 보호 범위와 수준을 사용자가 원활하게 설정 및 관리하도록 하는 사용자 인터페이스 프로그램이며, 상기 프로그램 분석 및 코드 변환기(200)는 사용자의 설정대로 프로그램을 분석하여 제어 흐름 보호 기법을 적용하는 엔진 프로그램이다.
일반적으로 좀 더 용이한 프로그램의 분석, 코드 변환을 위해 제어 흐름 보호 기법은 컴파일러 단계에서 적용되며 본 발명에서는 프로그램 분석 및 코드 변환기(200)는 컴파일러의 프런트엔드(프로그램 분석단계), 옵티마이저(코드 변환단계)에 구현할 수 있다.
상기 코드변환 설정기(100)는 코드변환을 수행할 컴파일러에 입력될 제어 흐름 보호 수준, 보호 대상 파일, 보호 대상 함수를 사용자가 사용자 인터페이스를 통해 입력 및 관리할 수 있는 프로그램으로서 상기 프로그램 분석 및 코드 변환기(200)의 입력 파라미터를 관리하여 코드 변환시에 필요한 컴파일 및 링크 설정을 만들고 컴파일러를 실행한다.
상기 프로그램 분석 및 코드 변환기(200)는 소스코드에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 보호 메커니즘을 적용하는 프로그램으로서 상기 코드변환 설정기(100)로부터 적용 대상 파일들과 적용 대상 함수, 보호 수준을 입력받고, 주어진 설정 정보에 따라 보호 대상 코드를 분석 및 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성한다.
한편, 기존 CPI 기법은 정적 분석을 통해 모든 코드 포인터와 코드 포인터를 포함하는 데이터 포인터를 보호 대상으로 지정하나, 본 발명에서 사용자는 코드변환 설정기(100)에서 다음의 세 방법을 지정하여 CPI 적용대상 코드 포인터를 선별적으로 선택하여 코드 변환에 적용한다.
즉, 도 2는 도 1의 코드변환 설정기를 이용하여 제어 흐름 보호하기 위한 적용 방법을 설명하기 위한 순서도이다.
도 2에 도시된 바와 같이, 상기 코드변환 설정기(100)는 대상 프로그램에 대한 보호 수준을 지정한다(S110).
즉, 사용자는 1 ~ N 단계(N은 정수) 중 CPI 보호 수준 n(n은 정수)을 지정하는데, 이때 보호 수준 n이 커질수록 보안 수준은 높아진다. 적용대상 포인터의 그룹을 G, 전체 CPI 보호대상 포인터의 크기를 K라고 할 때(K=|G|) 보호 수준이 n이면, n/N*K 개만큼의 포인터만 보호한다. 따라서, 1단계에서는 1/N*K개만큼의 포인터만 보호하고 N단계에서는 모든 포인터를 보호하여 기존 CPI 기법과 동일하게 동작한다.
보호 수준 n에서 보호할 포인터의 선택은 포인터의 그룹 G의 포인터를 순서화했을 때 첫 번째 포인터부터 시작해 [N/n]번마다 혹은 [N/n]번마다 하나씩 보호할 포인터를 선택한다.
이어서, 대상 프로그램에 대한 보호 파일을 지정한다(S120).
즉, 사용자는 대상 프로그램을 구성하는 파일 중 보안 위험성이 높은 파일들에 대해 선별적으로 보호 메커니즘을 적용할 수 있다.
일반적으로 보안 결함이 많이 발생하는 것으로 알려진 파일들, 예를 들어 자주 호출되지 않는 함수들이 포함된 파일들 및 테스트가 상대적으로 적게 이루어진 파일을 포함할 수 있고, 개발자가 판단하기에 상대적으로 보안 수준이 높아야 될 것으로 판단되는 파일에 대해서만 선택적으로 제어 흐름 보호 메커니즘을 적용할 수 있다.
그리고 대상 프로그램에 대한 보호 함수를 지정한다(S130).
즉, 사용자는 대상 프로그램을 구성하는 파일 중 함수 단위 별로 보호 메커니즘을 적용할 수 있다. 자주 호출되지 않는 함수들, 테스트가 상대적으로 적게 이루어진 함수를 포함할 수 있고, 개발자가 판단하기에 상대적으로 보안 수준이 높아야 될 것으로 판단되는 함수에 대해서만 선택적으로 제어흐름 보호 메커니즘을 적용할 수 있다.
도 3은 본 발명에 의한 소프트웨어의 제어 흐름 보호 방법을 설명하기 위한 순서도이다.
본 발명에 의한 소프트웨어의 제어 흐름 보호 방법은 도 3에 도시된 바와 같이, 소스 코드에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리한다(S210).
이어서, 상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성한다(S220).
그리고, 상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 일반적인 컴파일 과정으로 바이너리 코드를 생성한다(S230).
본 발명의 다양한 실시예들에 따른 장치들의 적어도 일부(예를 들면, 모듈들 또는 그 기능들) 또는 방법들의 적어도 일부(예를 들면, 동작들)는, 예컨대, 프로그래밍 모듈의 형태로 컴퓨터 판독 가능한 저장매체에 저장된 명령들로서 구현될 수 있다. 명령들이 프로세서에 의해 실행될 경우, 하나 이상의 프로세서들이 이 명령들에 해당하는 기능들을 실행할 수 있다.
컴퓨터 판독 가능한 매체는, 하드디스크, 플로피디스크, 마그네틱 매체(magnetic media)(예를 들면, 자기테이프), 광기록 매체(optical media)(예를 들면, CD-ROM(compact disc ROM), DVD, 자기-광 매체(magneto-optical media)(예를 들면, 플롭티컬 디스크(floptical disk)), 하드웨어 장치(예를 들면, ROM, RAM, 또는 플래시 메모리 등) 등을 포함할 수 있다. 프로그램 명령들로는 컴파일러에 의해 만들어지는 기계어 코드 또는 인터프리터를 사용하여 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함할 수 있다. 전술한 하드웨어의 기능들은 다양한 실시예들에 따른 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 구현될 수 있으며, 그 역도 마찬가지다.
한편, 첨부된 블록도의 각 블록과 흐름도의 각 단계의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수도 있다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 블록도의 각 블록에서 설명된 기능들을 수행하는 수단을 생성하게 된다.
이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 기록매체(또는 메모리) 등에 저장되는 것도 가능하므로, 그 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 기록매체(또는 메모리)에 저장된 인스트럭션들은 블록도의 각 블록에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다.
그리고, 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 블록도의 각 블록에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 적어도 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실시 예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
한편, 이상에서는 본 발명의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 발명은 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 발명의 요지를 벗어남이 없이 당해 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 발명의 기술적 사상이나 전망으로부터 개별적으로 이해되어져서는 안될 것이다.
100 : 코드변환 설정기 200 : 프로그램 분석 및 코드 변환기

Claims (10)

  1. 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 사용자의 코드 변환 설정을 통해 코드 변환을 설정하는 코드변환 설정기와,
    상기 코드변환 설정기로부터 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 입력받고, 주어진 설정 정보에 따라 소스 코드에 포함된 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리를 생성하는 프로그램 분석 및 코드 변환기를 포함하는 소프트웨어의 제어 흐름 보호장치.
  2. 제1항에 있어서,
    상기 코드 변환 설정기는 상기 대상 프로그램에 대한 보호 수준, 보호 파일 및 보호 함수의 범위를 CPI적용대상 코드 포인터를 선별적으로 선택하여 코드 변환에 적용하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  3. 제2항에 있어서,
    상기 보호 수준은 대상 프로그램의 1 단계 내지 N 단계 중 CPI 보호 수준 n을 지정하고, 적용대상 포인터의 그룹을 G, 전체 CPI 보호대상 포인터의 크기를 K라고 할 때(K=|G|), n/N*K개 만큼의 포인터만 보호하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  4. 제3항에 있어서,
    상기 대상 프로그램의 1 단계 내지 N 단계 중 1단계에서 n/N*K개 만큼의 포인터만 보호하고 N 단계에서는 모든 포인터를 CPI 기법으로 보호하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  5. 제3항에 있어서,
    상기 보호 수준 n에서 보호할 포인터의 선택은 포인터의 그룹 G의 포인터를 순서화했을 때 첫 번째 포인터부터 시작하여 N/n번마다 혹은 N/n번마다 하나씩 보호할 포인터를 선택하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  6. 제1항에 있어서, 상기 보호 파일의 범위는 상기 대상 프로그램 중 보안 위험성이 높은 파일들에 대해 선별적으로 보호 메커니즘을 적용하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  7. 제1항에 있어서,
    상기 보호 함수의 지정 범위는 상기 대상 프로그램 중 함수 단위 별로 보호 메커니즘을 적용하는 것을 특징으로 하는 소프트웨어의 제어 흐름 보호장치.
  8. 대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계;
    상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계;
    상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함하여 이루어진 것을 특징으로 하는 소프트웨어의 제어 흐름 보호 방법.
  9. 컴퓨터 프로그램을 저장하고 있는 컴퓨터 판독 가능 기록매체로서,
    상기 컴퓨터 프로그램은, 프로세서에 의해 실행되면,
    대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계와,
    상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계와,
    상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함하는 방법을 상기 프로세서가 수행하도록 하기 위한 명령어를 포함하는, 컴퓨터 판독 가능한 기록매체.
  10. 컴퓨터 판독 가능한 기록매체에 저장되어 있는 컴퓨터 프로그램으로서,
    상기 컴퓨터 프로그램은, 프로세서에 의해 실행되면,
    대상 프로그램에 포함된 다수의 포인터들을 보호 수준, 보호 파일 및 보호 함수의 범위에 따라 보호 그룹과 비보호 그룹으로 분리하는 단계와,
    상기 보호 그룹에 속한 포인터들에 대해 코드 포인터 및 코드 포인터를 포함하는 데이터 구조체 포인터를 분석하고 컴파일 과정에서 코드 변환을 수행하여 제어 흐름 보호 메커니즘이 적용된 바이너리 코드를 생성하는 단계와,
    상기 비보호 그룹에 속한 포인터들에 대해 추가적인 보호 메커니즘 적용 없이 컴파일 과정으로 바이너리 코드를 생성하는 단계를 포함하는 방법을 포함하는 방법을 상기 프로세서가 수행하도록 하기 위한 명령어를 포함하는, 컴퓨터 프로그램.
KR1020190111702A 2019-09-09 2019-09-09 소프트웨어의 제어 흐름 보호장치 및 그 방법 KR102132933B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190111702A KR102132933B1 (ko) 2019-09-09 2019-09-09 소프트웨어의 제어 흐름 보호장치 및 그 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190111702A KR102132933B1 (ko) 2019-09-09 2019-09-09 소프트웨어의 제어 흐름 보호장치 및 그 방법

Publications (1)

Publication Number Publication Date
KR102132933B1 true KR102132933B1 (ko) 2020-07-10

Family

ID=71604210

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190111702A KR102132933B1 (ko) 2019-09-09 2019-09-09 소프트웨어의 제어 흐름 보호장치 및 그 방법

Country Status (1)

Country Link
KR (1) KR102132933B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000076310A (ko) * 1997-03-27 2000-12-26 페레고스 조지, 마이크 로스 리스크 구조를 갖는 8 비트 마이크로콘트롤러
JP2007518176A (ja) * 2004-01-14 2007-07-05 コミサリア、ア、レネルジ、アトミク 最適化コードの自動発生システム
KR20080018683A (ko) * 2006-08-25 2008-02-28 삼성전자주식회사 실행 프로그램의 변조 방지 방법 및 그 장치
KR20090033228A (ko) * 2006-06-23 2009-04-01 마이크로소프트 코포레이션 데이터 흐름 보전의 실시에 의한 소프트웨어 보호 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20000076310A (ko) * 1997-03-27 2000-12-26 페레고스 조지, 마이크 로스 리스크 구조를 갖는 8 비트 마이크로콘트롤러
JP2007518176A (ja) * 2004-01-14 2007-07-05 コミサリア、ア、レネルジ、アトミク 最適化コードの自動発生システム
KR20090033228A (ko) * 2006-06-23 2009-04-01 마이크로소프트 코포레이션 데이터 흐름 보전의 실시에 의한 소프트웨어 보호 방법
KR20080018683A (ko) * 2006-08-25 2008-02-28 삼성전자주식회사 실행 프로그램의 변조 방지 방법 및 그 장치

Similar Documents

Publication Publication Date Title
EP3308315B1 (en) Behavioral malware detection using an interpreter virtual machine
US8756434B2 (en) System and method for executing an encrypted binary from a memory pool
JP6378758B2 (ja) 仮想マシンにおけるマルウェア検出のためのプロセス評価
US8099596B1 (en) System and method for malware protection using virtualization
KR102189296B1 (ko) 가상 머신 보안 어플리케이션을 위한 이벤트 필터링
CN107077562B (zh) 用于动态控制代码执行的计算机实现的方法和系统
US20120284792A1 (en) System and Method for Aggressive Self-Modification in Dynamic Function Call Systems
US10956157B1 (en) Taint protection during speculative execution
US8041958B2 (en) Method for preventing malicious software from execution within a computer system
US7251735B2 (en) Buffer overflow protection and prevention
US20170103206A1 (en) Method and apparatus for capturing operation in a container-based virtualization system
JP2019502197A (ja) ランタイム生成コードにおける悪意のあるコードの検出のためのシステムおよび方法
US8694797B2 (en) Method for preventing malicious software from execution within a computer system
US8775826B2 (en) Counteracting memory tracing on computing systems by code obfuscation
US20200380150A1 (en) Method of encoding and decoding memory data for software security, recording medium and apparatus for performing the method
EP2942727B1 (en) Return-oriented programming as an obfuscation technique
KR20220108176A (ko) 도메인 전이 디스에이블 구성 파라미터
JP2018152061A (ja) 安全なジャストインタイム(jit)コード生成
US10885184B1 (en) Rearranging executables in memory to prevent rop attacks
KR102132933B1 (ko) 소프트웨어의 제어 흐름 보호장치 및 그 방법
US11113392B2 (en) Executable binary code insertion
Kirmani et al. Analyzing detection avoidance of malware by process hiding
CN111898119A (zh) 控制流完整性保护方法、装置、设备及存储介质
US10019576B1 (en) Security control system for protection of multi-core processors
KR102544801B1 (ko) 데이터 재사용 공격에 대한 방어 방법 및 시스템

Legal Events

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