KR102110735B1 - Method and system for re-generating binary for vulnerability detection - Google Patents

Method and system for re-generating binary for vulnerability detection Download PDF

Info

Publication number
KR102110735B1
KR102110735B1 KR1020190136375A KR20190136375A KR102110735B1 KR 102110735 B1 KR102110735 B1 KR 102110735B1 KR 1020190136375 A KR1020190136375 A KR 1020190136375A KR 20190136375 A KR20190136375 A KR 20190136375A KR 102110735 B1 KR102110735 B1 KR 102110735B1
Authority
KR
South Korea
Prior art keywords
binary
function
code
search
target
Prior art date
Application number
KR1020190136375A
Other languages
Korean (ko)
Inventor
김환국
김태은
장대일
배한철
김종기
전지수
나건배
Original Assignee
한국인터넷진흥원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국인터넷진흥원 filed Critical 한국인터넷진흥원
Priority to KR1020190136375A priority Critical patent/KR102110735B1/en
Application granted granted Critical
Publication of KR102110735B1 publication Critical patent/KR102110735B1/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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

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

Abstract

Provided are a method and a system for binary regeneration for vulnerability search. The method according to an embodiment of the present invention includes a step of applying an automatically generated code to a target binary to search for a vulnerability in a target region in the target binary. Other embodiments of the present invention may further include a step of performing a vulnerability search for the target binary by at least one of fuzzing and symbol execution, and a step of determining the target area based on the vulnerability search result.

Description

취약점 탐색을 위한 바이너리 재생성 방법 및 시스템{METHOD AND SYSTEM FOR RE-GENERATING BINARY FOR VULNERABILITY DETECTION}METHOD AND SYSTEM FOR RE-GENERATING BINARY FOR VULNERABILITY DETECTION}

본 발명은 프로그램의 보안 취약점 탐색을 위해 프로그램 바이너리를 재생성하는 방법 및 시스템에 관한 것이다. 보다 자세하게는, 취약점 탐색 대상 바이너리의 미탐 영역을 탐색하기 위해 대상 바이너리의 제어 흐름을 변경하는 방법 및 시스템에 관한 것이다.The present invention relates to a method and system for regenerating program binaries to search for security vulnerabilities in programs. More specifically, the present invention relates to a method and system for changing a control flow of a target binary in order to search an unexplored region of a target binary for vulnerability detection.

프로그램의 개발 과정에서는 일반적으로 프로그램의 소스 코드를 분석 및 검증하거나, 디버깅 프로그램을 이용하여 프로그램의 소스 코드에서 취약점이 발생할 가능성이 있는 곳에 브레이크 포인트를 설정하고, 프로그램의 실행 중에 브레이크 포인트에 따라 실행이 일시 중단되면 프로그램의 실행 환경을 관찰함으로써 프로그램의 취약점을 분석한다. 그러나 프로그램이 개발된 후에 특히 프로그램의 개발자가 아닌 제3자가 프로그램의 취약점을 분석하는 경우에는, 대부분 소스 코드를 확보할 수 없는 환경에서 프로그램 바이너리를 대상으로 취약점 분석이 수행되므로, 상술한 방법들이 활용될 수 없다.In the process of developing a program, breakpoints are set where there is a possibility of vulnerability in the program's source code, usually by analyzing and verifying the program's source code, or by using a debugging program. When suspended, the vulnerability of the program is analyzed by observing the program's execution environment. However, after the program is developed, especially when a third party who is not the developer of the program analyzes the vulnerability of the program, vulnerability analysis is performed on the program binary in an environment where most of the source code cannot be obtained. Cannot be.

프로그램 바이너리를 대상으로 한 취약점 탐색 방법은 대표적으로 퍼징(fuzzing) 및 기호 실행(symbol execution)이 활용되어 왔다. 퍼징은 임의의 값(테스트 케이스)들을 반복적으로 생성하여 대상 프로그램에 입력함으로써, 프로그램에 충돌(크래시)이 발생하는 상황을 만들어내는 방법이다. 기호 실행은 대상 프로그램의 입력 값을 기호로 지정하고, 프로그램의 취약점이 있는 경로에 도달할 수 있는 값을 찾아내는 방법이다. Fuzzing and symbol execution have been mainly used to search for vulnerabilities targeting program binaries. Fuzzing is a method that creates a situation where a program crashes (crashes) by repeatedly generating arbitrary values (test cases) and inputting them into a target program. Symbol execution is a method of specifying the input value of the target program as a symbol and finding a value that can reach the path of the program's vulnerability.

퍼징과 기호 실행 기술들은 각각 장단점을 가진다. 퍼징은 빠른 속도로 크래시를 발생시킬 수 있지만, 프로그램의 깊은 경로를 탐색하여 취약점을 발생시키기에는 한계를 가지고 있다. 기호 실행은 프로그램의 깊은 경로를 탐색하여 취약점을 발견해 낼 수 있으나, 프로그램의 규모가 클 수록 실행 속도가 느리며, 컴퓨팅 자원의 소모가 크다는 단점이 있다. 최근에는 이러한 문제를 해결하기 위하여, 얕은 경로에서는 퍼징을 활용해 취약점을 빠르게 탐색하고, 더 이상 경로 탐색이 어려운 경우 기호 실행을 활용하여 취약점을 탐색하는 접근 방법들, 즉 퍼징과 기호 실행을 혼합한 하이브리드 퍼징 기법이 연구 및 개발되고 있다.The techniques of fuzzing and symbolic execution each have advantages and disadvantages. Fuzzing can cause a crash at a high rate, but it has a limit to generate vulnerabilities by exploring the deep path of the program. Symbolic execution can find vulnerabilities by searching the deep path of the program, but the larger the program size, the slower the execution speed and the greater the consumption of computing resources. In recent years, in order to solve this problem, approaches in which shallow paths are used to quickly search for vulnerabilities using fuzzing, and path finding is exploited using symbol execution when it is no longer possible, that is, a combination of fuzzing and symbol execution Hybrid purging techniques are being researched and developed.

그런데 하이브리드 퍼징에 의해서도, 취약점 탐색 가능한 코드 영역(커버리지)이 한계에 도달하여, 더 이상 커버리지가 증가하지 않는 상황이 빈번하게 발생한다. 하지만, 하이브리드 퍼징에 의해서 탐색되지 않은 미탐 영역을 지정하여 추가 탐색할 수 있도록 하는 방법들은 제공되지 않고 있다.However, even with hybrid fuzzing, a situation in which a code region (coverage) that can be searched for a vulnerability reaches a limit and coverage is no longer increased frequently occurs. However, methods for designating an undetected region not searched by hybrid fuzzing and allowing additional search are not provided.

미국등록특허 제9454659호U.S. Patent No. 9454659

본 발명의 몇몇 실시예들이 해결하고자 하는 기술적 과제는, 프로그램의 보안 취약점 탐색을 위해 프로그램 바이너리를 재생성하는 방법 및 시스템을 제공하는 것이다.A technical problem to be solved by some embodiments of the present invention is to provide a method and system for regenerating program binaries for searching for security vulnerabilities in programs.

본 발명의 몇몇 실시예들이 해결하고자 하는 다른 기술적 과제는, 취약점 탐색 대상 바이너리의 미탐 영역을 탐색하기 위해 대상 바이너리의 제어 흐름을 변경하는 방법 및 시스템을 제공하는 것이다.Another technical problem to be solved by some embodiments of the present invention is to provide a method and system for changing a control flow of a target binary in order to search an unexplored region of a target binary for vulnerability search.

본 발명의 몇몇 실시예들이 해결하고자 하는 또 다른 기술적 과제는, 코드 영역 별 위험도에 기반하여 탐색 대상 영역을 선정하는 방법 및 시스템을 제공하는 것이다.Another technical problem to be solved by some embodiments of the present invention is to provide a method and system for selecting a search target region based on a risk level for each code region.

본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 기술분야에서의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.The technical problems of the present invention are not limited to the technical problems mentioned above, and other technical problems not mentioned will be clearly understood by those skilled in the art from the following description.

상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 취약점 탐색을 위한 바이너리 재생성 방법은, 대상 바이너리 내의 타겟 영역에 대한 취약점 탐색을 위한 코드를 자동으로 생성하는 단계와, 상기 코드를 상기 대상 바이너리에 적용하는 단계를 포함한다. In order to solve the above technical problem, a binary regeneration method for vulnerability search according to an embodiment of the present invention includes automatically generating code for vulnerability search for a target region in a target binary, and the code for the target And applying it to the binary.

일 실시예에서 상기 방법은 퍼징(fuzzing) 및 기호 실행 중 적어도 하나의 방법으로 상기 대상 바이너리에 대한 취약점 탐색을 수행하는 단계와, 상기 취약점 탐색 결과를 기초로 상기 타겟 영역을 결정하는 단계를 더 포함할 수 있다.In one embodiment, the method further includes performing a vulnerability search for the target binary by at least one of fuzzing and symbol execution, and determining the target area based on the vulnerability search result. can do.

몇몇 실시예에서, 상기 타겟 영역을 결정하는 단계는, 상기 취약점 탐색 결과 분석되지 않은 복수의 미탐 영역을 식별하는 단계와, 상기 복수의 미탐 영역 각각에 대해 산정된 위험도에 기초하여 상기 복수의 미탐 영역 중에 상기 타겟 영역을 결정하는 단계를 포함할 수 있다. In some embodiments, the determining of the target area may include identifying a plurality of undetected areas that have not been analyzed as a result of the vulnerability search, and determining the plurality of undetected areas based on a risk calculated for each of the plurality of undetected areas. It may include the step of determining the target area.

몇몇 실시예에서, 상기 타겟 영역을 결정하는 단계는, 상기 바이너리 코드를 디스어셈블링한 결과 산출되는 코드를 대상으로 한 정적 분석에 의해 상기 위험도를 산정하는 단계를 더 포함할 수 있다. 다른 몇몇 실시예에서, 상기 타겟 영역을 결정하는 단계는, 상기 복수의 미탐 영역 각각에서 호출된 표준 라이브러리 함수와 취약 함수 리스트의 비교 결과에 기초하여 상기 위험도를 산정하는 단계를 더 포함할 수 있다. 또 다른 몇몇 실시예에서, 상기 타겟 영역을 결정하는 단계는, 상기 복수의 미탐 영역 각각에서 호출된 메모리 관리 관련 함수에 기초하여 상기 위험도를 산정하는 단계를 더 포함할 수 있다. 또 다른 몇몇 실시예에서, 상기 타겟 영역을 결정하는 단계는, 상기 복수의 미탐 영역 각각을 포함하는 각각의 사용자 함수에서 정의된 지역 변수들의 개수 및 크기에 기초하여 상기 위험도를 산정하는 단계를 더 포함할 수 있다.In some embodiments, the step of determining the target region may further include estimating the risk by static analysis of code generated as a result of disassembling the binary code. In some other embodiments, the determining of the target region may further include calculating the risk based on a comparison result of a list of standard library functions and vulnerable functions called in each of the plurality of undetected regions. In some other embodiments, the step of determining the target area may further include estimating the risk based on a memory management related function called in each of the plurality of undetected areas. In some other embodiments, the step of determining the target area further comprises estimating the risk based on the number and size of local variables defined in each user function including each of the plurality of undetected areas. can do.

일 실시예에서, 상기 코드를 자동으로 생성하는 단계는, 상기 타겟 영역을 포함하는 타겟 사용자 함수의 매개 변수를 식별하는 단계와, 퍼저(fuzzer)가 상기 매개 변수를 퍼징할 수 있도록 하는 코드를 포함하는 훅 함수를 자동으로 생성하는 단계를 포함할 수 있다. In one embodiment, the step of automatically generating the code includes identifying a parameter of a target user function including the target area, and code enabling a fuzzer to purge the parameter. It may include the step of automatically generating a hook function.

몇몇 실시예에서, 상기 훅 함수를 자동으로 생성하는 단계는, 상기 매개 변수를 대상으로 표준 입력 함수를 호출하는 코드를 생성하는 단계를 포함할 수 있다. 또한, 상기 훅 함수를 자동으로 생성하는 단계는, 상기 매개 변수로 상기 타겟 사용자 함수를 호출하는 코드를 생성하는 단계를 더 포함할 수 있다.In some embodiments, automatically generating the hook function may include generating code that calls a standard input function based on the parameter. In addition, the step of automatically generating the hook function may further include generating code that calls the target user function with the parameter.

다른 몇몇 실시예에서, 상기 훅 함수를 자동으로 생성하는 단계는, 상기 타겟 사용자 함수의 시그니처 정보 중 적어도 일부에 기초하여, 상기 훅 함수의 헤더를 생성하는 단계를 포함할 수 있다. 또 다른 몇몇 실시예에서, 상기 훅 함수를 자동으로 생성하는 단계는, 상기 타겟 사용자 함수의 시그니처 정보 중 적어도 일부 및 상기 타겟 사용자 함수의 주소에 기초하여, 상기 훅 함수의 바디를 생성하는 단계를 포함할 수 있다. 또 다른 몇몇 실시예에서, 상기 코드를 상기 대상 바이너리에 적용하는 단계는, 상기 훅 함수에 대응하는 바이너리 코드 세그먼트를 생성하는 단계와, 상기 대상 바이너리에 상기 바이너리 코드 세그먼트를 삽입하는 단계와, 상기 대상 바이너리에서 상기 타겟 사용자 함수를 호출하는 명령어를 상기 훅 함수를 호출하는 명령어로 대체하는 단계를 더 포함할 수 있다.In some other embodiments, automatically generating the hook function may include generating a header of the hook function based on at least some of signature information of the target user function. In some other embodiments, automatically generating the hook function includes generating a body of the hook function based on at least some of the target user function signature information and an address of the target user function. can do. In some other embodiments, applying the code to the target binary includes: generating a binary code segment corresponding to the hook function, inserting the binary code segment into the target binary, and the target The method may further include replacing a command that calls the target user function in a binary with a command that calls the hook function.

상기 기술적 과제를 해결하기 위한, 본 발명의 다른 실시예에 따른 취약점 탐색을 위한 바이너리 재생성 시스템은, 제어 흐름 변경 코드 생성부와 바이너리 재생성부를 포함한다. 이때, 상기 제어 흐름 변경 코드 생성부는, 타겟 사용자 함수의 시그니처를 기초로 훅 함수 코드를 생성하고, 상기 훅 함수 코드를 바이너리 코드 세그먼트로 빌드한다. 또한, 상기 바이너리 재생성부는, 상기 바이너리 코드 세그먼트를 재생성 대상 바이너리에 삽입하고, 상기 재생성 대상 바이너리에서 상기 타겟 사용자 함수를 호출하는 명령어를 상기 훅 함수를 호출하는 명령어로 대체한다. In order to solve the above technical problem, a binary regeneration system for vulnerability search according to another embodiment of the present invention includes a control flow change code generation unit and a binary regeneration unit. At this time, the control flow change code generator generates a hook function code based on the target user function signature, and builds the hook function code into a binary code segment. In addition, the binary regeneration unit inserts the binary code segment into a regeneration target binary, and replaces a command that calls the target user function in the regeneration target binary with a command that calls the hook function.

일 실시예에서, 상기 제어 흐름 변경 코드 생성부는 DB를 더 포함하고, 상기 제어 흐름 변경 코드 생성부는, 상기 DB에 저장된 코드 템플릿을 사용하여, 상기 타겟 사용자 함수의 시그니처에 대응되는 훅 함수를 생성할 수 있다.In one embodiment, the control flow change code generation unit further includes a DB, and the control flow change code generation unit generates a hook function corresponding to the target user function signature using a code template stored in the DB. Can be.

일 실시예에서, 상기 훅 함수는, 퍼저(fuzzer)가 상기 타겟 사용자 함수의 매개 변수를 퍼징할 수 있도록 하는 코드를 포함할 수 있다. 몇몇 실시예에서, 상기 훅 함수는, 상기 매개 변수를 대상으로 표준 입력 함수를 호출하는 코드를 포함할 수 있다.In one embodiment, the hook function may include code that allows a fuzzer to fuzz the parameters of the target user function. In some embodiments, the hook function may include code that calls a standard input function on the parameter.

도 1은 본 발명의 일 실시예에 따른 바이너리 취약점 탐색 시스템을 설명하기 위한 도면이다.
도 2는, 도 1에서 설명된 시스템의 위험도 분석 모듈의 동작을 설명하기 위한 도면이다.
도 3a 및 도 3b는, 도 2에서 설명된 위험도 분석 모듈이 참조할 수 있는 예시적인 취약 함수 및 메모리 관리 함수를 각각 나타내는 도면이다.
도 4a 및 도 4b는, 도 2에서 설명된 위험도 분석 모듈이 변수 타입 추론을 위해 참조할 수 있는 어셈블리 명령어 및 표준 라이브러리 함수를 각각 나타내는 도면이다.
도 5는, 도 1에서 설명된 시스템의 바이너리 재생성 모듈의 동작을 설명하기 위한 도면이다.
도 6a는 대상 바이너리에서 추가 탐색 대상 사용자 함수가 실행되는 제어흐름을 설명하기 위한 도면이고, 도 6b는 본 발명의 일 실시예에 따른 방법에 의해 재생성된 바이너리에서 사용자 함수가 실행되는 새로운 제어 흐름을 설명하기 위한 도면이다.
도 7a는, 도 5에서 설명된 바이너리 재생성 모듈에 의해 생성되는 예시적인 훅 함수를 설명하기 위한 도면이고, 도 7b는 훅 함수의 생성에 이용될 수 있는 예시적인 코드 템플릿을 설명하기 위한 도면이다.
도 8은, 본 발명의 다른 실시예에 따른 바이너리 재생성 시스템을 설명하는 도면이다.
1 is a view for explaining a binary vulnerability search system according to an embodiment of the present invention.
FIG. 2 is a diagram for explaining the operation of the risk analysis module of the system described in FIG. 1.
3A and 3B are diagrams illustrating exemplary vulnerability functions and memory management functions, respectively, that the risk analysis module described in FIG. 2 can refer to.
4A and 4B are diagrams each showing assembly instructions and standard library functions that the risk analysis module described in FIG. 2 can refer to for variable type inference.
5 is a view for explaining the operation of the binary regeneration module of the system described in FIG. 1.
6A is a diagram for explaining a control flow in which an additional search target user function is executed in a target binary, and FIG. 6B is a new control flow in which a user function is executed in a binary regenerated by the method according to an embodiment of the present invention It is a figure for illustration.
FIG. 7A is a diagram for describing an exemplary hook function generated by the binary regeneration module described in FIG. 5, and FIG. 7B is a diagram for illustrating an exemplary code template that can be used to generate a hook function.
8 is a diagram illustrating a binary regeneration system according to another embodiment of the present invention.

이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명의 기술적 사상은 이하의 실시예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 이하의 실시예들은 본 발명의 기술적 사상을 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 본 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명의 기술적 사상은 청구항의 범주에 의해 정의될 뿐이다.Hereinafter, embodiments of the present invention will be described in detail with reference to the accompanying drawings. Advantages and features of the present invention, and methods for achieving them will be clarified with reference to embodiments described below in detail together with the accompanying drawings. However, the technical spirit of the present invention is not limited to the following embodiments, but may be implemented in various different forms, and only the following embodiments make the technical spirit of the present invention complete and in the technical field to which the present invention pertains. It is provided to fully inform the person of ordinary skill in the scope of the present invention, and the technical spirit of the present invention is only defined by the scope of the claims.

각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 대해서는 비록 다른 도면상에 표시되더라도 가능한 한 동일한 부호를 가지도록 하고 있음에 유의해야 한다. 또한, 본 발명을 설명함에 있어, 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명은 생략한다.It should be noted that in adding reference numerals to the components of each drawing, the same components have the same reference numerals as possible even though they are displayed on different drawings. In addition, in describing the present invention, when it is determined that detailed descriptions of related well-known structures or functions may obscure the subject matter of the present invention, detailed descriptions thereof will be omitted.

다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다. 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다.Unless otherwise defined, all terms (including technical and scientific terms) used in this specification may be used as meanings commonly understood by those skilled in the art to which the present invention pertains. In addition, terms defined in the commonly used dictionary are not ideally or excessively interpreted unless specifically defined. The terminology used herein is for describing the embodiments and is not intended to limit the present invention. In the present specification, the singular form also includes the plural form unless otherwise specified in the phrase.

또한, 본 발명의 구성 요소를 설명하는 데 있어서, 제1, 제2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 어떤 구성 요소가 다른 구성요소에 "연결", "결합" 또는 "접속"된다고 기재된 경우, 그 구성 요소는 그 다른 구성요소에 직접적으로 연결되거나 또는 접속될 수 있지만, 각 구성 요소 사이에 또 다른 구성 요소가 "연결", "결합" 또는 "접속"될 수도 있다고 이해되어야 할 것이다.In addition, in describing the components of the present invention, terms such as first, second, A, B, (a), and (b) may be used. These terms are only for distinguishing the component from other components, and the nature, order, or order of the component is not limited by the term. When a component is described as being "connected", "coupled" or "connected" to another component, that component may be directly connected to or connected to the other component, but another component between each component It should be understood that elements may be "connected", "coupled" or "connected".

이하, 본 발명의 몇몇 실시예들에 대하여 첨부된 도면에 따라 상세하게 설명한다.Hereinafter, some embodiments of the present invention will be described in detail according to the accompanying drawings.

도 1은 본 발명의 일 실시예에 따른 바이너리 취약점 탐색 시스템(100)을 설명하기 위한 도면이다.1 is a view for explaining a binary vulnerability search system 100 according to an embodiment of the present invention.

본 실시예에 따른 바이너리 취약점 탐색 시스템(100)은 정적 분석 모듈(110), 위험도 분석 모듈(120), 취약점 탐색 모듈(130), 및 바이너리 재생성 모듈(140)을 포함한다.The binary vulnerability search system 100 according to the present embodiment includes a static analysis module 110, a risk analysis module 120, a vulnerability search module 130, and a binary regeneration module 140.

상기 시스템(100)은 취약점 탐색 대상 바이너리(10)를 입력 받아서, 취약점 탐색을 수행하고, 그 과정에서 발생한 크래시 정보(30)를 출력한다. 상기 크래시 정보(30)는 상기 대상 바이너리(10)에 대한 취약점 분석에 활용될 수 있다. 또한, 상기 시스템(100)은 취약점 탐색을 수행한 결과, 탐색되지 않은 영역들을 추가로 탐색할 수 있도록 제어 흐름을 변경한 바이너리(20)들을 생성하고, 취약점 탐색에 활용한다.The system 100 receives the vulnerability search target binary 10, performs vulnerability search, and outputs crash information 30 generated in the process. The crash information 30 may be used for vulnerability analysis of the target binary 10. In addition, as a result of performing the vulnerability search, the system 100 generates binaries 20 having changed the control flow so as to additionally search undiscovered areas, and utilizes the vulnerability search.

정적 분석 모듈(110)은, 상기 대상 바이너리(10)를 실행하지 않고, 상기 대상 바이너리(10)를 정적으로 분석하는 구성이다. 정적 분석 모듈(110)은, 기계어로 구성된 대상 바이너리(10)를 디스어셈블링하여, 디스어셈블 코드를 생성한다. 이때 정적 분석 모듈(110)은, 예컨대 'objdump'와 같은 프로그램을 이용하여, 디스어셈블 코드를 생성할 수 있다. 또한, 정적 분석 모듈(110)은, 상기 디스어셈블 코드를 분석하여, 대상 바이너리(10) 내에서 호출되는 표준 라이브러리 함수들의 리스트 및 상기 표준 라이브러리 함수들을 호출하는 사용자 함수들에 관한 정보를 추출할 수 있다. 정적 분석 모듈(110)은 상기 디스어셈블 코드 및 함수 호출 관련 정보를, 위험도 분석 모듈(120)에 제공할 수 있다.The static analysis module 110 is configured to statically analyze the target binary 10 without executing the target binary 10. The static analysis module 110 disassembles the target binary 10 configured in machine language, and generates disassembled code. At this time, the static analysis module 110 may generate disassembled code, for example, by using a program such as'objdump'. In addition, the static analysis module 110 may analyze the disassembled code and extract a list of standard library functions that are called in the target binary 10 and user functions that call the standard library functions. have. The static analysis module 110 may provide the disassembly code and function call related information to the risk analysis module 120.

위험도 분석 모듈(120)은, 정적 분석 모듈(110)으로부터 상기 디스어셈블 코드 및 함수 호출 관련 정보를 제공받아서, 대상 바이너리(10)의 영역들에 대한 위험도를 산정한다. 위험도 분석 모듈(120)은 상기 위험도 정보가 대상 바이너리(10)의 취약점 탐색 과정에 이용되도록 할 수 있다. The risk analysis module 120 receives the disassembly code and function call related information from the static analysis module 110 and calculates the risk for the regions of the target binary 10. The risk analysis module 120 may allow the risk information to be used in the vulnerability search process of the target binary 10.

보다 구체적으로, 위험도 분석 모듈(120)은, 상기 디스어셈블 코드를 분석하여 대상 바이너리(10)에 사용된 변수들의 개수, 타입, 및 메모리 할당 범위를 추론할 수 있고, 이를 기초로 대상 바이너리(10)의 영역들에 대한 위험도를 산정할 수 있다. 또한, 위험도 분석 모듈(120)은 상기 함수 호출 관련 정보를 기초로, 대상 바이너리(10)의 영역 들에 대한 위험도를 산정할 수 있다. 위험도를 산정하는 자세한 방법은, 도 2 및 도 3을 참조하여 후술하기로 한다. More specifically, the risk analysis module 120 may infer the number, type, and memory allocation range of variables used in the target binary 10 by analyzing the disassembly code, and based on this, the target binary 10 ) To estimate the risk for the domains. In addition, the risk analysis module 120 may calculate the risk for the regions of the target binary 10 based on the information related to the function call. The detailed method of calculating the risk will be described later with reference to FIGS. 2 and 3.

위험도 분석 모듈(120)은 상기 산정된 위험도 정보를 취약점 탐색 모듈(130) 및 바이너리 재생성 모듈(140)에 제공할 수 있다. 한편, 실시예에 따라서는, 전술한 정적 분석 모듈(110) 및 위험도 분석 모듈(120)이 하나의 모듈로 구현될 수도 있음에 유의한다.The risk analysis module 120 may provide the calculated risk information to the vulnerability search module 130 and the binary regeneration module 140. On the other hand, according to an embodiment, it is noted that the static analysis module 110 and the risk analysis module 120 described above may be implemented as one module.

취약점 탐색 모듈(130)은 대상 바이너리(10)에 대한 취약점 탐색을 수행하는 구성이다. 취약점 탐색 모듈(130)은 위험도 분석 모듈(120)로부터 제공받은 위험도 정보를 이용하여, 취약점 탐색을 수행한다. 취약점 탐색 모듈(130)은 퍼징 엔진(131) 및 기호 실행 엔진(132)을 포함할 수 있다. 취약점 탐색 모듈(130)은 대상 바이너리(10)의 취약점 탐색을 위하여 퍼징 및 기호 실행을 선택적으로 실시할 수 있다. 취약점 탐색 모듈(130)은 취약점 탐색 과정에서 발생한 크래시에 관한 정보(30)를 출력한다. 또한 취약점 탐색 모듈(130)은, 대상 바이너리(10)에 대한 취약점 탐색 과정에서 탐색 완료된(분석된) 영역에 관한 정보를 바이너리 재생성 모듈(140)에 제공할 수 있다.The vulnerability search module 130 is configured to perform vulnerability search for the target binary 10. The vulnerability search module 130 performs vulnerability search using the risk information provided from the risk analysis module 120. The vulnerability search module 130 may include a fuzzing engine 131 and a symbol execution engine 132. The vulnerability search module 130 may selectively perform fuzzing and symbol execution to search for the vulnerability of the target binary 10. Vulnerability search module 130 outputs information 30 on the crash that occurred during the vulnerability search process. In addition, the vulnerability search module 130 may provide the binary regeneration module 140 with information on the area where the search is completed (analyzed) in the process of searching for the vulnerability of the target binary 10.

한편, 취약점 탐색 모듈(120)은 바이너리 재생성 모듈(140)에 의해 재생성된 바이너리(20)를 입력 받아서, 대상 바이너리(10)에 대한 추가적인 취약점 탐색에 활용할 수 있다.On the other hand, the vulnerability search module 120 receives the binary 20 regenerated by the binary regeneration module 140, and can be used to search for additional vulnerabilities for the target binary 10.

바이너리 재생성 모듈(140)은 취약점 탐색 모듈(130)이 탐색(분석)하지 못한 대상 바이너리(10)의 영역들을 추가로 탐색할 수 있도록 대상 바이너리(10)의 제어 흐름을 변경하는 모듈이다.The binary regeneration module 140 is a module that changes the control flow of the target binary 10 so that the vulnerability search module 130 can additionally search areas of the target binary 10 that have not been searched (analyzed).

바이너리 재생성 모듈(140)은, 취약점 탐색 모듈(130)로부터 탐색이 완료된 영역에 대한 정보를 제공받아서, 대상 바이너리(10)에서 탐색되지 않은 영역('미탐 영역')들을 식별한다. 다른 몇몇 실시예에서 바이너리 재생성 모듈(140)은, 취약점 탐색 모듈(130)로부터, 미탐 영역들에 관한 정보를 제공받을 수도 있다. 이 경우, 취약점 탐색 모듈(130)이 미탐 영역을 식별하는 동작을 수행하게 된다.The binary regeneration module 140 receives information about the searched area from the vulnerability search module 130 and identifies areas not searched for in the target binary 10 ('undetected areas'). In some other embodiments, the binary regeneration module 140 may be provided with information about undetected areas from the vulnerability search module 130. In this case, the vulnerability search module 130 performs an operation of identifying an undetected area.

바이너리 재생성 모듈(140)은, 위험도 분석 모듈(120)로부터 위험도 정보를 제공받아서, 이를 기초로 복수의 미탐 영역들 중에 추가 탐색 대상 영역을 결정할 수 있다. 예를 들어, 복수의 미탐 영역들 중에 위험도가 높은 영역을 우선으로 하여 추가 탐색 대상 영역을 선정할 수 있다.The binary regeneration module 140 may receive risk information from the risk analysis module 120 and determine an additional search target area among a plurality of undetected areas based on the risk information. For example, an additional search target region may be selected by giving priority to a region of high risk among a plurality of unexplored regions.

바이너리 재생성 모듈(140)은, 상기 결정된 추가 탐색 대상 영역을 취약점 탐색 모듈(130)이 탐색할 수 있도록 제어 흐름을 변경하는 코드를 대상 바이너리(10)에 적용함으로써, 제어 흐름이 변경된 바이너리(20)를 생성할 수 있다. 상기 바이너리(20)는 취약점 탐색 모듈(130)에 제공되어, 추가적인 취약점 탐색에 이용될 수 있다.The binary regeneration module 140 applies the code for changing the control flow to the target binary 10 so that the vulnerability search module 130 can search the determined additional search target area, the binary 20 in which the control flow is changed. Can generate The binary 20 is provided to the vulnerability search module 130 and can be used for additional vulnerability search.

전술한 바이너리 재생성 모듈(140)의 동작들은, 도 5 내지 도 7을 참조하여 후술하기로 한다.The above-described operations of the binary regeneration module 140 will be described later with reference to FIGS. 5 to 7.

이하에서는, 도 2 내지 도 4를 참조하여 위험도 분석 모듈(120)의 동작을 보다 자세하게 설명한다. 위험도 분석 모듈(120)은, 정적 분석 모듈(110)로부터 대상 바이너리(10)에 대한 디스어셈블 코드 및 대상 바이너리(10)에서 사용된 표준 라이브러리 함수들에 관한 정보를 제공받아서, 대상 바이너리(10)의 영역들에 대한 위험도를 산정한다.Hereinafter, the operation of the risk analysis module 120 will be described in more detail with reference to FIGS. 2 to 4. The risk analysis module 120 receives the disassembly code for the target binary 10 from the static analysis module 110 and information on standard library functions used in the target binary 10, so that the target binary 10 Calculate the risk for the areas of.

위험도 분석 모듈(120)은 호출 함수를 기초로 산정된 위험도(단계 S210 내지 S220 참조) 및 추론된 지역 변수 개수와 크기를 기초로 산정된 위험도(단계 S230 내지 S240 참조)를 종합하여, 위험도를 산정할 수 있다(단계 S250).The risk analysis module 120 calculates the risk by synthesizing the risk calculated based on the call function (see steps S210 to S220) and the risk calculated based on the number and size of the inferred local variables (see steps S230 to S240). It can be done (step S250).

먼저 호출 함수를 기초로 위험도를 산정하는 과정을 설명한다.First, the process of estimating the risk based on the calling function will be described.

도 2의 단계 S210에서는, 대상 바이너리(10)로부터, 표준 라이브러리 함수들 중 취약 함수들 및/또는 메모리 관리 관련 함수들을 호출하는 코드 영역들, 예컨대 사용자 함수들이 식별된다.In step S210 of FIG. 2, from the target binary 10, code regions that call vulnerable functions and/or memory management-related functions among standard library functions, such as user functions, are identified.

여기서, 취약 함수는 도 3a에 도시된 예시적인 함수들일 수 있다. 취약 함수에는, Buffer Overflow를 유발할 수 있는 함수들인 scanf, strcpy, memcpy 등의 함수들, Format String 관련 함수들인 printf, fprintf, snprintf, 등의 함수들, 및 strtok 등의 함수들이 포함될 수 있다. 상기 취약 함수들에는 차등적인 위험도가 부여될 수 있다. 예컨대, scanf 및 snprintf 등의 함수들에는 0.5의 위험도가 부여될 수 있고, strcpy 및 syslog 등의 함수들에는 1.0의 위험도가 부여될 수 있다. 위험도가 1.0인 함수들은 사용이 금지되어야 하는 함수들을 의미할 수 있다.Here, the weak function may be exemplary functions illustrated in FIG. 3A. The vulnerable function may include functions such as scanf, strcpy, and memcpy, which can cause buffer overflow, functions such as format string related functions printf, fprintf, snprintf, and strtok. Differential risks may be assigned to the vulnerable functions. For example, functions such as scanf and snprintf may be assigned a risk of 0.5, and functions such as strcpy and syslog may be assigned a risk of 1.0. Functions with a risk of 1.0 may mean functions that should be banned.

또한, 메모리 관리 관련 함수들은 도 3b에 도시된 예시적인 함수들일 수 있다. 도 3b에 도시된 메모리 관리 관련 함수들은 사용이 금지되어야 하는 것은 아닐 수 있으나, 메모리 관련 취약점을 발생시킬 가능성을 지닌 함수들이다. 따라서 적절한 위험도가 부여되어, 적절한 취약점 탐색이 수행될 수 있도록 한다.Also, the memory management related functions may be exemplary functions illustrated in FIG. 3B. The memory management-related functions illustrated in FIG. 3B may not be prohibited, but are functions having a possibility of generating a memory-related vulnerability. Therefore, an appropriate risk level is assigned, so that an appropriate vulnerability search can be performed.

단계 S220에서는, 상기 취약 함수들 및/또는 메모리 관리 관련 함수들을 호출하는 사용자 함수들에 대한 위험도가 산정된다. 상기 위험도는, 각각의 사용자 함수가 호출한 상기 함수들에 부여된 위험도를 합산하여 산정될 수 있다.In step S220, a risk is calculated for user functions that call the vulnerable functions and/or memory management-related functions. The risk may be calculated by summing the risks assigned to the functions called by each user function.

지금까지는 단계 S210 내지 S220에서, 각 사용자 함수가 호출하는 표준 라이브러리 함수를 기초로 위험도를 산정하는 과정이 설명되었다. 이하에서는, 각 사용자 함수의 지역 변수에 대하여 추론된 변수의 개수와 크기를 기초로 위험도를 산정하는 과정(단계 S230 내지 S240)에 대해서 설명한다.So far, in steps S210 to S220, the process of calculating the risk based on the standard library function called by each user function has been described. Hereinafter, a process (steps S230 to S240) of calculating a risk based on the number and size of variables deduced for the local variables of each user function will be described.

단계 S230에서는, 대상 바이너리(10)의 코드 영역 또는 사용자 함수에서 정의된 지역 변수들이 식별되고, 상기 변수들에 대한 변수 타입이 추론된다. 변수 타입은 대상 바이너리(10)의 디스어셈블 코드를 분석하여 추론될 수 있다.In step S230, local variables defined in a code region or a user function of the target binary 10 are identified, and a variable type for the variables is inferred. The variable type can be inferred by analyzing the disassembly code of the target binary 10.

몇몇 실시예에서, 변수 타입은 해당 변수를 오퍼랜드로 하는 어셈블리 명령어를 참조하여 추론될 수 있다. 도 4a는 변수의 타입을 추론하는데 참조할 수 있는 예시적인 어셈블리 명령어들을 보여준다. In some embodiments, the variable type may be inferred with reference to assembly instructions whose variables are operands. 4A shows example assembly instructions that can be referenced to infer the type of a variable.

예를 들어, 도 4a의 첫번째 항목(No. 1)인 'movs' 명령어는 제1 오퍼랜드인 (E)SI 레지스터에 의해 지정된 메모리 주소의 문자열을 제2 오퍼랜드인 (E)DI 레지스터에 의해 지정된 메모리 주소로 복사하는 명령어이다. 따라서 상기 명령어 전에 (E)SI 레지스터가 가리키는 주소에 데이터를 저장한 변수 및 상기 명령어 후에 (E)DI 레지스터가 가리키는 주소에서 데이터를 읽어 낸 변수의 타입은 문자열 타입이라는 것이 추론될 수 있다. For example, in the first item (No. 1) of FIG. 4A, the'movs' instruction sets the string of the memory address designated by the first operand (E)SI register and the memory designated by the second operand (E)DI register. This is a command to copy to an address. Therefore, it can be inferred that the type of the variable that stores data in the address indicated by the (E)SI register before the instruction and the variable that reads the data from the address indicated by the (E)DI register after the instruction is a string type.

또 다른 예로, 도 4a의 24번째 항목(No. 24)인 'fstp' 명령어는 FPU 스택 레지스터에 저장된 데이터를 제1 오퍼랜드(메모리 주소 또는 다른 레지스터)로 복사하는 명령어이며, 상기 명령어의 전이나 후에 상기 데이터를 저장하는 변수는 'float' 또는 'double' 타입이라는 것이 추론될 수 있다.As another example, the'fstp' instruction, which is the 24th item (No. 24) of FIG. 4A, is an instruction to copy data stored in the FPU stack register to the first operand (memory address or other register) and before or after the instruction. It can be inferred that the variable storing the data is of type'float' or'double'.

다른 몇몇 실시예에서, 변수 타입은 해당 변수를 매개 변수로 하여 호출되거나 해당 변수에 리턴 값을 저장하는 표준 라이브러리 함수를 참조하여 추론될 수 있다. 도 4b는 변수의 타입을 추론하는데 참조할 수 있는 예시적인 함수들을 보여준다.In some other embodiments, the variable type may be called with the variable as a parameter or inferred by reference to a standard library function that stores the return value in the variable. 4B shows example functions that can be referenced to infer the type of a variable.

예를 들어, 도 4b의 첫번째 항목(No. 1)인 'strcpy' 함수는 제1 매개 변수 및 제2 매개 변수의 타입이 문자열 포인터 타입이며, 반환 값 또한 문자열 포인터 타입이다. 따라서 strcpy 함수의 매개 변수로 사용되거나 리턴 값을 저장하는데 사용된 변수의 타입은 문자열 포인터 타입이라는 것이 추론될 수 있다. For example, in the first item (No. 1) of FIG. 4B, the'strcpy' function has a type of a first parameter and a second parameter of a string pointer type, and a return value of a string pointer type. Therefore, it can be inferred that the type of the variable used as a parameter of the strcpy function or used to store the return value is a string pointer type.

또 다른 예로, 도 4b의 49번째 항목(No. 49)인 'itoa' 함수는 int 타입의 정수를 문자열로 변환하는 함수로서, 제1 매개 변수는 'int' 타입이고, 제2 매개 변수는 문자열 포인터 타입이며, 제3 매개 변수는 'int' 타입이다. 따라서 'itoa' 함수의 제1 내지 제3 매개 변수로 사용된 변수들의 타입이 추론될 수 있다.As another example, the'itoa' function, which is the 49th item (No. 49) of FIG. 4B, is a function that converts an integer of type int to a string, the first parameter is of type'int', and the second parameter is of string. It is of type pointer and the third parameter is of type'int'. Therefore, the types of variables used as the first to third parameters of the'itoa' function can be inferred.

다시 도 2를 참조하여 단계 S240을 설명한다. 단계 S240에서는 사용자 함수들 각각에서 정의되어 사용된 지역 변수들의 개수 및 크기를 기초로, 사용자 함수의 위험도가 산정될 수 있다. 몇몇 실시예에서, 사용자 함수의 위험도는 사용자 함수에서 정의된 지역 변수들의 추론된 개수와 크기에 비례하도록 산정될 수 있다. 예컨대, 지역 변수들의 개수에 제1 가중치를 곱한 값과, 지역 변수들의 크기에 제2 가중치를 곱한 값을 합산하여, 사용자 함수의 위험도가 산정될 수 있다. 상기 제1 가중치 및 제2 가중치는 다양한 실시예에서 적절하게 선택될 수 있다.Step S240 will be described again with reference to FIG. 2. In step S240, the risk of the user function may be calculated based on the number and size of local variables defined and used in each of the user functions. In some embodiments, the risk of the user function may be calculated in proportion to the inferred number and size of local variables defined in the user function. For example, the risk of the user function may be calculated by summing the number of local variables multiplied by the first weight and the size of the local variables multiplied by the second weight. The first weight and the second weight may be appropriately selected in various embodiments.

지금까지는 단계 S230 내지 S240에서, 각 사용자 함수의 지역 변수에 대하여 추론된 변수 개수 및 크기를 기초로 위험도를 산정하는 과정이 설명되었다.So far, in steps S230 to S240, a process of estimating a risk based on the number and size of variables deduced for local variables of each user function has been described.

단계 S250에서는, 상기 단계 S220에서 호출 함수를 기초로 산정된 위험도 및 상기 단계 S240에서 추론된 변수 개수 및 크기를 기초로 산정된 위험도를 종합하여, 사용자 함수 별 종합 위험도가 산정할 수 있다.In step S250, the risk calculated based on the call function in step S220 and the risk calculated based on the number and size of variables deduced in step S240 may be combined to calculate the overall risk for each user function.

전술한 바와 같이 위험도 분석 모듈(120)에 의해 산정된 사용자 함수 별 위험도에 관한 정보는 취약점 탐색 모듈(130)에 제공되어 취약점 탐색에 이용될 수 있다. 또한, 위험도 분석 모듈(120)에 의해 산정된 상기 위험도에 관한 정보는 바이너리 재생성 모듈(140)에 제공되어, 미탐 영역들 중에 추가 탐색 대상 영역을 선정하는데 이용될 수 있다.As described above, information on the risk of each user function calculated by the risk analysis module 120 is provided to the vulnerability search module 130 and used for vulnerability search. In addition, information on the risk calculated by the risk analysis module 120 is provided to the binary regeneration module 140, and may be used to select an additional search target area among undetected areas.

이하에서는, 도 5 내지 도 7을 참조하여 바이너리 재생성 모듈(140)의 동작을 보다 자세하게 설명한다. 바이너리 재생성 모듈(140)은 취약점 탐색 모듈(130)이 탐색(분석)하지 못한 대상 바이너리(10)의 영역들을 추가로 탐색할 수 있도록 대상 바이너리(10)의 제어 흐름을 변경한다.Hereinafter, the operation of the binary regeneration module 140 will be described in more detail with reference to FIGS. 5 to 7. The binary regeneration module 140 changes the control flow of the target binary 10 so that the vulnerability search module 130 can additionally search areas of the target binary 10 that have not been searched (analyzed).

우선 도 5를 참조하여 설명한다. 단계 S510에서는, 대상 바이너리(10)에 대하여 취약점 탐색 모듈(130)이 탐색을 완료한 영역에 대한 정보를 기초로 대상 바이너리(10) 내의 미탐 영역이 식별된다. 다른 몇몇 실시예에서는, 미탐 영역에 관한 식별 정보가 취약점 탐색 모듈(130)로부터 제공되고, 후술할 과정에서 이용될 수도 있다.First, it will be described with reference to FIG. 5. In step S510, an unexplored region in the target binary 10 is identified based on information on the region where the vulnerability search module 130 has completed searching for the target binary 10. In some other embodiments, identification information regarding the undetected area is provided from the vulnerability search module 130 and may be used in a process described later.

몇몇 실시예에서 미탐 영역은, 취약점 탐색 모듈(130)이 대상 바이너리(10)에 대해 취약점 탐색을 수행하는 과정에서 제어 흐름이 경유하지 못한 영역일 수 있다. 도 6a을 참조하여 예를 들어 설명하면, 취약점 탐색 과정에서 제어 흐름이, main#1(601), main#2(602), user#1(621), user#2(622), user#3(623), user#5(625), main#3(603), main#5(605)의 순으로 진행된 경우, 미탐 영역은 main#4(604) 및 user#4(624)이다. In some embodiments, the undetected area may be an area in which the control flow has not passed in the process of the vulnerability search module 130 performing vulnerability search on the target binary 10. For example, referring to FIG. 6A, the control flow in the process of searching for vulnerabilities is main#1(601), main#2(602), user#1(621), user#2(622), user#3 In the order of 623, user#5 625, main#3 603, and main#5 605, the undetected areas are main#4 604 and user#4 624.

단계 S520에서는, 각각의 미탐 영역들을 포함하는 사용자 함수들에 대한 위험도가 식별된다. 상기 도 6a에 도시된 예에서, 미탐 영역(624)을 포함하는 사용자 함수는 UserFunction(620)이다. 사용자 함수들에 대한 위험도 식별에는 위험도 산정 모듈(120)으로부터 제공받은 위험도 정보가 이용될 수 있다. 상기 위험도 정보에 기초하여, 탐색 대상 사용자 함수가 선정된다. 예컨대, 복수의 미탐 영역들을 포함하는 복수의 사용자 함수들 중에 위험도가 가장 높은 사용자 함수를 우선으로 하여 탐색 대상 사용자 함수가 선정될 수 있다.In step S520, the risk for user functions including respective undetected areas is identified. In the example shown in FIG. 6A, the user function including the undetected area 624 is the UserFunction 620. The risk information provided from the risk calculation module 120 may be used to identify risks for user functions. Based on the risk information, a user function to be searched is selected. For example, among the plurality of user functions including a plurality of undetected areas, the user function to be searched may be selected by giving priority to the user function having the highest risk.

단계 S530에서는, 상기 탐색 대상 사용자 함수의 매개 변수의 개수 및 타입이 분석된다. 상기 매개 변수의 개수 및 타입은 정적 분석 모듈(110)에 의해 제공되는 디스어셈블 코드를 기초로 분석될 수 있다. 예를 들어, 상기 탐색 대상 사용자 함수를 호출하는 어셈블리 명령어 이전에 스택에 데이터를 푸시하는 명령어의 개수를 식별하여, 상기 탐색 대상 사용자 함수의 매개 변수의 개수가 식별될 수 있다. 또한, 도 2의 단계 S230과 관련하여 도 4a 및 도 4b를 참조하여 설명한 변수 타입 추론 방법을 포함한 다양한 방법들에 의해 상기 매개 변수의 타입들이 식별될 수 있다.In step S530, the number and type of parameters of the user function to be searched are analyzed. The number and type of the parameters may be analyzed based on disassembly code provided by the static analysis module 110. For example, the number of parameters of the user function to be searched for may be identified by identifying the number of instructions to push data onto the stack before the assembly instruction that calls the user function to search for. In addition, the types of the parameters may be identified by various methods including the variable type inference method described with reference to FIGS. 4A and 4B in connection with step S230 of FIG. 2.

단계 S540에서는, 상기 대상 바이너리(10)의 제어 흐름을 변경하여 미탐 영역이 탐색될 수 있도록 하는 훅 함수가 자동으로 생성된다.In step S540, a hook function is automatically generated to change the control flow of the target binary 10 so that the unexplored region can be searched.

다시 도 6a를 참조하면, 도 6a에 도시된 제어 흐름은, 예컨대 퍼징 등의 방법으로 취약점 탐색을 수행하는 과정에서, main#1(601)의 분기문에서 main#2(602)로 제어 흐름이 진행되도록 하는 입력 값들만이 제공되었다는 것을 암시하며, user#1(621)의 분기문에서 user#2(622)로 제어 흐름이 진행되도록 하는 입력 값들만이 제공되었다는 것을 암시한다. 즉, 도 6a에 도시된 제어 흐름은, 주어진 시간 동안의 취약점 탐색 과정에서 취약점 탐색 모듈(130)이 생성한 입력 값들에 의해서는, main#4(604) 및 user#4(624)가 탐색될 수 없었다는 것을 암시한다.Referring back to FIG. 6A, the control flow shown in FIG. 6A is controlled from the branch statement of main#1 (601) to main#2 (602) in the process of searching for vulnerabilities by, for example, fuzzing. It implies that only the input values to proceed are provided, and only the input values to control flow from user#1 621 to the user#2 622 are provided. That is, in the control flow shown in FIG. 6A, main#4 604 and user#4 624 are searched by input values generated by the vulnerability search module 130 during a vulnerability search process for a given time. Implies that it could not.

도 6b를 참조하면, 상기 훅 함수는 main#2(602)에 의해 상기 탐색 대상 사용자 함수(620)가 호출되어 실행되는 제어 흐름을 가로채서(hooking), 추가적인 동작을 수행한 후, 상기 사용자 함수(620)를 호출하는 함수(640)이다.Referring to FIG. 6B, the hook function intercepts the control flow executed by the search target user function 620 by main#2 602, performs additional operations, and then performs the user function. It is a function 640 that calls 620.

몇몇 실시예에서, 상기 훅 함수는 상기 미탐 영역 user#4(624)를 포함하는 사용자 함수인 UserFunction(620)의 매개 변수들을 퍼징 엔진(131)이 퍼징할 수 있도록 하는 명령어를 포함할 수 있다. 상기 탐색 대상 사용자 함수 UserFunction(620)의 매개 변수들이 직접 퍼징될 수 있도록 함으로써, 상기 바이너리(10)의 취약점 탐색 수행 중의 제어 흐름이 user#1(621)의 분기문에서 user#4(624)로 진행되도록 하는 조건이 만족될 것을 기대할 수 있을 것이다.In some embodiments, the hook function may include a command that allows the fuzzing engine 131 to fetch parameters of the UserFunction 620, which is a user function including the undetected area user#4 624. By allowing the parameters of the user function UserFunction 620 to be searched to be directly fuzzed, the control flow during vulnerability search of the binary 10 is transferred from the branch statement of user#1(621) to user#4(624). You can expect to be satisfied with the conditions that make it happen.

몇몇 실시예에서, 상기 훅 함수는, 상기 탐색 대상 사용자 함수의 매개 변수가 퍼징될 수 있도록 하기 위하여, 상기 매개 변수들을 대상으로 표준 입력 함수를 호출하는 명령어를 포함할 수 있다. 이로써, 표준 입력을 대상으로 퍼징을 수행하는 퍼징 엔진(131)이 상기 매개 변수에 임의의 값들을 입력할 수 있게 된다.In some embodiments, the hook function may include a command that calls a standard input function with the parameters in order to allow the parameters of the user function to be searched to be fuzzed. As a result, the fuzzing engine 131 performing fuzzing for standard input can input arbitrary values to the parameter.

몇몇 실시예에서, 상기 훅 함수는 상기 표준 입력 함수를 호출하는 명령어 이후에, 상기 매개 변수들을 이용하여 상기 사용자 함수를 호출하는 명령어를 포함한다. 이로써, 훅 함수에서 퍼징 엔진(131)에 의해 퍼징된 매개 변수들이 상기 사용자 함수의 매개 변수로서 전달될 수 있다.In some embodiments, the hook function includes a command to call the user function using the parameters after the command to call the standard input function. As a result, parameters fuzzed by the fuzzing engine 131 in the hook function may be transmitted as parameters of the user function.

이하에서는, 지금까지 단계 S540과 관련하여 설명한 훅 함수의 예시적인 구현예를 도 7a를 참조하여 설명한다. 도 7a에는, 'integer' 타입의 매개 변수('parameter01') 및 'double' 타입의 매개 변수('parameter02')를 가지는 탐색 대상 사용자 함수를 위한 예시적인 훅 함수가 의사코드로 설명되어 있다.Hereinafter, an exemplary implementation of the hook function described so far with respect to step S540 will be described with reference to FIG. 7A. In FIG. 7A, an exemplary hook function for a user function to be searched having a parameter of type'integer' ('parameter01') and a parameter of type'double' ('parameter02') is described in pseudocode.

도 7a의 예시적인 훅 함수는, 표준 입력('STDIN')으로부터 제1 매개 변수의 크기('sizeof(int)') 만큼의 데이터를 읽어 내어 제1 매개 변수('parameter01')의 메모리 주소에 저장하는 명령어('read')를 포함한다. 또한 상기 훅 함수는, 표준 입력('STDIN')으로부터 제2 매개 변수의 크기('sizeof(double)') 만큼의 데이터를 읽어 내어 제2 매개 변수('parameter02')의 메모리 주소에 저장하는 명령어('read')를 포함한다. 이로써, 표준 입력을 대상으로 퍼징을 수행하는 퍼징 엔진(131)이 상기 제1 매개 변수('parameter01') 및 상기 제2 매개 변수('parameter02')에 임의의 값들을 입력할 수 있게 된다.The example hook function of FIG. 7A reads data of the size of the first parameter ('sizeof(int)') from standard input ('STDIN') to the memory address of the first parameter ('parameter01'). It contains a command to save ('read'). In addition, the hook function reads the data of the size of the second parameter ('sizeof(double)') from standard input ('STDIN') and stores it in the memory address of the second parameter ('parameter02'). ('read'). Accordingly, the fuzzing engine 131 performing fuzzing for standard input may input arbitrary values to the first parameter ('parameter01') and the second parameter ('parameter02').

이어서 도 7a의 예시적인 훅 함수는, 상기 제1 및 제2 매개 변수를 매개 변수로 하여, 탐색 대상 사용자 함수(도 7a에서는 함수의 메모리 주소로 표현된 '0x080484bb')를 호출한다. 이로써, 퍼징 엔진(131)에 의해 퍼징된 제1 매개 변수('parameter01') 및 제2 매개 변수('parameter02')가 상기 탐색 대상 사용자 함수의 매개 변수로서 전달될 수 있다.Subsequently, the exemplary hook function of FIG. 7A calls the user function to be searched ('0x080484bb' expressed in the memory address of the function in FIG. 7A) using the first and second parameters as parameters. Accordingly, the first parameter ('parameter01') and the second parameter ('parameter02') fuzzed by the fuzzing engine 131 may be transmitted as parameters of the user function to be searched.

도 7a의 의사코드는, 본 발명의 몇몇 실시예에 따른 훅 함수의 동작 원리에 관한 이해를 돕기 위한 예시적인 의사코드일 뿐, 본 발명의 훅 함수가 반드시 이러한 내용으로 구현되어야 하는 것은 아니라는 점을 유의한다.The pseudo-code of FIG. 7A is only an exemplary pseudo-code for helping to understand the principle of operation of the hook function according to some embodiments of the present invention, and the hook function of the present invention is not necessarily implemented with such contents. Be careful.

한편, 몇몇 실시예에서 훅 함수는 바이너리 재생성 모듈(140)에 의해 자동으로 생성될 수 있다. 구체적으로, 훅 함수는 탐색 대상 사용자 함수의 시그니처 정보(사용자 함수의 리턴 타입, 매개 변수의 개수와 타입, 호출 규약, 심볼네임 등) 및 탐색 대상 사용자 함수의 메모리 주소를 기초로 자동으로 생성될 수 있다.Meanwhile, in some embodiments, the hook function may be automatically generated by the binary regeneration module 140. Specifically, the hook function may be automatically generated based on the signature information of the user function to be searched (return type of user function, number and type of parameters, calling convention, symbol name, etc.) and the memory address of the user function to be searched. have.

예를 들어 도 7a의 훅 함수는, 아래와 같은 속성을 가지는 사용자 함수에 대하여, 도 7b와 같은 코드 템플릿에 아래 속성들을 대입하여 자동으로 생성된 것일 수 있다.For example, the hook function of FIG. 7A may be automatically generated by substituting the following properties into a code template as shown in FIG. 7B for a user function having the following properties.

(1) 호출 규약은 'cdecl'임(1) The calling convention is'cdecl'

(2) 리턴 타입은 'void'임(2) Return type is'void'

(3) 매개 변수는 2개임('parameter01' 및 'parameter02')(3) Two parameters ('parameter01' and'parameter02')

(4) 매개 변수의 타입은 각각 'int' 및 'double'임(4) The parameter types are'int' and'double', respectively.

(5) 메모리 주소는 '0x080484bb'임(5) Memory address is '0x080484bb'

즉, 탐색 대상 사용자 함수의 시그니처 정보(리턴 타입, 매개 변수의 개수와 타입, 호출 규약, 심볼네임 등)와 메모리 주소를 기초로, 훅 함수가 자동으로 생성될 수 있다.That is, the hook function may be automatically generated based on the signature information (return type, number and type of parameters, calling convention, symbol name, etc.) and the memory address of the user function to be searched.

다른 몇몇 실시예에서는, 빈번하게 사용되는 사용자 함수들의 공통된 속성들의 세트에 대하여 미리 생성된 코드 템플릿들을 기초로, 훅 함수가 자동으로 생성될 수 있다. 상기 템플릿들은 예컨대 DB(미도시)에 저장되어 바이너리 재생성 모듈(140)에 의해 활용될 수 있다.In some other embodiments, hook functions may be automatically generated based on pre-generated code templates for a common set of properties of user functions that are frequently used. The templates may be stored in a DB (not shown), for example, and used by the binary regeneration module 140.

다시 도 5를 참조하여, 훅 함수 생성 단계(S540) 이후에 훅 함수가 대상 바이너리(10)에 삽입(패치)되는 과정을 설명한다.Referring to FIG. 5 again, a process in which the hook function is inserted (patched) into the target binary 10 after the hook function generation step (S540) will be described.

단계 S550에서는, 단계 S540에서 생성된 훅 함수가 바이너리 코드 세그먼트로 빌드되고, 대상 바이너리(10)에 내에 삽입(패치)될 수 있다. 또한, 대상 바이너리(10)에서 상기 탐색 대상 사용자 함수를 호출하는 명령어는, 이제 상기 훅 함수를 호출하는 명령어로 대체된다. 이로써, 대상 바이너리(10)에서 탐색 대상 사용자 함수를 호출하는 제어 흐름이, 상기 훅 함수를 거쳐서 상기 사용자 함수를 호출하는 제어 흐름으로 변경될 수 있다. 이와 같이 대상 바이너리(10)가 수정되어 다시 생성된 결과물인 재생성된 바이너리(20)는 취약점 탐색 모듈(130)에 제공되어, 미탐 영역에 대한 취약점 탐색에 사용될 수 있다.In step S550, the hook function generated in step S540 is built into a binary code segment and may be inserted (patched) into the target binary 10. In addition, the command to call the search target user function in the target binary 10 is now replaced with a command to call the hook function. Accordingly, the control flow for calling the user function to be searched in the target binary 10 may be changed to the control flow for calling the user function through the hook function. As described above, the regenerated binary 20, which is the result of re-generating the target binary 10, is provided to the vulnerability search module 130 and can be used to search for a vulnerability in the undetected area.

도 6b는, 상기 6a에 도시된 대상 바이너리(10)의 제어 흐름이 단계 S510 내지 S550에 의해 변경된 결과의 예시적인 모습을 보여주는 도면이다. 대상 바이너리(10)의 제어 흐름을 도시하는 도 6a에서는 main#2(602)에서 UserFunction(620)이 호출되어 user#1(621)로 제어 흐름이 이동되는 반면에, 훅 함수가 삽입되어 재생성된 바이너리(20)의 제어 흐름을 도시하는 도 6b에서는, main#2(602)에서 훅 함수인 HookFunction(640)이 호출되어 new#1(641)로 제어 흐름이 이동되고, 다시 new#1(641)에서 UserFunction(620)이 호출되어 user#1(621)로 제어 흐름이 이동된다는 점을 이해할 수 있다. 또한, 전술한 바와 같이 상기 훅 함수에서 실행되는 명령어들에 의하여, 상기 UserFunction(620)으로 전달되는 매개 변수들의 값이 퍼징될 수 있다는 점을 이해할 수 있다. 또한, 상기 퍼징에 의해 입력되는 다양한 입력 값들에 의하여, 상기 UserFunction(620)의 user#1(621)의 분기문에서 user#4(624)로 진행되도록 하는 조건이 만족될 것을 기대할 수 있다.FIG. 6B is a diagram showing an exemplary state of a result in which the control flow of the target binary 10 shown in 6A is changed by steps S510 to S550. In FIG. 6A, which shows the control flow of the target binary 10, the UserFunction 620 is called from main#2 602 to move the control flow to user#1 621, while the hook function is inserted and regenerated. In FIG. 6B showing the control flow of the binary 20, the hook function 640, which is a hook function from main#2 602, is called, and the control flow is moved to new#1 641, and new#1 641 again. ), it can be understood that the control flow moves to user#1 621 by calling UserFunction 620. In addition, it can be understood that, as described above, the values of parameters transmitted to the UserFunction 620 may be purged by commands executed in the hook function. In addition, it can be expected that the condition to proceed to the user#4 624 from the branch statement of the user#1 621 of the UserFunction 620 is satisfied by various input values input by the fuzzing.

지금까지 도 5 내지 도 7을 참조하여 취약점 탐색 시스템(100)의 바이너리 재생성 모듈(140)의 동작에 대하여 설명하였다. 전술한 바와 같이, 바이너리 재생성 모듈(140)은, 대상 바이너리(10)의 미탐 영역들을 포함하는 사용자 함수들 중에 탐색 대상 사용자 함수를 위험도에 기초하여 선정하고, 선정된 사용자 함수의 미탐 영역을 추가로 탐색할 수 있도록 제어 흐름을 변경한 바이너리(20)를 재생성한다. 재생성된 바이너리(20)는 취약점 탐색 모듈(130)에 제공되어, 미탐 영역에 대한 취약점 탐색에 사용될 수 있다.So far, the operation of the binary regeneration module 140 of the vulnerability search system 100 has been described with reference to FIGS. 5 to 7. As described above, the binary regeneration module 140 selects the user function to be searched based on the risk, among the user functions including the undetected areas of the target binary 10, and further adds the unexplored area of the selected user function. Regenerate the binary 20 that has changed the control flow so that it can be searched. The regenerated binary 20 is provided to the vulnerability search module 130 and can be used to search for a vulnerability in the undetected area.

이하에서는 도 8을 참조하여, 본 발명의 다른 실시예에 따른 바이너리 재생성 시스템(800)을 설명한다. 본 실시예에 따른 바이너리 재생성 시스템(800)의 구성들을 해석함에 있어서, 도 1 내지 7을 참조하여 설명한 실시예들이 반영될 수 있을 것이다.Hereinafter, a binary regeneration system 800 according to another embodiment of the present invention will be described with reference to FIG. 8. In interpreting the configurations of the binary regeneration system 800 according to the present embodiment, embodiments described with reference to FIGS. 1 to 7 may be reflected.

바이너리 재생성 시스템(800)은 대상 바이너리(10)를 입력 받아서, 제어 흐름이 변경된 바이너리(20)를 생성한다. 도시되지는 않았지만, 제어 흐름 변경의 목적이 되는 타겟 사용자 함수에 관한 정보(함수의 리턴 타입, 매개 변수의 개수와 타입, 호출 규약, 심볼네임 등의 함수 시그니처 정보, 함수의 주소 등)가 바이너리 재생성 시스템(800)의 입력으로 제공될 수 있다. 바이너리 재생성 시스템(800)은 상기 정보들을 기초로, 예컨대 도 6a와 같은 제어 흐름을 가지는 대상 바이너리(10)의 제어 흐름을 변경하여, 예컨대 도 6b와 같은 제어 흐름을 가지는 재생성된 바이너리(20)를 생성할 수 있다.The binary regeneration system 800 receives the target binary 10 and generates the binary 20 with the control flow changed. Although not shown, binary regeneration of information about the target user function (the function's return type, the number and type of parameters, the calling convention, the function signature information such as the symbol name, the address of the function, etc.) that is the purpose of changing the control flow It can be provided as an input to the system 800. Based on the above information, the binary regeneration system 800 changes the control flow of the target binary 10 having a control flow as shown in FIG. 6A, for example, to generate the regenerated binary 20 having a control flow as shown in FIG. 6B. Can be created.

바이너리 재생성 시스템(800)은 제어 흐름 변경 코드 생성부(820) 및 바이너리 재생성부(840)를 포함한다.The binary regeneration system 800 includes a control flow change code generation unit 820 and a binary regeneration unit 840.

몇몇 실시예에서, 제어 흐름 변경 코드 생성부(820)는 훅 함수 생성부(822), 코드 템플릿 DB(824), 및 코드 세그먼트 생성부(826)를 포함할 수 있다.In some embodiments, the control flow change code generation unit 820 may include a hook function generation unit 822, a code template DB 824, and a code segment generation unit 826.

훅 함수 생성부(822)는 대상 바이너리(10) 내의 타겟 사용자 함수(미도시)에 대한 훅 함수 코드를 자동으로 생성한다.The hook function generator 822 automatically generates a hook function code for a target user function (not shown) in the target binary 10.

몇몇 실시예에서, 상기 타겟 사용자 함수를 위한 상기 훅 함수는, 퍼저(fuzzer)가 상기 타겟 사용자 함수의 매개 변수를 퍼징할 수 있도록 하는 코드를 포함한다. 예를 들어, 상기 훅 함수는, 상기 타겟 사용자 함수의 매개 변수들을 대상으로 표준 입력 함수를 호출하는 명령어를 포함할 수 있다. 훅 함수 생성부(822)의 보다 자세한 동작은, 도 5의 단계 S540과 관련하여 앞서 설명된 내용이 참조가 될 수 있다.In some embodiments, the hook function for the target user function includes code that allows a fuzzer to fuzz the parameters of the target user function. For example, the hook function may include a command that calls a standard input function with parameters of the target user function. For more detailed operation of the hook function generator 822, the contents described above with reference to step S540 of FIG. 5 may be referred to.

몇몇 실시예에서, 훅 함수 생성부(822) 코드 템플릿 DB(824)에 저장된 훅 함수 코드 템플릿을 사용하여, 타겟 사용자 함수에 대한 훅 함수 코드를 자동으로 생성할 수 있다. 보다 구체적으로, 훅 함수 생성부(822)는 상기 타겟 사용자 함수의 시그니처(리턴 타입, 매개 변수의 개수 및 타입, 호출 규약, 심볼네임 등)의 적어도 일부를 상기 코드 템플릿에 대입하여 상기 훅 함수 코드를 자동으로 생성할 수 있다. 코드 템플릿을 사용하여 훅 함수 코드를 생성하는 구체적인 방법은 도 5의 단계 S540과 관련하여 도 7b를 참조하여 앞서 설명된 내용이 참조가 될 수 있다.In some embodiments, a hook function code template stored in the hook function generator 822 code template DB 824 may be used to automatically generate a hook function code for a target user function. More specifically, the hook function generator 822 substitutes at least a part of the target user function signature (return type, number and type of parameters, calling convention, symbol name, etc.) into the code template to generate the hook function code. Can be generated automatically. A detailed method of generating the hook function code using the code template may be a reference to the contents described above with reference to FIG. 7B in connection with step S540 of FIG. 5.

코드 템플릿 DB(824)는 훅 함수의 헤더 및 훅 함수의 바디를 생성하기 위한 코드 템플릿들을 저장할 수 있다. 코드 템플릿 DB(824)에 저장된 코드 템플릿들은, 훅 함수 생성부(822)가 다양한 리턴 타입, 매개 변수, 및 호출 규약을 가지는 다양한 사용자 함수들을 위한 훅 함수 코드를 자동으로 생성하는데 사용될 수 있다.The code template DB 824 may store code templates for generating the header of the hook function and the body of the hook function. The code templates stored in the code template DB 824 can be used by the hook function generator 822 to automatically generate hook function codes for various user functions having various return types, parameters, and calling conventions.

코드 세그먼트 생성부(826)는, 훅 함수 생성부(822)가 생성한 훅 함수 코드를 대상 바이너리(10)에 삽입하여 훅 함수의 동작이 대상 바이너리(10)에 적용될 수 있도록, 훅 함수 코드를 바이너리 코드 세그먼트(미도시)로 빌드한다.The code segment generator 826 inserts the hook function code generated by the hook function generator 822 into the target binary 10 so that the operation of the hook function can be applied to the target binary 10, so that the hook function code is generated. Build with binary code segments (not shown).

바이너리 재생성부(840)는 코드 세그먼트 인젝션부(842) 및 명령어 수정부(844)를 포함한다.The binary regenerating unit 840 includes a code segment injection unit 842 and an instruction correcting unit 844.

코드 세그먼트 인젝션부(842)는 제어 흐름 변경 코드 생성부(820)가 생성한 훅 함수의 바이너리 코드 세그먼트를 대상 바이너리(10)에 삽입하여 패치하는 구성이다. 코드 세그먼트 인젝션부(842)는 대상 바이너리(10)에 상기 바이너리 코드 세그먼트가 삽입될 수 있는 공간을 확보한 후, 확보된 공간에 상기 바이너리 코드 세그먼트를 삽입한다.The code segment injection unit 842 is configured to insert and patch the binary code segment of the hook function generated by the control flow change code generation unit 820 into the target binary 10. The code segment injection unit 842 secures a space in the target binary 10 where the binary code segment can be inserted, and then inserts the binary code segment in the secured space.

명령어 수정부(844)는, 대상 바이너리(10)에서 상기 타겟 사용자 함수를 호출하는 명령어의 주소 정보(미도시)를 활용하여, 상기 타겟 사용자 함수를 호출하는 명령어를 상기 훅 함수를 호출하는 명령어로 대체한다.The command corrector 844 utilizes the address information (not shown) of the command to call the target user function in the target binary 10, and the command to call the target user function is a command to call the hook function Replace.

바이너리 재생성부(840)는, 상술한 상기 코드 세그먼트 인젝션부(842) 및 명령어 수정부(844)의 동작에 의해 대상 바이너리(10)의 제어 흐름이 변경되도록 재생성한 바이너리(20)를 출력한다. The binary regenerating unit 840 outputs the regenerated binary 20 so that the control flow of the target binary 10 is changed by the operation of the code segment injection unit 842 and the instruction correction unit 844 described above.

전술한 바와 같이 바이너리 재생성 시스템(800)에 의해 재성성된 바이너리(20)는 하이브리드 퍼징을 기반으로 한 바이너리 취약점 탐색의 커버리지를 확대하는데 사용될 수 있다.As described above, the binary 20 regenerated by the binary regeneration system 800 may be used to expand the coverage of binary vulnerability search based on hybrid fuzzing.

지금까지 도 1 내지 도 8을 참조하여 설명된 본 발명의 실시예들은 컴퓨터가 읽을 수 있는 매체 상에 컴퓨터가 읽을 수 있는 코드로 구현될 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체는, 예를 들어 이동형 기록 매체(CD, DVD, 블루레이 디스크, USB 저장 장치, 이동식 하드 디스크)이거나, 고정식 기록 매체(ROM, RAM, 컴퓨터 구비 형 하드 디스크)일 수 있다. 상기 컴퓨터로 읽을 수 있는 기록 매체에 기록된 상기 컴퓨터 프로그램은 인터넷 등의 네트워크를 통하여 다른 컴퓨팅 장치에 전송되어 상기 다른 컴퓨팅 장치에 설치될 수 있고, 이로써 상기 다른 컴퓨팅 장치에서 사용될 수 있다.The embodiments of the present invention described so far with reference to FIGS. 1 to 8 may be embodied as computer readable codes on a computer readable medium. The computer-readable recording medium may be, for example, a removable recording medium (CD, DVD, Blu-ray Disc, USB storage device, removable hard disk), or a fixed recording medium (ROM, RAM, computer-equipped hard disk). Can be. The computer program recorded on the computer-readable recording medium may be transmitted to another computing device through a network such as the Internet and installed on the other computing device, and thus used on the other computing device.

이상에서, 본 발명의 실시예를 구성하는 모든 구성 요소들이 하나로 결합되거나 결합되어 동작하는 것으로 설명되었다고 해서, 본 발명의 기술적 사상이 반드시 이러한 실시예에 한정되는 것은 아니다. 즉, 본 발명의 목적 범위 안에서라면, 그 모든 구성요소들이 하나 이상으로 선택적으로 결합하여 동작할 수도 있다.In the above, even if all the components constituting the embodiments of the present invention are described as being combined or operated as one, the technical spirit of the present invention is not necessarily limited to these embodiments. That is, within the object scope of the present invention, all of the components may be selectively combined and operated.

도면에서 동작들이 특정한 순서로 도시되어 있지만, 반드시 동작들이 도시된 특정한 순서로 또는 순차적 순서로 실행되어야만 하거나 또는 모든 도시 된 동작들이 실행되어야만 원하는 결과를 얻을 수 있는 것으로 이해되어서는 안 된다. 특정 상황에서는, 멀티태스킹 및 병렬 처리가 유리할 수도 있다. 더욱이, 위에 설명한 실시예들에서 다양한 구성들의 분리는 그러한 분리가 반드시 필요한 것으로 이해되어서는 안 되고, 설명된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 다수의 소프트웨어 제품으로 패키지 될 수 있음을 이해하여야 한다.Although the operations in the drawings are shown in a specific order, it should not be understood that the operations must be performed in a specific order or in a sequential order, or that all the illustrated actions must be executed to obtain a desired result. In certain situations, multitasking and parallel processing may be advantageous. Moreover, the separation of various configurations in the above-described embodiments should not be understood as such separation is necessary, and the described program components and systems may generally be integrated together into a single software product or packaged into multiple software products. It should be understood that there is.

이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였지만, 본 발명이가 속하는 기술분야에서 통상의 지식을 가진 자는 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 본 발명이가 다른 구체적인 형태로도 실시될 수 있다는 것을 이해할 수 있다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로 이해해야만 한다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명에 의해 정의되는 기술적 사상의 권리범위에 포함되는 것으로 해석되어야 할 것이다.The embodiments of the present invention have been described above with reference to the accompanying drawings, but those of ordinary skill in the art to which the present invention pertains may also practice other specific forms without changing the technical spirit or essential features of the present invention. You can understand that it can be. Therefore, it should be understood that the above-described embodiments are illustrative in all respects and not restrictive. The scope of protection of the present invention should be interpreted by the claims below, and all technical spirits within the equivalent ranges should be interpreted as being included in the scope of the technical spirit defined by the present invention.

Claims (17)

컴퓨팅 장치에서 수행되는 방법으로서,
대상 바이너리에 대한 취약점 탐색을 수행하는 단계;
상기 취약점 탐색을 수행한 결과 분석되지 않은 복수의 미탐 영역을 식별하는 단계;
상기 복수의 미탐 영역 각각에 대해 산정된 위험도에 기초하여 상기 복수의 미탐 영역 중에 타겟 영역을 결정하는 단계;
상기 대상 바이너리 내의 상기 타겟 영역에 대한 취약점 탐색을 위한 코드를 자동으로 생성하는 단계; 및
상기 코드를 상기 대상 바이너리에 적용하는 단계
를 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
A method performed on a computing device,
Performing a vulnerability search for the target binary;
Identifying a plurality of undetected areas that have not been analyzed as a result of performing the vulnerability search;
Determining a target area among the plurality of undetected areas based on a risk calculated for each of the plurality of undetected areas;
Automatically generating code for vulnerability search for the target region in the target binary; And
Applying the code to the target binary
Containing,
How to regenerate binaries to search for vulnerabilities.
삭제delete 삭제delete 제1항에 있어서,
상기 타겟 영역을 결정하는 단계는,
상기 바이너리 코드를 디스어셈블링하여 산출되는 코드를 대상으로 한 정적 분석에 의해 상기 위험도를 산정하는 단계를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
According to claim 1,
Determining the target area,
Comprising the step of calculating the risk by static analysis of the code generated by disassembling the binary code,
How to regenerate binaries to search for vulnerabilities.
제1항에 있어서,
상기 타겟 영역을 결정하는 단계는,
상기 복수의 미탐 영역 각각에서 호출된 표준 라이브러리 함수와 취약 함수 리스트의 비교 결과에 기초하여 상기 위험도를 산정하는 단계를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
According to claim 1,
Determining the target area,
Comprising the step of calculating the risk based on the comparison result of the standard library function and the vulnerable function list called in each of the plurality of undetected areas,
How to regenerate binaries to search for vulnerabilities.
제1항에 있어서,
상기 타겟 영역을 결정하는 단계는,
상기 복수의 미탐 영역 각각에서 호출된 메모리 관리 관련 함수에 기초하여 상기 위험도를 산정하는 단계를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
According to claim 1,
Determining the target area,
Comprising the step of calculating the risk based on the memory management-related functions called in each of the plurality of undetected areas,
How to regenerate binaries to search for vulnerabilities.
제1항에 있어서,
상기 타겟 영역을 결정하는 단계는,
상기 복수의 미탐 영역 각각을 포함하는 각각의 사용자 함수에서 정의된 지역 변수들의 개수 및 크기에 기초하여 상기 위험도를 산정하는 단계를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
According to claim 1,
Determining the target area,
The method further includes estimating the risk based on the number and size of local variables defined in each user function including each of the plurality of undetected areas.
How to regenerate binaries to search for vulnerabilities.
제1항에 있어서,
상기 코드를 자동으로 생성하는 단계는,
상기 타겟 영역을 포함하는 타겟 사용자 함수의 매개 변수를 식별하는 단계; 및
퍼저(fuzzer)가 상기 매개 변수를 퍼징할 수 있도록 하는 코드를 포함하는 훅 함수를 자동으로 생성하는 단계
를 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
According to claim 1,
The step of automatically generating the code,
Identifying a parameter of a target user function that includes the target area; And
Automatically generating a hook function that includes code that allows a fuzzer to fetch the parameters.
Containing,
How to regenerate binaries to search for vulnerabilities.
제8항에 있어서,
상기 훅 함수를 자동으로 생성하는 단계는,
상기 매개 변수를 대상으로 표준 입력 함수를 호출하는 코드를 생성하는 단계를 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
The method of claim 8,
The step of automatically generating the hook function,
Generating code that calls a standard input function on the parameters,
How to regenerate binaries to search for vulnerabilities.
제9항에 있어서,
상기 훅 함수를 자동으로 생성하는 단계는,
상기 매개 변수로 상기 타겟 사용자 함수를 호출하는 코드를 생성하는 단계를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
The method of claim 9,
The step of automatically generating the hook function,
Further comprising generating code to call the target user function with the parameters,
How to regenerate binaries to search for vulnerabilities.
제8항에 있어서,
상기 훅 함수를 자동으로 생성하는 단계는,
상기 타겟 사용자 함수의 시그니처 정보 중 적어도 일부에 기초하여, 상기 훅 함수의 헤더를 생성하는 단계를 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
The method of claim 8,
The step of automatically generating the hook function,
And generating a header of the hook function based on at least some of signature information of the target user function.
How to regenerate binaries to search for vulnerabilities.
제8항에 있어서,
상기 훅 함수를 자동으로 생성하는 단계는,
상기 타겟 사용자 함수의 시그니처 정보 중 적어도 일부 및 상기 타겟 사용자 함수의 주소에 기초하여, 상기 훅 함수의 바디를 생성하는 단계를 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
The method of claim 8,
The step of automatically generating the hook function,
And generating a body of the hook function based on at least a part of signature information of the target user function and the address of the target user function,
How to regenerate binaries to search for vulnerabilities.
제8항에 있어서,
상기 코드를 상기 대상 바이너리에 적용하는 단계는,
상기 훅 함수에 대응하는 바이너리 코드 세그먼트를 생성하는 단계;
상기 대상 바이너리에 상기 바이너리 코드 세그먼트를 삽입하는 단계; 및
상기 대상 바이너리에서 상기 타겟 사용자 함수를 호출하는 명령어를 상기 훅 함수를 호출하는 명령어로 대체하는 단계
를 더 포함하는,
취약점 탐색을 위한 바이너리 재생성 방법.
The method of claim 8,
Applying the code to the target binary,
Generating a binary code segment corresponding to the hook function;
Inserting the binary code segment into the target binary; And
Replacing a command that calls the target user function in the target binary with a command that calls the hook function
Further comprising,
How to regenerate binaries to search for vulnerabilities.
제어 흐름 변경 코드 생성부; 및
바이너리 재생성부
를 포함하되,
상기 제어 흐름 변경 코드 생성부는,
재생성 대상 바이너리에 대한 취약점 탐색을 수행한 결과 분석되지 않은 복수의 미탐 영역 각각에 대해 산정된 위험도에 기초하여 상기 복수의 미탐 영역 중에 타겟 사용자 함수를 결정하고,
상기 타겟 사용자 함수의 시그니처를 기초로 훅 함수 코드를 생성하고,
상기 훅 함수 코드를 바이너리 코드 세그먼트로 빌드하며,
상기 바이너리 재생성부는,
상기 바이너리 코드 세그먼트를 재생성 대상 바이너리에 삽입하고,
상기 재생성 대상 바이너리에서 상기 타겟 사용자 함수를 호출하는 명령어를 상기 훅 함수를 호출하는 명령어로 대체하는,
취약점 탐색을 위한 바이너리 재생성 시스템.
A control flow change code generator; And
Binary Regeneration Department
Including,
The control flow change code generation unit,
A target user function is determined among the plurality of unexplored areas based on the risk calculated for each of the unexplored areas that are not analyzed as a result of performing a vulnerability search for the regenerated target binary,
Generate a hook function code based on the signature of the target user function,
Build the hook function code into a binary code segment,
The binary regeneration unit,
Inserting the binary code segment into a binary to be regenerated,
Replacing the command that calls the target user function in the regeneration target binary with a command that calls the hook function,
Binary regeneration system for vulnerability search.
제14항에 있어서,
상기 제어 흐름 변경 코드 생성부는 DB를 더 포함하고,
상기 제어 흐름 변경 코드 생성부는, 상기 DB에 저장된 코드 템플릿을 사용하여, 상기 타겟 사용자 함수의 시그니처에 대응되는 훅 함수를 생성하는,
취약점 탐색을 위한 바이너리 재생성 시스템.
The method of claim 14,
The control flow change code generation unit further includes a DB,
The control flow change code generation unit generates a hook function corresponding to the target user function signature using the code template stored in the DB,
Binary regeneration system for vulnerability search.
제14항에 있어서,
상기 훅 함수는, 퍼저(fuzzer)가 상기 타겟 사용자 함수의 매개 변수를 퍼징할 수 있도록 하는 코드를 포함하는,
취약점 탐색을 위한 바이너리 재생성 시스템.
The method of claim 14,
The hook function includes code that allows a fuzzer to fuzz the parameters of the target user function,
Binary regeneration system for vulnerability search.
제16항에 있어서,
상기 훅 함수는, 상기 매개 변수를 대상으로 표준 입력 함수를 호출하는 코드를 포함하는,
취약점 탐색을 위한 바이너리 재생성 시스템.
The method of claim 16,
The hook function includes code that calls a standard input function based on the parameter,
Binary regeneration system for vulnerability search.
KR1020190136375A 2019-10-30 2019-10-30 Method and system for re-generating binary for vulnerability detection KR102110735B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190136375A KR102110735B1 (en) 2019-10-30 2019-10-30 Method and system for re-generating binary for vulnerability detection

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190136375A KR102110735B1 (en) 2019-10-30 2019-10-30 Method and system for re-generating binary for vulnerability detection

Publications (1)

Publication Number Publication Date
KR102110735B1 true KR102110735B1 (en) 2020-06-08

Family

ID=71089463

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190136375A KR102110735B1 (en) 2019-10-30 2019-10-30 Method and system for re-generating binary for vulnerability detection

Country Status (1)

Country Link
KR (1) KR102110735B1 (en)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220062813A (en) 2020-11-09 2022-05-17 한국인터넷진흥원 Method and device for generating input values for fuzzing by analysis of comparison statements within binaries
KR102663234B1 (en) * 2023-05-31 2024-05-07 주식회사 지엔 System and method for analyzing vulnerabilities in software installed on IoT devices

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
KR101904911B1 (en) * 2017-10-13 2018-10-08 한국인터넷진흥원 Method for Automatically Detecting Security Vulnerability Based on Hybrid Fuzzing, and Apparatus thereof

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
KR101904911B1 (en) * 2017-10-13 2018-10-08 한국인터넷진흥원 Method for Automatically Detecting Security Vulnerability Based on Hybrid Fuzzing, and Apparatus thereof

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Jason Raber, "Function Fuzzer (FuncFuzz)", RSA Conference 2019(2019.03.) *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220062813A (en) 2020-11-09 2022-05-17 한국인터넷진흥원 Method and device for generating input values for fuzzing by analysis of comparison statements within binaries
KR102663234B1 (en) * 2023-05-31 2024-05-07 주식회사 지엔 System and method for analyzing vulnerabilities in software installed on IoT devices
KR102670476B1 (en) * 2023-05-31 2024-05-29 주식회사 지엔 System and method for analyzing contamination paths to analyze vulnerabilities in IoT devices

Similar Documents

Publication Publication Date Title
KR101981028B1 (en) System for detecting security vulnerability based on binary, method and program thereof
Sun et al. Healer: Relation learning guided kernel fuzzing
US10423518B2 (en) Systems and methods for analyzing violations of coding rules
Huang et al. Software crash analysis for automatic exploit generation on binary programs
US8732676B1 (en) System and method for generating unit test based on recorded execution paths
US10942718B2 (en) Systems and/or methods for type inference from machine code
US9710370B2 (en) Automated testing of shell scripts
EP3264274B1 (en) Input discovery for unknown program binaries
US9721120B2 (en) Preventing unauthorized calls to a protected function
KR102013582B1 (en) Apparatus and method for detecting error and determining corresponding position in source code of mixed mode application program source code thereof
KR102110735B1 (en) Method and system for re-generating binary for vulnerability detection
US6925405B2 (en) Adaptive test program generation
KR102117209B1 (en) Method and device for patching security vulnerable executable binaries
Vadayath et al. Arbiter: Bridging the static and dynamic divide in vulnerability discovery on binary programs
JP7452691B2 (en) Analysis function imparting device, analysis function imparting method, and analysis function imparting program
JP2015130152A (en) Information processing device and program
KR102273135B1 (en) Apparatus and method for generating test input a software using symbolic execution
JPWO2011108584A1 (en) Application modification site search apparatus and application modification site search method
Armengol-Estapé et al. ExeBench: an ML-scale dataset of executable C functions
Christakis et al. IC-Cut: A compositional search strategy for dynamic test generation
KR102209151B1 (en) Method and device for patching security vulnerable executable binaries
Balakrishnan et al. Refining the control structure of loops using static analysis
Letychevskyi et al. Fuzz Testing Technique and its Use in Cybersecurity Tasks
CN113138797A (en) Intel SGX-oriented program automatic transplanting system
Bhardwaj et al. Fuzz testing in stack-based buffer overflow

Legal Events

Date Code Title Description
GRNT Written decision to grant