KR101530132B1 - 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치 - Google Patents

기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치 Download PDF

Info

Publication number
KR101530132B1
KR101530132B1 KR1020130152962A KR20130152962A KR101530132B1 KR 101530132 B1 KR101530132 B1 KR 101530132B1 KR 1020130152962 A KR1020130152962 A KR 1020130152962A KR 20130152962 A KR20130152962 A KR 20130152962A KR 101530132 B1 KR101530132 B1 KR 101530132B1
Authority
KR
South Korea
Prior art keywords
instruction
binary code
program context
execution
conditional branch
Prior art date
Application number
KR1020130152962A
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 KR1020130152962A priority Critical patent/KR101530132B1/ko
Application granted granted Critical
Publication of KR101530132B1 publication Critical patent/KR101530132B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

바이너리 코드의 실행 경로를 확장하는 방법 및 장치가 제공된다. 이 때 프로그램 컨텍스트(Program Context)에 연관된 적어도 하나의 명령어를 선택하여 선택된 적어도 하나의 명령어에 대해 실행 경로 확장을 수행할 수 있다. 또한 프로그램 컨텍스트에 기반하여 기호 실행(Symbolic Execution) 및 제약 조건 해결(Constraint Solver)을 사용함으로써 바이너리 코드의 실행 경로를 동적으로 확장할 수 있으며, 종래의 얕은 경로 탐색 문제를 비롯하여 프로그램 컨텍스트를 직접 제어하지 못해 발생하는 실행 경로 확장의 불완전성을 제거하여 효과적이고 정확하게 소프트웨어의 실행 경로를 확장할 수 있다.

Description

기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치{METHOD AND APPARATUS FOR EXPANDING EXECUTION PATH OF BINARY CODE USING SYMBOLIC EXECUTION}
기술분야는 소프트웨어 테스팅 및 행위 분석에 관한 것으로, 특히 바이너리 코드를 동적으로 분석하여 실행 경로를 확장하는 방법 및 장치에 관한 것이다.
소프트웨어 테스팅(Software Testing), 소프트웨어 취약점 분석(Software Vulnerability Analysis), 소프트웨어 보증(Software Assurance), 소프트웨어 보안(Software Security), 시스템 보안(System Security), 소프트웨어 유사성 비교(Software Similarity Comparison), 소프트웨어 행위 분석(Software Behavior Analysis) 및 악성코드 분석(Malware Analysis) 등에 적용될 수 있다.
본 연구는 문화체육관광부 및 한국저작권위원회의 2013년도 저작권기술개발사업의 연구결과로 수행되었음. (This research project was supported by Ministry of Culture, Sports and Tourism (MCST) and from Korea Copyright Commission in 2013.)
소프트웨어의 실행 경로 분석은 소프트웨어의 논리 또는 데이터에 기반하여 컴퓨터가 작업을 처리할 때 취하는 경로나 과정을 분석하는 것을 의미한다.
종래의 소프트웨어 실행 경로 확장 방법은, 1) 확장 대상 소프트웨어의 소스 코드로부터 실행 경로가 확장될 가능성이 있는 테스트 케이스를 다량으로 생성하는 방식으로 실행 경로 확장을 시도하거나, 2) 소스코드가 획득될 수 없는 경우에는 단순히 임의의 값을 가진 테스트 케이스를 다량으로 생성하는 방식으로 실행 경로 확장을 시도하였다. 종래의 방법은 소프트웨어가 실제 실행되며 형성하는 동적 정보, 즉 프로그램 컨텍스트를 참조하지 않기 때문에 실행 경로 확장에 대한 한계를 갖는다.
한국공개특허 제10-2005-0059524호(공개일 2005년 06월 21일)에는 바이너리 코드만 주어지는 경우에 디버거 상에서 중단점을 어디에 설정할 지 결정할 수 없다는 문제를 해결하기 위하여, 미리 고안된 실행 시나리오를 실행시키면서 트레이서로 실행 경로를 추적하고, 추적된 실행 경로 상의 스텝 수에 근거하는 중단점을 설정하는 단계를 이용한 중단점 설정 방법이 개시되어 있다.
일 실시예는 기호 실행을 이용한 바이너리 코드 실행 경로 확장 방법 및 장치를 제공할 수 있다.
일 측면에 있어서, 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성하는 단계 및 상기 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결하는 단계를 포함하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 바이너리 코드로부터 프로그램 컨텍스트에 연관된 상기 적어도 하나의 명령어를 선택하는 단계를 더 포함하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 적어도 하나의 명령어를 상기 조건 분기 명령어 및 비 조건 분기 명령어로 구분하는 단계를 더 포함하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 적어도 하나의 명령어를 실행하는 단계를 더 포함하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 제약 조건을 해결하는 단계는 상기 생성된 프로그램 컨텍스트에 기반하여 상기 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트 및 상기 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 각각 도출하고, 상기 도출된 제1 프로그램 컨텍스트 및 상기 도출된 제2 프로그램 컨텍스트를 상기 제약 조건의 해결에 반영하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 적어도 하나의 명령어를 선택하는 단계는 테인트를 이용하여 상기 적어도 하나의 명령어가 상기 프로그램 컨텍스트에 연관되는지 여부를 판단하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 선택된 적어도 하나의 명령어에 대해서만 상기 기호 실행 단계 및 상기 제약 조건 해결 단계를 수행하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 적어도 하나의 명령어를 실행하는 단계는 상기 적어도 하나의 명령어가 조건 분기 명령어이면, 상기 제약 조건을 해결하는 단계에서 도출 및 반영된 프로그램 컨텍스트별로 상기 조건 분기 명령어를 병렬적으로 동시에 실행하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 바이너리 코드는 전체의 바이너리 코드들 중 사용자에 의해 지정된 일부인 바이너리 코드 실행 경로 확장 방법이 제공된다.
상기 제약 조건을 해결하는 단계는 사용자가 설정한 프로그램 컨텍스트를 상기 조건 분기 명령어에 대한 상기 제약 조건의 해결에 반영하는 바이너리 코드 실행 경로 확장 방법이 제공된다.
일 측면에 있어서, 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성하는 기호 실행부 및 상기 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결하는 제약 조건 해결부를 포함하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
상기 바이너리 코드로부터 프로그램 컨텍스트에 연관된 상기 적어도 하나의 명령어를 선택하는 명령어 선택부를 더 포함하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
상기 적어도 하나의 명령어를 실행하는 명령어 실행부를 더 포함하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
상기 제약 조건 해결부는 상기 생성된 프로그램 컨텍스트에 기반하여 상기 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트 및 상기 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 각각 도출하고, 상기 도출된 제1 프로그램 컨텍스트 및 상기 도출된 제2 프로그램 컨텍스트를 상기 제약 조건의 해결에 반영하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
상기 명령어 선택부는 테인트를 이용하여 상기 적어도 하나의 명령어가 상기 프로그램 컨텍스트에 연관되는지 여부를 판단하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
상기 명령어 실행부는 상기 적어도 하나의 명령어가 조건 분기 명령어이면, 상기 제약 조건 해결부에서 도출 및 반영된 프로그램 컨텍스트별로 상기 조건 분기 명령어를 병렬적으로 동시에 실행하는 바이너리 코드 실행 경로 확장 장치가 제공된다.
일 실시예에 따른 방법 및 장치는 기호 실행을 이용하여 바이너리 코드의 실행 경로를 확장할 수 있다.
일 실시예에 따른 방법 및 장치는 소프트웨어 취약점 분석, 소프트웨어 보증, 소프트웨어 보안, 시스템 보안, 소프트웨어 테스팅 및 소프트웨어 행위분석 등에 사용될 수 있으며, 특히 소스 코드를 구할 수 없는 소프트웨어 및 악성 코드의 행위 분석에 응용될 수 있으며, 동적 정보인 프로그램 컨텍스트에서 유발되는 소프트웨어 취약점 분석 등에 응용될 수 있다.
일 실시예에 따른 방법 및 장치는 종래의 얕은 경로 탐색 문제를 비롯하여 프로그램 컨텍스트를 직접 제어하지 못해 발생하는 실행 경로 확장의 불완전성을 제거할 수 있고, 효과적이고 정확하게 소프트웨어의 실행 경로를 확장할 수 있다.
도 1은 일 실시예에 따른 실행 경로 확장 시스템(100)의 구성도를 도시한다.
도 2는 일 실시예에 따른 실행 경로 확장 장치(120)를 도시한다.
도 3은 일 실시예에 따른 바이너리 코드(110)의 실행 경로 확장 과정을 나타낸다.
도 4는 일 예에 따른 실행 경로 확장이 적용될 일련의 명령어들을 도시한다.
도 5는 일 예에 따른 일련의 명령어들에 대한 기호 실행 및 제약 조건 해결을 이용하여 소스 코드의 실행 경로를 확장하는 과정을 도시한다.
도 6은 일 실시예에 따른 바이너리 코드(110)의 실행 경로 확장 과정을 나타내는 흐름도를 도시한다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
소스 코드로부터 테스트 케이스를 생성하는 종래의 소프트웨어 실행 경로 확장 방법 중에 콘콜릭 테스팅(Concolic Testing)이 있다. 콘콜릭 테스팅은 얕은 경로 탐색(Shallow Path Exploration) 문제를 갖는다.
얕은 경로 탐색 문제는 다량의 테스트 케이스가 생성되었음에도 불구하고 탐색이 소프트웨어의 일부분에서만 계속적으로 맴돌며 더 이상 실행 경로를 확장하지 못하는 것을 의미할 수 있다.
소프트웨어의 조건 분기 명령어는 에지(edge)로 표현될 수 있고, 그 외의 명령어를 노드(node)로 표현될 수 있다. 어떤 노드에 얕은 경로 탐색 문제가 발생한 경우, 상기의 문제는 상기의 노드의 부모 노드(parent node)에서의 분기 조건을 만족 또는 불만족하는 값이 실행 경로가 더 이상 확장될 수 없게 제한되는 것에 기인할 수 있다. 즉, 얕은 경로 탐색 문제의 해결을 위해서는, 실행 경로 확장을 제한하는 노드가 탐색되어야 하고, 실행 경로 확장이 가능하도록 프로그램 컨텍스트가 변경되야 한다. 그러나, 종래의 소스 코드로부터 테스트 케이스를 생성하는 소프트웨어 실행 경로 확장 방법은 동적 정보인 프로그램 컨텍스트가 아닌, 정적 정보 중 하나인 소스 코드로부터 테스트 케이스를 생성한다. 따라서, 종래의 소스 코드로부터 테스트 케이스를 생성하는 소프트웨어 실행 경로 확장 방법에 있어서, 얕은 경로 확장 문제를 유발하는 노드를 검색하는 것은 어려울 수 있다. 만약, 검색되었다 하더라도 검색된 노드에서의 실행 경로 확장이 원활히 진행되기 어려울 수 있다.
반면, 후술될 실시예에서는, 동적 정보인 프로그램 컨텍스트에 영향을 받는 조건 분기 명령어에 대해서, 참 경로 및 거짓 경로를 만족시키는 프로그램 컨텍스트를 각각 계산 및 반영함으로써 실행 경로가 확장된다. 따라서, 상술된 얕은 경로 확장 문제가 해결될 수 있다.
또한, 소스 코드 없이 테스트 케이스를 생성하는 종래의 소프트웨어 실행 경로 확장 방법은 실행 경로 확장을 위해 많은 자원을 사용한다. 따라서, 종래의 소프트웨어 실행 경로 확장 방법은 소규모의 모듈에 대한 실행 경로 확장에 적합할 뿐, 대규모의 소프트웨어 전체에 대한 실행 경로 확장에는 적합하지 않을 수 있다. 반면, 후술될 실시예는 소정의 횟수의 실행만으로 조건 분기 명령어의 참 조건 및 거짓 조건을 만족시키는 실행 경로를 모두 확장할 수 있다.
도 1은 일 실시예에 따른 실행 경로 확장 시스템(100)의 구성도를 도시한다.
실행 경로 확장 시스템(100)은 실행 경로 확장 장치(120)를 포함할 수 있다. 실행 경로 확장 시스템(100)은 실행 경로 확장의 대상이 되는 바이너리 코드(110) 및 실행 경로 확장의 결과를 나타내는 실행 경로 그래프(130)를 포함할 수 있다.
실행 경로 확장 장치(120)는 바이너리 코드(110)를 수신할 수 있고, 바이너리 코드(110)에 대한 실행 경로의 분석 및 확장을 수행할 수 있다. 실행 경로 확장 장치(120)는 바이너리 코드(110)를 외부로부터 수신할 수 있다. 또는, 실행 경로 확장 장치(120)는 실행 경로 확장 장치(120)의 내부에서 자체적으로 바이너리 코드(110)를 생성할 수 있으며, 생성된 바이너리 코드(110)에 대한 실행 경로의 분석 및 확장을 수행할 수 있다.
실행 경로 확장 장치(120)는 바이너리 코드(110)의 실행 경로를 확장한 결과를 실행 경로 그래프(130)로서 생성할 수 있다.
바이너리 코드(110)는 PC, 노트북, 스마트폰 및 태블릿 등에서 구동되는 소프트웨어일 수 있으며, 임베디드 소프트웨어 또는 제어용 소프트웨어일 수 있다.
바이너리 코드(110)는 적어도 하나의 명령어를 포함할 수 있다. 바이너리 코드(110)에 포함되는 적어도 하나의 명령어는 분기 명령어 및 비 분기 명령어를 포함할 수 있다.
분기 명령어는 바이너리 코드의 실행 순서를 변경하여, 변경된 실행 순서에 따라 명령어가 실행되게 하는 명령어를 포함할 수 있다. 분기 명령어는 조건 분기 명령어(conditional branch) 및 비 조건 분기 명령어(unconditional branch)를 포함할 수 있다. 조건 분기 명령어는 주어진 조건이 만족되었을 때 분기가 발생하는 명령어일 수 있다. 비 조건 분기 명령어는 무조건 지정된 주소로 분기하는 명령어일 수 있다.
실행 경로 확장 장치(120)는 기호 실행(Symbolic Execution)을 이용하여 바이너리 코드(110)의 실행 경로를 확장할 수 있다.
기호 실행은, 프로그램의 특정한 아웃풋(output)을 발생시키는 인풋(input)을 계산하기 위하여, 프로그램이 포함하는 하나 이상의 명령어들에 대한 프로그램 컨텍스트(Program Context)를 수식으로서 나타내고, 생성된 수식을 저장하는 과정을 포함할 수 있다. 프로그램 컨텍스트는 프로그램 실행 중에 동적으로 할당되거나 값이 변화할 수 있는 프로그램의 실행 환경을 포함할 수 있다. 상기의 프로그램의 실행 환경은 레지스터의 값, 변수의 값, 사용자 입력 값, 네트워크 트래픽 및 시스템 시간 등을 포함할 수 있다.
실행 경로 확장 장치(120)는 제약 조건 해결(Constraint Solver)을 통해 바이너리 코드(110)의 실행 경로를 확장할 수 있다. 제약 조건 해결은 기호 실행에 의해 생성된 바이너리 코드(110)의 프로그램 컨텍스트를 이용함으로써 바이너리 코드(110)의 조건 분기 명령어의 참 조건(True Condition) 및 거짓 조건(False Condition)을 만족시키는 프로그램 컨텍스트들을 각각 도출하여 실행 경로의 확장에 반영하는 과정을 포함할 수 있다.
도 2는 일 실시예에 따른 실행 경로 확장 장치(120)를 도시한다.
실행 경로 확장 장치(120)는 수신부(210) 및 처리부(220)를 포함할 수 있다.
수신부(210)는 실행 경로 확장의 대상인 바이너리 코드(110)를 수신할 수 있다.
처리부(220)는 수신된 바이너리 코드(110)에 대하여 실행 경로 확장을 수행할 수 있다.
처리부(220)는 명령어 선택부(222), 기호 실행부(224), 제약 조건 해결부(226) 및 명령어 실행부(228)를 포함할 수 있다.
명령어 선택부(222)는 바이너리 코드(110)로부터 프로그램 컨텍스트에 연관된 적어도 하나의 명령어를 선택할 수 있다.
기호 실행부(224)는 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기의 바이너리 코드의 프로그램 컨텍스트를 생성할 수 있다.
제약 조건 해결부(226)는 바이너리 코드(110)의 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 프로그램 컨텍스트를 사용하여 제약 조건을 해결할 수 있다.
명령어 실행부(228)는 명령어 선택부(222)에 의해 선택된 바이너리 코드(110)의 적어도 하나의 명령어를 실행할 수 있다.
전술된 처리부(220), 명령어 선택부(222), 기호 실행부(224), 제약 조건 해결부(226) 및 명령어 실행부(228)의 기능들은 바이너리 코드(110)의 적어도 하나의 명령어에 대해서 수행되는 것으로 설명되었지만, 상기의 기능들은 바이너리 코드(110)의 전체의 명령어들에 대해서도 수행될 수 있다.
도 3은 일 실시예에 따른 바이너리 코드(110)의 실행 경로 확장 과정을 나타낸다.
바이너리 코드(310)는 도 1을 참조하여 전술된 바이너리 코드(110)에 대응할 수 있다.
단계(312)에서, 명령어 선택부(222)는 바이너리 코드(310)로부터 프로그램 컨텍스트에 연관된 적어도 하나의 명령어를 선택할 수 있다.
예를 들어, 명령어 선택부(222)에 의해 선택된 명령어는 프로그램 컨텍스트에 연관된 조건 분기 명령어, 비 조건 분기 명령어 또는 레지스터의 값을 변경하는 명령어일 수 있다.
블록(314)은 단계(312)의 결과로 선택된 프로그램 컨텍스트와 연관된 명령어를 나타낼 수 있다.
단계(316)에서, 기호 실행부(224)는 단계(312)에서 선택된 바이너리 코드(310)의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기의 바이너리 코드(310)의 프로그램 컨텍스트를 생성할 수 있다.
예를 들어, 기호 실행부(224)는 단계(312)에서 선택된 명령어에 대한 기호 실행을 수행할 수 있고, 기호 실행의 결과로 생성된 프로그램 컨텍스트를 수식의 형태로 저장할 수 있다.
단계(318)에서, 기호 실행부(224)는 단계(316)의 결과로 생성된 프로그램 컨텍스트를 저장할 수 있다.
단계(320)에서, 기호 실행부(224)는 단계(312)에서 선택되어 단계(316)에서 기호 실행이 수행된 적어도 하나의 명령어를 조건 분기 명령어 및 비 조건 분기 명령어로 구분할 수 있다.
블록(322)은, 단계(316)에서 기호 실행이 수행된 명령어가 비 조건 분기 명령어임을 나타낼 수 있다. 단계(316)에서 기호 실행이 수행된 명령어가 비 조건 분기 명령어이면, 단계(324)에서 기호 실행부(224)는 상기의 비 조건 분기 명령어를 실행할 수 있다.
블록(326)은, 단계(316)에서 기호 실행이 수행된 명령어가 조건 분기 명령어임을 나타낼 수 있다. 단계(316)에서 기호 실행이 수행된 명령어가 조건 분기 명령어이면, 이하, 프로그램 컨텍스트가 조건 분기 명령어의 참 조건을 만족시키는지 아니면 조건 분기 명령어의 거짓 조건을 만족시키는지 여부에 따라 단계(328) 또는 단계(336)가 진행될 수 있다.
블록(328)은 조건 분기 명령어의 참 조건에 대한 진행을 나타낼 수 있다.
단계(330)에서, 제약 조건 해결부(226)는 조건 분기 명령어의 참 조건에 대한 제약 조건 해결을 수행할 수 있다.
단계(332)에서, 제약 조건 해결부(226)는 단계(316)에서 생성된 프로그램 컨텍스트에 기반하여 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트를 도출할 수 있고, 상기의 도출된 제1 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다.
단계(334)에서, 명령어 실행부(228)는 단계(332)에서 도출 및 반영된 조건 분기 명령어의 참 조건을 만족시키는 프로그램 컨텍스트 상에서 조건 분기 명령을 실행할 수 있다.
블록(336)은 조건 분기 명령어의 거짓 조건에 대한 진행을 나타낼 수 있다.
단계(338)에서, 제약 조건 해결부(226)는 조건 분기 명령어의 거짓 조건에 대한 제약 조건 해결을 수행할 수 있다.
단계(340)에서, 제약 조건 해결부(226)는 단계(316)에서 생성된 프로그램 컨텍스트에 기반하여 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 도출할 수 있고, 상기의 도출된 제2 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다.
단계(342)에서, 명령어 실행부(228)는 단계(340)에서 도출 및 반영된 조건 분기 명령어의 거짓 조건을 만족시키는 프로그램 컨텍스트 상에서 조건 분기 명령을 실행할 수 있다.
일 예에서, 단계(334) 및 단계(342)의 조건 분기 명령어의 실행은 단계(332) 및 단계(340)의 제약 조건을 해결하는 단계에서 도출 및 반영된 프로그램 컨텍스트별로 동시에 실행될 수 있다.
도 4는 일 예에 따른 실행 경로 확장이 적용될 일련의 명령어들을 도시한다.
도 4 에서, 이해를 돕기 위하여 명령어는 바이너리 코드가 아닌 소스 코드의 형태로 도시되었다. 도 4에서, 도시된 명령어들(412 내지 416)은 두 개의 비 분기 명령어인 제1 명령어 "y=1"(412) 및 제2 명령어 "x=x+y"(414)를 포함하고, 하나의 조건 분기 명령어인 제3 명령어 "if(x!=0)"(416)를 포함한다.
소스 코드(410)는 도 1을 참조하여 전술된 바이너리 코드(110)에 대응될 수 있다. 제1 명령어(412)은 '변수 y에 1을 할당하는 비 분기 명령어'일 수 있다. 제2 명령어(414)은 '변수 x에 변수 y의 값을 더한 값을 변수 x에 저장하는 비 분기 명령어'일 수 있다. 제3 명령어(416)은 '변수 x에 저장된 값이 0과 동일하지 않다는 조건을 만족하는 경우에 분기를 실행하는 조건 분기 명령어'일 수 있다.
도 5는 일 예에 따른 일련의 명령어들에 대한 기호 실행 및 제약 조건 해결을 이용하여 소스 코드의 실행 경로를 확장하는 과정을 도시한다.
단계(502)에서, 기호 실행부(224)는 도 4를 참조하여 전술된 제1 명령어(412)에 도시된 비 분기 명령어에 대하여 기호 실행을 수행할 수 있다. 블록(512)에 나타낸 바와 같이 기호 실행부(224)는 변수 y에 1이 저장되어 있음을 나타내는 수식을 기호 실행의 결과로 얻은 프로그램 컨텍스트로서 저장할 수 있다.
단계(504)에서, 기호 실행부(224)는 도 4를 참조하여 전술된 제2 명령어(414)에 도시된 비 분기 명령어에 대하여 기호 실행을 수행할 수 있다. 블록(514)에 나타낸 바와 같이 기호 실행부(224)는 변수 x와 변수 y를 더한 값이 변수 x에 저장되어 있음을 나타내는 수식을 기호 실행의 결과로 얻은 프로그램 컨텍스트로서 추가적으로 저장할 수 있다.
단계(506)에서, 기호 실행부(224)는 도 4를 참조하여 전술된 제3 명령어(416)에 도시된 조건 분기 명령어에 대하여 기호 실행을 수행할 수 있다. 블록(516)에 나타낸 바와 같이 기호 실행부(224)는 변수 x의 값이 0이 아니라는 조건 분기 명령어의 참 조건에 대한 수식 및 변수 x의 값이 0이라는 조건 분기 명령어의 거짓 조건에 대한 수식을 기호 실행의 결과로 얻은 프로그램 컨텍스트로서 추가적으로 저장할 수 있다.
단계(520)은 도 3을 참조하여 전술된 블록(328)에 대응할 수 있다.
단계(522)에서, 제약 조건 해결부(226)는 단계(506)에서 생성된 블록(516)의 프로그램 컨텍스트에 기반하여 도 4를 참조하여 전술된 제3 명령어(416)에 도시된 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트를 도출하고 도출된 제1 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다. 블록(524)은 제3 명령어(416)에 도시된 조건 분기 명령어의 참 조건에 대한 제약 조건 해결의 결과로 도출된 제1 프로그램 컨텍스트를 나타낼 수 있다. 일 예에서, 도출된 제1 프로그램 컨텍스트는, 변수 y에 1이 저장되어 있으므로, 변수 x 및 변수 y를 더한 값을 저장하는 변수 x가 0이 아니기 위해서는 변수 x의 최초의 값은 -1이 아니라는 결론을 반영할 수 있다.
단계(530)은 도 3을 참조하여 전술된 블록(336)에 대응할 수 있다.
단계(532)에서, 제약 조건 해결부(226)는 단계(506)에서 생성된 블록(516)의 프로그램 컨텍스트에 기반하여 도 4를 참조하여 전술된 제3 명령어(416)에 도시된 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 도출하고 도출된 제2 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다.
블록(534)은 제3 명령어(416)에 도시된 조건 분기 명령어의 거짓 조건에 대한 제약 조건 해결의 결과로 도출된 제2 프로그램 컨텍스트를 나타낼 수 있다. 일 예에서, 도출된 제2 프로그램 컨텍스트는, 변수 y에 1이 저장되어 있으므로 변수 x와 변수 y를 더한 값을 저장하는 변수 x가 0이기 위해서는 변수 x의 최초의 값은 -1이라는 결론을 반영할 수 있다.
일 예에서, 단계(502), 단계(504) 및 단계(506)는 도 3을 참조하여 전술된 단계(316)에 대응할 수 있다. 단계(522)는 도 3을 참조하여 전술된 단계(330)에 대응할 수 있다. 단계(532)는 도 3을 참조하여 전술된 단계(338)에 대응할 수 있다. 블록(512), 블록(514) 및 블록(516)은 도 3을 참조하여 전술된 단계(318)에 대응할 수 있다. 블록(524)은 도 3을 참조하여 전술된 단계(332)에 대응할 수 있다. 블록(534)은 도 3을 참조하여 전술된 단계(340)에 대응할 수 있다.
도 6은 일 실시예에 따른 바이너리 코드(110)의 실행 경로 확장 과정을 나타내는 흐름도를 도시한다.
단계(610)에서, 수신부(210)는 실행 경로 확장의 대상이 되는 바이너리 코드를 수신할 수 있다. 수신된 바이너리 코드는 도 3을 참조하여 전술된 바이너리 코드(310)에 대응할 수 있다.
일 예에서, 바이너리 코드 실행 경로 확장의 대상이 되는 바이너리 코드는 전체의 바이너리 코드들 중 사용자에 의해 지정된 일부일 수 있다. 말하자면, 사용자는 전체의 바이너리 코드들 중 일부에 대해서만 바이너리 코드 실행 경로 확장을 수행하도록 선택할 수 있다.
단계(620)에서, 명령어 선택부(222)는 단계(610)를 통해 수신된 바이너리 코드로부터 프로그램 컨텍스트에 연관된 적어도 하나의 명령어를 선택할 수 있다.
일 예에서, 단계(620)에서 명령어 선택부(222)는 적어도 하나의 명령어를 선택함에 있어서 테인트를 이용하여 상기의 적어도 하나의 명령어가 상기 프로그램 컨텍스트에 연관되는지 여부를 판단할 수 있다.
일 예에서, 테인트를 이용하는 선택은 입력 데이터에 테인트 마크를 하고 테인트 마크가 된 데이터를 사용하는 프로그램이 실행되는 동안 테인트 마크가 된 데이터가 전파되는 과정을 추적하는 과정을 포함할 수 있다.
일 예에서, 단계(620)에서 기호 실행부(224) 및 제약 조건 해결부(226)는 선택된 적어도 하나의 명령어에 대해서만 상기 기호 실행 단계 및 상기 제약 조건 해결 단계를 각각 수행할 수 있다.
말하자면, 단계(620)에서 선택되지 않은 명령어에 대해서는 실행 경로 확장이 수행되지 않을 수 있다. 일 예에서, 단계(620)의 선택에서 제외되는 명령어는 운영 체제 또는 컴파일러에서 제공하는 프로세스의 초기화 과정된 연관된 명령어를 포함할 수 있다. 말하자면, 실행 경로를 확장해서는 안되는 바이너리 코드는 단계(620)의 선택에서 제외될 수 있다.
단계(630)에서, 기호 실행부(224)는 단계(620)을 통해 선택된 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성할 수 있다.
단계(640)에서, 단계(620)을 통해 선택된 적어도 하나의 명령어는 조건 분기 명령어 및 비 조건 분기 명령어로 구분될 수 있다.
블록(650)에서, 제약 조건 해결부(226)는 단계(620)을 통해 선택된 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결할 수 있다.
단계(652)에서, 제약 조건 해결부(226)는 단계(630)을 통해 생성된 프로그램 컨텍스트에 기반하여 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트를 도출하고, 상기의 도출된 제1 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다.
단계(654)에서, 제약 조건 해결부(226)는 단계(630)을 통해 생성된 프로그램 컨텍스트에 기반하여 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 도출하고, 상기의 도출된 제2 프로그램 컨텍스트를 제약 조건의 해결에 반영할 수 있다.
블록(660)에서, 명령어 실행부(228)는 단계(620)을 통해 선택된 적어도 하나의 명령어를 실행할 수 있다.
단계(662)에서, 명령어 실행부(228)는 단계(652)에서 도출 및 반영된 조건 분기 명령어의 참 조건에 대한 프로그램 컨텍스트 상에서 조건 분기 명령어를 실행할 수 있다.
단계(664)에서, 명령어 실행부(228)는 단계(654)에서 도출 및 반영된 조건 분기 명령어의 거짓 조건에 대한 프로그램 컨텍스트 상에서 조건 분기 명령어를 실행할 수 있다.
명령어 실행부(228)는 단계(652) 및 단계(654)의 제약 조건을 해결하는 단계에서 도출 및 반영된 프로그램 컨텍스트별로 단계(662) 및 단계(664)의 조건 분기 명령어를 병렬적으로 동시에 실행할 수 있다.
단계(666)에서, 명령어 실행부(228)는 비 조건 분기 명령어를 실행할 수 있다. 말하자면, 비 조건 분기 명령어에 대하여는 제약 조건 해결을 수행하지 않을 수 있다.
단계(620)는 도 3을 참조하여 전술된 단계(312) 및 단계(314)에 대응할 수 있다. 단계(630)는 도 2를 참조하여 전술된 기호 실행부(224)에서 수행될 수 있다. 단계(630)는 도 3을 참조하여 전술된 단계(316) 및 단계(318)에 대응할 수 있다. 단계(630)는 도 3을 참조하여 전술된 단계(320), 단계(322) 및 단계(326)에 대응할 수 있다. 단계(652)는 도 3을 참조하여 전술된 단계(328), 단계(330) 및 단계(332)에 대응할 수 있다. 단계(654)는 도 3을 참조하여 전술된 단계(336), 단계(338) 및 단계(340)에 대응할 수 있다. 단계(662)는 도 3을 참조하여 전술된 단계(334)에 대응할 수 있다. 단계(664)는 도 3을 참조하여 전술된 단계(342)에 대응할 수 있다. 단계(666)는 도 3을 참조하여 전술된 단계(324)에 대응할 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
100: 바이너리 코드 실행 경로 확장 시스템도
210: 수신부
220: 처리부
222: 명령어 선택부
224: 기호 실행부
226: 제약 조건 해결부
228: 명령어 실행부

Claims (11)

  1. 기호 실행부, 제약 조건 해결부, 명령어 선택부, 명령어 실행부를 포함하는 바이너리 코드 실행 경로 확장 장치가 수행하는 바이너리 코드의 실행 경로를 확장하는 방법에 있어서,
    상기 기호 실행부가 상기 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성하는 단계; 및
    상기 제약 조건 해결부가 상기 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결하는 단계
    를 포함하고,
    상기 제약 조건을 해결하는 단계는, 상기 제약 조건 해결부가, 상기 생성된 프로그램 컨텍스트에 기반하여 상기 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트 및 상기 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 각각 도출하고, 상기 도출된 제1 프로그램 컨텍스트 및 상기 도출된 제2 프로그램 컨텍스트를 상기 제약 조건의 해결에 반영하는, 바이너리 코드 실행 경로 확장 방법.
  2. 제1항에 있어서,
    상기 명령어 선택부가 상기 바이너리 코드로부터 프로그램 컨텍스트에 연관된 상기 적어도 하나의 명령어를 선택하는 단계
    를 더 포함하는, 바이너리 코드 실행 경로 확장 방법.
  3. 제1항에 있어서,
    상기 기호 실행부가 상기 적어도 하나의 명령어를 상기 조건 분기 명령어 및 비 조건 분기 명령어로 구분하는 단계
    를 더 포함하는, 바이너리 코드 실행 경로 확장 방법.
  4. 제1항에 있어서,
    상기 명령어 실행부가 상기 적어도 하나의 명령어를 실행하는 단계
    를 더 포함하는, 바이너리 코드 실행 경로 확장 방법.
  5. 삭제
  6. 제2항에 있어서,
    상기 적어도 하나의 명령어를 선택하는 단계는, 상기 명령어 선택부가, 테인트를 이용하여 상기 적어도 하나의 명령어가 상기 프로그램 컨텍스트에 연관되는지 여부를 판단하는, 바이너리 코드 실행 경로 확장 방법.
  7. 제2항에 있어서,
    상기 바이너리 코드 실행 경로 확장 장치는, 상기 선택된 적어도 하나의 명령어에 대해서만 상기 기호 실행 단계 및 상기 제약 조건 해결 단계를 수행하는, 바이너리 코드 실행 경로 확장 방법.
  8. 기호 실행부, 제약 조건 해결부, 명령어 실행부를 포함하는 바이너리 코드 실행 경로 확장 장치가 수행하는 바이너리 코드의 실행 경로를 확장하는 방법에 있어서,
    상기 기호 실행부가, 상기 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성하는 단계;
    상기 제약 조건 해결부가 상기 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결하는 단계; 및
    상기 명령어 실행부가 상기 적어도 하나의 명령어를 실행하는 단계를 포함하고,
    상기 적어도 하나의 명령어를 실행하는 단계는, 상기 적어도 하나의 명령어가 조건 분기 명령어이면, 상기 명령어 실행부가, 상기 제약 조건을 해결하는 단계에서 도출 및 반영된 프로그램 컨텍스트별로 상기 조건 분기 명령어를 병렬적으로 동시에 실행하는, 바이너리 코드 실행 경로 확장 방법.
  9. 제1항에 있어서,
    상기 바이너리 코드는 전체의 바이너리 코드들 중 사용자에 의해 지정된 일부인, 바이너리 코드 실행 경로 확장 방법.
  10. 제1항에 있어서,
    상기 제약 조건을 해결하는 단계는, 상기 제약 조건 해결부가, 사용자가 설정한 프로그램 컨텍스트를 상기 조건 분기 명령어에 대한 상기 제약 조건의 해결에 반영하는, 바이너리 코드 실행 경로 확장 방법.
  11. 바이너리 코드의 실행 경로를 확장하는 장치에 있어서,
    상기 바이너리 코드의 적어도 하나의 명령어에 대해 기호 실행을 수행함으로써 상기 바이너리 코드의 프로그램 컨텍스트를 생성하는 기호 실행부; 및
    상기 적어도 하나의 명령어 중 조건 분기 명령어에 대하여 상기 프로그램 컨텍스트를 사용하여 제약 조건을 해결하는 제약 조건 해결부를 포함하고,
    상기 제약 조건 해결부는, 상기 생성된 프로그램 컨텍스트에 기반하여 상기 조건 분기 명령어에 대한 참 조건을 만족시키는 제1 프로그램 컨텍스트 및 상기 조건 분기 명령어에 대한 거짓 조건을 만족시키는 제2 프로그램 컨텍스트를 각각 도출하고, 상기 도출된 제1 프로그램 컨텍스트 및 상기 도출된 제2 프로그램 컨텍스트를 상기 제약 조건의 해결에 반영하는, 바이너리 코드 실행 경로 확장 장치.
KR1020130152962A 2013-12-10 2013-12-10 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치 KR101530132B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130152962A KR101530132B1 (ko) 2013-12-10 2013-12-10 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130152962A KR101530132B1 (ko) 2013-12-10 2013-12-10 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치

Publications (1)

Publication Number Publication Date
KR101530132B1 true KR101530132B1 (ko) 2015-06-18

Family

ID=53519395

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130152962A KR101530132B1 (ko) 2013-12-10 2013-12-10 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101530132B1 (ko)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
KR101979329B1 (ko) 2018-11-06 2019-05-16 한국인터넷진흥원 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치
KR20190055776A (ko) 2018-11-16 2019-05-23 한국인터넷진흥원 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치
KR101995285B1 (ko) 2018-10-31 2019-07-02 한국인터넷진흥원 취약점이 존재하는 바이너리 패치 방법 및 그 장치
US10339322B2 (en) 2017-11-15 2019-07-02 Korea Internet And Security Agency Method and apparatus for identifying security vulnerability in binary and location of cause of security vulnerability
KR20200046363A (ko) 2018-10-24 2020-05-07 국방과학연구소 기호 실행 수행 장치 및 방법
KR102114322B1 (ko) 2018-12-05 2020-05-22 국방과학연구소 전자파 수치 해석 장치와 이를 포함하는 방향 탐지 시스템 및 전자파 수치 해석 장치를 이용한 전자파 수치 해석 방법
KR20200056647A (ko) 2018-11-15 2020-05-25 한국인터넷진흥원 펌웨어의 취약점 모니터링 방법 및 장치
KR20210045122A (ko) * 2019-10-16 2021-04-26 연세대학교 산학협력단 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080091351A (ko) * 2006-01-30 2008-10-10 마이크로소프트 코포레이션 일련의 사전 정의된 규칙을 사용하여 소프트웨어를검사하는 코드 분석 도구를 갖는 컴퓨팅 시스템에서 일련의사전 정의된 규칙의 실행을 관리하는 방법 및 컴퓨터프로그램 제품

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080091351A (ko) * 2006-01-30 2008-10-10 마이크로소프트 코포레이션 일련의 사전 정의된 규칙을 사용하여 소프트웨어를검사하는 코드 분석 도구를 갖는 컴퓨팅 시스템에서 일련의사전 정의된 규칙의 실행을 관리하는 방법 및 컴퓨터프로그램 제품

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10586053B2 (en) 2017-10-13 2020-03-10 Korea Internet & Security Agency Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US10621362B2 (en) 2017-10-13 2020-04-14 Korea Internet & Security Agency Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
US10339322B2 (en) 2017-11-15 2019-07-02 Korea Internet And Security Agency Method and apparatus for identifying security vulnerability in binary and location of cause of security vulnerability
KR20200046363A (ko) 2018-10-24 2020-05-07 국방과학연구소 기호 실행 수행 장치 및 방법
KR101995285B1 (ko) 2018-10-31 2019-07-02 한국인터넷진흥원 취약점이 존재하는 바이너리 패치 방법 및 그 장치
US11238151B2 (en) 2018-10-31 2022-02-01 Korea Internet & Security Agency Method and apparatus for patching binary having vulnerability
KR101979329B1 (ko) 2018-11-06 2019-05-16 한국인터넷진흥원 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치
KR20200056647A (ko) 2018-11-15 2020-05-25 한국인터넷진흥원 펌웨어의 취약점 모니터링 방법 및 장치
KR20190055776A (ko) 2018-11-16 2019-05-23 한국인터넷진흥원 바이너리에 대한 보안 취약점 및 그 원인 위치의 식별 방법 및 그 장치
KR102114322B1 (ko) 2018-12-05 2020-05-22 국방과학연구소 전자파 수치 해석 장치와 이를 포함하는 방향 탐지 시스템 및 전자파 수치 해석 장치를 이용한 전자파 수치 해석 방법
KR20210045122A (ko) * 2019-10-16 2021-04-26 연세대학교 산학협력단 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
KR102273135B1 (ko) * 2019-10-16 2021-07-02 연세대학교 산학협력단 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법

Similar Documents

Publication Publication Date Title
KR101530132B1 (ko) 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치
US10339322B2 (en) Method and apparatus for identifying security vulnerability in binary and location of cause of security vulnerability
Han et al. Malware analysis using visualized image matrices
KR102450834B1 (ko) 다중 특징벡터를 이용하는 행위기반 악성코드 탐지 장치 및 방법
JP2019204482A (ja) 並行脆弱性検出
US20120072988A1 (en) Detection of global metamorphic malware variants using control and data flow analysis
JP7287480B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
Mercaldo et al. Hey malware, i can find you!
US20170103206A1 (en) Method and apparatus for capturing operation in a container-based virtualization system
WO2022180702A1 (ja) 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法
KR102013582B1 (ko) 혼합 모드 프로그램의 소스 코드 오류 위치 검출 장치 및 방법
US20210365555A1 (en) A method and system for detecting and preventing issues in smart contracts based on historical behavior analysis
JP2016525760A (ja) 無関係なコードの特定
JP6245006B2 (ja) テストケース生成装置、方法、及びプログラム
KR102327026B1 (ko) Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법
KR102035246B1 (ko) 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법
US10387288B2 (en) Interactive analysis of a security specification
CN106709335B (zh) 漏洞检测方法和装置
KR101741131B1 (ko) 크래시 위험도 분석 장치 및 그 방법과, 이를 실행하는 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록매체
CN108874656A (zh) 代码测试方法、装置、可读存储介质及计算机设备
JP6903249B2 (ja) テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム
Kadiyala et al. LAMBDA: Lightweight assessment of malware for emBeddeD architectures
KR20190070627A (ko) 처리 스케줄러를 이용한 워크플로우 장치 및 워크플로우 장치의 동작 방법
KR101559651B1 (ko) 동적 분석 방법 및 장치
Guha et al. SARP: self aware runtime protection against integrity attacks of hardware trojans

Legal Events

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