KR20230025144A - 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 - Google Patents

바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 Download PDF

Info

Publication number
KR20230025144A
KR20230025144A KR1020210107282A KR20210107282A KR20230025144A KR 20230025144 A KR20230025144 A KR 20230025144A KR 1020210107282 A KR1020210107282 A KR 1020210107282A KR 20210107282 A KR20210107282 A KR 20210107282A KR 20230025144 A KR20230025144 A KR 20230025144A
Authority
KR
South Korea
Prior art keywords
fuzzing
kernel
operating system
call
system call
Prior art date
Application number
KR1020210107282A
Other languages
English (en)
Other versions
KR102578430B1 (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 KR1020210107282A priority Critical patent/KR102578430B1/ko
Priority to US17/520,414 priority patent/US11860765B2/en
Publication of KR20230025144A publication Critical patent/KR20230025144A/ko
Application granted granted Critical
Publication of KR102578430B1 publication Critical patent/KR102578430B1/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/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/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/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3457Performance evaluation by simulation
    • G06F11/3461Trace driven simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

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

Abstract

바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법이 개시된다. 일 실시예에 따른 퍼징 시스템에 의해 수행되는 컴퓨터 운영체제 커널 퍼징 방법은, 컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추하는 단계; 및 상기 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행하는 단계를 포함할 수 있다.

Description

바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법{TYPE-AWARE WINDOWS KERNEL FUZZING METHOD BASED ON STATIC BINARY ANALYSIS}
아래의 설명은 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하여 윈도우 운영체제의 커널을 퍼징하는 기법과, 이를 구현한 시스템에 관한 것이다.
커널(kernel)은 컴퓨터 운영체제(operating system)의 핵심 요소로서, 컴퓨터에서 실행되는 어플리케이션이 보내는 수많은 요청(예: 파일 입출력)을 처리해주는 역할을 담당한다. 이러한 요청을 추고 받기 위한 인터페이스가 시스템 콜(system call)이라 불리는 함수들이며, 운영체제는 어플리케이션을 위해 다양한 종류의 시스템 콜을 정의하여 제공한다. 어플리케이션이 시스템 콜을 호출함으로써 어떤 요청을 보내면, 커널 코드가 실행되어 이 요청을 수행해 준다.
커널 코드가 시스템 콜을 처리하는 과정에서 오류(bug)가 발생하면 심각한 문제를 일으킬 수 있다. 예를 들면, 컴퓨터가 작동을 멈추고 다운될 수 있는데, 윈도우에서 관찰되는 블루 스크린(Blue screen of death)이 바로 이에 해당하는 현상이다. 다른 문제로는, 악의적인 해커가 이 오류를 악용함으로써 원래는 허용되지 않아야 하는 관리자 권한을 탈취하는 공격을 시행할 수 있다.
커널 코드의 오류를 미리 찾아내기 위한 기법들 중 가장 널리 사용되고 있는 것은 퍼징(fuzzing) 기술이다. 퍼징이란 소프트웨어의 입력을 랜덤하게 변형(mutate)해 가며 실행하는 것을 반복함으로써 소프트웨어의 오류를 찾아내는 기 술이다. 커널 코드의 경우 시스템 콜을 통해 입력을 받아들인다. 커널 퍼징이란 시스템 콜의 인자를 랜덤하게 변형해 가며 반복적으로 실행하는 것을 의미한다. 이러한 맥락에서, 커널 퍼징은 곧 시스템 콜 퍼징으로 불리기도 한다.
시스템 콜 퍼징 과정에서 시스템 콜 인자의 타입 정보를 활용하는 것은 매우 중요하다. 예를 들어, 시스템 콜이 포인터(pointer) 타입의 인자를 받는지 혹은 정수 타입의 인자를 받는지를 알고, 인자 타입에 알맞은 변형을 시행해야 효율적인 퍼징이 가능하다.
시스템 콜 인자의 타입 정보는 리눅스와 같은 오픈 소스 운영체제의 경우 공개되어 있지만, 윈도우와 같은 상용 운영체제의 경우 극히 일부분만 공개되어 있지 않다. 예를 들어, Windows 10의 경우 1600개 이상의 시스템 콜이 존재하는데, 2021년 기준으로 마이크로소프트 사의 공식 웹사이트에는 64개의 시스템 콜만 문서화되어 있다.
이러한 이유로, 기존의 커널 퍼징 연구들은 시스템 콜의 타입 정보가 공개되어 있는 리눅스 운영체제를 대상으로 삼는 경우가 대부분이었다. 윈도우와 같은 상용 운영체제를 대상으로 하는 커널 퍼징을 연구한 기술도 있었지만, 공식적으로 문서화된 극히 일부의 시스템 콜 중 하나를 퍼징 대상으로 하였다. 문서화되지 않은 시스템 콜에 적용하려면, 사람이 직접이 시스템 콜에 대한 타입 정보를 분석하여 제공해 주어야 한다. 윈도우에 존재하는 수많은 시스템 콜에 일일이 이러한 수동 방식을 적용하는 것은 현실적으로 어렵다.
J. Corina, A. Machiry, C. Salls, Y. Shoshitaishvili, S. Hao, C. Kruegel, and G. Vigna, "DIFUZE: Interface aware fuzzing for kernel drivers," in Proceedings of the ACM Conference on Computer and Communications Security, 2017, pp. 2123-2138. S. Pailoor, A. Aday, and S. Jana, "MoonShine: Optimizing OS fuzzer seed selection with trace distillation," in Proceedings of the USENIX Security Symposium, 2018, pp. 729-743. D. R. Jeong, K. Kim, B. Shivakumar, B. Lee, and I. Shin, "Razzer: Finding kernel race bugs through fuzzing," in Proceedings of the IEEE Symposium on Security and Privacy, 2019, pp. 754-768. S. Schumilo, C. Aschermann, R. Gawlik, S. Schinzel, and T. Holz, "kAFL: Hardware-assisted feedback fuzzing for OS kernels," in Proceedings of the USENIX Security Symposium, 2017, pp. 167-182.
정적 분석 기술을 통해 윈도우 시스템 콜의 타입 정보를 자동으로 유추하고, 유추를 통해 획득된 타입 정보를 활용하여 시스템 콜을 퍼징하는 방법 및 시스템을 제공할 수 있다.
퍼징 시스템에 의해 수행되는 컴퓨터 운영체제 커널 퍼징 방법은, 컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추하는 단계; 및 상기 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행하는 단계를 포함할 수 있다.
상기 컴퓨터 운영체제는, 소스 코드 및 시스템 콜의 타입 정보가 비공개된 윈도우 운영체제를 포함하고, 상기 유추하는 단계는, 상기 윈도우 운영체제에서 제공되는 라이브러리 파일을 입력받고, 상기 입력받은 라이브러리 파일에 정의된 API 함수가 어플리케이션에 의해 호출되고, 상기 호출된 API 함수를 통해 커널에 요청을 전송하는 시스템 콜 호출이 수행되는 단계를 포함하고, 상기 윈도우 운영체제에서 제공되는 라이브러리 파일은 컴파일(compile) 형태의 바이너리 코드로 제공될 수 있다.
상기 유추하는 단계는, 상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 발생하는 함수 호출 흐름에 대하여 정적 분석을 통해 API 함수의 각 인자들이 전달되는 시스템 콜의 타입 정보를 유추하는 단계를 포함할 수 있다.
상기 유추하는 단계는, 상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 대하여 정적 분석을 위한 중간 언어 형태로 변환하는 단계를 포함할 수 있다.
상기 유추하는 단계는, 상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 존재하는 함수들을 탐지하고, 상기 탐지된 함수들에 포함된 기계어 코드를 어셈블리 코드로 변환하는 단계를 포함할 수 있다.
상기 유추하는 단계는, 상기 탐지된 함수들에 대하여 각 함수에서 각 함수로부터 호출되는 다른 함수 간의 관계 정보를 파악하고, 상기 파악된 관계 정보에 기초하여 함수 호출 그래프를 생성하고, 상기 생성된 함수 호출 그래프에 기초하여 호출되는 함수가 호출하는 함수보다 먼저 분석되도록 순서를 결정하는 단계를 포함할 수 있다.
상기 유추하는 단계는, 상기 각 함수에서 발생하는 시스템 콜 호출과 메모리 업데이트를 포함하는 행동 정보를 분석하고, 상기 분석된 행동을 포함하는 요약을 생성하는 단계를 포함할 수 있다.
상기 유추하는 단계는, 상기 각 함수에 대해 수집된 요약 정보에 기초하여 시스템 콜에 전달되는 인자 정보를 종합하여 각 시스템 콜의 타입 정보를 유추하는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 획득된 시스템 콜의 타입 정보와 시드 어플리케이션을 이용하여 커널 오류를 탐색한 오류 결과를 출력하는 단계를 포함하고, 상기 시드 어플리케이션은, 윈도우 운영체제에서 실행되는 임의의 소프트웨어일 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 시드 어플리케이션의 한 번의 실행에서 발생시키는 시스템 콜 호출 횟수와 관련된 시드 어플리케이션 정보를 수집하는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 시드 어플리케이션을 실행시키는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 실행된 시드 어플리케이션에서 생성하는 시스템 콜 호출 내용을 가로채고, 상기 가로챈 시스템 콜 호출 내용의 인자값을 랜덤하게 변형시키는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 시드 어플리케이션의 실행 진행도(progress)에 기초하여 상기 시스템 콜 호출 내용의 인자값을 변형시키기 위한 비율을 결정하는 단계를 포함할 수 있다.
상기 시드 어플리케이션의 실행 진행도는, 상기 시드 어플리케이션이 실행되는 동안 평균적으로 호출한 시스템 콜의 횟수와 상기 시드 어플리케이션이 현재 호출한 시스템 콜의 횟수에 기초하여 도출된 것일 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 가로챈 시스템 콜 호출 내용의 인자값을 시스템 콜의 타입 정보를 활용하여 변형시키는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 변형된 시스템 콜 호출 내용의 인자값을 커널로 전달함에 따라 커널 코드에서 오류 발생 여부를 관찰하는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 커널 오류가 발생하지 않고 시드 어플리케이션의 실행이 정상적으로 완료될 경우, 시드 어플리케이션의 실행을 반복하는 단계를 포함할 수 있다.
상기 시스템 콜 퍼징을 진행하는 단계는, 상기 커널 오류가 발생할 경우, 시스템이 재부팅되며 메모리 덤프가 자동으로 생성되고, 커널 오류 및 시스템의 재부팅이 확인될 경우, 커널 오류에 대한 정보를 저장하고 보고하는 단계를 포함할 수 있다.
컴퓨터 운영체제 커널 퍼징 방법을 상기 퍼징 시스템에 실행시키기 위해 비-일시적인 컴퓨터 판독가능한 기록 매체에 저장되는 컴퓨터 프로그램을 포함할 수 있다.
퍼징 시스템은, 컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추하는 타입 추론기; 및 상기 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행하는 타입 기반 퍼저를 포함할 수 있다.
사람이 직접 윈도우 시스템 콜의 타입 정보를 분석하여 알아내지 않아도 타입 정보를 활용한 시스템 콜 퍼징을 시행할 수 있게 된다.
또한, 시스템 콜 퍼징에 타입 정보를 활용함으로써 커널 코드의 오류를 더 효과적으로 찾아낼 수 있게 된다.
도 1은 일 실시예에 있어서, 퍼징 시스템의 개괄적인 동작을 설명하기 위한 도면이다.
도 2는 일 실시예에 있어서, 시스템 콜을 호출하는 동작을 설명하기 위한 도면이다.
도 3은 일 실시예에 따른 퍼징 시스템에서 컴퓨터 운영체제 커널 퍼징 방법을 설명하기 위한 흐름도이다.
도 4는 일 실시예에 따른 퍼징 시스템에서 시스템 콜의 타입 정보를 유추하는 동작을 설명하기 위한 도면이다.
도 5는 일 실시예에 따른 퍼징 시스템에서 시스템 콜 퍼징을 진행하는 동작을 설명하기 위한 도면이다.
도 6은 일 실시예에 있어서, 변환된 중간 언어의 구조를 정리한 결과를 나타낸 도면이다.
도 7 및 도 8은 일 실시예에 있어서, 정적 분석을 설명하기 위한 도면이다.
이하, 실시예를 첨부한 도면을 참조하여 상세히 설명한다.
도 1은 일 실시예에 있어서, 퍼징 시스템의 개괄적인 동작을 설명하기 위한 도면이다.
퍼징 시스템(100)의 전체 구조를 나타낸 것이다. 퍼징 시스템은 시스템 콜의 타입 정보를 자동으로 유추하는 타입 추론기(110)와 유추를 통해 획득된 타입 정보를 활용하여 시스템 콜 퍼징을 진행하는 타입 기반 퍼저(120)를 포함할 수 있다.
도 1의 설명을 위하여 도 3의 컴퓨터 운영체제 커널 퍼징 방법을 설명하기 위한 흐름도를 참고하기로 한다.
단계(310)에서 타입 추론기(110)는 컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추할 수 있다. 이때, 컴퓨터 운영체제는 소스 코드 및 시스템 콜의 타입 정보가 공개된 리눅스 기반의 운영체제, 또는, 소스 코드 및 시스템 콜의 타입 정보가 비공개된 윈도우 운영체제를 포함할 수 있다. 실시예에서는 소스 코드 및 시스템 콜의 타입 정보가 비공개된 윈도우 운영체제의 커널 퍼징 동작에 대하여 설명하기로 한다. 예를 들면, 타입 추론기(110)는 윈도우 시스템 콜의 타입을 자동으로 유추할 수 있다. 타입 추론기(110)는 윈도우 운영체제가 제공하는 라이브러리 파일(101)을 입력받아 시스템 콜의 타입 정보(102)를 유추할 수 있다.
단계(320)에서 타입 기반 퍼저(120)는 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행할 수 있다. 타입 기반 퍼저(120)는 시스템 콜의 타입 정보(102)와 시드 어플리케이션(103)을 입력받아 최종적으로 커널 오류(104)를 탐색하고, 탐색된 커널 오류(104)를 결과로 출력할 수 있다.
도 2는 일 실시예에 있어서, 시스템 콜을 호출하는 동작을 설명하기 위한 도면이다.
어플리케이션(210)은 컴퓨터 운영체제(예를 들면, 윈도우)가 제공하는 라이브러리 파일에 정의된 API 함수를 호출한다. 그러면 호출된 API 함수는 일련의 내부 함수 호출을 거쳐, 최종적으로 시스템 콜 진입점(system call stub)에 도달하게 되며, 도달된 진입점에서 커널(230)에 요청을 보내는 시스템 콜 호출이 실제로 이뤄진다.
예를 들면, 라이브러리 파일이 윈도우 운영체제에서 제공되는 것일 경우, 소스 코드는 공개되어 있지 않으며, 소스 코드를 컴파일(compile)한 바이너리(binary) 코드만 주어진다. 이때, API 함수는 어플리케이션 개발자들이 호출할 수 있어야 하므로, 어떤 API 함수가 존재하며 함수 인자의 타입은 무엇인지 등에 대한 API 함수 정보가 공식적으로 문서화되어 있다.
타입 추론기(110)는 라이브러리 파일에서 발생하는 함수 호출 흐름을 정적 분석(static analysis)(240) 기술을 사용하여 관찰할 수 있다. 정적 분석이란 소프트웨어를 실제로 실행해보지 않고서도 소프트웨어에서 일어나는 일을 어림잡아 예상하는 자동화된 기술을 의미한다.
타입 추론기(110)는 정적 분석을 통해 API 함수의 각 인자들이 어느 시스템 콜의 어느 인자로 전달되는지를 판별할 수 있다. 타입 추론기(110)는 공식적으로 문서화된 API 함수 정보를 통해 시스템 콜의 각 인자가 어떤 타입을 갖는지를 시스템 콜의 타입 정보를 유추할 수 있다.
도 4를 참고하면, 시스템 콜의 타입 정보를 유추하는 동작을 설명하기 위한 도면이다. 타입 추론기(110)는 바이너리 파싱(410), 분석 순서 결정(420), 함수별 요약 생성(430) 및 시스템 콜 타입 유추(440) 동작을 수행할 수 있다. 실시예에서는 윈도우 시스템의 콜 타입을 유추하는 동작에 대하여 예를 들어 설명하기로 한다.
바이너리 파싱(410) 단계에서, 타입 추론기(110)는 윈도우 라이브러리 파일에 대하여 정적 분석을 위한 중간 언어(intermediate language) 형태로 변환할 수 있다. 타입 추론기(110)는 윈도우 라이브러리리 파일을 읽어들임에 따라 분석을 위한 중간 언어(intermediate language) 형태로 변환할 수 있다. 구체적으로는, 타입 추론기(110)는 우선 라이브러리 파일에 존재하는 함수들을 탐지한 다음, 각 함수에 포함되어 있는 기계어(machine instruction) 코드를 어셈블리(assembly) 코드로 변환할 수 있다. 타입 추론기(110)는 어셈블리 코드를 중간 언어로 변환함으로써, 각 함수의 코드를 중간 언어로 표현할 수 있다.
이러한 바이너리 파싱(410) 단계는 바이너리 분석 플랫폼을 활용하여 구현될 수 있다. 바이너리 분석 플랫폼은 비특허문헌 M. Jung, S. Kim, H. Han, J. Choi, and S. K. Cha, "B2R2: Building an efficient front-end for binary analysis," in Proceedings of the NDSS Workshop on Binary Analysis Research, 2019.에 개시된 B2R2라는 바이너리 분석 플랫폼이 참고될 수 있다.
도 6을 참고하면, 변환된 중간 언어의 구조(syntax)를 간략히 정리한 결과를 표현한 것이다. 중간 언어로 변환하는 과정에서, 프로그램의 실행 흐름 정보는 따로 수집하여 실행 흐름 그래프(control-flow graph)를 생성하기 때문에, 중간 언어 구조에는 프로그램 실행 흐름과 관련된 명령들은 도면에서 생략되었다.
분석 순서 결정(420) 단계에서, 타입 추론기(110)는 탐지된 함수들에 대하여 탐지된 함수들을 분석할 순서를 결정할 수 있다. 타입 추론기(110)는 탐지된 함수들에 대하여 각 함수에서 각 함수로부터 호출되는 다른 함수 어떤 다른 함수 간의 관계 정보를 파악하고, 파악된 관계 정보에 기반하여 함수 호출 그래프(call graph)를 생성할 수 있다. 타입 추론기(110)는 생성된 함수 호출 그래프에 기초하여 호출되는 함수(callee function)가 항상 호출하는 함수(caller function)보다 먼저 분석되도록 순서를 결정할 수 있다(topological ordering).
함수별 요약 생성(430) 단계에서, 타입 추론기(110)는 모듈식 분석 기법을 이용하여 각 함수에서 발생하는 시스템 콜 호출과 메모리 업데이트를 포함하는 행동 정보를 분석하고, 분석된 행동을 포함하는 요약을 생성할 수 있다. 모듈식 분석 기법은 비특허문헌 A. Aiken, S. Bugrara, I. Dillig, T. Dillig, B. Hackett, and P. Hawkins, "An overview of the saturn project," in Proceedings of the ACM SIGPLAN-SIGSOFT workshop on Program Analysis for Software Tools and Engineering, 2007, pp. 43-48에 기재된 방식을 참고할 수 있다. 만약 어떤 함수가 다른 함수를 호출할 경우, 호출되는 함수를 다시 분석하는 것이 아니라 이미 생성되어 있는 요약을 활용함으로써 함수 호출이 어떤 시스템 콜을 발생시키고, 메모리를 어떻게 바꾸는지를 파악한다. 이렇게 요약을 재활용하려면, 호출되는 함수가 호출하는 함수보다 먼저 분석되고 요약되어야 하기 때문에, 앞서 설명한 함수 분석 순서를 결정(330) 단계가 선행되어야 한다. 또한, 요약을 생성하고 재활용하는 이유는 분석의 비용을 줄이기 위해서이다. 만약 함수 호출이 일어날 때마다 호출되는 함수를 다시 분석할 경우, 분석 비용이 급격히 높아진다.
타입 추론기(110)는 추상 해석(abstract interpretation) 기술을 사용하여 정적 분석을 수행할 수 있다. 추상 해석 기술은 정적 분석의 대표적인 기법 중 하나이다. 추상 해석 기술은 비특허문헌 P. Cousot and R. Cousot, "Abstract interpretation frameworks: A unified lattice model for static analysis of programs by construction or approximation of fixpoints," in Proceedings of the ACM Symposium on Principles of Programming Languages, 1977, pp. 238-252.에 개시된 방법을 참고하기로 한다. 추상 해석 기법에서는, 추상 도메인(abstract domain)과 추상 실행의미(abstract semantics)를 정의하고, 이에 기반하여 프로그램에서 일어나는 일을 분석하게 된다. 도 7 및 도 8을 참고하면, 정적 분석기에서 정적 분석에서 사용하는 추상 도메인과 추상 실행의미를 표현한 것이다.
예를 들면, 추상 해석 기술로 바이너리 코드를 분석함에 있어서, 메모리 접근을 분석하기 위해 구간(interval) 도메인을 추상 도메인으로 사용할 수 있고, 또는, 정적 분석은 상수 오프셋을 사용하여 메모리 접근을 추적할 수 있다. 실시예에서는 상수 오프셋을 이용하여 메모리 접근을 추적하는 방법을 이용할 수 있다. 이러한 선택으로 인해, 분석 결과가 대상 프로그램에서 발생하는 행동 중 일부를 놓치게 될 수 있지만(false negative), 대신 프로그램에서 발생하지 않는 행동이 거짓으로 분석 결과에 포함되는 경우(false positive)를 줄일 수 있다.
또한, 이러한 추상 도메인 및 추상 실행의미의 사용은, 모듈식 분석을 바이너리 코드에 적용하는 것을 용이하게 한다. 모듈식 분석을 소스 코드 분석에 사용한 기존의 연구는 많았지만, 바이너리 코드를 대상으로 성공적으로 적용한 경우는 제한적이었다. 바이너리 코드를 대상으로 추상 해석 기법을 적용한 종래 방법을 모듈식 분석과 결합할 경우, 함수 호출로 인해 일어나는 메모리 업데이트를 제대로 요약하기 힘들다. 이는 구간 도메인이 상한/하한이 불분명해지는 경우가 빈번하기 때문이다. 반면에, 구간 도메인을 사용하지 않는 실시예에서 제안된 정적 분석기는 메모리 업데이트를 포함한 요약을 생성할 수 있다.
시스템 콜 타입 유추(440) 단계에서, 타입 추론기(110)는 각 함수에 대해 수집된 요약 정보에 기초하여 시스템 콜에 전달되는 인자 정보를 종합하여 각 시스템 콜의 타입 정보를 유추할 수 있다. 타입 추론기(110)는 각 함수에 대해 수집된 요약 정보에 기초하여 시스템 콜에 어떤 타입의 인자가 전달되는지 정보를 획득하여 최종적으로 각 시스템 콜의 타입 정보를 유추할 수 있다.
만약, 타입 추론기(110)는 시스템 콜에 전달되는 인자가 정수, 혹은 핸들(handle)처럼 단순한 타입을 가지거나, API 함수의 인자가 바로 전달되는 경우에는, 바로 시스템 콜 인자의 타입 정보를 결정할 수 있다. 반면에, 시스템 콜에 전달되는 인자가 메모리 영역을 가리키는 포인터 값이 시스템 콜에 전달되는 경우, 분석된 메모리 상태를 참조하여, 포인터가 가리키는 내용물의 타입도 유추해야 한다. 먼저, 포인터가 가리키는 메모리 공간의 크기가 시스템 콜의 다른 인자로 전달되는 경우, 포인터가 가리키는 내용물이 배열임을 유추할 수 있다. 만약 이 조건이 만족되지 않는다면, 포인터가 가리키는 내용물을 구조체로 간주하고, 메모리에 저장된 내용에 대해 재귀적으로 타입을 유추하여 구조체 필드의 타입으로 삼는다. 이 과정에서, 하나의 정수에 대한 포인터 타입은, 해당 정수를 유일한 필드로 갖는 구조체의 포인터 타입으로 간주한다. 구조체 타입을 유추하는 과정에서, 구조체가 어디까지 이어지는지를 결정하는 것이 관건이 된다. 이를 위해, 실시예에서는 데이터 흐름 분석을 사용하여 메모리 접근 패턴을 관찰하고, 이를 기반으로 구조체의 범위가 유추될 수 있다. 데이터 흐름 분석은 비특허문헌 A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman, Compilers: Principles, Techniques, and Tools, 2nd edition. Addison Wesley, 2006.에서 개시된 방법이 참고될 수 있다.
시스템 콜 타입 정보를 유추하는 과정에서 발생할 수 있는 문제는, 하나의 시스템 콜이 여러 지점에서 불리었을 때, 각 지점마다 시스템 콜의 타입 정보가 다르게 유추될 수 있다는 점이다. 종래에는 상충하는 결과가 나올 경우 타입을 결정할 수 없다고 결론짓고 포기하는 반면, 실시예에서는 통계적으로 더 많은 지점에서 관찰된 타입을 선택한다. 이러한 방법을 통해 완벽하지는 않더라도 올바를 확률이 높은 타입 정보를 퍼징 모듈에 제공함으로써 퍼징의 효율성을 높일 수 있다.
도 5는 일 실시예에 따른 퍼징 시스템에서 시스템 콜 퍼징을 진행하는 동작을 설명하기 위한 도면이다.
타입 기반 퍼저(120)는 시드 어플리케이션을 실행하여 생성되는 시스템 콜 인자들을 가로채서 변형을 가할 수 있다. 시드 어플리케이션은 윈도우 운영체제에서 실행되는 임의의 소프트웨어를 사용할 수 있다. 시드 어플리케이션이 실행되면, 커널과 상호작용하기 위하여 내부적으로 수많은 시스템 콜들이 호출될 수 있다.
타입 기반 퍼저(120)는 호출된 시스템 콜 내용을 중간에 가로채어, 시스템 콜 인자 값을 변형시키는 방식으로 작동할 수 있다. 이때, 타입 기반 퍼저(120)는 시스템 콜의 타입 정보를 활용하여 콜 인자 값을 변형시킬 수 있다. 예를 들어, 정수 타입 인자를 변형시킬 경우 단순히 그 정수 값을 변형시키면 되지만, 포인터 타입 인자의 값을 변형시킬 경우, 포인터가 가리키는 위치에 저장된 내용에 대해 변형을 시행해 주어야 한다. 이런 식으로 타입 정보를 고려하여 알맞은 변형을 시행함으로써, 커널 코드를 더 효율적으로 테스트하고 오류를 찾는 것이 가능하다.
도 5를 참고하면, 타입 기반의 퍼저(120)는 시드 어플리케이션 정보 수집(510), 시드 어플리케이션 실행(520), 시스템 콜 인자 변형(530), 커널 오류 관찰(540) 및 오류 정보 저장(550) 동작을 수행할 수 있다.
시드 어플리케이션 정보 수집(510) 단계에서, 타입 기반 퍼저(120)는 시드 어플리케이션의 한 번의 실행에서 발생시키는 시스템 콜 호출 횟수와 관련된 시드 어플리케이션 정보를 수집할 수 있다. 타입 기반 퍼저(120)는 시드 어플리케이션이 한번의 시행에서 평균적으로 몇 개의 시스템 콜 호출을 일으키는지를 측정할 수 있다. 여기서, 측정된 정보는 추후의 시스템 콜 인자 변형(530) 단계에서, 시드 어플리케이션의 실행 진행도(progress)를 어림하는데 활용될 수 있다. 예를 들어, 시드 어플리케이션이 실행되는 동안 평균적으로 N(N은 자연수)번의 시스템 콜을 호출한다고 가정하고, 시드 어플리케이션이 방금 M(M≤N)번째 시스템 콜을 호출하였다고 하면, 호출된 시점에서 시드 어플리케이션의 진행도를 M/N으로 어림잡는 방식이다.
시드 어플리케이션 실행(520) 단계에서, 타입 기반 퍼저(120)는 주어진 시드 어플리케이션을 실행시킬 수 있다. 만약 시드 어플리케이션이 커맨드 라인 인터페이스(command line interface)나 그래픽 유저 인터페이스(graphic user interface)를 통해 입력을 받아야 할 경우, 인터페이스 입력도 함께 제공할 수 있다. 시드 어플리케이션이 실행됨에 따라 커널과 상호작용을 위한 시스템 콜들이 호출될 수 있다.
시스템 콜 인자 변형(530) 단계에서, 타입 기반 퍼저(120)는 시드 어플리케이션이 생성하는 시스템 콜 호출 내용을 가로채고, 가로챈 시스템 콜 호출 내용의 인자 값들을 랜덤하게 변형시킬 수 있다. 예를 들면, 시스템 콜 호출을 가로 기 위해 사용할 수 있는 기술은 다양하며, 디버깅을 위해 윈도우가 제공하는 API함수들을 사용하거나, 윈도우 커널의 시스템 콜 테이블(system service descriptor table)을 덮어쓰는 기법 등을 사용할 수 있다. 타입 기반 퍼저(120)는 시스템 콜 호출을 성공적으로 가로챔에 따라, 시스템 콜 인자를 확률적으로 변형시킬 수 있다. 예를 들면, 타입 기반 퍼저(120)는 시드 어플리케이션의 실행 진행도(progress)에 기초하여 시스템 콜 호출 내용의 인자값을 변형시키기 위한 비율을 결정하고, 결정된 비율에 따라 시스템 콜 인자를 변형시킬 수 있다. 시드 어플리케이션의 진행도를 활용함으로써, 효과적인 퍼징 전략을 자유롭게 모색해 볼 수 있다. 다시 말해, 타입 기반 퍼저(120)는 모든 시스템 콜 인자를 변형시키는 것이 아니라, 모든 시스템 콜 인자 중 일부를 선별하여 변형시키며, 얼마나 많은 인자를 변형시킬지 그 비율은 자유롭게 설정이 가능하다. 만약, 어떤 시스템 콜 인자를 변형시킬 대상이 선택됨에 따라 시스템 콜의 타입 정보를 활용하여 선택된 시스템 콜 인자값을 변형시킬 수 있다.
커널 오류 관찰(540) 단계에서, 타입 기반 퍼저(120)는 변형된 시스템 콜 호출 내용의 인자값을 이용하여 커널로 전달함에 따라 커널 코드에서 오류 발생 여부를 관찰할 수 있다. 시스템 콜의 인자를 변형시켜 커널로 전달되고 나면, 커널 코드가 비정상적인 입력을 처리하는 과정에서 낮은 확률로 오류를 일으킬 수 있다. 만약 커널 오류가 발생하지 않고 시드 어플리케이션의 실행이 정상적으로 완료될 경우, 다시 시드 어플리케이션 실행(520) 단계로 돌아가 새로운 실행을 반복할 수 있다. 반면, 커널에서 오류가 발생할 경우, 시스템이 재부팅되며 메모리 덤프(dump)가 자동으로 생성될 수 있다.
오류 정보 저장(550) 단계에서, 타입 기반 퍼저(120)는 커널 오류 및 시스템 재부팅이 확인될 경우, 커널 오류에 대한 정보를 저장하고 보고할 수 있다. 필요에 따라, 커널 오류를 보고한 다음 종료하지 않고 앞 단계로 돌아가서 퍼징을 계속하는 설계도 가능하다.
타입 추론기가 윈도우의 시스템 콜 인자 타입을 정확히 유추할 수 있는지에 대하여 2018년 4월 버전의 윈도우 10에서 실험될 수 있다. 총 7개의 핵심 윈도우 라이브러리 파일들(ntdll.dll, kernelbase.dll, kernel32.dll, win32u.dll, gdi32.dll, gdi32full.dll, user32.dll)이 분석될 수 있다. 분석을 통해 유추된 시스템 콜의 타입 정보의 정확도를 측정하기 위해, 마이크로소프트 공식 웹사이트에 문서화되어 있는 64개의 시스템 콜 함수를 벤치마크로 삼기로 한다. 해당 64개의 시스템 콜 함수는 총 326개 인자를 가지고 있었으며, 실시예에서 제안된 타입 추론기가 시스템 콜 함수 인자들에 대해 얼마나 정확하게 타입을 유추하는지를 측정될 수 있다. 실험 결과, 타입 추론기는 69%의 인자에 대해 정확하게 타입을 유추할 수 있었으며, 나머지 인자들에 대해 부분적으로 올바른 타입을 유추할 수 있었다. 이러한 결과로 미루어 볼 때, 문서화되지 않은 나머지 시스템 콜에 대해서도 준수한 정확도를 보일 것으로 예상 가능하다.
또한, 타입 추론기가 얻어낸 시스템 콜의 타입 정보가 퍼징 효과를 향상시킬 수 있는지를, 동일한 2018년 4월 버전의 윈도우 10에서 실험될 수 있다. 타입 기반 퍼저는 8개의 시드 어플리케이션에 대해 각각 48시간동안 퍼징을 시행하였다. 그 결과, 타입 정보를 제공받았을 때, 제공받지 않았을 때에 비해 1.7배 많은 커널 크래시를 찾아낼 수 있다.
마지막으로, 본 발명에서 고안한 기술이 최신 버전의 윈도우에서 기존에 알려지지 않은 새로운 오류를 찾아낼 수 있는지를 실험될 수 있다. 발명 당시 최신 버전인 2020년 1월 버전의 윈도우 10에서 실험한 결과, 총 11개의 오류를 찾을 수 있었다. 마이크로소프트 사에 발견한 오류를 리포트한 결과, 이들 오류 중 4개는 중요한 보안 취약점으로 인정받아 취약점 관리번호를 할당받았다(CVE-2020-0792, CVE-2020-1246, CVE-2020-1053, CVE-2020-17004). 이러한 실험 결과는 윈도우 커널의 오류를 효과적으로 탐지할 수 있는 기술임을 보여준다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (20)

  1. 퍼징 시스템에 의해 수행되는 컴퓨터 운영체제 커널 퍼징 방법에 있어서,
    컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추하는 단계; 및
    상기 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  2. 제1항에 있어서,
    상기 컴퓨터 운영체제는, 소스 코드 및 시스템 콜의 타입 정보가 비공개된 윈도우 운영체제를 포함하고,
    상기 유추하는 단계는,
    상기 윈도우 운영체제에서 제공되는 라이브러리 파일을 입력받고, 상기 입력받은 라이브러리 파일에 정의된 API 함수가 어플리케이션에 의해 호출되고, 상기 호출된 API 함수를 통해 커널에 요청을 전송하는 시스템 콜 호출이 수행되는 단계
    를 포함하고,
    상기 윈도우 운영체제에서 제공되는 라이브러리 파일은 컴파일(compile) 형태의 바이너리 코드로 제공되는 것을 특징으로 하는 컴퓨터 운영체제 커널 퍼징 방법.
  3. 제1항에 있어서,
    상기 유추하는 단계는,
    상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 발생하는 함수 호출 흐름에 대하여 정적 분석을 통해 API 함수의 각 인자들이 전달되는 시스템 콜의 타입 정보를 유추하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  4. 제3항에 있어서,
    상기 유추하는 단계는,
    상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 대하여 정적 분석을 위한 중간 언어 형태로 변환하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  5. 제4항에 있어서,
    상기 유추하는 단계는,
    상기 윈도우 운영체제에서 제공되는 라이브러리 파일에 존재하는 함수들을 탐지하고, 상기 탐지된 함수들에 포함된 기계어 코드를 어셈블리 코드로 변환하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  6. 제5항에 있어서,
    상기 유추하는 단계는,
    상기 탐지된 함수들에 대하여 각 함수에서 각 함수로부터 호출되는 다른 함수 간의 관계 정보를 파악하고, 상기 파악된 관계 정보에 기초하여 함수 호출 그래프를 생성하고, 상기 생성된 함수 호출 그래프에 기초하여 호출되는 함수가 호출하는 함수보다 먼저 분석되도록 순서를 결정하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  7. 제6항에 있어서,
    상기 유추하는 단계는,
    상기 각 함수에서 발생하는 시스템 콜 호출과 메모리 업데이트를 포함하는 행동 정보를 분석하고, 상기 분석된 행동을 포함하는 요약을 생성하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  8. 제7항에 있어서,
    상기 유추하는 단계는,
    상기 각 함수에 대해 수집된 요약 정보에 기초하여 시스템 콜에 전달되는 인자 정보를 종합하여 각 시스템 콜의 타입 정보를 유추하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  9. 제1항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 획득된 시스템 콜의 타입 정보와 시드 어플리케이션을 이용하여 커널 오류를 탐색한 오류 결과를 출력하는 단계
    를 포함하고,
    상기 시드 어플리케이션은, 윈도우 운영체제에서 실행되는 임의의 소프트웨어인 것을 특징으로 하는 컴퓨터 운영체제 커널 퍼징 방법.
  10. 제9항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    시드 어플리케이션의 한 번의 실행에서 발생시키는 시스템 콜 호출 횟수와 관련된 시드 어플리케이션 정보를 수집하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  11. 제10항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    시드 어플리케이션을 실행시키는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  12. 제11항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 실행된 시드 어플리케이션에서 생성하는 시스템 콜 호출 내용을 가로채고, 상기 가로챈 시스템 콜 호출 내용의 인자값을 랜덤하게 변형시키는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  13. 제12항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 시드 어플리케이션의 실행 진행도(progress)에 기초하여 상기 시스템 콜 호출 내용의 인자값을 변형시키기 위한 비율을 결정하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  14. 제13항에 있어서,
    상기 시드 어플리케이션의 실행 진행도는,
    상기 시드 어플리케이션이 실행되는 동안 평균적으로 호출한 시스템 콜의 횟수와 상기 시드 어플리케이션이 현재 호출한 시스템 콜의 횟수에 기초하여 도출된 것을 특징으로 하는 컴퓨터 운영체제 커널 퍼징 방법.
  15. 제12항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 가로챈 시스템 콜 호출 내용의 인자값을 시스템 콜의 타입 정보를 활용하여 변형시키는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  16. 제12항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 변형된 시스템 콜 호출 내용의 인자값을 커널로 전달함에 따라 커널 코드에서 오류 발생 여부를 관찰하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  17. 제16항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 커널 오류가 발생하지 않고 시드 어플리케이션의 실행이 정상적으로 완료될 경우, 시드 어플리케이션의 실행을 반복하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  18. 제16항에 있어서,
    상기 시스템 콜 퍼징을 진행하는 단계는,
    상기 커널 오류가 발생할 경우, 시스템이 재부팅되며 메모리 덤프가 자동으로 생성되고, 커널 오류 및 시스템의 재부팅이 확인될 경우, 커널 오류에 대한 정보를 저장하고 보고하는 단계
    를 포함하는 컴퓨터 운영체제 커널 퍼징 방법.
  19. 제1항 내지 제18항 중 어느 한 항의 컴퓨터 운영체제 커널 퍼징 방법을 상기 퍼징 시스템에 실행시키기 위해 비-일시적인 컴퓨터 판독가능한 기록 매체에 저장되는 컴퓨터 프로그램.
  20. 퍼징 시스템에 있어서,
    컴퓨터 운영체제가 제공하는 라이브러리 파일을 이용하여 시스템 콜의 타입 정보를 자동으로 유추하는 타입 추론기; 및
    상기 유추를 통해 획득된 시스템 콜의 타입 정보에 기초하여 시스템 콜 퍼징을 진행하는 타입 기반 퍼저
    를 포함하는 퍼징 시스템.
KR1020210107282A 2021-08-13 2021-08-13 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법 KR102578430B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210107282A KR102578430B1 (ko) 2021-08-13 2021-08-13 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법
US17/520,414 US11860765B2 (en) 2021-08-13 2021-11-05 Method and system for fuzzing windows kernel by utilizing type information obtained through binary static analysis

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210107282A KR102578430B1 (ko) 2021-08-13 2021-08-13 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법

Publications (2)

Publication Number Publication Date
KR20230025144A true KR20230025144A (ko) 2023-02-21
KR102578430B1 KR102578430B1 (ko) 2023-09-15

Family

ID=85176778

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210107282A KR102578430B1 (ko) 2021-08-13 2021-08-13 바이너리 정적 분석을 통해 얻은 타입 정보를 활용하는 윈도우 커널 퍼징 기법

Country Status (2)

Country Link
US (1) US11860765B2 (ko)
KR (1) KR102578430B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116069672B (zh) * 2023-03-23 2023-07-04 中南大学 操作系统内核定向模糊测试的种子变异方法及测试方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9530007B1 (en) * 2014-08-26 2016-12-27 Amazon Technologies, Inc. Identifying tamper-resistant characteristics for kernel data structures
JP2017058838A (ja) * 2015-09-15 2017-03-23 株式会社東芝 情報処理装置、試験システム、情報処理方法およびプログラム
US10846211B2 (en) * 2018-03-21 2020-11-24 Microsoft Technology Licensing, Llc Testing kernel mode computer code by executing the computer code in user mode
US10983901B1 (en) * 2018-05-30 2021-04-20 Amazon Technologies, Inc. Systems and methods for fuzz testing serverless software applications
US11321219B2 (en) * 2020-01-13 2022-05-03 Microsoft Technology Licensing, Llc Intelligently fuzzing data to exercise a service
KR102209676B1 (ko) * 2020-07-20 2021-01-28 세종대학교산학협력단 펌웨어 퍼징 장치 및 방법
US11573887B2 (en) * 2020-11-20 2023-02-07 Vdoo Connected Trust Ltd. Extracting code patches from binary code for fuzz testing

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190041912A (ko) * 2018-09-28 2019-04-23 한국인터넷진흥원 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
D. R. Jeong, K. Kim, B. Shivakumar, B. Lee, and I. Shin, "Razzer: Finding kernel race bugs through fuzzing," in Proceedings of the IEEE Symposium on Security and Privacy, 2019, pp. 754-768.
HyungSeok Han외 1명, "IMF: Inferred Model-based Fuzzer", CCS '17: Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, pp2345-2358,(2017.10.30.)* *
J. Corina, A. Machiry, C. Salls, Y. Shoshitaishvili, S. Hao, C. Kruegel, and G. Vigna, "DIFUZE: Interface aware fuzzing for kernel drivers," in Proceedings of the ACM Conference on Computer and Communications Security, 2017, pp. 2123-2138.
Rao Arvind Mallari,"Linux Kernel System Call Fuzzing", Masaryk University Faculty of Informatics, pp1-42,(2018.12.31.)* *
S. Pailoor, A. Aday, and S. Jana, "MoonShine: Optimizing OS fuzzer seed selection with trace distillation," in Proceedings of the USENIX Security Symposium, 2018, pp. 729-743.
S. Schumilo, C. Aschermann, R. Gawlik, S. Schinzel, and T. Holz, "kAFL: Hardware-assisted feedback fuzzing for OS kernels," in Proceedings of the USENIX Security Symposium, 2017, pp. 167-182.

Also Published As

Publication number Publication date
US20230051654A1 (en) 2023-02-16
KR102578430B1 (ko) 2023-09-15
US11860765B2 (en) 2024-01-02

Similar Documents

Publication Publication Date Title
US11003764B2 (en) System and method for exploiting attack detection by validating application stack at runtime
US8949797B2 (en) Optimizing performance of integrity monitoring
Vidas et al. A5: Automated analysis of adversarial android applications
US10698668B1 (en) Custom code transformations during compilation process
Baliga et al. Automatic inference and enforcement of kernel data structure invariants
Kim et al. {CAB-Fuzz}: Practical Concolic Testing Techniques for {COTS} Operating Systems
EP2979219B1 (en) Suspicious program detection
US10055585B2 (en) Hardware and software execution profiling
US10229268B2 (en) System and method for emulation-based detection of malicious code with unmet operating system or architecture dependencies
US10579491B2 (en) Method and system for automated injection of process type specific in process agents on process startup
US20050108562A1 (en) Technique for detecting executable malicious code using a combination of static and dynamic analyses
Nielsen et al. Nodest: feedback-driven static analysis of Node. js applications
Livshits et al. Automatic mediation of {Privacy-Sensitive} resource access in smartphone applications
Choi et al. NTFuzz: Enabling type-aware kernel fuzzing on windows with static binary analysis
KR20090017598A (ko) 소프트웨어를 분석하기 위한 방법 및 시스템
Zhang et al. Ripple: Reflection analysis for android apps in incomplete information environments
CA3190145A1 (en) Automated application vulnerability and risk assessment
US20220335135A1 (en) Vulnerability analysis and reporting for embedded systems
Macias et al. Webjshrink: a web service for debloating java bytecode
Kim et al. FIRM-COV: high-coverage greybox fuzzing for IoT firmware via optimized process emulation
US11860765B2 (en) Method and system for fuzzing windows kernel by utilizing type information obtained through binary static analysis
EP4276665A1 (en) Analyzing scripts to create and enforce security policies in dynamic development pipelines
EP4160455A1 (en) Behavior analysis based on finite-state machine for malware detection
Mansouri et al. Eliminating vulnerabilities by disabling unwanted functionality in binary programs
Kwon et al. Static detection of unsafe component loadings

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