KR102190727B1 - 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법 - Google Patents

프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법 Download PDF

Info

Publication number
KR102190727B1
KR102190727B1 KR1020180170099A KR20180170099A KR102190727B1 KR 102190727 B1 KR102190727 B1 KR 102190727B1 KR 1020180170099 A KR1020180170099 A KR 1020180170099A KR 20180170099 A KR20180170099 A KR 20180170099A KR 102190727 B1 KR102190727 B1 KR 102190727B1
Authority
KR
South Korea
Prior art keywords
software
program path
test input
input
seed
Prior art date
Application number
KR1020180170099A
Other languages
English (en)
Other versions
KR20200080541A (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 KR1020180170099A priority Critical patent/KR102190727B1/ko
Publication of KR20200080541A publication Critical patent/KR20200080541A/ko
Application granted granted Critical
Publication of KR102190727B1 publication Critical patent/KR102190727B1/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/3604Software analysis for verifying properties of programs
    • 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)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

프로그램 경로에 기반한 소프트웨어 취약점 검출 방법에 관한 것으로, 소프트웨어 취약점 검출 방법은, 시드풀로부터 하나의 시드를 임의로 선정하는 단계, 상기 선정된 시드에 대해 기 설정된 공격 규칙을 적용하여 테스트 입력을 생성하는 단계, 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계, 상기 테스트 입력에 의해 소프트웨어의 새로운 프로그램 경로가 탐색되었는지 여부를 판단하는 단계 및 새로운 프로그램 경로가 탐색되었을 경우, 상기 테스트 입력을 상기 시드풀에 추가하는 단계를 포함할 수 있다.

Description

프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법{APPARATUS AND METHOD FOR DETECTING VULNERABILITY OF SOFTWARE}
본원은 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법에 관한 것이다.
소프트웨어가 의도대로 동작하지 않는 버그(Bug)들 중에 이를 악용하면 정보를 유출하거나 데이터가 변경되는 등의 피해를 주는 버그가 있을 수 있고, 이렇게 악용 가능한 버그를 소프트웨어 취약점(Vulnerability)라 부르며, 취약점을 이용한 공격에는 대표적으로 메모리를 덮어씌워 원하는 코드를 실행시키는 'Buffer Overflow' 공격, 'SQL 인젝션' 및 '크로스 사이트 스크립팅' 등이 존재할 수 있다.
일반적으로 소프트웨어의 취약점을 검출하기 위한 퍼징(Fuzzing)기법은 유효한, 예상치 않은, 비정상적인 또는 무작위 데이터를 소프트웨어에 전달하여 에러를 유도하는 방법을 일컫는다. 이러한 퍼징 기법은 테스트 입력을 생성하기 위하여 사용하는 정보의 종류에 따라 mutation기반, grammar기반, 블랙박스 퍼징, 화이트박스 퍼징 등으로 나뉠 수 있다.
특히나 IoT(Internet of Things, 사물 인터넷)기술이 점차 발전함에 따라, 새로운 IoT 서비스를 제공하기 위한 소프트웨어 또는 라이브러리들이 개발되고 있으며, 이러한 소프트웨어 또는 라이브러리에 대한 취약점 분석도 필수적이다. 특히나, IIoT(Industrial Internet of Things, 산업분야 사물 인터넷) 환경에서 사용되는 소프트웨어 제품에서 취약점이 존재할 경우, 원격에서 취약점을 이용한 공격을 통해 물리적 피해가 발생할 수 있기 때문에 정확한 취약점 검출 방법이 요구된다.
하지만, 이러한 IoT 기기에서 사용되기 위한 소프트웨어 및 라이브러리는 소스 코드가 공개되지 않는 경우가 많아, 효율적인 White Box기반 테스트가 불가능한 실정이다.
또한, 기존의 Black Box 기반 취약점 분석 방법의 경우에도, 대상 소프트웨어의 소스 코드 정보를 활용할 수 없기 때문에 방대한 양의 테스트 케이스가 요구되므로 효율성이 떨어지는 한계가 있다.
본원의 배경이 되는 기술은 한국특허공개공보 제 10-1857289호에 개시되어 있다.
본원은 전술한 종래 기술의 문제점을 해결하기 위한 것으로서, 시드를 기반으로 테스트 입력을 생성하고, 단순히 테스트를 진행하는데 그치지 않고 테스트 과정에서 일부 요소들을 모니터링 하여 대상 소프트웨어의 다른 코드 영역을 탐색한 것으로 예측되는 경우 해당 테스트 입력을 새롭게 시드로 추가하는 시드 확장 기법을 활용한 퍼징 기법으로 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법을 제공하는 것을 목적으로 한다.
다만, 본원의 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들도 한정되지 않으며, 또 다른 기술적 과제들이 존재할 수 있다.
상기한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은, 시드풀로부터 하나의 시드를 임의로 선정하는 단계, 상기 선정된 시드에 대해 기 설정된 공격 규칙을 적용하여 테스트 입력을 생성하는 단계, 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계, 상기 테스트 입력에 의해 소프트웨어의 새로운 프로그램 경로가 탐색되었는지 여부를 판단하는 단계 및 새로운 프로그램 경로가 탐색되었을 경우, 상기 테스트 입력을 상기 시드풀에 추가하는 단계를 포함할 수 있다.
또한, 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은, 상기 선정된 시드를 이용하여 테스트 입력을 생성할 수 있는지 여부를 판단하는 단계를 더 포함할 수 있다.
또한, 상기 시드는 대상 소프트웨어의 정상입력 데이터 또는 비정상입력 데이터일 수 있다.
또한, 상기 기 설정된 공격규칙은, 무작위의 비트 연산, 경계값(border values)의 적용 및 필드 크기 변경 중 적어도 하나일 수 있다.
또한, 상기 새로운 프로그램 경로가 탐색되었는지 여부를 판단하는 단계는, 선행된 테스트 입력을 대상 소프트웨어에 입력하는 단계에 의해 실행된 바 없는 상기 대상 소프트웨어에 포함된 새로운 소스코드 영역이 실행되었는지 여부를 판단하는 것일 수 있다.
또한, 상기 새로운 소스코드 영역이 실행되었는지 여부를 판단하는 것은, 대상 소프트웨어의 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 수행될 수 있다.
또한, 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은, 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계 후, 크래시를 검출하는 단계를 더 포함할 수 있다.
또한, 상기 크래시를 검출하는 단계는 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계로 인해 대상 소프트웨어에서 크래시가 발생한 경우, 해당 테스트 입력을 로그로 저장하는 것일 수 있다.
한편, 상기한 기술적 과제를 달성하기 위한 기술적 수단으로서, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치는, 대상 소프트웨어의 정상입력 또는 비정상입력인 시드에 대한 정보를 저장하는 제1저장부, 상기 제1저장부로부터 시드 정보를 수신하여 상기 시드 정보를 기반으로 새로운 테스트 입력을 생성하는 입력생성부, 상기 테스트 입력을 대상 소프트웨어에 입력하고 대상 소프트웨어의 응답을 분석하는 테스트부 및 상기 테스트 입력에 의해 대상 소프트웨어의 새로운 프로그램 경로가 탐색되었는지를 탐지하는 프로그램 경로 탐지부를 포함할 수 있다.
또한, 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치는, 상기 테스트부가 소프트웨어의 응답을 분석하는 과정에서 크래시가 발생한 경우, 해당 테스트 입력에 대한 정보를 로그 형태로 저장하는 제 2저장부를 더 포함할 수 있다.
또한, 상기 프로그램 경로 탐지부는, 상기 테스트 입력에 따른 소프트웨어의 응답에 관하여, 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 상기 대상 소프트웨어의 새로운 프로그램 경로가 탐색되었는지를 탐지할 수 있다.
상술한 과제 해결 수단은 단지 예시적인 것으로서, 본원을 제한하려는 의도로 해석되지 않아야 한다. 상술한 예시적인 실시예 외에도, 도면 및 발명의 상세한 설명에 추가적인 실시예가 존재할 수 있다.
전술한 본원의 과제 해결 수단에 의하면, 본원에 따른 소프트웨어 취약점 검출 장치 및 방법은, 프로그램 경로 탐색 여부에 따라 시드가 확장되기 때문에 사용자가 초기 시드를 잘못 생성한 경우에도 뛰어난 취약점 검출 성능을 가질 수 있다.
전술한 본원의 과제 해결 수단에 의하면, 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법은, 소스 코드 정보에 접근 가능한 White Box 테스트 방식과 연계하여 Code Coverage의 변화량을 통해 각 테스트 입력에 의해 대상 소프트웨어의 프로그램 경로가 변화했는지 여부를 판단할 수 있다.
전술한 본원의 과제 해결 수단에 의하면, 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법은, 소스 코드 정보를 활용할 수 없는 Black Box 테스트 방식에 있어서도, 입출력 응답시간의 차이, 출력값의 변화 및 기타 시스템 정보 중 적어도 하나의 정보를 활용하여 각 테스트 입력에 의해 대상 소프트웨어의 프로그램 경로가 변화했는지 여부를 판단할 수 있어 기존Black Box 기반 테스트의 한계점을 극복할 수 있다.
도 1은 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치의 개략적인 블록도이다.
도 2는 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법에 대한 동작흐름도이다.
도 3은 본원의 일 실시예에 따른 선정된 시드를 이용하여 테스트 입력을 생성할 수 있는지 여부를 판단하는 단계에 대한 동작흐름도이다.
도 4는 본원의 일 실시예에 따른 크래시를 검출 하는 단계에 대한 동작흐름도이다.
도 5는 본원의 일 실시예에 따른 프로그램 경로 탐지부의 동작을 설명하기 위하여 도시한 도면이다.
아래에서는 첨부한 도면을 참조하여 본원이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본원의 실시예를 상세히 설명한다. 그러나 본원은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 그리고 도면에서 본원을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
본원 명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다.
본원 명세서 전체에서, 어떤 부재가 다른 부재 "상에", "상부에", "상단에", "하에", "하부에", "하단에" 위치하고 있다고 할 때, 이는 어떤 부재가 다른 부재에 접해 있는 경우뿐 아니라 두 부재 사이에 또 다른 부재가 존재하는 경우도 포함한다.
본원 명세서 전체에서, 어떤 부분이 어떤 구성요소를 "포함" 한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것을 의미한다.
본원은 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법 및 장치에 관한 것이다.
도1은 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)의 개략적인 블록도이다.
한편, 프로그램 경로에 기반한 소프트웨어 취약점 검출 창치(100)는 서버, 데스크탑 PC, 노트북, 스마트폰, 태블릿PC 및 기타 중앙처리장치를 포함하는 산업용장비 등에 탑재되어, 각 장치에서 동작하는 소프트웨어의 취약성을 검출할 수 있다.
도1을 참조하면, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)는, 제1저장부(110), 입력생성부(120), 테스트부(130), 프로그램 경로 탐지부(140) 및 제2저장부(150)를 포함할 수 있다.
도1을 참조하면, 제1저장부(110)는 대상 소프트웨어의 정상입력 또는 비정상입력인 시드에 대한 정보를 저장할 수 있으며, 시드풀은 하나 이상의 시드로 이루어진 시드의 집합을 의미한다.
본원의 일 실시예에 따르면, 제1저장부(110)의 초기 시드풀 정보는 사용자에 의해 정의될 수 있으며, 상기 시드는 대상 소프트웨어의 종류에 따라 패킷, 파일 등의 다양한 형태를 가질 수 있다.
본원의 일 실시예에 따르면, 제1저장부(110)가 프로그램 경로 탐지부(140)로부터 시드 추가 명령(54)을 수신한 경우, 해당 테스트 입력에 대한 정보가 새로운 시드 정보로서 제1저장부(110)에 추가 될 수 있다. 달리 말해, 제1저장부(110)에 저장된 시드의 수는 가변적일 수 있다.
또한, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)는 제1저장부(110)에 저장된 모든 시드가 테스트 입력으로 변환 되어 소프트웨어에 입력되는 테스트 과정을 마친 경우를 취약점 검출의 종료 조건으로 할 수 있다.
또한, 입력생성부(120)는 제1저장부(110)로부터 시드 정보를 수신하여 상기 시드 정보를 기반으로 새로운 테스트 입력을 생성할 수 있다.
본원의 일 실시예에 따르면, 입력생성부(120)는 제1저장부(110)의 시드 중 테스트 된 적이 없는 시드 정보만을 선별하여 수신할 수 있다.
본원의 일 실시예에 따르면, 입력생성부(120)는 시드 정보를 기반으로 테스트 입력을 생성하는 단계에 앞서 상기 선정된 시드를 이용하여 테스트 입력을 생성할 수 있는지 여부를 판단하는 단계를 수행할 수 있다.
본원의 일 실시예에 따르면, 입력생성부(120)는 상기 선정된 시드에 기 설정된 공격 규칙을 적어도 하나 이상 적용한 테스트 입력 후보군을 생성하고, 해당 테스트 입력 후보군 전부가 기존의 취약점 검출 과정에서 테스트 입력으로 사용된 적이 있는지를 판단할 수 있다.
본원의 일 실시예에 따르면, 상기 새로운 테스트 입력을 생성할 수 있는지를 판단한 결과, 시드 정보에 의한 테스트 입력 후보군 모두가 대상 소프트웨어에 입력된 기록이 있는 경우, 해당 시드는 테스트 입력을 생성하는데 사용되지 않고, 이 경우 입력생성부(120)는 제1수신부(110)로부터 다른 시드 정보를 수신할 수 있다.
반대로, 상기 새로운 테스트 입력을 생성할 수 있는지를 판단한 결과, 시드 정보에 의한 테스트 입력 후보군 중 대상 소프트웨어에 입력된 기록이 없는 테스트 입력 후보가 존재하는 경우, 상기 대상 소프트웨어에 입력된 기록이 없는 테스트 입력 후보를 테스트 입력으로 확정하고, 상기 테스트 입력에 대한 정보를 테스트부(130)로 전송할 수 있다.
본원의 일 실시예에 따르면, 상기 기 설정된 공격규칙은, 무작위의 비트 연산, 경계값(border values)의 적용 및 필드 크기 변경 중 적어도 하나일 수 있다.
본원의 일 실시예에 따르면, 상기 기 설정된 공격규칙은 다양한 경험적 방법(Heuristic Method)에 의해 사용자가 직접 작성할 수 있다.
다만, 공격규칙(Attack grammar) 중 무작위의 비트 연산, 경계값(border values)의 적용 및 필드 크기 변경은 이해를 돕기 위한 예시적 기재일 뿐, 다른 입력 데이터에 대한 변형의 실시예가 본 사상에 적용되는 것을 제한하거나 한정하는 것으로 해석되어서는 안될 것이다.
또한, 테스트부(130)는 입력생성부(120)로부터 생성되어 전송된 테스트 입력을 대상 소프트웨어에 입력하고 대상 소프트웨어의 응답을 분석할 수 있다.
본원의 일 실시예에 따르면, 상기 대상 소프트웨어의 응답에는 정상적인 출력값을 출력하는 반응 외에도 충돌이나 빌트인 코드 검증의 실패, 잠재적인 메모리 누수 발견 등과 같은 예외 상황이 포함될 수 있다.
또한, 프로그램 경로 탐지부(140)는 테스트부(130)의 동작과 병렬적으로 테스트 입력에 의해 대상 소프트웨어의 새로운 프로그램 경로가 탐색되었는지를 탐지할 수 있다.
도5는 본원의 일 실시예에 따른 프로그램 경로 탐지부의 동작(140)을 설명하기 위하여 도시한 도면이다.
도5를 참조하면, 프로그램 경로 탐지부(140)는 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 새로운 소스코드 영역이 실행된 것으로 판단될 경우 상기 제1저장부에 시드 추가 명령(54)을 전송할 수 있다.
도5를 참조하면, 대상 소프트웨어에 인가되는 테스트 입력(51)에 대응되는 프로그램 경로 탐지부(140)의 분석 결과 기존의 테스트에서 일반적으로 실행된 소스코드 영역(52)만이 실행된 경우에는 시드 추가 명령을 전송하지 않고, 기존의 테스트에서 실행된 것 보다 확장된 소스코드 영역(53)이 실행된 경우에만 시드 추가 명령(54)이 전송될 수 있다.
본원의 일 실시예에 따르면, 시드 추가 명령(54)은 테스트 입력(51)의 정보가 포함될 수 있다. 다시 말해, 본원의 일 실시예에 따르면, 취약점 검출 장치(100)는 확장된 소스코드 영역(53)을 실행시킨 테스트 입력(51)을 새로운 시드로서 추가할 수 있다.
본원의 일 실시예에 따르면, 소스 코드(Source Code)는 소프트웨어 또는 컴퓨터 프로그램을 프로그래밍 언어로 기술한 글을 의미할 수 있다. 주로 실행 프로그램을 만드는 과정을 입력하는 데 이용되며, 알고리즘을 주고 받는 방식으로도 이용될 수 있다.
본원의 일 실시예에 따르면, 코드 커버리지(Code Coverage)는 소트프웨어 테스트를 진행했을 때 소스 코드 자체가 얼마나 실행되었냐에 관한 수치이다. 달리 말해, 테스트 진행 결과 실행 부분과 미실행 부분을 포함할 수 있으며, 전체 코드 중에 실행 부분이 차지하는 비율을 코드 커버리지로 정의할 수 있다. 결국, 코드 커버리지 값이 특정 테스트 입력에 의해 증가하는 것은 대상 소프트웨어에 포함된 소스 코드가 기존의 테스트에서 보다 많이 실행되었으며, 이에 따라 프로그램 경로가 변화했다는 직접적인 증거가 될 수 있다.
본원의 일 실시예에 따르면, 코드 커버리지를 활용한 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)는 소스 코드에 대한 직접적인 접근이 가능한 White Box 기반의 퍼징 기법과 연계될 수 있다.
본원의 일 실시예에 따르면, 입출력 응답시간의 변화는 테스트 입력(51)에 의해 대상 소프트웨어가 출력값을 제공하는데 걸리는 시간으로 정의할 수 있으며, 소스 코드 내에서 각기 다른 역할을 수행하는 두 함수가 내장되어있다고 가정할 때, 두 함수의 실행 시간에는 차이가 있을 수 있으므로 기존의 테스트 입력에 의해 실행된 바 없는 함수가 실행될 경우 입출력 응답시간은 증가할 수 있다.
본원의 일 실시예에 따르면, 전체 소스 코드 영역에 대하여도 프로그램 경로가 변경될 경우 실행되지 않은 소스 코드 영역이 실행됨에 따라 기존의 테스트 입력에 의한 입출력 응답시간과 차이가 발생할 수 있다.
본원의 일 실시예에 따르면, 출력값의 변화에 관하여는, 정상적인 상황에서 대상 소프트웨어가 제공하는 출력값과 비교하여 상이한 출력 결과가 도출된 경우, 이를 통해 대상 소프트웨어가 다른 프로그램 경로를 탐색한 것으로 추론할 수 있다. 또한, 출력값의 변화를 용이하게 측정하기 위해서 입력(Input) /출력(Output)을 한 쌍(Pair)으로 검토할 수 있다.
본원의 일 실시예에 따르면, 상기 정상적인 상황에서 대상 소프트웨어가 제공하는 출력값은 기존 테스트 입력들에 의해 대상 소프트웨어가 제공한 바 있는 출력값들의 집합일 수 있다.
본원의 일 실시예에 따르면, 기타 시스템 정보의 일 예로, Page Reference Bit를 활용할 수 있다.
본원의 일 실시예에 따르면, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보는 소스 코드에 대한 직접적인 접근이 불가능한 Black Box 기반의 퍼징 기법과 연계되어서도, 프로그램 경로의 변화에 대한 간접적인 증거로 기능할 수 있다.
다만, 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보는 이해를 돕기 위한 예시적 기재일 뿐, 다른 프로그램 경로의 변화를 추론하는데 이용할 수 있는 정보들의 실시예가 본 사상에 적용되는 것을 제한하거나 한정하는 것으로 해석되어서는 안될 것이다.
본원의 일 실시예에 따르면, 시드 추가 명령(54)은 프로그램 경로 탐지부(140)로부터 제1저장부(110)으로 전송되며, 제1저장부(110)에 저장된 현재 시드 정보에 프로그램 경로의 변화를 야기한 테스트 입력(51)을 시드로서 추가하여 이후의 취약점 검출 과정에서 다시 한번 고려될 수 있도록 할 수 있다.
보다 구체적으로, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)는 대상 소프트웨어에 포함된 소스 코드 중 기존의 테스트 입력에 의해서는 실행된 적이 없는 영역이 실행된 경우, 해당 테스트 입력(51)을 취약점을 검출할 수 있는 잠재성이 높은 경우로 간주하여, 새로이 시드로 추가함으로써 소프트웨어 취약점 검출 과정에서 시드를 확장할 수 있다.
결국, 시드가 확장될 수 있기 때문에 사용자가 초기 시드 정보를 적절하지 않게 설정한 경우에도, 취약점 검출이 용이하게 이루어질 수 있으며, 대상 소프트웨어의 소스 코드의 최대한 많은 영역을 고려할 수 있다.
또한, 제2저장부(150)는, 테스트부(130)가 소프트웨어의 응답을 분석하는 과정에서 크래시가 발생한 경우, 해당 테스트 입력에 대한 정보를 로그 형태로 저장할 수 있다.
본원의 일 실시예에 따르면, 크래시는 충돌이나 빌트인 코드 검증의 실패, 잠재적인 메모리 누수 발견 등과 같은 예외 상황을 포함할 수 있다.
본원의 일 실시예에 따르면, 제2저장부(150)는 테스트 입력이 대상 소프트웨어에 입력되고 출력값을 제공하는 과정에서 크래시로 표현되는 비정상적인 상황이 발생될 경우, 이를 대상 소프트웨어의 취약점을 검출할 수 있는 잠재성이 높은 경우로 간주하여, 이후의 심층분석을 위한 로그를 생성할 수 있다.
본원의 일 실시예에 따르면, 상기 로그에는 크래시를 유발한 테스트 입력(51)에 관한 정보 또는 당시 시스템 정보 등이 포함될 수 있다.
도2는 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법에 대한 동작흐름도이다.
도2에 도시된 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은 앞서 설명된 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)에 의하여 수행될 수 있다. 따라서, 이하 생략된 내용이라고 하더라도 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치(100)에 대하여 설명된 내용은 도2에도 동일하게 적용될 수 있다.
도2를 참조하면, 단계 S210에서, 입력생성부(120)는 제1저장부(110)에 저장된 시드풀로부터 하나의 시드를 임의로 선정할 수 있다.
본원의 일 실시예에 따르면, 상기 시드는 대상 소프트웨어의 정상입력 데이터 또는 비정상입력 데이터일 수 있으며, 시드풀은 하나 이상의 시드로 이루어진 시드의 집합일 수 있다.
다음으로, 단계 S220에서, 입력생성부(120)는 상기 선정된 시드에 대해 기 설정된 공격 규칙을 적용하여 테스트 입력을 생성할 수 있다.
본원의 일 실시예에 따르면, 상기 기 설정된 공격 규칙은 무작위의 비트 연산, 경계값(border values)의 적용 및 필드 크기 변경 중 적어도 하나일 수 있다.
본원의 일 실시예에 따르면, 상기 기 설정된 공격규칙은 다양한 경험적 방법(Heuristic Method)에 의해 사용자가 직접 작성할 수 있다.
다음으로, 단계 S230에서, 테스트부(130)는 테스트 입력을 대상 소프트웨어에 입력할 수 있다.
본원의 일 실시예에 따르면, 상기 테스트 입력의 입력으로 대상 소프트웨어는 정상적인 출력값을 출력하거나 충돌이나 빌트인 코드 검증의 실패, 잠재적인 메모리 누수 발견 등과 같이 비정상적으로 반응할 수 있다.
다음으로, 단계 S240에서, 프로그램 경로 탐지부(140)는 테스트 입력에 의해 소프트웨어의 새로운 프로그램 경로가 탐색되었는지 여부를 판단할 수 있다.
본원의 일 실시예에 따르면, 단계 S240에서, 프로그램 경로 탐지부(140)는 선행된 테스트 입력을 대상 소프트웨어에 입력하는 단계에 의해 실행된 바 없는 상기 대상 소프트웨어에 포함된 새로운 소스코드 영역이 실행되었는지 여부를 판단할 수 있다.
본원의 일 실시예에 따르면, 상기 새로운 소스코드 영역이 실행되었는지 여부를 판단하는 것은, 대상 소프트웨어의 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 수행될 수 있다.
다음으로, 단계 S250에서, 제1저장부(110)는 프로그램 경로 탐지부(140)의 분석 결과 새로운 프로그램 경로가 탐색된 것으로 분석된 경우, 테스트 입력을 새로운 시드로 하여 상기 시드풀에 추가할 수 있다.
상술한 설명에서, 단계 S210 내지 S250은 본원의 구현예에 따라서, 추가적인 단계들로 더 분할되거나, 더 적은 단계들로 조합될 수 있다. 또한, 일부 단계는 필요에 따라 생략될 수도 있고, 단계 간의 순서가 변경될 수도 있다.
도3은 본원의 일 실시예에 따른 선정된 시드를 이용하여 테스트 입력을 생성할 수 있는지 여부를 판단하는 단계에 대한 동작흐름도이다.
도3을 참조하면, 단계 S310에서, 입력생성부(120)는 시드를 선정할 수 있다.
다음으로, 단계 S320에서는, 입력생성부(120)에 수신된 시드 정보에 기 설정된 공격 규칙을 적어도 하나 이상 적용한 테스트 입력 후보군을 만들 수 있다.
다음으로, 단계 S330에서, 입력생성부(120)는 상기 테스트 입력 후보군 전부가 대상 소프트웨어에 테스트 입력으로서 입력된 기록이 있는지 판단할 수 있다.
다음으로, 단계 S340에서, 입력생성부(120)는 상기 테스트 입력 후보군 중에 대상 소프트웨어에 테스트 입력으로서 입력된 기록이 없는 테스트 입력 후보가 있는 경우, 이를 테스트 입력으로 확정하여 상기 테스트 입력을 테스트부(130)로 전송할 수 있다.
반대로, 상기 테스트 입력 후보군 전부가 대상 소프트웨어에 테스트 입력으로서 입력된 기록이 있다면, 상기 테스트 입력 후보군 전부는 폐기되며 입력생성부 (120)는 새로운 시드정보를 제1저장부(110)로부터 수신할 수 있다.
상술한 설명에서, 단계 S310 내지 S340은 본원의 구현예에 따라서, 추가적인 단계들로 더 분할되거나, 더 적은 단계들로 조합될 수 있다. 또한, 일부 단계는 필요에 따라 생략될 수도 있고, 단계 간의 순서가 변경될 수도 있다.
도4는 본원의 일 실시예에 따른 크래시를 검출하는 단계에 대한 동작흐름도이다
도4를 참조하면, 본원의 일 실시예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계 후, 크래시(crash)를 검출하는 단계를 더 포함할 수 있다. 상기 크래시를 검출하는 단계는 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계로 인해 대상 소프트웨어에서 크래시가 발생한 경우, 해당 테스트 입력을 로그로 저장하는 것 일 수 있다.
도4를 참조하면, 단계 S410에서, 테스트부(130)는 테스트 입력을 대상 소프트웨어에 입력할 수 있다.
다음으로, 단계 420에서, 제2저장부(150)는 테스트 입력에 의해 대상 소프트웨어에서 크래시가 발생했는가를 판단할 수 있다.
다음으로, 단계 430에서, 제2저장부(150)는 크래시가 발생한 경우, 테스트 입력에 대한 정보를 포함하여 심층분석을 위한 로그로 저장할 수 있다.
본원의 일 실시예에 따르면, 상기 로그에는 크래시를 유발한 테스트 입력에 관한 정보 또는 당시 시스템 정보 등이 포함될 수 있다.
상술한 설명에서, 단계 S410 내지 S430은 본원의 구현예에 따라서, 추가적인 단계들로 더 분할되거나, 더 적은 단계들로 조합될 수 있다. 또한, 일부 단계는 필요에 따라 생략될 수도 있고, 단계 간의 순서가 변경될 수도 있다.
본원의 일 실시 예에 따른 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), .램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
또한, 전술한 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법은 기록 매체에 저장되는 컴퓨터에 의해 실행되는 컴퓨터 프로그램 또는 애플리케이션의 형태로도 구현될 수 있다.
전술한 본원의 설명은 예시를 위한 것이며, 본원이 속하는 기술분야의 통상의 지식을 가진 자는 본원의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 예를 들어, 단일형으로 설명되어 있는 각 구성 요소는 분산되어 실시될 수도 있으며, 마찬가지로 분산된 것으로 설명되어 있는 구성 요소들도 결합된 형태로 실시될 수 있다.
본원의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본원의 범위에 포함되는 것으로 해석되어야 한*.
100: 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치
110: 제1저장부
120: 입력생성부
130: 테스트부
140: 프로그램 경로 탐지부
150: 제 2저장부

Claims (10)

  1. 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법에 있어서,
    시드풀로부터 하나의 시드를 임의로 선정하는 단계;
    상기 선정된 시드에 대해 기 설정된 공격 규칙을 적용하여 테스트 입력을 생성하는 단계;
    상기 테스트 입력을 대상 소프트웨어에 입력하는 단계;
    상기 테스트 입력에 의해 소프트웨어의 새로운 프로그램 경로가 탐색되었는지 여부를 판단하는 단계; 및
    새로운 프로그램 경로가 탐색되었을 경우, 상기 테스트 입력을 상기 시드풀에 추가하는 단계,
    를 포함하는 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  2. 제1항에 있어서,
    상기 선정된 시드를 이용하여 테스트 입력을 생성할 수 있는지 여부를 판단하는 단계,
    를 더 포함하는 것인, 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  3. 삭제
  4. 제 1항에 있어서,
    상기 기 설정된 공격규칙은,
    무작위의 비트 연산, 경계값(border values)의 적용 및 필드 크기 변경 중 적어도 하나인 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  5. 제 1항에 있어서,
    상기 새로운 프로그램 경로가 탐색되었는지 여부를 판단하는 단계는,
    선행된 테스트 입력을 대상 소프트웨어에 입력하는 단계에 의해 실행된 바 없는 상기 대상 소프트웨어에 포함된 새로운 소스코드 영역이 실행되었는지 여부를 판단하는 것인 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  6. 제 5항에 있어서,
    상기 새로운 소스코드 영역이 실행되었는지 여부를 판단하는 것은,
    대상 소프트웨어의 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 수행되는 것을 특징으로 하는 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  7. 제 1항에 있어서,
    상기 테스트 입력을 대상 소프트웨어에 입력하는 단계 후,
    크래시를 검출하는 단계를 더 포함하고,
    상기 크래시를 검출하는 단계는 상기 테스트 입력을 대상 소프트웨어에 입력하는 단계로 인해 대상 소프트웨어에서 크래시가 발생한 경우, 해당 테스트 입력을 로그로 저장하는 것인 프로그램 경로에 기반한 소프트웨어 취약점 검출 방법.
  8. 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치에 있어서,
    시드에 대한 정보를 저장하는 제1저장부;
    상기 제1저장부로부터 시드 정보를 수신하여 상기 시드 정보를 기반으로 새로운 테스트 입력을 생성하는 입력생성부;
    상기 테스트 입력을 대상 소프트웨어에 입력하고 대상 소프트웨어의 응답을 분석하는 테스트부; 및
    상기 테스트 입력에 의해 대상 소프트웨어의 새로운 프로그램 경로가 탐색되었는지를 탐지하는 프로그램 경로 탐지부,
    를 포함하는 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치.
  9. 제8항에 있어서,
    상기 테스트부가 소프트웨어의 응답을 분석하는 과정에서 크래시가 발생한 경우, 해당 테스트 입력에 대한 정보를 로그 형태로 저장하는 제2저장부,
    를 더 포함하는 것을 특징으로 하는 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치.
  10. 제8항에 있어서,
    상기 프로그램 경로 탐지부는,
    상기 테스트 입력에 따른 소프트웨어의 응답에 관하여, 코드 커버리지(Code Coverage) 변화량, 입출력 응답시간의 변화, 출력값의 변화, 메모리 활용량 및 기타 시스템 정보 중 적어도 하나의 정보를 분석함으로써 상기 대상 소프트웨어의 새로운 프로그램 경로가 탐색되었는지를 탐지하는 것을 특징으로 하는 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치.
KR1020180170099A 2018-12-27 2018-12-27 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법 KR102190727B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180170099A KR102190727B1 (ko) 2018-12-27 2018-12-27 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180170099A KR102190727B1 (ko) 2018-12-27 2018-12-27 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20200080541A KR20200080541A (ko) 2020-07-07
KR102190727B1 true KR102190727B1 (ko) 2020-12-14

Family

ID=71603330

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180170099A KR102190727B1 (ko) 2018-12-27 2018-12-27 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법

Country Status (1)

Country Link
KR (1) KR102190727B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102635486B1 (ko) 2023-01-02 2024-02-07 고려대학교 산학협력단 퍼징을 수행하기 위한 방법 및 장치

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102209676B1 (ko) * 2020-07-20 2021-01-28 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법
CN111935121B (zh) * 2020-07-31 2022-04-26 北京天融信网络安全技术有限公司 一种漏洞上报方法及装置
KR102353187B1 (ko) * 2020-08-14 2022-01-20 국방과학연구소 퍼징에서 시드 파일을 스케줄링 하는 방법 및 이를 위한 장치
CN112612698A (zh) * 2020-12-17 2021-04-06 平安普惠企业管理有限公司 应用程序崩溃测试方法及相关产品
KR102304861B1 (ko) * 2021-03-30 2021-09-23 세종대학교산학협력단 하이브리드 퍼징 기반의 펌웨어 취약점 검출 장치 및 방법
KR102323621B1 (ko) 2021-05-03 2021-11-05 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101640479B1 (ko) 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
KR101645019B1 (ko) 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6961852B2 (en) * 2003-06-19 2005-11-01 International Business Machines Corporation System and method for authenticating software using hidden intermediate keys

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101640479B1 (ko) 2015-08-28 2016-07-18 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
WO2017039136A1 (ko) 2015-08-28 2017-03-09 (주)엔키소프트 소스코드기반 소프트웨어 취약점 공격행위 분석시스템
KR101645019B1 (ko) 2016-01-15 2016-08-02 지티원 주식회사 소프트웨어 보안취약점 검출을 위한 규칙명세언어

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102635486B1 (ko) 2023-01-02 2024-02-07 고려대학교 산학협력단 퍼징을 수행하기 위한 방법 및 장치

Also Published As

Publication number Publication date
KR20200080541A (ko) 2020-07-07

Similar Documents

Publication Publication Date Title
KR102190727B1 (ko) 프로그램 경로에 기반한 소프트웨어 취약점 검출 장치 및 방법
US8381192B1 (en) Software testing using taint analysis and execution path alteration
US20080126867A1 (en) Method and system for selective regression testing
TWI528216B (zh) 隨選檢測惡意程式之方法、電子裝置、及使用者介面
US10019581B2 (en) Identifying stored security vulnerabilities in computer software applications
JP5852676B2 (ja) 権限昇格攻撃へのコンピュータ・ソフトウェア・アプリケーションの脆弱性を判定するための方法、コンピュータ・プログラム、およびシステム
US20110321016A1 (en) Injection context based static analysis of computer software applications
US9201769B2 (en) Progressive black-box testing of computer software applications
JP7287480B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
US10936714B1 (en) Systems and methods for preventing code insertion attacks
US20150302191A1 (en) Program execution apparatus and program analysis apparatus
US9842044B2 (en) Commit sensitive tests
KR102273135B1 (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
US11599637B1 (en) Systems and methods for blocking malicious script execution
WO2023067665A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
EP3945441A1 (en) Detecting exploitable paths in application software that uses third-party libraries
DeMott et al. Towards an automatic exploit pipeline
Noman et al. Design and implementation of a security analysis tool that detects and eliminates code caves in windows applications
KR20210156728A (ko) 퍼징 테스트 방법 및 장치
US11824887B1 (en) Eliminating network security blind spots
KR102097672B1 (ko) 프로그램 버그 발생 인자 결정 장치 및 그 방법
CN117034288A (zh) 漏洞检测方法和装置、存储介质及电子设备
WO2023067663A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
CN118246025A (zh) 漏洞检测方法和装置、存储介质及电子设备
GB2529842A (en) Generating coverage metrics for black-box testing

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant