KR102353187B1 - 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치 - Google Patents

퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치 Download PDF

Info

Publication number
KR102353187B1
KR102353187B1 KR1020200102581A KR20200102581A KR102353187B1 KR 102353187 B1 KR102353187 B1 KR 102353187B1 KR 1020200102581 A KR1020200102581 A KR 1020200102581A KR 20200102581 A KR20200102581 A KR 20200102581A KR 102353187 B1 KR102353187 B1 KR 102353187B1
Authority
KR
South Korea
Prior art keywords
seed
scheduling
seeds
branch
order
Prior art date
Application number
KR1020200102581A
Other languages
English (en)
Inventor
박필근
신찬호
정승훈
강태인
Original Assignee
국방과학연구소
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 국방과학연구소 filed Critical 국방과학연구소
Priority to KR1020200102581A priority Critical patent/KR102353187B1/ko
Application granted granted Critical
Publication of KR102353187B1 publication Critical patent/KR102353187B1/ko

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/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2294Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing by remote test
    • 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/3636Software debugging by tracing the execution of the program
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 발명은 퍼징에서 시드를 스케줄링 하는 방법에 있어서, 제1 시드를 제1 시드 집합으로 스케줄링하는 단계; 제1 시드 집합을 기초로 브랜치를 탐색하는 제1 탐색 단계; 제1 시드와 제1 시드로부터 파생되고 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하는, 시드 스케줄링 방법 및 장치를 제공한다.

Description

퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치{Method And Apparatus For Scheduling Seed File In Fuzzing}
본 발명은 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치에 관한 발명으로, 보다 구체적으로는, 주어진 초기 시드 및 퍼징 과정에서 생성되는 시드들을 스케줄링하여 퍼징 과정에 있어 기존 퍼저 대비 일정시간 내 더 많은 코드 커버리지를 확보하는 시드 파일 스케줄링 방법 및 장치에 관한 것이다.
최근 들어 스마트 디바이스와 IoT 기기 등 인터넷과 연결되는 기기들의 확산으로 인해 소프트웨어의 공격 요소들이 증가하고 있으며, 이에 따라 기기 및 소프트웨어의 취약점을 찾는 것은 갈수록 중요해지고 있다. 현재 취약점을 찾는 여러 가지 방법 중 많이 사용하는 방법으로 퍼징(Fuzzing)이라는 방법이 알려져 있다. 이 기술은 컴퓨터가 랜덤을 포함한 여러 방법으로 만들어낸 예측하기 힘든 비정상 입력 값을 기기에 주고, 기기가 해당 값을 취약점 없이 잘 처리하는지 확인하는 방식으로 이루어진다. 특히, 퍼징은 대상이 되는 프로그램에 대해 자세한 이해가 없더라도 취약점을 유발시킬 수 있는 단순성과 낮은 성능으로도 실행시킬 수 있다는 장점 아래 많은 실제 프로그램에서 여러 유형의 보안 취약점을 찾아왔다.
퍼징은 그 공격 기법이나 방식, 대상에 따라 다양한 유형으로 구분될 수 있다. 퍼징 대상만 하더라도 파일 포맷, 네트워크 프로토콜, 변수, 웹 애플리케이션 등 매우 다양할 수 있다. 이 중 퍼징을 위한 입력 값을 어떻게 조절하는지에 따라 크게 두가지 방식인 변이(mutation) 기반 퍼징과 생성(generation) 기반 퍼징으로 나눠질 수 있다. 변이 기반 퍼징은 주어진 입력 값을 무작위로 변이하면서 새로운 입력 값을 만들어내 입력하는 방식이다. 이러한 방식은 대상이 되는 데이터의 형식이나 구조에 대한 이해가 어려울 때 사용되는 방식이다. 변이 기반 퍼징에는 특정 비트 값을 일정한 주기 혹은 무작위로 반전하여 변이하는 기법과 비트열을 무작위로 자르거나 이들을 조합함으로써 변이하는 기법이 있을 수 있다. 생성 기반 퍼징은 파일의 형식이나 프로토콜을 이해하고 그것에 맞추어 적절한 입력 값을 생성하는 방식이다. 생성 기반 퍼징은 변이 기반 퍼징보다 시간이 소요되나 더 넓은 코드 커버리지를 가질 수 있다.
일반적으로, 퍼징 성능은 통계적 이론을 바탕으로 하여 적절한 시드 선택, 퍼징 실행 및 충돌 분석 등의 작업을 효율적으로 스케줄링하여 향상시킬 수 있다. 특히, 입력 값과 입력 값이 프로그램에 입력되는 순서에 따라 퍼징의 효율이 달라지게 된다. 그러나, 기존의 퍼저들(예를 들어, AFL(American Fuzzy Lop) 퍼저 등)은 퍼징을 실행하는 과정에서 시드를 입력 받은 순서 그대로 선입선출(FIFO; First In First Out) 방식으로 사용할 뿐 적절한 시드 스케줄링을 하지 않아, 일정 시간 내 더 많은 커버리지를 확보하는 데에 논의와 연구가 필요하다.
본 실시 예가 해결하고자 하는 과제는, 퍼징 시작 전에 주어진 시드들과 퍼징 과정에서 생성되는 시드들을 스케줄링하여 퍼징 과정에 있어 기존 퍼저 대비 일정시간 내 더 많은 커버리지를 확보하는 시드 파일을 스케줄링 하는 방법 및 장치를 제공하는 데 있다.
본 실시 예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시 예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 실시 예에 따른 시드 스케줄링 방법은, 제1 시드를 제1 시드 집합으로 스케줄링하는 단계; 상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계; 상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및 상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함할 수 있다.
일 실시 예에 따른 시드 스케줄링 장치는, 시드를 정렬하여 스케줄링하는 스케줄링부; 및 정렬된 시드를 이용하여 브랜치 탐색을 수행하는 탐색부를 포함하고, 상기 스케줄링부는, 제1 시드를 제1 시드 집합으로 스케줄링하고, 상기 탐색부는, 상기 제1 시드 집합을 기초로 브랜치를 탐색하고, 상기 스케줄링부는, 상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 시드 집합을 기초로 하는 브랜치 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하고, 상기 탐색부는, 상기 제2 시드 집합을 기초로 상기 브랜치의 탐색을 진행하도록 구성될 수 있다.
일 실시 예에 따른 시드를 스케줄링 하는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적 기록매체로서, 상기 퍼징에서 시드를 스케줄링 하는 방법은, 제1 시드를 제1 시드 집합으로 스케줄링하는 단계; 상기 제1 시드 집합을 기초로 브랜치를 탐색하는 제1 탐색 단계; 상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및 상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함할 수 있다.
기타 실시 예들의 구체적인 사항들은 상세한 설명 및 도면들에 포함되어 있다.
본 개시에 따르면, 시드 스케줄링 방법 및 장치는 퍼징 시작 전에 주어진 시드들과 퍼징 과정에서 생성되는 시드들을 스케줄링하여 퍼징 과정에 있어 기존 퍼저 대비 일정시간 내 더 많은 커버리지를 확보할 수 있다.
또한, 본 개시의 시드 스케줄링 방법 및 장치는 소스 코드에 대해 더 많은 커버리지 및 브랜치 탐색 경로 수를 확보할 수 있다. 특히, 기존 퍼저 대비 5% 이상의 커버리지를 더 확보할 수 있다. 이로 인하여, 대상 소프트웨어의 크래시(crash)를 발견할 확률을 높일 수 있으며, 해당 소프트웨어의 보안성을 효율적으로 강화할 수 있다.
발명의 효과는 이상에서 언급한 효과로 제한되지 않으며, 언급되지 않은 또 다른 효과들은 청구범위의 기재로부터 당해 기술 분야의 통상의 기술자에게 명확하게 이해될 수 있을 것이다.
도 1은 일 실시 예에 따른 시드 스케줄링 방법의 흐름도이다.
도 2는 일 실시 예에 따른 시드 스케줄링 방법의 첫번째 예의 흐름도이다.
도 3은 일 실시 예에 따른 시드 스케줄링 방법의 첫번째 예를 도식화한 그림이다.
도 4는 일 실시 예에 따른 시드 스케줄링 방법의 두번째 예의 흐름도이다.
도 5는 일 실시 예에 따른 시드 스케줄링 방법의 두번째 예를 도식화한 그림이다.
도 6은 일 실시 예에 따른 시드 스케줄링 방법의 세번째 예의 흐름도이다.
도 7은 일 실시 예에 따른 시드 스케줄링 방법의 세번째 예를 도식화한 그림이다.
도 8는 일 실시 예에 따른 시드 스케줄링 장치의 기능 블록도이다.
실시 예들에서 사용되는 용어는 본 개시에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 개시에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 개시의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에 기재된 "...부", "...모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
명세서 전체에서 기재된 “a, b, 및 c 중 적어도 하나”의 표현은, 'a 단독', 'b 단독', 'c 단독', 'a 및 b', 'a 및 c', 'b 및 c', 또는 'a, b, 및 c 모두'를 포괄할 수 있다.
이하에서 언급되는 "단말"은 네트워크를 통해 서버나 타 단말에 접속할 수 있는 컴퓨터나 휴대용 단말로 구현될 수 있다. 여기서, 컴퓨터는 예를 들어, 웹 브라우저(WEB Browser)가 탑재된 노트북, 데스크톱(desktop), 랩톱(laptop) 등을 포함하고, 휴대용 단말은 예를 들어, 휴대성과 이동성이 보장되는 무선 통신 장치로서, IMT(International Mobile Telecommunication), CDMA(Code Division Multiple Access), W-CDMA(W-Code Division Multiple Access), LTE(Long Term Evolution) 등의 통신 기반 단말, 스마트폰, 태블릿 PC 등과 같은 모든 종류의 핸드헬드(Handheld) 기반의 무선 통신 장치를 포함할 수 있다.
아래에서는 첨부한 도면을 참고하여 본 개시의 실시 예에 대하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다. 이하에서는 도면을 참조하여 본 개시의 실시 예들을 상세히 설명한다.
도 1은 일 실시 예에 따른 시드 스케줄링 방법의 흐름도이다. 본 발명에서 언급되는 시드 또는 시드 파일은 퍼징 입력 값을 의미한다.
단계 S101에서 제1 시드를 제1 시드 집합으로 스케줄링 할 수 있다. 이 때의 제1 시드는 초기 시드로서, 퍼징 시작 전에 주어진 시드일 수 있고, 제1 시드 집합은 시드 큐(queue)를 의미할 수 있다. 일 실시 예로, 제1 시드는 해당 시드가 입력 값으로 선택된 순으로 배열될 수 있다. 또는, 제1 시드는 파일 크기 순으로 배열될 수 있다. 예를 들어, 초기 시드 값이 파일 크기가 작은 순으로 정렬될 수 있다.
단계 S102에서 제1 시드 집합을 기초로 브랜치를 탐색할 수 있다. 여기서, 브랜치를 탐색하는 것은 제1 시드를 변이하여 시드를 파생하는 과정을 의미할 수 있다. 또한, 브랜치를 탐색하는 중 새로운 시드가 발견될 수 있으며, 새로운 시드를 발견하는 브랜치를 새로운 브랜치라고 할 수 있다. 일 실시 예에 따르면, 새로운 시드가 발견될 때까지, 파생된 시드를 변이하여 브랜치의 탐색을 계속할 수 있다.
단계 S103에서 제1 시드와 제2 시드를 제2 시드 집합으로 스케줄링 할 수 있다. 일 실시 예에 따르면 제2 시드는 S102에서 새로운 시드가 발견되는 브랜치를 탐색한 시드이다. 또한, 제2 시드는 제1 시드로부터 파생된 시드이며, 이는 제1 시드로부터 직접적으로 파생된 시드일 수 있으나, 새로운 브랜치의 탐색을 위하여 제1 시드에 기원(origin)을 가지고 파생된 시드일 수 있다. 한편, 단계 S103에 의하여 제1 시드 집합이 제2 시드 집합에 포함되며, 제1 시드 집합에서의 정렬이 유지되거나 제2 시드의 추가로 인하여 재정렬 될 수도 있다. 이와 관련하여 이하 구체적인 실시 예에 관한 도 2 내지 7에서 자세히 설명하도록 한다.
단계 S104에서는 단계 S103에서 스케줄링 된 제2 시드 집합을 기초로 브랜치의 탐색을 계속할 수 있다. 이는 단계 S102에서와 마찬가지로 새로운 브랜치를 발견하기 위한 탐색을 진행하기 위한 것이다. 즉, 제2 시드를 변이하여 파생된 시드를 기초로 새로운 브랜치를 탐색할 수 있다. 이에 따라, 일 실시 예에 따른 시드 스케줄링 방법에 기초한 퍼징은 퍼징이 종료되는 때까지 시드의 변이와 파생을 반복하며 새로운 브랜치를 탐색할 수 있다. 브랜치의 탐색은 무한으로 진행될 수 있으며, 사용자에 의한 종료가 있을 때까지 반복될 수 있다.
일 실시 예에 따르면, 브랜치를 탐색하는 과정에서 시드 당 변이를 종료하는 시기는 시드 파일의 사이즈와 연산의 수에 따라 달라질 수 있다. 이는 사용자가 사전 설정한 시간 또는 사용자가 지정한 변이 과정을 모두 거친 경우 등에 따라 전자 기기(예를 들어, 컴퓨터)의 제어부가 특정 시드에 대한 브랜치 탐색 종료 여부를 판단할 수 있다.
이와 같은 도1의 시드 스케줄링 방법의 각 단계는 본 발명의 시드 스케줄링 장치에 의해 수행될 수 있다. 또한, 본 발명의 시드 스케줄링 방법은 초기 시드와 퍼징 수행 중에 파생되는 시드를 스케줄링하여 퍼징을 수행하는 것에 관하며, 이에 대하여 다음 도 2 내지 7을 참조하여 설명하도록 한다.
도 2는 일 실시 예에 따른 시드 스케줄링 방법의 첫번째 예의 흐름도이고, 도 3은 그러한 예시를 도식화한 그림이다.
본 발명의 시드 스케줄링 방법의 일 예로, 먼저, 초기 시드를 시드 큐에서 스케줄링할 수 있다(S201). 단계 S201에서 초기 시드는 생성 순서대로 정렬될 수 있다. 본 발명의 시드 스케줄링 방법은 변이 기반 퍼징을 전제로 하여, 시드를 변이하여 파생된 시드들을 이용하여 브랜치를 탐색할 수 있다. 이에 따라, 초기 시드에서 파생된 시드 중 단계 S201에서 새로운 브랜치를 탐색한 시드에 대해 다음 시드 그룹의 제일 앞쪽에 위치시킬 수 있다(S202). 이 때 다음 시드 그룹이란 스택(stack)을 의미하며, 가장 먼저 입력된 값이 가장 나중에 출력되는 선입후출(First In Last Out; FILO) 방식을 수행할 수 있다. 이에 따라, 초기 시드들은 시드 큐에 배열되나, 퍼징 과정에서 파생되는 시드들은 스택에 저장될 수 있다. 다음으로, 단계 S202에서 저장되었던 파생 시드들이 출력되는 순서대로 단계 S201에서의 시드 큐에 복사될 수 있다(S203). 단계 S202에서의 시드 그룹은 스택 형태일 수 있기 때문에, 가장 나중에 저장된 파생 시드가 가장 먼저 시드 큐에 배열될 수 있다.
도 2에서의 흐름도를 기초로 도 3을 참조하여 보다 자세히 살펴보기로 한다. 먼저, 초기 시드(Original 1, Original 2, Original 3)가 시드 큐(310)에 스케줄링 된 것을 확인할 수 있다. 이후, 초기 시드에서 파생된 시드들 중 새로운 브랜치를 탐색한 시드들이 스택(320)에서 저장될 수 있다. 앞서 본 발명에서 설명한 바와 같이, 초기 시드를 변이하여 파생된 시드를 기반으로 새로운 브랜치를 탐색하는 단계는 사용자 설정에 따라 종료될 수 있다. 이에 따라, 초기 시드(Original 1)의 탐색이 종료된 후 초기 시드(Original 2)의 탐색이 진행되고, 초기 시드(Original 2)의 탐색이 종료된 후 초기 시드(Original 3)의 탐색이 진행될 것이다. 한편, 일 실시 예에 따르면, 시드가 브랜치를 탐색하는 데에 있어서, 새로운 시드는 이전의 시드가 탐색한 브랜치를 탐색할 수 있으나, 이러한 브랜치는 다음의 시드에게 흥미로운 정보가 아닐 수 있다. 이에 따라 다음의 시드는 이전의 시드가 탐색한 브랜치를 무시하고 탐색을 진행할 수 있다. 즉, 초기 시드(Original 3)는 초기 시드(Original 1 및 Original 2)가 탐색한 브랜치에 대해서 탐색하더라도, 새로운 시드가 발견되는 새로운 브랜치에 대해서만 발견된 시드를 시드 집합에 추가할 것이다.
각각의 초기 시드가 새로운 브랜치를 탐색하고 이를 이용한 퍼징이 종료됨에 따라 스택(320)에서 파생 시드들이 탐색 순서대로 저장될 수 있다. 예를 들어, 초기 시드(Original 1)에서 파생된 시드들(New 1, New 2, New 3), 초기 시드(Original 2)에서 파생된 시드들(New 4, New 5, New 6, New 7) 및 초기 시드(Original 3)에서 파생된 시드들(New 8, New 9)이 순서대로 스택(320)에 저장될 수 있다.
다음으로, 스택(320)에서 저장되었던 시드들이 복사되어 시드 큐(310)에 배열될 수 있다. 이 때 선입후출 방식으로 인하여 스택(320)에서는 시드가 New 1, 2, 3, (…), 8, 9 순서로 저장되었으나, 시드 큐(330)에서는, 시드 큐(310)에서 배열되었고 퍼징이 완료된 초기 시드(Original 1, Original 2, Original 3) 이후에 New 9, 8, (…), 3, 2, 1 순서로 배열될 것이다.
이와 같은 실시 예를 나타낸 알고리즘은 다음 표 1과 같다.
Figure 112020085902910-pat00001
표 1을 참조하면, 초기 시드의 세트(S)에 대하여 퍼징을 수행하고, 퍼징 수행 중에 초기 시드를 변이하여 파생된 시드(X')에 대하여 브랜치 탐색을 수행한다. 그리고, 파생 시드(X')가 새로운 브랜치를 탐색하는 경우, 탐색한 순서대로 스택(S')에 저장할 수 있다. 세트(S)에 대하여 퍼징이 완료된 경우, 스택(S')을 세트(S)에 추가하여 새로운 시드 세트를 스케줄링 할 수 있다.
다음으로, 도 4는 일 실시 예에 따른 시드 스케줄링 방법의 두번째 예의 흐름도이며, 도 5는 그러한 예시를 도식화한 그림이다.
본 발명의 시드 스케줄링 방법의 일 예로, 먼저, 단계 S401에서 초기 시드를 파일 크기에 따라 정렬할 수 있다. 예를 들어, 초기 시드를 파일 크기가 작은 순서대로 시드 큐에 배열할 수 있다. 다음으로, 단계 S402에서 퍼징 수행 중 새로운 시드가 발생될 때마다 그 크기를 확인하여 크기 순으로 시드 큐에 배열할 수 있다. 즉, 초기 시드를 변이하여 파생된 시드들 중 새로운 브랜치를 발견하는 시드가 발생될 때마다 그 파일 크기를 확인하여 파일 크기가 작은 순서대로 시드 큐에 배열할 수 있다. 그리고, 시드 큐에 배열된 순서에 따라 파생 시드에 대하여도 퍼징이 수행될 수 있다. 또한, 파생 시드에 대해서도 변이를 통해 새로운 시드가 파생될 수 있으며, 이러한 두번째 파생 시드들이 새로운 브랜치를 탐색하는 경우에도 그 크기를 확인하여 시드 큐에 배열할 수 있다. 결국, 퍼징에 계속됨에 따라 실시간으로 시드들이 파일 크기 순으로 시드 큐에 배열될 수 있다.
도 4에서의 흐름도를 기초로 도 5를 참조하여 보다 자세히 살펴보기로 한다. 먼저, 초기 시드(Original 1, Original 2, Original 3)가 시드 큐(510)에 크기 순으로 스케줄링 될 수 있다. 이후, 초기 시드에서 파생된 시드들 중 새로운 브랜치를 탐색한 시드들(New 1, New 2, New 3)이 발생될 때마다 그 크기를 확인하여 크기 순으로 시드 큐에 스케줄링 할 수 있다. 그리고, 시드 큐에 스케줄링 된 순서에 따라, 파생된 시드들(New 1, New 2, New 3)에 대하여 퍼징을 수행할 수 있고, 이들 퍼징에 의하여 발생된 시드들(New 4, New 5, New 6)에 대해서도 크기 순으로 시드 큐에 스케줄링 할 수 있다. 시드 큐(520)를 참조하면, 초기 시드(Original 1)에서 파생된 시드들(New 1, New 2, New 3)에 대하여 파일 크기 순으로 배열하면 Original 1, New 1, New 3, Original 3, New 2, Original 2 임을 알 수 있다. 또한, 시드들(New 1, New 2, New 3)에서 파생된 시드들(New 4, New 5, New 6)에 대하여 파일 크기 순으로 배열하면, Original 1, New 1, New 4, New 3, New 6, New 5, Original 3, New 2, Original 2 이다. 즉, 시드는 발생되는 순서대로 스케줄링 되지 않을 수 있다.
이와 같은 실시 예를 나타낸 알고리즘은 다음 표 2와 같다.
Figure 112020085902910-pat00002
표 2를 참조하면, 초기 시드의 세트(S)에 대하여 크기 순서대로 배열할 수 있다. 그리고 크기 순서대로 배열된 세트(S)에 대해 퍼징을 수행하고, 퍼징 수행 중에 초기 시드를 변이하여 파생된 시드(X')에 대하여 브랜치 탐색을 수행한다. 파생 시드(X')가 새로운 브랜치를 탐색하는 경우, 이를 세트(S)에 추가하여 다시 시드의 크기 순서대로 배열한다. 새로운 시드가 발생되는 때마다 세트(S)에서 시드의 크기 순으로 배열함으로써 시드 세트를 스케줄링 할 수 있다.
한편, 이와 같이 시드들을 크기 순으로 스케줄링 하면, 크기가 큰 시드의 경우에는 퍼징을 수행하기까지 매우 오래 걸리거나, 퍼징을 수행하지 못하는 경우가 있을 수 있다. 예를 들면, 도 5에서 초기 시드(Original 2)는 초기에 설정된 시드임에도 불구하고, 그 크기로 인하여 퍼징을 수행하기까지 오랜 시간이 걸리거나, 퍼징을 수행하지 못할 수 있다. 이에 따라 일 실시 예에 따르면, 시드의 기원(origin)에 따라 스케줄링 하는 방법을 고안할 수 있으며, 이에 대하여는 이하 도 6 및 7을 참조로 살펴보기로 한다.
도 6은 일 실시 예에 따른 시드 스케줄링 방법의 세번째 예의 흐름도이고, 도 7은 그러한 예시를 도식화한 그림이다.
본 발명의 시드 스케줄링 방법의 일 예로, 먼저, 초기 시드를 시드 큐에서 스케줄링할 수 있다(S601). 일 예로, 단계 S601에서 초기 시드는 생성 순서대로 정렬될 수 있다. 다음으로, 초기 시드에서 파생된 시드 중 새로운 브랜치를 탐색한 시드가 시드 큐에 배치될 수 있다. 이 때, 파생된 시드들은 퍼징 중 발생될 때마다 각각의 초기 시드에서 발생된 순서가 동일한 시드끼리 정렬하되, 초기 시드가 스케줄링된 순서에 따라 정렬될 수 있다(S602). 예를 들어, 각각의 초기 시드에서 첫번째로 파생된 시드들은 초기 시드의 순서에 따라 배열될 것이며, 두번째로 파생된 시드들도 첫번째 파생된 시드 그룹 이후에 초기 시드의 순서에 따라 배열될 것이다. 또한, 파생 시드에서 발생되는 시드들에 대해서도 마찬가지로 초기 시드의 순서에 따라 스케줄링 될 수 있다.
도 6에서의 흐름도를 기초로 도 7을 참조하여 보다 자세히 살펴보기로 한다. 먼저, 초기 시드(Original 1, Original 2, Original 3)가 시드 큐(710)에 스케줄링 된다. 이후, 초기 시드에서 파생된 시드들이 초기 시드의 순서에 따라 파생 단위 별로 스케줄링 될 수 있다. 예를 들어, 초기 시드(Original 1)에서 파생된 시드(New 1-1, New 1-2), 초기 시드(Original 2)에서 파생된 시드(New 2-1, New 2-2) 및 초기 시드(Original 3)에서 파생된 시드(New 3-1, New 3-2)는 첫번째 파생된 시드들이 초기 시드의 순서에 따라 New 1-1, New 2-1, New 3-1 순서로 배열되고, 바로 다음에, 두번째 파생된 시드들이 초기 시드의 순서에 따라 New 1-2, New 2-2, New 3-2 순서로 시드 큐(720)에 배열될 것이다.
다음으로, 초기 시드에 대한 퍼징이 완료된 후, 발생된 시드에 대한 퍼징이 수행될 것이다. 이 때에도 마찬가지로, 초기 시드의 순서에 따라 시드 큐의 뒤쪽에 차례대로 배치될 수 있다. 예를 들어, 초기 시드 (Original 1, Original 2, Original 3)에 대하여 퍼징이 완료된 후, 다음 시드(New 1-1)에 대하여 퍼징이 수행될 수 있다. 시드(New 1-1)에서 퍼징으로 인하여 시드(New 1-3)이 발생되고, 이 때의 시드는 초기 시드(Original 1)에서 세번째로 파생된 시드로서 시드 큐(730)에서 시드(New 3-2)이후에 배치될 것이다. 만일, 시드(New 1-1)에서 퍼징이 완료된 후 다음 시드(New 2-1)에서 퍼징이 수행되고 시드(New 2-3)이 발생되는 경우, 초기 시드의 순서에 따라 시드(New 1-3) 이후에 시드(New 2-3)이 배치될 것이다. 이때의 시드(New 1-1, New 2-1, New 3-1, New 1-2, New 2-2, New 3-2, New 1-3, New 2-3 등)은 모두 새로운 브랜치를 탐색한 시드일 것이다.
한편, 모든 시드에 대해 동일한 횟수만큼 퍼징이 수행되는 것은 아니므로, 각각의 시드에 대해 파생되는 시드의 개수가 다를 수 있다. 이 경우에도 각각의 파생 시드들은 파생 그룹별로 초기 시드의 순서에 따라 시드 큐에 차례대로 배치될 것이다. 예를 들어, 초기 시드(Original 1)에서 2개의 시드(New 1-1, New 1-2)만이 새로운 브랜치를 탐색하고, 이후 초기 시드(Original 2)에서 100개의 시드(New 2-1 내지 New 2-100)가 새로운 브랜치를 탐색할 수 있다. 이 경우 본 발명의 일 실시 예에 따른 시드 스케줄링 방법에 따르면, 시드의 배열은 Original 1, Original 2, New 1-1, New 2-1, New 1-2, New 2-2, New 2-3, (…) New 2-100이 될 수 있다. 초기 시드의 퍼징이 완료된 후 그 다음 시드(New 1-1)에 대하여 퍼징이 수행되고, 이 때 발생되는 시드(New 1-3)는 시드(New 2-2)와 시드(New 2-3) 사이에 배치될 것이다.
이와 같은 실시 예를 나타낸 알고리즘은 다음 표 3과 같다.
Figure 112020085902910-pat00003
표 3을 참조하면, 초기 시드의 세트(S)에 대하여 퍼징을 수행하고, 퍼징 수행 중에 초기 시드를 변이하여 파생된 시드(X')에 대하여 브랜치 탐색을 수행한다. 그리고, 파생 시드(X')가 새로운 브랜치를 탐색하는 경우, 시드(X')를 초기 시드의 순서(initial order)에 따라 세트(S)에 추가하여 새로운 시드 세트를 스케줄링 할 수 있다.
본 발명의 일 실시 예에 따르면, 위에서 설명한 시드 스케줄링 방법의 세가지 예를 각각 조합하여 시드를 스케줄링 할 수 있다.
일 예로, 초기 시드를 파일 크기에 따라 정렬하고, 초기 시드에서 파생된 시드 중 새로운 브랜치를 탐색한 시드에 대해 다음 시드 그룹의 제일 앞쪽에 위치시킬 수 있다. 이 때 다음 시드 그룹이란 스택을 의미하며, 이에 따라, 초기 시드들은 시드 큐에 배열되나, 퍼징 과정에서 파생되는 시드들은 스택에 저장될 수 있다. 다음으로, 스택에 저장되었던 파생 시드들이 출력되는 순서대로 시드 큐에 복사되며, 파일 크기가 작은 순서대로 시드 큐에 배열될 수 있다. 이를 통해, 선입후출 방식을 취하면서도 파일 크기에 따라 배열함으로써 퍼징 속도를 높일 수 있다.
또 다른 예로, 초기 시드에서 파생된 시드 중 새로운 브랜치를 탐색한 시드에 대해 다음 시드 그룹의 제일 앞쪽에 위치시킬 수 있다. 이 때 다음 시드 그룹이란 스택을 의미할 수 있다. 그리고, 스택에 저장되었던 파생 시드들이 출력되는 순서대로 시드 큐에 복사되는데, 파생 시드들은 퍼징 중 발생될 때마다 각각의 초기 시드에서 발생된 순서가 동일한 시드끼리 정렬되며, 이 때 초기 시드가 스케줄링된 순서에 따라 정렬될 수 있다. 이를 통해, 선입후출 방식을 취하면서도 초기 시드의 순서를 기반으로 퍼징함으로써 코드 커버리지를 효율적으로 확보할 수 있다.
또 다른 예로, 초기 시드를 파일 크기에 따라 정렬하고, 퍼징 중 새로 발생된 시드마다 그 파일 크기를 확인하여 파일 크기가 작은 순서대로 시드 큐에 배열하되, 파생된 시드들은 퍼징 중 발생될 때마다 각각의 초기 시드에서 발생된 순서가 동일한 시드끼리 정렬되며, 초기 시드가 스케줄링된 순서에 따라 정렬될 수 있다. 이를 통해, 퍼징 속도를 높이면서도, 퍼징 초반에 발생되었음에도 불구하고 그 크기가 큼으로 인해 퍼징되는데 오래 걸리거나 퍼징될 수 없는 시드들에 대해 퍼징 기회를 줄 수 있다.
또는, 초기 시드를 파일 크기에 따라 정렬하고, 초기 시드에서 파생된 시드 중 새로운 브랜치를 탐색한 시드에 대해 다음 시드 그룹의 제일 앞쪽에 위치시킬 수 있다. 이 때 다음 시드 그룹이란 스택을 의미할 수 있다. 다음으로, 다음 시드 그룹에 저장되었던 파생 시드들이 출력되는 순서대로 시드 큐에 복사되나, 파생된 시드들은 퍼징 중 발생될 때마다 각각의 초기 시드에서 발생된 순서가 동일한 시드끼리 정렬되며, 이 때 초기 시드가 스케줄링된 순서에 따라 정렬될 수 있다. 이를 통해, 초기 시드를 파일 크기에 따라 배열함으로써 퍼징 속도를 높이고, 선입후출 방식을 취하면서도, 크기로 인해 퍼징되는데 오래 걸리거나 퍼징될 수 없는 시드들에 대해 퍼징 기회를 줄 수 있다.
본 발명의 시드 스케줄링 방법은 파일 포맷, 네트워크 프로토콜, 변수, 웹 애플리케이션 등 정해진 대상에 한정되지 않고, 범용적으로 이용될 수 있으며, 대상에 따라 적용되는 시드 파일 스케줄링 방법이 달라질 수 있다. 또한, 본 발명의 시드 스케줄링 방법은 블랙 박스 검사에 이용되나, 화이트 박스 및 그레이 박스 검사에도 이용될 수 있다.
도 8는 일 실시 예에 따른 시드 스케줄링 장치의 기능 블록도이다.
본 발명의 시드 스케줄링 장치(800)는 스케줄링부(801) 및 탐색부(803)를 포함할 수 있으며, 이에 한정되지 않는다. 일 실시 예에 따르면, 스케줄링부(801)는 시드를 정렬하여 스케줄링 할 수 있고, 탐색부(803)는 정렬된 시드를 이용하여 브랜치 탐색을 수행할 수 있다. 본 발명의 시드 스케줄링 장치(800)는, 스케줄링부(801)를 이용하여 제1 시드를 제1 시드 집합으로 스케줄링하고, 탐색부(803)를 이용하여 제1 시드 집합을 기초로 브랜치를 탐색하고, 스케줄링부(801)를 이용하여 제1 시드와 제1 시드로부터 파생되고 제1 시드에 대한 퍼징에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하고, 탐색부(803)를 이용하여 제2 시드 집합을 기초로 브랜치의 탐색을 진행하여 퍼징을 수행할 수 있다. 또한, 본 발명의 시드 스케줄링 장치(800)는 스케줄링부(801) 및 탐색부(803)를 통해 앞서 설명한 본 발명의 시드 스케줄링 방법 및 이들의 조합을 실행할 수 있다. 예를 들어, 시드 스케줄링 장치(800)는 도 2, 4, 및 6의 흐름도에 도시된 실시 예의 각 단계와 이들 실시 예의 조합을 수행할 수 있다.
전술한 실시 예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-Access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
전술한 실시 예들은 일 예시일 뿐 후술하는 청구항들의 범위 내에서 다른 실시 예들이 구현될 수 있다.

Claims (10)

  1. 삭제
  2. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제2 시드는 상기 제1 탐색 단계에서 새로운 시드가 발견되는 브랜치를 탐색한 시드이고,
    상기 제2 시드 집합으로 스케줄링하는 단계는,
    발생되는 순서대로 상기 제2 시드를 시드 그룹에 저장하는 단계; 및
    상기 시드 그룹에 저장된 제2 시드를 가장 나중에 저장된 순서대로 상기 제1 시드 집합에 추가하는 단계를 포함하는, 방법.
  3. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제1 시드 집합으로 스케줄링하는 단계는, 상기 제1 시드를 크기가 작은 순서대로 정렬하는 단계를 포함하고,
    상기 제2 시드 집합으로 스케줄링 하는 단계는, 상기 제2 시드가 발생될 때마다 상기 제2 시드 집합에 포함되는 복수의 시드와 상기 제2 시드의 크기를 비교하여 크기가 작은 순서대로 정렬하는 단계를 포함하는, 방법.
  4. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제2 시드 집합으로 스케줄링하는 단계는,
    상기 제2 시드가 발생될 때마다 각각의 상기 제1 시드에서 발생된 순서가 동일한 제2 시드끼리 정렬하되, 상기 제1 시드 집합에서의 상기 제1 시드의 스케줄링 순서에 따라 정렬하는 단계를 포함하는, 방법.
  5. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제2 시드는 상기 제1 탐색 단계에서 새로운 시드가 발견되는 브랜치를 탐색한 시드이고,
    상기 제1 시드 집합으로 스케줄링하는 단계는, 상기 제1 시드를 크기가 작은 순서대로 정렬하는 단계를 포함하고,
    상기 제2 시드 집합으로 스케줄링하는 단계는,
    발생되는 순서대로 상기 제2 시드를 시드 그룹에 저장하는 단계; 및
    상기 시드 그룹에 저장된 제2 시드를 가장 나중에 저장된 순서대로 상기 제1 시드 집합에 추가하는 단계를 포함하는, 방법.
  6. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제2 시드는 상기 제1 탐색 단계에서 새로운 시드가 발견되는 브랜치를 탐색한 시드이고,
    상기 제2 시드 집합으로 스케줄링하는 단계는,
    발생되는 순서대로 상기 제2 시드를 시드 그룹에 저장하는 단계; 및
    상기 시드 그룹에 저장된 제2 시드를 가장 나중에 저장된 순서대로 상기 제1 시드 집합에 추가하면서, 각각의 상기 제1 시드에서 발생된 순서가 동일한 제2 시드끼리 정렬하되, 상기 제1 시드 집합에서의 상기 제1 시드의 스케줄링 순서에 따라 정렬하는 단계를 포함하는, 방법.
  7. 시드(seed)를 스케줄링 하는 방법에 있어서,
    제1 시드를 제1 시드 집합(set)으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치(branch)를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제1 시드 집합으로 스케줄링하는 단계는, 상기 제1 시드를 크기가 작은 순서대로 정렬하는 단계를 포함하고,
    상기 제2 시드 집합으로 스케줄링 하는 단계는,
    상기 제2 시드가 발생될 때마다 상기 제2 시드 집합에 포함되는 복수의 시드와 상기 제2 시드의 크기를 비교하여, 제2 시드를 크기가 작은 순서대로 정렬하되, 각각의 상기 제1 시드에서 발생된 순서가 동일한 제2 시드끼리 정렬하면서, 상기 제1 시드 집합에서의 상기 제1 시드의 스케줄링 순서에 따라 정렬하는 단계를 포함하는, 방법.
  8. 제6항에 있어서,
    상기 제1 시드 집합으로 스케줄링하는 단계는, 상기 제1 시드를 크기가 작은 순서대로 정렬하는 단계를 포함하는, 방법.
  9. 시드를 스케줄링 하는 장치에 있어서,
    시드를 정렬하여 스케줄링하는 스케줄링부; 및
    정렬된 시드를 이용하여 브랜치 탐색을 수행하는 탐색부를 포함하고,
    상기 스케줄링부는, 제1 시드를 제1 시드 집합으로 스케줄링하고,
    상기 탐색부는, 상기 제1 시드 집합을 기초로 브랜치를 탐색하고,
    상기 스케줄링부는, 상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 시드 집합을 기초로 하는 브랜치 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하고,
    상기 탐색부는, 상기 제2 시드 집합을 기초로 상기 브랜치의 탐색을 진행하도록 구성되며,
    상기 제2 시드는, 상기 제1 시드 집합을 기초로 브랜치를 탐색할 때 새로운 시드가 발견되는 브랜치를 탐색한 시드이고,
    상기 스케줄링부는, 상기 제1 시드와 상기 제2 시드를 상기 제2 시드 집합으로 스케줄링하기 위해,
    발생되는 순서대로 상기 제2 시드를 시드 그룹에 저장하고,
    상기 시드 그룹에 저장된 제2 시드를 가장 나중에 저장된 순서대로 상기 제1 시드 집합에 추가하는, 장치.
  10. 시드를 스케줄링 하는 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적 기록매체로서,
    상기 시드를 스케줄링 하는 방법은,
    제1 시드를 제1 시드 집합으로 스케줄링하는 단계;
    상기 제1 시드 집합을 기초로 브랜치를 탐색하는 제1 탐색 단계;
    상기 제1 시드와 상기 제1 시드로부터 파생되고 상기 제1 탐색 단계에서 발생되는 제2 시드를 제2 시드 집합으로 스케줄링하는 단계; 및
    상기 제2 시드 집합을 기초로 브랜치의 탐색을 진행하는 제2 탐색 단계를 포함하고,
    상기 제2 시드는 상기 제1 탐색 단계에서 새로운 시드가 발견되는 브랜치를 탐색한 시드이고,
    상기 제2 시드 집합으로 스케줄링하는 단계는,
    발생되는 순서대로 상기 제2 시드를 시드 그룹에 저장하는 단계; 및
    상기 시드 그룹에 저장된 제2 시드를 가장 나중에 저장된 순서대로 상기 제1 시드 집합에 추가하는 단계를 포함하는, 비일시적 기록매체.
KR1020200102581A 2020-08-14 2020-08-14 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치 KR102353187B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200102581A KR102353187B1 (ko) 2020-08-14 2020-08-14 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200102581A KR102353187B1 (ko) 2020-08-14 2020-08-14 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치

Publications (1)

Publication Number Publication Date
KR102353187B1 true KR102353187B1 (ko) 2022-01-20

Family

ID=80052769

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200102581A KR102353187B1 (ko) 2020-08-14 2020-08-14 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치

Country Status (1)

Country Link
KR (1) KR102353187B1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
US20190361789A1 (en) * 2018-05-24 2019-11-28 Fujitsu Limited Concurrency vulnerability detection
US20190384697A1 (en) * 2018-06-18 2019-12-19 Fujitsu Limited Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries
KR20200080541A (ko) * 2018-12-27 2020-07-07 아주대학교산학협력단 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190361789A1 (en) * 2018-05-24 2019-11-28 Fujitsu Limited Concurrency vulnerability detection
US20190384697A1 (en) * 2018-06-18 2019-12-19 Fujitsu Limited Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
KR20200080541A (ko) * 2018-12-27 2020-07-07 아주대학교산학협력단 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법

Similar Documents

Publication Publication Date Title
US11693962B2 (en) Malware clustering based on function call graph similarity
US20160248837A1 (en) Methods and apparatus for realizing short url service
CN112154420B (zh) 自动智能云服务测试工具
US8914893B2 (en) Method and system for mobile information security protection
CN107506256B (zh) 一种崩溃数据监控的方法和装置
CN112508573B (zh) 一种交易数据处理方法、装置以及计算机设备
US20160019037A1 (en) Managing parameter types for generic functions
KR101719500B1 (ko) 캐싱된 플로우들에 기초한 가속
US11586735B2 (en) Malware clustering based on analysis of execution-behavior reports
CN101364237A (zh) 一种多关键词匹配方法和装置
US11204860B2 (en) Methods and apparatuses for generating smart contract test case
US9992659B1 (en) Stream-processing of telecommunication event records
KR102353187B1 (ko) 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치
US11740827B2 (en) Method, electronic device, and computer program product for recovering data
CN108959294B (zh) 一种访问搜索引擎的方法和装置
Lemoudden et al. A binary-based mapreduce analysis for cloud logs
US11733971B2 (en) System and method of managing pseudo-random number generation in a multiprocessor environment
US10185729B2 (en) Index creation method and system
CN113505131A (zh) 调整数据排序的方法和装置
Skračić et al. A Big Data solution for troubleshooting mobile network performance problems
KR20210021838A (ko) 악성코드 분석용 머신러닝을 위한 하이브리드 피처 벡터 생성 장치 및 방법
CN105653534B (zh) 一种数据处理方法及装置
KR101553660B1 (ko) Xml 문서 파싱 시스템 및 방법
US11379449B2 (en) Method, electronic device and computer program product for creating metadata index
Chao et al. Cryfind: Using Static Analysis to Identify Cryptographic Algorithms in Binary Executables

Legal Events

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