KR101904911B1 - 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치 - Google Patents

하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치 Download PDF

Info

Publication number
KR101904911B1
KR101904911B1 KR1020170133153A KR20170133153A KR101904911B1 KR 101904911 B1 KR101904911 B1 KR 101904911B1 KR 1020170133153 A KR1020170133153 A KR 1020170133153A KR 20170133153 A KR20170133153 A KR 20170133153A KR 101904911 B1 KR101904911 B1 KR 101904911B1
Authority
KR
South Korea
Prior art keywords
path
vulnerability
information
binary
test case
Prior art date
Application number
KR1020170133153A
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 KR1020170133153A priority Critical patent/KR101904911B1/ko
Priority to US15/817,372 priority patent/US10586053B2/en
Application granted granted Critical
Publication of KR101904911B1 publication Critical patent/KR101904911B1/ko
Priority to US16/408,352 priority patent/US10621362B2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/28Error detection; Error correction; Monitoring by checking the correct order of processing
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

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

Abstract

프로그램의 보안 취약점을 효율적으로 탐색할 수 있는 방법 및 시스템이 제공 된다. 본 발명의 일 실시예에 따른 보안 취약점 탐색 시스템은 크래시 정보를 획득하는 취약점 탐색 모듈, 바이너리 정보의 우선 순위 및 경로 탐색의 수행 여부를 판단하는 바이너리 분석 모듈 및 경로 탐색을 수행하여 새로운 테스트 케이스를 생성하는 경로 탐색 모듈을 포함한다.

Description

하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치{Method for Automatically Detecting Security Vulnerability Based on Hybrid Fuzzing, and Apparatus thereof}
본 발명은 프로그램의 보안 취약점이 존재하는지 탐색하기 위한 시스템, 방법 및 그 프로그램에 관한 것이다. 보다 상세하게는, 프로그램에서 프로그램 설계자가 프로그램을 설계한 목적이 아닌 다른 목적에 의해 악용되어 프로그램이 정상 작동하지 않게 될 수 있는 보안 취약점이 존재하는지 여부를 탐색하기 위한 시스템, 방법 및 그 프로그램에 관한 것이다.
프로그램의 개발 과정에서는 프로그램에 대한 분석은 일반적으로 디버깅 프로그램을 이용하여 소스 코드에서 취약점이 발생할 가능성이 있는 곳에 브레이크 포인트를 설정하고, 프로그램의 실행 중에 브레이크 포인트에 따라 실행이 멈추면 프로그램의 실행 환경을 관찰함으로써 프로그램을 분석한다.
그러나, 프로그램의 개발 과정이 아니라 프로그램이 배포된 이후에 프로그램의 취약점을 분석하는 경우에는 대부분 소스 코드를 구할 수 없는 환경에서 분석 과정이 수행되므로, 소스 코드를 통해서 프로그램을 분석할 수 없는 문제점이 있다. 따라서, 프로그램에 대한 취약점 분석은 실행파일만으로도 수행될 수 있는 블랙박스 테스트 형태의 분석 방법이 필요하다. 여기서, 블랙박스 테스트란 프로그램을 내부 동작을 관찰할 수 없는 블랙박스로 가정하고 소프트웨어의 입출력 값에 기반하여 분석을 수행하는 테스트 방식이다.
그러나 기존의 블랙박스 테스트에 의해서는 프로그램의 실행 경로 중 얕은 경로에 존재하는 취약점만 탐지될 가능성이 높으며, 깊은 경로 내에 존재하는 취약점까지 분석하기 위해서는 지나치게 많은 연산량이 요구되는 문제점이 있다.
미국등록특허 제9454659호
본 발명이 해결하고자 하는 기술적 과제는, 소스 코드 없이 바이너리 분석만으로 프로그램의 보안 취약점을 효율적으로 탐색할 수 있는 방법 및 시스템을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 기술분야에서의 통상의 기술자에게 명확하게 이해 될 수 있을 것이다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 취약점 탐색 방법은, 제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 취약점 탐색 단계, 상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 단계, 상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 단계 및 상기 제2 테스트 케이스에 대해 상기 취약점 탐색 단계를 수행하는 단계를 포함할 수 있다.
또한, 본 발명의 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는 상기 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph)를 복구하는 단계 및 상기 복구된 제어 흐름 그래프에 대한 복잡도를 산출하는 단계;를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는 상기 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 경로 탐색의 수행 여부를 판단하는 단계는 상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)을 카운트한 값이 제2 임계값 미만인 경우 상기 경로 탐색을 수행하는 것으로 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 복잡도를 산출하는 단계는 복잡도 분석 메트릭스에 기초하여 복잡도를 산출하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는 상기 복잡도에 기초하여 위험도를 산출하는 단계 및 상기 위험도에 따라 상기 우선 순위를 판단하는 단계를 더 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 우선 순위는 상기 경로 정보에 상응하는 경로가 보안이 취약한 함수를 많이 호출할수록 순위가 높은 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 우선 순위를 판단하는 단계는 상기 복잡도에 기초하여 위험도를 산출하는 수학식에 기초하여 산출된 결과에 따라서 상기 우선 순위를 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 경로 탐색 단계는 상기 바이너리 정보에 대한 기호 실행(Symbolic Execution)을 수행함으로써 경로식을 생성하는 단계 및 상기 경로식에 기초하여 상기 제2 테스트 케이스를 생성하는 단계를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 제2 테스트 케이스를 생성하는 단계는 상기 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree)를 생성하는 단계 및 상기 제2 테스트 케이스를 생성하기 위해 상기 추상 구문 트리에 대한 제약 조건 풀이를 수행하는 단계;를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 제약 조건 풀이를 수행하는 단계는 상기 추상 구문 트리에 SMT 문제 풀이기를 적용하는 단계를 포함하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 취약점 탐색 단계는 상기 크래시 정보를 획득하기 위해 퍼징(fuzzing)을 수행하는 단계를 포함할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 취약점 탐색 시스템은, 제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 프로세스를 수행하는 취약점 탐색 모듈, 상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 모듈 및 상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 모듈을 포함하고, 상기 취약점 탐색 모듈은 상기 제2 테스트 케이스에 대해 크래시 정보를 획득하는 프로세스를 다시 수행하는 것을 특징으로 할 수 있다.
또한, 본 발명의 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은 상기 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph)를 복구하고, 상기 복구된 제어 흐름 그래프에 대한 복잡도를 산출하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은 상기 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은 상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)을 카운트한 값이 제2 임계값 미만인 경우 상기 경로 탐색을 수행하는 것으로 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은 복잡도 분석 메트릭스에 기초하여 복잡도를 산출하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은, 상기 복잡도에 기초하여 산출된 위험도에 따라 상기 우선 순위를 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 우선 순위는 상기 경로 정보에 상응하는 경로가 보안이 취약한 함수를 많이 호출할수록 순위가 높은 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 모듈은 상기 복잡도에 기초하여 위험도를 산출하는 수학식에 기초하여 산출된 결과에 따라서 상기 우선 순위를 판단하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 경로 탐색 모듈은 상기 바이너리 정보에 대한 기호 실행(Symbolic Execution)을 수행함으로써 제2 테스트 케이스를 생성하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 경로 탐색 모듈은 상기 제2 테스트 케이스를 생성하기 위해 SMT 문제 풀이기를 적용하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 취약점 탐색 모듈은 상기 크래시 정보를 획득하기 위해 퍼징을 수행하는 것을 특징으로 할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 컴퓨터 프로그램은, 프로세서에 의해 실행 가능한 컴퓨터 프로그램 명령어들을 포함하는 비일시적(Non-Transitory) 컴퓨터 판독 가능한 매체에 기록된 컴퓨터 시스템의 정보를 식별하기 위한 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램 명령어들이 컴퓨팅 디바이스의 프로세서에 의해 실행되는 경우에, 제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 취약점 탐색 단계, 상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 단계, 상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 단계 및 상기 제2 테스트 케이스에 대해 상기 취약점 탐색 단계를 포함하는 동작을 수행하는 것을 특징으로 할 수 있다.
도 1은 본 발명의 일 실시 예에 따른 취약점 탐색 시스템의 구조를 도시한 블록도이다.
도 2는 본 발명의 일 실시 예에 따라 취약점을 탐색하는 프로세스를 도시한 순서도이다.
도 3은 본 발명의 일 실시 예에 따른 취약점 탐색 모듈의 동작을 설명하기 위한 도면이다.
도 4는 본 발명의 일 실시 예에 따른 바이너리 계측부의 동작을 설명하기 위한 도면이다.
도 5는 본 발명의 일 실시 예에 따른 퍼징 수행부의 동작을 설명하기 위한 도면이다.
도 6은 본 발명의 일 실시 예에 따른 바이너리 분석 모듈의 동작을 설명하기 위한 도면이다.
도 7은 본 발명의 일 실시 예에 따른 경로 탐색 모듈의 동작을 설명하기 위한 도면이다.
도 8 및 9는 본 발명의 일 실시 예에 따라 제어 흐름 그래프(Control Flow Graph)를 복구하는 방법을 설명하기 위한 예시도이다.
도 10은 본 발명의 일 실시 예에 따라 복잡도 분석에 이용되는 복잡도 분석 메트릭스의 예를 도시한 도면이다.
도 11은 본 발명의 다른 일 실시 예에 따라 취약점을 탐색하는 프로세스를 도시한 순서도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예들을 상세히 설명한다. 본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시 예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 게시되는 실시 예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시 예들은 본 발명의 게시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
다른 정의가 없다면, 본 명세서에서 사용되는 모든 용어(기술 및 과학적 용어를 포함)는 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 공통적으로 이해될 수 있는 의미로 사용될 수 있다. 또 일반적으로 사용되는 사전에 정의되어 있는 용어들은 명백하게 특별히 정의되어 있지 않는 한 이상적으로 또는 과도하게 해석되지 않는다. 본 명세서에서 사용된 용어는 실시예들을 설명하기 위한 것이며 본 발명을 제한하고자 하는 것은 아니다. 본 명세서에서, 단수형은 문구에서 특별히 언급하지 않는 한 복수형도 포함한다.
이하, 도면들을 참조하여 본 발명의 몇몇 실시예들을 설명한다.
도 1은 본 발명의 일 실시 예에 따른 취약점 탐색 시스템(100)의 구조를 도시한 블록도이다.
일 실시 예에 따른 취약점 탐색 시스템(100)은 프로그램의 바이너리 정보(10)를 수집하여 크래시 정보(20)를 출력하기 위한 하나 이상의 컴퓨팅 장치를 포함하여 구성될 수 있다. 또는, 취약점 탐색 시스템(100)은 여러 시스템을 구비하는 하나의 컴퓨팅 장치의 일부로 구성될 수 있다. 예를 들어, 취약점 탐색 시스템(100)은 프로그램의 바이너리 정보(10)를 분석한 결과로 프로그램에 대한 크래시 정보(20)를 보안 취약점의 원인을 분석하는 원인 분석 모듈을 구비하는 다른 서버로 출력하는 서버의 형태로 구성될 수 있다. 다른 예를 들면, 취약점 탐색 시스템(100)은 하나의 서버 내에 구비된 모듈로서 다른 모듈로 크래시 정보(20)를 출력하도록 구성될 수도 있다.
일 실시 예에 따르면, 취약점 탐색 시스템(100)은 취약점 탐색 모듈(110), 바이너리 분석 모듈(120) 및 경로 탐색 모듈(130)을 포함할 수 있다. 도 1에 도시된 각 모듈은 물리적으로 하나의 장치에 구성될 수도 있으나, 분산되어 구성될 수도 있다.
일 실시 예에 따르면, 취약점 탐색 모듈(110)은 프로그램의 바이너리 정보(10)를 분석하고, 분석 결과 프로그램에 대해 크래시(Crash)가 발생한 경우 크래시 정보(20)를 획득할 수 있다.
여기서, 바이너리 정보는 프로그램에서 실행 파일을 분석한 정보를 의미할 수 있다. 바이너리 정보는 프로그램에 대한 경로 정보 및 분기 커버리지(Branch Coverage) 중 하나 이상을 포함할 수 있다. 특히, 경로 정보는 프로그램을 실행함에 따라서 거쳐온 경로에 대한 트레이스(Trace) 정보를 의미할 수 있다. 예를 들면, 경로 정보는 거쳐온 경로에 대한 어셈블리 코드(Assembly Code)를 포함할 수 있다. 또한, 분기 커버리지는 경로가 지나는 분기점을 카운트한 값을 의미할 수 있다. 분석된 바이너리 정보는 실시 예에 따라서 데이터베이스의 형태나 파일의 형태로 누적하여 저장될 수 있다.
또한, 크래시는 프로그램에 존재하는 보안 취약점으로 인하여 외부의 공격자가 프로그램 설계자가 의도하지 않은 목적으로 프로그램이 동작하도록 함으로써 프로그램이 오동작하는 것을 의미한다. 따라서, 크래시 정보는 입력값을 입력하였을 때 프로그램이 어떠한 실행 경로로 동작하는 경우에 어떠한 오동작이 발생하는지를 나타내는 정보를 의미할 수 있다. 예를 들어, 제1 테스트 케이스를 입력값으로 하였을 때 크래시가 발생한 경우, 크래시 정보는 크래시가 발생한 제1 테스트 케이스, 크래시가 발생한 경로 정보 및 크래시 덤프(Crach Dump)를 포함할 수 있다.
일 실시 예에 따르면, 바이너리 분석 모듈(120)은 바이너리 정보에 대한 위험도 분석을 수행함으로써 바이너리 정보의 우선 순위를 판단할 수 있다. 바이너리 분석 모듈(120)은 판단된 우선 순위에 따라 취약점 탐색 모듈(110)에 의해 생성된 바이너리 정보를 업데이트할 수 있다. 취약점 탐색 모듈(110)은 바이너리 분석 모듈(120)의해서 설정된 바이너리 정보의 우선 순위에 따라서 우선적으로 취약점을 탐색할 바이너리 정보를 선택할 수 있다. 또한, 바이너리 분석 모듈(120)은 위험도 분석을 수행한 결과를 이용하여 바이너리 정보에 대한 경로 탐색의 적합도를 판단할 수 있다. 즉, 바이너리 분석 모듈(120)은 바이너리 정보가 경로 탐색을 수행할 대상으로써 적합한지 여부에 따라 경로 탐색을 수행할 것인지 여부를 판단할 수 있다.
일 실시 예에 따르면, 경로 탐색 모듈(130)은 경로 탐색의 대상으로 적합하다고 판단한 경로에 대한 경로 탐색을 수행할 수 있다. 경로 탐색 모듈(130)은 경로 탐색의 결과로서 취약점 탐색 모듈(110)에 입력될 새로운 입력값을 생성할 수 있다. 예를 들어, 취약점 탐색 모듈(110)이 제1 테스트 케이스에 기초하여 취약점을 탐색한 경우, 경로 탐색 모듈(130)은 경로 탐색을 수행한 결과로서 제2 테스트 케이스를 생성할 수 있다. 취약점 탐색 모듈(110)은 제2 테스트 케이스에 대해 취약점을 탐색함으로써 크래시가 발생할 확률이 보다 높은 테스트 케이스에 대한 분석을 수행할 수 있다.
도 2는 본 발명의 일 실시 예에 따라 취약점을 탐색하는 프로세스를 도시한 순서도이다.
단계 S210에서 취약점 탐색 시스템(100)은 프로그램으로부터 바이너리 정보를 추출하고 바이너리 정보에 기초하여 크래시가 발생하는 경우에 대한 정보인 크래시 정보를 획득하는 취약점 탐색 단계를 수행할 수 있다. 일 실시 예에 따르면, 취약점 탐색 단계에서, 취약점 탐색 시스템(100)은 테스트 케이스에 대한 바이너리 정보를 생성할 수 있다. 일 실시 예에 따르면, 생성된 바이너리 정보는 테스트 케이스, 경로 정보 및 브랜치 커버리지를 하나의 세트로 데이터베이스 또는 파일의 형태로 누적하여 저장될 수 있다. 또한, 취약점 탐색 시스템(100)은 바이너리 정보에 포함된 경로 정보 기초하여 제1 테스트 케이스에 대한 크래시가 발생하는지 판단할 수 있다. 단계 S220에서 제1 테스트 케이스에 대한 크래시가 발생하는 경우, 취약점 탐색 시스템(100)은 단계 S225에서 제1 테스트 케이스, 경로 정보 및 크래시 덤프를 포함하는 크래시 정보를 획득할 수 있다. 취약점 탐색 단계를 보다 상세히 설명하기 위하여, 취약점 탐색 시스템(100)의 취약점 탐색 모듈(110)이 취약점 탐색 단계를 수행하는 일 실시 예가 도3 내지 도 5에 도시되어 있다.
이후, 단계 S230에서, 취약점 탐색 시스템(100)은 저장된 바이너리 정보에 대해 바이너리 분석 단계를 수행할 수 있다. 바이너리 분석 단계에서, 취약점 탐색 시스템(100)은 바이너리 정보에 포함된 경로 정보에 기초하여 위험도 분석을 수행할 수 있다. 취약점 탐색 시스템(100)은 위험도 분석을 수행한 결과로 산출된 위험도가 높은 경로일수록 높은 우선 순위를 가지도록 바이너리 정보를 업데이트할 수 있다. 즉, 우선 순위가 높은 경로에 대하여 취약점 탐색 단계가 우선적으로 수행되도록 할 수 있다.
또한, 바이너리 분석 단계에서 수행된 위험도 분석 결과에 기초하여, 단계 S240에서 취약점 탐색 시스템(100)은 경로 정보에 대한 경로 탐색을 수행할 지 여부를 판단할 수 있다. 일 실시 예에 따르면, 위험도 분석을 수행하는 과정에서 경로 정보에 대한 복잡도가 산출될 수 있다. 이 경우, 취약점 탐색 시스템(100)은 복잡도에 기초하여 경로 탐색을 수행할 지 여부를 판단할 수 있다. 즉, 복잡도가 지나치게 높은 경로에 대해서는 경로 탐색을 수행하지 않을 수 있다. 바이너리 분석 단계를 보다 상세히 설명하기 위하여, 취약점 탐색 시스템(100)의 바이너리 분석 모듈(120)이 바이너리 분석 단계를 수행하는 일 실시 예가 도 6에 도시되어 있다.
단계 S240에서 경로 탐색을 수행하기에 적합하다고 판단된 경우, 취약점 탐색 시스템(100)은 단계 S245에서 경로 탐색 단계를 수행할 수 있다. 취약점 탐색 시스템(100)은 대상 경로에 대한 경로 탐색 단계를 수행함으로써 새로운 테스트 케이스를 생성할 수 있다. 새로운 테스트 케이스는 크래시가 발생할 가능성이 보다 높은 것을 특징으로 할 수 있다. 즉, 취약점 탐색 시스템은 새로운 테스트 케이스에 대해 취약점 탐색 단계(S210)를 다시 수행함으로써 보다 크래시가 발생할 가능성이 높은 테스트 케이스에 대한 취약점 탐색을 수행할 수 있다. 경로 탐색 단계를 보다 상세히 설명하기 위하여, 취약점 탐색 시스템(100)의 경로 탐색 모듈(130)이 경로 탐색 단계를 수행하는 일 실시 예가 도 7에 도시되어 있다.
도 3은 본 발명의 일 실시 예에 따른 취약점 탐색 모듈의 동작을 설명하기 위한 도면이다.
일 실시 예에 따른 취약점 탐색 모듈(110)은 바이너리 정보를 추출하는 바이너리 계측부(310), 퍼징을 수행함으로써 크래시 정보를 획득하는 퍼징 수행부(320) 및 저장부(330)를 포함할 수 있다. 다만, 이에 한정되지 아니한다.
바이너리 계측부(310)는 입력값(30)에 기초하여 바이너리 정보를 생성할 수 있다. 여기서, 입력값(30)은 퍼징 수행부(320)에 의해 변이된 테스트 케이스일 수도 있으며, 별도로 생성된 테스트 케이스일 수도 있다. 바이너리 계측부(310)에 의해 생성된 바이너리 정보는 저장부(330)에 데이터베이스 또는 파일의 형태로 저장될 수 있다.
퍼징 수행부(320)는 저장부(330)에 저장된 바이너리 정보에 대해 퍼징(fuzzing)을 수행할 수 있다. 블랙박스 테스트 중 하나인 퍼징은 퍼즈 테스팅(fuzz testing)이라고도 불리우며, 해당 프로그램에 다양한 랜덤 데이터를 입력하고, 입력 값에 따라 해당 프로그램에서 수행되는 비정상적인 동작을 탐지하여 프로그램이 처리할 수 없는 결함을 찾아내는 분석 방법이다. 퍼징은 랜덤 데이터를 포함하는 테스크 케이스를 만들고, 생성된 테스트 케이스를 해당 프로그램으로 순차적으로 실행하여 프로그램의 오동작을 분석하는 과정으로 수행될 수 있다. 퍼징은 시스템 행동의 랜덤한 샘플을 제공하며, 프로그램이 충돌 없이 예외 처리를 할 수 있는가를 입증할 수 있다. 퍼징 프로그램은 두 가지 카테고리로 나뉠 수 있다. 생성 기반 퍼저는 입력의 모델에 기반해서 새로운 테스트 데이터를 정의하고, 변이 기반 퍼저(fuzzer)는 존재하는 데이터 샘플을 테스트 데이터로 변형한다.
퍼징 수행부(320)는 바이너리 계측부(310)의 입력값(30)으로서 테스트 케이스를 생성할 수 있으며, 퍼징을 수행한 결과 크래시가 발생한 경우 크래시 정보를 획득할 수 있다. 획득된 크래시 정보는 외부로 출력될 수 있다. 예를 들어, 획득된 크래시 정보는 원인 분석 시스템으로 출력되어 크래시가 발생된 원인이 분석되도록 할 수 있다. 또한, 퍼징을 수행한 결과 상태 전이를 유발하는 테스트 케이스가 존재하는 경우, 상태 전이를 유발한 테스트 케이스를 저장부(330)에 저장할 수 있다.
도 4는 본 발명의 일 실시 예에 따른 바이너리 계측부의 동작을 설명하기 위한 도면이다.
일 실시 예에 따르면, 단계 S311에서, 바이너리 계측부(310)는 입력값(30)에 대하여 바이너리 실행(Binary Execution)을 수행할 수 있다. 여기서, 바이너리 계측부(310)는 가상화 환경에서 프로그램을 바이너리 실행할 수 있다. 가상화 환경은, 예를 들어, QEMU와 같은 가상화 소프트웨어를 이용하여 프로그램 스택을 가상머신 상에서 실행할 수 있는 환경을 의미한다. QEMU는 동적 변환기(Portable Dynamic Translation)를 사용하여 x86 이외의 기종을 위해 만들어진 소프트웨어 스택 전체를 가상머신 상에서 실행하도록 하는 가상화 소프트웨어이다.
이후, 단계 S312에서, 바이너리 계측부(310)는 프로그램을 중간 언어(interlanguage)로 변환할 수 있다. 이후, 단계 S313에서 바이너리 계측부(310)는 중간 언어로 변환된 프로그램에 브랜치 커버리지를 계측하기 위한 바이너리 계측 코드를 삽입할 수 있다. 예를 들어, IF 문이 호출될 때마다 카운트를 증가시키는 코드가 바이너리 계측 코드로서 삽입될 수 있다.
이후, 단계 S314에서, 바이너리 계측부(310)는 프로그램이 실행됨에 따라서 바이너리 정보(330-1)를 추출할 수 있다. 바이너리 계측부(310)는 추출된 바이너리 정보(330-1)를 저장부(330)에 누적하여 저장할 수 있다.
도 5는 본 발명의 일 실시 예에 따른 퍼징 수행부의 동작을 설명하기 위한 도면이다.
먼저, 단계 S321에서 퍼징 수행부(320)는 저장부(330)에 저장된 바이너리 정보로부터 테스트 케이스를 최소화하는 프로세스를 수행한다. 테스트 케이스를 최소화하는 프로세스는 초기 테스트 케이스에서 최소한의 테스트 케이스를 추출하는 프로세스이다. 단계 S321은 소프트웨어 툴을 사용하거나 분할 정복 알고리즘을 사용하여 수행될 수 있다.
이후, 단계 S322에서 퍼징 수행부(320)는 테스트 케이스를 변이시킬 수 있다. 여기서, 테스트 케이스를 변이시키는 기법은 실시 예에 따라 다양하게 적용될 수 있다. 예를 들어, 퍼징 수행부(320)는 비트(Bit) 변이, 연산 기반 변이, 사전 정의 테스트 케이스 변이 또는 사전(dictionary) 기반 변이에 기초하여 테스트 케이스를 변이할 수 있다. 또는, 상기 변이 기법 중 둘 이상을 융합한 융합형 변이 기법에 기초하여 테스트 케이스를 변이할 수도 있다. 여기서, 비트 변이는 제1 비트 단위로 건너 뛰며 제2 비트 단위만큼씩 변이시키는 것을 의미한다. 연산 기반 변이는 8 비트, 16 비트, 32 비트 값의 작은 정수값을 8 비트씩 건너뛰며 더하거나 빼는 것을 반복하는 것을 의미한다. 사전 정의 테스트 케이스 기반 변이는 사전에 정의된 8 비트, 16 비트, 32 비트 값을 8 비트씩 건너뛰며 덮어씌우는 것을 의미한다. 사전 기반 변이는 사전 기반으로 존재하는 데이터를 덮어 씌우거나 남은 데이터에 오프셋만큼 떨어진 곳에 삽입하는 것을 의미한다. 단계 S322에서 변이된 테스트 케이스는 바이너리 계측부(310)의 입력값(30)으로 입력될 수 있다.
이후, 단계 S323에서, 퍼징 수행부(320)는 크래시가 발생한 경우 크래시 정보를 획득할 수 있다. 획득된 크래시 정보는 단계 S325에서 원인 분석 모듈 내지 원인 분석 시스템으로 출력될 수 있다. 또한, 단계 S324에서, 퍼징 수행부(320)는 상태 전이를 유발한 테스트 케이스를 저장부(330)에 저장할 수 있다.
도 6은 본 발명의 일 실시 예에 따른 바이너리 분석 모듈의 동작을 설명하기 위한 도면이다.
먼저 단계 S410에서, 바이너리 분석 모듈(120)은 취약점 탐색 모듈(110)에 의해 저장부(330)에 저장된 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph; CFG)를 복구할 수 있다. 일 실시 예에 따르면, 바이너리 분석 모듈(120)은 바이너리 정보에 포함된 정보 중 경로 정보인 경로의 어셈블리 코드(Assembly Code)에 기초하여 CFG를 복구할 수 있다.
이후, 단계 S320에서, 바이너리 분석 모듈(120)은 경로에 대한 위험도를 산출하는 과정에서 복구된 CFG에 기초하여 복잡도를 산출할 수 있다. 여기서, 바이너리 분석 모듈(120)은 복잡도 분석 메트릭스를 이용하여 복잡도를 산출할 수 있다. 여기서, 도 10을 참조하면, 도 10에는 본 발명의 일 실시 예에 따라 복잡도 분석에 이용되는 복잡도 분석 메트릭스의 예가 도시되어 있다. 다만, 도 10에 도시된 복잡도 분석 메트릭스만을 이용하는 것으로 본 발명이 한정되는 것은 아님에 유의한다. 본 명세서에서는 도 10에 도시된 복잡도 분석 메트릭스 중에서 할스테드 메트릭(Halstead metric)을 이용하여 복잡도를 분석하는 실시 예를 기준으로 본 발명을 설명한다.
할스테드 메트릭을 이용하여 복잡도 및 위험도를 산출하기 위하여, 하기 표 1과 같이 변수를 정의할 수 있다.
변수 정의
Figure 112017100875698-pat00001
구별 오퍼레이터(distinct operator)의 개수
Figure 112017100875698-pat00002
구별 오퍼랜드(distinct operand)의 개수
Figure 112017100875698-pat00003
전체 오퍼레이터의 개수
Figure 112017100875698-pat00004
전체 오퍼랜드의 개수
Figure 112017100875698-pat00005
Figure 112017100875698-pat00006
Figure 112017100875698-pat00007
Figure 112017100875698-pat00008
구별 오퍼레이터 및 구별 오퍼랜드는 고유 오퍼레이터(Unique Operator) 및 고유 오퍼랜드(Unique Operand)로 언급될 수도 있다.
일 실시 예에 따르면, 바이너리 분석 모듈(120)은 하기 수학식 1에 기초하여 복잡도를 산출할 수 있다.
Figure 112017100875698-pat00009
여기서, H.D는 복잡도를 의미한다.
이후, 단계 S430에서 바이너리 분석 모듈(120)은 복잡도에 기초하여 위험도를 산출하고, 산출된 위험도에 기초하여 경로에 대한 우선 순위를 판단할 수 있다. 일 실시 예에 따르면, 바이너리 분석 모듈(120)은 하기 수학식 2에 기초하여 위험도를 산출할 수 있다.
Figure 112017100875698-pat00010
Figure 112017100875698-pat00011
Figure 112017100875698-pat00012
Figure 112017100875698-pat00013
여기서, Exp는 경로의 위험도, n은 취약한 함수를 호출한 카운트, v_i는 상기 카운트와 상기 취약한 함수가 호출하는 시스템 호출(system call)의 잠재적 위험도의 곱을 의미한다. 바이너리 분석 모듈(120)은 산출된 위험도에 기초하여 우선 순위를 판단하고, 판단된 우선 순위에 기초하여 저장부(330)에 저장된 바이너리 정보를 업데이트할 수 있다. 즉, 경로가 보안이 취약한 함수를 많이 호출할수록 경로의 우선 순위가 높게 설정될 수 있다.
여기서, 시스템 호출의 잠재적 위험도는 각 함수에 대하여 사전에 정의된 값일 수 있다. 예를 들어, 잠재적 위험도는 하기 표 2에 도시된 바와 같이 위험한 함수는 0.5, 금지된 함수는 1로 미리 정의될 수 있다.
잠재적 위험도 함수
Dangerous
(0.5)
scanf, fscanf, vscanf, vsscanf, sscanf, vfscanf, snprintf, vsnprintf, strtok, wcstok, itoa
Banned
(1.0)
strcpy, wcscpy, stpcpy, wcpcpy, strecpy, memcpy, strcat, wcscat, streadd, strtrns, sprintf, vsprintf, vprintf, vfprintf, gets, getwd, realpath, syslog, vsyslog, fprintf, printf, sprintf, vfprintf, vprintf, vsprintf, vasprintf, asprintf, vdprintf, dprintf
이후, 단계 S440에서 바이너리 분석 모듈(120)은 복잡도를 산출한 경로가 경로 탐색을 수행할 대상으로써 적합한지 여부를 판단할 수 있다. 일 실시 예에 따르면, 바이너리 분석 모듈(120)은 경로의 복잡도가 제1 임계값 미만이고, 경로가 제어 흐름 그래프 상에서 거쳐온 분기점을 카운트한 값이 제2 임계값 미만인 경우, 해당 경로가 경로 탐색을 수행할 대상으로서 적합한 것으로 판단할 수 있다. 해당 경로가 경로 탐색에 대해 적합한 것으로 판단된 경우, 경로 탐색 모듈(130)이 해당 경로에 대한 경로 탐색을 수행할 수 있다. 만일 해당 경로가 경로 탐색에 적합하지 않은 경우, 취약점 탐색 시스템(100)은 경로 탐색을 수행하지 않고 취약점 탐색 모듈(110)에 의한 취약점 탐색을 계속할 수 있다. 즉, 본 실시 예에 따르면, 해당 경로에 포함된 분기점의 카운트는 를 B라고 할 때, 하기 수학식 3을 만족하는 경우에만 취약점 탐색 시스템(100)은 해당 경로에 대한 경로 탐색을 수행할 수 있다.
Figure 112017100875698-pat00014
여기서, x는 제1 임계값, y는 제2 임계값을 의미한다. 제1 임계값 및 제2 임계값은 실시 예에 따라 적절한 값으로 조정될 수 있다.
도 7은 본 발명의 일 실시 예에 따른 경로 탐색 모듈의 동작을 설명하기 위한 도면이다.
일 실시 예에 따르면, 경로 탐색 모듈(130)은 경로 탐색을 수행하기 위해 기호 실행(Symbolic Execution)(510)을 수행할 수 있다. 기호 실행(510)은 프로그램의 입력값에 대한 실행 경로를 분석하는 기법을 의미한다. 경로 탐색 모듈(130)은 기호 실행(510)을 수행한 결과 획득된 경로식에 기초하여 경로 탐색(520)을 수행함으로써 새로운 입력값을 생성할 수 있다.
경로 탐색 모듈(130)은 기호 실행(510)을 수행하기 위해, 단계 S511에서 바이너리 정보를 중간언어로 변환할 수 있다. 이후, 단계 S512에서 경로 탐색 모듈(130)은 프로그램 단위 내의 입력 변수에 기호 값을 할당하기 위해 기호 상태(Symbolic State)를 생성할 수 있다. 이후, 경로 탐색 모듈(130)은 단계 S513에서 생성된 기호 상태를 실행할 수 있다. 경로 탐색 모듈(130)은 기호 상태를 실행한 결과로서 단계 S514에서 경로식을 생성할 수 있다.
경로 탐색(520)을 수행하기 위해, 단계 S521에서 경로 탐색 모듈(130)은 기호 실행(510)의 결과로 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree; AST)를 생성할 수 있다. 추상 구문 트리는 간단히 구문 트리(Syntax Tree)라고 언급될 수도 있으며, 프로그래밍 언어로 작성된 소스 코드의 추상 구문 구조의 트리를 의미한다. 추상 구문 트리의 각 노드는 소스 코드에서 발생되는 구조체를 나타낸다. 구문이 추상적이라는 의미는 실제 구문에서 나타나는 모든 세세한 정보를 나타내지는 않는다는 것을 의미한다.
이후, 단계 S522에서 경로 탐색 모듈(130)은 생성된 추상 구문 트리에 대한 제약 조건을 풀이함으로써 단계 S523에서 새로운 테스트 케이스를 생성할 수 있다. 생성된 새로운 테스트 케이스는 저장부(330)에 저장될 수 있다. 일 실시 예에 따르면, 단계 S522에서 제약 조건을 풀이하기 위하여 경로 탐색 모듈(130)은 SMT 문제 풀이기(Satisfiability Modulo Theories solver)를 추상 구문 트리에 적용할 수 있다.
도 8 및 9는 본 발명의 일 실시 예에 따라 제어 흐름 그래프(Control Flow Graph)를 복구하는 방법을 설명하기 위한 예시도이다.
도 8의 (a)는 경로의 어셈블리 코드의 구조를 나타낸 예시이며, 도 8의 (b)는 복구된 제어 흐름 그래프의 구조를 나타낸 예시이다. 도 9의 (1) 및 (1)'는 도 8의 (1) 및 (1)'에 생략된 코드의 예시이다.
일 실시 예에 따르면, 바이너리 분석 모듈(120)은 도 8의 (a)에 도시된 바와 같은 어셈블리 코드에 기초하여 도 8의 (b)에 도시된 바와 같은 제어 흐름 그래프를 복구할 수 있다.
예를 들어, 바이너리 분석 모듈(120)은 프로그램이 (1)', (3)', (5)', (7)', (8)'의 경로로 실행된 경우, 분기점의 카운트 B가 4인 것으로 판단할 수 있으며, 상기 경로에 따라 프로그램이 실행되면서 호출된 함수들에 기초하여 경로의 복잡도와 위험도를 산출할 수 있다.
도 11은 본 발명의 다른 일 실시 예에 따라 취약점을 탐색하는 프로세스를 도시한 순서도이다.
먼저, 단계 S1101에서 취약점 탐색 시스템은 취약점을 탐색할 프로그램의 바이너리 정보를 수집할 수 있다. 이후, 단계 S1102에서 취약점 탐색 시스템은 퍼징을 수행하기 위한 테스트 케이스를 생성할 수 있다. 취약점 탐색 시스템은 단계 S1103에서 생성된 테스트 케이스를 변이시킴으로써 크래시가 발생하는지 여부를 판단할 수 있다.
또한, 단계 S1107에서 취약점 탐색 시스템은 취약점을 탐색하기 위해 획득된 바이너리 정보 및 실행 정보(1106)에 기초하여 제어 흐름도 그래프를 복구할 수 있다. 이후, 단계 S1108에서 취약점 탐색 시스템은 제어 흐름도 그래프에 기초하여 경로의 복잡도를 분석할 수 있다.
취약점 탐색 시스템은 단계 S1109에서 경로의 복잡도에 기초하여 경로가 경로 탐색에 적합한지 여부를 판단함으로써 경로 탐색의 수행 여부를 결정할 수 있다. 경로가 경로 탐색에 적합하지 않은 경우, 취약점 탐색 시스템은 경로 탐색을 수행하지 않고 단계 S1102를 수행함으로써 취약점 탐색을 계속할 수 있다.
경로가 경로 탐색에 적합한 경우, 취약점 탐색 시스템은 단계 S1111에서 실행 정보(1110)에 기초하여 경로 탐색을 수행할 수 있다. 또한, 취약점 탐색 시스템은 단계 S1112에서 경로가 기존에 경로 탐색을 수행한 적 없는 새로운 경로인지 여부를 판단할 수 있다. 경로가 새로운 경로가 아닌 경우, 취약점 탐색 시스템은 경로 탐색을 계속하지 않고 단계 S1112를 다시 수행할 수 있다. 경로가 새로운 경로인 경우, 취약점 탐색 시스템은 단계 S1113에서 경로식을 풀이할 수 있다. 취약점 탐색 시스템은 단계 S1114에서 경로식을 풀이한 결과로서 새로운 테스트 케이스를 생성할 수 있다. 이후, 취약점 탐색 시스템은 새로운 테스트 케이스에 대해 S1103 단계를 수행함으로써 크래시가 발생하는지 여부를 판단할 수 있다.
단계 S1104에서, 크래시가 발생하지 않은 경우, 취약점 탐색 시스템은 단계 S1101을 다시 수행할 수 있다. 또한, 단계 S1104에서 크래시가 발생한 경우, 취약점 탐색 시스템은 발생한 크래시에 대한 크래시 정보를 출력할 수 있다.
지금까지 설명된 본 발명의 실시예에 따른 방법들은 컴퓨터가 읽을 수 있는 코드로 구현된 컴퓨터프로그램의 실행에 의하여 수행될 수 있다. 상기 컴퓨터프로그램은 인터넷 등의 네트워크를 통하여 제1 컴퓨팅 장치로부터 제2 컴퓨팅 장치에 전송되어 상기 제2 컴퓨팅 장치에 설치될 수 있고, 이로써 상기 제2 컴퓨팅 장치에서 사용될 수 있다. 상기 제1 컴퓨팅 장치 및 상기 제2 컴퓨팅 장치는, 서버 장치, 클라우드 서비스를 위한 서버 풀에 속한 물리 서버, 데스크탑 피씨와 같은 고정식 컴퓨팅 장치를 모두 포함한다.
상기 컴퓨터프로그램은 DVD-ROM, 플래시 메모리 장치 등의 기록매체에 저장된 것일 수도 있다.
이상 첨부된 도면을 참조하여 본 발명의 실시예들을 설명하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자는 본 발명이 그 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 실시될 수 있다는 것을 이해할 수 있다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적인 것이 아닌 것으로 이해해야만 한다.

Claims (24)

  1. 제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 취약점 탐색 단계;
    상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 단계;
    상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 단계; 및
    상기 제2 테스트 케이스에 대해 상기 취약점 탐색 단계를 수행하는 단계를 포함하되,
    상기 바이너리 분석 단계는,
    상기 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph)를 복구하는 단계;
    상기 복구된 제어 흐름 그래프에 대한 복잡도를 산출하는 단계; 및
    상기 산출된 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 단계를 포함하는,
    취약점 탐색 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 경로 탐색의 수행 여부를 판단하는 단계는,
    상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)을 카운트한 값이 제2 임계값 미만인 경우 상기 경로 탐색을 수행하는 것으로 판단하는 것을 특징으로 하는,
    취약점 탐색 방법.
  5. 제1항에 있어서,
    상기 복잡도를 산출하는 단계는,
    하기 수학식에 기초하여 복잡도를 산출하며,
    Figure 112018071894686-pat00015

    H.D는 복잡도, n_1은 구별 오퍼레이터(distinct operator)의 수, n_2은 구별 오퍼랜드(distinct operand)의 수, N_2은 전체 오퍼랜드의 수인,
    취약점 탐색 방법.
  6. 제1항에 있어서,
    상기 바이너리 분석 단계는,
    상기 복잡도에 기초하여 위험도를 산출하는 단계; 및
    상기 위험도에 따라 상기 우선 순위를 판단하는 단계;를 더 포함하는,
    취약점 탐색 방법.
  7. 제6항에 있어서,
    상기 우선 순위는,
    상기 경로 정보에 상응하는 경로가 보안이 취약한 함수를 많이 호출할수록 순위가 높은 것을 특징으로 하는,
    취약점 탐색 방법.
  8. 제6항에 있어서,
    상기 우선 순위를 판단하는 단계는,
    상기 복잡도에 기초하여 위험도를 산출하는 하기 수학식에 기초하여 산출된 결과에 따라서 상기 우선 순위를 판단하며,
    Figure 112017100875698-pat00016

    Exp는 경로의 위험도, n은 취약한 함수를 호출한 카운트, v_i는 상기 카운트와 상기 취약한 함수가 호출하는 시스템 호출(system call)의 잠재적 위험도의 곱인,
    취약점 탐색 방법.
  9. 제1항에 있어서,
    상기 경로 탐색 단계는,
    상기 바이너리 정보에 대한 기호 실행(Symbolic Execution)을 수행함으로써 경로식을 생성하는 단계; 및
    상기 경로식에 기초하여 상기 제2 테스트 케이스를 생성하는 단계를 포함하는,
    취약점 탐색 방법.
  10. 제9항에 있어서,
    상기 제2 테스트 케이스를 생성하는 단계는,
    상기 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree)를 생성하는 단계; 및
    상기 제2 테스트 케이스를 생성하기 위해 상기 추상 구문 트리에 대한 제약 조건 풀이를 수행하는 단계;를 포함하는,
    취약점 탐색 방법.
  11. 제10항에 있어서,
    상기 제약 조건 풀이를 수행하는 단계는,
    상기 추상 구문 트리에 SMT 문제 풀이기를 적용하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  12. 제1항에 있어서,
    상기 취약점 탐색 단계는,
    상기 크래시 정보를 획득하기 위해 퍼징(fuzzing)을 수행하는 단계를 포함하는,
    취약점 탐색 방법.
  13. 제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 프로세스를 수행하는 취약점 탐색 모듈;
    상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 모듈; 및
    상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 모듈을 포함하고,
    상기 취약점 탐색 모듈은 상기 제2 테스트 케이스에 대해 크래시 정보를 획득하는 프로세스를 다시 수행하되,
    상기 바이너리 분석 모듈은,
    상기 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph)를 복구하고, 상기 복구된 제어 흐름 그래프에 대한 복잡도를 산출하며, 상기 산출된 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  14. 삭제
  15. 삭제
  16. 제13항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)을 카운트한 값이 제2 임계값 미만인 경우 상기 경로 탐색을 수행하는 것으로 판단하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  17. 제13항에 있어서,
    상기 바이너리 분석 모듈은,
    하기 수학식에 기초하여 복잡도를 산출하며,
    Figure 112018071894686-pat00017

    H.D는 복잡도, n_1은 구별 오퍼레이터(distinct operator)의 수, n_2은 구별 오퍼랜드(distinct operand)의 수, N_2은 전체 오퍼랜드의 수인,
    취약점 탐색 시스템.
  18. 제13항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 복잡도에 기초하여 산출된 위험도에 따라 상기 우선 순위를 판단하는 것을 특징으로 하는,
    취약점 탐색 시스템
  19. 제18항에 있어서,
    상기 우선 순위는,
    상기 경로 정보에 상응하는 경로가 보안이 취약한 함수를 많이 호출할수록 순위가 높은 것을 특징으로 하는,
    취약점 탐색 시스템
  20. 제18항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 복잡도에 기초하여 위험도를 산출하는 하기 수학식에 기초하여 산출된 결과에 따라서 상기 우선 순위를 판단하며,
    Figure 112017100875698-pat00018

    Exp는 경로의 위험도, n은 취약한 함수를 호출한 카운트, v_i는 상기 카운트와 상기 취약한 함수가 호출하는 시스템 호출(system call)의 잠재적 위험도의 곱인,
    취약점 탐색 시스템.
  21. 제13항에 있어서,
    상기 경로 탐색 모듈은,
    상기 바이너리 정보에 대한 기호 실행(Symbolic Execution)을 수행함으로써 제2 테스트 케이스를 생성하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  22. 제21항에 있어서,
    상기 경로 탐색 모듈은,
    상기 제2 테스트 케이스를 생성하기 위해 SMT 문제 풀이기를 적용하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  23. 제22항에 있어서,
    상기 취약점 탐색 모듈은,
    상기 크래시 정보를 획득하기 위해 퍼징을 수행하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  24. 프로세서에 의해 실행 가능한 컴퓨터 프로그램 명령어들을 포함하는 비일시적(Non-Transitory) 컴퓨터 판독 가능한 매체에 기록된 컴퓨터 시스템의 정보를 식별하기 위한 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램 명령어들이 컴퓨팅 디바이스의 프로세서에 의해 실행되는 경우에,
    제1 테스트 케이스에 대한 프로그램의 실행 경로를 나타내는 경로 정보를 포함하는 바이너리(Binary) 정보를 생성하고, 상기 제1 테스트 케이스에 대한 크래시(crash)가 발생하는 경우 상기 제1 테스트 케이스 및 상기 경로 정보를 포함하는 크래시 정보를 획득하는 취약점 탐색 단계;
    상기 경로 정보에 기초하여 위험도 분석을 수행함으로써 상기 바이너리 정보의 우선 순위를 판단하고, 상기 우선 순위에 기초하여 상기 바이너리 정보를 업데이트하고, 상기 위험도 분석 결과에 기초하여 상기 경로 정보에 대한 경로 탐색의 수행 여부를 판단하는 바이너리 분석 단계;
    상기 판단된 경로 탐색의 수행 여부에 기초하여 상기 경로 탐색을 수행함으로써 제2 테스트 케이스를 생성하는 경로 탐색 단계; 및
    상기 제2 테스트 케이스에 대해 상기 취약점 탐색 단계;를 포함하는 동작을 수행하되,
    상기 바이너리 분석 단계는,
    상기 바이너리 정보에 기초하여 제어 흐름 그래프(Control Flow Graph)를 복구하는 단계;
    상기 복구된 제어 흐름 그래프에 대한 복잡도를 산출하는 단계; 및
    상기 산출된 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 단계를 포함하는,
    컴퓨터 프로그램.
KR1020170133153A 2017-10-13 2017-10-13 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치 KR101904911B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170133153A KR101904911B1 (ko) 2017-10-13 2017-10-13 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
US15/817,372 US10586053B2 (en) 2017-10-13 2017-11-20 Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof
US16/408,352 US10621362B2 (en) 2017-10-13 2019-05-09 Method for automatically detecting security vulnerability based on hybrid fuzzing, and apparatus thereof

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170133153A KR101904911B1 (ko) 2017-10-13 2017-10-13 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020180115715A Division KR101981028B1 (ko) 2018-09-28 2018-09-28 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램

Publications (1)

Publication Number Publication Date
KR101904911B1 true KR101904911B1 (ko) 2018-10-08

Family

ID=63864511

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170133153A KR101904911B1 (ko) 2017-10-13 2017-10-13 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치

Country Status (2)

Country Link
US (2) US10586053B2 (ko)
KR (1) KR101904911B1 (ko)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109992503A (zh) * 2019-01-25 2019-07-09 北京丁牛科技有限公司 自动化测试方法及装置
KR102110735B1 (ko) * 2019-10-30 2020-06-08 한국인터넷진흥원 취약점 탐색을 위한 바이너리 재생성 방법 및 시스템
KR20200144051A (ko) * 2019-06-17 2020-12-28 바이두 유에스에이 엘엘씨 애플리케이션 프로그램들에 대한 취약성 기반 하이브리드 테스트 시스템
KR102299640B1 (ko) * 2020-10-21 2021-09-08 한국과학기술원 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
CN113934632A (zh) * 2021-10-14 2022-01-14 上海哔哩哔哩科技有限公司 代码检测方法及装置
CN117785719A (zh) * 2023-10-30 2024-03-29 北京水木羽林科技有限公司 基于qemu的多进程模糊测试方法、装置和计算机设备

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
US10983901B1 (en) * 2018-05-30 2021-04-20 Amazon Technologies, Inc. Systems and methods for fuzz testing serverless software applications
CN110765464B (zh) * 2019-10-30 2024-06-21 深圳前海微众银行股份有限公司 漏洞检测方法、装置、设备及计算机存储介质
CN111523121B (zh) * 2019-12-24 2023-08-29 国网天津市电力公司 一种指引二进制漏洞挖掘路径的方法及其应用
CN111367815B (zh) * 2020-03-24 2022-03-15 中国电子科技网络信息安全有限公司 一种基于人机协同的软件漏洞模糊测试方法
CN111581099B (zh) * 2020-05-11 2023-02-10 全球能源互联网研究院有限公司 一种漏洞路径优先级的符号执行调度方法及系统
US11290480B2 (en) * 2020-05-26 2022-03-29 Bank Of America Corporation Network vulnerability assessment tool
DE102020213890A1 (de) * 2020-11-04 2022-05-05 Robert Bosch Gesellschaft mit beschränkter Haftung Computerimplementiertes Verfahren und Vorrichtung zur Auswahl einer Fuzzing-Methode zum Testen eines Programmcodes
CN112559322B (zh) * 2020-11-20 2023-09-26 国家电网有限公司 一种基于动态插桩的软件分析方法及系统
KR102304861B1 (ko) * 2021-03-30 2021-09-23 세종대학교산학협력단 하이브리드 퍼징 기반의 펌웨어 취약점 검출 장치 및 방법
CN112860588B (zh) * 2021-04-07 2024-03-29 中国科学技术大学 一种针对智能合约跨合约漏洞的模糊测试方法
CN113569251B (zh) * 2021-07-05 2024-05-31 哈尔滨工业大学 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法
US11822673B2 (en) 2021-08-05 2023-11-21 International Business Machines Corporation Guided micro-fuzzing through hybrid program analysis
JP2023056111A (ja) * 2021-10-07 2023-04-19 株式会社日立製作所 ソフトウェア不具合分析装置及びソフトウェア不具合分析方法
EP4206967A1 (en) * 2022-01-03 2023-07-05 Tata Consultancy Services Limited Automated method and system for finding vulnerabilities in a program using fuzzing
US20230334161A1 (en) * 2022-04-19 2023-10-19 Bank Of America Corporation System and method for providing complex data encryption

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101530132B1 (ko) * 2013-12-10 2015-06-18 한양대학교 산학협력단 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치
KR101568224B1 (ko) 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
JP2016167262A (ja) * 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6978401B2 (en) * 2002-08-01 2005-12-20 Sun Microsystems, Inc. Software application test coverage analyzer
US7293213B1 (en) * 2004-09-16 2007-11-06 At&T Corp. Method for detecting software errors and vulnerabilities
KR100862187B1 (ko) 2006-10-27 2008-10-09 한국전자통신연구원 취약점 분석 및 공격방식 모델링을 이용한 네트워크기반의인터넷 웜 탐지 장치 및 그 방법
US8613080B2 (en) * 2007-02-16 2013-12-17 Veracode, Inc. Assessment and analysis of software security flaws in virtual machines
KR100916329B1 (ko) 2007-11-01 2009-09-11 한국전자통신연구원 소프트웨어 취약점 점검 장치 및 방법
US20090228871A1 (en) * 2008-03-10 2009-09-10 Microsoft Corporation Managing generation of security tests
US8549486B2 (en) * 2008-04-21 2013-10-01 Microsoft Corporation Active property checking
US8417998B2 (en) * 2010-06-07 2013-04-09 Microsoft Corporation Targeted black box fuzzing of input data
US8776026B2 (en) * 2010-10-01 2014-07-08 Ecole Polytechnique Federale De Lausanne System and method for in-vivo multi-path analysis of binary software
US9135405B2 (en) * 2011-05-26 2015-09-15 Carnegie Mellon University Automated exploit generation
US8918885B2 (en) * 2012-02-09 2014-12-23 International Business Machines Corporation Automatic discovery of system integrity exposures in system code
US9183396B2 (en) * 2012-05-21 2015-11-10 Carnegie Mellon University Detecting exploitable bugs in binary code
US20140046615A1 (en) * 2012-08-13 2014-02-13 Texas Instruments Incorporated Test Case Crash Recovery
US9507943B1 (en) * 2013-02-19 2016-11-29 Amazon Technologies, Inc. Analysis tool for data security
US10121008B1 (en) * 2013-03-18 2018-11-06 Stephen Patrick Frechette Method and process for automatic discovery of zero-day vulnerabilities and expoits without source code access
US9552285B2 (en) * 2013-05-02 2017-01-24 Microsoft Technology Licensing, Llc Micro-execution for software testing
US9367434B2 (en) * 2013-10-02 2016-06-14 Accenture Global Services Limited Testing framework for policy-based workflows
US9619375B2 (en) * 2014-05-23 2017-04-11 Carnegie Mellon University Methods and systems for automatically testing software
US9881155B2 (en) * 2014-07-02 2018-01-30 Leviathan, Inc. System and method for automatic use-after-free exploit detection
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
AU2017285429B2 (en) * 2016-06-16 2022-03-31 Virsec Systems, Inc. Systems and methods for remediating memory corruption in a computer application
KR101904911B1 (ko) * 2017-10-13 2018-10-08 한국인터넷진흥원 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101530132B1 (ko) * 2013-12-10 2015-06-18 한양대학교 산학협력단 기호 실행을 이용하는 바이너리 코드 실행 경로 확장 방법 및 장치
KR101568224B1 (ko) 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
JP2016167262A (ja) * 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109992503A (zh) * 2019-01-25 2019-07-09 北京丁牛科技有限公司 自动化测试方法及装置
CN109992503B (zh) * 2019-01-25 2022-10-11 北京丁牛科技有限公司 自动化测试方法及装置
KR20200144051A (ko) * 2019-06-17 2020-12-28 바이두 유에스에이 엘엘씨 애플리케이션 프로그램들에 대한 취약성 기반 하이브리드 테스트 시스템
KR102307364B1 (ko) * 2019-06-17 2021-09-29 바이두 유에스에이 엘엘씨 애플리케이션 프로그램들에 대한 취약성 기반 하이브리드 테스트 시스템
KR102110735B1 (ko) * 2019-10-30 2020-06-08 한국인터넷진흥원 취약점 탐색을 위한 바이너리 재생성 방법 및 시스템
KR102299640B1 (ko) * 2020-10-21 2021-09-08 한국과학기술원 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
CN113934632A (zh) * 2021-10-14 2022-01-14 上海哔哩哔哩科技有限公司 代码检测方法及装置
CN117785719A (zh) * 2023-10-30 2024-03-29 北京水木羽林科技有限公司 基于qemu的多进程模糊测试方法、装置和计算机设备

Also Published As

Publication number Publication date
US20190114436A1 (en) 2019-04-18
US20190266333A1 (en) 2019-08-29
US10621362B2 (en) 2020-04-14
US10586053B2 (en) 2020-03-10

Similar Documents

Publication Publication Date Title
KR101904911B1 (ko) 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
US11087002B2 (en) Using the same query language for static and dynamic application security testing tools
US9983984B2 (en) Automated modularization of graphical user interface test cases
Yao et al. Statsym: vulnerable path discovery through statistics-guided symbolic execution
EP3566166B1 (en) Management of security vulnerabilities
Bond et al. Breadcrumbs: efficient context sensitivity for dynamic bug detection analyses
EP3264274B1 (en) Input discovery for unknown program binaries
CN112131122B (zh) 一种源代码缺陷检测工具误报评估方法及装置
CN112131120B (zh) 一种源代码缺陷检测方法及装置
KR101696694B1 (ko) 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
Le Segmented symbolic analysis
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN117235745B (zh) 基于深度学习工控漏洞挖掘方法、系统、设备和存储介质
CN114036526A (zh) 漏洞测试方法、装置、计算机设备和存储介质
CN116305131B (zh) 脚本静态去混淆方法及系统
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取系统及方法
CN106940772B (zh) 变量对象的跟踪方法及装置
CN108984397B (zh) 黑盒故障注入方法和系统及介质设备
Jiang et al. Profile-guided program simplification for effective testing and analysis
CN115391780B (zh) 应用代码的安全加固方法、系统、设备及存储介质
Najafi On Test Selection, Prioritization, Bisection, and Guiding Bisection with Risk Models
Lim et al. Visualizing The Intermediate Representation of Just-in-Time Compilers
Park et al. BENZENE: A Practical Root Cause Analysis System with an Under-Constrained State Mutation
CN116881907A (zh) 一种基于数据流分析的动静态android隐私泄露检测方法及系统

Legal Events

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