KR20190092235A - An efficient control-flow integrity vefifing method based on unpredictability - Google Patents

An efficient control-flow integrity vefifing method based on unpredictability Download PDF

Info

Publication number
KR20190092235A
KR20190092235A KR1020180133478A KR20180133478A KR20190092235A KR 20190092235 A KR20190092235 A KR 20190092235A KR 1020180133478 A KR1020180133478 A KR 1020180133478A KR 20180133478 A KR20180133478 A KR 20180133478A KR 20190092235 A KR20190092235 A KR 20190092235A
Authority
KR
South Korea
Prior art keywords
program
control flow
verification
flow integrity
integrity verification
Prior art date
Application number
KR1020180133478A
Other languages
Korean (ko)
Other versions
KR102131689B1 (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 고려대학교 산학협력단
Publication of KR20190092235A publication Critical patent/KR20190092235A/en
Application granted granted Critical
Publication of KR102131689B1 publication Critical patent/KR102131689B1/en

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
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Debugging And Monitoring (AREA)

Abstract

Disclosed is an efficient control-flow integrity (CFI) verification method based on unpredictability, which uses a precise control-flow graph (CFG) to increase security. According to the present invention, the efficient control-flow integrity verification method is executed by a verification apparatus including a program execution unit executing a target program and a program verification unit verifying CFI of the target program and comprises the following steps: (a) allowing the program execution unit to execute the target program and transmit a CFG of the target program to the program verification unit; (b) allowing the program execution unit to transmit a CFI verification request to the program verification unit when a branch statement occurs in the target program; (c) allowing the program verification unit to determine whether to execute CFI verification based on a predetermined probability in response to the CFI verification request; (d) allowing the program verification unit to perform the CFI verification when execution of the CFI verification is determined; and (e) allowing the program verification unit to transmit a verification result of the CFI verification to the program execution unit.

Description

예측 불가능성에 기반한 효율적인 소프트웨어 제어흐름 무결성 검증 방법{AN EFFICIENT CONTROL-FLOW INTEGRITY VEFIFING METHOD BASED ON UNPREDICTABILITY}Effective Software Control Flow Integrity Verification Based on Unpredictability {AN EFFICIENT CONTROL-FLOW INTEGRITY VEFIFING METHOD BASED ON UNPREDICTABILITY}

본 발명은 소프트웨어의 제어흐름 무결성 검증 방법에 관한 것으로, 특히 예측 불가능한 확률에 기반하여 제어흐름의 무결성을 검증하여 악의적인 제어흐름 조작을 예방할 수 있는 소프트웨어 제어흐름 무결성 검증 방법에 관한 것이다.The present invention relates to a method for verifying control flow integrity of software, and more particularly, to a method for verifying control flow integrity of a software to prevent malicious control flow manipulation by verifying the integrity of the control flow based on an unpredictable probability.

소프트웨어 또는 프로그램이 정상적으로 동작할 경우 정상 제어흐름 그래프(Control-Flow Graph, CFG) 상에 명시된 대로만 제어흐름(코드 실행 흐름)이 발생해야 한다. 그러나, 공격자가 소프트웨어 내의 취약점을 이용해서 정상적인 CFG 상에서는 발생할 수 없는 제어흐름을 발생시킬 수 있는데, 이를 제어흐름 조작 공격이라 한다. 대표적인 공격 기법으로 Buffer Overflow, Return-Oriented Programming(ROP) 등이 있다.If the software or program operates normally, the control flow (code execution flow) should occur only as specified on the normal control-flow graph (CFG). However, an attacker can use a vulnerability in software to generate a control flow that cannot occur on normal CFGs. This is called a control flow manipulation attack. Typical attack techniques include Buffer Overflow and Return-Oriented Programming (ROP).

소프트웨어의 제어흐름이 조작 가능하다는 것은 개발자가 의도하지 않은 임의의 기능을 공격자가 실행 가능하다는 것을 의미하고, 이는 결국 소프트웨어가 공격자의 의도대로 동작하도록 장악할 수 있다는 것을 의미한다.The controllable flow of software means that the attacker can execute arbitrary functions not intended by the developer, which in turn means that the software can be controlled to operate as the attacker intended.

제어흐름 무결성(Control-Flow Integrity, CFI) 검증이란 소프트웨어 또는 프로그램의 제어흐름이 사전에 정의된 CFG를 따라 실행되는지를 검증하는 기술을 의미하며, 다양한 형태의 제어흐름 조작 공격을 근본적으로 막기 위한 연구가 수행되고 있다. 도 1과 같이 CFI 검증 메커니즘은 소프트웨어의 제어흐름(도 1의 Control-flow in target software)이 정상 CFG 정보(도 1의 Original CFG DB)에 명시되어 있다면 이를 허용하고, 명시되어 있지 않다면 이를 탐지한다.Control-Flow Integrity (CFI) verification refers to a technology that verifies whether the control flow of a software or program is executed according to a predefined CFG, and is a study to fundamentally prevent various types of control flow manipulation attacks. Is being performed. As shown in FIG. 1, the CFI verification mechanism allows the control flow of the software (Control-flow in target software of FIG. 1) if it is specified in the normal CFG information (Original CFG DB of FIG. 1), and if not, detects it. .

CFI 검증에서는 다른 소프트웨어 보호 기법과 같이 보안성(제어흐름 조작 공격 저항성)과 실용성(적은 퍼포먼스 저하)을 모두 고려해야 한다. 그러나, 현재 제안된 CFI 기법의 경우 보안성과 실용성 중 어느 하나에 초점을 맞추고 있기 때문에 소프트웨어에 실적용 하기에는 어려움이 따른다.CFI verification should consider both security (resistance to control flow attack attacks) and practicality (less performance degradation), as with other software protection techniques. However, the presently proposed CFI technique is difficult to perform in software because it focuses on either security or practicality.

대한민국 공개특허 제2017-0079858호 (2017.07.10. 공개)Republic of Korea Patent Publication No. 2017-0079858 (Published July 10, 2017) 대한민국 등록특허 제1575021호 (2015.12.01. 등록)Republic of Korea Patent No. 1575021 (registered on Dec. 1, 2015) 대한민국 공개특허 제2009-0066059호 (2009.06.23. 공개)Republic of Korea Patent Publication No. 2009-0066059 (Published June 23, 2009)

본 발명이 이루고자 하는 기술적인 과제는 예측 불가능한 확률에 기반한 효율적인 소프트웨어 제어흐름 무결성 검증 방법을 제공하는 것이다.The technical problem to be achieved by the present invention is to provide an efficient software control flow integrity verification method based on unpredictable probabilities.

본 발명의 실시 예에 따른 제어흐름 무결성 검증 방법은 타겟 프로그램을 실행하는 프로그램 실행부와 상기 타겟 프로그램의 제어흐름 무결성(Control-Flow Integrity, CFI)을 검증하는 프로그램 검증부를 포함하는 검증 장치에 의해 수행되고, (a) 상기 프로그램 실행부가 상기 타겟 프로그램을 실행한 후 상기 타겟 프로그램의 제어흐름 그래프(Control-Flow Graph, CFG)를 상기 프로그램 검증부로 송신하는 단계, (b) 상기 프로그램 실행부가, 상기 타겟 프로그램 내의 분기문이 발생한 경우 상기 프로그램 검증부로 제어흐름 무결성 검증 요청을 송신하는 단계, (c) 상기 제어흐름 무결성 검증 요청에 응답하여, 상기 프로그램 검증부가 소정의 확률에 기반하여 제어흐름 무결성 검증의 수행 여부를 결정하는 단계, (d) 상기 제어흐름 무결성 검증을 수행하기로 결정된 경우, 상기 프로그램 검증부가 상기 제어흐름 무결성 검증을 수행하는 단계, 및 (e) 상기 프로그램 검증부가 상기 제어흐름 무결성 검증의 검증 결과를 상기 프로그램 실행부로 송신하는 단계를 포함한다.Control flow integrity verification method according to an embodiment of the present invention is performed by a verification device including a program execution unit for executing a target program and a program verification unit for verifying the control flow integrity (Control-Flow Integrity, CFI) of the target program (A) after the program execution unit executes the target program, transmitting a control flow graph (CFG) of the target program to the program verification unit, (b) the program execution unit, the target Transmitting a control flow integrity verification request to the program verification unit when a branch statement occurs in a program; and (c) in response to the control flow integrity verification request, performing the control flow integrity verification based on a predetermined probability. Determining whether or not to (d) determine to perform the control flow integrity verification. , The program verify addition comprising the steps of: performing the control flow integrity verification, and (e) the additional program verify transmits a verification result of the control flow integrity verification parts of the program run.

또한, 본 발명의 실시 예에 따른 제어흐름 무결성 검증 장치는 타겟 프로그램을 실행하는 프로그램 실행부와 상기 타겟 프로그램의 제어흐름 무결성(CFI)을 검증하는 프로그램 검증부를 포함하고, 상기 프로그램 실행부는 상기 타겟 프로그램을 실행한 후 상기 타겟 프로그램의 제어흐름 그래프(Control-Flow Graph, CFG)를 상기 프로그램 검증부로 송신하고, 상기 타겟 프로그램 내의 분기문이 발생한 경우 상기 프로그램 검증부로 제어흐름 무결성 검증 요청을 송신하고, 상기 프로그램 검증부는 상기 제어흐름 무결성 검증 요청에 응답하여 소정의 확률에 기반하여 제어흐름 무결성 검증의 수행 여부를 결정하고, 상기 제어흐름 무결성 검증을 수행하기로 결정된 경우 상기 제어흐름 무결성 검증을 수행하고, 상기 제어흐름 무결성 검증의 검증 결과를 상기 프로그램 실행부로 송신한다.In addition, the control flow integrity verification apparatus according to an embodiment of the present invention includes a program execution unit for executing a target program and a program verification unit for verifying the control flow integrity (CFI) of the target program, the program execution unit is the target program After executing the control flow graph (CFG) of the target program to the program verification unit, and if a branch statement in the target program occurs, the control flow integrity verification request to the program verification unit, and The program verifier determines whether to perform control flow integrity verification based on a predetermined probability in response to the control flow integrity verification request, and performs the control flow integrity verification when it is determined to perform the control flow integrity verification, and The verification result of control flow integrity verification It transmits part program execution.

본 발명의 실시 예에 따른 소프트웨어 제어흐름 검증 방법에 의할 경우, 정밀한 CFG를 이용하여 보안성을 높일 수 있다.According to the software control flow verification method according to an embodiment of the present invention, security can be increased by using a precise CFG.

또한, 본 발명에 의할 경우 예측 불가능한 확률에 기반하여 검증 시점을 결정하여 검증의 횟수를 감소시킴으로써 소프트웨어의 성능 저하를 방지하여 실용성을 높일 수 있다.In addition, according to the present invention, the verification time can be determined based on an unpredictable probability to reduce the number of verifications, thereby preventing the performance degradation of the software and increasing the practicality.

본 발명의 상세한 설명에서 인용되는 도면을 보다 충분히 이해하기 위하여 각 도면의 상세한 설명이 제공된다.
도 1은 제어흐름 무결성 검증의 개요를 설명하기 위한 도면이다.
도 2는 본 발명의 일 실시 예에 의한 제어흐름 무결성 검증 장치의 기능 블럭도이다.
도 3은 도 2에 도시된 검증 장치에서 수행되는 제어흐름 무결성 검증 방법을 설명하기 위한 흐름도이다.
The detailed description of each drawing is provided in order to provide a thorough understanding of the drawings cited in the detailed description of the invention.
1 is a view for explaining an overview of control flow integrity verification.
2 is a functional block diagram of a control flow integrity verification apparatus according to an embodiment of the present invention.
3 is a flowchart illustrating a control flow integrity verification method performed in the verification apparatus shown in FIG. 2.

본 명세서에 개시되어 있는 본 발명의 개념에 따른 실시 예들에 대해서 특정한 구조적 또는 기능적 설명들은 단지 본 발명의 개념에 따른 실시 예들을 설명하기 위한 목적으로 예시된 것으로서, 본 발명의 개념에 따른 실시 예들은 다양한 형태들로 실시될 수 있으며 본 명세서에 설명된 실시 예들에 한정되지 않는다.Specific structural or functional descriptions of the embodiments according to the inventive concept disclosed herein are provided for the purpose of describing the embodiments according to the inventive concept only. It may be embodied in various forms and is not limited to the embodiments described herein.

본 발명의 개념에 따른 실시 예들은 다양한 변경들을 가할 수 있고 여러 가지 형태들을 가질 수 있으므로 실시 예들을 도면에 예시하고 본 명세서에서 상세하게 설명하고자 한다. 그러나, 이는 본 발명의 개념에 따른 실시 예들을 특정한 개시 형태들에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물, 또는 대체물을 포함한다.Embodiments according to the inventive concept may be variously modified and have various forms, so embodiments are illustrated in the drawings and described in detail herein. However, this is not intended to limit the embodiments in accordance with the concept of the invention to the specific forms disclosed, it includes all changes, equivalents, or substitutes included in the spirit and scope of the present invention.

제1 또는 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만, 예컨대 본 발명의 개념에 따른 권리 범위로부터 벗어나지 않은 채, 제1 구성 요소는 제2 구성 요소로 명명될 수 있고 유사하게 제2 구성 요소는 제1 구성 요소로도 명명될 수 있다.Terms such as first or second may be used to describe various components, but the components should not be limited by the terms. The terms are used only for the purpose of distinguishing one component from another, for example without departing from the scope of the rights according to the inventive concept, and the first component may be called a second component and similarly the second component. The component may also be referred to as a first component.

어떤 구성 요소가 다른 구성 요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성 요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성 요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성 요소가 다른 구성 요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는 중간에 다른 구성 요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성 요소들 간의 관계를 설명하는 다른 표현들, 즉 "~사이에"와 "바로 ~사이에" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.When a component is said to be "connected" or "connected" to another component, it may be directly connected to or connected to that other component, but it may be understood that other components may exist in the middle. Should be. On the other hand, when a component is said to be "directly connected" or "directly connected" to another component, it should be understood that no other component exists in the middle. Other expressions describing the relationship between components, such as "between" and "immediately between" or "neighboring to" and "directly neighboring", should be interpreted as well.

본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것으로서, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 본 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.The terminology used herein is for the purpose of describing particular example embodiments only and is not intended to be limiting of the invention. Singular expressions include plural expressions unless the context clearly indicates otherwise. In this specification, terms such as "comprise" or "have" are intended to indicate that there is a feature, number, step, action, component, part, or combination thereof described herein, but one or more other features. It is to be understood that the present invention does not exclude the possibility of the presence or the addition of numbers, steps, operations, components, parts, or combinations thereof.

다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.Unless defined otherwise, all terms used herein, including technical or scientific terms, have the same meaning as commonly understood by one of ordinary skill in the art. Terms such as those defined in the commonly used dictionaries should be construed as having meanings consistent with the meanings in the context of the related art, and are not construed in ideal or excessively formal meanings unless expressly defined herein. Do not.

이하, 본 명세서에 첨부된 도면들을 참조하여 본 발명의 실시 예들을 상세히 설명한다. 그러나, 특허출원의 범위가 이러한 실시 예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.Hereinafter, embodiments of the present invention will be described in detail with reference to the accompanying drawings. However, the scope of the patent application is not limited or limited by these embodiments. Like reference numerals in the drawings denote like elements.

도 2는 본 발명의 일 실시 예에 의한 제어흐름 무결성 검증 장치의 기능 블럭도이다.2 is a functional block diagram of a control flow integrity verification apparatus according to an embodiment of the present invention.

도 2를 참조하면, 제어흐름 무결성 검증 장치, 무결성 검증 장치 등으로 명명될 수도 있는 검증 장치(10)는 프로그램 실행부(100)와 프로그램 검증부(300)를 포함한다. 검증 장치(10)는 타겟 프로그램(또는 타겟 소프트웨어)을 실행하고 실행 중인 타겟 프로그램의 제어흐름 무결성(Control-Flow Integrity, CFI)을 검증할 수 있다. 본 발명이 적용되는 환경은 상시적으로 소프트웨어의 정상적인 동작이 요구되는 소프트웨어 실행 환경일 수 있다. 예컨대, 소프트웨어의 오작동이 심각한 피해로 이어질 수 있는 자율주행 자동차, 발전소와 같은 cirtical infrastructure, 또는 모든 하드웨어가 소프트웨어로 직접 제어되는 CPS(Cyber-Physical System) 등의 환경이 될 수 있다.2, the verification apparatus 10, which may be referred to as a control flow integrity verification apparatus, an integrity verification apparatus, or the like, includes a program execution unit 100 and a program verification unit 300. The verification device 10 may execute a target program (or target software) and verify control-flow integrity (CFI) of the target program being executed. The environment to which the present invention is applied may be a software execution environment in which normal operation of software is always required. For example, it can be an environment such as a cirtical infrastructure such as autonomous vehicles, power plants, or a CPS (Cyber-Physical System) in which all hardware is directly controlled by software, in which a malfunction of the software can lead to serious damage.

프로그램 실행부(100)는 검증 대상인 타겟 프로그램을 실행할 수 있다. 구체적으로, 프로그램 실행부(100)는 상기 타겟 프로그램을 실행하고, 상기 타겟 프로그램의 제어흐름 그래프(Control-Flow Graph, CFG)를 프로그램 검증부(300)로 송신할 수 있다. 프로그램 실행부(100)는 상기 CFG를 송신함으로써 상기 타겟 프로그램이 검증 대상 프로그램임을 프로그램 검증부(300)에 알릴 수 있다. 실시 예에 따라, 상기 제어흐름 그래프(CFG)는 상기 타겟 프로그램의 실행과 동시에 프로그램 검증부(300)로 송신되는 것으로 이해될 수도 있다.The program execution unit 100 may execute a target program to be verified. In detail, the program execution unit 100 may execute the target program, and transmit a control flow graph (CFG) of the target program to the program verification unit 300. The program executing unit 100 may notify the program verifying unit 300 that the target program is a verification target program by transmitting the CFG. According to an embodiment, the control flow graph CFG may be understood to be transmitted to the program verification unit 300 at the same time as the execution of the target program.

또한, 프로그램 실행부(100)는 상기 타겟 프로그램의 실행 중에 발생하는(또는 실행되는) 분기문(또는 분기 명령문)의 실행 전, 실행 후, 또는 실행과 동시에 상기 분기문에 따른 타겟 프로그램의 제어흐름 무결성의 검증 요청을 프로그램 검증부(300)로 송신할 수 있다. 상기 타겟 프로그램에는 복수개의 분기문이 존재할 수 있으며, 이러한 분기문이 발생할 때마다 프로그램 실행부(100)는 검증 요청을 송신할 수 있다.In addition, the program execution unit 100 controls the flow of the target program according to the branch statement before, after, or simultaneously with the execution of the branch statement (or branch statement) generated (or executed) during the execution of the target program. An integrity verification request may be transmitted to the program verification unit 300. There may be a plurality of branch statements in the target program, and whenever the branch statement occurs, the program execution unit 100 may transmit a verification request.

프로그램 실행부(100)는 검증 요청에 대한 프로그램 검증부(300)의 응답에 따라 상기 타겟 프로그램의 실행을 중단할 수 있다. 즉, 검증 요청에 대한 응답이 검증 성공을 의미하는 메시지이거나 검증을 수행하지 않았음을 의미하는 메시지인 경우 타겟 프로그램의 실행을 계속하고, 검증 요청에 대한 응답이 검증 실패를 의미하는 메시지인 경우 타겟 프로그램의 실행을 중단할 수 있다.The program execution unit 100 may stop execution of the target program according to the response of the program verification unit 300 to the verification request. That is, if the response to the verification request is a message indicating that the verification is successful or a message indicating that verification has not been performed, the execution of the target program is continued. If the response to the verification request is a message indicating the verification failure, the target You can stop the program from running.

실시 예에 따라, 프로그램 실행부(100)가 실행하는 타겟 프로그램은 프로그램 검증부(300)에 의해 컴파일된(또는 수정된) 프로그램, 즉 컴파일된 타겟 프로그램(또는 수정된 타겟 프로그램)을 의미할 수 있다.According to an embodiment, the target program executed by the program execution unit 100 may mean a program compiled (or modified) by the program verification unit 300, that is, a compiled target program (or modified target program). have.

프로그램 검증부(300)는 프로그램 실행부(100)로부터 제어흐름 그래프(CFG)를 수신한다. 수신된 제어흐름 그래프(CFG)는 별도의 저장 공간에 저장될 수 있다. 또한, 프로그램 검증부(300)는 프로그램 실행부(100)의 검증 요청에 응답하여 제어흐름을 검증하고, 검증 결과를 프로그램 실행부(100)로 송신할 수 있다.The program verification unit 300 receives a control flow graph CFG from the program execution unit 100. The received control flow graph CFG may be stored in a separate storage space. In addition, the program verification unit 300 may verify the control flow in response to the verification request of the program execution unit 100, and transmit the verification result to the program execution unit 100.

실시 예에 따라, 프로그램 검증부(300)는 상기 타겟 프로그램을 컴파일하거나 수정할 수 있다. 즉, 상기 타겟 프로그램이 컴파일되지 않았다면, 상기 타겟 프로그램을 컴파일할 수 있고, 컴파일 도중 또는 컴파일을 완료한 후에 상기 타겟 프로그램에 포함된 분기문의 전 또는 이후에 검증 요청을 수행하는 명령어를 삽입할 수 있다. 상기 타겟 프로그램이 컴파일된 프로그램이라면, 프로그램 검증부(300)는 상기 타겟 프로그램에 포함된 분기문의 전 또는 이후에 검증 요청을 수행하는 명령어를 삽입할 수 있다.According to an embodiment, the program verification unit 300 may compile or modify the target program. That is, if the target program is not compiled, the target program may be compiled, and an instruction for performing a verification request may be inserted before or after the branch statement included in the target program during or after compilation. . If the target program is a compiled program, the program verification unit 300 may insert a command for performing a verification request before or after the branch statement included in the target program.

도 3은 도 2에 도시된 검증 장치에서 수행되는 제어흐름 무결성 검증 방법을 설명하기 위한 흐름도이다.3 is a flowchart illustrating a control flow integrity verification method performed in the verification apparatus shown in FIG. 2.

도 2와 도 3을 참조하면, 우선 프로그램 실행부(100)는 검증 장치(10)의 일부가 될 수 있는 소정의 저장 장치에 저장된 타겟 프로그램을 로드하여 상기 타겟 프로그램을 실행할 수 있다. 이때, 프로그램 실행부(100)는 상기 타겟 프로그램에 포함되어 있거나 상기 타겟 프로그램과 함께 저장되어 있는 상기 타겟 프로그램의 제어흐름 그래프(CFG)를 프로그램 검증부(300)로 송신할 수 있다.2 and 3, first, the program execution unit 100 may load a target program stored in a predetermined storage device that may be part of the verification apparatus 10 to execute the target program. In this case, the program execution unit 100 may transmit a control flow graph (CFG) of the target program included in the target program or stored with the target program to the program verification unit 300.

프로그램 검증부(300)는 프로그램 실행부(100)로부터 수신받은 CFG를 별도의 저장 공간에 저장함으로써, 상기 타겟 프로그램의 구동 과정에서 공격자의 공격에 의한 CFG의 조작에 영향을 받지 않고 상기 타겟 프로그램의 제어 흐름 무결성을 검증할 수 있다.The program verifying unit 300 stores the CFG received from the program executing unit 100 in a separate storage space, thereby preventing the CFG from being attacked by an attacker in the process of driving the target program. Control flow integrity can be verified.

상기 타겟 프로그램의 실행 중 분기문(또는 분기 명령어)이 발생한 경우(또는 출현한 경우), 프로그램 실행부(100)는 프로그램 검증부(300)로 제어흐름 무결성 검증 요청을 송신할 수 있다. 상기 제어흐름 무결성 검증 요청은 발생한 상기 분기문이 실행되기 전, 실행된 후, 또는 실행과 동시에 송신될 수 있다. 상기 타겟 프로그램의 실행은 상기 검증 요청에 대한 응답이 수신될 때까지 중단될 수 있으나, 실시 예에 따라 상기 타겟 프로그램은 상기 검증 요청이 송신된 이후에도 중단되지 않을 수도 있다. 상기 타겟 프로그램이 자율 주행 등과 같은 실시간으로 중단 없이 수행되어야 할 프로그램일 수도 있기 때문이다.When a branch statement (or a branch instruction) occurs (or appears) during execution of the target program, the program execution unit 100 may transmit a control flow integrity verification request to the program verification unit 300. The control flow integrity verification request may be sent before, after, or concurrent with execution of the branch statement that occurred. Execution of the target program may be stopped until a response to the verification request is received, but in some embodiments, the target program may not be stopped even after the verification request is transmitted. This is because the target program may be a program to be executed without interruption in real time such as autonomous driving.

제어흐름 무결성 검증 요청을 수신한 프로그램 검증부(300)는 제어흐름 무결성 검증의 수행 여부를 결정한다. 구체적으로, 프로그램 검증부(300)는 소정의 확률(p)로 "1"(또는 "0")을 출력하고 그 외에는(즉, p-1의 확률로) "0"(또는 "1")을 출력하는 함수를 이용하여 검증의 수행 여부를 결정할 수 있다. 즉, 상기 함수가 "1"(또는 "0")을 출력하는 경우 검증을 수행하고, 상기 함수가 "0"(또는 "1")을 출력하는 경우 검증을 수행하지 않을 수 있다. 상기 소정의 확률(p)은 미리 정해진 상수일 수 있으나, 본 발명이 이에 제한되는 것은 아니며, 상기 소정의 확률(p)은 타겟 프로그램의 종류, 길이, 분기문의 개수 등에 따라 변할 수도 있다. 또한, 타겟 프로그램의 보안성을 강조하기 위하여 큰 값을 갖는 p가 사용될 수 있고, 타겟 프로그램의 실용성(성능 저하 방지)를 위하여 작은 값을 갖는 p가 사용될 수 있다.The program verification unit 300 receiving the control flow integrity verification request determines whether to perform the control flow integrity verification. Specifically, the program verifying unit 300 outputs "1" (or "0") with a predetermined probability p and otherwise "0" (or "1") with a probability of p-1. You can determine whether to perform verification using a function that outputs. That is, the verification may be performed when the function outputs "1" (or "0"), and the verification may not be performed when the function outputs "0" (or "1"). The predetermined probability p may be a predetermined constant, but the present invention is not limited thereto, and the predetermined probability p may vary depending on the type, length, number of branch statements, etc. of the target program. In addition, p having a large value may be used to emphasize the security of the target program, and p having a small value may be used for the practicality (prevention of performance degradation) of the target program.

프로그램 검증부(300)가 검증 수행을 하지 않기로 결정한 경우, 즉 상기 함수의 출력 값이 "0"(또는 "1)인 경우, 프로그램 검증부(300)는 검증 결과, 즉 검증을 수행하지 않았음을 의미하는 메시지 또는 검증 성공을 의미하는 메시지를 프로그램 실행부(100)로 송신할 수 있다.When the program verifier 300 determines not to perform verification, that is, when the output value of the function is "0" (or "1"), the program verifier 300 does not perform verification. The message indicating the message or the message indicating the verification success may be transmitted to the program execution unit 100.

프로그램 검증부(300)가 검증을 수행하기로 결정한 경우, 즉 상기 함수의 출력 값이 "1"(또는 "0"인 경우, 프로그램 검증부(300)는 미리 수신된 제어흐름 그래프(CFG)를 이용하여 분기문에 의한 제어흐름의 무결성 여부를 검증할 수 있다. 즉, 분기문에 의한 제어흐름 이동이 제어흐름 그래프(CFG)에 미리 정의된 정상적인 제어흐름 이동에 해당하는 경우 검증은 성공하고, 분기문에 의한 제어흐름 이동이 제어흐름 그래프(CFG)에 미리 정의된 정상적인 제어흐름 이동에 해당하지 않는 경우 검증은 실패하게 된다. 검증 결과(검증 성공을 의미하는 메시지 또는 검증 실패를 의미하는 메시지)는 프로그램 실행부(100)로 송신된다. 프로그램 검증부(300)에 의한 제어흐름 무결성 검증의 예로, 분기문이 콜(call, 함수 호출) 명령어인 경우 스택(또는 스택 메모리)에 저장된 복귀 주소(return address, 리턴 어드레스)와 제어흐름 그래프(CFG)에 명시된 복귀 주소의 동일성 여부에 따라 검증 성공 여부가 결정되거나 콜 명령어에 따라 호출되는 함수(또는 함수의 어드레스)와 제어흐름 그래프(CFG)에 명시된 호출되는 함수(또는 호출되는 함수의 어드레스)의 동일성 여부에 따라 검증 성공 여부가 결정될 수 있고, 분기문이 점프(jump) 명령어인 경우 점프할(이동할) 주소(address)와 제어흐름 그래프(CFG)에 명시된 주소의 동일성 여부에 따라 검증 성공 여부가 결정될 수 있고, 분기문이 리턴(return)인 경우 리턴 명령에 따라 복귀할 리턴 어드레스와 제어흐름 그래프(CFG)에 명시된 리턴 어드레스의 동일성 여부에 따라 검증 성공 여부가 결정될 수 있다.When the program verifier 300 determines to perform verification, that is, when the output value of the function is "1" (or "0"), the program verifier 300 may determine the control flow graph CFG previously received. The control flow by the branch statement can be verified whether the control flow movement by the branch statement corresponds to the normal control flow movement predefined in the control flow graph (CFG). If the control flow movement by the branch statement does not correspond to the normal control flow movement predefined in the control flow graph (CFG), the verification will fail The verification result (message indicating verification success or message indicating verification failure) Is transmitted to the program execution unit 100. As an example of the control flow integrity verification by the program verification unit 300, the branch statement is stored in the stack (or stack memory) when the branch statement is a call (call function) instruction. The function (or function's address) and the control flow graph (CFG) that are determined to be successful or are called according to a call instruction are determined by the return address and the return address specified in the control flow graph (CFG). The success or failure of the verification can be determined by the identity of the called function (or address of the called function) specified in (), and if the branch statement is a jump instruction, the address and control flow graph to jump to (move). Validation can be determined based on whether or not the address specified in (CFG) is equal. If the branch statement is return, the return address to return according to the return instruction and the return address specified in the control flow graph (CFG) are determined. The success or failure of the verification may be determined.

검증 결과를 수신한 프로그램 실행부(100)는 검증 결과에 따라 타겟 프로그램의 계속 실행 여부를 결정할 수 있다. 구체적으로, 검증 결과가 검증 성공을 의미하는 메시지(검증을 수행하지 않았음을 의미하는 메시지를 포함함)인 경우 타겟 프로그램은 계속적으로 수행될 수 있으나, 검증 결과가 검증 실패를 의미하는 메시지인 경우 타겟 프로그램은 중단될 수 있다.The program execution unit 100 receiving the verification result may determine whether to continue executing the target program according to the verification result. Specifically, if the verification result is a message indicating that the verification is successful (including a message indicating that verification has not been performed), the target program may be continuously executed, but if the verification result is a message indicating verification failure. The target program may be aborted.

상술한 S200 단계 내지 S600 단계는 타겟 프로그램에서 분기문이 실행될 때마다 반복적으로 수행될 수 있다.The above-described steps S200 to S600 may be repeatedly performed whenever a branch statement is executed in the target program.

다른 실시 예로, 제어흐름 무결성 검증 방법은 S100 단계 이전에, 프로그램 검증부(300)가 타겟 프로그램에 포함된 분기문의 전 또는 후에 무결성 검증 요청을 수행하는 명령어를 삽입하여 검증 요청 명령어가 삽입된 타겟 프로그램(즉, 수정된 타겟 프로그램)을 생성하는 단계 및/또는 프로그램 검증부(300)가 상기 타겟 프로그램의 제어흐름 그래프를 생성하는 단계를 더 포함할 수 있다. 또한, 상기 수정된 타겟 프로그램의 생성 동작과 상기 타겟 프로그램의 구동 동작은 상이한 시간에 상이한 주체에 의해 수행될 수도 있다.In another embodiment, the control flow integrity verification method includes a target program in which the verification request command is inserted by inserting an instruction for performing the integrity verification request before or after the branch statement included in the target program by the program verification unit 300 before step S100. (Ie, generating a modified target program) and / or generating a control flow graph of the target program by the program verification unit 300. In addition, the operation of generating the modified target program and the operation of driving the target program may be performed by different subjects at different times.

또 다른 실시 예로, 제어흐름 무결성 검증 방법은 S100 단계 이전에, 프로그램 검증부(300)가 컴파일되지 않은 타겟 프로그램을 컴파일함으로써 컴파일된 타겟 프로그램을 생성하는 단계를 더 포함할 수 있다. 이때, 프로그램 검증부(300)는 상기 타겟 프로그램의 제어흐름 그래프(control-flow graph, CFG)를 생성하고, 생성된 CFG를 상기 컴파일된 타겟 프로그램 내에 삽입하거나, 상기 컴파일된 타겟 프로그램과 함께 저장할 수 있다.As another embodiment, the control flow integrity verification method may further include generating a compiled target program by compiling a target program that is not compiled by the program verifying unit 300 before step S100. In this case, the program verifying unit 300 may generate a control flow graph (CFG) of the target program, insert the generated CFG into the compiled target program, or store the compiled CFG with the compiled target program. have.

또한, 프로그램 검증부(300)는 상기 타겟 프로그램에 포함된 복수의 분기 명령어들의 이전 또는 이후에 프로그램 검증부(300)에 제어흐름 무결성 검증을 요청하는 명령어를 삽입할 수 있다. 무결성 검증을 요청하는 명령어의 삽입은 컴파일 과정에서 수행되거나 컴파일이 완료된 후에 수행될 수 있다. 따라서, 상기 컴파일된 타겟 프로그램에는 분기 명령어 이전 또는 이후에 존재하는 검증 요청 명령어가 삽입될 수 있으며, 프로그램 실행부(100)는 상기 컴파일된 타겟 프로그램을 실행되는 동안 분기 명령어가 수행되기 전 또는 이후에 프로그램 검증부(300)에 제어흐름 무결성 검증을 요청할 수 있다. 상기 분기문은 콜(call), 점프(jmp), 및/또는 리턴(ret) 명령어일 수 있다.In addition, the program verification unit 300 may insert a command for requesting control flow integrity verification to the program verification unit 300 before or after the plurality of branch instructions included in the target program. Insertion of an instruction requesting integrity verification may be performed during the compilation process or after the compilation is completed. Accordingly, a verification request instruction existing before or after a branch instruction may be inserted into the compiled target program, and the program execution unit 100 may perform the branch instruction before or after the execution of the compiled target program. The program verification unit 300 may request control flow integrity verification. The branch statement may be a call, jump, and / or return instruction.

제어흐름 조작 공격은 연속적인 제어흐름 조작을 통해 공격이 이루어진다. 이때 제어흐름 조작을 통해 수행되는 코드 조각들은 논리적으로 아주 강하게 결합되어 있기 때문에 공격자가 조작한 모든 코드 조각들이 연속적으로 실행되어야만 최종적으로 공격자가 의도한 목적을 달성할 수 있다. 그러나 이는 역으로, 연속적으로 발생하는 제어흐름 조작 중에서 어느 하나라도 제어흐름 무결성(CFI) 검사를 통해 탐지할 수 있다면 공격자가 의도한 행위를 무산시킬 수 있다는 것을 의미한다. 이러한 관점에서 모든 제어흐름 이동을 검사하기 보다는 선택적으로 제어흐름 이동을 검사하는 것이 보안성을 최대한 유지하면서도 실용성을 향상시킬 수 있는 방안이다. 선택적 검사를 수행할 때, 공격자가 검사를 우회할 수 없도록 하기 위해서는 검사 시점이 "예측 불가능"한 성질을 가져야 한다. 검사 시점을 공격자가 예측할 수 있다면 각 제어흐름 조작마다 (1-p)의 확률로 검증을 통과할 수 있다. 즉, 공격자가 최종적으로 의도한 행위를 수행하기 위해 총 m 번의 제어흐름 조작이 필요하다면 공격 성공 확률은 (1-p)m이 된다. 예를 들어, p=1/2이고 m=5라면 공격 성공 확률은 약 3%에 불과하며, m=10이라면 공격 성공확률은 0.1% 미만이 된다.Control flow manipulation attack is carried out through continuous control flow manipulation. In this case, the code fragments executed through the control flow manipulation are logically very tightly coupled, so that all the code fragments manipulated by the attacker must be executed continuously in order to achieve the intended purpose. Conversely, however, this means that if any of the control flow manipulations that occur continuously can be detected through control flow integrity (CFI) checks, the attacker can defeat the intended behavior. From this point of view, selectively inspecting control flow movements rather than checking all control flow movements can improve practicality while maintaining maximum security. When performing selective checks, the checkpoint must be "unpredictable" in order to prevent attackers from bypassing the check. If the attacker can predict the inspection time, the verification can be passed with a probability of (1-p) for each control flow manipulation. In other words, if a total of m control flow manipulations are required to perform the final intended behavior, the attack success probability is (1-p) m . For example, if p = 1/2 and m = 5, the probability of attack success is only about 3%. If m = 10, the probability of attack success is less than 0.1%.

이상에서 설명된 장치는 하드웨어 구성 요소, 소프트웨어 구성 요소, 및/또는 하드웨어 구성 요소 및 소프트웨어 구성 요소의 집합으로 구현될 수 있다. 예를 들어, 실시 예들에서 설명된 장치 및 구성 요소는, 예를 들어, 프로세서, 콘트롤러, ALU(Arithmetic Logic Unit), 디지털 신호 프로세서(Digital Signal Processor), 마이크로컴퓨터, FPA(Field Programmable array), PLU(Programmable Logic Unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(Operation System, OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술 분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(Processing Element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(Parallel Processor)와 같은, 다른 처리 구성(Processing Configuration)도 가능하다.The apparatus described above may be implemented as a hardware component, a software component, and / or a set of hardware components and software components. For example, the devices and components described in the embodiments may include, for example, processors, controllers, arithmetic logic units (ALUs), digital signal processors, microcomputers, field programmable arrays (PPAs), and PLUs. It may be implemented using one or more general purpose or special purpose computers, such as a programmable logic unit, a microprocessor, or any other device capable of executing and responding to instructions. The processing device may execute an operating system (OS) and one or more software applications executed on the operating system. The processing device may also access, store, manipulate, process, and generate data in response to the execution of the software. For convenience of explanation, one processing device may be described as being used, but one of ordinary skill in the art will appreciate that the processing device includes a plurality of processing elements and / or a plurality of types of processing elements. It can be seen that it may include. For example, the processing device may include a plurality of processors or one processor and one controller. Other processing configurations are also possible, such as parallel processors.

소프트웨어는 컴퓨터 프로그램(Computer Program), 코드(Code), 명령(Instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(Collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성 요소(Component), 물리적 장치, 가상 장치(Virtual Equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(Signal Wave)에 영구적으로, 또는 일시적으로 구체화(Embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.The software may include a computer program, code, instructions, or a combination of one or more of the above, and configure the processing device to operate as desired, or process it independently or in combination. You can command the device. Software and / or data may be any type of machine, component, physical device, virtual equipment, computer storage medium or device in order to be interpreted by or to provide instructions or data to the processing device. Or may be embodied permanently or temporarily in a signal wave to be transmitted. The software may be distributed over networked computer systems so that they may be stored or executed in a distributed manner. Software and data may be stored on one or more computer readable recording media.

실시 예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 좋ㅂ하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시 예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(Magnetic Media), CD-ROM, DVD와 같은 광기록 매체(Optical Media), 플롭티컬 디스크(Floptical Disk)와 같은 자기-광 매체(Magneto-optical Media), 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시 예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.Method according to the embodiment is implemented in the form of program instructions that can be executed by various computer means may be recorded on a computer readable medium. The computer readable medium may include program instructions, data files, data structures, and the like singly or in combination. Program instructions recorded on the media may be those specially designed and constructed for the purposes of the present disclosure, or they may be of the kind well-known and available to those having skill in the computer software arts. Examples of computer readable recording media include magnetic media such as hard disks, floppy disks, and magnetic tape, optical media such as CD-ROMs, DVDs, and magnetic disks such as floppy disks. Hardware devices specifically configured to store and execute program instructions, such as magneto-optical media, ROM, RAM, flash memory, and the like. Examples of program instructions include not only machine code generated by a compiler, but also high-level language code that can be executed by a computer using an interpreter or the like. The hardware device described above may be configured to operate as one or more software modules to perform the operations of the embodiments, and vice versa.

본 발명은 도면에 도시된 실시 예를 참고로 설명되었으나 이는 예시적인 것에 불과하며, 본 기술 분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성 요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성 요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다. 따라서, 본 발명의 진정한 기술적 보호 범위는 첨부된 등록청구범위의 기술적 사상에 의해 정해져야 할 것이다.Although the present invention has been described with reference to the embodiments illustrated in the drawings, this is merely exemplary, and it will be understood by those skilled in the art that various modifications and equivalent other embodiments are possible. For example, the described techniques may be performed in a different order than the described method, and / or components of the described systems, structures, devices, circuits, etc. may be combined or combined in a different form than the described method, or other components. Or even if replaced or substituted by equivalents, an appropriate result can be achieved. Therefore, the true technical protection scope of the present invention will be defined by the technical spirit of the appended claims.

10 : 검증 장치
100 : 프로그램 실행부
300 : 프로그램 검증부
10: verification device
100: program execution unit
300: program verification unit

Claims (10)

타겟 프로그램을 실행하는 프로그램 실행부와 상기 타겟 프로그램의 제어흐름 무결성(Control-Flow Integrity, CFI)을 검증하는 프로그램 검증부를 포함하는 검증 장치에 의해 수행되는 제어흐름 무결성 검증 방법에 있어서,
(a) 상기 프로그램 실행부가 상기 타겟 프로그램을 실행한 후 상기 타겟 프로그램의 제어흐름 그래프(Control-Flow Graph, CFG)를 상기 프로그램 검증부로 송신하는 단계;
(b) 상기 프로그램 실행부가, 상기 타겟 프로그램 내의 분기문이 발생한 경우 상기 프로그램 검증부로 제어흐름 무결성 검증 요청을 송신하는 단계;
(c) 상기 제어흐름 무결성 검증 요청에 응답하여, 상기 프로그램 검증부가 소정의 확률에 기반하여 제어흐름 무결성 검증의 수행 여부를 결정하는 단계;
(d) 상기 제어흐름 무결성 검증을 수행하기로 결정된 경우, 상기 프로그램 검증부가 상기 제어흐름 무결성 검증을 수행하는 단계; 및
(e) 상기 프로그램 검증부가 상기 제어흐름 무결성 검증의 검증 결과를 상기 프로그램 실행부로 송신하는 단계를 포함하는 제어흐름 무결성 검증 방법.
In the control flow integrity verification method performed by a verification apparatus including a program execution unit for executing a target program and a program verification unit for verifying the control flow integrity (Control-Flow Integrity, CFI) of the target program,
(a) transmitting, by the program execution unit, the control flow graph (CFG) of the target program to the program verification unit after executing the target program;
(b) transmitting, by the program execution unit, a control flow integrity verification request to the program verification unit when a branch statement in the target program occurs;
(c) in response to the control flow integrity verification request, determining whether to perform control flow integrity verification based on a predetermined probability by the program verifier;
(d) if it is determined to perform the control flow integrity verification, the program verifier performing the control flow integrity verification; And
(e) the program verifier transmitting the verification result of the control flow integrity verification to the program execution unit.
제1항에 있어서,
상기 분기문은 콜(call), 점프(jmp), 또는 리턴(ret) 명령어이고,
상기 제어흐름 무결성 검증 방법은 (f) 상기 프로그램 실행부가 상기 검증 결과에 기초하여 상기 타겟 프로그램의 실행 중단 여부를 결정하는 단계를 더 포함하고,
상기 (b) 단계 내지 (f) 단계는 상기 타겟 프로그램의 실행 중 분기문이 발생할 때마다 반복적으로 수행되는,
제어흐름 무결성 검증 방법.
The method of claim 1,
The branch statement is a call, jump, or return instruction,
The control flow integrity verification method further includes the step of (f) the program execution unit determining whether to stop the execution of the target program based on the verification result,
Steps (b) to (f) are repeatedly performed whenever a branch statement occurs during execution of the target program.
Control flow integrity verification method.
제2항에 있어서,
상기 (e) 단계는, 상기 검증 결과가 상기 제어흐름 검증의 실패를 의미하는 메시지인 경우 상기 타겟 프로그램의 실행을 중단하기로 결정하는,
제어흐름 무결성 검증 방법.
The method of claim 2,
In step (e), if the verification result is a message indicating that the control flow verification fails, determining to stop execution of the target program,
Control flow integrity verification method.
제3항에 있어서,
상기 (d) 단계는 상기 제어흐름 그래프(CFG)에 기초하여 상기 분기문에 의한 상기 제어흐름의 무결성 검증을 수행하는,
제어흐름 무결성 검증 방법.
The method of claim 3,
The step (d) is performed to verify the integrity of the control flow by the branch statement based on the control flow graph (CFG),
Control flow integrity verification method.
제4항에 있어서,
상기 제어흐름 무결성 검증 방법은, 상기 (a) 단계 이전에,
상기 프로그램 검증부가 수정전 타겟 프로그램에 포함된 복수의 분기문들 각각의 이전 또는 이후에 상기 제어흐름 무결성 검증 요청을 수행하는 명령어를 삽입하여 상기 타겟 프로그램을 생성하는 단계를 더 포함하는,
제어흐름 무결성 검증 방법.
The method of claim 4, wherein
The control flow integrity verification method, before step (a),
Generating a target program by inserting an instruction for performing the control flow integrity verification request before or after each of a plurality of branch statements included in the target program before modification, by the program verifier;
Control flow integrity verification method.
제4항에 있어서,
상기 제어흐름 무결성 검증 방법은, 상기 (a) 단계 이전에,
상기 프로그램 검증부가 상기 제어흐름 그래프(CFG)를 포함하지 않는 타겟 프로그램에 상기 제어흐름 그래프(CFG)를 삽입하여 상기 타겟 프로그램을 생성하는 단계를 더 포함하는,
제어흐름 무결성 검증 방법.
The method of claim 4, wherein
The control flow integrity verification method, before step (a),
The program verification unit further comprises the step of generating the target program by inserting the control flow graph (CFG) in a target program that does not include the control flow graph (CFG),
Control flow integrity verification method.
타겟 프로그램을 실행하는 프로그램 실행부와 상기 타겟 프로그램의 제어흐름 무결성(CFI)을 검증하는 프로그램 검증부를 포함하는 제어흐름 무결성 검증 장치에 있어서,
상기 프로그램 실행부는 상기 타겟 프로그램을 실행한 후 상기 타겟 프로그램의 제어흐름 그래프(Control-Flow Graph, CFG)를 상기 프로그램 검증부로 송신하고, 상기 타겟 프로그램 내의 분기문이 발생한 경우 상기 프로그램 검증부로 제어흐름 무결성 검증 요청을 송신하고,
상기 프로그램 검증부는 상기 제어흐름 무결성 검증 요청에 응답하여 소정의 확률에 기반하여 제어흐름 무결성 검증의 수행 여부를 결정하고, 상기 제어흐름 무결성 검증을 수행하기로 결정된 경우 상기 제어흐름 무결성 검증을 수행하고, 상기 제어흐름 무결성 검증의 검증 결과를 상기 프로그램 실행부로 송신하는,
제어흐름 무결성 검증 장치.
In the control flow integrity verification apparatus comprising a program execution unit for executing a target program and a program verification unit for verifying the control flow integrity (CFI) of the target program,
After executing the target program, the program executing unit transmits a control flow graph (CFG) of the target program to the program verifying unit, and when a branch statement occurs in the target program, control flow integrity to the program verifying unit. Send a verification request,
The program verifier determines whether to perform control flow integrity verification based on a predetermined probability in response to the control flow integrity verification request, and performs the control flow integrity verification when it is determined to perform the control flow integrity verification, Transmitting the verification result of the control flow integrity verification to the program execution unit,
Control flow integrity verification device.
제7항에 있어서,
상기 분기문은 콜(call), 점프(jmp), 또는 리턴(ret) 명령어이고,
상기 프로그램 실행부는 상기 검증 결과에 기초하여 상기 타겟 프로그램의 실행 중단 여부를 결정하고,
상기 프로그램 실행부에 의한 상기 제어흐름 무결성 검증 요청의 송신 동작, 상기 프로그램 검증부에 의한 상기 제어흐름 무결성 검증의 수행 여부 결정 동작, 상기 제어흐름 무결성 검증을 수행하기로 결정된 경우 상기 프로그램 검증부에 의한 상기 제어흐름 무결성 검증의 수행 동작, 상기 프로그램 검증부에 의한 상기 검증 결과 송신 동작, 및 상기 프로그램 실행부에 의한 상기 타겟 프로그램의 실행 중단 여부 결정 동작은 상기 타겟 프로그램의 실행 중 분기문이 발생할 때마다 반복적으로 수행되는,
제어흐름 무결성 검증 장치.
The method of claim 7, wherein
The branch statement is a call, jump, or return instruction,
The program execution unit determines whether to stop the execution of the target program based on the verification result,
A transmission operation of the control flow integrity verification request by the program execution unit, a determination operation of performing the control flow integrity verification by the program verification unit, and the program verification unit when it is determined to perform the control flow integrity verification The operation of performing the control flow integrity verification, the operation of transmitting the verification result by the program verification unit, and the operation of determining whether to stop the execution of the target program by the program execution unit are performed whenever a branch statement occurs during execution of the target program. Performed repeatedly,
Control flow integrity verification device.
제8항에 있어서,
상기 검증 결과가 상기 제어흐름 검증의 실패를 의미하는 메시지인 경우 상기 프로그램 실행부는 상기 타겟 프로그램의 실행을 중단하기로 결정하는,
제어흐름 무결성 검증 장치.
The method of claim 8,
If the verification result is a message indicating that the control flow verification failed, the program execution unit determines to stop execution of the target program,
Control flow integrity verification device.
제9항에 있어서,
상기 프로그램 검증부는 상기 제어흐름 그래프(CFG)에 기초하여 상기 분기문에 의한 상기 제어흐름의 무결성 검증을 수행하는,
제어흐름 무결성 검증 방법.
The method of claim 9,
The program verifying unit performs integrity verification of the control flow by the branch statement based on the control flow graph (CFG),
Control flow integrity verification method.
KR1020180133478A 2018-01-30 2018-11-02 An efficient control-flow integrity vefifing method based on unpredictability KR102131689B1 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020180011683 2018-01-30
KR20180011683 2018-01-30

Publications (2)

Publication Number Publication Date
KR20190092235A true KR20190092235A (en) 2019-08-07
KR102131689B1 KR102131689B1 (en) 2020-08-06

Family

ID=67621784

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180133478A KR102131689B1 (en) 2018-01-30 2018-11-02 An efficient control-flow integrity vefifing method based on unpredictability

Country Status (1)

Country Link
KR (1) KR102131689B1 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111949984A (en) * 2020-08-24 2020-11-17 北京天融信网络安全技术有限公司 Vulnerability defense method and electronic device
KR20230133632A (en) 2022-03-11 2023-09-19 경북대학교 산학협력단 Test apparatus for CFG validation and method thereof

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7207519B2 (en) * 2019-03-19 2023-01-18 日本電気株式会社 Information processing device, information processing method and program

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970049781A (en) * 1995-12-29 1997-07-29 김주용 How to store branch prediction information
KR20090066059A (en) 2007-12-18 2009-06-23 한국전자통신연구원 Software integrity verification apparatus of mobile terminal and method thereof
KR20150089696A (en) * 2014-01-28 2015-08-05 한국전자통신연구원 Integrity Verification System and the method based on Access Control and Priority Level
KR101575021B1 (en) 2015-08-20 2015-12-08 국방과학연구소 Mobile terminal for executing integrity verification and controll method thereof
KR20170079858A (en) 2015-12-31 2017-07-10 다운정보통신(주) Method and Apparatus for Control Signals Verifying Integrity Using Control Signals Analysis in Automatic Control System

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR970049781A (en) * 1995-12-29 1997-07-29 김주용 How to store branch prediction information
KR20090066059A (en) 2007-12-18 2009-06-23 한국전자통신연구원 Software integrity verification apparatus of mobile terminal and method thereof
KR20150089696A (en) * 2014-01-28 2015-08-05 한국전자통신연구원 Integrity Verification System and the method based on Access Control and Priority Level
KR101575021B1 (en) 2015-08-20 2015-12-08 국방과학연구소 Mobile terminal for executing integrity verification and controll method thereof
KR20170079858A (en) 2015-12-31 2017-07-10 다운정보통신(주) Method and Apparatus for Control Signals Verifying Integrity Using Control Signals Analysis in Automatic Control System

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Nathan Burow et al, "Control-Flow Integrity: Precision, Security, and Performance", ACM Computing Surveys, Volume 50, Issue 1(2017.04.)* *
Vishwath Mohan et al, "Opaque Control-Flow Integrity", Network and Distributed System Security Symposium(2015.02.)* *
홍진아 외, "RecurFI: 윈도우 바이너리에 대한 효율적 제어흐름 무결성 검사 시스템", 석사학위논문(2017.02.)* *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111949984A (en) * 2020-08-24 2020-11-17 北京天融信网络安全技术有限公司 Vulnerability defense method and electronic device
CN111949984B (en) * 2020-08-24 2021-10-15 北京天融信网络安全技术有限公司 Vulnerability defense method and electronic device
KR20230133632A (en) 2022-03-11 2023-09-19 경북대학교 산학협력단 Test apparatus for CFG validation and method thereof

Also Published As

Publication number Publication date
KR102131689B1 (en) 2020-08-06

Similar Documents

Publication Publication Date Title
KR102131689B1 (en) An efficient control-flow integrity vefifing method based on unpredictability
US9495541B2 (en) Detecting return-oriented programming payloads by evaluating data for a gadget address space address and determining whether operations associated with instructions beginning at the address indicate a return-oriented programming payload
US8924782B2 (en) Systems, methods, and media for recovering an application from a fault or attack
CN107077562B (en) Computer-implemented method and system for dynamically controlling code execution
JP2018041438A (en) System and method for detecting malicious codes in file
US9836611B1 (en) Verifying the integrity of a computing platform
MX2007015193A (en) Methods and systems for repairing applications.
KR20190021673A (en) Apparatus and method for preventing ransomware
CN105893877B (en) Method for secure data reading and data processing system
KR20130051225A (en) Apparatus and method for guarantee security in heterogeneous computing environment
Geier et al. Compasec: a compiler-assisted security countermeasure to address instruction skip fault attacks on risc-v
CN106922191B (en) Generating and executing protected software items
JP6632777B2 (en) Security design apparatus, security design method, and security design program
JP7383750B2 (en) Improved systems and methods for detecting fault injection attacks
KR102089435B1 (en) A secure boot method for secure usb device
US20190102541A1 (en) Apparatus and method for defending against unauthorized modification of programs
CN108710809B (en) Safety control method, device and system for processor
Lackner et al. A defensive java card virtual machine to thwart fault attacks by microarchitectural support
Bekiroglu et al. Source code transformations for improving security of time-bounded K-variant systems
KR20180093529A (en) Method for preventing falsification of application based on interdependence between byte code and native code and apparatus therefor
KR102075689B1 (en) Method and apparatus of ensuring functional safety of task
KR102176117B1 (en) Method for integrity self verification in a resource rich environment
JP2023547969A (en) Method and device for detecting maliciousness of non-executable files by changing the execution flow of application programs
KR102176118B1 (en) Method for integrity mutual verification in a resource rich environment
KR102673341B1 (en) Method, Computer Program and Device of Usage Control of Guided Missile

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