KR102075345B1 - 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법 - Google Patents

퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법 Download PDF

Info

Publication number
KR102075345B1
KR102075345B1 KR1020170146783A KR20170146783A KR102075345B1 KR 102075345 B1 KR102075345 B1 KR 102075345B1 KR 1020170146783 A KR1020170146783 A KR 1020170146783A KR 20170146783 A KR20170146783 A KR 20170146783A KR 102075345 B1 KR102075345 B1 KR 102075345B1
Authority
KR
South Korea
Prior art keywords
information
fuzzing
execution
cpu
purging
Prior art date
Application number
KR1020170146783A
Other languages
English (en)
Other versions
KR20190051301A (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 KR1020170146783A priority Critical patent/KR102075345B1/ko
Publication of KR20190051301A publication Critical patent/KR20190051301A/ko
Application granted granted Critical
Publication of KR102075345B1 publication Critical patent/KR102075345B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N7/00Computing arrangements based on specific mathematical models
    • G06N7/02Computing arrangements based on specific mathematical models using fuzzy logic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Molecular Biology (AREA)
  • Computational Mathematics (AREA)
  • Automation & Control Theory (AREA)
  • Biomedical Technology (AREA)
  • Fuzzy Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Algebra (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

퍼징용 실행 흐름 정보 추출 장치 및 방법이 개시된다. 본 발명에 따른 퍼징용 실행 흐름 정보 추출 장치는, 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출하는 인스트럭션 추출부, 상기 CPU 인스트럭션 정보로부터, CPU가 실행한 실행 코드 정보를 생성하는 실행 코드 생성부, 상기 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, 기본 블록 정보를 생성하는 블록 정보 생성부, 그리고 생성된 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 퍼징용 실행 흐름 정보 생성부를 포함한다.

Description

퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법{FUZZING SYSTEM, EXECUTION FLOW INFORMATION EXTRACTING APPARATUS AND METHOD FOR FUZZING}
본 발명은 퍼징용 실행 흐름 정보를 추출하는 기술에 관한 것으로, 특히 CPU 인스트럭션 트레이스 하드웨어를 이용하여, 퍼징에 사용할 실행 흐름 정보를 추출하는 기술에 관한 것이다.
퍼징(fuzzing)은 대상 소프트웨어에 무작위의 다양한 데이터를 반복적으로 입력하여 소프트웨어의 오동작을 유발함으로써 소프트웨어의 보안 취약점을 찾아내는 기법으로, 다수의 어플리케이션에 대한 테스트에 유용하게 사용된다. 퍼징 기법은 보안 취약점 탐지 과정에 대해 단순화 및 자동화 할 수 있으며, 효율성 및 속도를 증진시킬 수 있다.
퍼징의 종류로는 더미 퍼징 방법과 트레이스(Trace) 기반 퍼징 방법이 있다. 더미 퍼징 방법은 대상 소프트웨어 소스코드나 바이너리 및 실행 정보에 대한 정보 없이, 무작위 데이터를 입력하여 취약점을 찾아내는 퍼징 방법이고, 트레이스 기반 퍼징 방법은 가상 머신, 소스코드 및 바이너리 등의 침습(Instrumentation)을 통하여 대상 프로그램의 실행 흐름이나 입력 데이터의 확산 흐름을 트레이스하고, 트레이스 정보를 이용하여 입력 데이터를 변조한 관심 영역의 코드를 생성하며, 이를 실행하여 오작동을 유발함으로써 취약점을 찾아내는 방법이다.
더미 퍼징은 무작위 입력에 기반한 방법으로, 입력 데이터 값의 범위를 굉장히 크게 설정해야 대상 소프트웨어의 모든 코드 영역이 실행되도록 할 수 있다. 입력 데이터 값의 범위가 작은 경우, 동일 코드 영역만 실행되어 취약점 검색 효율성이 떨어진다.
반면 트레이스 기반 퍼징은 프로그램이 실행할 때 실행 흐름과 입력의 확산흐름을 트레이스하여, 대상 코드 영역이 실행하도록 하는 입력 데이터를 찾으므로, 적은 수의 입력 데이터로도 넓은 범위의 코드를 실행할 수 있으며, 취약점 탐색 효율성이 높다.
트레이스 기반 퍼징은 기존의 입력 데이터를 이용하여 프로그램을 실행하고 트레이스 하여, 추출된 트레이스 정보(프로그램 실행 흐름, 입력 데이터 확산흐름)를 이용하여 관심 코드 영역을 실행할 수 있는 입력 데이터를 생성한다.
새로 생성한 입력 데이터에 의해 대상 코드가 실행되었을 때 프로그램의 오작동이 유발된 경우, 해당 대상 코드에 취약점이 존재할 가능성이 높은 것으로 판단할 수 있다.
입력 데이터의 확산흐름을 이용하여 취약점이 존재하거나 존재할 가능성이 높은 코드영역과 관련된 새로운 입력데이터를 찾는 방법은 Dowser와 BuzzFuzz 논문에서 제시된 바 있다. 입력 데이터 확산흐름과 프로그램 실행 흐름 정보를 이용하여, Symbolic Execution을 통해 관심 코드영역을 실행할 수 있는 입력 데이터를 생산하는 방법(White-box Fuzzing)은 SAGE 논문에서 대표적으로 제시되었다.
또한, 최근 취약점 분석에 많이 사용되고 있는 퍼저(Fuzzer)인 AFL (American Fuzzy Lop) 퍼저는 프로그램 실행 흐름을 이용하여 유전 알고리즘 (Genetic Algorithm)을 통해 새로운 코드 영역 실행을 위한 입력을 생성하며, AFL 퍼저는 퍼징 효율성이 매우 높다.
그러나, 트레이스에 의해 프로그램 실행 속도가 과도하게 느려지거나 트레이스가 시스템 자원을 많이 사용하는 경우, 퍼징을 통한 취약점 탐지 속도가 저하되고, 원래의 프로그램 실행 결과와 다른 실행 결과가 유발될 수 있다. 따라서, 트레이스 기반 퍼징 시, 대상 프로그램의 실행에 대한 간섭을 최소화할 필요가 있다.
또한, 침습을 이용한 트레이스의 경우, 대상 프로그램의 성능이 심각하게 저하되어 퍼징 속도나 저하될 수 있으며, 침습으로 인하여 프로그램 파일과 메모리 이미지에 변형이 생김으로 인하여, 대상 프로그램이 퍼징 중임을 탐지하고 정상 실행 흐름을 감추어 트레이스 정보를 정상적으로 추출하기 힘든 문제가 있다.
따라서, 가상머신의 사용이나 프로그램에 대한 침습 없이, 프로그램 실행 정보를 생성하여 퍼징용 실행 흐름 정보를 생성하여, 대상 프로그램의 실행 속도 저하 문제 및 퍼징 속도 저하 문제를 해결할 수 있는 기술의 개발이 필요하다.
한국 등록 특허 제10-1525398호, 2015년 06월 09일 공고(명칭: 네트워크 응용 프로그램 퍼징 시스템 및 방법)
본 발명의 목적은 가상 머신의 사용이나 대상 프로그램에 대한 침습 없이 프로그램 실행 흐름 정보를 생성하는 것이다.
또한, 본 발명의 목적은 기존의 트레이스 기반 퍼징 방법의 한계를 극복하여, 프로그램 성능 및 퍼징 속도의 저하 문제를 해결하는 것이다.
또한, 본 발명의 목적은 대상 프로그램이 퍼징 중임을 탐지할 수 없도록 하는 것이다.
또한, 본 발명의 목적은 대상 프로그램의 소스 코드 및 바이너리 파일에 대한 변형 없이, 퍼징을 위한 실행 흐름 정보를 추출할 수 있도록 하는 것이다.
상기한 목적을 달성하기 위한 본 발명에 따른 퍼징용 실행 흐름 정보 추출 장치는 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출하는 인스트럭션 추출부, 상기 CPU 인스트럭션 정보로부터, CPU가 실행한 실행 코드 정보를 생성하는 실행 코드 생성부, 상기 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, 기본 블록 정보를 생성하는 블록 정보 생성부, 그리고 생성된 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 퍼징용 실행 흐름 정보 생성부를 포함한다.
이때, 상기 인스트럭션 추출부는, CPU 인스트럭션 트레이스 하드웨어를 이용하여, 상기 퍼징 대상 프로그램이 실행한 상기 CPU 인스트럭션 정보를 추출할 수 있다.
이때, 상기 인스트럭션 추출부는, 추출된 상기 CPU 인스트럭션 정보를 CPU 칩의 내부 메모리, 퍼징용 실행 흐름 정보 추출 장치의 메인 메모리 및 외부의 저장 장치 중 적어도 어느 하나에 저장할 수 있다.
이때, 상기 실행 코드 생성부는, 상기 CPU 칩의 내부 메모리 및 상기 메인 메모리 중 적어도 어느 하나로부터 상기 CPU 인스트럭션 정보를 읽어와, 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 실행 코드 생성부는, 추출된 상기 CPU 인스트럭션 정보를 릴레이 하드웨어로부터 읽어와, 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 실행 코드 생성부는, 상기 CPU 인스트럭션 정보에 상기 인스트럭션 주소가 포함되어 있는 경우, 상기 CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 중 적어도 어느 하나를 기반으로 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 실행 코드 생성부는, 상기 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, 상기 CPU 인스트럭션 정보로부터 상기 분기 명령의 종류, 상기 분기 명령이 발생한 주소 및 분기 대상 주소 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출하고, 추출된 상기 분기 명령 정보를 기반으로, 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 실행 코드 생성부는, 상기 CPU 인스트럭션 정보에 상기 분기 명령이 발생한 주소가 포함되어 있지 않은 경우, 상기 퍼징 대상 프로그램의 바이너리 파일 및 상기 퍼징 대상 프로그램의 코드가 로딩된 코드 메모리 중 적어도 어느 하나로부터 상기 분기 명령이 발생한 주소를 추출할 수 있다.
이때, 상기 퍼징용 실행 흐름 정보 생성부는, 상기 CPU가 실행한 상기 퍼징 대상 프로그램의 상기 기본 블록 및 상기 기본 블록간 실행 순서 중 적어도 어느 하나를 포함하는 상기 퍼징용 실행 흐름 정보를 생성할 수 있다.
이때, 상기 블록 정보 생성부는, 상기 퍼징 대상 프로그램 및 상기 퍼징 대상 프로그램 실행 중의 메모리 중 적어도 어느 하나로부터, 기본 블록 리스트 및 기본 블록 간 플로우 그래프 중 적어도 어느 하나를 포함하는 상기 기본 블록 정보를 생성할 수 있다.
이때, 생성된 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여, 퍼징용 데이터를 생성하는 퍼징용 데이터 생성부를 더 포함할 수 있다.
또한, 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치에 의해 수행되는 퍼징용 실행 흐름 정보 추출 방법은 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출하는 단계, 상기 CPU 인스트럭션 정보로부터, CPU가 실행한 실행 코드 정보를 생성하는 단계, 상기 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, 기본 블록 정보를 생성하는 단계, 그리고 생성된 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 단계를 포함한다.
이때, 상기 CPU 인스트럭션 정보를 추출하는 단계는, CPU 인스트럭션 트레이스 하드웨어를 이용하여, 상기 퍼징 대상 프로그램이 실행한 상기 CPU 인스트럭션 정보를 추출하는 단계, 그리고 추출된 상기 CPU 인스트럭션 정보를 CPU 칩의 내부 메모리, 퍼징용 실행 흐름 정보 추출 장치의 메인 메모리 및 외부의 저장 장치 중 적어도 어느 하나에 저장하는 단계를 포함할 수 있다.
이때, 상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는, 추출된 상기 CPU 인스트럭션 정보를 릴레이 하드웨어로부터 읽어와, 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는, 상기 CPU 인스트럭션 정보에 상기 인스트럭션 주소가 포함되어 있는 경우, 상기 CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 중 적어도 어느 하나를 기반으로 상기 실행 코드 정보를 생성할 수 있다.
이때, 상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는, 상기 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, 상기 CPU 인스트럭션 정보로부터 상기 분기 명령의 종류, 상기 분기 명령이 발생한 주소 및 분기 대상 주소 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출하는 단계, 그리고 추출된 상기 분기 명령 정보를 기반으로, 상기 실행 코드 정보를 생성하는 단계를 포함할 수 있다.
이때, 상기 퍼징용 실행 흐름 정보를 생성하는 단계는, 상기 CPU가 실행한 상기 퍼징 대상 프로그램의 상기 기본 블록 및 상기 기본 블록간 실행 순서 중 적어도 어느 하나를 포함하는 상기 퍼징용 실행 흐름 정보를 생성할 수 있다.
이때, 상기 기본 블록 정보를 생성하는 단계는, 상기 퍼징 대상 프로그램 및 상기 퍼징 대상 프로그램 실행 중의 메모리 중 적어도 어느 하나로부터, 기본 블록 리스트 및 기본 블록 간 플로우 그래프 중 적어도 어느 하나를 포함하는 상기 기본 블록 정보를 생성할 수 있다.
이때, 생성된 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여, 퍼징용 데이터를 생성하는 단계를 더 포함할 수 있다.
또한, 본 발명의 일 실시예에 따른 퍼징 수행 시스템은, 퍼징 대상 프로그램의 실행 코드 정보 및 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 퍼징용 실행 흐름 정보 추출 장치, 상기 퍼징용 실행 흐름 정보 추출 장치로부터 수신한 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여 퍼징용 데이터를 생성하는 퍼징 데이터 생성 장치, 그리고 상기 퍼징 대상 프로그램의 상기 퍼징 데이터를 실행하고, 상기 퍼징 데이터의 실행에 따른 상기 퍼징 대상 프로그램의 취약점 정보를 출력하는 퍼징 수행 단말기를 포함한다.
본 발명에 따르면, 가상머신의 사용이나 대상 프로그램에 대한 침습 없이 프로그램 실행 흐름 정보를 생성할 수 있다.
또한 본 발명에 따르면, 기존의 트레이스 기반 퍼징 방법의 한계를 극복하여, 프로그램 성능 및 퍼징 속도의 저하 문제를 해결할 수 있다.
또한 본 발명에 따르면, 대상 프로그램이 퍼징 중임을 탐지할 수 없도록 한다.
또한 본 발명에 따르면, 대상 프로그램의 소스 코드 및 바이너리 파일에 대한 변형 없이, 퍼징을 위한 실행 흐름 정보를 추출할 수 있다.
도 1은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치가 적용되는 퍼징 수행 시스템을 개략적으로 나타낸 도면이다.
도 2는 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 구성을 나타낸 블록도이다.
도 3은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 방법을 설명하기 위한 순서도이다.
도 4는 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 동작 과정을 개략적으로 나타낸 도면이다.
도 5는 본 발명의 일실시예에 따른 인스트럭션 추출부가 CPU 인스트럭션 정보를 추출하는 과정을 설명하기 위한 도면이다.
도 6은 본 발명의 일실시예에 따른 메모리에 저장된 CPU 인스트럭션 정보를 이용한 실행 코드 정보 추출 과정을 나타낸 도면이다.
도 7은 본 발명의 일실시예에 따른 릴레이 하드웨어를 이용한 실행 코드 정보 추출 과정을 나타낸 도면이다.
도 8은 본 발명의 일실시예에 따른 실행 코드 생성부가 실행 코드 정보를 추출하는 과정을 설명하기 위한 도면이다.
도 9는 본 발명의 일실시예에 따른 기본 블록 정보를 생성하는 과정을 나타낸 예시도이다.
도 10은 본 발명의 일실시예에 따른 기본 블록간 플로우 그래프를 나타낸 예시도이다.
도 11은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보를 생성하는 과정을 설명하기 위한 도면이다.
도 12는 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 블록도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시 예들을 도면에 예시하고 상세하게 설명하고자 한다.
그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가진 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 본 발명을 설명함에 있어 전체적인 이해를 용이하게 하기 위하여 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
도 1은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치가 적용되는 퍼징 수행 시스템을 개략적으로 나타낸 도면이다.
도 1에 도시한 바와 같이, 본 발명의 일실시예에 따른 퍼징 수행 시스템은 퍼징용 실행 흐름 정보 추출 장치(100), 퍼징 데이터 생성 장치(200) 및 퍼징 수행 단말기(300)를 포함할 수 있다.
퍼징용 실행 흐름 정보 추출 장치(100)는 퍼징 대상 프로그램의 실행 코드 정보 및 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성한다.
이때, 퍼징용 실행 흐름 정보 추출 장치(100)는 CPU에 구현된 인스트럭션 트레이스 하드웨어를 제어하여, CPU 인스트럭션 정보를 추출한다. 그리고 퍼징용 실행 흐름 정보 추출 장치(100)는 CPU 인스트럭션 정보로부터 CPU 코어가 실행한 코드 정보인 실행 코드 정보를 추출한다.
또한, 퍼징용 실행 흐름 정보 추출 장치(100)는 퍼징 대상 프로그램의 파일 또는 메모리로부터 기본 블록 정보를 추출하고, 실행 코드 정보와 기본 블록 정보를 기반으로 퍼징용 실행 흐름 정보를 생성한다.
그리고 퍼징 데이터 생성 장치(200)는 퍼징용 실행 흐름 정보 추출 장치(100)로부터 퍼징용 실행 흐름 정보를 입력받고, 입력받은 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 적용하여 퍼징용 데이터를 생성한다.
마지막으로, 퍼징 수행 단말기(300)는 퍼징용 데이터를 실행하고, 퍼징 데이터의 실행에 따른 퍼징 대상 프로그램의 취약점 정보를 출력한다.
설명의 편의를 위하여, 퍼징 수행 시스템이 퍼징용 실행 흐름 정보 추출 장치(100), 퍼징 데이터 생성 장치(200) 및 퍼징 수행 단말기(300)를 포함하는 것으로 설명하였으나 이에 한정하지 않고, 퍼징용 실행 흐름 정보 추출 장치(100)가 퍼징 데이터를 생성하는 기능 및 퍼징을 수행하는 기능 중 적어도 어느 하나의 기능을 추가적으로 수행하는 형태로 구현될 수 있다.
즉, 퍼징용 실행 흐름 정보 추출 장치(100)가 생성한 퍼징용 실행 흐름 정보를 퍼징 데이터 생성 장치(200)에 입력하여 새로운 퍼징 데이터를 생성하는 것으로 도시하였으나, 이에 한정하지 않고 퍼징용 실행 흐름 정보 추출 장치(100)는 생성한 퍼징용 실행 흐름 정보를 트레이스 기반 퍼징 알고리즘에 입력하여 퍼징 데이터를 생성할 수 있다.
또한, 퍼징 수행 시스템은 퍼징 수행 단말기(300)가 퍼징 데이터를 이용하여 퍼징을 수행하는 것으로 도시하였으나 이에 한정하지 않고, 퍼징용 실행 흐름 정보 추출 장치(100)가 직접 퍼징을 수행하거나, 퍼징 데이터를 생성한 퍼징 데이터 생성 장치(200)가 퍼징을 수행하는 형태로 구현될 수 있다.
최근, 동영상이나 게임 등의 고성능 응용 프로그램의 사용 환경이 데스크톱 PC에서 모바일 기기로 이동함에 따라, 모바일에서도 복잡한 응용 프로그램 개발을 위해 CPU의 성능 향상과 함께 향상된 디버깅 기능이 필요해졌다. 전통적으로 제공되는 브레이크 포인트(Breakpoint) 및 와치 포인트(Watchpoint)와 같은 JTAG(Joint Test Action Group) 기능 외에도, 응용 프로그램의 각 모듈간 데이터 송수신 흐름을 파악하기 위해 응용 프로그램이 실행하는 명령 흐름을 실시간으로 보여줄 필요가 있다. 이를 위해 ARM은 코어사이트(Coresight)라는 하드웨어 IP(Intellectual Property)를 제공한다.
특히, ETM(Embedded Trace Macrocell) 및 PTM (Program Trace Macrocell)은 각 CPU 코어에서 실행되는 인스트럭션을 추출하여 TPIU(Trace Port Interface Unit)나 CPU 칩 내부 메모리 또는 모바일 장치의 메인 메모리에 저장하고, 저장된 데이터는 모바일 장치 내부 및 외부에서 접근되어 사용될 수 있다.
Samsung Exynos 및 Qualcomm Snapdragon과 같은 대부분의 상용 모바일 AP에는 각 코어에 ETM이 장착되어 있으며, ETM을 제어하여, 각각의 개별 코어에 대해 인스트럭션을 추출할지 여부를 제어 할 수 있다.
x86계열의 인텔과 AMD도 CPU 인스트럭션을 트레이스 할 수 있는 하드웨어를 CPU 칩내에 탑재하고 있다. x86계열의 CPU에서는 LBR(Last Branch Record), BTS(Branch Trace Store), AET(Architecture Event Trace), PT(Intel® Processor Trace) 등이 CPU 인스트럭션을 트레이스할 수 있다.
ARM 계열의 ETM/PTM과 x86계열의 LBR/BTS/AET/PT는 출력하는 정보의 세세한 측면에서 차이는 있으나 기본적으로 CPU가 실행한 인스트럭션에 관련한 데이터를 출력한다는 하드웨어라는 측면에서 같다. 또한 Freescale 등 아키텍쳐가 다른 CPU 칩에도 CPU 인스트럭션을 트레이스하는 하드웨어가 장착되어 있는 경우가 많다.
따라서, 본 발명의 일실시예에 따른 퍼징 수행 시스템에서는, 애플리케이션 프로세서(AP)의 코어에 연결된 CPU 인스트럭션 트레이스 하드웨어(ARM Coresight ETM, PTM, Intel LBR/BTS/AET/PT, Freescale PM 등)를 제어하여, 코어가 실행하는 명령어인 CPU 인스트럭션 정보를 추출하고 검사할 수 있다.
이하에서는 도 2를 통하여 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 구성에 대하여 더욱 상세하게 설명한다.
도 2는 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 구성을 나타낸 블록도이다.
도 2에 도시한 바와 같이, 퍼징용 실행 흐름 정보 추출 장치(100)는 인스트럭션 추출부(110), 실행 코드 생성부(120), 블록 정보 생성부(130), 퍼징용 실행 흐름 정보 생성부(140) 및 퍼징용 데이터 생성부(150)를 포함할 수 있다.
먼저, 인스트럭션 추출부(110)는 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출한다.
이때, 인스트럭션 추출부(110)는 CPU 인스트럭션 트레이스 하드웨어를 이용하여, 퍼징 대상 프로그램을 실행하는 코어의 CPU 인스트럭션 정보를 추출할 수 있다. 그리고 인스트럭션 추출부(110)는 추출된 CPU 인스트럭션 정보를 CPU 칩의 내부 메모리, 메인 메모리 및 외부의 저장 장치 중 적어도 어느 하나에 저장할 수 있다.
즉, 인스트럭션 추출부(110)는 CPU 인스트럭션 트레이스 하드웨어를 제어하여, 개별 CPU 코어에 연결된 트레이스 하드웨어가 각각의 CPU 코어가 실행한 인스트럭션 정보를 추출하여 메모리나 외부의 저장 장치로 전송하도록 한다.
다음으로 실행 코드 생성부(120)는 CPU 인스트럭션 정보, 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, CPU가 실행한 실행 코드 정보를 생성한다. 여기서, 실행 코드 정보는 CPU가 실행한 코드 주소를 포함할 수 있다.
이때, 실행 코드 생성부(120)는 CPU 칩의 내부 메모리 및 메인 메모리 중 적어도 어느 하나로부터 CPU 인스트럭션 정보를 읽어와 실행 코드 정보를 생성할 수 있다. 또한, 실행 코드 생성부(120)는 추출된 CPU 인스트럭션 정보를 릴레이 하드웨어로부터 읽어와, 실행 코드 정보를 생성할 수 있다.
실행 코드 생성부(120)는 CPU 인스트럭션 정보에 인스트럭션 주소가 포함되어 있는 경우, CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 중 적어도 어느 하나를 기반으로 실행 코드 정보를 생성할 수 있다. 예를 들어, ARM PTM과 같이 인스트럭션 주소가 출력되는 경우, 인스트럭션 정보는 코드 위치로 바로 매핑될 수 있다.
실행 코드 생성부(120)는 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, CPU 인스트럭션 정보로부터 분기 명령의 종류, 분기 명령이 발생한 주소 및 분기 대상 주소 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출할 수 있다. 그리고 실행 코드 생성부(120)는 추출한 분기 명령 정보를 기반으로 실행 코드 정보를 생성할 수 있다.
예를 들어, ARM Coresight ETM이나 인텔 LBR, BTS 등의 하드웨어는 인스트럭션 중 분기 명령(분기 인스트럭션)인 Jump, Call, Return에 대한 정보만 출력한다. 이러한 경우, 실행 코드 생성부(120)는 분기 명령으로부터 실행한 인스트럭션 코드 위치를 추출해야 하므로, 분기 명령의 시작 주소(Source Address) 및 끝 주소(Destination Address)를 필요로 한다.
분기 명령과 분기 명령 사이(제1 분기명령 Destination Address ~ 제2 분기명령 Source Address)에서는 CPU가 순차적으로 실행한 것으로 간주할 수 있으며, 이러한 특성으로부터 실행 코드 정보를 추출할 수 있다.
인텔이나 AMD 등 x86 계열 CPU에서 트레이스 하드웨어가 생성한 CPU 인스트럭션 정보는 분기 명령의 시작 주소(Source Address)와 끝 주소(Destination Address)를 포함하고 있다. 반면, ARM 계열 CPU는 추출된 인스트럭션 정보에 분기명령에 대한 시작 주소(Source Address)가 없거나 시작 주소(Source Address)와 끝 주소(Destination Address) 둘 다 없을 수 있다.
이러한 경우, 실행 코드 생성부(120)는 퍼징 대상 프로그램의 바이너리 파일이나 퍼징 대상 프로그램의 코드가 로딩된 코드 메모리로부터 추출한 CPU 인스트럭션 정보를 이용하여, 분기 명령(또는 인스트럭션)의 시작 주소(Source Address)와 끝 주소(Destination Address)를 유추하는 과정을 수행할 수 있다.
그리고 블록 정보 생성부(130)는 퍼징 대상 프로그램의 파일 및 퍼징 대상 프로그램 실행 중의 메모리 중 적어도 어느 하나로부터 기본 블록 정보를 추출한다.
여기서, 기본 블록 정보는 기본 블록 리스트를 포함하거나, 기본 블록 리스트 및 기본 블록 간 플로우 그래프(Flow Graph)를 포함할 수 있으며, 퍼징용 데이터 생성부(150)의 알고리즘에 따라 기본 블록 간 플로우 그래프의 포함 여부가 결정될 수 있다.
다음으로 퍼징용 실행 흐름 정보 생성부(140)는 실행 코드 정보 및 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성할 수 있다. 여기서, 퍼징용 실행 흐름 정보는 CPU가 실행한 퍼징 대상 프로그램의 기본 블록 및 기본 블록간 실행 순서 중 적어도 어느 하나를 포함할 수 있다.
퍼징용 실행 흐름 정보는 퍼징 대상 프로그램을 구성하고 있는 기본 블록(Basic Block)을 기본 단위로 한다. 여기서, 기본 블록은 엔트리 이외에는 들어오는 분기가 없고, 출구 이외에는 나가는 분기가 없는 프로그램의 작은 코드 영역을 의미하며, 기본 블록 내에서는 코드가 순차적으로 실행된다.
마지막으로 퍼징용 데이터 생성부(150)는 입력 데이터와 입력 데이터에 상응하는 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여, 퍼징용 데이터를 생성한다.
퍼징용 데이터 생성부(150)는 기존의 입력 데이터와 해당 입력 데이터로 퍼징 대상 프로그램이 실행한 코드를 나타내는 실행 흐름 정보를 이용하여, 오작동이 발생될 수 있는 코드 영역을 실행하도록 새로운 입력 데이터인 퍼징용 데이터를 생성할 수 있다.
여기서, 퍼징 알고리즘은 AFL(American Fuzzy Lop) 도구가 사용하는 유전 알고리즘(Genetic Algorithm)일 수 있으며, 퍼징 알고리즘의 종류는 이에 한정되지 않는다. 또한, 퍼징 알고리즘은 퍼징용 실행 흐름 정보 추출 장치(100) 내부에 구비되거나, 외부의 퍼징 데이터 생성 장치(200)에 포함되어 있을 수 있다.
이하에서는 도 3 및 도 4를 통하여 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치에 의해 수행되는 퍼징용 실행 흐름 정보 추출 방법에 대하여 더욱 상세하게 설명한다.
도 3은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 방법을 설명하기 위한 순서도이다.
먼저, 퍼징용 실행 흐름 정보 추출 장치(100)는 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출한다(S310).
도 4는 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 동작 과정을 개략적으로 나타낸 도면이다.
도 4에 도시한 바와 같이, 퍼징용 실행 흐름 정보 추출 장치의 인스트럭션 추출부(410)는 개별 CPU 코어(10)에 연결된 트레이스 하드웨어를 제어하여, 퍼징 대상 프로그램을 실행하는 CPU 코어의 CPU 인스트럭션 정보를 추출할 수 있다.
다시 도 3에 대하여 설명하면, 퍼징용 실행 흐름 정보 추출 장치(100)는 CPU의 실행 코드 정보를 추출한다(S320).
퍼징용 실행 흐름 정보 추출 장치(100)는 CPU가 실행한 실행 코드 정보를 생성한다. 여기서, 실행 코드 정보는 CPU가 실행한 코드 주소를 포함할 수 있으며, CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 등을 기반으로 실행 코드 정보를 생성할 수 있다.
도 4와 같이, 퍼징용 실행 흐름 정보 추출 장치의 실행 코드 생성부(420)는 인스트럭션 추출부(410)가 추출한 CPU 인스트럭션 정보로부터 실행 코드 정보를 추출할 수 있다.
이때, 실행 코드 생성부(420)는 CPU 칩의 내부 메모리 또는 퍼징용 실행 흐름 정보 추출 장치의 메인 메모리 중 적어도 어느 하나로부터 CPU 인스트럭션 정보를 읽어와 실행 코드 정보를 추출하거나, 릴레이 하드웨어로부터 CPU 인스트러션 정보를 읽어와 실행 코드 정보를 추출할 수 있다.
또한, 실행 코드 생성부(420)는 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, CPU 인스트럭션 정보로부터 분기 명령의 종류, 분기 명령이 발생한 주소(Source Address) 및 분기 대상 주소(Destination Address) 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출할 수 있으며, 추출된 분기 명령 정보를 기반으로 실행 코드 정보를 생성할 수 있다.
반면, 실행 코드 생성부(420)는 CPU 인스트럭션 정보에 분기 명령 정보를 구성할 정보가 충분하지 않은 경우, 도 4에 도시한 바와 같이, CPU 인스트럭션 정보나 퍼징 대상 프로그램 파일(20) 및 퍼징 대상 프로그램이 실행 중인 메모리(30)로부터 분기 명령 정보를 추출할 수 있다.
그리고 도 3에서 퍼징용 실행 흐름 정보 추출 장치(100)는 기본 블록 정보를 추출한다(S330).
도 4에서 블록 정보 생성부(430)는 퍼징 대상 프로그램 파일이나 메모리(30)로부터, 기본 블록 리스트를 포함하는 기본 블록 정보를 추출할 수 있다. 기본 블록 정보는 퍼징용 데이터 생성부(450)의 퍼징 알고리즘에 따라 기본 블록간 플로우 그래프를 더 포함할 수 있다.
다음으로 퍼징용 실행 흐름 정보 추출 장치(100)는 실행 코드 정보 및 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성한다(S340).
도 4의 퍼징용 실행 흐름 정보 생성부(440)는 CPU 코어(10)가 실행한 기본 블록 및 기본 블록간 실행 순서 중 적어도 어느 하나를 포함하는 실행 흐름 정보를 생성한다.
마지막으로, 퍼징용 실행 흐름 정보 추출 장치(100)는 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 적용하여, 퍼징용 데이터를 생성한다(S350).
도 4에서 퍼징용 데이터 생성부(450)는 기존 입력 데이터와 퍼징용 실행 흐름 정보 생성부(440)로부터 입력받은 퍼징용 실행 흐름 정보를 이용하여, 오작동을 일으킬 수 있는 코드 영역을 실행하도록 하는 새로운 입력 데이터인 퍼징용 데이터를 생성한다. 여기서, 퍼징용 실행 흐름 정보는 기존 입력 데이터의 실행에 따른 실행 코드 및 블록 정보를 기반으로 생성된 것이다.
그리고 퍼징용 데이터 생성부(450)는 AFL(American Fuzzy Lop) 도구가 사용하는 유전 알고리즘(Genetic Algorithm)에 퍼징용 실행 흐름 정보를 적용하여 퍼징용 데이터를 생성할 수 있으며, 퍼징용 데이터 생성부(450)가 퍼징용 데이터 생성에 사용하는 알고리즘의 종류는 이에 한정되지 않는다.
설명의 편의를 위하여, 퍼징용 데이터 생성부(450)가 시스템의 내부에 위치하는 것으로 설명하였으나 이에 한정하지 않고, 퍼징용 데이터 생성부(450)는 퍼징용 실행 흐름 정보 추출 장치의 외부에 별도의 장치 또는 모듈 형태로 구현될 수 있다.
이하에서는 도 5 내지 도 8을 통하여 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 각각의 모듈이 수행하는 동작에 대하여 더욱 상세하게 설명한다.
도 5는 본 발명의 일실시예에 따른 인스트럭션 추출부가 CPU 인스트럭션 정보를 추출하는 과정을 설명하기 위한 도면이다.
도 5에 도시한 바와 같이, 인스트럭션 추출부(410)는 각각의 CPU 코어(10)에 연결된 트레이스 하드웨어(Trace HW)(50)로 트레이스 제어 데이터를 전송한다. 여기서, 트레이스의 대상이되는 CPU 코어(10)는 하나 이상일 수 있다.
여기서, CPU 코어(10)는 퍼징 대상 프로그램 코드를 실행하고 있으며, 트레이스 제어 데이터를 수신한 트레이스 하드웨어(50)는 연결된 CPU 코어(10)가 실행하는 CPU 인스트럭션 정보를 실행 코드 생성부(420)로 전송한다.
트레이스 하드웨어(50)는 ARM 아키텍처 CPU에서의 Coresight ETM(Embedded Trace Macrocell)이나 Coresight PTM(Program Trace Macrocell) 등일 수 있으며, x86 계열의 CPU에서는 LBR(Last Branch Record), BTS(Branch Trace Store), AET(Architecture Event Trace), PT(Intel® Processor Trace) 등일 수 있다.
트레이스 하드웨어(50)의 종류는 이에 한정되지 않으며, CPU 코어(50)가 실행한 인스트럭션에 관련된 정보를 추출하는 기능을 가진 모든 하드웨어를 의미할 수 있다.
인스트럭션 추출부(410)의 트레이스 제어 데이터는 트레이스 하드웨어(50)가 연결된 버스를 통하여 트레이스 하드웨어(50)로 전달될 수 있으며, 트레이스 제어 데이터를 수신한 트레이스 하드웨어(50)는 CPU 코어(10)가 실행한 CPU 인스트럭션 정보를 실행 코드 생성부(420)로 전송할 수 있다.
여기서, 트레이스 하드웨어(50)가 추출한 CPU 인스트럭션 정보는 CPU 코어(10)가 실행한 인스트럭션 자체이거나, 퍼징 대상 프로그램의 바이너리 파일로부터 인스트럭션을 유추할 수 있는 정보일 수 있다.
도 6은 본 발명의 일실시예에 따른 메모리에 저장된 CPU 인스트럭션 정보를 이용한 실행 코드 정보 추출 과정을 나타낸 도면이고, 도 7은 본 발명의 일실시예에 따른 릴레이 하드웨어를 이용한 실행 코드 정보 추출 과정을 나타낸 도면이다.
도 6 및 도 7과 같이, 인스트럭션 추출부(410)는 트레이스 하드웨어(50)가 추출한 CPU 인스트럭션 정보를 전송할 위치를 지정할 수 있다. 인스트럭션 추출부(410)는 도 6과 같이 CPU 칩 내부 메모리나 시스템 메모리 중 적어도 어느 하나의 메모리(60)의 위치를 지정하거나, 도 7과 같이 시스템 외부 하드웨어로 CPU 인스트럭션 정보를 전달할 수 있는 릴레이 하드웨어(70)의 위치를 지정할 수 있다.
실행 코드 생성부(420)는 도 6과 같이 CPU 칩 내부 메모리 및 시스템 메모리 중 적어도 어느 하나의 메모리(60)로부터 CPU 인스트럭션 정보를 읽어오거나, 도 7과 같이 릴레이 하드웨어(70)를 통하여 CPU 인스트럭션 정보가 추출된 후 곧바로 CPU 인스트럭션 정보를 읽어올 수 있다.
도 8은 본 발명의 일실시예에 따른 실행 코드 생성부가 실행 코드 정보를 추출하는 과정을 설명하기 위한 도면이다.
도 8에 도시한 바와 같이, 실행 코드 생성부(420)는 연속적으로 실행한 코드 블록의 시작 주소(Source Address) 및 끝 주소(Destination Address)를 실행 코드 정보로 출력할 수 있다.
도 8에는 실행 코드 정보가 시작 주소 및 끝 주소로 구성되는 것으로 도시하였으나 이에 한정하지 않고, 실행 코드 정보는 시작 주소 및 코드 블록의 크기로 구성될 수 있으며, CPU 코어가 실행한 인스트럭션이 속한 코드 블록에 대한 위치를 표현할 수 있는 다양한 자료구조로 설계 변경하여 구현될 수 있다.
CPU 인스트럭션 정보가 인스트럭션 주소를 포함하는 경우, 실행 코드 생성부(420)는 CPU 인스트럭션 정보만으로 실행 코드 정보를 생성할 수 있다.
반면, 인스트럭션 정보가 분기 명령(Call, Jump, Return)을 포함하는 경우, 실행 코드 생성부(420)는 분기 명령으로부터 실행 코드 정보를 추출할 수 있다. 이때, 실행 코드 생성부(420)는 CPU 인스트럭션 정보에서 분기 명령이 발생한 주소(Source Address)와 분기할 대상이 되는 주소(Destination Address)를 기본적으로 추출하며, 분기 명령의 종류를 더 추출할 수도 있다.
CPU 인스트럭션 정보가 분기 명령에 대한 정보(Source Address, Destination Address)를 모두 포함하는 경우, 실행 코드 생성부(420)는 CPU 인스트럭션 정보로부터 분기 명령 정보를 추출하여 실행 코드 정보를 생성할 수 있다. 그러나, CPU 인스트럭션 정보에 분기 명령에 대한 정보(Source Address, Destination Address)가 부족한 경우, 실행 코드 생성부(420)는 CPU 인스트럭션 정보, 퍼징 대상 프로그램 파일 및 퍼징 대상 프로그램이 실행 중인 메모리 등으로부터 분기 명령에 대한 정보를 추출할 수 있다.
이하에서는 도 9 및 도 10을 통하여 본 발명의 일실시예에 따른 기본 블록에 대하여 더욱 상세하게 설명한다.
도 9는 본 발명의 일실시예에 따른 기본 블록 정보를 생성하는 과정을 나타낸 예시도이고, 도 10은 본 발명의 일실시예에 따른 기본 블록간 플로우 그래프를 나타낸 예시도이다.
도 9 및 도 10에 도시한 바와 같이, 블록 정보 생성부(430)는 퍼징 대상 프로그램 파일이나 퍼징 대상 프로그램의 메모리를 입력으로 하여, 기본 블록 정보를 생성할 수 있다. 기본 블록 정보는 기본 블록 리스트를 포함하며, 퍼징 알고리즘에 따라 기본 블록간 플로우 그래프(Flow Graph)를 더 포함할 수 있다.
블록 정보 생성부(430)는 퍼징 대상 프로그램의 코드를 스캔하여 리더(Leader)를 식별한다. 첫 번째 명령어는 리더이며, 조건 또는 무조건 goto/jump 명령어의 대상은 리더이고, 조건 또는 무조건 goto/jump 명령어를 즉시 따르는 명령어는 리더일 수 있다. 리더가 식별되면, 리더에서 다음 리더 바로 전까지의 인스트럭션(명령)들은 시작 리더의 기본 블록이다.
도 9와 같이 코드에서 리더를 식별하여 기본 블록을 생성할 수 있으며, 도 10은 식별된 기본 블럭간 실행 흐름을 구성한 플로우 그래프이다.
퍼징 대상 프로그램 파일과 메모리로부터 기본 블록을 추출하는 알고리즘은 종래 기술의 기본 블록 추출 알고리즘들을 의미할 수 있으며, 기본 블록 추출 알고리즘의 종류는 다양하게 설계되어 구현될 수 있다.
이하에서는 도 11을 통하여 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치의 퍼징용 실행 흐름 정보 생성부가 퍼지용 실행 흐름 정보를 생성하는 과정에 대하여 더욱 상세하게 설명한다.
도 11은 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보를 생성하는 과정을 설명하기 위한 도면이다.
도 11에 도시한 바와 같이, 퍼징용 실행 흐름 정보 생성부(440)는 실행 코드 생성부(420) 및 블록 정보 생성부(430)로부터 각각 실행 코드 정보 및 기본 블록 정보를 입력받는다. 그리고 퍼징용 실행 흐름 정보 생성부(440)는 퍼징 대상 프로그램이 어떠한 기본 블록을 실행하였는지, 기본 블록의 실행 순서가 무엇인지를 나타내는 실행 흐름 정보를 생성할 수 있다.
실행 코드 정보는 퍼징 대상 프로그램이 실제로 실행한 코드를 의미하며, 퍼징용 실행 흐름 정보 생성부(440)는 기본 블록 정보에서 퍼징 대상 프로그램이 실제로 실행한 기본 블록 리스트 및 기본 블록간 플로우 그래프를 필터링한다. 즉, 퍼징용 실행 흐름 정보 생성부(440)는 퍼징 대상 프로그램의 기본 블록들 중에서 퍼징 입력에 의해 퍼징 대상 프로그램이 실행한 기본 블록과, 해당 블록들 간 실행 순서를 의미하는 실행 흐름 정보를 생성할 수 있다.
실행 흐름 정보는 사용되는 자료 구조에 따라, 도 11과 같이 기본 블록간 실행 흐름이 그래프 형태로 표현되거나, 리스트 형태로 표현될 수 있으며, 실행 흐름 정보를 표현하는 자료 구조의 종류는 이에 한정되지 않는다.
생성된 실행 흐름 정보는 트레이스 기반 퍼징 알고리즘의 입력으로 사용될 수 있다. 즉, 생성된 실행 흐름 정보는 퍼징용 데이터 생성부에 입력되며, 퍼징용 데이터 생성부는 기존 입력값과 기존 입력값에 대응되는 실행 흐름 정보를 기반으로, 오작동을 유발하고 취약점을 나타낼 수 있는 새로운 기본 블록과 실행 순서로 퍼징 대상 프로그램을 구동하도록 하는 퍼징용 데이터를 생성할 수 있다.
이와 같이, 본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치는 종래의 퍼징 기술의 문제점으로 지적되었던, 퍼징 대상 프로그램의 실행 속도 및 퍼징 속도의 저하 문제를 해결하고, 퍼징 대상 프로그램의 퍼징 여부가 탐지되지 않도록 할 수 있다.
퍼징용 실행 흐름 정보 추출 장치는 가상 머신이나 퍼징 대상 프로그램에 대한 침습(Instrumentation)이 없으므로, 퍼징 대상 프로그램의 성능 저하 및 퍼징 속도의 저하기 발생하지 않는다.
또한, 실제 기기에서 수행 가능하므로, 가상 머신 탐지 방법을 통하여 퍼징 여부를 탐지할 수 없다. 그리고 침습이 없으므로, 프로그램 크기 변경, 실행 속도 변경이나 침습에 의한 특징에 기반한 퍼징 여부를 탐지할 수 없다.
본 발명의 일실시예에 따른 퍼징용 실행 흐름 정보 추출 장치는 퍼징 대상 프로그램의 소스 코드를 필요로 하지 않으며, 바이너리 파일에 대한 변경도 불필요하다.
도 12는 본 발명의 일실시예에 따른 컴퓨터 시스템을 나타낸 블록도이다.
도 12을 참조하면, 본 발명의 실시예는 컴퓨터로 읽을 수 있는 기록매체와 같은 컴퓨터 시스템(1200)에서 구현될 수 있다. 도 12에 도시된 바와 같이, 컴퓨터 시스템(1200)은 버스(1220)를 통하여 서로 통신하는 하나 이상의 프로세서(1210), 메모리(1230), 사용자 인터페이스 입력 장치(1240), 사용자 인터페이스 출력 장치(1250) 및 스토리지(1260)를 포함할 수 있다. 또한, 컴퓨터 시스템(1200)은 네트워크(1280)에 연결되는 네트워크 인터페이스(1270)를 더 포함할 수 있다. 프로세서(1210)는 중앙 처리 장치 또는 메모리(1230)나 스토리지(1260)에 저장된 프로세싱 인스트럭션들을 실행하는 반도체 장치일 수 있다. 메모리(1230) 및 스토리지(1260)는 다양한 형태의 휘발성 또는 비휘발성 저장 매체일 수 있다. 예를 들어, 메모리는 ROM(1231)이나 RAM(1232)을 포함할 수 있다.
따라서, 본 발명의 실시예는 컴퓨터로 구현된 방법이나 컴퓨터에서 실행 가능한 명령어들이 기록된 비일시적인 컴퓨터에서 읽을 수 있는 매체로 구현될 수 있다. 컴퓨터에서 읽을 수 있는 명령어들이 프로세서에 의해서 수행될 때, 컴퓨터에서 읽을 수 있는 명령어들은 본 발명의 적어도 한 가지 태양에 따른 방법을 수행할 수 있다.
이상에서와 같이 본 발명에 따른 퍼징용 실행 흐름 정보 추출 장치 및 방법은 상기한 바와 같이 설명된 실시예들의 구성과 방법이 한정되게 적용될 수 있는 것이 아니라, 상기 실시예들은 다양한 변형이 이루어질 수 있도록 각 실시예들의 전부 또는 일부가 선택적으로 조합되어 구성될 수도 있다.
10: CPU 코어 20: 퍼징 대상 프로그램 파일
30: 퍼징 대상 프로그램이 실행 중인 메모리
50: 트레이스 하드웨어 60: 메모리
70: 릴레이 하드웨어
100: 퍼징용 실행 흐름 정보 추출 장치
110, 410: 인스트럭션 추출부 120, 420: 실행 코드 생성부
130, 430: 블록 정보 생성부
140, 440: 퍼징용 실행 흐름 정보 생성부
150, 450: 퍼징용 데이터 생성부 200: 퍼징 데이터 생성 장치
300: 퍼징 수행 단말기 1200: 컴퓨터 시스템
1210: 프로세서 1220: 버스
1230: 메모리 1231: 롬
1232: 램 1240: 사용자 인터페이스 입력 장치
1250: 사용자 인터페이스 출력 장치
1260: 스토리지 1270: 네트워크 인터페이스
1280: 네트워크

Claims (20)

  1. 퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출하는 인스트럭션 추출부,
    상기 CPU 인스트럭션 정보로부터, CPU가 실행한 실행 코드 정보를 생성하는 실행 코드 생성부,
    상기 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, 기본 블록 정보를 생성하는 블록 정보 생성부, 그리고
    생성된 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 퍼징용 실행 흐름 정보 생성부를 포함하는 퍼징용 실행 흐름 정보 추출 장치.
  2. 제1항에 있어서,
    상기 인스트럭션 추출부는,
    CPU 인스트럭션 정보 트레이스 하드웨어를 이용하여, 상기 퍼징 대상 프로그램이 실행한 상기 CPU 인스트럭션 정보를 추출하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  3. 제2항에 있어서,
    상기 인스트럭션 추출부는,
    추출된 상기 CPU 인스트럭션 정보를 CPU 칩의 내부 메모리, 퍼징용 실행 흐름 정보 추출 장치의 메인 메모리 및 외부의 저장 장치 중 적어도 어느 하나에 저장하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  4. 제3항에 있어서,
    상기 실행 코드 생성부는,
    상기 CPU 칩의 내부 메모리 및 상기 메인 메모리 중 적어도 어느 하나로부터 상기 CPU 인스트럭션 정보를 읽어와, 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  5. 제2항에 있어서,
    상기 실행 코드 생성부는,
    추출된 상기 CPU 인스트럭션 정보를 릴레이 하드웨어로부터 읽어와, 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  6. 제1항에 있어서,
    상기 실행 코드 생성부는,
    상기 CPU 인스트럭션 정보에 인스트럭션 주소가 포함되어 있는 경우, 상기 CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 중 적어도 어느 하나를 기반으로 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  7. 제1항에 있어서,
    상기 실행 코드 생성부는,
    상기 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, 상기 CPU 인스트럭션 정보로부터 상기 분기 명령의 종류, 상기 분기 명령이 발생한 주소 및 분기 대상 주소 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출하고, 추출된 상기 분기 명령 정보를 기반으로, 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  8. 제7항에 있어서,
    상기 실행 코드 생성부는,
    상기 CPU 인스트럭션 정보에 상기 분기 명령이 발생한 주소가 포함되어 있지 않은 경우, 상기 퍼징 대상 프로그램의 바이너리 파일 및 상기 퍼징 대상 프로그램의 코드가 로딩된 코드 메모리 중 적어도 어느 하나로부터 상기 분기 명령이 발생한 주소를 추출하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  9. 제7항에 있어서,
    상기 퍼징용 실행 흐름 정보 생성부는,
    상기 CPU가 실행한 상기 퍼징 대상 프로그램의 상기 기본 블록 및 상기 기본 블록간 실행 순서 중 적어도 어느 하나를 포함하는 상기 퍼징용 실행 흐름 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  10. 제1항에 있어서,
    상기 블록 정보 생성부는,
    상기 퍼징 대상 프로그램 및 상기 퍼징 대상 프로그램 실행 중의 메모리 중 적어도 어느 하나로부터, 기본 블록 리스트 및 기본 블록 간 플로우 그래프 중 적어도 어느 하나를 포함하는 상기 기본 블록 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  11. 제1항에 있어서,
    생성된 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여, 퍼징용 데이터를 생성하는 퍼징용 데이터 생성부를 더 포함하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 장치.
  12. 퍼징용 실행 흐름 정보 추출 장치에 의해 수행되는 퍼징용 실행 흐름 정보 추출 방법에 있어서,
    퍼징 대상 프로그램이 실행한 CPU 인스트럭션 정보를 추출하는 단계,
    상기 CPU 인스트럭션 정보로부터, CPU가 실행한 실행 코드 정보를 생성하는 단계,
    상기 퍼징 대상 프로그램의 파일 및 메모리 중 적어도 어느 하나로부터, 기본 블록 정보를 생성하는 단계, 그리고
    생성된 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 단계를 포함하는 퍼징용 실행 흐름 정보 추출 방법.
  13. 제12항에 있어서,
    상기 CPU 인스트럭션 정보를 추출하는 단계는,
    CPU 인스트럭션 정보 트레이스 하드웨어를 이용하여, 상기 퍼징 대상 프로그램이 실행한 상기 CPU 인스트럭션 정보를 추출하는 단계, 그리고
    추출된 상기 CPU 인스트럭션 정보를 CPU 칩의 내부 메모리, 퍼징용 실행 흐름 정보 추출 장치의 메인 메모리 및 외부의 저장 장치 중 적어도 어느 하나에 저장하는 단계를 포함하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  14. 제12항에 있어서,
    상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는,
    추출된 상기 CPU 인스트럭션 정보를 릴레이 하드웨어로부터 읽어와, 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  15. 제12항에 있어서,
    상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는,
    상기 CPU 인스트럭션 정보에 인스트럭션 주소가 포함되어 있는 경우, 상기 CPU 인스트럭션 정보에 포함된 시작 주소, 끝 주소 및 코드 블록의 크기 중 적어도 어느 하나를 기반으로 상기 실행 코드 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  16. 제12항에 있어서,
    상기 CPU가 실행한 실행 코드 정보를 생성하는 단계는,
    상기 CPU 인스트럭션 정보에 분기 명령이 포함되어 있는 경우, 상기 CPU 인스트럭션 정보로부터 상기 분기 명령의 종류, 상기 분기 명령이 발생한 주소 및 분기 대상 주소 중 적어도 어느 하나를 포함하는 분기 명령 정보를 추출하는 단계, 그리고
    추출된 상기 분기 명령 정보를 기반으로, 상기 실행 코드 정보를 생성하는 단계를 포함하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  17. 제16항에 있어서,
    상기 퍼징용 실행 흐름 정보를 생성하는 단계는,
    상기 CPU가 실행한 상기 퍼징 대상 프로그램의 상기 기본 블록 및 상기 기본 블록간 실행 순서 중 적어도 어느 하나를 포함하는 상기 퍼징용 실행 흐름 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  18. 제12항에 있어서,
    상기 기본 블록 정보를 생성하는 단계는,
    상기 퍼징 대상 프로그램 및 상기 퍼징 대상 프로그램 실행 중의 메모리 중 적어도 어느 하나로부터, 기본 블록 리스트 및 기본 블록 간 플로우 그래프 중 적어도 어느 하나를 포함하는 상기 기본 블록 정보를 생성하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  19. 제12항에 있어서,
    생성된 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여, 퍼징용 데이터를 생성하는 단계를 더 포함하는 것을 특징으로 하는 퍼징용 실행 흐름 정보 추출 방법.
  20. CPU가 실행한 실행 코드 정보를 생성하고, 퍼징 대상 프로그램의 파일/메모리로부터 기본 블록 정보를 생성하고, 퍼징 대상 프로그램의 상기 실행 코드 정보 및 상기 기본 블록 정보를 기반으로, 퍼징용 실행 흐름 정보를 생성하는 퍼징용 실행 흐름 정보 추출 장치,
    상기 퍼징용 실행 흐름 정보 추출 장치로부터 수신한 상기 퍼징용 실행 흐름 정보를 퍼징 알고리즘에 입력하여 퍼징용 데이터를 생성하는 퍼징 데이터 생성 장치, 그리고
    상기 퍼징 대상 프로그램의 상기 퍼징 데이터를 실행하고, 상기 퍼징 데이터의 실행에 따른 상기 퍼징 대상 프로그램의 취약점 정보를 출력하는 퍼징 수행 단말기를 포함하는 퍼징 수행 시스템.
KR1020170146783A 2017-11-06 2017-11-06 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법 KR102075345B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170146783A KR102075345B1 (ko) 2017-11-06 2017-11-06 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170146783A KR102075345B1 (ko) 2017-11-06 2017-11-06 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법

Publications (2)

Publication Number Publication Date
KR20190051301A KR20190051301A (ko) 2019-05-15
KR102075345B1 true KR102075345B1 (ko) 2020-02-10

Family

ID=66579423

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170146783A KR102075345B1 (ko) 2017-11-06 2017-11-06 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법

Country Status (1)

Country Link
KR (1) KR102075345B1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20210117408A (ko) * 2020-03-19 2021-09-29 삼성전자주식회사 전자 장치 및 그 제어 방법
KR102353190B1 (ko) * 2020-08-21 2022-01-20 국방과학연구소 프로그램을 검사하는 전자 장치 및 이의 검사 방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090228871A1 (en) 2008-03-10 2009-09-10 Microsoft Corporation Managing generation of security tests
US20120089868A1 (en) 2010-10-06 2012-04-12 Microsoft Corporation Fuzz testing of asynchronous program code

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8510715B1 (en) * 2010-01-26 2013-08-13 Google Inc. Coverage analysis using sub-instruction profiling
KR101525398B1 (ko) 2014-05-30 2015-06-09 한국전자통신연구원 네트워크 응용 프로그램 퍼징 시스템 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090228871A1 (en) 2008-03-10 2009-09-10 Microsoft Corporation Managing generation of security tests
US20120089868A1 (en) 2010-10-06 2012-04-12 Microsoft Corporation Fuzz testing of asynchronous program code

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
임기영 외 2명. 퍼징 기반의 상용 및 공개 소프트웨어에 대한 보안약점 진단 방법 연구. 2016.2.

Also Published As

Publication number Publication date
KR20190051301A (ko) 2019-05-15

Similar Documents

Publication Publication Date Title
US7530056B1 (en) Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
JP2008129714A (ja) 異常検知方法、異常検知装置及び異常検知用プログラム並びに学習モデル生成方法
US9208060B1 (en) Emulation-based expression evaluation for diagnostic tools
JP7287480B2 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
US9720793B2 (en) Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
WO2016197341A1 (en) Webgl application analyzer
CN105528284B (zh) 一种内核故障注入方法及电子设备
US10698805B1 (en) Method and system for profiling performance of a system on chip
US9792402B1 (en) Method and system for debugging a system on chip under test
CN111831538A (zh) 调试方法、装置以及存储介质
CN110688313B (zh) 一种VxWorks操作系统下软件测试的故障注入方法
KR102075345B1 (ko) 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법
US20230050691A1 (en) System for detecting malicious programmable logic controller code
KR101185542B1 (ko) 마이크로컨트롤러유닛 테스트 자동화 시스템 및 그 방법
CN111859380A (zh) Android App漏洞的零误报检测方法
JP6400794B2 (ja) インタプリタによるコード実行のシステム及び方法
EP2972880B1 (en) Kernel functionality checker
WO2017197982A1 (zh) 报文处理方法、装置及系统和计算机存储介质
CN112765032A (zh) 程序调试方法、装置、设备及存储介质
JP2009251762A (ja) デバッガ装置、デバッグ方法およびプログラム
CN116594861A (zh) 基于模拟执行的Native动态链接库分析方法及系统
WO2023067668A1 (ja) 解析機能付与方法、解析機能付与装置及び解析機能付与プログラム
CN111488558B (zh) 脚本保护方法、装置、计算机可读存储介质和计算机设备
Musliner et al. Fuzzbomb: Autonomous cyber vulnerability detection and repair
CN107315685A (zh) 一种非侵入式程序实时调试方法

Legal Events

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