KR102353190B1 - 프로그램을 검사하는 전자 장치 및 이의 검사 방법 - Google Patents

프로그램을 검사하는 전자 장치 및 이의 검사 방법 Download PDF

Info

Publication number
KR102353190B1
KR102353190B1 KR1020200105672A KR20200105672A KR102353190B1 KR 102353190 B1 KR102353190 B1 KR 102353190B1 KR 1020200105672 A KR1020200105672 A KR 1020200105672A KR 20200105672 A KR20200105672 A KR 20200105672A KR 102353190 B1 KR102353190 B1 KR 102353190B1
Authority
KR
South Korea
Prior art keywords
seed
program
block
edge
control flow
Prior art date
Application number
KR1020200105672A
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 KR1020200105672A priority Critical patent/KR102353190B1/ko
Application granted granted Critical
Publication of KR102353190B1 publication Critical patent/KR102353190B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/323Visualisation of programs or trace data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

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

Abstract

다양한 실시예에 따른 전자 장치의 프로그램 검사 방법은, 프로그램에 대한 제어 흐름 그래프 정보를 획득하는 동작; 상기 제어 흐름 그래프 정보에 기반하여, 시드 리스트를 저장할 위치를 결정하는 동작; 및 상기 시드 리스트를 이용하여 상기 프로그램의 퍼징(fuzzing)을 수행하는 동작을 포함할 수 있다. 이를 통해, 프로그램의 보안성을 검토함에 있어서 코드 커버리지를 극대화할 수 있다. 이밖에 다른 실시예들이 가능하다.

Description

프로그램을 검사하는 전자 장치 및 이의 검사 방법{ELECTRONIC DEVICE FOR PROGRAM TEST AND TEST METHOD THEREOF}
본 개시의 다양한 실시예들은, 프로그램을 검사하는 전자 장치 및 이의 검사 방법에 관한 것이다. 보다 구체적으로, 프로그램의 취약점을 점검하기 위한 퍼징을 수행하는 전자 장치 및 방법에 관한 것이다.
최근 소프트웨어 산업 시장은 빠른 속도로 눈부신 발전을 이루고 있다. 그러나 기하급수적으로 발전한 소프트웨어 산업에 비하여, 프로그램(소프트웨어)의 보안성 검증 기술은 크게 발전하지 못한 실정이다. 이에 따라 프로그램의 취약점을 이용해 전자 장치의 동작을 방해하거나 정보를 탈취하는 등의 공격이 지속적으로 증가하고 있으며 프로그램 공격에 의한 피해를 입지 않기 위해 프로그램의 보안을 강화하기 위한 기술에 대한 연구가 요구되고 있다.
이와 관련하여, 자동 또는 반자동으로 프로그램의 취약점을 확인할 수 있는 퍼징(fuzzing) 기술을 이용한 보안성 검증 방법이 검토될 있다. 퍼징 기술은, 비 정상적인 데이터(예: 초기 시드 및 변이된 시드)를 프로그램에 랜덤한 방식으로 입력하고, 프로그램의 에러를 유도함으로써 프로그램의 취약점을 찾고 보안성을 점검할 수 있다. 이러한 퍼징 기술은, 프로그램의 정적, 동적 분석없이, 시드 데이터의 변이를 통해 취약점을 찾는 것으로서 예상치 못한 프로그램의 취약점을 용이하게 발견할 수 있다.
퍼징 기술은 기본적으로 무작위성(예: 시드의 변이 방법의 무작위성, 변이 위치의 무작위성, 시드 선택의 무작위성 등)에 기반하여 프로그램의 보안성을 검증하는 기술로서, 이러한 무작위적인 특징에 의해, 프로그램의 예상치 못한 취약점을 발견할 수 있는 장점이 있다.
그러나, 퍼징 기술의 무작위적인 특징으로 인해 프로그램 보안성을 검증하는데 걸리는 시간이 과도하게 소요될 수 있으며, 비효율적인 작업이 반복되거나 보안성 검증의 범위가 제한될 가능성이 있다. 예컨대, 퍼징 기술은 무작위적으로 시드를 변이하고 무작위적인 위치에 시드를 배치하기 때문에, 프로그램 상의 특정 코드 영역의 보안성 검증이 누락되거나 불필요한 보안성 검증만을 반복할 가능성이 있다.
본 개시의 다양한 실시예들은, 검사하고자 하는 타겟 프로그램에 대한 제어 흐름 그래프 정보를 활용하여 프로그램의 보안성 검증을 수행함에 따라, 보다 넓은 코드 커버리지를 확보할 수 있는 방법 및 장치를 제안하고자 한다.
다양한 실시예에 따른 전자 장치의 프로그램 검사 방법은, 프로그램에 대한 제어 흐름 그래프 정보를 획득하는 동작; 상기 제어 흐름 그래프 정보에 기반하여, 시드 리스트를 저장할 위치를 결정하는 동작; 및 상기 시드 리스트를 이용하여 상기 프로그램의 퍼징(fuzzing)을 수행하는 동작을 포함할 수 있다.
다양한 실시예에 따른 전자 장치는, 메모리; 및 상기 메모리와 전기적으로 연결된 적어도 하나의 프로세서를 포함하고, 상기 적어도 하나의 프로세서는, 검사할 타겟 프로그램의 제어 흐름 그래프 정보를 획득하고, 상기 제어 흐름 그래프 정보에 기반하여, 상기 제어 흐름 그래프 정보에 포함된 복수의 에지들 중 시드 리스트에 대응하는 적어도 하나의 에지를 결정하고, 상기 시드 리스트에 기초하여 상기 타겟 프로그램에 대한 퍼징을 수행하도록 설정될 수 있다.
다양한 실시예에 따른 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적 기록매체는, 검사할 타겟 프로그램의 제어 흐름 그래프 정보를 획득하는 동작; 상기 제어 흐름 그래프 정보에 포함된 복수의 에지들 중 시드 리스트에 대응하는 적어도 하나의 에지를 결정하는 동작; 및 상기 시드 리스트에 기초하여 상기 타겟 프로그램에 대한 퍼징을 수행하는 동작을 수행하도록 설정될 수 있다.
본 개시의 다양한 실시예에 따르면, 프로그램에 대한 제어 흐름 그래프 정보를 활용하여 프로그램에 대한 검사를 수행함에 따라 효율적인 프로그램 검사를 수행할 수 있다. 특히, 프로그램의 코드 영역들 중 탐색할 영역이 남은 코드 영역에 대응하여 시드 리스트를 저장함으로써, 보다 넓은 코드 커버리지를 확보할 수 있으며, 효과적으로 프로그램의 취약성을 점검할 수 있고 이를 통해 개선된 보안성을 제공할 수 있다.
도 1은 본 개시의 일 실시 예에 따른 전자 장치의 개략적인 구성 블록도이다.
도 2는 본 개시의 일 실시예에 따른 프로그램 검사 방법을 개략적으로 도시한 흐름도이다.
도 3은 본 개시의 일 실시예에 따른 프로그램 검사 방법을 도시한 흐름도이다.
도 4는 본 개시의 일 실시예에 따른 프로그램 검사 방법에 관한 알고리즘의 예시적인 의사 코드이다.
도 5는 본 개시의 일 실시예에 따른 프로그램의 부분적인 제어 흐름 그래프 정보를 개략적으로 도시한 도면이다.
도 6은 본 개시의 일 실시예에 따른 프로그램 검사 방법에 관한 효과를 설명하기 위한 그래프이다.
이하, 본 발명의 실시 예를 첨부된 도면을 참조하여 상세하게 설명한다.
실시 예를 설명함에 있어서 본 발명이 속하는 기술 분야에 익히 알려져 있고 본 발명과 직접적으로 관련이 없는 기술 내용에 대해서는 설명을 생략한다. 이는 불필요한 설명을 생략함으로써 본 발명의 요지를 흐리지 않고 더욱 명확히 전달하기 위함이다.
마찬가지 이유로 첨부 도면에 있어서 일부 구성요소는 과장되거나 생략되거나 개략적으로 도시되었다. 또한, 각 구성요소의 크기는 실제 크기를 전적으로 반영하는 것이 아니다. 각 도면에서 동일한 또는 대응하는 구성요소에는 동일한 참조 번호를 부여하였다.
본 발명의 이점 및 특징, 그리고 그것들을 달성하는 방법은 첨부되는 도면과 함께 상세하게 후술되어 있는 실시 예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시 예들에 한정되는 것이 아니라 서로 다른 다양한 형태로 구현될 수 있으며, 단지 본 실시 예들은 본 발명의 개시가 완전하도록 하고, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에게 발명의 범주를 완전하게 알려주기 위해 제공되는 것이며, 본 발명은 청구항의 범주에 의해 정의될 뿐이다. 명세서 전체에 걸쳐 동일 참조 부호는 동일 구성 요소를 지칭한다.
이 때, 처리 흐름도 도면들의 각 블록과 흐름도 도면들의 조합들은 컴퓨터 프로그램 인스트럭션들에 의해 수행될 수 있음을 이해할 수 있을 것이다. 이들 컴퓨터 프로그램 인스트럭션들은 범용 컴퓨터, 특수용 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서에 탑재될 수 있으므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비의 프로세서를 통해 수행되는 그 인스트럭션들이 흐름도 블록(들)에서 설명된 기능들을 수행하는 수단을 생성하게 된다. 이들 컴퓨터 프로그램 인스트럭션들은 특정 방식으로 기능을 구현하기 위해 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 지향할 수 있는 컴퓨터 이용 가능 또는 컴퓨터 판독 가능 메모리에 저장되는 것도 가능하므로, 그 컴퓨터 이용가능 또는 컴퓨터 판독 가능 메모리에 저장된 인스트럭션들은 흐름도 블록(들)에서 설명된 기능을 수행하는 인스트럭션 수단을 내포하는 제조 품목을 생산하는 것도 가능하다. 컴퓨터 프로그램 인스트럭션들은 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에 탑재되는 것도 가능하므로, 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비 상에서 일련의 동작 단계들이 수행되어 컴퓨터로 실행되는 프로세스를 생성해서 컴퓨터 또는 기타 프로그램 가능한 데이터 프로세싱 장비를 수행하는 인스트럭션들은 흐름도 블록(들)에서 설명된 기능들을 실행하기 위한 단계들을 제공하는 것도 가능하다.
또한, 각 블록은 특정된 논리적 기능(들)을 실행하기 위한 하나 이상의 실행 가능한 인스트럭션들을 포함하는 모듈, 세그먼트 또는 코드의 일부를 나타낼 수 있다. 또, 몇 가지 대체 실행 예들에서는 블록들에서 언급된 기능들이 순서를 벗어나서 발생하는 것도 가능함을 주목해야 한다. 예컨대, 잇달아 도시되어 있는 두 개의 블록들은 사실 실질적으로 동시에 수행되는 것도 가능하고 또는 그 블록들이 때때로 해당하는 기능에 따라 역순으로 수행되는 것도 가능하다.
본 개시의 다양한 실시 예에서 사용되는 '~부'라는 용어는 소프트웨어 또는 FPGA또는 ASIC과 같은 하드웨어 구성요소를 의미하며, '~부'는 어떤 역할들을 수행한다. 그렇지만 '~부'는 소프트웨어 또는 하드웨어에 한정되는 의미는 아니다. '~부'는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서 '~부'는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세스들, 함수들, 속성들, 프로시저들, 서브루틴들, 프로그램 코드의 세그먼트들, 드라이버들, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조들, 테이블들, 어레이들, 및 변수들을 포함한다. 구성요소들과 '~부'들 안에서 제공되는 기능은 더 작은 수의 구성요소들 및 '~부'들로 결합되거나 추가적인 구성요소들과 '~부'들로 더 분리될 수 있다. 뿐만 아니라, 구성요소들 및 '~부'들은 디바이스 또는 보안 멀티미디어카드 내의 하나 또는 그 이상의 CPU들을 재생시키도록 구현될 수도 있다.
도 1은 본 개시의 다양한 실시예에 따른 전자 장치의 개략적인 구성 블록도이다.
도 1을 참조하면, 다양한 실시예에 따른 전자 장치(100)는, 메모리(140), 및 적어도 하나의 프로세서(120)를 포함할 수 있다.
전자 장치(100)는, 프로그램의 보안성을 검사하는 장치로서, 예컨대, 퍼징 기술을 이용하여 프로그램의 취약점을 점검하는 퍼저(fuzzer) 장치를 포함할 수 있다.
상기 전자 장치(100)는 네트워크 서버로 구현되는 다수의 컴퓨터 시스템 또는 컴퓨터 소프트웨어를 포함할 수 있으며, 프로그램의 검사와 관련된 다양한 정보를 제공할 수 있다. 예를 들면, 전자 장치(100)는 인트라넷 또는 인터넷 등의 컴퓨터 네트워크를 통해 다른 네트워크 서버와 통신할 수 있는 하위 장치와 연결되어 작업 수행 요청을 접수하고, 그에 대한 작업을 수행하여 수행 결과를 제공하는 컴퓨터 시스템 및 컴퓨터 프로그램을 포함할 수 있다.
이외에도, 전자 장치(100)는, 네트워크 서버 상에서 동작할 수 있는 일련의 응용 프로그램과, 내부에 구축되어 있는 각종 데이터베이스를 포함하는 광의의 개념으로 이해될 수 있다. 예컨대, 전자 장치(100)는, 도스(DOS), 윈도우(Windows), 리눅스(Linux), 유닉스(UNIX), 또는 맥OS(MacOS) 등의 운영 체제에 따라 다양하게 제공되는 네트워크 서버 프로그램을 이용하여 구현될 수 있다.
다양한 실시예에 따른 프로세서(120)는, 전자 장치(100)의 일련의 동작들을 전반적으로 제어할 수 있다. 예를 들면, 상기 프로세서(120)는, 제어 흐름 그래프(control flow graph, CFG) 정보 분석부, 시드 위치 결정부, 퍼징 수행부 중 적어도 하나를 포함할 수 있으며, 또는 단일 프로세서(120)에서 CFG 정보 분석부, 시드 위치 결정부, 퍼징 수행부의 각 구성과 관련된 일련의 동작을 수행할 수도 있다.
다양한 실시예에 따르면, 프로세서(120)(예: CFG 정보 분석부)는, 검사하고자 하는 프로세서(예: 타겟 프로세서)에 대한 제어 흐름 그래프 정보를 획득할 수 있다.
제어 흐름 그래프 정보는, 프로그램의 실행과 관련하여 횡단할 수 있는 모든 경로를 그래프 표기법을 통해 블록들(blocks) 및 에지들(edges)로 나타내는 정보를 포함할 수 있다. 예컨대, 도 5에 개략적으로 도시된 바와 같이 일 실시예에 따른 프로그램의 부분적인 제어 흐름 그래프 정보에는, 원 모양으로 표시된 블록들(예: block1, block2, block3, block4, block5 등) 및 선으로 표시된 에지들(예: edge1, edge2 등)이 포함될 수 있다. 에지들은, 방향성을 가지면서 복수의 블록들을 연결할 수 있다. 예컨대, 도 5에 도시된 제어 흐름 그래프 정보를 참조하면, "edge1"은 "block1"에서 "block3" 방향으로 이들을 연결하고, "edge2"는 "block3"에서 "block5"의 방향으로 이들을 연결할 수 있다.
제어 흐름 그래프 정보는, 프로그램의 다양한 코드로부터 생성할 수 있는 고유 정보 중 하나로서, 컴파일러 분야에서 활용될 수 있다. 상기 제어 흐름 그래프 정보는, 프로그램의 구조적 특징을 나타내는 정보이므로, 본 개시의 다양한 실시예에 따른 전자 장치(100)는, 상기 제어 흐름 그래프 정보를 활용하여 보다 효과적인 퍼징을 수행할 수 있다.
다양한 실시예에 따르면, 프로세서(120)(예: 시드 위치 결정부)는, 제어 흐름 그래프 정보에 기반하여 시드의 리스트를 저장할 위치를 결정할 수 있다. 여기서 시드는, 프로그램의 퍼징 검사를 위하여 프로그램에 입력하는 비정상적 데이터에 해당할 수 있다.
예를 들어, 전자 장치(100)는, 특정 에지(예: 제1에지)에 대응하도록 시드 (예: 제1시드)를 저장하고, 상기 시드(예: 제1시드)를 이용하여 상기 에지(예: 제1에지) 단에서 퍼징을 수행할 수 있다.
프로세서(120)(예: 시드 위치 결정부)는 제어 흐름 그래프 정보에 포함된 복수의 블록들 각각에 대하여 소정의 시드와의 대응 여부를 판단할 수 있다.
예를 들어, 프로세서(120)는, 퍼징 기능 실행에 따라 제1시드가 방문한 블록들과 제1시드가 방문하지 못한 블록들을 구분할 수 있다. 예컨대, 프로세서(120)는, 제어 흐름 그래프 정보를 통해 프로그램에 포함된 복수의 블록들과 에지들, 그리고 이들간의 구조 정보를 확인할 수 있으며, 상기 확인한 복수의 블록들에 대한 특정 시드의 액세스 여부를 확인할 수 있다.
프로세서(120)는, 각각의 블록들에 대한 시드의 대응 여부에 기반하여, 즉, 전술한 각 블록들에 대한 시드의 액세스 여부에 기반하여, 상기 시드를 포함하는 시드 리스트를 저장할 메모리 영역의 위치를 결정할 수 있다.
예컨대, 프로세서(120)는, 특정 에지에 의해 연결되는 두 블록들 중 하나(예: 상위 블록)는 제1시드에 대응하고, 다른 하나(예: 하위 블록)는 상기 제1시드에 대응하지 않는 것으로 판단할 수 있다. 이 경우, 프로세서(120)는 위 두 블록들을 연결하는 에지에 대응하여 상기 제1시드를 포함하는 시드 리스트를 저장하도록 결정할 수 있다.
프로세서(120)는, 퍼징에 이용되는 시드들 각각에 대하여 각 블록들에 방문하였는지(예: 액세스) 여부를 판단하고, 각각의 시드 별로, 시드가 방문한 블록과 방문하지 않은 블록을 연결하는 적어도 하나의 에지의 위치에 대응하도록 상기 시드를 포함하는 시드 리스트를 메모리 영역에 저장할 수 있다.
여기서, 에지에 대응하여 시드를 저장한다는 것은, 전자 장치(100)의 프로그램 검사 방법과 관련하여 각각의 에지에 대응하는 데이터 저장 영역(예: 메모리(140))에 상기 시드를 포함하는 시드 리스트를 저장하는 것을 의미할 수 있다.
다양한 실시예에 따르면, 프로세서(120)(예: 퍼징 수행부)는, 소정의 에지에 대응하는 메모리 영역에 기 저장된 시드를 이용하여, 프로그램에 대한 퍼징을 수행할 수 있다.
예를 들면, 프로세서(120)는 기 저장된 특정 시드 리스트에 대응하는 에지 위치에서, 상기 시드를 변이하여 생성한 변이 시드를 입력함으로써, 프로그램의 퍼징을 수행할 수 있다.
본 개시의 다양한 실시예에 따른 전자 장치(100)는, 시드가 방문하지 않은 블록과 연결되는 에지 영역에 대응하여 상기 시드를 포함하는 시드 리스트를 저장하고, 상기 시드를 변이시켜 생성한 변이 시드를 상기 시드가 방문하지 않은 블록에 방문하도록 시도하는 방식으로 프로그램의 퍼징을 수행할 수 있다. 이를 통해 상기 시드가 방문하지 않은 블록 단으로 상기 시드(또는 상기 시드로부터 변이된 변이 시드)가 방문할 수 있도록 하며, 이와 같은 동작을 반복함에 따라 보다 넓은 코드 커버리지를 확보할 수 있다. 다시 말해, 특정 시드가 방문하지 않은 블록과 관련된 에지에 대응하도록 상기 시드 리스트를 저장하는 방식으로, 시드가 탐색할 영역이 상대적으로 많은 메모리 영역에 시드를 저장하여, 코드 커버리지를 확장할 수 있다.
한편, 다양한 실시예에 따른 프로세서(120)는, 프로그램에 대한 퍼징 수행 시, 다양한 머신러닝 기법을 이용할 수 있다. 예를 들면, 전자 장치(100)는, AFL 퍼저와 유사한 방식으로 유전 알고리즘을 활용하되, 전술한 바와 같이 시드 리스트를 저장할 메모리 영역의 위치를 결정하여 퍼징을 수행할 수 있다. 다른 예를 들면, 전자 장치(100)는, NEUZZ 퍼저와 유사한 방식으로 neural network를 활용하여 시드 변이와 관련된 동작을 수행할 수도 있다. 이외에도 전자 장치(100)는 다양한 방식의 머신러닝 기법을 이용하는 퍼저(fuzzer)로서 구현될 수 있다.
메모리(140)는, 프로세서(120)와 전기적으로 연결되며, 프로세서(120)의 동작과 관련된 명령어들을 저장할 수 있다. 또한, 전자 장치(100)에서 사용되는 다양한 데이터들(예컨대 시드, 변이 시드를 포함하는 시드 리스트 등)을 저장할 수 있다. 메모리(140)는 시드를 변이하는데 사용될 수 있는 다양한 기계 학습 알고리즘과 관련된 데이터를 저장할 수도 있다.
도 2는 본 개시의 일 실시예에 따른 프로그램 검사 방법을 개략적으로 도시한 흐름도이다.
도 2를 참조하면, 다양한 실시예에 따른 프로그램 검사 방법은, 우선 동작 210에서, 타겟 프로그램의 제어 흐름 그래프 정보를 획득하는 동작을 포함할 수 있다.
예를 들면, 전자 장치(100)(예: 프로세서(120))는, 검사하고자 하는 타겟 프로그램에 대한 제어 흐름 그래프 정보를 판단하고, 상기 타겟 프로그램의 제어 흐름 그래프 정보에 포함된 복수의 블록들과 이들을 연결하는 복수의 에지들, 그리고 이들 간의 방향성 정보를 확인할 수 있다.
동작 220에서, 본 개시의 다양한 실시예에 따른 전자 장치(100)는, 상기 제어 흐름 그래프 정보에 기반하여, 타겟 프로그램에 대한 퍼징을 수행할 수 있다.
전자 장치(100)는, 제어 흐름 그래프 정보를 이용하여 비정상적인 입력 데이터인 시드가 탐색할 수 있는 코드 영역이 남아 있는 위치에 대응하여 상기 시드를 포함하는 시드 리스트를 저장하고, 이를 이용하여 퍼징을 수행함으로써, 상대적으로 빠른 시간 내에 효율적이고 넓은 코드 범위에서 보안성을 검증할 수 있다.
도 3은 본 개시의 일 실시예에 따른 프로그램 검사 방법을 도시한 흐름도이다.
도 3을 참조하면, 다양한 실시예에 따른 프로그램 검사 방법은, 도 2를 참조하여 설명한 것과 같이, 동작 210에서, 타겟 프로그램에 대한 제어 흐름 그래프 정보를 획득할 수 있으며, 동작 230에서, 상기 획득한 제어 흐름 그래프 정보에 기초하여 시드 정보를 저장할 위치를 결정할 수 있다.
예를 들어, 동작 230에서, 전자 장치(100)(예: 프로세서(120))는, 제어 흐름 그래프 정보를 구성하는 각 블록들에 대하여 시드가 방문하였는지 여부, 즉 시드가 액세스 되었는지 여부에 관해 확인할 수 있다.
전자 장치(100)는, 상기 시드가 각각의 블록들에 방문하였는지 여부에 기반하여, 상기 시드가 방문하지 않은 블록과 연결된 적어도 하나의 에지에 대응하도록 상기 시드를 포함하는 시드 리스트를 저장할 수 있다.
예컨대, 일 방향으로 연결된 블록들과 에지들의 경우, 특정 시드가 상위 블록에 방문하지 않았다면 이와 연결된 하위 블록에도 방문하지 않았을 수 있다. 전자 장치(100)는 시드가 방문하지 않은 블록들 중 가장 상위의 블록 단에 대응하여 상기 시드를 포함하는 시드 리스트를 저장하여, 상기 상위의 블록단에서 퍼징이 수행될 수 있도록 할 수 있다. 예컨대 전자 장치(100)는 시드가 제1블록(예: 상위 블록)에는 방문하였으나 이와 특정 에지(예: 제1에지)를 통해 연결된 제2블록(예: 하위 블록)에는 방문하지 않은 것으로 판단될 경우, 상기 제1블록과 제2블록을 연결하는 에지(예: 제1에지)에 대응하여 상기 시드를 포함하는 시드 리스트를 저장할 수 있다.
동작 230에서 상기 시드 리스트를 저장할 위치(예: 메모리 영역)를 결정하는 동작은, 각각의 시드마다 개별적으로 수행될 수 있다. 예를 들어, 제1시드의 경우 제1에지에 대응하도록 저장될 수 있으나, 퍼징 과정에서 상기 제1시드로부터 변이되어 생성된 제2시드의 경우 다시 각 블록에의 방문 여부에 기반하여 저장할 위치가 결정되어 제2에지 또는 제3에지에 대응하도록 저장될 수 있다.
한편, 시드는, 퍼징 과정에서 특정 블록을 방문한 경우, 자동적으로 상기 시드와 관련된 기록을, 방문한 블록(또는 이에 대응하는 에지)에 대응하는 메모리 영역에 저장할 수 있다. 예를 들어, 전자 장치(100)는 상기 시드와 관련된 기록이 블록(또는 에지)에 대응하는 메모리 영역에 저장되어 있는지 여부에 따라, 해당 시드의 방문 여부를 확인할 수 있다.
동작 250에서, 전자 장치(100)(예: 프로세서(120))는, 저장된 시드리스트를 이용하여 퍼징을 수행할 수 있다.
전술한 바와 같이, 전자 장치(100)는 동작 230에서 결정된 시드 리스트의 저장 위치에 따라, 예컨대 제1시드가 제1에지에 대응하도록 저장된 경우, 동작 250에서, 제1에지에 대응하도록 저장된 제1시드를 이용하여 상기 제1에지에서 퍼징을 수행할 수 있다.
이 과정에서 제1시드를 변이하여 생성된 제2시드는 상기 제1에지를 방문하거나 방문하지 않을 수 있다. 예컨대 제2시드가 제1에지를 방문할 경우 전자 장치(100)는 제2시드에 대하여 다시 동작 230과 같은 방식으로 제1에지의 하위에 있는 에지(예: 제2에지)에 대응하도록 상기 제2시드를 저장할지 여부를 결정할 수 있다.
도 4는 본 개시의 일 실시예에 따른 프로그램 검사 방법에 관한 알고리즘의 예시적인 의사 코드이다.
도 4를 참조하면, 프로그램 검사 방법에 관한 알고리즘에 도시된 바와 같이, 전자 장치(10))는, 프로그램에 대한 제어 흐름 그래프(control flow graph, CFG) 정보와, 소정의 에지에 방문하지 않은 시드 셋(또는 시드 리스트)(Seed Set with Non-Vist Edge(S)) 정보를 확인할 수 있다.
예를 들어, 전자 장치(100)는, 퍼징이 실행됨에 따라, 제어 흐름 그래프 정보에 포함된 특정 에지1(E1)에 대하여, 상기 에지1(E1)에 방문하지 않은 시드 셋(S[E1]) 정보에 X가 포함되어 있음을 확인할 수 있다. 상기 에지1(E1)에 방문하지 않은 시드 셋(S[E1]) 정보는 도 4의 알고리즘의 의사 코드에서 상세히 기재되어 있지는 않으나, 일련의 동작을 통해 에지1(E1)에 기 저장된 것일 수 있다. 일 예로서, 상기 에지1(E1)에 방문하지 않은 시드 셋(S[E1]) 정보에 X가 포함되어 있는지 여부는, 상기 에지1(E1)에 대응하는 메모리 영역에 기 저장된 시드 리스트에 상기 X가 포함되어 있지 않음을 확인하는 방식으로 판단될 수 있다.
전자 장치(100)는, 에지1(E1)에 시드로서 X가 포함되어 있는 것에 기반하여, 상기 에지1(E1)에서 시드 X를 변이하여 X'를 생성하여 퍼징을 수행할 수 있다.
예를 들어, 새롭게 생성된 변이 시드 X'은 제어 흐름 그래프 정보 상에서 새로운 특정 분기점(branch)에 방문할 수 있다. 예컨대, 상기 변이 시드 X'은 에지1(E1)의 하위에 위치한 블록에 대응할 수 있다.
전자 장치(100)는, 상기 변이된 시드 X'가 제어 흐름 그래프 정보 상의 에지2(E2)에 대하여 방문(액세스) 하였는지 여부를 판단하고, 만약 에지2(E2)에 방문하지 않은 것으로 판단할 경우, 상기 변이된 시드 X'를 에지2(E2)에 방문하지 않은 시드 셋(S[E2]) 정보에 추가하여 저장할 수 있다.
도 5는 본 개시의 일 실시예에 따른 프로그램의 부분적인 제어 흐름 그래프 정보를 개략적으로 도시한 도면이다.
도 5를 참조하여, 본 개시의 다양한 실시예에 따른 프로그램 검사 방법을 설명하면, 전자 장치(100))는, 제1에지(edge1)에 대응하여 Seed1와 Seed2를 포함하는 시드 리스트(또는, 시드 셋 정보)가 저장되어 있음을 확인할 수 있다. 예컨대, 제1에지(edge1)에 저장된 Seed1, Seed2 등의 시드 리스트는, 제1블록(block1)에는 방문하였으나 제3블록(block3)에는 방문하지 못한 시드에 해당할 수 있다.
전자 장치(100)는, 제1에지(edge1)에 대응하도록 메모리 영역에 저장된 시드 리스트 중 적어도 일부를 변이(mutate)시킬 있으며, 변이된 시드를 이용하여 퍼징을 수행할 수 있다.
예를 들어, 전자 장치(100)는 Seed1을 변이하여 생성된 Seed3을 획득할 수 있다. Seed3이 제1에지(edge1)(또는 제3블록(block3))을 방문하게 되면, 전자 장치(100)는 다시 Seed3을 저장할 메모리 영역의 위치를 판단하는 일련의 동작을 수행할 수 있다. 예컨대, Seed3이 제3블록(block3)은 방문하였으나 제5블록(block5)은 방문하지 않은 경우, 전자 장치(100)는 제3블록(block3)과 제5블록(block5)을 연결하는 제2에지(edge2)에 대응하도록 Seed3을 저장할 수 있다. 예컨대, Seed3이 제3블록(block3)뿐만 아니라 제4블록(block4)도 방문한 경우, 전자 장치(100)는 도 5에서 도시되지 않은 제4블록(block4)과 연결된 하위 블록에 대한 Seed3의 방문 여부를 판단하여 Seed3의 저장 위치를 결정할 수 있다.
도 6은 본 개시의 일 실시예에 따른 프로그램 검사 방법에 관한 효과를 설명하기 위한 그래프이다.
구체적으로, 도 6은 본 개시의 프로그램 검사 방법의 효과를 확인하기 위하여 간단한 토이 프로그램을 작성하고, 그에 대한 프로그램 검사를 수행한 결과를 도시한 그래프이다.
도 6에서 실선으로 도시된 그래프 ①은, 본 개시의 일 실시예에 따라 제어 흐름 그래프 정보를 이용하여 프로그램 검사를 수행한 경우의 시간에 따른 코드 커버리지 증가량 그래프이다. 또한, 도 6에서 점선으로 도시된 그래프 ②는, 비교 예로서, 제어 흐름 그래프 정보를 고려하지 않고 프로그램 검사를 수행한 경우의 시간에 따른 코드 커버리지 증가량 그래프이다.
상기 그래프 ①과 그래프 ②는 각각 전자 장치에서 동일한 머신러닝 기법(예: NEUZZ)을 적용하여 프로그램 검사를 수행하되 제어 흐름 그래프 정보를 이용하였는지 여부만을 달리한 결과에 해당할 수 있다.
도 6에 도시된 바와 같이, 본 개시의 일 실시예에 따라 제어 흐름 그래프 정보를 이용하여 프로그램 검사를 수행한 경우, 제어 흐름 그래프 정보를 이용하지 않은 경우보다, 상대적으로 빠른 시간 내에 임계 코드 커버리지 범위까지 프로그램 검사를 완료할 수 있음을 확인할 수 있다.
본 개시의 실시예에 따라 프로그램 검사를 진행할 경우, 보다 효율적인 검사 시간 및 넓은 범위의 코드 커버리지에 대한 검사를 수행할 수 있다.
한편, 본 명세서와 도면에는 본 발명의 바람직한 실시 예에 대하여 개시하였으며, 비록 특정 용어들이 사용되었으나, 이는 단지 본 발명의 기술 내용을 쉽게 설명하고 발명의 이해를 돕기 위한 일반적인 의미에서 사용된 것이지, 본 발명의 범위를 한정하고자 하는 것은 아니다. 여기에 개시된 실시 예 외에도 본 발명의 기술적 사상에 바탕을 둔 다른 변형 예들이 실시 가능하다는 것은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 자명한 것이다.

Claims (11)

  1. 전자 장치의 프로그램 검사 방법에 있어서,
    프로그램에 대한 제어 흐름 그래프 정보를 획득하는 동작;
    상기 제어 흐름 그래프 정보에 기반하여, 시드 리스트를 저장할 위치를 결정하는 동작; 및
    상기 시드 리스트를 이용하여 상기 프로그램의 퍼징(fuzzing)을 수행하는 동작을 포함하는, 프로그램 검사 방법.
  2. 제 1 항에 있어서,
    상기 프로그램의 퍼징을 수행하는 동작은,
    상기 시드 리스트에 기반하여 생성된 변이 시드를 이용하여 상기 시드 리스트가 저장된 메모리 영역에 대응하는 상기 프로그램의 위치에서 퍼징을 수행하는 동작을 포함하는, 프로그램 검사 방법.
  3. 제 1 항에 있어서,
    상기 시드 리스트를 저장할 위치를 결정하는 동작은,
    상기 제어 흐름 그래프 정보에 포함된 복수의 블록들 각각에 대하여 상기 시드 리스트에 포함된 시드의 대응 여부를 판단하는 동작; 및
    상기 블록들에 대한 상기 시드의 대응 여부에 기반하여, 상기 시드 리스트를 저장할 위치를 결정하는 동작을 포함하는, 프로그램 검사 방법.
  4. 제 3 항에 있어서,
    상기 시드의 대응 여부를 판단하는 동작은,
    상기 각각의 블록들에 대한 상기 시드의 액세스 여부에 기반하여 결정되는, 프로그램 검사 방법.
  5. 제 3 항에 있어서,
    상기 시드 리스트를 저장할 위치를 결정하는 동작은,
    상기 제어 흐름 그래프 정보에 포함된 복수의 에지들 중, 상기 시드에 대응하는 블록과 상기 시드에 대응하지 않는 블록을 연결하는 적어도 하나의 에지에 대응하도록, 상기 시드 리스트를 저장하도록 결정하는 동작을 포함하는, 프로그램 검사 방법.
  6. 제 3 항에 있어서,
    상기 시드 리스트를 저장할 위치를 결정하는 동작은,
    상기 제어 흐름 그래프 정보에 포함된 복수의 블록들 및 에지들이, 제1블록; 제2블록; 및 상기 제1블록과 상기 제2블록을 연결하는 제1에지;를 포함하고, 상기 제1블록은 제1시드에 대응하며, 상기 제2블록은 상기 제1시드에 대응하지 않는 것으로 판단할 경우, 상기 제1에지에 대응하도록 상기 제1시드를 포함하는 시드 리스트를 저장하도록 결정하는 동작을 포함하는, 프로그램 검사 방법.
  7. 제 6 항에 있어서,
    상기 시드 리스트를 저장할 위치를 결정하는 동작은,
    상기 제어 흐름 그래프 정보에 포함되는 복수의 블록들 및 에지들이 제3블록; 및 상기 제2블록과 상기 제3블록을 연결하는 제2에지;를 더 포함하고, 상기 제2블록은 상기 제1시드에 기초하여 변이되어 생성된 제2시드에 대응하고, 상기 제3블록은 상기 제2시드에 대응하지 않는 것으로 판단할 경우, 상기 제2에지에 대응하도록 상기 제2시드를 포함하는 시드 리스트를 저장하도록 결정하는 동작을 더 포함하는, 프로그램 검사 방법.
  8. 제 7 항에 있어서,
    상기 프로그램의 퍼징을 수행하는 동작은,
    상기 제1에지에서, 상기 제1시드를 이용하여, 상기 프로그램의 퍼징을 수행하는 동작; 및
    상기 제2에지에서, 상기 제2시드를 이용하여, 상기 프로그램의 퍼징을 수행하는 동작을 포함하는, 프로그램 검사 방법.
  9. 전자 장치에 있어서,
    메모리; 및
    상기 메모리와 전기적으로 연결된 적어도 하나의 프로세서를 포함하고,
    상기 적어도 하나의 프로세서는,
    검사할 타겟 프로그램의 제어 흐름 그래프 정보를 획득하고,
    상기 제어 흐름 그래프 정보에 기반하여, 상기 제어 흐름 그래프 정보에 포함된 복수의 에지들 중 시드 리스트에 대응하는 적어도 하나의 에지를 결정하고,
    상기 시드 리스트에 기초하여 상기 타겟 프로그램에 대한 퍼징을 수행하도록 설정된, 전자 장치.
  10. 제 9 항에 있어서,
    상기 적어도 하나의 프로세서는,
    상기 시드 리스트에 포함된 시드가 방문한 블록과 연결된 에지들 중 상기 시드가 방문하지 않은 블록과 연결된 적어도 하나의 에지를 확인하고,
    상기 적어도 하나의 에지에 대응하도록 상기 시드 리스트를 저장하도록 설정된, 전자 장치.
  11. 검사할 타겟 프로그램의 제어 흐름 그래프 정보를 획득하는 동작;
    상기 제어 흐름 그래프 정보에 포함된 복수의 에지들 중 시드 리스트에 대응하는 적어도 하나의 에지를 결정하는 동작; 및
    상기 시드 리스트에 기초하여 상기 타겟 프로그램에 대한 퍼징을 수행하는 동작을 수행하도록 설정된, 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적 기록매체.
KR1020200105672A 2020-08-21 2020-08-21 프로그램을 검사하는 전자 장치 및 이의 검사 방법 KR102353190B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020200105672A KR102353190B1 (ko) 2020-08-21 2020-08-21 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200105672A KR102353190B1 (ko) 2020-08-21 2020-08-21 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Publications (1)

Publication Number Publication Date
KR102353190B1 true KR102353190B1 (ko) 2022-01-20

Family

ID=80052760

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200105672A KR102353190B1 (ko) 2020-08-21 2020-08-21 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Country Status (1)

Country Link
KR (1) KR102353190B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102483489B1 (ko) * 2022-03-25 2022-12-30 연세대학교 산학협력단 동적 자원 분배가 가능한 하이브리드 퍼징 장치

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016218997A (ja) * 2015-05-15 2016-12-22 富士通株式会社 未知のバイナリプログラムに対する有効な入力の決定
KR101767481B1 (ko) * 2016-04-07 2017-08-11 코드마인드(주) 프로그램 분석 장치 및 프로그램 분석 제공 방법
KR20190051301A (ko) * 2017-11-06 2019-05-15 한국전자통신연구원 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법
KR102035246B1 (ko) * 2019-05-24 2019-10-22 세종대학교산학협력단 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법
US10698804B1 (en) * 2019-01-28 2020-06-30 Fujitsu Limited Identifying inputs for automated computer-program testing operations

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2016218997A (ja) * 2015-05-15 2016-12-22 富士通株式会社 未知のバイナリプログラムに対する有効な入力の決定
KR101767481B1 (ko) * 2016-04-07 2017-08-11 코드마인드(주) 프로그램 분석 장치 및 프로그램 분석 제공 방법
KR20190051301A (ko) * 2017-11-06 2019-05-15 한국전자통신연구원 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법
US10698804B1 (en) * 2019-01-28 2020-06-30 Fujitsu Limited Identifying inputs for automated computer-program testing operations
KR102035246B1 (ko) * 2019-05-24 2019-10-22 세종대학교산학협력단 백워드 패스파인딩을 이용한 소프트웨어 취약점 분석 장치 및 방법

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102483489B1 (ko) * 2022-03-25 2022-12-30 연세대학교 산학협력단 동적 자원 분배가 가능한 하이브리드 퍼징 장치

Similar Documents

Publication Publication Date Title
US8539449B2 (en) Device and method for inspecting software for vulnerabilities
CN110191019A (zh) 车辆can总线的测试方法、装置、计算机设备和存储介质
US20080126867A1 (en) Method and system for selective regression testing
JP7058302B2 (ja) アプリケーション・プログラムのための脆弱性により起動されるハイブリッド・テストシステム
EP3264274B1 (en) Input discovery for unknown program binaries
KR102353190B1 (ko) 프로그램을 검사하는 전자 장치 및 이의 검사 방법
US11080179B2 (en) Device, system, and method for automatically detecting and repairing a bug in a computer program using a genetic algorithm
US20100031239A1 (en) Systems, Methods, and Media for Testing Software Patches
Lin et al. GREBE: Unveiling exploitation potential for Linux kernel bugs
CN112506564B (zh) 一种用于建立控制流图的方法、系统和介质
US9552284B2 (en) Determining valid inputs for an unknown binary program
CN113158197A (zh) 一种基于主动iast的sql注入漏洞检测方法、系统
CN114389978B (zh) 一种基于静态污点分析的网络协议侧信道检测方法和系统
Sargsyan et al. Directed fuzzing based on program dynamic instrumentation
WO2019077738A1 (ja) データ検証装置、データ検証方法及びデータ検証プログラム
Tsai et al. Adaptive fault detection for testing tenant applications in multi-tenancy saas systems
CN113032241B (zh) 一种测试数据处理方法、装置及存储介质
CN106933750B (zh) 用于多级缓存中数据及状态的验证方法及装置
CN111752839A (zh) 测试用例、规则生成、芯片测试方法、装置、设备及介质
CN114817918A (zh) 一种反混淆方法、系统和应用
US10255166B2 (en) Determination of valid input sequences for an unknown binary program
US9697910B1 (en) Multi-match error detection in content addressable memory testing
US20070265794A1 (en) Semiconductor device test apparatus and method
US10387598B1 (en) Verifying results in simulation through simulation add-on to support visualization of selected memory contents in real time
CN111108483B (zh) 用于识别原始程序中的弱点的方法、设备和测试程序

Legal Events

Date Code Title Description
GRNT Written decision to grant