KR102483489B1 - Hybrid fuzzing device capable of dynamic resource distribution - Google Patents

Hybrid fuzzing device capable of dynamic resource distribution Download PDF

Info

Publication number
KR102483489B1
KR102483489B1 KR1020220037001A KR20220037001A KR102483489B1 KR 102483489 B1 KR102483489 B1 KR 102483489B1 KR 1020220037001 A KR1020220037001 A KR 1020220037001A KR 20220037001 A KR20220037001 A KR 20220037001A KR 102483489 B1 KR102483489 B1 KR 102483489B1
Authority
KR
South Korea
Prior art keywords
unit
fuzzing
concolic
coverage
software
Prior art date
Application number
KR1020220037001A
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 KR1020220037001A priority Critical patent/KR102483489B1/en
Application granted granted Critical
Publication of KR102483489B1 publication Critical patent/KR102483489B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Medical Informatics (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Artificial Intelligence (AREA)
  • Debugging And Monitoring (AREA)

Abstract

A hybrid fuzzing device of the present invention may include: a fuzzing unit configured to execute fuzzing on software; a concolic unit configured to execute concolic on the software; and a coverage analysis unit configured to receive first coverage information on a fuzzing execution result of the software from the fuzzing unit and second coverage information on a concolic execution result of the software from the concolic unit.

Description

동적 자원 분배가 가능한 하이브리드 퍼징 장치{HYBRID FUZZING DEVICE CAPABLE OF DYNAMIC RESOURCE DISTRIBUTION}Hybrid purging device capable of dynamic resource distribution {HYBRID FUZZING DEVICE CAPABLE OF DYNAMIC RESOURCE DISTRIBUTION}

본 발명은 하이브리드 퍼징 장치에 관한 것으로, 보다 상세하게는, 소프트웨어에 따라 동적 자원 분배가 가능한 하이브리드 퍼징 장치에 관한 것이다.The present invention relates to a hybrid purging device, and more particularly, to a hybrid purging device capable of dynamic resource distribution according to software.

소프트웨어에 존재하는 버그는 단순히 프로그램의 기능을 방해할 뿐만 아니라 악의적인 공격자를 통해 사용자의 장치를 공격할 수 있다. 그러나, 개발 단계에서 소프트웨어에 존재하는 모든 버그를 찾는 것은 현실적으로 어려우므로, 개발 단계에서 찾지 못한 소프트웨어의 버그를 찾기 위해 다양한 정적 및 동적 분석 기술이 사용되고 있다.Bugs present in the software not only interfere with the functioning of the program, but can also attack the user's device through malicious attackers. However, since it is practically difficult to find all bugs existing in the software during the development stage, various static and dynamic analysis techniques are used to find software bugs not found during the development stage.

버그를 찾기 위한 동적 분석 방법에는 퍼징(fuzzing)과 콘콜릭(concolic) 실행이 있다. 퍼징은 속도가 빨라 수많은 입력값들을 짧은 시간 내에 테스트할 수 있다는 장점이 있다. 그러나, 퍼징은 입력값을 무작위로 생성하거나 정해진 규칙대로 주어진 입력값을 변형시키기 때문에, 조건이 복잡하거나 한정적인 분기문에는 진입하기 어렵다는 단점이 있다. 반대로, 콘콜릭 실행은 복잡한 연산을 통해 입력값을 생성하여, 진입 조건이 복잡하거나 한정적인 분기를 진입할 수 있다는 장점이 있다. 그러나, 콘콜릭 실행은 퍼징에 비해 속도가 매우 느려 콘콜릭 실행을 단일 분석 방법으로 사용하는 것은 비효율적인 문제가 있다.Dynamic analysis methods for finding bugs include fuzzing and concolic execution. Fuzzing is fast and has the advantage of being able to test a large number of input values in a short time. However, since fuzzing randomly generates input values or transforms given input values according to predetermined rules, it has a disadvantage in that it is difficult to enter branching statements with complex or limited conditions. Conversely, concolic execution has the advantage of being able to enter a branch with complex or limited entry conditions by generating input values through complex operations. However, since concolic execution is very slow compared to fuzzing, it is inefficient to use concolic execution as a single analysis method.

본원 발명은 효율적인 소프트웨어의 동적 테스팅을 위해, 퍼징과 콘콜릭 실행을 같이 사용하는 하이브리드 퍼징에 관한 것이다. 본원 발명은 고정된 자원에 대하여 테스트 대상인 소프트웨어의 특성에 따라 퍼징 또는 콘콜릭에 대해 동적 자원 분배가 가능한 하이브리드 퍼징 기술에 대한 것이다.The present invention relates to hybrid fuzzing using both fuzzing and concolic execution for efficient dynamic testing of software. The present invention relates to a hybrid fuzzing technology capable of dynamic resource distribution for fuzzing or concolic according to characteristics of software to be tested with respect to fixed resources.

본 발명의 일 과제는 동적 자원 분배가 가능한 하이브리드 퍼징 장치에 관한 것이다.One object of the present invention relates to a hybrid purging device capable of dynamic resource distribution.

일 실시예에 따른 하이브리드 퍼징 장치는 소프트웨어에 대해 퍼징(fuzzing)을 실행하도록 구성된 퍼징부; 상기 소프트웨어에 대해 콘콜릭(concolic)을 실행하도록 구성된 콘콜릭부; 및 상기 퍼징부로부터 상기 소프트웨어의 퍼징 실행 결과에 대한 제1 커버리지 정보 및 상기 콘콜릭부로부터 상기 소프트웨어의 콘콜릭 실행 결과에 대한 제2 커버리지 정보를 수신하는 커버리지 분석부를 포함할 수 있다.A hybrid purging apparatus according to an embodiment includes a purging unit configured to perform fuzzing on software; a concolic unit configured to execute concolic on the software; and a coverage analyzer configured to receive first coverage information on a fuzzing execution result of the software from the fuzzing unit and second coverage information on a concolic execution result of the software from the concolic unit.

여기서, 상기 커버리지 분석부는 상기 제1 커버리지 정보 및 상기 제2 커버리지 정보에 기초하여 머신 러닝을 수행하는 커버리지 학습부를 포함할 수 있다.Here, the coverage analysis unit may include a coverage learning unit that performs machine learning based on the first coverage information and the second coverage information.

여기서, 상기 커버리지 분석부는 상기 커버리지 학습부의 결과값에 기초하여 상기 소프트웨어에 대해 퍼징을 실행할지 또는 콘콜릭을 실행할지 여부를 결정할 수 있다.Here, the coverage analyzer may determine whether to execute fuzzing or concolic on the software based on a result value of the coverage learning unit.

여기서, 상기 결과값은 상기 소프트웨어에 대한 퍼징 점수 및 콘콜릭 점수를 포함할 수 있다.Here, the resulting value may include a fuzzing score and a concolic score for the software.

여기서, 상기 제1 커버리지 정보 또는 상기 제2 커버리지 정보는 상기 소프트웨어에 포함된 복수의 파트 및 상기 복수의 파트 각각에 대응되는 복수의 파트값을 포함할 수 있다.Here, the first coverage information or the second coverage information may include a plurality of parts included in the software and a plurality of part values corresponding to each of the plurality of parts.

여기서, 상기 커버리지 학습부는 상기 복수의 파트값에 기초하여 상기 복수의 파트 각각에 대한 퍼징 점수 및 콘콜릭 점수를 산출하고, 상기 커버리지 분석부는, 상기 소프트웨어의 제1 파트에 대한 퍼징 점수가 콘콜릭 점수보다 크거나 같을 경우 상기 제1 파트의 퍼징 실행과 관련된 제1 신호를 상기 퍼징부에 전송하고, 상기 제1 파트에 대한 퍼징 점수가 콘콜릭 점수보다 작은 경우 상기 제1 파트의 콘콜릭 실행과 관련된 제2 신호를 상기 콘콜릭부에 전송하는 자원 할당부를 포함할 수 있다.Here, the coverage learning unit calculates a fuzzing score and a concolic score for each of the plurality of parts based on the values of the plurality of parts, and the coverage analyzer calculates a fuzzing score for the first part of the software as a concolic score. greater than or equal to, transmits a first signal related to the fuzzing execution of the first part to the fuzzing unit, and when the fuzzing score for the first part is smaller than the concolic score, related to the fuzzing execution of the first part A resource allocator for transmitting a second signal to the concolic unit may be included.

여기서, 상기 복수의 파트는 상기 소프트웨어의 소스 코드의 함수, 라인, 블록, 결정, 엣지, 분기 및 조건 중 적어도 하나에 의해 구별될 수 있다.Here, the plurality of parts may be distinguished by at least one of a function, a line, a block, a decision, an edge, a branch, and a condition of the source code of the software.

여기서, 상기 커버리지 분석부는, 사용자가 인식가능한 문자 데이터를 출력하기 위해 상기 제1 커버리지 정보 또는 상기 제2 커버리지 정보를 처리하는 커버리지 가공부를 포함할 수 있다.Here, the coverage analysis unit may include a coverage processing unit that processes the first coverage information or the second coverage information to output character data recognizable by a user.

여기서, 상기 소프트웨어의 실행에 대한 입력값을 제공하는 입력부; 및 상기 퍼징부 또는 상기 콘콜릭부로부터 상기 소프트웨어의 실행에 대한 크래시 정보를 획득하는 크래시 관리부를 더 포함하고, 상기 크래시 관리부는 상기 퍼징부 또는 상기 콘콜릭부로부터 크래시 발생에 대한 신호를 수신한 경우, 크래시 발생에 대응되는 콜스택(call stack), 메모리 정보 및 상기 입력부로부터 제공받은 입력값을 저장할 수 있다.Here, an input unit providing an input value for the execution of the software; and a crash management unit that obtains crash information on execution of the software from the fuzzing unit or the concolic unit, wherein the crash management unit receives a signal about the occurrence of a crash from the fuzzing unit or the concolic unit. , a call stack corresponding to the occurrence of a crash, memory information, and an input value provided from the input unit may be stored.

일 실시예에 따른 하이브리드 퍼징 방법은 적어도 하나 이상의 프로세서에 의해 수행되는 하이브리드 퍼징 방법에 있어서, 소프트웨어에 대해 퍼징을 실행하는 단계; 상기 소프트웨어에 대해 콘콜릭을 실행하는 단계; 상기 소프트웨어의 퍼징 실행 결과에 대한 제1 커버리지 정보 및 상기 소프트웨어의 콘콜릭 실행 결과에 대한 제2 커버리지 정보를 수신하는 단계; 및 상기 제1 커버리지 정보 및 상기 제2 커버리지 정보에 기초하여 머신 러닝을 수행하는 단계를 포함할 수 있다.A hybrid fuzzing method according to an embodiment is a hybrid fuzzing method performed by at least one processor, comprising: executing fuzzing on software; running concolic on the software; receiving first coverage information on a fuzzing execution result of the software and second coverage information on a concolic execution result of the software; and performing machine learning based on the first coverage information and the second coverage information.

여기서, 상기 하이브리드 퍼징 방법을 실행시키도록 컴퓨터로 판독 가능한 기록 매체에 저장된 컴퓨터 프로그램이 제공될 수 있다.Here, a computer program stored in a computer-readable recording medium to execute the hybrid purging method may be provided.

본 발명의 일 실시예에 따르면 동적 자원 분배가 가능한 하이브리드 퍼징 장치가 제공될 수 있다.According to an embodiment of the present invention, a hybrid purging apparatus capable of dynamic resource distribution may be provided.

도 1은 일 실시예에 따른 하이브리드 퍼징 장치의 블록도이다.
도 2는 일 실시예에 따른 하이브리드 퍼징 장치의 자원 할당 방법의 순서도이다.
도 3은 일 실시예에 따른 커버리지 정보를 설명하기 위한 도면이다.
도 4는 일 실시예에 따른 커버리지의 가공을 설명하기 위한 도면이다.
1 is a block diagram of a hybrid purging device according to an embodiment.
2 is a flowchart of a resource allocation method of a hybrid purging apparatus according to an embodiment.
3 is a diagram for explaining coverage information according to an exemplary embodiment.
4 is a diagram for explaining processing of coverage according to an exemplary embodiment.

본 명세서에 기재된 실시예는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 본 발명의 사상을 명확히 설명하기 위한 것이므로, 본 발명이 본 명세서에 기재된 실시예에 한정되는 것은 아니며, 본 발명의 범위는 본 발명의 사상을 벗어나지 아니하는 수정예 또는 변형예를 포함하는 것으로 해석되어야 한다.The embodiments described in this specification are intended to clearly explain the spirit of the present invention to those skilled in the art to which the present invention belongs, so the present invention is not limited to the embodiments described in this specification, and the The scope should be construed to include modifications or variations that do not depart from the spirit of the invention.

본 명세서에서 사용되는 용어는 본 발명에서의 기능을 고려하여 가능한 현재 널리 사용되고 있는 일반적인 용어를 선택하였으나 이는 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자의 의도, 판례 또는 새로운 기술의 출현 등에 따라 달라질 수 있다. 다만, 이와 달리 특정한 용어를 임의의 의미로 정의하여 사용하는 경우에는 그 용어의 의미에 관하여 별도로 기재할 것이다. 따라서 본 명세서에서 사용되는 용어는 단순한 용어의 명칭이 아닌 그 용어가 가진 실질적인 의미와 본 명세서의 전반에 걸친 내용을 토대로 해석되어야 한다.The terms used in this specification have been selected as general terms that are currently widely used as much as possible in consideration of the functions in the present invention, but these may vary depending on the intention of those skilled in the art, precedents, or the emergence of new technologies to which the present invention belongs. can However, in the case where a specific term is defined and used in an arbitrary meaning, the meaning of the term will be separately described. Therefore, the terms used in this specification should be interpreted based on the actual meaning of the term and the overall content of this specification, not the simple name of the term.

본 명세서에 첨부된 도면은 본 발명을 용이하게 설명하기 위한 것으로 도면에 도시된 형상은 본 발명의 이해를 돕기 위하여 필요에 따라 과장되어 표시된 것일 수 있으므로 본 발명이 도면에 의해 한정되는 것은 아니다.The drawings accompanying this specification are intended to easily explain the present invention, and the shapes shown in the drawings may be exaggerated as necessary to aid understanding of the present invention, so the present invention is not limited by the drawings.

본 명세서에서 본 발명에 관련된 공지의 구성 또는 기능에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에 이에 관한 자세한 설명은 필요에 따라 생략하기로 한다.If it is determined that a detailed description of a known configuration or function related to the present invention in this specification may obscure the gist of the present invention, a detailed description thereof will be omitted if necessary.

버그 탐색은 소프트웨어의 실행뿐만 아니라 장치의 보완과도 관련이 있는 중요한 작업이다. 버그 탐색을 위한 동적 분석 방법 중 퍼징(fuzzing)은 입력값을 무작위로 생성하거나 주어진 입력값을 변형하여 소프트웨어의 비정상적인 동작을 탐지하는 동적 분석 방법이다. 이때, 소프트웨어의 비정상적인 동작이란, 개발자가 고려한대로 소프트웨어가 실행되지 않고 버그가 발생하는 것을 의미한다. 예를들어, 비정상적인 동작은 예상치 못한 값이 출력되는 등의 동작이나, 비정상 종료를 하는 등의 동작일 수 있다.Bug hunting is an important task that not only has to do with the running of the software, but also with the maintenance of the device. Among dynamic analysis methods for bug detection, fuzzing is a dynamic analysis method that detects abnormal operation of software by randomly generating input values or modifying given input values. At this time, the abnormal operation of the software means that the software is not executed as the developer considered and a bug occurs. For example, the abnormal operation may be an operation such as outputting an unexpected value or an operation such as abnormal termination.

퍼징은 속도가 빨라 수많은 입력값들을 짧은 시간 내에 테스트할 수 있다는 장점이 있다. 반면, 퍼징은 입력값을 무작위로 생성하거나 정해진 규칙대로 주어진 입력값을 변형시키기 때문에, 조건이 복잡하거나 한정적인 분기문에는 진입하기 어렵다는 단점이 있다.Fuzzing is fast and has the advantage of being able to test a large number of input values in a short time. On the other hand, since fuzzing randomly generates an input value or transforms a given input value according to a predetermined rule, it has a disadvantage in that it is difficult to enter branching statements with complex or limited conditions.

예를 들어, 테스트 대상인 소프트웨어에 입력을 통해 조작할 수 있는 4바이트 크기의 정수형 변수 x가 존재하고, 변수 x에 들어있는 값이 0xdeadbeef일 때, 진입할 수 있는 분기가 있다고 가정한다. 퍼징은 무작위로 입력값을 변형시키기 때문에, 해당 분기에 진입하기 위해서는 무작위로 뽑은 4바이트 입력값이 우연히 0xdeadbeef가 되어야 한다. 그러나, 무작위로 뽑은 4바이트 값이 정확히 0xdeadbeef일 확률은 2^(-32)으로 매우 낮기 때문에, 퍼징을 통해 해당 분기를 테스트하는 것은 매우 힘들다.For example, assume that there is a 4-byte integer variable x that can be manipulated through input in the software to be tested, and that there is a branch that can be entered when the value contained in the variable x is 0xdeadbeef. Since fuzzing randomly transforms the input value, the randomly selected 4-byte input value must accidentally become 0xdeadbeef to enter the branch. However, since the probability that a randomly selected 4-byte value is exactly 0xdeadbeef is very low, 2^(-32), it is very difficult to test that branch through fuzzing.

반대로, 또 다른 동적 분석 방법인 콘콜릭 실행은 복잡한 연산을 통해 입력값을 생성하여, 진입 조건이 복잡하거나 한정적인 분기를 진입할 수 있는 장점이 있다. 그러나, 콘콜릭 실행은 퍼징에 비해 속도가 매우 느려, 콘콜릭 실행을 단일 분석 방법으로 사용하는 것은 비효율적이다.Conversely, concolic execution, another dynamic analysis method, has the advantage of being able to enter a branch with complex or limited entry conditions by generating input values through complex operations. However, concolic runs are very slow compared to fuzzing, making it inefficient to use concolic runs as a single analysis method.

하이브리드 퍼징은 퍼징 또는 콘콜릭 실행의 단일 실행의 단점을 보완하기 위해, 퍼징과 콘콜릭 실행을 같이 사용하는 퍼징 전략이다. 퍼징을 통해 복잡하지 않은 분기를 빠르게 탐색하고, 퍼징으로 탐색하기 힘든 복잡한 분기는 콘콜릭 실행을 통해 탐색한다.Hybrid fuzzing is a fuzzing strategy that uses fuzzing and concolic execution together to compensate for the disadvantages of single execution of fuzzing or concolic execution. Uncomplicated branches are quickly explored through fuzzing, and complex branches that are difficult to explore through fuzzing are explored through concolic execution.

하이브리드 퍼저를 사용할 때에는 사용자가 퍼징과 콘콜릭 실행 각각에 자원을 얼마나 할당할지를 미리 설정하고 퍼징을 수행하게 된다. 그러나, 테스트 대상 소프트웨어의 분기 또는 파트마다, 효율적인 탐색 방법이 다를 수 있다. 구체적으로, 한정적인 분기를 탐색할 때는 퍼징보다 콘콜릭 실행이 효율적이고, 많은 실행을 통해 테스트를 해야할 때는 콘콜릭 실행보다 퍼징이 효율적이다. 따라서, 퍼징과 콘콜릭 실행에 고정된 양의 자원을 할당 및 고정시켜 퍼징을 수행하면, 자원을 비효율적으로 사용하게 될 수 있다.When using the hybrid fuzzer, the user sets in advance how much resources to allocate to each of fuzzing and concolic execution, and performs fuzzing. However, for each branch or part of the software under test, an efficient search method may be different. Specifically, concolic execution is more efficient than fuzzing when searching for a definite branch, and fuzzing is more efficient than concolic execution when a test needs to be performed through many executions. Therefore, if fuzzing is performed by allocating and fixing a fixed amount of resources to fuzzing and concolic execution, resources may be used inefficiently.

종래에 하이브리드 퍼징을 빠르고 효율적으로 할 수 있는 QSYM이 도입되었다. 그러나, QSYM은 하이브리드 퍼징을 수행할 때, 퍼징과 콘콜릭 실행이 테스팅하는 소프트웨어에 따라, 보유하고 있는 테스트 입력에 따라, 진행 상황에 따라 각각의 효율이 달라진다는 점을 고려하지 않았다.Conventionally, QSYM, which can perform hybrid purging quickly and efficiently, has been introduced. However, when performing hybrid fuzzing, QSYM did not consider that the efficiency of fuzzing and concolic execution varies depending on the software being tested, the test inputs possessed, and the progress.

구체적으로, QSYM에 대한 평가를 진행할 때에는 퍼징에 2개, 콘콜릭 실행에 1개의 코어를 할당하여, 총 3개의 코어를 사용하도록 설정했었다. 이때, 만약 퍼저가 복잡한 분기문을 만나 오랜 시간동안 진입하지 못하는 상황이 된다면, 퍼징보다 콘콜릭 실행에 자원을 할당해주는 것이 더 효율적이다. 그러나, QSYM은 여전히 처음에 설정된 퍼징에 2개, 콘콜릭 실행에 1개의 코어를 할당하여, 주어진 자원을 효율적으로 사용하지 못하게 된다.Specifically, when evaluating QSYM, two cores were assigned to fuzzing and one core to concolic execution, so a total of three cores were set to be used. At this time, if the fuzzer encounters a complicated branch and cannot enter for a long time, it is more efficient to allocate resources to concolic execution rather than fuzzing. However, QSYM still allocates 2 cores for initially configured fuzzing and 1 core for concolic execution, resulting in inefficient use of the given resources.

QSYM은 퍼징 모듈과 경로 탐색 모듈을 이용해 하이브리드 퍼징을 진행하는 방법에 대해서만 다루고 있다. 즉, QSYM은 많은 컴퓨팅 자원을 각 장치에 어떻게 효율적으로 분배하여 사용할 것인지에 대한 내용은 다루고 있지 않다.QSYM only deals with hybrid fuzzing using a fuzzing module and a path search module. That is, QSYM does not deal with how to efficiently distribute and use many computing resources to each device.

다른 종래 기술로, 하이브리드 퍼징과 관련하여, 실행중인 복잡한 소프트웨어를 분석해 효율적으로 콘콜릭 실행을 해주는 콘콜릭 엔진인 Fuzzolic이 도입되었다. 또한, 기존에 비해 시간과 자원이 많이 들지만 정확한 정답을 계산해내는 SMT 솔버 대신, 근사값을 값싸게 계산해주는 Fuzzy-Sat을 사용하여 콘콜릭 실행을 더욱 빠르고 효율적으로 사용할 수 있는 방안도 존재했다. 그러나, 위 방안들도 콘콜릭 엔진과 퍼징에 자원을 어떻게 할당할 것인지를 고려하지 않으므로, 주어진 자원을 효율적으로 활용하지 못한다는 한계가 존재한다.As another prior art, in relation to hybrid fuzzing, fuzzolic, which is a concolic engine that analyzes complex software being executed and efficiently performs concolic execution, has been introduced. In addition, there was a way to use concolic execution more quickly and efficiently by using Fuzzy-Sat, which calculates an approximate value cheaply, instead of the SMT solver, which takes a lot of time and resources, but calculates an accurate answer. However, since the above methods do not consider how to allocate resources to the concolic engine and fuzzing, there is a limitation that given resources cannot be efficiently utilized.

위 문제점은 퍼징의 시간이 길어질수록, 주어진 자원의 양이 많을수록 더 자주 발생하게 된다. 일반적으로 하이브리드 퍼저를 사용하여 소프트웨어 테스팅을 진행할 때, 수십개의 코어를 사용하게 된다. 따라서, 동적 자원 분배 방법 및 장치의 필요성이 실용적인 측면에서 더욱 필요한 실정이다.The above problem occurs more frequently as the purging time increases and the amount of given resources increases. In general, when performing software testing using a hybrid fuzzer, dozens of cores are used. Therefore, the need for a dynamic resource distribution method and device is more needed from a practical point of view.

위 문제점을 극복하기 위해서는 퍼징을 수행하면서 퍼징과 콘콜릭 실행의 효율성을 실시간으로 파악하고 자원을 재할당하여야 한다. 그러나, 사용자가 이를 실시간으로 고려하여 자원을 할당하기에는 불가능하다. 따라서, 본원 발명은 실시간으로 퍼징과 콘콜릭 실행의 효율성을 파악하고, 동적으로 자원을 할당할 수 있는 기술에 대해 제안한다.In order to overcome the above problem, while performing fuzzing, the efficiency of fuzzing and concolic execution must be identified in real time and resources must be reallocated. However, it is impossible for the user to allocate resources considering this in real time. Therefore, the present invention proposes a technique capable of identifying the efficiency of fuzzing and concolic execution in real time and dynamically allocating resources.

도 1은 일 실시예에 따른 하이브리드 퍼징 장치의 블록도이다.1 is a block diagram of a hybrid purging device according to an embodiment.

도 1을 참조하면, 일 실시예에 따른 하이브리드 퍼징 장치(1000)는 입력부(100), 퍼징부(200), 콘콜릭부(300) 및 커버리지 분석부(400)를 포함할 수 있다. 하이브리드 퍼징 장치(1000)는 도 1의 도시에 한정되지 않고, 이보다 적거나 많은 구성 요소를 포함할 수 있다. 예를 들어, 하이브리드 퍼징 장치(1000)는 크래시 관리부(도시되지 않음)를 포함할 수 있다.Referring to FIG. 1 , a hybrid purging device 1000 according to an embodiment may include an input unit 100, a purging unit 200, a concolic unit 300, and a coverage analysis unit 400. The hybrid purging device 1000 is not limited to the illustration of FIG. 1 and may include fewer or more components than these. For example, the hybrid purging apparatus 1000 may include a crash manager (not shown).

도 1은 각각의 구성요소가 별도의 부서 또는 장치인 것으로 도시하였으나, 이에 한정되지 않고, 일부 구성요소가 하나의 장치로 구성될 수도 있다. 예를 들어, 퍼징부에 제1 입력부가 포함되거나, 콘콜릭부에 제2 입력부가 포함될 수도 있으나, 이에 한정되지 않는다.1 illustrates that each component is a separate department or device, but is not limited thereto, and some components may be configured as one device. For example, the first input unit may be included in the purging unit, or the second input unit may be included in the concolic unit, but is not limited thereto.

입력부(100)는 소프트웨어를 테스트하기 위한 입력값을 생성 및/또는 출력할 수 있다. 입력부(100)는 미리 저장된 입력 데이터에 기초하여 입력값을 출력하거나 랜덤 함수를 이용하여 무작위의 입력값을 생성 및/또는 출력할 수 있다. 또한, 입력부(100)는 미리 저장된 입력 데이터에 포함된 값들을 변형하여 새로운 입력값을 생성할 수도 있다.The input unit 100 may generate and/or output an input value for testing software. The input unit 100 may output an input value based on pre-stored input data or generate and/or output a random input value using a random function. Also, the input unit 100 may generate new input values by modifying values included in pre-stored input data.

입력부(100)는 퍼징부(200) 또는 콘콜릭부(300)로부터 퍼징 또는 콘콜릭 실행에 사용된 입력값 중 유의미한 입력값을 입력풀에 저장할 수 있다. 이때, 유의미한 입력값이란, 기존 입력값들과 중복되지 않고 새로운 커버리지를 얻을 수 있는 입력값, 기존과 같은 커버리지를 같지만 간소화되어 실행 시간을 절약할 수 있는 입력값 등 소프트웨어 테스팅에 도움이 될 수 있는 입력값일 수 있다.The input unit 100 may store significant input values among input values used for fuzzing or concolic execution from the fuzzing unit 200 or the concolic unit 300 in an input pool. At this time, a meaningful input value is an input value that can obtain new coverage without overlapping with existing input values, an input value that has the same coverage as the previous one, but is simplified and can save execution time, etc. It can be an input value.

입력부(100)의 입력풀에 저장된 입력값들은 퍼징부(200)에서 변이를 수행하기 위한 초기값으로 사용되거나, 콘콜릭부(300)의 테스트 입력값으로 사용될 수 있다.Input values stored in the input pool of the input unit 100 may be used as initial values for performing a mutation in the purging unit 200 or may be used as test input values of the concolic unit 300 .

퍼징부(200)는 테스트 대상 소프트웨어에 대해 퍼징을 실행할 수 있다. 도 1의 일 실시예는 하이브리드 퍼징 장치(1000)에 퍼징부(200)가 포함되어 있는 것을 도시하였으나, 이에 한정되지 않고 하이브리드 퍼징 장치(1000)와 별도로 퍼징부(200)가 다른 장치로 존재할 수도 있다. 퍼징부(200)는 퍼징 장치로도 명명될 수 있다.The fuzzing unit 200 may perform fuzzing on the software to be tested. 1 shows that the hybrid purging device 1000 includes the purging unit 200, but is not limited thereto, and the purging unit 200 may exist as another device separately from the hybrid purging device 1000. there is. The purging unit 200 may also be referred to as a purging device.

퍼징부(200)는 입력 지정부(210), 입력 변이부(220), 입력 실행부(230) 및 커버리지 측정부(240)를 포함할 수 있다. 그러나, 이에 한정되지 않고 퍼징부(200)는 여러 요소에 의한 작업 수행이 아닌 하나의 프로세서에 의해 작업 수행을 할 수도 있다.The purging unit 200 may include an input designation unit 210 , an input variation unit 220 , an input execution unit 230 and a coverage measuring unit 240 . However, the purging unit 200 is not limited thereto, and the purging unit 200 may perform a task by one processor rather than by several factors.

퍼징부(200)는 입력부(100)로부터 입력값을 획득할 수 있다. 입력 지정부(210)는 입력부(100)로부터 획득한 입력값들 중 제1 입력값을 지정할 수 있다. 입력 변이부(220)는 입력 지정부(210)로부터 지정된 제1 입력값을 변이시켜, 새로운 입력인 제2 입력값을 생성할 수 있다. 구체적으로, 입력 변이부(220)는 제1 입력값에 대하여 비트 전환, 바이트 전환, 부분 치환, 부분 삭제, 바이트 추가 등을 이용하여 제2 입력값을 생성할 수 있다.The purging unit 200 may obtain an input value from the input unit 100 . The input designator 210 may designate a first input value among input values obtained from the input unit 100 . The input variation unit 220 may mutate the first input value designated by the input designation unit 210 to generate a second input value that is a new input. Specifically, the input variation unit 220 may generate a second input value by using bit conversion, byte conversion, partial substitution, partial deletion, or byte addition with respect to the first input value.

퍼징부(200)의 입력 실행부(230)는 입력 변이부(220)로부터 제2 입력값을 수신하여 테스트 대상 소프트웨어에 대해 퍼징을 실행할 수 있다. 커버리지 측정부(240)는 퍼징을 실행하는 동안, 크래시 정보와 커버리지 정보를 생성할 수 있다.The input execution unit 230 of the fuzzing unit 200 may receive the second input value from the input variation unit 220 and execute fuzzing on the software under test. The coverage measurer 240 may generate crash information and coverage information while performing fuzzing.

구체적으로, 크래시 정보는 테스트 대상 소프트웨어에서 발생하는 크래시 발생 여부 및 크래시 발생시의 콜스택, 메모리 정보 등을 포함할 수 있다. 이때, 크래시는 임의의 입력값으로 인해 테스트 대상 소트프웨어에 버그가 발생하여 비정상적으로 종료하게 되는 것을 의미하는 것일 수 있다. 크래시라 발생한다면, 이는 소프트웨어의 버그를 유발하는 입력값을 찾은 것을 의미하므로, 퍼징부(200)는 이에 대한 정보를 기록할 수 있다.Specifically, the crash information may include whether or not a crash occurs in the software to be tested, and call stack and memory information when the crash occurs. At this time, the crash may mean that a bug occurs in the software to be tested due to an arbitrary input value and ends abnormally. If a crash occurs, this means that an input value causing a software bug has been found, so the fuzzing unit 200 can record information about it.

또한, 커버리지 정보는 소프트웨어가 입력값에 따라 실행되는 흐름을 나타내는 정보를 의미하는 것일 수 있다. 구체적으로, 커버리지 정보는 테스트 대상 소프트웨어에 포함된 복수의 파트 및 상기 복수의 파트 각각에 대응되는 복수의 파트값을 포함할 수 있다. 이때, 복수의 파트는 커버리지의 종류에 따라 달라질 수 있다. 예를 들어, 복수의 파트는 테스트 대상 소프트웨어의 소스 코드의 함수, 라인, 블록, 결정, 엣지, 분기 및 조건 중 적어도 하나에 의해 구별될 수 있다.Also, coverage information may refer to information indicating a flow of software being executed according to an input value. Specifically, the coverage information may include a plurality of parts included in the software to be tested and a plurality of part values corresponding to each of the plurality of parts. In this case, the plurality of parts may vary according to the type of coverage. For example, the plurality of parts may be distinguished by at least one of functions, lines, blocks, decisions, edges, branches, and conditions of the source code of the software to be tested.

구체적인 예를 들어, 소스 코드에 N개의 함수가 포함된 경우, 소프트웨어는 함수마다 파트를 나누어 N개의 파트를 포함할 수 있다. 또한, 소스 코드가 L줄의 라인으로 이루어진 경우, 소프트웨어는 라인마다 파트를 나누어 L개의 파트를 포함할 수 있다. 또한, 소스 코드에 B개의 블록이 포함된 경우, 소프트웨어는 블록마다 파트를 나누어 B개의 블록을 포함할 수 있다. 커버리지의 파트 및 파트값에 대한 구체적인 예시는 도 3을 참조하여 이하에서 설명한다.As a specific example, if N functions are included in the source code, the software may include N parts by dividing parts for each function. In addition, when the source code is composed of L lines, the software may include L parts by dividing parts for each line. In addition, when the source code includes B blocks, the software may include B blocks by dividing parts for each block. Specific examples of parts and part values of coverage will be described below with reference to FIG. 3 .

퍼징부(200)는 생성한 커버리지 정보를 커버리지 분석부(400)에 전송할 수 있다. 또한, 퍼징부(200)는 생성한 크래시 정보를 크래시 관리부(도시되지 않음)로 전송할 수 있다.The purging unit 200 may transmit the generated coverage information to the coverage analysis unit 400 . Also, the fuzzing unit 200 may transmit generated crash information to a crash management unit (not shown).

콘콜릭부(300)는 테스트 대상 소프트웨어에 대해 콘콜릭을 실행할 수 있다. 도 1의 일 실시예는 하이브리드 퍼징 장치(1000)에 콘콜릭부(300)가 포함되어 있는 것을 도시하였으나, 이에 한정되지 않고 하이브리드 퍼징 장치(1000)와 별도로 콘콜릭부(300)가 다른 장치로 존재할 수도 있다. 콘콜릭부(300)는 콘콜릭 실행 장치로도 명명될 수 있다.The concolic unit 300 may execute concolic for the software to be tested. 1 shows that the concholic unit 300 is included in the hybrid purging device 1000, but is not limited thereto, and the concholic unit 300 is transferred to another device separately from the hybrid purging device 1000. may exist The concolic unit 300 may also be named a concolic execution device.

콘콜릭부(300)는 입력 지정부(310), 콘콜릭 실행부(320) 및 커버리지 측정부(330)를 포함할 수 있다. 그러나, 이에 한정되지 않고 콘콜릭부(300)는 여러 요소에 의한 작업 수행이 아닌 하나의 프로세서에 의해 작업 수행을 할 수도 있다.The concolic unit 300 may include an input designator 310, a concolic execution unit 320, and a coverage measurement unit 330. However, the concolic unit 300 is not limited thereto, and the task may be performed by one processor rather than by several factors.

콘콜릭부(300)는 입력부(100)로부터 입력값을 획득할 수 있다. 콘콜릭부(300)의 입력 지정부(310)는 입력부(100)로부터 획득한 입력값 및 테스트 대상 소트프웨어를 분석하여, 콘콜릭 실행에 적합한 테스트 입력값을 지정할 수 있다. 구체적으로, 입력 지정부(310)는 테스트 입력의 커버리지 정보와 테스트 대상 소프트웨어의 함수 호출 그래프를 통해, 테스트 입력값이 더 도달할 수 있는 하위 블록이나 분기의 수를 파악하고, 이를 기반으로 테스트 입력을 지정할 수 있다.The concolic unit 300 may obtain an input value from the input unit 100. The input designation unit 310 of the concolic unit 300 analyzes the input value obtained from the input unit 100 and the software to be tested, and may designate a test input value suitable for concolic execution. Specifically, the input specifying unit 310 identifies the number of subblocks or branches to which the test input value can further reach through coverage information of the test input and a function call graph of the software under test, and inputs the test based on this. can be specified.

콘콜릭부(300)의 콘콜릭 실행부(320)는 입력 지정부(310)로부터 테스트 입력값을 수신하여 테스트 대상 소프트웨어에 대해 콘콜릭을 실행할 수 있다. 커버리지 측정부(330)는 콘콜릭을 실행하는 동안, 크래시 정보와 커버리지 정보를 생성할 수 있다. 크래시 정보 및 커버리지 정보에 대한 내용은 퍼징부(200)의 크래시 정보 및 커버리지 정보의 설명과 중복될 수 있어, 자세한 내용은 생략한다.The concolic execution unit 320 of the concolic unit 300 may receive a test input value from the input designator 310 and execute concolic on the software to be tested. The coverage measurement unit 330 may generate crash information and coverage information while executing concolic. Since descriptions of crash information and coverage information may overlap with descriptions of crash information and coverage information of the fuzzing unit 200, detailed descriptions thereof are omitted.

커버리지 분석부(400)는 퍼징부(200) 및 콘콜릭부(300)로부터 획득한 커버리지 정보에 기초하여, 테스트 대상 소프트웨어에 적합한 자원을 할당할 수 있다. 구체적으로, 커버리지 분석부(400)는 커버리지 정보를 분석하여, 소프트웨어의 특정 파트마다 동적인 자원 할당을 수행할 수 있다.The coverage analysis unit 400 may allocate resources suitable for the test target software based on the coverage information obtained from the fuzzing unit 200 and the concolic unit 300 . Specifically, the coverage analyzer 400 may perform dynamic resource allocation for each specific part of software by analyzing coverage information.

커버리지 분석부(400)는 커버리지 학습부(410), 자원 할당부(420) 및 커버리지 가공부(430)를 포함할 수 있다.The coverage analysis unit 400 may include a coverage learning unit 410 , a resource allocation unit 420 and a coverage processing unit 430 .

커버리지 분석부(400)는 퍼징부(200) 및 콘콜릭부(300)가 소프트웨어 테스팅을 진행할 때마다 생성되는 커버리지 정보를 실시간으로 수집할 수 있다. 구체적으로, 커버리지 분석부(400)는 테스트 대상 소프트웨어의 테스팅마다 퍼징부(200)로부터 제1 커버리지 정보 및 콘콜릭부(300)로부터 제2 커버리지 정보를 획득할 수 있다. 커버리지 정보의 획득은 커버리지 분석부(400)의 커버리지 학습부(410)가 수행할 수도 있다.The coverage analysis unit 400 may collect coverage information generated whenever the purging unit 200 and the concolic unit 300 perform software testing in real time. Specifically, the coverage analysis unit 400 may obtain first coverage information from the fuzzing unit 200 and second coverage information from the concolic unit 300 for each testing of the software to be tested. Acquisition of coverage information may be performed by the coverage learning unit 410 of the coverage analysis unit 400 .

커버리지 학습부(410)는 퍼징부(200) 및 콘콜릭부(300)로부터 획득한 커버리지 정보에 기초하여, 머신 러닝을 수행할 수 있다. 구체적으로, 커버리지 학습부(410)는 강화 학습 알고리즘을 이용하여 커버리지 정보를 학습할 수 있다. 그러나, 이에 한정되지 않고, 커버리지 학습부(410)는 강화 학습이 아닌 다른 머신 러닝 알고리즘을 사용할 수도 있다.The coverage learning unit 410 may perform machine learning based on the coverage information obtained from the purging unit 200 and the concolic unit 300 . Specifically, the coverage learning unit 410 may learn coverage information using a reinforcement learning algorithm. However, it is not limited thereto, and the coverage learning unit 410 may use a machine learning algorithm other than reinforcement learning.

커버리지 학습부(410)의 강화 학습 수행으로, 실행 시간 대비 새로 찾은 커버리지의 개수가 출력될 수 있다. 커버리지 학습부(410)는 소프트웨어 테스팅을 진행하는 동안 강화 학습 알고리즘에 의한 보상을 누적할 수 있다. 이때, 커버리지 학습부(410)는 누적된 보상을 일정 주기마다 초기화할 수 있다.As reinforcement learning is performed by the coverage learning unit 410, the number of newly found coverages compared to execution time may be output. The coverage learning unit 410 may accumulate rewards based on a reinforcement learning algorithm during software testing. At this time, the coverage learning unit 410 may initialize the accumulated compensation at regular intervals.

커버리지 학습부(410)는 강화 학습을 통한 보상 누적으로 퍼징 점수 및 콘콜릭 점수를 산출할 수 있다. 즉, 커버리지 학습부(410)의 점수 산출을 기초로, 자원 할당부(420)는 점수가 높은 테스팅 수행에 대하여 자원을 할당할 수 있다. 이때, 퍼징 점수 또는 콘콜릭 점수는 실행 시간 대비 새로 찾은 커버리지의 수에 기초하여 산출될 수 있다.The coverage learning unit 410 may calculate a fuzzing score and a concolic score by reward accumulation through reinforcement learning. That is, based on the score calculation by the coverage learning unit 410, the resource allocator 420 may allocate resources to a testing performance with a high score. In this case, the fuzzing score or the concolic score may be calculated based on the number of newly found coverages compared to the execution time.

자원 할당부(420)는 커버리지 학습부(410)에서 학습한 모델을 바탕으로 테스팅이 끝나고 반납된 자원 또는 전체 자원을 퍼징과 콘콜릭 실행 각각에 얼마나 할당할지를 결정할 수 있다. 이때, 자원은 프로세서의 코어, 시간, 메모리, 저장 장치의 용량 등이 될 수 있다.Based on the model learned by the coverage learning unit 410, the resource allocator 420 may determine how much to allocate to each of fuzzing and concolic execution the resources returned after testing or the total resources. In this case, the resource may be a core of a processor, time, memory, capacity of a storage device, and the like.

구체적으로, 자원 할당부(420)는 퍼징과 콘콜릭 실행 각각에 최소 필요 자원과 최대 할당량에 제한을 둘 수 있다. 자원 할당부(420)는 강화 학습을 통해 누적된 보상과 새로 얻은 보상을 기반으로, 퍼징과 콘콜릭 실행 중 하나에 남아있는 자원으 모두 할당하거나, 각각의 자원 할당 비율을 결정할 수 있다. 이때, 남은 자원이란 할당되지 않았던 자원 또는 테스팅 수행이 종료되어 반환된 자원일 수 있다.Specifically, the resource allocator 420 may set limits on a minimum required resource and a maximum allocation amount for each of fuzzing and concolic execution. The resource allocator 420 may allocate all remaining resources to one of fuzzing and concolic execution or determine a resource allocation ratio for each, based on a reward accumulated through reinforcement learning and a newly obtained reward. In this case, the remaining resources may be unallocated resources or resources returned after testing is completed.

예를 들어, 자원 할당부(420)는 소프트웨어의 제1 파트에 대한 퍼징 점수가 콘콜릭 점수보다 크거나 같을 경우, 상기 제1 파트에 대하여 퍼징 실행에 대한 자원을 할당할 수 있다. 또한 예를 들어, 자원 할당부(420)는 소프트웨어의 제2 파트에 대한 퍼징 점수가 콘콜릭 점수보다 작을 경우, 상기 제2 파트에 대하여 콘콜릭 실행에 대한 자원을 할당할 수 있다. 그러나, 퍼징 점수 또는 콘콜릭 점수의 상대적인 비교에 한정되지 않고, 사용자의 설정에 따라 점수의 절대값에 의해 자원의 퍼징 실행 또는 콘콜릭 실행이 정해질 수 있다.For example, when the fuzzing score of the first part of software is greater than or equal to the concolic score, the resource allocator 420 may allocate resources for fuzzing execution to the first part. Also, for example, if the fuzzing score for the second part of the software is smaller than the concolic score, the resource allocator 420 may allocate resources for concolic execution to the second part. However, the relative comparison of fuzzing scores or concolic scores is not limited, and fuzzing execution or concolic execution of a resource may be determined by an absolute value of a score according to a user's setting.

본원 발명의 하이브리드 퍼징 장치(1000)는 종래 퍼징 및 콘콜릭 실행에 초기 할당된 자원이 계속적으로 고정되어 비효율적인 자원 사용의 문제를 해결하기 위해, 실시간 커버리지 정보에 기초하여 동적인 자원 할당을 통해 자원을 효율적으로 사용할 수 있도록 한다.The hybrid fuzzing apparatus 1000 of the present invention dynamically allocates resources based on real-time coverage information to solve the problem of inefficient resource use in which resources initially allocated for conventional fuzzing and concolic execution are continuously fixed. to be used efficiently.

예를 들어, 5개의 코어가 존재할 경우, 종래는 테스팅 초기에 퍼징 실행에 3개, 콘콜릭 실행에 2개의 코어가 할당된 것을 가정한다. 종래에는 소프트웨어가 복잡한 분기문을 가졌는지 여부 등을 고려하지 않고, 3개의 코어는 퍼징 실행, 2개의 코어는 콘콜릭 실행에 할당되었다. 따라서, 복잡한 분기문을 가져 콘콜릭 실행이 유리한 소스 코드 파트에 대해서 3개의 코어는 계속적으로 퍼징을 실행했기 때문에, 제대로된 소프트웨어 테스트뿐만 아니라 효율적인 테스트가 어려웠다.For example, if there are 5 cores, it is conventionally assumed that 3 cores are allocated to fuzzing execution and 2 cores are allocated to concolic execution at the beginning of testing. Conventionally, three cores were assigned to fuzzing execution and two cores to concolic execution without considering whether or not the software had complex branching statements. Therefore, since the three cores continuously performed fuzzing on source code parts that had complex branching statements and concolic execution was advantageous, it was difficult not only to properly test software but also to test efficiently.

그러나, 본원 발명의 하이브리드 퍼징 장치(1000)는 초기에 퍼징 실행에 3개, 콘콜릭 실행에 2개의 코어가 할당되었더라도, 한 번의 실행 이후 커버리지 분석을 통해 자원을 재분배할 수 있다. 따라서, 콘콜릭 실행이 유리한 소스 코드 파트에 대해서 초기에 설정된 2개의 코어뿐만 아니라, 남은 코어(사용되지 않았거나, 실행 이후 반환된 코어)도 콘콜릭 실행이 가능할 수 있다.However, even if three cores are initially allocated to fuzzing execution and two cores are allocated to concolic execution, the hybrid fuzzing apparatus 1000 of the present invention may redistribute resources through coverage analysis after one execution. Therefore, not only the two cores initially set for the source code part for which concolic execution is advantageous, but also the remaining cores (cores that are not used or returned after execution) may be capable of concolic execution.

본원 발명의 하이브리드 퍼징 장치(1000)는 크래시 관리부(도시되지 않음)를 포함할 수 있다. 크래시 관리부는 퍼징부(200) 또는 콘콜릭부(300)로부터 소프트웨어의 실행에 대한 크래시 정보를 포함할 수 있다. 이때, 크래시 정보는 크래시 발생 유무, 크래시 발생에 대응되는 콜스택(call stack), 메모리 정보 및 크래시를 발생시킨 입력값을 포함할 수 있다.The hybrid purging device 1000 of the present invention may include a crash management unit (not shown). The crash manager may include crash information about software execution from the fuzzing unit 200 or the concolic unit 300 . In this case, the crash information may include whether a crash occurs, a call stack corresponding to the crash, memory information, and an input value that causes the crash.

입력부(100)로부터 획득하거나 변이된 입력이 크래시를 발생시킨다면, 이는 소프트웨어의 버그를 유발하는 입력값을 찾은 것을 의미하는 것일 수 있다. 따라서, 크래시 관리부는 이에 대한 정보를 기록하여 테스트 대상 소프트웨어에 대한 버그를 분석을 위한 크래시 정보를 저장할 수 있다.If an input acquired or mutated from the input unit 100 causes a crash, this may mean that an input value causing a software bug has been found. Accordingly, the crash management unit may record this information and store crash information for analyzing bugs in the software to be tested.

도 2는 일 실시예에 따른 하이브리드 퍼징 장치의 자원 할당 방법의 순서도이다.2 is a flowchart of a resource allocation method of a hybrid purging apparatus according to an embodiment.

도 2를 참조하면, 일 실시예에 따른 자원 할당 방법은 초기 입력 지정 및 자원을 할당하는 단계(S110), 퍼징 및 콘콜릭 실행 단계(S120), 커버리지 정보를 획득하는 단계(S130), 커버리지에 대해 머신 러닝을 수행하는 단계(S140) 및 머신 러닝 결과값에 기초하여 자원을 할당하는 단계(S150)를 포함할 수 있다.Referring to FIG. 2 , the resource allocation method according to an embodiment includes initial input designation and resource allocation (S110), fuzzing and concolic execution (S120), coverage information acquisition (S130), coverage It may include performing machine learning on (S140) and allocating resources based on the machine learning result (S150).

초기 입력 지정 및 자원을 할당하는 단계(S110)는 커버리지 정보를 획득하기 위한 초기 테스트 실행을 위해, 초기 입력을 지정하고 자원을 할당하는 단계일 수 있다. 지정된 초기 입력은 미리 저장된 입력일 수도 있고, 무작위로 생성된 입력일 수도 있다.The step of designating an initial input and allocating resources (S110) may be a step of designating an initial input and allocating resources for initial test execution for obtaining coverage information. The designated initial input may be a pre-stored input or a randomly generated input.

하이브리드 퍼징 장치(1000)의 프로세서는 초기에 퍼징과 콘콜릭 실행에 사용자의 설정에 따라 초기 자원을 할당할 수 있다. 예를 들어, 자원이 3개의 프로세서인 경우, 2개의 프로세서는 퍼징을, 1개의 프로세서는 콘콜릭 실행을 수행하도록 초기 자원을 할당할 수 있다. 이때, 퍼징과 콘콜릭 실행에는 같은 입력값이 사용될 수도 있고, 상이한 입력값이 사용될 수도 있다.The processor of the hybrid fuzzing apparatus 1000 may initially allocate initial resources to fuzzing and concolic execution according to user settings. For example, when resources are three processors, initial resources may be allocated so that two processors perform fuzzing and one processor performs concolic execution. At this time, the same input value may be used for fuzzing and concolic execution, or different input values may be used.

퍼징 및 콘콜릭 실행 단계(S120)는 단계 S110에서 할당된 자원 및 입력값에 기초하여 퍼징부(200) 및 콘콜릭부(300)에 의해 테스트 대상 소프트웨어에 대한 퍼징 및 콘콜릭 실행이 수행되는 단계일 수 있다. 수행 과정에서 실시간으로 커버리지 정보가 생성되고, 생성된 커버리지 정보는 커버리지 분석부(400)로 전송될 수 있다.The fuzzing and concolic execution step (S120) is a step in which fuzzing and concolic execution are performed on the software to be tested by the fuzzing unit 200 and the concolic unit 300 based on the resources and input values allocated in step S110. can be During the execution process, coverage information may be generated in real time, and the generated coverage information may be transmitted to the coverage analyzer 400 .

커버리지 정보를 획득하는 단계(S130)는 커버리지 분석부(400)가 퍼징부(200) 또는 콘콜릭부(300)로부터 실시간으로 커버리지 정보를 획득하는 단계일 수 있다.Acquiring coverage information (S130) may be a step in which the coverage analysis unit 400 obtains coverage information from the purging unit 200 or the concolic unit 300 in real time.

커버리지에 대해 머신 러닝을 수행하는 단계(S140)는 커버리지 학습부(410)가 퍼징부(200) 또는 콘콜릭부(300)로부터 획득한 커버리지 정보에 대하여 머신 러닝을 수행하는 단계일 수 있다. 구체적으로, 커버리지 학습부(410)는 커버리지 정보에 기초하여 강화 학습을 수행할 수 있다.The step of performing machine learning on the coverage ( S140 ) may be a step in which the coverage learning unit 410 performs machine learning on the coverage information obtained from the fuzzing unit 200 or the concolic unit 300 . Specifically, the coverage learning unit 410 may perform reinforcement learning based on coverage information.

머신 러닝 결과값에 기초하여 자원을 할당하는 단계(S150)는 자원 할당부(420)가 커버리지 학습부(410)의 강화 학습 결과에 기초하여 남은 자원을 퍼징부(200) 또는 콘콜릭부(300)로 할당하는 단계일 수 있다. 이때, 남은 자원은 단계 S110에서 초기 자원으로 할당되지 않은 자원이나, 테스팅 종료 후 반환된 자원을 의미하는 것일 수 있다.In the step of allocating resources based on the machine learning result value (S150), the resource allocation unit 420 allocates the remaining resources based on the reinforcement learning result of the coverage learning unit 410 to the purging unit 200 or the concolic unit 300. ). In this case, the remaining resources may mean resources not allocated as initial resources in step S110 or resources returned after testing is finished.

할당된 자원은 할당된 내용을 기초로 퍼징 및 콘콜릭 실행을 수행(S120)할 수 있다. 하이브리드 퍼징 장치(1000)는 퍼징 및 콘콜릭 실행에 대하여 계속적으로 커버리지 정보를 분석/학습하여 동적인 자원 할당을 수행한다.The allocated resource may perform fuzzing and concolic execution based on the allocated content (S120). The hybrid fuzzing apparatus 1000 performs dynamic resource allocation by continuously analyzing/learning coverage information for fuzzing and concolic execution.

단계 S120 내지 S150의 과정은 사용자의 종료 요청 또는 저장 용량 등의 자원이 고갈되기 전까지 수행될 수 있다. 또한 해당 과정은 처음 퍼저를 실행할 때 사용자가 종료 시각 또는 타임 아웃을 설정해 놓았을 경우, 설정에 따라 종료될 수 있다.The processes of steps S120 to S150 may be performed until a user requests termination or resources such as storage capacity are exhausted. In addition, if the user has set an end time or timeout when the fuzzer is executed for the first time, the corresponding process may be terminated according to the setting.

도 3은 일 실시예에 따른 커버리지 정보를 설명하기 위한 도면이다.3 is a diagram for explaining coverage information according to an exemplary embodiment.

도 3(a)는 일반적인 커버리지 정보의 예시를 나타낸 도면이고, 도 3(b)는 도 3(a)의 커버리지 정보가 간략화된 것을 나타낸 도면이다.3(a) is a diagram showing an example of general coverage information, and FIG. 3(b) is a diagram showing simplified coverage information of FIG. 3(a).

도 3(a)을 참조하면, 커버리지 정보는 각 파트마다 몇 번 실행되었는지를 나타내는 파트값을 포함할 수 있다. 구체적인 예를 들어, 소스 코드에 B개의 블록이 포함된 경우, 소프트웨어는 B개의 파트를 포함한다. 이때, B개의 파트 중 제1 파트가 10번 실행되었고, 제2 파트가 10번 실행되었고, 제3 파트가 8번 실행된 경우, 커버리지 정보는 제1 파트에 대응되는 제1 파트값인 10, 제2 파트에 대응되는 제2 파트값인 8, 제3 파트에 대응되는 제3 파트값인 8을 포함할 수 있다.Referring to FIG. 3(a), the coverage information may include a part value indicating how many times each part has been executed. As a specific example, if the source code includes B blocks, the software includes B parts. At this time, if the first part of the B parts is executed 10 times, the second part is executed 10 times, and the third part is executed 8 times, the coverage information is 10, which is the first part value corresponding to the first part, A second part value of 8 corresponding to the second part and a third part value of 8 corresponding to the third part may be included.

도 3(b)를 참조하면, 커버리지 정보는 파트값만을 포함하도록 간략화될 수 있다. 도 3(a)와 같은 커버리지 정보는 사용자가 보기에 간편하다는 장점이 있으나, 크기 및 속도에 대해 단점이 존재할 수 있다. 구체적으로, 도 3(a)는 파일에 기록해야 하는 정보가 많기 때문에 실행 속도가 느려지고, 프로그램이 커질수록 커버리지 정보를 저장하는 파일의 크기도 커지게 된다는 단점이 존재한다.Referring to FIG. 3(b), coverage information may be simplified to include only part values. The coverage information as shown in FIG. 3(a) has the advantage of being easy for the user to view, but may have disadvantages in terms of size and speed. Specifically, in FIG. 3(a), since there is a lot of information to be recorded in the file, the execution speed slows down, and as the program grows, the size of the file storing the coverage information also increases.

도 3(b)은 커버리지 정보가 파트값만을 저장하는 예시로, 이를 통해 속도는 향상되고, 파일의 크기는 감소할 수 있다. 도 3(b)의 간략화된 커버리지 정보는 이를 해석해주는 별도의 도구를 통해 다시 도 3(a)와 같은 형태로 변형이 가능하다.3(b) is an example in which only part values are stored in the coverage information, and through this, the speed can be improved and the size of the file can be reduced. The simplified coverage information of FIG. 3 (b) can be transformed into the form shown in FIG. 3 (a) again through a separate tool that interprets it.

커버리지 정보는 속도 향상 및 크기 감소를 위해 도 3(b)에서 더 나아가 사용자가 판단하기 힘든 문자(non-printable)를 포함하여 더 간략화될 수 있다. 이는 아래 도 4를 참조하여 설명한다.Coverage information may be further simplified by including non-printable characters that are difficult for a user to determine, further from FIG. 3(b), for speed improvement and size reduction. This will be explained with reference to FIG. 4 below.

도 4는 일 실시예에 따른 커버리지의 가공을 설명하기 위한 도면이다.4 is a diagram for explaining processing of coverage according to an exemplary embodiment.

도 4(a)는 non-printable 문자를 포함하는 커버리지 정보의 예시를 나타내는 도면이고, 도 4(b)는 도 4(a)를 가공하여 생성된 printable 문자를 포함하는 커버리지 정보의 예시를 나타내는 도면이다.4(a) is a diagram showing an example of coverage information including non-printable characters, and FIG. 4(b) is a diagram showing an example of coverage information including printable characters generated by processing FIG. 4(a). to be.

도 4(a)를 참조하면, 커버리지 정보는 효율적인 저장을 위해 바이트 단위 또는 비트 단위로 저장하기 때문에, 사람이 읽기 힘든 문자(non-printable 문자)를 포함할 수 있다. Non-printable 문자를 포함하는 커버리지 정보는 컴퓨팅 측면에서 매우 효율적일 수 있다. 그러나, 가끔 사용자의 요청으로 커버리지 정보 확인이 필요한 경우가 존재할 수 있다. 따라서, non-printable 문자를 사람이 확인할 수 있는 문자로 가공하는 작업이 필요하다.Referring to FIG. 4(a), since coverage information is stored in units of bytes or bits for efficient storage, it may include characters that are difficult for humans to read (non-printable characters). Coverage information containing non-printable characters can be very efficient in terms of computing. However, sometimes there may be a case where it is necessary to check coverage information at the user's request. Therefore, it is necessary to process non-printable characters into human-readable characters.

커버리지 분석부(400)는 non-printable 문자를 포함하는 커버리지 정보를 가공하기 위해 커버리지 가공부(430)를 포함할 수 있다. 커버리지 가공부(430)는 non-printable 문자를 포함하는 커버리지를 해석하는 도구를 포함하고, 해석 후 printable 문자를 생성하는 도구를 포함할 수 있다.The coverage analysis unit 400 may include a coverage processing unit 430 to process coverage information including non-printable characters. The coverage processing unit 430 may include a tool for analyzing coverage including non-printable characters and a tool for generating printable characters after analysis.

도 4(b)를 참조하면, 커버리지 가공부(430)는 non-printable 문자를 포함하는 커버리지 정보를 가공하여 printable 문자를 포함하는 커버리지 정보를 생성할 수 있다. 따라서, 사용자는 커버리지 가공부(430)를 통해 커버리지 정보를 인식할 수 있다.Referring to FIG. 4(b) , the coverage processing unit 430 may process coverage information including non-printable characters to generate coverage information including printable characters. Accordingly, the user can recognize coverage information through the coverage processing unit 430 .

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

이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.As described above, although the embodiments have been described with limited examples and drawings, those skilled in the art can make various modifications and variations from the above description. For example, the described techniques may be performed in an order different from the method described, and/or components of the described system, structure, device, circuit, etc. may be combined or combined in a different form than the method described, or other components may be used. Or even if it is replaced or substituted by equivalents, appropriate results can be achieved.

그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.Therefore, other implementations, other embodiments, and equivalents of the claims are within the scope of the following claims.

Claims (11)

소프트웨어에 대해 퍼징(fuzzing)을 실행하도록 구성된 퍼징부;
상기 소프트웨어에 대해 콘콜릭(concolic)을 실행하도록 구성된 콘콜릭부;
상기 퍼징부로부터 상기 소프트웨어의 퍼징 실행 결과에 대한 제1 커버리지 정보 및 상기 콘콜릭부로부터 상기 소프트웨어의 콘콜릭 실행 결과에 대한 제2 커버리지 정보를 수신하는 커버리지 분석부;
상기 소프트웨어의 실행에 대한 입력값을 제공하는 입력부; 및
상기 퍼징부 또는 상기 콘콜릭부로부터 상기 소프트웨어의 실행에 대한 크래시 정보를 획득하는 크래시 관리부를 포함하고,
상기 커버리지 분석부는 상기 제1 커버리지 정보 및 상기 제2 커버리지 정보에 기초하여 머신 러닝을 수행하는 커버리지 학습부를 포함하고,
상기 커버리지 분석부는 상기 커버리지 학습부의 결과값에 기초하여 상기 소프트웨어에 대해 퍼징을 실행할지 또는 콘콜릭을 실행할지 여부를 결정하고,
상기 결과값은 상기 소프트웨어에 대한 퍼징 점수 및 콘콜릭 점수를 포함하고,
상기 제1 커버리지 정보 또는 상기 제2 커버리지 정보는 상기 소프트웨어에 포함된 복수의 파트 및 상기 복수의 파트 각각에 대응되는 복수의 파트값을 포함하고,
상기 커버리지 학습부는 상기 복수의 파트값에 기초하여 상기 복수의 파트 각각에 대한 퍼징 점수 및 콘콜릭 점수를 산출하고,
상기 커버리지 분석부는, 상기 소프트웨어의 제1 파트에 대한 퍼징 점수가 콘콜릭 점수보다 크거나 같을 경우 상기 제1 파트의 퍼징 실행과 관련된 제1 신호를 상기 퍼징부에 전송하고, 상기 제1 파트에 대한 퍼징 점수가 콘콜릭 점수보다 작은 경우 상기 제1 파트의 콘콜릭 실행과 관련된 제2 신호를 상기 콘콜릭부에 전송하는 자원 할당부를 포함하고,
상기 복수의 파트는 상기 소프트웨어의 소스 코드의 함수, 라인, 블록, 결정, 엣지, 분기 및 조건 중 적어도 하나에 의해 구별되고,
상기 커버리지 분석부는, 사용자가 인식가능한 문자 데이터를 출력하기 위해 상기 제1 커버리지 정보 또는 상기 제2 커버리지 정보를 처리하는 커버리지 가공부를 포함하고,
상기 크래시 관리부는 상기 퍼징부 또는 상기 콘콜릭부로부터 크래시 발생에 대한 신호를 수신한 경우, 크래시 발생에 대응되는 콜스택(call stack), 메모리 정보 및 상기 입력부로부터 제공받은 입력값을 저장하는
하이브리드 퍼징 장치.
a fuzzing unit configured to perform fuzzing on software;
a concolic unit configured to execute concolic on the software;
a coverage analyzer configured to receive first coverage information on a result of fuzzing execution of the software from the fuzzing unit and second coverage information on a result of concolic execution of the software from the concolic unit;
an input unit providing input values for execution of the software; and
A crash management unit for obtaining crash information about the execution of the software from the fuzzing unit or the concolic unit;
The coverage analysis unit includes a coverage learning unit that performs machine learning based on the first coverage information and the second coverage information;
The coverage analysis unit determines whether to execute fuzzing or concolic on the software based on a result value of the coverage learning unit,
The resulting value includes a fuzzing score and a concolic score for the software,
The first coverage information or the second coverage information includes a plurality of parts included in the software and a plurality of part values corresponding to each of the plurality of parts,
The coverage learning unit calculates a fuzzing score and a concolic score for each of the plurality of parts based on the values of the plurality of parts,
The coverage analysis unit transmits a first signal related to fuzzing execution of the first part to the fuzzing unit when the fuzzing score of the first part of the software is greater than or equal to the concolic score, and A resource allocator for transmitting a second signal related to the concolic execution of the first part to the concolic unit when the fuzzing score is less than the concolic score;
The plurality of parts are distinguished by at least one of functions, lines, blocks, decisions, edges, branches, and conditions of the source code of the software,
The coverage analysis unit includes a coverage processing unit that processes the first coverage information or the second coverage information to output character data recognizable by a user;
When the crash management unit receives a signal about the occurrence of a crash from the fuzzing unit or the concolic unit, storing a call stack corresponding to the occurrence of the crash, memory information, and an input value provided from the input unit
Hybrid purging device.
삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete
KR1020220037001A 2022-03-25 2022-03-25 Hybrid fuzzing device capable of dynamic resource distribution KR102483489B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220037001A KR102483489B1 (en) 2022-03-25 2022-03-25 Hybrid fuzzing device capable of dynamic resource distribution

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220037001A KR102483489B1 (en) 2022-03-25 2022-03-25 Hybrid fuzzing device capable of dynamic resource distribution

Publications (1)

Publication Number Publication Date
KR102483489B1 true KR102483489B1 (en) 2022-12-30

Family

ID=84538857

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220037001A KR102483489B1 (en) 2022-03-25 2022-03-25 Hybrid fuzzing device capable of dynamic resource distribution

Country Status (1)

Country Link
KR (1) KR102483489B1 (en)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200144051A (en) * 2019-06-17 2020-12-28 바이두 유에스에이 엘엘씨 A vulnerability driven hybrid test system for application programs
KR102304861B1 (en) * 2021-03-30 2021-09-23 세종대학교산학협력단 Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing
KR102353190B1 (en) * 2020-08-21 2022-01-20 국방과학연구소 Electronic device for program test and test method thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200144051A (en) * 2019-06-17 2020-12-28 바이두 유에스에이 엘엘씨 A vulnerability driven hybrid test system for application programs
KR102353190B1 (en) * 2020-08-21 2022-01-20 국방과학연구소 Electronic device for program test and test method thereof
KR102304861B1 (en) * 2021-03-30 2021-09-23 세종대학교산학협력단 Apparatus and method for detecting firmware vulnerabiliry based on hybrid fuzzing

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Yunsam Kim, Moonju Kim, "Unit Testing Automation Technology Combining Concolic Testing and Fuzzing", Korea Information Science Society, Korea Software Engineering Conference (KCSE2022), (2022.1.20.)* *
김윤삼, 김문주, "Concolic 테스팅과 Fuzzing을 결합한 유닛 테스팅 자동화 기술",한국정보과학회, 한국 소프트웨어공학 학술대회(KCSE2022),(2022.1.20.)*

Similar Documents

Publication Publication Date Title
US10872034B2 (en) Method, device and computer program product for executing test cases
CN106294120B (en) Method, apparatus and computer program product for testing code
JP5845809B2 (en) Efficient parallelization of software analysis in distributed computing environment by intelligent and dynamic load balancing
US9767006B2 (en) Deploying trace objectives using cost analyses
US20150301920A1 (en) Optimization analysis using similar frequencies
JP5845812B2 (en) Policy scheduling for efficient parallelization of software analysis in distributed computing environments
US20100180255A1 (en) Programmable framework for automatic tuning of software applications
US20110209157A1 (en) Resource allocation method, program, and resource allocation apparatus
JP5845813B2 (en) A node computation initialization method for efficient parallel analysis of software in distributed computing environments
US9134997B2 (en) Methods for assessing deliverable product quality and devices thereof
JP5845811B2 (en) Dynamic and intelligent partial computation management for efficient parallelization of software analysis in distributed computing environments
US8555290B2 (en) Apparatus and method for dynamic control of the number of simultaneously executing tasks based on throughput
US9594662B2 (en) Automated instrumentation of applications
JP5845810B2 (en) Efficient partial computation for parallel analysis of software in distributed computing environments
US11726893B2 (en) System for automatically evaluating a change in a large population of processing jobs
CN113923002B (en) Computer network intrusion prevention method, device, storage medium and processor
KR102483489B1 (en) Hybrid fuzzing device capable of dynamic resource distribution
CN114328213A (en) Parallelization fuzzy test method and system based on target point task division
CN110737509B (en) Thermal migration processing method and device, storage medium and electronic equipment
US20110239197A1 (en) Instance-based field affinity optimization
CN111142898B (en) Data anti-leakage terminal upgrading method and system based on group intelligent mode
KR102155846B1 (en) Method and apparatus for sampling inspection using the rate of return of previous work
CN111858307B (en) Fuzzy test method and equipment
CN111506422B (en) Event analysis method and system
CN110442508B (en) Test task processing method, device, equipment and medium

Legal Events

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