KR20210061893A - 소프트웨어 취약점 검출 장치 및 방법 - Google Patents

소프트웨어 취약점 검출 장치 및 방법 Download PDF

Info

Publication number
KR20210061893A
KR20210061893A KR1020190149958A KR20190149958A KR20210061893A KR 20210061893 A KR20210061893 A KR 20210061893A KR 1020190149958 A KR1020190149958 A KR 1020190149958A KR 20190149958 A KR20190149958 A KR 20190149958A KR 20210061893 A KR20210061893 A KR 20210061893A
Authority
KR
South Korea
Prior art keywords
common element
test cases
code coverage
extracting
case
Prior art date
Application number
KR1020190149958A
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 KR1020190149958A priority Critical patent/KR20210061893A/ko
Publication of KR20210061893A publication Critical patent/KR20210061893A/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/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
    • 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/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

소프트웨어 취약점 검출 장치 및 방법이 개시된다. 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치는 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하고, 상기 유사 테스트케이스들에서 공통요소를 추출하고, 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징한다.

Description

소프트웨어 취약점 검출 장치 및 방법 {APPARATUS AND METHOD FOR DETECTING SOFTWARE VULNERABILITY}
본 발명은 컴퓨팅, 소프트웨어 처리 및 보안 기술에 관한 것으로, 보다 상세하게는 소프트웨어 취약점 검출 기술에 관한 것이다.
퍼징은 소프트웨어의 취약점을 점검하기 위해 사용되는 방법 중 하나이다. 퍼징은 임의의 입력을 생성하여 대상 프로그램에 전달한 후, 대상 프로그램의 상태를 점검하여 결함 여부를 판단한다. 무작위로 입력을 생성하는 초기 퍼징 방식이 대상 프로그램의 얕은 실행 경로에만 도달하는 비효율적인 문제를 극복하기 위해 다양한 연구들이 발표되었지만, 기존 연구들이 제안한 방식들은 입력데이터의 구조를 추론하는데 아래와 같은 문제점을 지닌다.
첫 째, 입력 데이터의 구조를 생성하는 경우 해당 구조를 학습하는데 전문 인력과 시간 확보에 많은 자원이 필요하며, 알려진 포맷에서만 입력 데이터의 구조를 생성할 수 있다.
둘 째, 오염 분석(Taint Analysis)과 기호 실행(Symbolic execution) 을 사용하는 경우, 확장성이 떨어져 복잡한 프로그램을 분석하는데 한계를 지닌다.
셋 째, 한 바이트 단위로 입력 데이터를 처음부터 끝까지 순차적으로 변경하여 나타난 실행경로의 특징을 분석하는 경우, 입력 데이터의 크기가 커질수록 분석 시간이 증가하는 문제를 지닌다.
코드 커버리지(Code Coverage)는 입력 데이터인 테스트케이스에 따라 대상 프로그램이 실행되는 흐름을 의미하며, 명령어(instruction) 및 기본 블록(basic block)의 유일한 개수 또는 각 명령어 및 기본 블록의 도달 횟수로 표현되거나, 명령어 및 기본 블록에 도달한 순서인 실행 경로(path) 등으로 표현될 수 있다. 프로그램의 코드 커버리지(Code Coverage)를 측정하기 위한 방법 중 하나로 계측(instrumentation)이 사용된다.
한편, 한국공개특허 제 10-2009-0044656 호 “소프트웨어 취약점 점검 장치 및 방법”는 소프트웨어의 기능별로 퍼징을 수행하는 소프트웨어 취약점 점검 장치 및 방법 에 관하여 개시하고 있다.
본 발명은 효율적으로 소프트웨어의 취약점을 검출하는 방법 및 장치를 제공하는 것을 목적으로 한다.
또한, 본 발명은 크기에 제한이 없는 테스트케이스를 효율적으로 생성하는 기능을 제공하는 것을 목적으로 한다.
상기한 목적을 달성하기 위한 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치는 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 하나 이상의 프로세서 및 상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리를 포함하고, 상기 적어도 하나 이상의 프로그램은 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하고, 상기 유사 테스트케이스들에서 공통요소를 추출하고, 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징한다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 위치 정보를 이용하여 상기 공통요소가 탐색된 테스트케이스에서, 상기 공통요소의 위치에 해당하는 값에 대한 변이를 수행하고, 상기 변이가 수행된 테스트케이스를 퍼징 할 수 있다.
상기한 목적을 달성하기 위한 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법은 소프트웨어 취약점 검출 장치의 소프트웨어 취약점 검출 방법에 있어서, 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하는 단계; 상기 유사 테스트케이스들에서 공통요소를 추출하는 단계 및 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징하는 단계를 포함한다.
이 때, 상기 군집하는 단계는 상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 상기 추출하는 단계는 상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출할 수 있다.
이 때, 상기 추출하는 단계는 델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 추출하는 단계는 상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 퍼징하는 단계는 상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색할 수 있다.
이 때, 상기 퍼징하는 단계는 상기 위치 정보를 이용하여 상기 공통요소가 탐색된 테스트케이스에서, 상기 공통요소의 위치에 해당하는 값에 대한 변이를 수행하고, 상기 변이가 수행된 테스트케이스를 퍼징할 수 있다.
본 발명은 효율적으로 소프트웨어의 취약점을 검출하는 방법 및 장치를 제공할 수 있다.
또한, 본 발명은 크기에 제한이 없는 테스트케이스를 효율적으로 생성하는 기능을 제공할 수 있다.
도 1은 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치를 나타낸 블록도이다.
도 2는 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법을 나타낸 동작흐름도이다.
도 3은 도 2에 도시된 코드 커버리지 군집 수행 단계의 일 예를 세부적으로 나타낸 동작흐름도이다.
도 4는 도 2에 도시된 공통 내용 추출 단계의 일 예를 세부적으로 나타낸 동작흐름도이다.
도 5는 도 2에 도시된 퍼징 수행 단계의 일 예를 세부적으로 나타낸 동작흐름도이다.
도 6은 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 도면이다.
본 발명을 첨부된 도면을 참조하여 상세히 설명하면 다음과 같다. 여기서, 반복되는 설명, 본 발명의 요지를 불필요하게 흐릴 수 있는 공지 기능, 및 구성에 대한 상세한 설명은 생략한다. 본 발명의 실시형태는 당 업계에서 평균적인 지식을 가진 자에게 본 발명을 보다 완전하게 설명하기 위해서 제공되는 것이다. 따라서, 도면에서의 요소들의 형상 및 크기 등은 보다 명확한 설명을 위해 과장될 수 있다.
명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 명세서에 기재된 "??부", "??기", "모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어나 소프트웨어 또는 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치를 나타낸 블록도이다.
도 1을 참조하면, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치는 입력 군집부(110), 공통내용 추출부(120) 및 퍼징 수행부(130)를 포함한다.
입력 군집부(110)는 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 입력 군집부(110)는 상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 입력 군집부(110)는 적어도 하나 이상의 테스트케이스를 입력으로 하여 대상프로그램을 실행한 후, 코드 커버리지를 추출할 수 있다.
이 때, 입력 군집부(110)는 계측을 위해 소프트웨어 취약점 점검에서 소스코드 유무에 따라 실행시간 계측(Run-time Instrumentation)과 컴파일시간 계측(Compile-time Instrumentation)을 수행할 수 있다.
이 때, 입력 군집부(110)는 소스코드가 없는 경우 QEMU와 같은 가상화 소프트웨어 또는 Pin과 같은 동적 바이너리 계측 도구를 이용하여 실행시간 계측(Run-time Instrumentation)을 수행할 수 있다.
이 때, 입력 군집부(110)는 소스코드가 있는 경우, AFL의 afl-gcc를 이용하여 컴파일시간 계측(Compile-time Instrumentation)을 수행 할 수 있다.
이 때, 입력 군집부(110)는 각 테스트케이스와 테스트케이스와 대응되는 코드 커버리지 쌍인 입력 범위 정보를 저장할 수 있다.
이 때, 입력 군집부(110)는 코드 커버리지가 유사한 유사 테스트케이스를 군집할 수 있다.
이 때, 입력 군집부(110)는 서로 다른 테스트케이스들이 코드 커버리지를 구성하는 명령어 또는 기본 블록으로 표현된 순서도 또는 각 명령어 또는 기본블록의 도달 횟수로 표현된 지도 정보가 동일하거나 대부분이 유사한 경우를 유사한 테스트케이스로 판단하여 유사한 테스트케이스 집합 정보를 표현하는 형태를 포함하는 군집 정보로 저장할 수 있다.
공통내용 추출부(120)는 상기 유사 테스트케이스들에서 공통요소를 추출할 수 있다.
이 때, 공통내용 추출부(120)는 상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출할 수 있다.
이 때, 공통내용 추출부(120)는 델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 공통내용 추출부(120)는 상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 공통내용 추출부(120)는 상기 입력 군집부(110)에서 추출한 유사 테스트케이스들을 이용하여 공통요소를 비교할 수 있다.
이 때, 공통내용 추출부(120)는 적어도 둘 이상의 서로 다른 테스트케이스로 구성되고, 테스트케이스 군집간 비교는 두 바이너리 데이터의 차이를 비교할 수 있다.
예를 들어, 공통내용 추출부(120)는 델타 부호화(delta encoding)를 이용하여 두 바이너리 데이터 쌍에 대응하는 비교 정보 파일을 생성할 수 있다.
이 때, 공통내용 추출부(120)는 xdelta3와 같은 명령어 기반 프로그램을 이용하여 비교 정보 파일을 생성할 수 있다.
이 때, 공통내용 추출부(120)는 생성된 비교 정보 파일을 이용하여 테스트케이스에서 공통 요소를 추출할 수 있다.
예를 들어, 공통내용 추출부(120)는 xdelta3로 생성한 비교 정보 파일에서 위치 정보를 추출한 후, 상기 위치 정보를 이용하여 테스트케이스에서 공통요소를 추출할 수 있다.
이 때, 공통내용 추출부(120)는 각 테스트케이스에 대응되는 공통요소를 저장할 수 있다.
퍼징 수행부(130)는 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징할 수 있다.
이 때, 퍼징 수행부(130)는 상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색할 수 있다.
이 때, 퍼징 수행부(130)는 상기 공통내용 추출부(120)에서 추출한 공통요소를 이용하여 테스트케이스의 위치를 판별할 수 있다.
이 때, 퍼징 수행부(130)는 하나의 공통 요소가 테스트케이스에서 하나이상 존재할 수 있으므로, 각 적어도 하나의 공통 요소의 위치 정보를 탐색할 수 있다.
이 때, 퍼징 수행부(130)는 상기의 테스트케이스 내 공통요소 탐색 단계에서 추출한 위치 정보를 이용하여 집중적으로 퍼징을 수행할 수 있다.
이 때, 퍼징 수행부(130)는 상기의 공통요소 위치에 비트 뒤집기(bitflip), 산술 연산 (arithmetic), 흥미로운 값(Interesting) 또는 사전 정의된 값(dictionary)을 이용하여 변이를 수행할 수 있다.
이 때, 퍼징 수행부(130)는 적어도 하나의 위치 정보에 둘 이상을 융합한 혼합 변이를 수행할 수 있다.
바람직하게, 퍼징 수행부(130)는 하나의 테스트케이스가 포함된 테스트케이스 군집에서 추출한 공통 요소뿐만 아니라 하나의 테스트케이스가 포함되지 않는 공통요소를 대입하거나 상기의 공통요소를 대입 후 상기의 혼합 변이 방식을 수행할 수 있다.
이 때, 퍼징 수행부(130)는 생성한 테스트케이스를 입력으로 하여 대상 프로그램을 실행시키고 코드 커버리지를 측정할 수 있다.
이 때, 퍼징 수행부(130)는 새로운 코드 커버리지를 탐색하면, 상기의 코드 커버리지에 대응하는 테스트케이스를 포함한 입력 집합으로 테스트케이스를 군집할수 있다.
이 때, 퍼징 수행부(130)는 새로운 코드 커버리지를 탐색하지 못하는 경우, 할당한 시간 또는 테스트케이스 생성횟수 또는 실행횟수와 같은 만족 조건에 도달하면 퍼징 수행을 종료할 수 있다.
도 2는 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법을 나타낸 동작흐름도이다. 도 3은 도 2에 도시된 코드 커버리지 군집 수행 단계의 일 예를 세부적으로 나타낸 동작흐름도이다. 도 4는 도 2에 도시된 공통 내용 추출 단계의 일 예를 세부적으로 나타낸 동작흐름도이다. 도 5는 도 2에 도시된 퍼징 수행 단계의 일 예를 세부적으로 나타낸 동작흐름도이다.
도 2를 참조하면, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법은 코드 커버리지 군집을 수행할 수 있다(S210).
즉, 단계(S210)는 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
도 3을 참조하면, 단계(S210)는 먼저 복수개의 테스트케이스들을 입력 받을 수 있다(S211).
이 때, 단계(S211)는 상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 단계(S211)는 적어도 하나 이상의 테스트케이스를 입력으로 하여 대상프로그램을 실행한 후, 코드 커버리지를 추출할 수 있다.
또한, 단계(S210)는 프로그램 계측을 수행할 수 있다(S212).
즉, 단계(S212)는 계측을 위해 소프트웨어 취약점 점검에서 소스코드 유무에 따라 실행시간 계측(Run-time Instrumentation)과 컴파일시간 계측(Compile-time Instrumentation)을 수행할 수 있다.
이 때, 단계(S212)는 소스코드가 없는 경우 QEMU와 같은 가상화 소프트웨어 또는 Pin과 같은 동적 바이너리 계측 도구를 이용하여 실행시간 계측(Run-time Instrumentation)을 수행할 수 있다.
이 때, 단계(S212)는 소스코드가 있는 경우, AFL의 afl-gcc를 이용하여 컴파일시간 계측(Compile-time Instrumentation)을 수행 할 수 있다.
또한, 단계(S210)는 코드 커버리지에 관한 정보를 저장할 수 있다(S213).
즉, 단계(S213)는 각 테스트케이스와 테스트케이스와 대응되는 코드 커버리지 쌍인 입력 범위 정보를 저장할 수 있다.
또한, 단계(S210)는 종료 조건 여부를 확인할 수 있다(S214).
즉, 단계(S214)는 모든 테스트케이스들에 대한 코드 커버리지 추출, 프로그램 계측 및 코드 커버리지에 관한 정보를 저장하여 종료 조건이 만족된 경우, 유사 테스트케이스 군집화를 수행하고(S215), 종료 조건이 만족되지 않은 경우 단계(S211)로 되돌아가 테스트케이스에 대한 코드 커버리지 추출을 수행할 수 있다.
즉, 단계(S215)는 코드 커버리지가 유사한 유사 테스트케이스를 군집할 수 있다.
또한, 단계(S210)는 군집 코드 커버리지에 관한 군집 정보를 저장할 수 있다(S216).
즉, 단계(S216)는 서로 다른 테스트케이스들이 코드 커버리지를 구성하는 명령어 또는 기본 블록으로 표현된 순서도 또는 각 명령어 또는 기본블록의 도달 횟수로 표현된 지도 정보가 동일하거나 대부분이 유사한 경우를 유사한 테스트케이스로 판단하여 유사한 테스트케이스 집합 정보를 표현하는 형태를 포함하는 군집 정보로 저장할 수 있다.
또한, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법은 공통내용을 추출할 수 있다(S220).
즉, 단계(S220)는 상기 유사 테스트케이스들에서 공통요소를 추출할 수 있다.
이 때, 단계(S220)는 상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출할 수 있다.
이 때, 단계(S220)는 델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출할 수 있다.
도 4를 참조하면, 단계(S220)는 유사 테스트케이스들의 군집 내용 차이를 비교할 수 있다(S221).
즉, 단계(S221)는 상기 입력 군집부(110)에서 추출한 유사 테스트케이스들을 이용하여 공통요소를 비교할 수 있다.
이 때, 단계(S221)는 적어도 둘 이상의 서로 다른 테스트케이스로 구성되고, 테스트케이스 군집간 비교는 두 바이너리 데이터의 차이를 비교할 수 있다.
예를 들어, 단계(S221)는 델타 부호화(delta encoding)를 이용하여 두 바이너리 데이터 쌍에 대응하는 비교 정보 파일을 생성할 수 있다.
이 때, 단계(S221)는 xdelta3와 같은 명령어 기반 프로그램을 이용하여 비교 정보 파일을 생성할 수 있다.
또한, 단계(S220)는 공통요소를 추출할 수 있다(S222).
즉, 단계(S222)는 생성된 비교 정보 파일을 이용하여 테스트케이스에서 공통 요소를 추출할 수 있다.
이 때, 단계(S222)는 상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출할 수 있다.
예를 들어, 단계(S222)는 xdelta3로 생성한 비교 정보 파일에서 위치 정보를 추출한 후, 상기 위치 정보를 이용하여 테스트케이스에서 공통요소를 추출할 수 있다.
또한, 단계(S220)는 공통요소를 저장할 수 있다(S223).
즉, 단계(S223)는 각 테스트케이스에 대응되는 공통요소를 저장할 수 있다.
또한, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법은 퍼징을 수행할 수 있다(S230).
즉, 단계(S230)는 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징할 수 있다.
도 5를 참조하면, 단계(S230)는 복수개의 테스트케이스들에서 공통요소를 탐색할 수 있다(S231).
즉, 단계(S231)는 상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색할 수 있다.
이 때, 단계(S231)는 상기 단계(S220)에서 추출한 공통요소를 이용하여 테스트케이스의 위치를 판별할 수 있다.
이 때, 단계(S231)는 하나의 공통 요소가 테스트케이스에서 하나이상 존재할 수 있으므로, 각 적어도 하나의 공통 요소의 위치 정보를 탐색할 수 있다.
또한, 단계(S230)는 퍼징을 수행할 수 있다(S232).
즉, 단계(S232)는 상기의 테스트케이스 내 공통요소 탐색 단계에서 추출한 위치 정보를 이용하여 집중적으로 퍼징을 수행할 수 있다.
이 때, 단계(S232)는 상기의 공통요소 위치에 비트 뒤집기(bitflip), 산술 연산 (arithmetic), 흥미로운 값(Interesting) 또는 사전 정의된 값(dictionary)을 이용하여 변이를 수행할 수 있다.
이 때, 단계(S232)는 적어도 하나의 위치 정보에 둘 이상을 융합한 혼합 변이를 수행할 수 있다.
바람직하게, 단계(S232)는 하나의 테스트케이스가 포함된 테스트케이스 군집에서 추출한 공통 요소뿐만 아니라 하나의 테스트케이스가 포함되지 않는 공통요소를 대입하거나 상기의 공통요소를 대입 후 상기의 혼합 변이 방식을 수행할 수 있다.
또한, 단계(S230)는 코드 커버리지를 저장할 수 있다(S233).
즉, 단계(S233)는 변이가 수행된 테스트케이스에 상응하는 코드 커버리지를 저장할 수 있다.
이 때, 단계(S233)는 생성한 테스트케이스를 입력으로 하여 대상 프로그램을 실행시키고 코드 커버리지를 측정하고, 저장할 수 있다.
또한, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 방법은 새로운 코드 커버리지 발견 여부를 확인할 수 있다(S240).
즉, 단계(S240)는 새로운 코드 커버리지를 탐색하면, 상기의 코드 커버리지에 대응하는 테스트케이스를 포함한 입력 집합으로 테스트케이스를 군집할수 있다.
이 때, 단계(S240)는 새로운 코드 커버리지를 탐색하지 못하는 경우, 할당한 시간 또는 테스트케이스 생성횟수에 해당하는 종료 조건에 도달하면 퍼징 수행을 종료할 수 있다(S250).
도 6은 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 도면이다.
도 6을 참조하면, 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1100)에서 구현될 수 있다. 도 6에 도시된 바와 같이, 컴퓨터 시스템(1100)은 버스(1120)를 통하여 서로 통신하는 하나 이상의 프로세서(1110), 메모리(1130), 사용자 인터페이스 입력 장치(1140), 사용자 인터페이스 출력 장치(1150) 및 스토리지(1160)를 포함할 수 있다. 또한, 컴퓨터 시스템(1100)은 네트워크(1180)에 연결되는 네트워크 인터페이스(1170)를 더 포함할 수 있다. 프로세서(1110)는 중앙 처리 장치 또는 메모리(1130)나 스토리지(1160)에 저장된 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1130) 및 스토리지(1160)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 ROM(1131)이나 RAM(1132)을 포함할 수 있다.
본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치는 하나 이상의 프로세서(1110); 및 상기 하나 이상의 프로세서(1110)에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리(1130)를 포함하고, 상기 적어도 하나 이상의 프로그램은 복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하고, 상기 유사 테스트케이스들에서 공통요소를 추출하고, 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징한다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출할 수 있다.
이 때, 상기 적어도 하나 이상의 프로그램은 상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색할 수 있다.
본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치 및 방법은 유사한 코드 커버리지를 가지는 입력 데이터를 군집한 후 공통 내용을 추출하여 프로그램의 깊은 경로에 도달하도록 하는 효율적인 퍼징 방법을 제안한다. 이를 통해 계측과 추출한 고통 내용을 기반으로 변이 위치와 값을 판단하는 퍼징 방식으로 다양하고 깊은 실행경로에 도달할 수 있다.
본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치 및 방법은 유사한 코드 커버리지를 가지는 입력 데이터를 군집한 후 공통 내용을 추출하여 프로그램의 깊은 경로에 도달하도록 하는 효율적인 퍼징 방법을 제안한다. 이를 통해 계측과 추출한 고통 내용을 기반으로 변이 위치와 값을 판단하는 퍼징 방식으로 다양하고 깊은 실행경로에 도달할 수 있다.
이상에서와 같이 본 발명의 일실시예에 따른 소프트웨어 취약점 검출 장치 및 방법은 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
110: 입력 군집부 120: 공통내용 추출부
130: 퍼징 수행부
1100: 컴퓨터 시스템 1110: 프로세서
1120: 버스 1130: 메모리
1131: 롬 1132: 램
1140: 사용자 인터페이스 입력 장치
1150: 사용자 인터페이스 출력 장치
1160: 스토리지 1170: 네트워크 인터페이스
1180: 네트워크

Claims (14)

  1. 하나 이상의 프로세서; 및
    상기 하나 이상의 프로세서에 의해 실행되는 적어도 하나 이상의 프로그램을 저장하는 실행메모리;
    를 포함하고,
    상기 적어도 하나 이상의 프로그램은
    복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하고, 상기 유사 테스트케이스들에서 공통요소를 추출하고, 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  2. 청구항 1에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  3. 청구항 2에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  4. 청구항 3에 있어서,
    상기 적어도 하나 이상의 프로그램은
    델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  5. 청구항 4에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  6. 청구항 5에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  7. 청구항 6에 있어서,
    상기 적어도 하나 이상의 프로그램은
    상기 위치 정보를 이용하여 상기 공통요소가 탐색된 테스트케이스에서, 상기 공통요소의 위치에 해당하는 값에 대한 변이를 수행하고, 상기 변이가 수행된 테스트케이스를 퍼징하는 것을 특징으로 하는 소프트웨어 취약점 검출 장치.
  8. 소프트웨어 취약점 검출 장치의 소프트웨어 취약점 검출 방법에 있어서,
    복수개의 테스트케이스들을 입력 받아 코드 커버리지를 추출하고, 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하는 단계;
    상기 유사 테스트케이스들에서 공통요소를 추출하는 단계; 및
    상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하고, 상기 공통요소에 상응하는 테스트케이스를 퍼징하는 단계;
    를 포함하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  9. 청구항 8에 있어서,
    상기 군집하는 단계는
    상기 코드 커버리지를 구성하는 명령어, 순서도 및 지도 정보 중 적어도 하나를 비교하여 상기 코드 커버리지가 유사한 유사 테스트케이스들을 군집하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  10. 청구항 9에 있어서,
    상기 추출하는 단계는
    상기 유사 테스트케이스들의 바이너리 데이터 차이를 비교하여 상기 공통요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  11. 청구항 10에 있어서,
    상기 추출하는 단계는
    델타 부호화를 이용하여 상기 바이너리 데이터 차이에 대응하는 비교 정보 파일을 생성하고, 상기 비교 정보 파일을 이용하여 상기 공통 요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  12. 청구항 11에 있어서,
    상기 추출하는 단계는
    상기 비교 정보 파일에서 위치 정보를 추출하고, 상기 위치 정보를 이용하여 상기 공통 요소를 추출하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  13. 청구항 12에 있어서,
    상기 퍼징하는 단계는
    상기 위치 정보를 이용하여 상기 복수개의 테스트케이스들에서 상기 공통요소를 탐색하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
  14. 청구항 13에 있어서,
    상기 퍼징하는 단계는
    상기 위치 정보를 이용하여 상기 공통요소가 탐색된 테스트케이스에서, 상기 공통요소의 위치에 해당하는 값에 대한 변이를 수행하고, 상기 변이가 수행된 테스트케이스를 퍼징하는 것을 특징으로 하는 소프트웨어 취약점 검출 방법.
KR1020190149958A 2019-11-20 2019-11-20 소프트웨어 취약점 검출 장치 및 방법 KR20210061893A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020190149958A KR20210061893A (ko) 2019-11-20 2019-11-20 소프트웨어 취약점 검출 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190149958A KR20210061893A (ko) 2019-11-20 2019-11-20 소프트웨어 취약점 검출 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20210061893A true KR20210061893A (ko) 2021-05-28

Family

ID=76140369

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190149958A KR20210061893A (ko) 2019-11-20 2019-11-20 소프트웨어 취약점 검출 장치 및 방법

Country Status (1)

Country Link
KR (1) KR20210061893A (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102470683B1 (ko) * 2021-11-25 2022-11-25 숭실대학교 산학협력단 단위 테스트 케이스 기반의 보안 설계 결함 탐지 방법, 이를 수행하기 위한 기록 매체 및 장치
CN116303097A (zh) * 2023-05-16 2023-06-23 中国工商银行股份有限公司 智能合约的模糊测试方法、装置、设备、介质和程序产品
CN118132453A (zh) * 2024-05-10 2024-06-04 中移(杭州)信息技术有限公司 固件测试方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102470683B1 (ko) * 2021-11-25 2022-11-25 숭실대학교 산학협력단 단위 테스트 케이스 기반의 보안 설계 결함 탐지 방법, 이를 수행하기 위한 기록 매체 및 장치
WO2023096152A1 (ko) * 2021-11-25 2023-06-01 숭실대학교 산학협력단 단위 테스트 케이스 기반의 보안 설계 결함 탐지 방법, 이를 수행하기 위한 기록 매체 및 장치
CN116303097A (zh) * 2023-05-16 2023-06-23 中国工商银行股份有限公司 智能合约的模糊测试方法、装置、设备、介质和程序产品
CN116303097B (zh) * 2023-05-16 2023-08-22 中国工商银行股份有限公司 智能合约的模糊测试方法、装置、设备、介质和程序产品
CN118132453A (zh) * 2024-05-10 2024-06-04 中移(杭州)信息技术有限公司 固件测试方法及装置

Similar Documents

Publication Publication Date Title
Eschweiler et al. Discovre: Efficient cross-architecture identification of bugs in binary code.
Mosli et al. Automated malware detection using artifacts in forensic memory images
US9349006B2 (en) Method and device for program identification based on machine learning
Bai et al. A malware detection scheme based on mining format information
US8549635B2 (en) Malware detection using external call characteristics
KR20210061893A (ko) 소프트웨어 취약점 검출 장치 및 방법
US11048798B2 (en) Method for detecting libraries in program binaries
US20090144702A1 (en) System And Program Product for Determining Java Software Code Plagiarism and Infringement
US11526608B2 (en) Method and system for determining affiliation of software to software families
KR102073068B1 (ko) 어플리케이션 클러스터링 방법 및 그 장치
US11250129B2 (en) Method and system for determining affiliation of software to software families
JP6866645B2 (ja) 類似度判定プログラム、類似度判定方法および情報処理装置
US10579799B2 (en) System and method for execution of objects lacking rules of interpretation
CN112287342A (zh) 物联网固件动态检测方法、装置、电子设备以及存储介质
US20200285563A1 (en) Generating inputs for computer-program testing
KR20200076426A (ko) 이종 정보 네트워크 기반 악성 코드 탐지 방법 및 장치
US9552284B2 (en) Determining valid inputs for an unknown binary program
CN112306495A (zh) 图片校验方法、装置、计算机设备及计算机可读存储介质
CN114024761A (zh) 网络威胁数据的检测方法、装置、存储介质及电子设备
Vahedi et al. Cloud based malware detection through behavioral entropy
CN115310087A (zh) 一种基于抽象语法树的网站后门检测方法和系统
US20220164277A1 (en) Analysis and Testing of Embedded Code
Martín et al. Studying the influence of static api calls for hiding malware
Isawa et al. Generic unpacking method based on detecting original entry point
Liu et al. Enhancing Malware Detection for Android Apps: Detecting Fine-Granularity Malicious Components