KR20210156728A - 퍼징 테스트 방법 및 장치 - Google Patents

퍼징 테스트 방법 및 장치 Download PDF

Info

Publication number
KR20210156728A
KR20210156728A KR1020210033539A KR20210033539A KR20210156728A KR 20210156728 A KR20210156728 A KR 20210156728A KR 1020210033539 A KR1020210033539 A KR 1020210033539A KR 20210033539 A KR20210033539 A KR 20210033539A KR 20210156728 A KR20210156728 A KR 20210156728A
Authority
KR
South Korea
Prior art keywords
resource
test
access
test input
accessed
Prior art date
Application number
KR1020210033539A
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 US17/336,360 priority Critical patent/US11868238B2/en
Publication of KR20210156728A publication Critical patent/KR20210156728A/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/3696Methods or tools to render software testable
    • 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/26Functional testing
    • G06F11/263Generation of test inputs, e.g. test vectors, patterns or sequences ; with adaptation of the tested hardware for testability with external testers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/324Display of status information
    • G06F11/327Alarm or error message display
    • 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
    • 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/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • 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

Landscapes

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

Abstract

본 개시는 퍼징 테스트 장치 및 방법에 관한 것으로, 테스트 입력을 수신하는 단계; 상기 테스트 입력을 기반으로 리소스에 대한 액세스 상황을 나타내는 리소스 액세스 피드백을 획득하는 단계; 및 상기 리소스 액세스 피드백에 따라 테스트 입력 큐(queue)에 상기 테스트 입력을 추가할지 여부를 결정하는 단계를 포함한다.

Description

퍼징 테스트 방법 및 장치{METHOD AND APPARATUS FOR FUZZING TEST}
이하의 일 실시 예들은 컴퓨터 기술 분야에 관한 것으로, 보다 구체적으로, 퍼징 테스트 방법 및 장치에 관한 것이다.
퍼징 테스트는 목표 시스템에 예상치 못한 입력을 제공하고 비정상적인 결과를 모니터링하여 소프트웨어 취약점을 찾는 방법이다. 핵심 개념은 무효 데이터, 예기치 않은 데이터 또는 임의의 데이터 중의 하나 이상의 조합을 프로그램에 입력으로 주입하고, 크래시(crash), 내장(built-in) 코드 어써션(assertion) 실패, 잠재적 메모리 누수, 로그 익셉션 등과 같은 프로그램 이상(常)을 모니터링하여, 가능한 프로그램 오류를 찾아내는 것이다.
현재 퍼징 테스트는 블랙 박스 테스트, 화이트 박스 테스트 및 그레이 박스 테스트 등 세 가지의 범주로 나눌 수 있다. 그중, 그레이 박스 테스트는 화이트 박스 테스트와 블랙 박스 테스트 간의 일종의 테스트로, 커버리지 유도의 돌연변이 퍼징 테스트라고도 하며, 출력과 입력의 정확성뿐 아니라, 프로그램 내부 상황에도 포커스 한다. 그레이 박스 테스트는 화이트 박스 테스트만큼 상세하고 완전하지는 않지만, 블랙 박스 테스트보다 프로그램의 내부 논리에 더 많이 포커스하며, 종종 일부 대표적인 현상, 사건 및 징후를 통해 내부 작동 상태를 판단한다. 예를 들어, 코드 커버리지가 있다.
현재 그레이 박스 테스트에서는 입력 시드를 변경하여 새로운 테스트 케이스를 생성할 수 있다. 예를 들어, 그레이 박스 테스트는 프로그램 계측을 사용하여 목표 시스템을 실행하는 동안 입력에 의해 생성된 코드 커버리지를 추적하고, 퍼징 관리자는 생성된 코드 커버리지를 사용하여 입력 시퀀스에 추가할 입력을 결정하여, 코드 커버리지를 개선한다. 예를 들어, 입력이 새 실행 경로를 생성할 수 있는 경우, 해당 입력은 유지하고, 그렇지 않은 경우, 해당 입력은 삭제한다. 이러한 연속적 루프(continuous loop) 방법으로 퍼징 처리를 진행하여, 더 많은 입력 유즈 케이스에 기여할 수 있다.
그러나 높은 코드 커버리지가 진짜 취약점을 찾을 수 있다는 것을 의미하는 것은 아니다. 실제로 대부분의 경로는 보안 문제와 관련이 없으며, 소프트웨어 취약성은 일반적으로 보안에 민감한 기능(예, 메모리 작업과 유사한 strcpy())을 잘못 사용하여 발생한다. 즉, 진짜 취약점은 실제로 strcpy() 등을 포함하는 일부 메모리 연산 함수의 실행 경로에 숨겨져 있다. 그러나 실제로 실행 경로에 도달할 수 있는 가능한 입력 조합은 수천 개에 이른다. 그러나 기존 코드 커버리지에 의해 안내되는 그레이 박스 테스트가 지정된 실행 경로에 도달하면, 해당 경로에 도달할 수 있는 다른 입력은 폐기된다. 따라서, 기존 그레이 박스 테스트는 해당 경로에 숨겨진 취약점을 잃거나 블랙 박스 테스트로 퇴화된다.
도 1은 종래의 코드 커버리지에 기반한 퍼징 테스트 실패에 대한 코드 예를 도시한 도면이다.
도 1을 참조하면, 시드 돌연변이 알고리즘의 규칙이 각 입력에 대해 지정된 길이(예, 100)를 확장하는 것이라고 가정한다. 입력이 5자일 때, 도1의 코드가 실행된다. 다음 입력이 105자이면, 코드 커버리지에 기반한 퍼징 테스트(즉, 그레이 커버 테스트)는 해당 실행이 새로운 코드 커버리지를 생성하지 않는 것으로 간주하고 입력 확장을 중지한다. 그러나 실제로 도1의 코드는 입력이 1000자보다 큰 문자인 경우에만 버퍼 오버플로우가 발생한다. 따라서 기존 코드 커버리지가 안내하는 퍼징 테스트는 유효하지 않으며, 블랙 박스 테스트로 퇴화된다.
본 개시의 일 실시 예에 따른 퍼징 테스트 장치에서 퍼징 테스트하는 방법 은, 테스트 입력을 수신하는 단계; 상기 테스트 입력을 기반으로 리소스에 대한 액세스 상황을 나타내는 리소스 액세스 피드백을 획득하는 단계; 및 상기 리소스 액세스 피드백에 따라 테스트 입력 큐(queue)에 상기 테스트 입력을 추가할지 여부를 결정하는 단계를 포함한다.
이때, 퍼징 테스트하는 방법은, 상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 단계를 더 포함하고, 상기 리소스 액세스 피드백에 따라 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계는, 상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않는 경우, 상기 리소스 액세스 피드백에 따라 상기 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계를 포함할 수 있다.
이때, 하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법은, 상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 단계; 및 상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하는 단계를 더 포함할 수 있다.
이때, 상기 리소스 액세스 피드백을 획득하는 단계는, 상기 테스트 입력을 처리하기 위해 상기 퍼징 테스트 장치가 신청한 적어도 하나의 리소스를 포함하는 리소스 그룹을 획득하는 단계; 상기 리소스 그룹에 대응하는 리소스 식별 코드를 획득하는 단계; 상기 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득하는 단계; 획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정하는 단계; 상기 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인하는 단계; 및 처음으로 액세스된 리소스가 있으면 새 리소스에 액세스했음을 나타내는 리소스 액세스 피드백을 생성하고, 처음으로 액세스된 리소스가 없으면 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성하는 단계를 포함하고, 상기 리소스 식별 코드는 리소스 신청 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내고, 상기 액세스 식별 코드는 리소스 액세스 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타낼 수 있다.
이때, 상기 리소스 액세스 피드백에 따라 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계는, 상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하는 단계; 및 상기 리소스 액세스 피드백이 새 리소스에 액세스하지 않음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 포기하는 단계를 포함할 수 있다.
이때, 퍼징 테스트 장치에서 퍼징 테스트하는 방법은, 상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는 단계; 및 결정된 주소 구간이 상기 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 비정상임을 나타내는 경보 신호를 발생하는 단계를 더 포함할 수 있다.
이때, 상기 리소스는 메모리, 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 및 그래프의 에지 중 적어도 하나를 포함할 수 있다.
본 개시의 일 실시 예에 따른 퍼징 테스트 장치는, 테스트 입력을 수신하는 수신부; 상기 테스트 입력을 기반으로 리소스에 대한 액세스 상황을 나타내는 리소스 액세스 피드백을 획득하는 획득부; 및 상기 리소스 액세스 피드백에 따라 테스트 입력 큐(queue)에 상기 테스트 입력을 추가할지 여부를 결정하는 결정부를 포함한다.
이때, 퍼징 테스트 장치는, 상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 코드 라인 결정부를 더 포함하고, 상기 결정부는, 상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않는 경우, 상기 리소스 액세스 피드백에 따라 상기 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정할 수 있다.
이때, 퍼징 테스트 장치는, 상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 코드 라인 결정부를 더 포함하고, 상기 결정부는, 상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가할 수 있다.
이때, 상기 획득부는, 상기 테스트 입력을 처리하기 위해 상기 퍼징 테스트 장치가 신청한 적어도 하나의 리소스를 포함하는 리소스 그룹을 획득하는 리소스 그룹 획득부; 상기 리소스 그룹에 대응하는 리소스 식별 코드를 획득하는 리소스 식별 코드 획득부; 상기 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득하는 액세스 식별 코드 획득부; 획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정하는 식별 쌍 결정부; 및 상기 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인하고, 처음으로 액세스된 리소스가 있으면 새 리소스에 액세스 했음을 나타내는 리소스 액세스 피드백을 생성하고, 처음으로 액세스된 리소스가 없으면 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성하는 리소스 액세스 결정부를 포함하고, 상기 리소스 식별 코드는 리소스 신청 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내고, 상기 액세스 식별 코드는 리소스 액세스 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타낼 수 있다.
이때, 상기 결정부는, 상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하고, 상기 리소스 액세스 피드백이 새 리소스에 액세스하지 않음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 포기할 수 있다.
이때, 퍼징 테스트 장치는, 상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는 구간 결정부; 및 결정된 주소 구간이 상기 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 비정상임을 나타내는 경보 신호를 발생하는 경보부를 더 포함할 수 있다.
이때, 상기 리소스는, 메모리, 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 및 그래프의 에지 중 적어도 하나를 포함할 수 있다.
도 1은 종래의 코드 커버리지에 기반한 퍼징 테스트 실패에 대한 코드 예를 도시한 도면이다.
도 2는 일 실시 예에 따른 퍼징 테스트 장치에서 퍼징 테스트하는 개략적인 과정을 도시한 흐름도이다.
도 3은 일 실시 예에 따른 퍼징 테스트 장치에서 리소스 액세스 피드백을 획득하는 과정을 도시한 흐름도이다.
도 4는 일 실시 예에 따른 퍼징 테스트 장치에서 퍼징 테스트하는 과정을 도시한 흐름도이다.
도 5는 일 실시 예에 따른 리소스 그룹의 예시에 대해 도시한 도면이다.
도 6는 일 실시 예에 따른 임의의 식별 쌍에 해당하는 리소스 중 퍼징 테스트 장치가 처음 액세스한 리소스의 존재 여부를 결정하는 예를 도시한 도면이다.
도 7은 일 실시 예에 따른 퍼징 테스트 장치에 대한 개략적인 구성을 도시한 도면이다.
도 8은 일 실시 예에 따른 퍼징 테스트 장치의 획득부의 세부 구성을 도시한 도면이다.
도 9는 일 실시 예에 따른 퍼징 테스트 장치에 대한 구성을 도시한 도면이다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 그러나, 실시예들에는 다양한 변경이 가해질 수 있어서 특허출원의 권리 범위가 이러한 실시예들에 의해 제한되거나 한정되는 것은 아니다. 실시예들에 대한 모든 변경, 균등물 내지 대체물이 권리 범위에 포함되는 것으로 이해되어야 한다.
실시예에서 사용한 용어는 단지 설명을 목적으로 사용된 것으로, 한정하려는 의도로 해석되어서는 안된다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
또한, 실시 예의 구성 요소를 설명하는 데 있어서, 제 1, 제 2, A, B, (a), (b) 등의 용어를 사용할 수 있다. 이러한 용어는 그 구성 요소를 다른 구성 요소와 구별하기 위한 것일 뿐, 그 용어에 의해 해당 구성 요소의 본질이나 차례 또는 순서 등이 한정되지 않는다. 어떤 구성 요소가 다른 구성요소에 "연결", "결합" 또는 "접속"된다고 기재된 경우, 그 구성 요소는 그 다른 구성요소에 직접적으로 연결되거나 접속될 수 있지만, 각 구성 요소 사이에 또 다른 구성 요소가 "연결", "결합" 또는 "접속"될 수도 있다고 이해되어야 할 것이다.
어느 하나의 실시 예에 포함된 구성요소와, 공통적인 기능을 포함하는 구성요소는, 다른 실시 예에서 동일한 명칭을 사용하여 설명하기로 한다. 반대되는 기재가 없는 이상, 어느 하나의 실시 예에 기재한 설명은 다른 실시 예에도 적용될 수 있으며, 중복되는 범위에서 구체적인 설명은 생략하기로 한다.
이하에서는, 본 개시의 일 실시 예에 따른 퍼징 테스트 방법 및 장치를 첨부된 도 2 내지 도 9를 참조하여 상세히 설명한다.
도 2는 일 실시 예에 따른 퍼징 테스트 장치에서 퍼징 테스트하는 개략적인 과정을 도시한 흐름도이다.
도 2를 참조하면, 퍼징 테스트 장치는 테스트 입력을 수신한다(210).
여기서, 퍼징 테스트 장치는 퍼징 테스트를 통해 소프트웨어 취약점을 찾을 수 있는 대상 시스템을 뜻하며, 테스트 입력은 무효 데이터, 예상치 못한 데이터 또는 임의의 데이터 중 하나 이상의 조합일 수 있다.
그리고, 퍼징 테스트 장치는 테스트 입력을 기반으로 퍼징 테스트 장치의 실행 과정 중의 리소스 액세스 피드백을 획득한다(220). 이때, 리소스 액세스 피드백은 리소스에 대한 퍼징 테스트 장치의 액세스 상황을 나타낸다.
이때, 테스트 입력에 기초한 퍼징 테스트 장치의 실행 과정은 그레이 박스 테스팅(Grey-box Testing) 과정으로 이해할 수 있다. 그러나, 본 개시의 실시 예에서 수행되는 과정은 그레이 박스 테스팅에 제한되지 않으며, 다른 유형의 퍼징 테스트일 수도 있으며, 어떠한 제한도 하지 않음을 이해해야 한다.
여기서, 리소스는 컴퓨터 프로그램 운영 시 액세스될 수 있는 컴퓨팅 리소스 또는 외부 리소스를 지칭할 수 있으며, 예를 들어, 메모리(예를 들어, 하나 이상의 전역 변수, 힙 및 스택의 조합), 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 또는 그래프의 에지 등을 포함할 수 있으나 이에 제한되지 않는다.
그리고, 리소스 액세스 피드백은 퍼징 테스트 장치가 실행 과정 중 리소스에 대한 액세스 중 처음으로 액세스한 리소스의 존재 여부 결과를 나타내는데 사용될 수 있다. 예를 들어, 리소스 액세스 피드백은 피드백 표시기이다. 예를 들어, 피드백 표시기는 "1" 또는 "0"이고, 그중, 피드백 표시기가 "1"인 경우, 처음으로 액세스한 리소스가 있다는 것을 나타내고, 피드백 표시기가 "0"인 경우, 처음으로 액세스한 리소스가 없다는 것을 나타낸다.
220단계에서 리소스 액세스 피드백 획득 단계를 아래 도 3을 통해서 보다 상세히 후술한다.
도 3은 일 실시 예에 따른 퍼징 테스트 장치에서 리소스 액세스 피드백을 획득하는 과정을 도시한 흐름도이다.
도 3을 참조하면, 퍼징 테스트 장치는 테스트 입력을 처리하기 위해 퍼징 테스트 장치가 리소스 그룹을 획득한다(310). 이때, 리소스 그룹은 적어도 하나의 리소스를 포함한다.
구체적으로, 퍼징 테스트 장치의 테스트 입력 처리 과정 중 복수의 리소스 신청 프로그램 명령이 포함될 수 있다. 이때, 임의의 리소스 신청 프로그램 명령은 하나의 리소스 그룹을 신청할 수 있다. 하나의 리소스 그룹은 하나의 리소스 신청 프로그램 명령이 신청한 리소스의 집합을 의미할 수 있다. 이때, 아래 도 5의 예와 같이 해당 리소스 그룹이 포함하는 각 리소스는 실제 주소(즉, 절대 주소)에 해당한다.
도 5는 일 실시 예에 따른 리소스 그룹의 예시에 대해 도시한 도면이다.
도 5를 참조하면, 리소스 그룹 W는 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스를 포함할 수 있다.
또한, 퍼징 테스트 장치의 테스트 입력 처리 과정 중 포함된 서로 다른 리소스 신청 프로그램 명령이 신청한 리소스는 서로 다른 유형의 리소스일 수 있으나, 하나의 리소스 신청 프로그램 명령이 신청한 리소스 그룹이 포함한 리소스는 동일한 유형이다.
다시, 도 3의 설명으로 돌아와서, 퍼징 테스트 장치는 리소스 그룹에 대응하는 리소스 식별 코드를 획득한다(312). 여기서, 리소스 식별 코드는 리소스 신청 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다. 예를 들어, 리소스 신청 프로그램 명령이 "line 10: char *p1 = (char*) malloc(10*sizeof(char));"인 경우, 리소스 신청 프로그램 명령"line 10: char *p1 = (char*) malloc(10*sizeof(char));"의 위치를 식별하는데 사용되는 부호는 5023으로 표시할 수 있다. 다른 예를 들어, 리소스 신청 프로그램 명령이 "line 11: char p2[10];"인 경우, 리소스 신청 프로그램 명령"line 11: char p2[10];"의 위치를 식별하는데 사용되는 부호는 5024로 표시할 수 있다.
또한, 일 예로, 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스를 포함하도록 신청한 리소스 그룹의 프로그램 명령 위치에 부호 8088이 표시될 수 있고, 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스를 포함하도록 신청한 리소스 그룹의 프로그램 명령 위치에 부호 8098이 표시될 수 있다. 8088은 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스의 리소스 그룹에 대응하는 리소스 식별 코드이다. 8098은 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스의 리소스 그룹에 대응하는 리소스 식별 코드이다.
퍼징 테스트 장치는 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득한다(314).
여기서, 액세스 식별 코드는 리소스 액세스 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다. 예를 들어, 리소스 액세스 프로그램 명령이 "line 22: memset(dest, 0, 10)"인 경우, 리소스 액세스 프로그램 명령 "line 22: memset(dest, 0, 10)"의 위치를 식별하는데 사용되는 부호는 507로 표시될 수 있고, 리소스 액세스 프로그램 명령이 "line 23: memset(dest, 0, 10)"인 경우, 리소스 액세스 프로그램 명령 "line 23: memset(dest, 0, 10)"의 위치를 식별하는데 사용되는 부호는 508로 표시될 수 있고, 리소스 액세스 프로그램 명령이 "line 24: strcpy(dest, src)"인 경우, 리소스 액세스 프로그램 명령 "line 24: strcpy(dest, src)"의 위치를 식별하는데 사용되는 부호는 509로 표시될 수 있다.
또한, 예시에서, 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스는 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스를 포함하는 리소스 그룹에 포함된다. 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스에 액세스하기 위한 프로그램 명령이 존재하는 경우, 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스에 액세스한 프로그램 명령의 위치는 부호 214로 표시될 수 있고, 즉 214는 리소스 식별 코드 8088에 대응하는 하나의 액세스 식별 코드이다.
다른 예로, 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스는 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스를 포함하는 리소스 그룹에 포함된다. 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스에 액세스하기 위한 프로그램 명령이 존재하는 경우, 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스에 액세스한 프로그램 명령의 위치는 부호 215로 표시될 수 있고, 즉 215는 리소스 식별 코드 8098에 대응하는 하나의 액세스 식별 코드이다.
따라서, 상술한 예의 방법을 통해, 퍼징 테스트 과정 중 각 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득할 수 있다.
퍼징 테스트 장치는 리소스 식별 코드 및 해당 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득한 후에, 획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정할 수 있다(316).
예에서, 리소스 식별 코드 8088과 액세스 식별 코드 214는 하나의 식별 쌍으로, 본 개시에서 (8088, 214)로 기록될 수 있고, 리소스 식별 코드 8098 및 액세스 식별 코드 215는 하나의 식별 쌍으로, 본 개시에서 (8098, 215)로 기록될 수 있다.
여기서, 예시 중 리소스 식별 코드와 액세스 식별 코드는 디지털 문자이지만, 본 개시의 리소스 식별 코드와 액세스 식별 코드는 이에 제한되지 않으며, 하나 이상의 영어 문자, 숫자 및 구두점(punctuation marks)의 조합일 수 있음을 유의해야 한다. 본 개시는 이에 어떠한 제한도 하지 않는다.
퍼징 테스트 장치는 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인한다(318).
318단계의 확인결과 처음으로 액세스된 리소스의 존재하면, 퍼징 테스트 장치는 새 리소스에 액세스했음을 나타내는 리소스 액세스 피드백을 생성한다(322).
318단계의 확인결과 처음으로 액세스된 리소스의 존재하지 않으면, 퍼징 테스트 장치는 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성한다(320).
구체적으로, 식별 쌍을 결정한 후, 각 식별 쌍에 해당하는 리소스 그룹의 액세스 기록을 만들고 추적할 수 있다. 예를 들어, 퍼징 테스트 장치가 실행하는 동안 두 개의 리소스 신청 프로그램 명령 a와 b가 있고, 세 개의 리소스 액세스 프로그램 명령 x, y 및 z가 있다고 가정한다. 리소스 신청 프로그램 명령 a의 위치를 식별하는 리소스 식별 코드는 A이고, 리소스 신청 프로그램 명령 b의 위치를 식별하는 리소스 식별 코드는 B이고, 리소스 액세스 프로그램 명령 x의 위치를 식별하는 리소스 식별 코드는 X이고, 리소스 액세스 프로그램 명령 y의 위치를 식별하는 리소스 식별 코드는 Y이고, 리소스 액세스 프로그램 명령 z의 위치를 식별하는 리소스 식별 코드는 Z이다.
리소스 액세스 프로그램 명령 y가 리소스 신청 프로그램 명령 a에 의해 신청된 리소스 그룹에 액세스하고, 리소스 액세스 프로그램 명령 x, y 및 z가 각각 리소스 신청 명령 프로그램 b에 의해 신청된 리소스 그룹에 액세스하는 경우, 신청된 리소스 그룹의 액세스 기록을 추적해야 한다. 예를 들어, 아래 <표 1>에 표시된 바와 같이, 식별 쌍에 대응하는 리소스 액세스 명령에 해당하는 리소스 그룹의 액세스 기록을 추적해야 한다.
액세스 식별 코드X 액세스 식별 코드Y 액세스 식별 코드Z
리소스 식별 코드A
리소스 식별 코드B
구체적으로, 동일한 식별 쌍의 경우, 해당 동일한 식별 쌍의 여러 차례 실행을 동일한 리소스 그룹의 액세스 기록에 매핑할 수 있다. 예를 들어, 실제로 퍼징 테스트 장치가 테스트 입력을 처리할 때, 상이한 프로그램 설계 및 구현에 따라, 리소스 식별자에 대응하는 리소스 신청 프로그램 명령 및 액세스 식별 코드에 대응하는 리소스 액세스 프로그램 명령은 여러 번, 심지어 수백만 번 실행된다. 예를 들어, 특정 테스트 입력을 처리할 때 여러 번 실행하거나, 복수의 테스트 입력을 처리할 때 여러 번 실행할 수 있다. 이유로, 동일한 식별 쌍이 현재 실행 중 신청한 리소스의 실제 주소 및 액세스한 리소스의 실제 주소는, 이전 또는 후속 실행 시 신청한 리소스의 실제 주소 및 액세스한 리소스의 실제 주소와 정확히 동일하지 않다. 그러나 여러 번 실행하더라도 동일한 식별 쌍이기 때문에, 리소스 그룹의 액세스 기록을 생성하거나 추적하기만 하면 되며, 즉 해당 식별 쌍에 해당하는 리소스 중 퍼징 테스트 장치가 처음으로 액세스한 리소스의 존재 여부를 결정할 수 있다.
퍼징 테스트 장치는 식별 쌍에 해당하는 리소스 그룹의 액세스 기록을 추적하기 위해, 리소스 그룹에 포함된 리소스의 절대 주소(즉, 실제 주소)를 상대 주소로 변환할 수 있다. 즉, 리소스 그룹의 리소스를 순서대로 번호를 매길 수 있다. 예를 들어, 리소스 그룹의 리소스를 길이에 따라 1부터 번호를 매길 수 있다. 여기서, 리소스 신청 프로그램 명령이 신청한 리소스의 크기는 가변적이므로, 리소스 그룹 액세스 기록의 길이는 히스토리의 최대 길이로 제한될 수 있다.
이하, 구체적 예시와 결합하여 임의의 식별 쌍에 해당하는 리소스 중 퍼징 테스트 장치가 처음 액세스한 리소스의 존재 여부를 결정하는 방법에 대해 설명한다.
도 6는 일 실시 예에 따른 임의의 식별 쌍에 해당하는 리소스 중 퍼징 테스트 장치가 처음 액세스한 리소스의 존재 여부를 결정하는 예를 도시한 도면이다.
도 6를 참조하면, 리소스 신청 프로그램 명령 a의 위치를 식별하는 리소스 식별 코드가 A이고, 리소스 액세스 프로그램 명령 x의 위치를 식별하는 리소스 식별 코드가 X인 식별 쌍이 (A, X)라고 가정한다. 리소스 신청 프로그램 명령 a는 리소스 그룹 P를 신청하였고, 그중, "0"은 리소스에 액세스하지 않음을 나타내고, "1"은 리소스에 액세스했음을 나타낸다. 리소스 신청 프로그램 명령 a를 처음 실행하면, 4개의 리소스가 신청되며, 실제 주소 구간은 0x8040 내지 0x8043이다.
리소스 액세스 프로그램 명령 x가 처음 실행되면, 리소스 2번 및 리소스 3번에 액세스한다. 첫 번째 액세스이므로 2번 및 3번 리소스에 대한 액세스를 트리거한다. 이때, 리소스 그룹 P에 처음으로 액세스한 리소스가 있으므로, 새로운 리소스에 액세스하였음을 나타내는 리소스 액세스 피드백을 생성할 수 있다.
리소스 액세스 프로그램 명령 x를 두 번째 실행하면, 역시 리소스 2번 및 리소스 3번에 액세스하지만, 이 두 리소스는 리소스 액세스 프로그램 명령 x가 처음 실행될 때 액세스된 것이므로, 새로운 번호의 리소스 액세스가 트리거되지 않는다. 다시 말해, 리소스 액세스 프로그램 명령 x를 두 번째 실행하면, 리소스 그룹 P에 처음으로 액세스한 리소스가 없기 때문에, 새로운 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성할 수 있다.
리소스 신청 프로그램 명령 a를 두 번째 실행하면, 8개의 리소스가 신청되며, 실제 주소 구간은 0x8080 내지 0x8087이다. 여기서 유의해야 할 점은, 리소스 신청 프로그램 명령 a의 첫 번째 실행과 두 번째 실행 시 신청한 리소스의 실제 주소는 다르지만, 동일한 리소스 그룹 P에 속하기 때문에, 이전 리소스의 길이를 4에서 8로 늘릴 수 있다. 즉, 리소스 그룹 P는 번호가 1에서 8까지 매겨진 리소스를 포함하고, 리소스 액세스 프로그램 명령 x는 세 번째 실행 시, 1번 리소스에 액세스하며, 번호가 1인 리소스에 액세스한 적이 없기 때문에, 새로운 번호의 리소스 액세스가 트리거된다. 이때, 리소스 그룹 P에는 처음으로 액세스한 리소스가 있으므로, 새로운 리소스에 액세스하였음을 나타내는 리소스 액세스 피드백을 생성할 수 있다.
이처럼 식별 쌍에 대응하는 리소스가 액세스되었는지 확인하는 방법을 통해, 실제 주소와 할당 길이의 실제 실행 과정 중 가변으로 인한 액세스 확인의 부정확한 결함을 제거한다.
다시 도 2의 설명으로 돌아와서, 퍼징 테스트 장치는 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해, 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정한다(230).
예를 들어, 리소스 액세스 피드백이 피드백 표시기라고 가정하면, 퍼징 테스트 장치는 구체적으로 해당 피드백 표시기를 확인하여 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해, 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정할 수 있다. 예를 들어, 해당 피드백 표시기가 "1"이면, 처음으로 액세스한 리소스가 있다는 것을 나타내고, 이는 해당 테스트 입력이 가용하다는 것을 설명하므로, 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해 테스트 입력 큐에 테스트 입력을 추가할 수 있다. 퍼징 테스트 장치는 해당 피드백 표시기가 "0"인 경우, 처음으로 액세스한 리소스가 없다는 것을 나타내고, 이는 해당 테스트 입력이 가용할 수 없다는 것을 설명하므로, 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해 테스트 입력 큐에 테스트 입력을 추가를 포기한다.
여기서, 230단계와 관련하여, 일 예로, 리소스 액세스 피드백이 새로운 리소스에 액세스했음을 나타내는지 여부를 결정할 수 있다. 리소스에 액세스 피드백이 새로운 리소스에 액세스했음을 나타낸 경우, 테스트 입력 큐에 테스트 입력을 추가하여 퍼징 테스트 장치에 대해 다음 퍼징 테스트를 수행한다. 퍼징 테스트 장치는 리소스 액세스 피드백이 새로운 리소스에 액세스하지 않음을 나타낸 경우, 테스트 입력을 포기한다.
사실상, 종래 기술에서 스택 메모리와 힙 메모리는 동적으로 할당된다(전자는 컴파일러에 의해 할당되고, 후자는 프로그래머에 의해 할당됨). 따라서, 프로그램에 다른 작업이 있을 경우, 실제 획득한 주소 범위를 변경할 수 있으며, 식별 쌍 및 대응하는 리소스에 대한 액세스 상황을 기록함으로써 반복 액세스 및/또는 다중 라운드 테스트의 경우 주소 변경을 제거할 수 있다.
이와 같이, 방법을 통해 가용 입력 유즈 케이스를 선별한 다음, 선택한 가용 입력 유즈 케이스(use case)를 기반으로 동일한 실행 경로에 대한 심도 테스트를 수행하여 더 많은 심층적인 취약점을 발견하는 기술적 효과를 달성할 수 있음을 알 수 있다.
또한, 바람직하게, 퍼징 테스트 방법은 퍼징 테스트 장치의 비정상 여부를 모니터링하는 단계를 추가로 더 포함할 수 있다(도 2에 도시되지 않음).
구체적으로, 리소스 액세스 피드백이 새로운 리소스에 액세스했음을 나타내는 경우, 임의의 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령 실행 시 액세스한 주소 구간을 결정하고, 결정된 주소 구간이 임의의 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 퍼징 테스트 장치가 비정상임을 나타내는 경보 신호를 발생할 수 있다.
예를 들어, 식별 쌍(6900, 230)의 리소스 식별 코드 6900에 대응하는 리소스 그룹이 시작 주소 0x6542에서 끝 주소 0x6548까지의 구간의 리소스를 포함하고, 액세스 식별 코드 230이 액세스 시작 주소 0x6546에서 끝 주소 0x6549까지의 구간의 리소스에 대응한다고 가정한다. 그중, "0"은 리소스에 액세스하지 않음을 나타내고, "1"은 리소스에 액세스했음을 나타내며, 리소스 식별 코드 6900에 대응하는 리소스 그룹이 포함한 리소스는 신청 시 모두 액세스하지 않았고(모든 리소스는 모두 "0"임), 작업 후 주소가 0x6546 및 0x6547인 리소스에 처음으로 액세스했음("0"에서 "1"로 변함)을 알 수 있다. 또한, 리소스 식별 코드 6900에 대응하는 리소스 중 주소가 0x6548 및 0x6549인 리소스에 액세스하게 되는데, 이는 식별 쌍(6900, 230)에 해당하는 주소 구간 0x6546 내지 0x6549가 리소스 식별 코드 6900에 대응하는 리소스 그룹의 주소 구간 0x6542 내지 0x6548 내에 속하지 않음을 의미하고, 이는 액세스 식별 코드에 대응하는 리소스의 액세스 과정에서 오버플로우 문제(오버플로우 또는 언더플로우)가 발생함을 의미한다. 해당 오버플로우는 퍼징 테스트 장치의 이상(常)으로 이어지므로, 퍼징 테스트 장치의 이상을 나타내는 경보 신호를 보낼 수 있다.
또한, 퍼징 테스트 장치는 액세스 식별 코드에 대응하는 리소스의 액세스 과정 중 오버플로우 문제가 발생하더라도, 리소스 액세스 피드백은 새로운 리소스 액세스가 생성되었음을 나타내므로, 테스트 입력 큐에도 테스트 입력이 추가된다.
또한, 바람직하게, 퍼징 테스트 장치에서 퍼징 테스트 방법은 리소스 그룹을 해제하는 단계를 추가로 더 포함할 수 있다(도 2에 도시되지 않음).
구체적으로, 퍼징 테스트 장치는 적어도 하나의 리소스 그룹 중 하나 이상의 리소스 그룹의 리소스 해제 동작에 응답하여, 대응하는 리소스 그룹을 해제할 수 있다. 퍼징 테스트 장치는 선택적으로, 식별 쌍에 대응하는 리소스 액세스 명령 쌍에 해당하는 리소스 그룹의 액세스 기록 또한 삭제할 수 있다. 이러한 방법을 통해, 메모리의 재사용을 보장할 수 있다.
또한, 바람직하게, 퍼징 테스트 장치에서 퍼징 테스트 방법은 코드 커버리지를 이용하여 테스트 입력을 선별하는 단계를 추가로 더 포함할 수 있다(도 2에 도시되지 않음).
퍼징 테스트 장치는 테스트 입력을 기반으로 퍼징 테스트 장치의 실행 과정 중의 퍼징 테스트 장치가 실행하는 코드 라인을 결정하고, 새 코드 라인이 생성되는 경우, 테스트 입력 큐에 테스트 입력을 추가하고, 새 코드 라인이 생성되지 않는 경우, 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정할 수 있다. 퍼징 테스트 장치는 이러한 방법을 통해, 코드 커버리지 방법을 기반으로 리소스 액세스 피드백 방법을 결합하여 테스트 입력이 가용 테스트 유즈 케이스인지 결정할 수 있고, 테스트 입력 판단의 정확성을 높일 수 있다.
퍼징 테스트 장치의 실행 과정 중, 리소스 액세스 피드백을 획득하는 단계와 퍼징 테스트 장치가 실행하는 코드 라인이 새로운 코드 라인을 생성하는지 여부를 결정하는 단계는, 두 단계의 순서가 고정되어 있지 않을 수 있다.
퍼징 테스트 장치는 퍼징 테스트 장치가 실행하는 코드 라인이 생성한 새로운 코드 라인을 먼저 획득한 경우, 이에 따라 테스트 입력 큐에 테스트 입력을 추가할 수 있고, 리소스 액세스 피드백을 먼저 획득하고 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타낸 경우, 테스트 입력 큐에 테스트 입력을 추가할 수 있다. 반면, 퍼징 테스트 장치는 퍼징 테스트 장치가 실행하는 코드 라인이 새로운 코드 라인을 생성하지 않음을 먼저 결정한 경우, 계속해서 리소스 액세스 피드백을 획득한 후, 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정한다.
이상, 본 개시의 실시 예에 따른 퍼징 테스트 방법에서는, 리소스 액세스 피드백을 사용하여 퍼징 테스트를 안내하는 방법을 통해 가용 입력 유즈 케이스를 획득할 수 있고, 획득한 가용 입력 유즈 케이스를 기반으로 동일한 실행 경로에 대한 심도 테스트를 수행하여 더 많은 심층적인 취약점을 발견하는 기술적 효과를 달성할 수 있다.
도 4는 일 실시 예에 따른 퍼징 테스트 장치에서 퍼징 테스트하는 과정을 도시한 흐름도이다.
도 4를 참조하면, 퍼징 테스트 장치는 테스트 입력을 수신한다(410). 여기서, 퍼징 테스트 장치는 퍼징 테스트를 통해 소프트웨어 취약점을 찾을 수 있는 대상 시스템을 뜻하며, 테스트 입력은 무효 데이터, 예상치 못한 데이터 또는 임의의 데이터 중 하나 이상의 조합일 수 있다.
그리고, 퍼징 테스트 장치는 테스트 입력을 기반으로 퍼징 테스트 장치의 실행 과정 중의 퍼징 테스트 장치가 실행하는 코드 라인을 결정한다(412).
그리고, 퍼징 테스트 장치는 새 코드 라인이 생성되었는지 확인한다(414).
414단계의 확인결과 새 코드 라인이 생성된 경우, 퍼징 테스트 장치는 테스트 입력 큐에 테스트 입력을 추가한다(434).
414단계의 확인결과 새 코드 라인이 생성되지 않는 경우, 퍼징 테스트 장치는 테스트 입력을 처리하기 위해 퍼징 테스트 장치가 리소스 그룹을 획득한다(416). 이때, 리소스 그룹은 적어도 하나의 리소스를 포함한다.
그리고, 퍼징 테스트 장치는 리소스 그룹에 대응하는 리소스 식별 코드를 획득한다(418). 여기서, 리소스 식별 코드는 리소스 신청 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다.
그리고, 퍼징 테스트 장치는 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득한다(420). 여기서, 액세스 식별 코드는 리소스 액세스 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다.
그리고, 퍼징 테스트 장치는 획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정할 수 있다(422).
그리고, 퍼징 테스트 장치는 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인한다(424).
424단계의 확인결과 처음으로 액세스된 리소스의 존재하면, 퍼징 테스트 장치는 새 리소스에 액세스했음을 나타내는 리소스 액세스 피드백을 생성한다(426).
그리고, 퍼징 테스트 장치는 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령 실행 시 액세스한 주소 구간을 결정한다(428).
그리고, 퍼징 테스트 장치는 결정된 주소 구간이 임의의 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 존재하는지 확인한다(430).
430단계의 확인결과, 결정된 주소 구간이 임의의 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 존재하지 않으면, 퍼징 테스트 장치는 비정상임을 나타내는 경보 신호를 발생한다(432).
430단계의 확인결과, 결정된 주소 구간이 임의의 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 존재하면, 퍼징 테스트 장치는 테스트 입력 큐에 테스트 입력을 추가한다(434).
424단계의 확인결과 처음으로 액세스된 리소스의 존재하지 않으면, 퍼징 테스트 장치는 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성한다(436).
그리고, 퍼징 테스트 장치는 테스트 입력 큐에 테스트 입력을 추가를 포기한다(438).
이하, 상기와 같이 구성된 본 개시에 따른 장치를 아래에서 도면을 참조하여 설명한다.
도 7은 일 실시 예에 따른 퍼징 테스트 장치에 대한 개략적인 구성을 도시한 도면이다.
도 7을 참조하면, 퍼징 테스트 장치는 수신부(710), 획득부(720) 및 결정부(730)를 포함할 수 있다.
수신부(710)는 테스트 입력을 수신한다.
여기서, 퍼징 테스트 장치는 퍼징 테스트를 통해 소프트웨어 취약점을 찾을 수 있는 시스템을 뜻하며, 테스트 입력은 무효 데이터, 예상치 못한 데이터 또는 임의의 데이터 중 하나 이상의 조합일 수 있다.
획득부(720)는 테스트 입력을 기반으로 퍼징 테스트 장치의 실행 과정 중의 리소스 액세스 피드백을 획득하는데 사용되고, 그중, 리소스 액세스 피드백은 리소스에 대한 퍼징 테스트 장치의 액세스 상황을 나타낸다.
본 개시의 실시 예에서, 테스트 입력에 기초한 퍼징 테스트 장치의 실행 과정은 그레이 박스 테스팅(Grey-box Testing) 과정으로 이해할 수 있다. 그러나, 본 개시의 실시 예에서 수행되는 과정은 그레이 박스 테스팅에 제한되지 않으며, 다른 유형의 퍼징 테스트일 수도 있으며, 본 개시는 이에 어떠한 제한도 하지 않음을 이해해야 한다.
일 예로, 리소스는 컴퓨터 프로그램 운영 시 액세스될 수 있는 컴퓨팅 리소스 또는 외부 리소스를 지칭할 수 있으며, 예를 들어, 메모리(예를 들어, 하나 이상의 전역 변수, 힙 및 스택의 조합), 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 또는 그래프의 에지 등을 포함할 수 있으나 이에 제한되지 않는다.
또한, 일 예로, 리소스 액세스 피드백은 퍼징 테스트 장치가 실행 과정 중 리소스에 대한 액세스 중 처음으로 액세스한 리소스의 존재 여부 결과를 나타내는데 사용될 수 있다. 예를 들어, 리소스 액세스 피드백은 피드백 표시기일 수 있다. 예를 들어, 피드백 표시기는 "1" 또는 "0"이고, 그중, 피드백 표시기가 "1"인 경우, 처음으로 액세스한 리소스가 있다는 것을 나타내고, 피드백 표시기가 "0"인 경우, 처음으로 액세스한 리소스가 없다는 것을 나타낼 수 있다.
도 8은 일 실시 예에 따른 퍼징 테스트 장치의 획득부의 세부 구성을 도시한 도면이다.
도 8을 참조하면, 획득부(720)는 리소스 그룹 획득부(810), 리소스 식별 코드 획득부(820), 액세스 식별 코드 획득부(830), 식별 쌍 결정부(840) 및 리소스 액세스 결정부(850)를 포함할 수 있다.
리소스 그룹 획득부(810)는 테스트 입력을 처리하기 위해 퍼징 테스트 장치가 신청한 리소스 그룹을 획득한다. 이때, 리소스 그룹은 적어도 하나의 리소스를 포함한다.
구체적으로, 퍼징 테스트 장치의 테스트 입력 처리 과정 중 복수의 리소스 신청 프로그램 명령이 포함될 수 있으며, 임의의 리소스 신청 프로그램 명령은 하나의 리소스 그룹을 신청할 수 있다. 하나의 리소스 그룹은 하나의 리소스 신청 프로그램 명령이 신청한 리소스의 집합을 의미할 수 있으며, 그중, 해당 리소스 그룹이 포함하는 각 리소스는 실제 주소(즉, 절대 주소)에 해당한다.
또한, 퍼징 테스트 장치의 테스트 입력 처리 과정 중 포함된 서로 다른 리소스 신청 프로그램 명령이 신청한 리소스는 서로 다른 유형의 리소스일 수 있으나, 하나의 리소스 신청 프로그램 명령이 신청한 리소스 그룹이 포함한 리소스는 동일한 유형이다.
리소스 식별 코드 획득부(820)는 리소스 그룹에 대응하는 리소스 식별 코드를 획득한다. 여기서, 리소스 식별 코드는 리소스 신청 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다. 예를 들어, 리소스 신청 프로그램 명령이 "line 10: char *p1 = (char*) malloc(10*sizeof(char));"인 경우, 리소스 신청 프로그램 명령 "line 10: char *p1 = (char*) malloc(10*sizeof(char));"의 위치를 식별하는데 사용되는 부호는 5023으로 표시될 수 있다. 다른 예를 들어, 리소스 신청 프로그램 명령이 "line 11: char p2[10];"인 경우, 리소스 신청 프로그램 명령"line 11: char p2[10];"의 위치를 식별하는데 사용되는 부호는 5024로 표시될 수 있다.
또한, 일 예로, 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스를 포함하도록 신청한 리소스 그룹의 프로그램 명령 위치에 부호 8088이 표시될 수 있고, 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스를 포함하도록 신청한 리소스 그룹의 프로그램 명령 위치에 부호 8098이 표시될 수 있다. 8088은 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스의 리소스 그룹에 대응하는 리소스 식별 코드이다. 8098은 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스의 리소스 그룹에 대응하는 리소스 식별 코드이다.
액세스 식별 코드 획득부(830)는 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득한다. 여기서, 액세스 식별 코드는 리소스 액세스 프로그램 명령의 위치를 식별하는데 사용되는 부호를 나타낸다. 예를 들어, 리소스 액세스 프로그램 명령이 "line 22: memset(dest, 0, 10)"인 경우, 리소스 액세스 프로그램 명령"line 22: memset(dest, 0, 10)"의 위치를 식별하는데 사용되는 부호는 507로 표시될 수 있고, 리소스 액세스 프로그램 명령이 "line 23: memset(dest, 0, 10)"인 경우, 리소스 액세스 프로그램 명령"line 23: memset(dest, 0, 10)"의 위치를 식별하는데 사용되는 부호는 508로 표시될 수 있고, 리소스 액세스 프로그램 명령이 "line 24: strcpy(dest, src)"인 경우, 리소스 액세스 프로그램 명령"line 24: strcpy(dest, src)"의 위치를 식별하는데 사용되는 부호는 509로 표시될 수 있다.
또한, 일 예에서, 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스는 시작 주소 9010에서 끝 주소 9020까지의 구간의 리소스를 포함하는 리소스 그룹에 포함된다. 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스에 액세스하기 위한 프로그램 명령이 존재하는 경우, 시작 주소 9010에서 끝 주소 9014까지의 구간의 리소스에 액세스한 프로그램 명령의 위치는 부호 214로 표시될 수 있고, 즉 214는 리소스 식별 코드 8088에 대응하는 하나의 액세스 식별 코드이다.
다른 예로, 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스는 시작 주소 9030에서 끝 주소 9040까지의 구간의 리소스를 포함하는 리소스 그룹에 포함된다. 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스에 액세스하기 위한 프로그램 명령이 존재하는 경우, 시작 주소 9035에서 끝 주소 9037까지의 구간의 리소스에 액세스한 프로그램 명령의 위치는 부호 215로 표시될 수 있고, 즉 215는 리소스 식별 코드 8098에 대응하는 하나의 액세스 식별 코드이다.
방법과 유사한 방법을 통해, 퍼징 테스트 과정 중 각 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득할 수 있다.
리소스 식별 코드 및 해당 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득한 후, 식별 쌍 결정부(840)는 획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정한다.
예에서, 리소스 식별 코드 8088과 액세스 식별 코드 214는 하나의 식별 쌍으로, 본 개시에서 (8088, 214)로 기록될 수 있고, 리소스 식별 코드 8098 및 액세스 식별 코드 215는 하나의 식별 쌍으로, 본 개시에서 (8098, 215)로 기록될 수 있다.
예에서 리소스 식별 코드와 액세스 식별 코드는 디지털 문자이지만, 본 개시의 리소스 식별 코드와 액세스 식별 코드는 이에 제한되지 않으며, 하나 이상의 영어 문자, 숫자 및 구두점(punctuation marks)의 조합일 수 있음을 유의해야 한다. 본 개시는 이에 어떠한 제한도 하지 않는다.
리소스 액세스 결정부(850)는 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 결정하는데 사용된다. 처음으로 액세스된 리소스가 있는 경우, 새 리소스에 액세스했음을 나타내는 리소스 액세스 피드백을 생성하고, 처음으로 액세스된 리소스가 없는 경우, 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성한다.
이처럼 식별 쌍에 대응하는 리소스가 액세스되었는지 확인하는 방법을 통해, 실제 주소와 할당 길이의 실제 실행 과정 중 가변으로 인한 액세스 확인의 부정확한 결함을 제거한다.
다시 도 7의 설명으로 돌아와서, 결정부(730)는 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해, 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정한다.
예를 들어, 리소스 액세스 피드백이 피드백 표시기라고 가정하면, 결정부(730)는 구체적으로 결정 유닛(300)은 해당 피드백 표시기를 확인하여 퍼징 테스트 장치에 대한 다음 퍼징 테스트를 위해, 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정할 수 있다. 예를 들어, 결정부(730)는 해당 피드백 표시기가 "1"이면, 처음으로 액세스한 리소스가 있다는 것을 나타내고, 이는 해당 테스트 입력이 가용하다는 것을 설명하므로, 테스트 입력 큐에 테스트 입력을 추가할 수 있다. 결정부(730)는 해당 피드백 표시기가 "0"인 경우, 처음으로 액세스한 리소스가 없다는 것을 나타내고, 이는 해당 테스트 입력이 가용할 수 없다는 것을 설명하므로, 테스트 입력 큐에 테스트 입력을 포기한다.
예를 들어, 결정부(730)는 리소스 액세스 결정부(850)에 의해 생성된 리소스 액세스 피드백이 새로운 리소스에 액세스했음을 나타내는지 여부를 결정하고, 리소스 액세스 피드백이 새로운 리소스에 액세스했음을 나타내는 경우, 결정부(730)는 테스트 입력을 테스트 입력 큐에 추가하고, 리소스 액세스 피드백이 새로운 리소스에 액세스 하지 않았음을 나타내는 경우, 결정부(730)는 테스트 입력을 포기한다.
사실상, 종래 기술에서 스택 메모리와 힙 메모리는 동적으로 할당된다(전자는 컴파일러에 의해 할당되고, 후자는 프로그래머에 의해 할당됨). 따라서, 프로그램에 다른 작업이 있을 경우, 실제 획득한 주소 범위를 변경할 수 있으며, 식별 쌍 및 대응하는 리소스에 대한 액세스 상황을 기록함으로써 반복 액세스 및/또는 다중 라운드 테스트의 경우 주소 변경을 제거할 수 있다.
이와 같이, 방법을 통해 가용 입력 유즈 케이스를 선별한 다음, 선택한 가용 입력 유즈 케이스를 기반으로 동일한 실행 경로에 대한 심도 테스트를 수행하여 더 많은 심층적인 취약점을 발견하는 기술적 효과를 달성할 수 있음을 알 수 있다.
또한, 퍼징 테스트 장치는 구간 결정부과 경보부(도 7에 도시되지 않음)을 더 포함할 수 있다.
구간 결정부는 리소스 액세스 결정부(850)이 생성한 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는데 사용된다.
경보부는 결정된 주소 구간이 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 퍼징 테스트 장치가 비정상임을 나타내는 경보 신호를 발생할 수 있다.
또한, 바람직하게, 퍼징 테스트 장치는 테스트 입력을 기반으로 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 코드 라인 결정부(도 7에 도시되지 않음)를 더 포함할 수 있다.
코드 라인 결정부에서 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않음을 결정한 경우, 결정부(730)는 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정할 수 있다.
또한, 코드 라인 결정부는 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 결정부(730)는 테스트 입력 큐에 테스트 입력을 추가할 수 있다.
본 개시의 실시 예에 따른 퍼징 테스트 장치의 다양한 구성은 하드웨어 구성 요소 및/또는 소프트웨어 구성 요소로 구현될 수 있음을 이해해야 한다. 본 기술분야의 통상의 지식을 가진 자는 한정된 각 유닛에 의해 수행되는 처리에 따라, 예를 들어 FPGA(Field Programmable Gate Array, 필드 프로그램 가능 게이트 어레이) 또는 ASIC(Application Specific Integrated Circuit, 애플리케이션 특정 직접 회로)를 사용하여 각 구성을 구현할 수 있다.
도 9는 일 실시 예에 따른 퍼징 테스트 장치에 대한 구성을 도시한 도면이다.
도 9를 참조하면, 퍼징 테스트 장치는 수신부(710), 획득부(720), 결정부(730), 코드 라인 결정부(910), 구간 결정부(920) 및 경보부(930)를 포함할 수 있다.
도 9의 설명에서, 도 7에 도시된 구성은 도 7과 동일하므로 자세한 설명을 생략한다.
코드 라인 결정부(910)는 테스트 입력을 기반으로 퍼징 테스트 장치가 실행하는 코드 라인을 결정한다.
코드 라인 결정부(910)에서 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않음을 결정한 경우, 결정부(730)는 리소스 액세스 피드백에 따라 테스트 입력 큐에 테스트 입력을 추가할지 여부를 결정할 수 있다.
또한, 코드 라인 결정부(910)에서 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 결정부(730)는 테스트 입력 큐에 테스트 입력을 추가할 수 있다.
구간 결정부(920)는 리소스 액세스 결정부(850)이 생성한 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는데 사용된다.
경보부(930)는 결정된 주소 구간이 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 퍼징 테스트 장치가 비정상임을 나타내는 경보 신호를 발생할 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 저장할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 청구범위의 범위에 속한다.

Claims (15)

  1. 테스트 입력을 수신하는 단계;
    상기 테스트 입력을 기반으로 리소스에 대한 액세스 상황을 나타내는 리소스 액세스 피드백을 획득하는 단계; 및
    상기 리소스 액세스 피드백에 따라 테스트 입력 큐(queue)에 상기 테스트 입력을 추가할지 여부를 결정하는 단계
    를 포함하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  2. 제1항에 있어서,
    상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 단계
    를 더 포함하고,
    상기 리소스 액세스 피드백에 따라 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계는,
    상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않는 경우, 상기 리소스 액세스 피드백에 따라 상기 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계
    를 포함하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  3. 제1항에 있어서,
    상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 단계; 및
    상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하는 단계
    를 더 포함하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  4. 제1항에 있어서,
    상기 리소스 액세스 피드백을 획득하는 단계는,
    상기 테스트 입력을 처리하기 위해 상기 퍼징 테스트 장치가 신청한 적어도 하나의 리소스를 포함하는 리소스 그룹을 획득하는 단계;
    상기 리소스 그룹에 대응하는 리소스 식별 코드를 획득하는 단계;
    상기 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득하는 단계;
    획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정하는 단계;
    상기 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인하는 단계; 및
    처음으로 액세스된 리소스가 있으면 새 리소스에 액세스했음을 나타내는 리소스 액세스 피드백을 생성하고, 처음으로 액세스된 리소스가 없으면 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성하는 단계
    를 포함하고,
    상기 리소스 식별 코드는,
    리소스 신청 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내고,
    상기 액세스 식별 코드는,
    리소스 액세스 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내는
    퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  5. 제4항에 있어서,
    상기 리소스 액세스 피드백에 따라 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는 단계는,
    상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하는 단계; 및
    상기 리소스 액세스 피드백이 새 리소스에 액세스하지 않음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 포기하는 단계
    를 포함하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  6. 제4항에 있어서,
    상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는 단계; 및
    결정된 주소 구간이 상기 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 비정상임을 나타내는 경보 신호를 발생하는 단계
    를 더 포함하는 퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  7. 제1항에 있어서,
    상기 리소스는,
    메모리, 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 및 그래프의 에지 중 적어도 하나를 포함하는
    퍼징 테스트 장치에서 퍼징 테스트하는 방법.
  8. 제1항 내지 제7항 중 어느 한 항의 방법을 실행하기 위한 프로그램이 기록되어 있는 것을 특징으로 하는 컴퓨터에서 판독 가능한 기록 매체.
  9. 테스트 입력을 수신하는 수신부;
    상기 테스트 입력을 기반으로 리소스에 대한 액세스 상황을 나타내는 리소스 액세스 피드백을 획득하는 획득부; 및
    상기 리소스 액세스 피드백에 따라 테스트 입력 큐(queue)에 상기 테스트 입력을 추가할지 여부를 결정하는 결정부
    를 포함하는 퍼징 테스트 장치.
  10. 제9항에 있어서,
    상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 코드 라인 결정부
    를 더 포함하고,
    상기 결정부는,
    상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하지 않는 경우, 상기 리소스 액세스 피드백에 따라 상기 테스트 입력 큐에 상기 테스트 입력을 추가할지 여부를 결정하는
    퍼징 테스트 장치.
  11. 제9항에 있어서,
    상기 테스트 입력을 기반으로 상기 퍼징 테스트 장치가 실행하는 코드 라인을 결정하는 코드 라인 결정부
    를 더 포함하고,
    상기 결정부는,
    상기 퍼징 테스트 장치가 실행한 코드 라인이 새 코드 라인을 생성하는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하는
    퍼징 테스트 장치.
  12. 제9항에 있어서,
    상기 획득부는,
    상기 테스트 입력을 처리하기 위해 상기 퍼징 테스트 장치가 신청한 적어도 하나의 리소스를 포함하는 리소스 그룹을 획득하는 리소스 그룹 획득부;
    상기 리소스 그룹에 대응하는 리소스 식별 코드를 획득하는 리소스 식별 코드 획득부;
    상기 리소스 식별 코드에 대응하는 액세스 식별 코드를 획득하는 액세스 식별 코드 획득부;
    획득한 액세스 식별 코드 및 대응하는 리소스 식별 코드를 하나의 식별 쌍으로 결정하는 식별 쌍 결정부; 및
    상기 식별 쌍에 대응하는 리소스 중 처음으로 액세스된 리소스의 존재 여부를 확인하고, 처음으로 액세스된 리소스가 있으면 새 리소스에 액세스 했음을 나타내는 리소스 액세스 피드백을 생성하고, 처음으로 액세스된 리소스가 없으면 새 리소스에 액세스하지 않음을 나타내는 리소스 액세스 피드백을 생성하는 리소스 액세스 결정부
    를 포함하고,
    상기 리소스 식별 코드는,
    리소스 신청 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내고,
    상기 액세스 식별 코드는,
    리소스 액세스 프로그램 명령의 위치를 *?*식별하는데 사용되는 부호를 나타내는
    퍼징 테스트 장치.
  13. 제12항에 있어서,
    상기 결정부는,
    상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 추가하고,
    상기 리소스 액세스 피드백이 새 리소스에 액세스하지 않음을 나타내는 경우, 상기 테스트 입력 큐에 상기 테스트 입력을 포기하는
    퍼징 테스트 장치.
  14. 제12항에 있어서,
    상기 리소스 액세스 피드백이 새 리소스에 액세스했음을 나타내는 경우, 상기 식별 쌍에 해당하는 액세스 식별 코드가 식별한 리소스 액세스의 프로그램 명령이 실행될 때의 액세스 할 주소 구간을 결정하는 구간 결정부; 및
    결정된 주소 구간이 상기 식별 쌍에 해당하는 리소스의 시작 주소와 끝 주소 사이에 있지 않는 경우, 비정상임을 나타내는 경보 신호를 발생하는 경보부
    를 더 포함하는 퍼징 테스트 장치.
  15. 제9항에 있어서,
    상기 리소스는,
    메모리, 네트워크 연결 풀의 연결, 이미지의 픽셀, 그래프의 노드 및 그래프의 에지 중 적어도 하나를 포함하는
    퍼징 테스트 장치.
KR1020210033539A 2020-06-18 2021-03-15 퍼징 테스트 방법 및 장치 KR20210156728A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US17/336,360 US11868238B2 (en) 2020-06-18 2021-06-02 Method and apparatus for fuzz testing based on resource access feedback

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202010558216.5 2020-06-18
CN202010558216.5A CN111858307B (zh) 2020-06-18 2020-06-18 模糊测试方法和设备

Publications (1)

Publication Number Publication Date
KR20210156728A true KR20210156728A (ko) 2021-12-27

Family

ID=72986269

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210033539A KR20210156728A (ko) 2020-06-18 2021-03-15 퍼징 테스트 방법 및 장치

Country Status (2)

Country Link
KR (1) KR20210156728A (ko)
CN (1) CN111858307B (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112835796A (zh) * 2021-02-01 2021-05-25 中汽数据(天津)有限公司 一种模糊测试方法、装置及计算机可读存储介质

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100511158C (zh) * 2007-08-28 2009-07-08 中兴通讯股份有限公司 一种内存监控管理的方法及系统
CN104636256B (zh) * 2015-02-17 2017-10-24 中国农业银行股份有限公司 一种内存访问异常的检测方法及装置
CN106557412B (zh) * 2015-09-25 2019-07-05 腾讯科技(深圳)有限公司 一种模糊测试的方法及装置
CN108647145B (zh) * 2018-05-10 2020-01-03 清华大学 软件内存安全检测方法及系统
US10628281B2 (en) * 2018-05-24 2020-04-21 Fujitsu Limited Concurrency vulnerability detection
US10635576B2 (en) * 2018-06-18 2020-04-28 Fujitsu Limited Branch coverage guided symbolic execution for hybrid fuzz testing of software binaries
CN111124926B (zh) * 2019-12-25 2022-09-16 支付宝(杭州)信息技术有限公司 模糊测试方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN111858307B (zh) 2024-04-19
CN111858307A (zh) 2020-10-30

Similar Documents

Publication Publication Date Title
US10872034B2 (en) Method, device and computer program product for executing test cases
US8381192B1 (en) Software testing using taint analysis and execution path alteration
US8661412B2 (en) Managing automated and manual application testing
KR102190727B1 (ko) 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법
US9201769B2 (en) Progressive black-box testing of computer software applications
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
US11232020B2 (en) Fault detection using breakpoint value-based fingerprints of failing regression test cases
US10681076B1 (en) Automated security analysis of software libraries
CN111290941A (zh) 多个接口的测试方法、装置、计算设备和介质
CN105760292A (zh) 一种用于单元测试的断言验证方法和装置
CN111124870A (zh) 一种接口测试方法及装置
US20130247062A1 (en) Verifying synchronization coverage in logic code
CN114253864A (zh) 一种业务测试方法、装置、电子设备及存储介质
US20120054724A1 (en) Incremental static analysis
US20210263837A1 (en) Real time fault localization using combinatorial test design techniques and test case priority selection
US10387288B2 (en) Interactive analysis of a security specification
US20140229923A1 (en) Commit sensitive tests
KR20210156728A (ko) 퍼징 테스트 방법 및 장치
JPWO2019077738A1 (ja) データ検証装置、データ検証方法及びデータ検証プログラム
US20130007529A1 (en) Static analysis based on observed string values during execution of a computer-based software application
US10528257B2 (en) Method and apparatus for reproducing an I/O operation of a storage system
KR102024275B1 (ko) 스크립트를 활용한 시험 프로그램 개발 시스템 및 그 방법
US20140281719A1 (en) Explaining excluding a test from a test suite
US20200293435A1 (en) Function modification for software application testing
US9830253B2 (en) Eliminating redundant interactions when testing computer software applications

Legal Events

Date Code Title Description
A201 Request for examination