KR101963752B1 - Apparatus and method for analyzing software vulnerability - Google Patents

Apparatus and method for analyzing software vulnerability Download PDF

Info

Publication number
KR101963752B1
KR101963752B1 KR1020180133775A KR20180133775A KR101963752B1 KR 101963752 B1 KR101963752 B1 KR 101963752B1 KR 1020180133775 A KR1020180133775 A KR 1020180133775A KR 20180133775 A KR20180133775 A KR 20180133775A KR 101963752 B1 KR101963752 B1 KR 101963752B1
Authority
KR
South Korea
Prior art keywords
execution path
function
suspect
software
language code
Prior art date
Application number
KR1020180133775A
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 KR1020180133775A priority Critical patent/KR101963752B1/en
Application granted granted Critical
Publication of KR101963752B1 publication Critical patent/KR101963752B1/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/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
    • 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

Landscapes

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

Abstract

Disclosed are a device and a method for analyzing the vulnerability of software, which can analyze the vulnerability of software by using unsafe function information and a software binary file. According to an embodiment of the present invention, the device for analyzing the vulnerability of software includes: a disassembler generating an assembly language code about the software binary file by disassembling the software binary file; a static analysis unit generating a control flow graph about the assembly language code, and determining whether the assembly language code includes at least one among doubt functions included in a doubt function list designated in advance by searching a string; and a dynamic analysis unit determining an optimal execution route for executing the doubt function based on the control flow graph in a case that the doubt function is included in the assembly language code, and performing dynamic concolic execution about the optimal execution route by using the software binary file.

Description

소프트웨어 취약점 분석 장치 및 방법{APPARATUS AND METHOD FOR ANALYZING SOFTWARE VULNERABILITY}[0001] APPARATUS AND METHOD FOR ANALYZING SOFTWARE VULNERABILITY [0002]

본 발명의 실시예들은 소프트웨어 취약점 분석 기술과 관련된다.Embodiments of the invention relate to software vulnerability analysis techniques.

엄청나게 많은 소프트웨어의 보안 취약점을 전문가가 수동으로 분석하는 것은 불가능하다. 따라서, 소프트웨어에 대한 취약점을 자동으로 분석하기 위한 방법에 대해 많은 진행되고 있다. It is impossible for an expert to manually analyze the vast number of software vulnerabilities. Therefore, there is much progress on methods for automatically analyzing vulnerabilities in software.

그러나, 기존 연구들은 취약점을 100% 탐지하지 못하거나 점검 시간이 오래 걸린다는 단점이 존재하며, 수많은 프로그램 분기문 등으로 인해 발생하는 경로 폭발(path explosion) 문제가 해결되지 않고 있다. However, existing researches have a disadvantage that they do not detect 100% of vulnerability or it takes a long time to check, and the problem of path explosion caused by a lot of program branches is not solved.

대한민국 등록특허 제10-1796369호 (2017.12.01. 공고)Korean Patent No. 10-1796369 (Announcement of Dec. 1, 2017)

본 발명의 실시예들은 소프트웨어 바이너리 파일과 안전하지 않은 함수 정보를 활용하여 소프트웨어 취약점을 분석하기 위한 장치 및 방법을 제공하기 위한 것이다.Embodiments of the present invention are intended to provide an apparatus and method for analyzing software vulnerabilities utilizing software binary files and unsafe function information.

본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 장치는, 소프트웨어 바이너리 파일을 역어셈블(disassemble)하여 상기 소프트웨어 바이너리 파일에 대한 어셈블리어 코드를 생성하는 역어셈블러; 상기 어셈블리어 코드에 대한 제어 흐름 그래프(control flow graph)를 생성하고, 문자열 검색을 통해 상기 어셈블리어 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단하는 정적 분석부; 및 상기 어셈블리어 코드에 상기 의심 함수가 포함되어 있는 경우, 상기 제어 흐름 그래프에 기초하여 상기 의심 함수를 실행하기 위한 최적 실행 경로를 결정하고, 상기 소프트웨어 바이너리 파일을 이용하여 상기 최적 실행 경로에 대한 동적 기호 실행(concolic execution)을 수행하는 동적 분석부를 포함한다.An apparatus for analyzing a software vulnerability according to an exemplary embodiment of the present invention includes an inverse assembler for disassembling a software binary file to generate an assembly code for the software binary file; Generating a control flow graph for the assembly language code and determining whether the assembly language code includes at least one of the suspect functions included in the predefined suspect function list, part; And determining an optimal execution path for executing the suspect function based on the control flow graph when the suspect function is included in the assembly language code and determining a dynamic symbol for the optimal execution path using the software binary file, And a dynamic analysis unit for performing concurrent execution.

상기 의심 함수 리스트는, 사전에 발견된 취약점과 관련된 함수를 포함할 수 있다.The suspicious function list may include a function associated with a previously discovered vulnerability.

상기 의심 함수 리스트는, CVE(Common Vulnerabilities and Exposure)에 등록된 취약점과 관련된 함수를 포함할 수 있다.The suspicious function list may include a function associated with a vulnerability registered in CVE (Common Vulnerabilities and Exposure).

상기 동적 분석부는, 상기 제어 흐름 그래프 상에서 엔트리 노드로부터 상기 의심 함수를 포함하는 타겟 노드까지의 최단 실행 경로를 상기 최적 실행 경로로 결정할 수 있다.The dynamic analysis unit may determine the shortest execution path from the entry node to the target node including the suspect function as the optimum execution path on the control flow graph.

상기 동적 분석부는, 상기 최단 실행 경로를 제외한 나머지 실행 경로를 프루닝(pruning)할 수 있다.The dynamic analysis unit may prun the remaining execution paths excluding the shortest execution path.

상기 동적 분석부는, 상기 나머지 경로 상에 존재하는 각 노드에 대응되는 블록의 시작 메모리 주소를 포함하는 회피 블록 리스트를 생성하고, 상기 회피 블록 리스트에 기초하여 상기 나머지 실행 경로를 프루닝할 수 있다.The dynamic analysis unit may generate a avoiding block list including a start memory address of a block corresponding to each node existing on the remaining path and pruning the remaining executing path based on the avoiding block list.

본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 방법은, 소프트웨어 바이너리 파일을 역어셈블(disassemble)하여 상기 소프트웨어 바이너리 파일에 대한 어셈블리어 코드를 생성하는 단계; 상기 어셈블리어 코드에 대한 제어 흐름 그래프(control flow graph)를 생성하는 단계; 문자열 검색을 통해 상기 어셈블리어 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단하는 단계; 상기 어셈블리어 코드에 상기 의심 함수가 포함되어 있는 경우, 상기 제어 흐름 그래프에 기초하여 상기 의심 함수를 실행하기 위한 최적 실행 경로를 결정하는 단계; 및 상기 소프트웨어 바이너리 파일을 이용하여 상기 최적 실행 경로에 대한 동적 기호 실행(concolic execution)을 수행하는 단계를 포함한다.A software vulnerability analysis method according to an embodiment of the present invention includes disassembling a software binary file to generate an assembly code for the software binary file; Generating a control flow graph for the assembly language code; Determining by the string search whether the assembly language code includes at least one of the suspect functions included in the predefined suspect function list; Determining an optimal execution path for executing the suspect function based on the control flow graph when the suspect function is included in the assembly language code; And performing a dynamic concurrent execution of the optimal execution path using the software binary file.

상기 의심 함수 리스트는, 사전에 발견된 취약점과 관련된 함수를 포함할 수 있다.The suspicious function list may include a function associated with a previously discovered vulnerability.

상기 의심 함수 리스트는, CVE(Common Vulnerabilities and Exposure) 에 등록된 취약점과 관련된 함수를 포함할 수 있다.The suspicious function list may include a function associated with a vulnerability registered in CVE (Common Vulnerabilities and Exposure).

상기 최적 실행 경로를 결정하는 단계는, 상기 제어 흐름 그래프 상에서 엔트리 노드로부터 상기 의심 함수를 포함하는 타겟 노드까지의 최단 실행 경로를 상기 최적 실행 경로로 결정할 수 있다.The step of determining the optimal execution path may determine the shortest execution path from the entry node to the target node including the suspect function as the optimum execution path on the control flow graph.

상기 최적 실행 경로를 결정하는 단계는, 상기 최단 실행 경로를 제외한 나머지 실행 경로를 프루닝(pruning)하는 단계를 더 포함할 수 있다.The step of determining the optimum execution path may further include pruning the remaining execution paths excluding the shortest execution path.

상기 프루닝하는 단계는, 상기 나머지 경로 상에 존재하는 각 노드에 대응되는 블록의 시작 메모리 주소를 포함하는 회피 블록 리스트를 생성하고, 상기 회피 블록 리스트에 기초하여 상기 나머지 실행 경로를 프루닝할 수 있다.The pruning step may include generating a avoiding block list including a start memory address of a block corresponding to each node existing on the remaining path and pruning the remaining executing path based on the avoiding block list have.

본 발명의 실시예들에 따르면, 안전하지 않은 함수 정보를 활용한 문자열 검색을 통해 소프트웨어 바이너리 파일 내에 취약점이 존재할 만한 부분을 식별한 후 식별된 부분을 타겟으로 한 최적 실행 경로에 따라 동적 기호 실행(concolic execution)을 실행하도록 함으로써, 소프트웨어의 소스 코드 없이도 정확하고 효율적인 취약점 점검이 가능하며, 경로 폭발 문제를 해결할 수 있다.According to embodiments of the present invention, a part of a software binary file in which a vulnerability exists may be identified through a string search using unsafe function information, and a dynamic symbol execution concolic execution), it is possible to check for an accurate and efficient vulnerability without software source code, and solve the path explosion problem.

도 1은 본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 장치의 구성도
도 2는 본 발명의 일 실시예에 따른 제어 흐름 그래프의 일 예를 도시한 도면
도 3은 본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 방법의 순서도
도 4는 예시적인 실시예들에서 사용되기에 적합한 컴퓨팅 장치를 포함하는 컴퓨팅 환경을 예시하여 설명하기 위한 블록도
1 is a block diagram of a software vulnerability analysis apparatus according to an embodiment of the present invention;
2 is a diagram illustrating an example of a control flow graph according to an embodiment of the present invention;
3 is a flow chart of a software vulnerability analysis method according to an embodiment of the present invention
4 is a block diagram illustrating and illustrating a computing environment including a computing device suitable for use in the exemplary embodiments.

이하, 도면을 참조하여 본 발명의 구체적인 실시형태를 설명하기로 한다. 이하의 상세한 설명은 본 명세서에서 기술된 방법, 장치 및/또는 시스템에 대한 포괄적인 이해를 돕기 위해 제공된다. 그러나 이는 예시에 불과하며 본 발명은 이에 제한되지 않는다.Hereinafter, specific embodiments of the present invention will be described with reference to the drawings. The following detailed description is provided to provide a comprehensive understanding of the methods, apparatus, and / or systems described herein. However, this is merely an example and the present invention is not limited thereto.

본 발명의 실시예들을 설명함에 있어서, 본 발명과 관련된 공지기술에 대한 구체적인 설명이 본 발명의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략하기로 한다. 그리고, 후술되는 용어들은 본 발명에서의 기능을 고려하여 정의된 용어들로서 이는 사용자, 운용자의 의도 또는 관례 등에 따라 달라질 수 있다. 그러므로 그 정의는 본 명세서 전반에 걸친 내용을 토대로 내려져야 할 것이다. 상세한 설명에서 사용되는 용어는 단지 본 발명의 실시예들을 기술하기 위한 것이며, 결코 제한적이어서는 안 된다. 명확하게 달리 사용되지 않는 한, 단수 형태의 표현은 복수 형태의 의미를 포함한다. 본 설명에서, "포함" 또는 "구비"와 같은 표현은 어떤 특성들, 숫자들, 단계들, 동작들, 요소들, 이들의 일부 또는 조합을 가리키기 위한 것이며, 기술된 것 이외에 하나 또는 그 이상의 다른 특성, 숫자, 단계, 동작, 요소, 이들의 일부 또는 조합의 존재 또는 가능성을 배제하도록 해석되어서는 안 된다.DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS Hereinafter, exemplary embodiments of the present invention will be described in detail with reference to the accompanying drawings. In the following description, well-known functions or constructions are not described in detail since they would obscure the invention in unnecessary detail. The following terms are defined in consideration of the functions of the present invention, and may be changed according to the intention or custom of the user, the operator, and the like. Therefore, the definition should be based on the contents throughout this specification. The terms used in the detailed description are intended only to describe embodiments of the invention and should in no way be limiting. Unless specifically stated otherwise, the singular form of a term includes plural forms of meaning. In this description, the expressions "comprising" or "comprising" are intended to indicate certain features, numbers, steps, operations, elements, parts or combinations thereof, Should not be construed to preclude the presence or possibility of other features, numbers, steps, operations, elements, portions or combinations thereof.

도 1은 본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 장치의 구성도이다. 1 is a block diagram of a software vulnerability analysis apparatus according to an embodiment of the present invention.

도 1을 참조하면, 본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 장치(100)은 역 어셈블러(110), 정적 분석부(120) 및 동적 분석부(130)를 포함한다. Referring to FIG. 1, a software vulnerability analysis apparatus 100 according to an embodiment of the present invention includes an inverse assembler 110, a static analysis unit 120, and a dynamic analysis unit 130.

역어셈블러(110)는 취약점 분석 대상이 소프트웨어 바이너리 파일을 역어셈블(disassemble)하여 해당 바이너리 파일에 대한 어셈블리어 코드를 생성한다. The disassembler 110 disassembles the software binary file of the vulnerability analysis target to generate an assembly code for the corresponding binary file.

정적 분석부(120)는 생성된 어셈블리 코드에 대한 제어 흐름 그래프(Control Flow Graph, CFG)를 생성한다. 이때, 제어 흐름 그래프의 생성은 공지된 다양한 방식을 이용하여 수행될 수 있다.The static analysis unit 120 generates a control flow graph (CFG) for the generated assembly code. At this time, the generation of the control flow graph can be performed using various known methods.

한편, 정적 분석부(120)는 문자열 검색을 통해 어셈블리 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단한다.Meanwhile, the static analysis unit 120 determines whether the assembly code includes at least one of the suspicious functions included in the predefined suspicious function list through the string search.

구체적으로, 정적 분석부(120)는 문자열 검색을 통해 어셈블리 코드 내에서 의심 함수 리스트에 포함된 의심 함수를 포함하고 있는 기본 블록(basic block)을 식별할 수 있다.Specifically, the static analysis unit 120 can identify a basic block including a suspect function included in the suspect function list in the assembly code through the string search.

이때, 의심 함수 리스트는 사전에 발견된 취약점과 관련된 함수들에 대한 리스트를 의미할 수 있다. 구체적으로, 본 발명의 일 실시예에 따르면, 의심 함수 리스트는 예를 들어, CVE(Common Vulnerabilities and Exposure)에 등록된 취약점 과 관련된 함수를 포함할 수 있다.In this case, the suspicious function list may refer to a list of functions related to the previously found vulnerability. Specifically, according to an embodiment of the present invention, the suspicious function list may include a function associated with a vulnerability registered in, for example, CVE (Common Vulnerabilities and Exposure).

구체적인 예로, 의심 함수 리스트는 strcpy(), memcpy(), strcat(), getwd(), gets(), fscanf(), scanf(), realpath(), sprint(), fprintf(), snprintf(), wcscpy(), wcxcat(), wmemcpy(), sscanf(), vscanf(), vfscanf(), vsscanf(), wscanf(), fwscanf(), swscanf(), vwscanf(), vfwscanf(), ip_cmsg_recv_checksum 등과 같은 함수들을 포함할 수 있다. 한편, 의심 함수 리스트는 상술한 예 외에도 사전 발견된 취약점과 관련된 다양한 함수들을 포함할 수 있다. As a concrete example, the suspicion function list is a list of suspicious functions, such as strcpy, memcpy, strcat, getwd, gets, fscanf, scanf, realpath, sprint, fprintf, (), vwscanf (), vfwscanf (), ip_cmsg_recv_checksum (), wcscpy (), wcscpy (), wcxcat (), wmemcpy (), sscanf (), vscanf And so on. Meanwhile, the suspicious function list may include various functions related to the previously discovered vulnerability, in addition to the examples described above.

동적 분석부(130)는 어셈블리어 코드에서 하나 이상의 의심 함수가 검색된 경우, 제어 흐름 그래프에 기초하여 각 의심 함수에 대한 최적 실행 경로를 결정한다. The dynamic analysis unit 130 determines an optimal execution path for each suspect function based on the control flow graph when one or more suspect functions are retrieved from the assembly language code.

구체적으로, 동적 분석부(130)는 제어 흐름 그래프 상에서 엔트리(entry) 노드로부터 의심 함수를 포함하는 블록에 해당하는 타겟(target) 노드까지의 최단 실행 경로를 해당 의심 함수에 대한 최적 실행 경로로 결정할 수 있다. 이때, 최단 실행 경로는 예를 들어, 다익스트라(dijkstra) 알고리즘을 이용하여 결정될 수 있으나, 이 외에도 공지된 다양한 기술을 이용하여 결정될 수 있다.Specifically, the dynamic analysis unit 130 determines, from the entry node on the control flow graph, the shortest execution path from the entry node to the target node corresponding to the block including the suspect function as the optimal execution path for the suspect function . In this case, the shortest execution path can be determined using, for example, a dijkstra algorithm, but can also be determined using various known techniques.

한편, 본 발명의 일 실시예에 따르면, 동적 분석부(130)는 최적 실행 경로가 결정된 경우, 최적 실행 경로를 제외한 나머지 실행 경로들을 프루닝(pruning)할 수 있다.Meanwhile, according to an embodiment of the present invention, when the optimal execution path is determined, the dynamic analysis unit 130 can prun the remaining execution paths except for the optimal execution path.

구체적으로, 도 2는 본 발명의 일 실시예에 따른 제어 흐름 그래프의 일 예를 도시한 도면이다.Specifically, FIG. 2 illustrates an example of a control flow graph according to an embodiment of the present invention.

도 2에 도시된 제어 흐름 그래프(200)에서 사각형으로 표시된 부분은 노드를 나타내며, 각 노드는 어셈블리 코드에 포함된 기본 블록을 나타낸다. 또한, 각 노드 사이의 화살표는 실행 경로를 나타내며, 사선(/)으로 표시된 화살표는 프루닝된 실행 경로를 나타낸다.In the control flow graph 200 shown in FIG. 2, a portion indicated by a rectangle represents a node, and each node represents a basic block included in the assembly code. In addition, the arrow between each node indicates the execution path, and the arrow marked with a slash (/) indicates the prerunned execution path.

한편, 'bug' 노드(240)에 해당하는 블록에서 의심 함수를 포함하고 있는 것으로 가정하면, 동적 분석부(130)는 제어 흐름 그래프 상에서 엔트리 노드인 'main() start' 노드(210)로부터 타겟 노드인 'bug' 노드(240)까지의 모든 실행 경로 중 최단 실행 경로를 최적 실행 경로로 결정할 수 있다. 구체적으로, 도시된 예에서, 최적 실행 경로는 'main() start' 노드(210) =>'file open' 노드(220)=>'check handle' 노드(230)=>'bug' 노드(240)로 이루어진 실행 경로이다.In the meantime, if it is assumed that the block corresponding to the 'bug' node 240 includes a suspicious function, the dynamic analysis unit 130 extracts, from the entry node 'main () start' The shortest execution path among the execution paths up to the node 'bug' node 240 can be determined as the optimum execution path. Specifically, in the illustrated example, the optimal execution path is 'main () start' node 210 => 'file open' node 220 => 'check handle' node 230 => 'bug' node 240 ).

한편, 동적 분석부(130)는 최적 실행 경로 상에 있는 각 노드에 대응되는 블록의 시작 메모리 주소를 필수 블록 리스트에 포함시키고, 나머지 노드들에 대응되는 기본 블록의 시작 메모리 주소를 회피 블록 리스트에 포함시킴으로써 최적 실행 경로를 제외한 나머지 실행 경로를 프루닝 시킬 수 있다.Meanwhile, the dynamic analysis unit 130 includes the start memory address of the block corresponding to each node on the optimal execution path in the essential block list, and the start memory address of the basic block corresponding to the remaining nodes to the avoiding block list The execution path excluding the optimum execution path can be pruned.

한편, 최적 실행 경로가 결정된 경우, 동적 분석부(130)는 소프트웨어 바이너리 파일을 이용하여 최적 실행 경로에 대한 동적 기호 실행(concolic execution)을 수행한다.On the other hand, when the optimal execution path is determined, the dynamic analysis unit 130 performs a dynamic symbol execution on the optimal execution path using the software binary file.

이때, 동적 기호 실행은 실제 수행(concrete execution)과 기호 실행(symbolic execution)을 모두 이용하여 경로 제약조건(path constraint)을 해결하기 위한 기술이다. At this time, dynamic symbol execution is a technique for solving a path constraint by using both concrete execution and symbolic execution.

구체적으로, 동적 분석부(130)는 회피 블록 리스트에 포함된 블록으로의 실행 흐름을 배제하고, 필수 블록 리스트에 포함된 블록으로 실행 흐름이 진행되도록 입력 값 조건을 결정할 수 있으며, 이를 이용하여 최적 실행 경로에 대한 동적 기호 실행이 수행되도록 할 수 있다. Specifically, the dynamic analysis unit 130 may exclude the execution flow to the blocks included in the avoiding block list, determine the input value condition so that the execution flow proceeds to the blocks included in the essential block list, You can enable dynamic symbol execution to be performed on the execution path.

도 3은 본 발명의 일 실시예에 따른 소프트웨어 취약점 분석 방법의 순서도이다.3 is a flowchart of a software vulnerability analysis method according to an embodiment of the present invention.

도 3에 도시된 방법은 예를 들어, 도 1에 도시된 소프트웨어 취약점 분석 장치(100)에 의해 수행될 수 있다.The method shown in FIG. 3 can be performed, for example, by the software vulnerability analysis apparatus 100 shown in FIG.

도 3을 참조하면, 우선, 소프트웨어 취약점 분석 장치(100)는 취약점 분석 대상인 소프트웨어 바이너리 파일을 역어셈블하여 상기 소프트웨어 바이너리 파일에 대한 어셈블리어 코드를 생성한다(310).Referring to FIG. 3, first, the software vulnerability analysis apparatus 100 disassembles a software binary file to be analyzed for a vulnerability, and generates an assembly language code for the software binary file (310).

이후, 소프트웨어 취약점 분석 장치(100)는 어셈블리어 코드에 대한 제어 흐름 그래프(control flow graph)를 생성한다(320). Thereafter, the software vulnerability analysis apparatus 100 generates a control flow graph for the assembly language code (320).

이후, 소프트웨어 취약점 분석 장치(100)는 문자열 검색을 통해 상기 어셈블리어 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단한다(330).Thereafter, the software vulnerability analysis apparatus 100 determines whether the assembler code includes at least one of the suspect functions included in the predefined suspect function list (step 330).

이때, 의심 함수 리스트는 예를 들어, CVE(Common Vulnerabilities and Exposure) 에 등록된 취약점과 관련된 함수와 같이 사전에 발견된 취약점과 관련된 함수를 포함할 수 있다. At this time, the suspicious function list may include a function associated with a previously discovered vulnerability, for example, a function related to a vulnerability registered in CVE (Common Vulnerabilities and Exposure).

한편, 어셈블리어 코드에 의심 함수가 포함되어 있는 경우, 소프트웨어 취약점 분석 장치(100)는 제어 흐름 그래프에 기초하여 검색된 의심 함수를 실행하기 위한 최적 실행 경로를 결정한다(340). On the other hand, when the suspect function is included in the assembly language code, the software vulnerability analysis apparatus 100 determines an optimal execution path for executing the sought suspect function based on the control flow graph (340).

이때, 본 발명의 일 실시예에 따르면, 소프트웨어 취약점 분석 장치(100)는 제어 흐름 그래프 상에서 엔트리 노드로부터 의심 함수를 포함하는 타겟 노드까지의 최단 실행 경로를 상기 최적 실행 경로로 결정할 수 있다. At this time, according to an embodiment of the present invention, the software vulnerability analysis apparatus 100 can determine the shortest execution path from the entry node to the target node including the suspect function as the optimum execution path on the control flow graph.

또한, 본 발명의 일 실시예에 따르면, 소프트웨어 취약점 분석 장치(100)는 최단 실행 경로가 결정된 경우, 제외한 나머지 실행 경로를 프루닝(pruning)할 수 있다. 구체적으로, 소프트웨어 취약점 분석 장치(100)는 최적 실행 경로를 제외한 나머지 경로 상에 존재하는 각 노드에 대응되는 블록의 시작 메모리 주소를 포함하는 회피 블록 리스트를 생성하고, 생성된 회피 블록 리스트에 기초하여 상기 나머지 실행 경로를 프루닝할 수 있다.In addition, according to an embodiment of the present invention, the software vulnerability analysis apparatus 100 can prun the remaining execution paths except the shortest execution path. Specifically, the software vulnerability analysis apparatus 100 generates a avoidance block list including a start memory address of a block corresponding to each node existing on the remaining path except for the optimum execution path, and based on the generated avoidance block list The remaining execution paths can be pruned.

이후, 소프트웨어 취약점 분석 장치(100)는 소프트웨어 바이너리 파일을 이용하여 최적 실행 경로에 대한 동적 기호 실행 실행(concolic execution)을 수행한다(350).Thereafter, the software vulnerability analysis apparatus 100 performs dynamic symbol execution (concurrent execution) on the optimal execution path using the software binary file (350).

한편, 도 3에 도시된 순서도에서는 상기 방법을 복수 개의 단계로 나누어 기재하였으나, 적어도 일부의 단계들은 순서를 바꾸어 수행되거나, 다른 단계와 결합되어 함께 수행되거나, 생략되거나, 세부 단계들로 나뉘어 수행되거나, 또는 도시되지 않은 하나 이상의 단계가 부가되어 수행될 수 있다.In the flowchart shown in FIG. 3, although the method is described by dividing the method into a plurality of steps, at least some of the steps may be carried out in sequence, combined with other steps, performed together, omitted, , Or one or more steps not shown may be added.

도 4는 예시적인 실시예들에서 사용되기에 적합한 컴퓨팅 장치를 포함하는 컴퓨팅 환경을 예시하여 설명하기 위한 블록도이다. 도시된 실시예에서, 각 컴포넌트들은 이하에 기술된 것 이외에 상이한 기능 및 능력을 가질 수 있고, 이하에 기술되지 않은 것 이외에도 추가적인 컴포넌트를 포함할 수 있다.4 is a block diagram illustrating and illustrating a computing environment including a computing device suitable for use in the exemplary embodiments. In the illustrated embodiment, each of the components may have different functions and capabilities than those described below, and may include additional components in addition to those not described below.

도시된 컴퓨팅 환경(10)은 컴퓨팅 장치(12)를 포함한다. 일 실시예에서, 컴퓨팅 장치(12)는 소프트웨어 취약점 분석 장치(100)에 포함되는 하나 이상의 컴포넌트일 수 있다.The illustrated computing environment 10 includes a computing device 12. In one embodiment, the computing device 12 may be one or more components included in the software vulnerability analysis apparatus 100.

컴퓨팅 장치(12)는 적어도 하나의 프로세서(14), 컴퓨터 판독 가능 저장 매체(16) 및 통신 버스(18)를 포함한다. 프로세서(14)는 컴퓨팅 장치(12)로 하여금 앞서 언급된 예시적인 실시예에 따라 동작하도록 할 수 있다. 예컨대, 프로세서(14)는 컴퓨터 판독 가능 저장 매체(16)에 저장된 하나 이상의 프로그램들을 실행할 수 있다. 상기 하나 이상의 프로그램들은 하나 이상의 컴퓨터 실행 가능 명령어를 포함할 수 있으며, 상기 컴퓨터 실행 가능 명령어는 프로세서(14)에 의해 실행되는 경우 컴퓨팅 장치(12)로 하여금 예시적인 실시예에 따른 동작들을 수행하도록 구성될 수 있다.The computing device 12 includes at least one processor 14, a computer readable storage medium 16, The processor 14 may cause the computing device 12 to operate in accordance with the exemplary embodiment discussed above. For example, processor 14 may execute one or more programs stored on computer readable storage medium 16. The one or more programs may include one or more computer-executable instructions, which when executed by the processor 14 cause the computing device 12 to perform operations in accordance with the illustrative embodiment .

컴퓨터 판독 가능 저장 매체(16)는 컴퓨터 실행 가능 명령어 내지 프로그램 코드, 프로그램 데이터 및/또는 다른 적합한 형태의 정보를 저장하도록 구성된다. 컴퓨터 판독 가능 저장 매체(16)에 저장된 프로그램(20)은 프로세서(14)에 의해 실행 가능한 명령어의 집합을 포함한다. 일 실시예에서, 컴퓨터 판독 가능 저장 매체(16)는 메모리(랜덤 액세스 메모리와 같은 휘발성 메모리, 비휘발성 메모리, 또는 이들의 적절한 조합), 하나 이상의 자기 디스크 저장 디바이스들, 광학 디스크 저장 디바이스들, 플래시 메모리 디바이스들, 그 밖에 컴퓨팅 장치(12)에 의해 액세스되고 원하는 정보를 저장할 수 있는 다른 형태의 저장 매체, 또는 이들의 적합한 조합일 수 있다.The computer-readable storage medium 16 is configured to store computer-executable instructions or program code, program data, and / or other suitable forms of information. The program 20 stored in the computer-readable storage medium 16 includes a set of instructions executable by the processor 14. In one embodiment, the computer-readable storage medium 16 may be any type of storage medium such as a memory (volatile memory such as random access memory, non-volatile memory, or any suitable combination thereof), one or more magnetic disk storage devices, Memory devices, or any other form of storage medium that can be accessed by the computing device 12 and store the desired information, or any suitable combination thereof.

통신 버스(18)는 프로세서(14), 컴퓨터 판독 가능 저장 매체(16)를 포함하여 컴퓨팅 장치(12)의 다른 다양한 컴포넌트들을 상호 연결한다.Communication bus 18 interconnects various other components of computing device 12, including processor 14, computer readable storage medium 16.

컴퓨팅 장치(12)는 또한 하나 이상의 입출력 장치(24)를 위한 인터페이스를 제공하는 하나 이상의 입출력 인터페이스(22) 및 하나 이상의 네트워크 통신 인터페이스(26)를 포함할 수 있다. 입출력 인터페이스(22) 및 네트워크 통신 인터페이스(26)는 통신 버스(18)에 연결된다. 입출력 장치(24)는 입출력 인터페이스(22)를 통해 컴퓨팅 장치(12)의 다른 컴포넌트들에 연결될 수 있다. 예시적인 입출력 장치(24)는 포인팅 장치(마우스 또는 트랙패드 등), 키보드, 터치 입력 장치(터치패드 또는 터치스크린 등), 음성 또는 소리 입력 장치, 다양한 종류의 센서 장치 및/또는 촬영 장치와 같은 입력 장치, 및/또는 디스플레이 장치, 프린터, 스피커 및/또는 네트워크 카드와 같은 출력 장치를 포함할 수 있다. 예시적인 입출력 장치(24)는 컴퓨팅 장치(12)를 구성하는 일 컴포넌트로서 컴퓨팅 장치(12)의 내부에 포함될 수도 있고, 컴퓨팅 장치(12)와는 구별되는 별개의 장치로 컴퓨팅 장치(12)와 연결될 수도 있다.The computing device 12 may also include one or more input / output interfaces 22 and one or more network communication interfaces 26 that provide an interface for one or more input / output devices 24. The input / output interface 22 and the network communication interface 26 are connected to the communication bus 18. The input / output device 24 may be connected to other components of the computing device 12 via the input / output interface 22. The exemplary input and output device 24 may be any type of device, such as a pointing device (such as a mouse or trackpad), a keyboard, a touch input device (such as a touch pad or touch screen), a voice or sound input device, An input device, and / or an output device such as a display device, a printer, a speaker, and / or a network card. The exemplary input and output device 24 may be included within the computing device 12 as a component of the computing device 12 and may be coupled to the computing device 12 as a separate device distinct from the computing device 12 It is possible.

이상에서 대표적인 실시예를 통하여 본 발명에 대하여 상세하게 설명하였으나, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 전술한 실시예에 대하여 본 발명의 범주에서 벗어나지 않는 한도 내에서 다양한 변형이 가능함을 이해할 것이다. 그러므로 본 발명의 권리범위는 설명된 실시예에 국한되어 정해져서는 안 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등한 것들에 의해 정해져야 한다.While the present invention has been particularly shown and described with reference to exemplary embodiments thereof, it is to be understood that the invention is not limited to the disclosed embodiments, but, on the contrary, I will understand. Therefore, the scope of the present invention should not be limited to the above-described embodiments, but should be determined by equivalents to the appended claims, as well as the appended claims.

10: 컴퓨팅 환경
12: 컴퓨팅 장치
14: 프로세서
16: 컴퓨터 판독 가능 저장 매체
18: 통신 버스
20: 프로그램
22: 입출력 인터페이스
24: 입출력 장치
26: 네트워크 통신 인터페이스
100: 소프트웨어 취약점 분석 장치
110: 역어셈블러
120: 정적 분석부
130: 동적 분석부
10: Computing environment
12: computing device
14: Processor
16: Computer readable storage medium
18: Communication bus
20: Program
22: I / O interface
24: input / output device
26: Network communication interface
100: software vulnerability analysis device
110: disassembler
120: static analysis section
130: Dynamic Analysis Unit

Claims (12)

소프트웨어 바이너리 파일을 역어셈블(disassemble)하여 상기 소프트웨어 바이너리 파일에 대한 어셈블리어 코드를 생성하는 역어셈블러;
상기 어셈블리어 코드에 대한 제어 흐름 그래프(control flow graph)를 생성하고, 문자열 검색을 통해 상기 어셈블리어 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단하는 정적 분석부; 및
상기 어셈블리어 코드에 상기 의심 함수가 포함되어 있는 경우, 상기 제어 흐름 그래프에 기초하여 상기 의심 함수를 실행하기 위한 최적 실행 경로를 결정하고, 상기 소프트웨어 바이너리 파일을 이용하여 상기 최적 실행 경로에 대한 동적 기호 실행(concolic execution)을 수행하는 동적 분석부를 포함하며,
상기 동적 분석부는, 상기 제어 흐름 그래프 상에서 엔트리 노드로부터 상기 의심 함수를 포함하는 타겟 노드까지의 최단 실행 경로를 상기 최적 실행 경로로 결정하는 소프트웨어 취약점 분석 장치.
An inverse assembler to disassemble the software binary file to generate an assembly language code for the software binary file;
Generating a control flow graph for the assembly language code and determining whether the assembly language code includes at least one of the suspect functions included in the predefined suspect function list, part; And
Determining an optimal execution path for executing the suspect function based on the control flow graph when the suspect function is included in the assembly language code and performing dynamic symbol execution for the optimal execution path using the software binary file and a dynamic analysis unit for performing concolic execution,
Wherein the dynamic analysis unit determines the shortest execution path from the entry node to the target node including the suspect function as the optimum execution path on the control flow graph.
청구항 1에 있어서,
상기 의심 함수 리스트는, 사전에 발견된 취약점과 관련된 함수를 포함하는 소프트웨어 취약점 분석 장치.
The method according to claim 1,
Wherein the suspicious function list includes a function associated with a previously discovered vulnerability.
청구항 2에 있어서,
상기 의심 함수 리스트는, CVE(Common Vulnerabilities and Exposure) 에 등록된 취약점과 관련된 함수를 포함하는 소프트웨어 취약점 분석 장치.
The method of claim 2,
Wherein the suspicious function list includes a function related to a vulnerability registered in CVE (Common Vulnerabilities and Exposure).
삭제delete 청구항 1에 있어서,
상기 동적 분석부는, 상기 최단 실행 경로를 제외한 나머지 실행 경로를 프루닝(pruning)하는 소프트웨어 취약점 분석 장치.
The method according to claim 1,
And the dynamic analysis unit pruning remaining execution paths excluding the shortest execution path.
청구항 5에 있어서,
상기 동적 분석부는, 상기 나머지 실행 경로 상에 존재하는 각 노드에 대응되는 블록의 시작 메모리 주소를 포함하는 회피 블록 리스트를 생성하고, 상기 회피 블록 리스트에 기초하여 상기 나머지 실행 경로를 프루닝하는 소프트웨어 취약점 분석 장치.
The method of claim 5,
Wherein the dynamic analysis unit generates a avoidance block list including a start memory address of a block corresponding to each node existing on the remaining execution path and generates a software vulnerability to prune the remaining execution path based on the avoidance block list Analysis device.
소프트웨어 바이너리 파일을 역어셈블(disassemble)하여 상기 소프트웨어 바이너리 파일에 대한 어셈블리어 코드를 생성하는 단계;
상기 어셈블리어 코드에 대한 제어 흐름 그래프(control flow graph)를 생성하는 단계;
문자열 검색을 통해 상기 어셈블리어 코드가 사전 정의된 의심 함수 리스트에 포함된 의심 함수들 중 적어도 하나를 포함하고 있는지 여부를 판단하는 단계;
상기 어셈블리어 코드에 상기 의심 함수가 포함되어 있는 경우, 상기 제어 흐름 그래프에 기초하여 상기 의심 함수를 실행하기 위한 최적 실행 경로를 결정하는 단계; 및
상기 소프트웨어 바이너리 파일을 이용하여 상기 최적 실행 경로에 대한 동적 기호 실행(concolic execution)을 수행하는 단계를 포함하며,
상기 최적 실행 경로를 결정하는 단계는, 상기 제어 흐름 그래프 상에서 엔트리 노드로부터 상기 의심 함수를 포함하는 타겟 노드까지의 최단 실행 경로를 상기 최적 실행 경로로 결정하는 소프트웨어 취약점 분석 방법.
Disassembling the software binary file to generate an assembly language code for the software binary file;
Generating a control flow graph for the assembly language code;
Determining by the string search whether the assembly language code includes at least one of the suspect functions included in the predefined suspect function list;
Determining an optimal execution path for executing the suspect function based on the control flow graph when the suspect function is included in the assembly language code; And
Performing a dynamic concurrent execution of the optimal execution path using the software binary file,
Wherein the determining of the optimal execution path determines the shortest execution path from the entry node to the target node including the suspect function as the optimum execution path on the control flow graph.
청구항 7에 있어서,
상기 의심 함수 리스트는, 사전에 발견된 취약점과 관련된 함수를 포함하는 소프트웨어 취약점 분석 방법.
The method of claim 7,
Wherein the suspect function list includes a function associated with a previously discovered vulnerability.
청구항 8에 있어서,
상기 의심 함수 리스트는, CVE(Common Vulnerabilities and Exposure) 에 등록된 취약점과 관련된 함수를 포함하는 소프트웨어 취약점 분석 방법.
The method of claim 8,
Wherein the suspect function list includes a function related to a vulnerability registered in CVE (Common Vulnerabilities and Exposure).
삭제delete 청구항 7에 있어서,
상기 최적 실행 경로를 결정하는 단계는, 상기 최단 실행 경로를 제외한 나머지 실행 경로를 프루닝(pruning)하는 단계를 더 포함하는 소프트웨어 취약점 분석 방법.
The method of claim 7,
Wherein determining the optimal execution path further comprises pruning the remaining execution paths excluding the shortest execution path.
청구항 11에 있어서,
상기 프루닝하는 단계는, 상기 나머지 실행 경로 상에 존재하는 각 노드에 대응되는 블록의 시작 메모리 주소를 포함하는 회피 블록 리스트를 생성하고, 상기 회피 블록 리스트에 기초하여 상기 나머지 실행 경로를 프루닝하는 소프트웨어 취약점 분석 방법.
The method of claim 11,
The pruning step may include generating a avoidance block list including a start memory address of a block corresponding to each node existing on the remaining execution path, and pruning the remaining execution path based on the avoiding block list Software vulnerability analysis method.
KR1020180133775A 2018-11-02 2018-11-02 Apparatus and method for analyzing software vulnerability KR101963752B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180133775A KR101963752B1 (en) 2018-11-02 2018-11-02 Apparatus and method for analyzing software vulnerability

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180133775A KR101963752B1 (en) 2018-11-02 2018-11-02 Apparatus and method for analyzing software vulnerability

Publications (1)

Publication Number Publication Date
KR101963752B1 true KR101963752B1 (en) 2019-03-29

Family

ID=65898832

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180133775A KR101963752B1 (en) 2018-11-02 2018-11-02 Apparatus and method for analyzing software vulnerability

Country Status (1)

Country Link
KR (1) KR101963752B1 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102035246B1 (en) * 2019-05-24 2019-10-22 세종대학교산학협력단 Apparatus and method for analyzing software vulnerability using backward pathfinding
KR20210062438A (en) * 2019-11-21 2021-05-31 국방과학연구소 Computer apparatus and binary program execution speed measure method of computer apparatus
KR102304861B1 (en) * 2021-03-30 2021-09-23 세종대학교산학협력단 Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing
EP3989081A4 (en) * 2019-09-24 2023-06-21 Jingdong Technology Information Technology Co., Ltd. Method and device for publishing smart contract

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101674895B1 (en) * 2015-11-30 2016-11-11 인하대학교 산학협력단 Java Security Analysis Device Based On Java Method Call Graph
KR101796369B1 (en) 2016-01-22 2017-12-01 김동완 Apparatus, method and system of reverse engineering collaboration for software analsis
KR20180010053A (en) * 2016-07-20 2018-01-30 주식회사 이븐스타 Extraction system and method of risk code for vulnerability analysis
KR20180060497A (en) * 2016-11-29 2018-06-07 한국전력공사 Apparatus and method for analyzing embeded software vulnerability based on binary code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101674895B1 (en) * 2015-11-30 2016-11-11 인하대학교 산학협력단 Java Security Analysis Device Based On Java Method Call Graph
KR101796369B1 (en) 2016-01-22 2017-12-01 김동완 Apparatus, method and system of reverse engineering collaboration for software analsis
KR20180010053A (en) * 2016-07-20 2018-01-30 주식회사 이븐스타 Extraction system and method of risk code for vulnerability analysis
KR20180060497A (en) * 2016-11-29 2018-06-07 한국전력공사 Apparatus and method for analyzing embeded software vulnerability based on binary code

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
강상용 외 2인, ‘동적 기호 실행을 이용한 윈도우 시스템 콜 Use-After-Free 취약점 자동 탐지 방법’, 정보보호학회논문지, 한국정보보호학회, 2017.08, pp.803-810* *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102035246B1 (en) * 2019-05-24 2019-10-22 세종대학교산학협력단 Apparatus and method for analyzing software vulnerability using backward pathfinding
EP3989081A4 (en) * 2019-09-24 2023-06-21 Jingdong Technology Information Technology Co., Ltd. Method and device for publishing smart contract
KR20210062438A (en) * 2019-11-21 2021-05-31 국방과학연구소 Computer apparatus and binary program execution speed measure method of computer apparatus
KR102319403B1 (en) * 2019-11-21 2021-10-29 국방과학연구소 Computer apparatus and binary program execution speed measure method of computer apparatus
KR102304861B1 (en) * 2021-03-30 2021-09-23 세종대학교산학협력단 Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing

Similar Documents

Publication Publication Date Title
KR101963752B1 (en) Apparatus and method for analyzing software vulnerability
US11436337B2 (en) System and method for application security profiling
US11216256B2 (en) Determining based on static compiler analysis that execution of compiler code would result in unacceptable program behavior
US9454659B1 (en) Software vulnerabilities detection system and methods
US11514172B2 (en) System and method for information flow analysis of application code
US10630714B2 (en) Method, system, and computer program product for automatically mitigating vulnerabilities in source code
US9824214B2 (en) High performance software vulnerabilities detection system and methods
WO2017049800A1 (en) Method and apparatus for detecting loophole code in application
US7860842B2 (en) Mechanism to detect and analyze SQL injection threats
Alhuzali et al. Chainsaw: Chained automated workflow-based exploit generation
US11650905B2 (en) Testing source code changes
US10318739B2 (en) Computing optimal fix locations for security vulnerabilities in computer-readable code
US10133560B2 (en) Link time program optimization in presence of a linker script
US8671397B2 (en) Selective data flow analysis of bounded regions of computer software applications
US9645800B2 (en) System and method for facilitating static analysis of software applications
US10599852B2 (en) High performance software vulnerabilities detection system and methods
US9742804B2 (en) Computer network defense system
Weiss et al. Annotary: A concolic execution system for developing secure smart contracts
KR102035246B1 (en) Apparatus and method for analyzing software vulnerability using backward pathfinding
Takata et al. Minespider: Extracting urls from environment-dependent drive-by download attacks
Aidee et al. Vulnerability assessment on ethereum based smart contract applications
Elsayed et al. IFCaaS: information flow control as a service for cloud security
US11392686B2 (en) Detecting stack cookie utilization in a binary software component using binary static analysis
US10002253B2 (en) Execution of test inputs with applications in computer security assessment
CN106911686B (en) WebShell detection method and device

Legal Events

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