KR20190041912A - 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 - Google Patents

바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 Download PDF

Info

Publication number
KR20190041912A
KR20190041912A KR1020180115715A KR20180115715A KR20190041912A KR 20190041912 A KR20190041912 A KR 20190041912A KR 1020180115715 A KR1020180115715 A KR 1020180115715A KR 20180115715 A KR20180115715 A KR 20180115715A KR 20190041912 A KR20190041912 A KR 20190041912A
Authority
KR
South Korea
Prior art keywords
path
vulnerability
test case
execution
search
Prior art date
Application number
KR1020180115715A
Other languages
English (en)
Other versions
KR101981028B1 (ko
Inventor
김환국
김태은
오상환
윤수진
전지수
나건배
Original Assignee
한국인터넷진흥원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국인터넷진흥원 filed Critical 한국인터넷진흥원
Priority to KR1020180115715A priority Critical patent/KR101981028B1/ko
Publication of KR20190041912A publication Critical patent/KR20190041912A/ko
Application granted granted Critical
Publication of KR101981028B1 publication Critical patent/KR101981028B1/ko

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/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)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (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

프로그램의 보안 취약점을 효율적으로 탐색할 수 있는 방법 및 시스템이 제공 된다. 본 발명의 일 실시예에 따른 취약점 탐색 방법은, 테스트 케이스에 대하여 상기 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 단계, 상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 단계 및 상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 단계를 포함한다.

Description

바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램{System for detecting security vulnerability based on binary, method and program thereof}
본 발명은 프로그램의 보안 취약점이 존재하는지 탐색하기 위한 시스템, 방법 및 그 프로그램에 관한 것이다. 보다 상세하게는, 프로그램에서 프로그램 설계자가 프로그램을 설계한 목적이 아닌 다른 목적에 의해 악용되어 프로그램이 정상 작동하지 않게 될 수 있는 보안 취약점이 존재하는지 여부를 탐색하기 위한 시스템, 방법 및 그 프로그램에 관한 것이다.
프로그램의 개발 과정에서는 프로그램에 대한 분석은 일반적으로 디버깅 프로그램을 이용하여 소스 코드에서 취약점이 발생할 가능성이 있는 곳에 브레이크 포인트를 설정하고, 프로그램의 실행 중에 브레이크 포인트에 따라 실행이 멈추면 프로그램의 실행 환경을 관찰함으로써 프로그램을 분석한다.
그러나, 프로그램의 개발 과정이 아니라 프로그램이 배포된 이후에 프로그램의 취약점을 분석하는 경우에는 대부분 소스 코드를 구할 수 없는 환경에서 분석 과정이 수행되므로, 소스 코드를 통해서 프로그램을 분석할 수 없는 문제점이 있다. 따라서, 프로그램에 대한 취약점 분석은 실행파일만으로도 수행될 수 있는 블랙박스 테스트 형태의 분석 방법이 필요하다. 여기서, 블랙박스 테스트란 프로그램을 내부 동작을 관찰할 수 없는 블랙박스로 가정하고 소프트웨어의 입출력 값에 기반하여 분석을 수행하는 테스트 방식이다.
그러나 기존의 블랙박스 테스트에 의해서는 프로그램의 실행 경로 중 얕은 경로에 존재하는 취약점만 탐지될 가능성이 높으며, 깊은 경로 내에 존재하는 취약점까지 분석하기 위해서는 지나치게 많은 연산량이 요구되는 문제점이 있다.
미국등록특허 제9454659호
본 발명이 해결하고자 하는 기술적 과제는, 소스 코드 없이 바이너리 분석만으로 프로그램의 보안 취약점을 효율적으로 탐색할 수 있는 방법 및 시스템을 제공하는 것이다.
본 발명의 기술적 과제들은 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명의 기술분야에서의 통상의 기술자에게 명확하게 이해 될 수 있을 것이다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 취약점 탐색 방법은, 테스트 케이스에 대하여 상기 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 단계, 상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 단계 및 상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 단계를 포함할 수 있다.
또한, 본 발명의 다른 일 실시 예에 따르면, 상기 취약점 탐색 단계는, 퍼징(fuzzing) 기법을 적용하여 상기 테스트 케이스를 생성하는 단계를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는 상기 복잡도에 기초하여 상기 경로 탐색의 수행 여부를 판단하는 단계를 더 포함하는 것을 특징으로 할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는, 상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)의 개수가 제2 임계값 미만이라는 판정에 응답하여, 상기 경로 탐색을 수행하기로 결정하는 단계를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 바이너리 분석 단계는, 상기 실행 경로에 대한 위험도를 산출하는 단계를 더 포함하되, 상기 위험도는, 상기 실행 경로 상에서 보안이 취약한 함수가 많이 호출될수록 높은 값으로 산출될 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 경로 탐색 단계는, 기호 실행(Symbolic Execution)을 수행하여 상기 실행 경로에 대한 경로식을 생성하는 단계, 상기 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree)를 생성하는 단계 및 SMT 문제 풀이기를 통해 상기 추상 구문 트리에 대한 제약 조건 풀이를 수행함으로써 상기 신규 테스트 케이스를 생성하는 단계를 포함할 수 있다.
또한, 본 발명의 또 다른 일 실시 예에 따르면, 상기 크래시 정보는 상기 크래시를 유발한 제1 테스트 케이스 및 상기 제1 테스트 케이스의 제1 실행 경로를 포함하고, 상기 경로 탐색 단계는, 상기 제1 실행 경로에 대한 경로 탐색을 수행함으로써, 제2 테스트 케이스를 생성하는 단계를 포함할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 취약점 탐색 시스템은, 테스트 케이스에 대하여 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 모듈, 상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 모듈 및 상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 모듈을 포함할 수 있다.
상기 기술적 과제를 해결하기 위한, 본 발명의 일 실시예에 따른 컴퓨터 프로그램은, 하드웨어와 결합하여, 테스트 케이스에 대하여 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 단계, 상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 단계 및 상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 단계를 실행시키기 위하여 컴퓨터로 판독가능한 기록 매체에 저장될 수 있다.
도 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 pat00001
구별 오퍼레이터(distinct operator)의 개수
Figure pat00002
구별 오퍼랜드(distinct operand)의 개수
Figure pat00003
전체 오퍼레이터의 개수
Figure pat00004
전체 오퍼랜드의 개수
Figure pat00005
Figure pat00006
Figure pat00007
Figure pat00008
구별 오퍼레이터 및 구별 오퍼랜드는 고유 오퍼레이터(Unique Operator) 및 고유 오퍼랜드(Unique Operand)로 언급될 수도 있다.
일 실시 예에 따르면, 바이너리 분석 모듈(120)은 하기 수학식 1에 기초하여 복잡도를 산출할 수 있다.
Figure pat00009
여기서, H.D는 복잡도를 의미한다.
이후, 단계 S430에서 바이너리 분석 모듈(120)은 복잡도에 기초하여 위험도를 산출하고, 산출된 위험도에 기초하여 경로에 대한 우선 순위를 판단할 수 있다. 일 실시 예에 따르면, 바이너리 분석 모듈(120)은 하기 수학식 2에 기초하여 위험도를 산출할 수 있다.
Figure pat00010
Figure pat00011
Figure pat00012
Figure 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 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 (21)

  1. 취약점 탐색 시스템에서 대상 프로그램의 취약점을 탐색하는 방법에 있어서,
    테스트 케이스에 대하여 상기 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 단계;
    상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 단계; 및
    상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  2. 제1 항에 있어서,
    상기 취약점 탐색 단계는,
    퍼징(fuzzing) 기법을 적용하여 상기 테스트 케이스를 생성하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  3. 제1 항에 있어서,
    상기 바이너리 분석 단계는,
    상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)의 개수가 제2 임계값 미만이라는 판정에 응답하여, 상기 경로 탐색을 수행하기로 결정하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  4. 제1 항에 있어서,
    상기 바이너리 분석 단계는,
    상기 실행 경로에 대한 위험도를 산출하는 단계를 더 포함하되,
    상기 위험도는,
    상기 실행 경로 상에서 보안이 취약한 함수가 많이 호출될수록 높은 값으로 산출되는 것을 특징으로 하는,
    취약점 탐색 방법.
  5. 제4 항에 있어서,
    상기 위험도를 산출하는 단계는,
    상기 산출된 복잡도를 더 이용하여 상기 위험도를 산출하는 단계를 포함하되,
    상기 위험도는,
    상기 산출된 복잡도가 높을수록 높은 값으로 산출되는 것을 특징으로 하는,
    취약점 탐색 방법.
  6. 제4 항에 있어서,
    상기 실행 경로는 복수개이고,
    상기 신규 테스트 케이스를 이용하여 상기 복수개의 실행 경로에 대하여 상기 취약점 탐색 단계를 다시 수행하는 단계를 더 포함하되,
    상기 취약점 탐색 단계를 수행하는 단계는,
    상기 산출된 위험도에 기초하여 상기 복수개의 실행 경로의 우선순위를 결정하는 단계; 및
    상기 결정된 우선순위에 따라 상기 취약점 탐색 단계를 다시 수행하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  7. 제4 항에 있어서,
    상기 위험도를 산출하는 단계는,
    하기 수학식에 기초하여 상기 위험도를 산출하는 단계를 포함하되,
    Figure pat00015

    Exp는 경로의 위험도, n은 취약한 함수를 호출한 카운트, vi는 상기 카운트와 상기 취약한 함수가 호출하는 시스템 호출(system call)의 잠재적 위험도의 곱인 것을 특징으로 하는,
    취약점 탐색 방법.
  8. 제1 항에 있어서,
    상기 바이너리 분석 단계는,
    하기 수학식에 기초하여 상기 복잡도를 산출하는 단계를 포함하되,
    Figure pat00016

    H.D는 복잡도, n1은 구별 오퍼레이터(distinct operator)의 수, n2는 구별 오퍼랜드(distinct operand)의 수, N2는 전체 오퍼랜드의 수인 것을 특징으로 하는,
    취약점 탐색 방법.
  9. 제1 항에 있어서,
    상기 경로 탐색 단계는,
    기호 실행(Symbolic Execution)을 수행하여 상기 실행 경로에 대한 경로식을 생성하는 단계;
    상기 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree)를 생성하는 단계; 및
    SMT 문제 풀이기를 통해 상기 추상 구문 트리에 대한 제약 조건 풀이를 수행함으로써 상기 신규 테스트 케이스를 생성하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  10. 제1 항에 있어서,
    상기 크래시 정보는 상기 크래시를 유발한 제1 테스트 케이스 및 상기 제1 테스트 케이스의 제1 실행 경로를 포함하고,
    상기 경로 탐색 단계는,
    상기 제1 실행 경로에 대한 경로 탐색을 수행함으로써, 제2 테스트 케이스를 생성하는 단계를 포함하는 것을 특징으로 하는,
    취약점 탐색 방법.
  11. 테스트 케이스에 대하여 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 모듈;
    상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 모듈; 및
    상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 모듈을 포함하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  12. 제11 항에 있어서,
    상기 취약점 탐색 모듈은,
    퍼징(fuzzing) 기법을 적용하여 상기 테스트 케이스를 생성하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  13. 제11 항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 복잡도가 제1 임계값 미만이고, 상기 제어 흐름 그래프에 포함된 분기점(Branch)의 개수가 제2 임계값 미만이라는 판정에 응답하여, 상기 경로 탐색을 수행하기로 결정하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  14. 제11 항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 실행 경로에 대한 위험도를 더 산출하되,
    상기 위험도는,
    상기 실행 경로 상에서 보안이 취약한 함수가 많이 호출될수록 높은 값으로 산출되는 것을 특징으로 하는,
    취약점 탐색 시스템.
  15. 제14 항에 있어서,
    상기 바이너리 분석 모듈은,
    상기 산출된 복잡도를 더 이용하여 상기 위험도를 산출하되,
    상기 위험도는,
    상기 산출된 복잡도가 높을수록 높은 값으로 산출되는 것을 특징으로 하는,
    취약점 탐색 시스템.
  16. 제14 항에 있어서,
    상기 실행 경로는 복수개이고,
    상기 바이너리 분석 모듈은,
    상기 산출된 위험도에 기초하여 상기 복수개의 실행 경로의 우선순위를 결정하고,
    상기 취약점 탐색 모듈은,
    상기 신규 테스트 케이스를 이용하여 상기 복수개의 실행 경로에 대한 크래시 발생 여부를 탐색하되, 상기 결정된 우선순위에 따라 상기 크래시 발생 여부를 탐색하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  17. 제14 항에 있어서,
    상기 바이너리 분석 모듈은,
    하기 수학식에 기초하여 상기 위험도를 산출하되,
    Figure pat00017

    Exp는 경로의 위험도, n은 취약한 함수를 호출한 카운트, vi는 상기 카운트와 상기 취약한 함수가 호출하는 시스템 호출(system call)의 잠재적 위험도의 곱인 것을 특징으로 하는,
    취약점 탐색 시스템.
  18. 제11 항에 있어서,
    상기 바이너리 분석 모듈은,
    하기 수학식에 기초하여 상기 복잡도를 산출하되,
    Figure pat00018

    H.D는 복잡도, n1은 구별 오퍼레이터(distinct operator)의 수, n2는 구별 오퍼랜드(distinct operand)의 수, N2는 전체 오퍼랜드의 수인 것을 특징으로 하는,
    취약점 탐색 시스템.
  19. 제11 항에 있어서,
    상기 경로 탐색 모듈은,
    기호 실행(Symbolic Execution)을 수행하여 상기 실행 경로에 대한 경로식을 생성하고, 상기 생성된 경로식에 기초하여 추상 구문 트리(Abstract Syntax Tree)를 생성하며, SMT 문제 풀이기를 통해 상기 추상 구문 트리에 대한 제약 조건 풀이를 수행함으로써 상기 신규 테스트 케이스를 생성하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  20. 제11 항에 있어서,
    상기 크래시 정보는 상기 크래시를 유발한 제1 테스트 케이스 및 상기 제1 테스트 케이스의 제1 실행 경로를 포함하고,
    상기 경로 탐색 모듈은,
    상기 제1 실행 경로에 대한 경로 탐색을 수행함으로써, 제2 테스트 케이스를 생성하는 것을 특징으로 하는,
    취약점 탐색 시스템.
  21. 하드웨어와 결합하여,
    테스트 케이스에 대하여 대상 프로그램을 바이너리(binary) 실행하여, 상기 테스트 케이스의 실행 경로 정보를 포함하는 바이너리 정보를 생성하고, 크래시(crash) 발생에 응답하여 크래시 정보를 획득하는 취약점 탐색 단계;
    상기 바이너리 정보를 기초로 상기 대상 프로그램의 제어 흐름 그래프(control flow graph)를 복구하고, 상기 제어 흐름 그래프를 기초로 상기 실행 경로에 대한 복잡도를 산출하며, 상기 복잡도가 임계값 미만이라는 판정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행하기로 결정하는 바이너리 분석 단계; 및
    상기 경로 탐색의 수행 결정에 응답하여, 상기 실행 경로에 대한 경로 탐색을 수행함으로써, 신규 테스트 케이스를 생성하는 경로 탐색 단계를 실행시키기 위하여 컴퓨터로 판독가능한 기록 매체에 저장된,
    컴퓨터 프로그램.
KR1020180115715A 2018-09-28 2018-09-28 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 KR101981028B1 (ko)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Related Parent Applications (1)

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

Publications (2)

Publication Number Publication Date
KR20190041912A true KR20190041912A (ko) 2019-04-23
KR101981028B1 KR101981028B1 (ko) 2019-05-23

Family

ID=66285394

Family Applications (1)

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

Country Status (1)

Country Link
KR (1) KR101981028B1 (ko)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102035246B1 (ko) * 2019-05-24 2019-10-22 세종대학교산학협력단 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법
KR102209676B1 (ko) * 2020-07-20 2021-01-28 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법
WO2021132880A1 (en) * 2019-12-23 2021-07-01 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
KR102299640B1 (ko) * 2020-10-21 2021-09-08 한국과학기술원 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
WO2021187744A1 (ko) * 2020-03-19 2021-09-23 삼성전자주식회사 전자 장치 및 그 제어 방법
CN113569251A (zh) * 2021-07-05 2021-10-29 哈尔滨工业大学 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法
KR102353187B1 (ko) * 2020-08-14 2022-01-20 국방과학연구소 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치
US11262994B2 (en) 2019-11-05 2022-03-01 Korea Internet & Security Agency Method and device for identifying type of variable in binary
KR20220060231A (ko) * 2020-11-04 2022-05-11 한국전자통신연구원 자동화된 리셋 기반의 IoT 기기 자동 퍼징 방법 및 이를 이용한 장치
KR20230025144A (ko) * 2021-08-13 2023-02-21 한국과학기술원 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법
CN113569251B (zh) * 2021-07-05 2024-05-31 哈尔滨工业大学 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102289574B1 (ko) * 2020-05-14 2021-08-13 한국과학기술원 거리 기반 피트니스 함수를 사용한 그레이 박스 퍼징 방법 및 장치
KR102304861B1 (ko) 2021-03-30 2021-09-23 세종대학교산학협력단 하이브리드 퍼징 기반의 펌웨어 취약점 검출 장치 및 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090044656A (ko) * 2007-11-01 2009-05-07 한국전자통신연구원 소프트웨어 취약점 점검 장치 및 방법
KR101568224B1 (ko) * 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
JP2016167262A (ja) * 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20090044656A (ko) * 2007-11-01 2009-05-07 한국전자통신연구원 소프트웨어 취약점 점검 장치 및 방법
US9454659B1 (en) 2014-08-15 2016-09-27 Securisea, Inc. Software vulnerabilities detection system and methods
KR101568224B1 (ko) * 2014-12-26 2015-11-11 고려대학교 산학협력단 소프트웨어 취약점 분석방법 및 분석장치
JP2016167262A (ja) * 2015-03-05 2016-09-15 富士通株式会社 脆弱性分析のための自律型推論システム

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102035246B1 (ko) * 2019-05-24 2019-10-22 세종대학교산학협력단 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법
US11262994B2 (en) 2019-11-05 2022-03-01 Korea Internet & Security Agency Method and device for identifying type of variable in binary
WO2021132880A1 (en) * 2019-12-23 2021-07-01 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
US11470098B2 (en) 2019-12-23 2022-10-11 Samsung Electronics Co., Ltd. Terminal device and controlling method thereof
WO2021187744A1 (ko) * 2020-03-19 2021-09-23 삼성전자주식회사 전자 장치 및 그 제어 방법
KR102209676B1 (ko) * 2020-07-20 2021-01-28 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법
KR102353187B1 (ko) * 2020-08-14 2022-01-20 국방과학연구소 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치
KR102299640B1 (ko) * 2020-10-21 2021-09-08 한국과학기술원 퍼즈 테스팅을 이용한 커널 시스템 콜 유사도 분석 방법 및 시스템
KR20220060231A (ko) * 2020-11-04 2022-05-11 한국전자통신연구원 자동화된 리셋 기반의 IoT 기기 자동 퍼징 방법 및 이를 이용한 장치
CN113569251A (zh) * 2021-07-05 2021-10-29 哈尔滨工业大学 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法
CN113569251B (zh) * 2021-07-05 2024-05-31 哈尔滨工业大学 一种基于汇编指令序列的二进制可执行文件脆弱性检测方法
KR20230025144A (ko) * 2021-08-13 2023-02-21 한국과학기술원 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법

Also Published As

Publication number Publication date
KR101981028B1 (ko) 2019-05-23

Similar Documents

Publication Publication Date Title
KR101904911B1 (ko) 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치
KR101981028B1 (ko) 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램
Le et al. Deep specification mining
US9983984B2 (en) Automated modularization of graphical user interface test cases
Yang et al. Memoized symbolic execution
EP3401827A1 (en) Method and system of static and dynamic data flow analysis
Yao et al. Statsym: vulnerable path discovery through statistics-guided symbolic execution
EP3264274B1 (en) Input discovery for unknown program binaries
Bond et al. Breadcrumbs: efficient context sensitivity for dynamic bug detection analyses
CN111695119A (zh) 一种基于细粒度静态污点分析与符号执行的web漏洞检测方法
KR101640479B1 (ko) 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
KR101696694B1 (ko) 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치
CN113590454A (zh) 测试方法、装置、计算机设备和存储介质
KR102273135B1 (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
Le Segmented symbolic analysis
Sotgiu et al. Explainability-based debugging of machine learning for vulnerability discovery
CN112131120B (zh) 一种源代码缺陷检测方法及装置
Zhang et al. Test case prioritization technique based on error probability and severity of UML models
Modi et al. Exploring program phases for statistical bug localization
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取系统及方法
Zhao et al. Probabilistic path prioritization for hybrid fuzzing
CN113688403A (zh) 一种基于符号执行验证的智能合约漏洞检测方法及装置
Mashhadi et al. An empirical study on practicality of specification mining algorithms on a real-world application
CN108415836B (zh) 利用应用程序检测计算机系统性能变化的方法和系统
Jiang et al. Profile-guided program simplification for effective testing and analysis

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right