KR20210115728A - 전자 장치 및 이의 제어 방법 - Google Patents

전자 장치 및 이의 제어 방법 Download PDF

Info

Publication number
KR20210115728A
KR20210115728A KR1020200031929A KR20200031929A KR20210115728A KR 20210115728 A KR20210115728 A KR 20210115728A KR 1020200031929 A KR1020200031929 A KR 1020200031929A KR 20200031929 A KR20200031929 A KR 20200031929A KR 20210115728 A KR20210115728 A KR 20210115728A
Authority
KR
South Korea
Prior art keywords
function
parameter
called
code
fuzzing
Prior art date
Application number
KR1020200031929A
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 KR1020200031929A priority Critical patent/KR20210115728A/ko
Priority to PCT/KR2021/000884 priority patent/WO2021187743A1/ko
Publication of KR20210115728A publication Critical patent/KR20210115728A/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/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
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • 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

Abstract

전자 장치가 개시된다. 본 개시에 따른 전자 장치는, 적어도 하나의 함수를 호출하는 테스트 코드(code) 및 적어도 하나의 함수에 대한 라이브러리 코드를 저장하는 메모리 및 테스트 코드가 호출하는 함수에 대한 파라미터(parameter)를 함수에 대한 라이브러리 코드를 이용하여 식별하고, 식별된 파라미터를 기초로 함수의 호출과 관련된 퍼징 소스 코드(Fuzzing source code)를 제공하는 프로세서를 포함한다.

Description

전자 장치 및 이의 제어 방법 { ELECTRONIC APPARATUS AND CONTROL METHOD THEREOF }
본 개시는 전자 장치 및 이의 제어 방법에 관한 것으로, 구체적으로는 테스트 코드에 대한 퍼징 코드(fuzzing code)(또는 퍼저 코드(fuzzer code))를 제공하는 전자 장치 및 이의 제어 방법에 관한 것이다.
소프트웨어 개발자는 자신이 개발한 소프트웨어에 대하여 보안 테스트를 하고자 할 때, 다양한 테스트 방법 중에서 퍼징(fuzzing) 또는 퍼즈 테스트(fuzz test)(이하, 퍼징)를 수행할 수 있다. 퍼징은 소프트웨어 테스트 기법 중 하나로, 컴퓨터 프로그램에 유효하면서도 예상치 않은 무작위의 데이터를 입력하여 소프트웨어가 결함 없이 동작하는지 입증하기 위하여 수행된다.
소프트웨어 개발에 있어서 보안 테스트는 중요한 과정이지만, 소프트웨어 개발자가 퍼징을 수행하기 위해서는, 퍼징 프레임워크(fuzzing framework)에 대한 이해를 필요로 하고, 퍼징 코드(fuzzing code)를 직접 작성해야 하는 부담이 존재하였다.
본 개시는 상술한 문제점을 해결하기 위한 것으로, 구체적으로 소프트웨어 개발자가 개발한 소프트웨어에 대한 퍼징 코드(fuzzing code)를 자동으로 생성하는 전자 장치 및 이의 제어 방법을 제공함에 있다.
본 개시의 일 실시 예에 따른 전자 장치는, 함수를 호출하는 테스트 코드(code) 및 상기 적어도 하나의 함수에 대한 라이브러리 코드를 저장하는 메모리; 및 상기 테스트 코드가 호출하는 함수에 대한 파라미터(parameter)를 상기 함수에 대한 라이브러리 코드를 이용하여 식별하고, 상기 식별된 파라미터를 기초로 상기 호출된 함수에 대한 퍼징 소스 코드(Fuzzing source code)를 제공하는 프로세서;를 포함한다.
한편, 본 개시의 또 다른 일 실시 예에 따른 전자 장치의 제어 방법은, 테스트 코드(code)가 호출하는 함수에 대한 파라미터(parameter)를 상기 함수에 대한 라이브러리 코드를 이용하여 식별하는 단계; 및 상기 파라미터를 기초로 상기 호출된 함수에 대한 퍼징 소스 코드(Fuzzing source code)를 제공하는 단계;를 포함한다.
도 1은 본 개시의 다양한 실시 예에 따른 전자 장치의 구성을 설명하기 위한 블록도,
도 2는 본 개시의 일 실시 예에 따른 퍼져(fuzzer) 생성 시스템을 설명하기 위한 도면,
도 3은 본 개시의 일 실시 예에 따른 함수 분석 모듈을 설명하기 위한 도면,
도 4 내지 도 7은 본 개시의 일 실시 예에 따른 전자 장치를 설명하기 위한 도면, 및
도 8은 본 개시의 다양한 실시 예에 따른 전자 장치의 제어 방법을 설명하기 위한 흐름도이다.
이하, 본 개시의 다양한 실시 예가 첨부된 도면을 참조하여 기재된다. 그러나, 이는 본 개시에 기재된 기술을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 개시의 실시 예의 다양한 변경(modifications), 균등물(equivalents), 및/또는 대체물(alternatives)을 포함하는 것으로 이해되어야 한다. 도면의 설명과 관련하여, 유사한 구성요소에 대해서는 유사한 참조 부호가 사용될 수 있다.
본 개시에서, "가진다," "가질 수 있다," "포함한다," 또는 "포함할 수 있다" 등의 표현은 해당 특징(예: 수치, 기능, 동작, 또는 부품 등의 구성요소)의 존재를 가리키며, 추가적인 특징의 존재를 배제하지 않는다.
본 개시에서, "A 또는 B," "A 또는/및 B 중 적어도 하나," 또는 "A 또는/및 B 중 하나 또는 그 이상"등의 표현은 함께 나열된 항목들의 모든 가능한 조합을 포함할 수 있다. 예를 들면, "A 또는 B," "A 및 B 중 적어도 하나," 또는 "A 또는 B 중 적어도 하나"는, (1) 적어도 하나의 A를 포함, (2) 적어도 하나의 B를 포함, 또는 (3) 적어도 하나의 A 및 적어도 하나의 B 모두를 포함하는 경우를 모두 지칭할 수 있다.
본 개시에서 사용된 "제1," "제2," "첫째," 또는 "둘째,"등의 표현들은 다양한 구성요소들을, 순서 및/또는 중요도에 상관없이 수식할 수 있고, 한 구성요소를 다른 구성요소와 구분하기 위해 사용될 뿐 해당 구성요소들을 한정하지 않는다.
어떤 구성요소(예: 제1 구성요소)가 다른 구성요소(예: 제2 구성요소)에 "(기능적으로 또는 통신적으로) 연결되어((operatively or communicatively) coupled with/to)" 있다거나 "접속되어(connected to)" 있다고 언급된 때에는, 상기 어떤 구성요소가 상기 다른 구성요소에 직접적으로 연결되거나, 다른 구성요소(예: 제3 구성요소)를 통하여 연결될 수 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소(예: 제1 구성요소)가 다른 구성요소(예: 제2 구성요소)에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 상기 어떤 구성요소와 상기 다른 구성요소 사이에 다른 구성요소(예: 제 3 구성요소)가 존재하지 않는 것으로 이해될 수 있다.
본 개시에서 사용된 표현 "~하도록 구성된(또는 설정된)(configured to)"은 상황에 따라, 예를 들면, "~에 적합한(suitable for)," "~하는 능력을 가지는(having the capacity to)," "~하도록 설계된(designed to)," "~하도록 변경된(adapted to)," "~하도록 만들어진(made to)," 또는 "~를 할 수 있는(capable of)"과 바꾸어 사용될 수 있다. 용어 "~하도록 구성된(또는 설정된)"은 하드웨어적으로 "특별히 설계된(specifically designed to)" 것만을 반드시 의미하지 않을 수 있다. 대신, 어떤 상황에서는, "~하도록 구성된 장치"라는 표현은, 그 장치가 다른 장치 또는 부품들과 함께 "~할 수 있는" 것을 의미할 수 있다. 예를 들면, 문구 "A, B, 및 C를 수행하도록 구성된(또는 설정된) 부프로세서"는 해당 동작을 수행하기 위한 전용 프로세서(예: 임베디드 프로세서), 또는 메모리 장치에 저장된 하나 이상의 소프트웨어 프로그램들을 실행함으로써, 해당 동작들을 수행할 수 있는 범용 프로세서(generic-purpose processor)(예: CPU(Central Processing Unit) 또는 application processor)를 의미할 수 있다.
본 개시의 다양한 실시 예에 따른 전자 장치는, 예를 들면, 데스크탑 PC, 랩탑 PC, 넷북 컴퓨터, 워크 스테이션, 서버, 스마트폰, 태블릿 PC, 이동 전화기, 영상 전화기, 웨어러블 장치 중 적어도 하나를 포함할 수 있다.
한편, 본 개시에서, 사용자라는 용어는 전자 장치를 사용하는 사람 또는 전자 장치를 사용하는 장치(예: 인공지능 전자 장치)를 지칭할 수 있다.
또한, 본 개시에서 함수는 소프트웨어에서 특정 동작이나 서비스를 수행하는 일정 코드 부분을 나타내는 것으로, 프로그램에 포함되는 함수 뿐만 아니라, 서브루틴(subroutine), 루틴(routine), 메소드(method), 프로시저(procedure)와 같은 프로그램 단위를 지칭할 수 있다.
이하에서는 도면을 참조하여 본 개시에 대해 상세히 설명하기로 한다.
도 1은 본 개시의 다양한 실시 예에 따른 전자 장치의 구성을 설명하기 위한 블록도이다. 도 1에 도시된 바와 같이, 전자 장치(100)는 메모리(110) 및 프로세서(120)를 포함한다.
메모리(110)는 전자 장치(100)의 동작에 필요한 각종 프로그램 및 데이터 등을 저장하기 위한 구성요소이다. 메모리(110)는 비휘발성 메모리, 휘발성 메모리, 플래시메모리(flash-memory), 하드디스크 드라이브(HDD) 또는 솔리드 스테이트 드라이브(SSD) 등으로 구현될 수 있다. 메모리(110)는 프로세서(120)에 의해 액세스되며, 프로세서(120)에 의한 데이터의 독취/기록/수정/삭제/갱신 등이 수행될 수 있다. 본 개시에서 메모리라는 용어는 메모리(110), 프로세서(120) 내 롬(미도시), 램(미도시) 또는 전자 장치(100)에 장착되는 메모리 카드(미도시)(예를 들어, micro SD 카드, 메모리 스틱)를 포함할 수 있다.
메모리(110)에는 적어도 하나의 함수를 호출하는 테스트 코드(code) 및 테스트 코드에서 호출되는 적어도 하나의 함수에 대한 라이브러리 코드가 저장될 수 있다. 여기에서, 테스트 코드는 사용자가 작성한 프로그램의 각각의 모듈들이 사용자의 의도대로 정확하게 작동하는지 테스트하기 위한 코드를 나타낸다. 본 개시에서 테스트 코드는 유닛 테스트(unit test) 소스 코드를 의미할 수 있다. 테스트 코드는 프로그램 모듈을 테스트하기 위하여 적어도 하나의 함수를 호출할 수 있다. 이때, 테스트 코드는 API(application programming interface)를 이용하여 특정 함수에 접근할 수 있다. 이를 위하여, 메모리(110)에는 API 정보가 저장되어 있을 수 있다.
그리고, 메모리(110)에는 테스트 코드 내 함수 호출에 대한 퍼징 소스 코드(Fuzzing source code)를 생성하는 퍼져(fuzzer) 생성 시스템을 포함할 수 있다. 이에 대해서는 도 2에서 후술하기로 한다.
프로세서(120)는 메모리(미도시)와 전기적으로 연결되어 전자 장치(100)의 전반적인 동작 및 기능을 제어할 수 있다. 예를 들어, 프로세서(120)는 운영 체제 또는 응용 프로그램을 구동하여 프로세서(120)에 연결된 하드웨어 또는 소프트웨어 구성요소들을 제어할 수 있고, 각종 데이터 처리 및 연산을 수행할 수 있다. 또한, 프로세서(120)는 다른 구성요소들 중 적어도 하나로부터 수신된 명령 또는 데이터를 휘발성 메모리에 로드하여 처리하고, 다양한 데이터를 비휘발성 메모리에 저장할 수 있다.
이를 위해, 프로세서(120)는 해당 동작을 수행하기 위한 전용 프로세서(예, 임베디드 프로세서) 또는 메모리 디바이스에 저장된 하나 이상의 소프트웨어 프로그램을 실행함으로써, 해당 동작들을 수행할 수 있는 범용 프로세서(예: CPU (Central Processing Unit) 또는 application processor)로 구현될 수 있다.
본 개시에서, 프로세서(120)는 디지털 신호를 처리하는 디지털 시그널 프로세서(digital signal processor(DSP), 마이크로프로세서(microprocessor), TCON(Time controller)으로 구현될 수 있다. 다만, 이에 한정되는 것은 아니며, 중앙처리장치(central processing unit(CPU)), MCU(Micro Controller Unit), MPU(micro processing unit), 컨트롤러(controller), 어플리케이션 프로세서(application processor(AP)), GPU(graphics-processing unit) 또는 커뮤니케이션 프로세서(communication processor(CP)), ARM 프로세서 중 하나 또는 그 이상을 포함하거나, 해당 용어로 정의될 수 있다. 또한, 프로세서(120)는 프로세싱 알고리즘이 내장된 SoC(System on Chip), LSI(large scale integration)로 구현될 수도 있고, FPGA(Field Programmable gate array) 형태로 구현될 수도 있다.
프로세서(120)는 테스트 코드가 호출하는 함수에 대한 파라미터(parameter)를 호출된 함수에 대한 라이브러리 코드를 이용하여 식별하고, 식별된 파라미터를 기초로 함수의 호출과 관련된 퍼징 소스 코드를 제공할 수 있다. 여기에서, 함수의 호출과 관련된 퍼징 소스 코드라 함은, 테스트 코드에 포함된 함수 호출을 복수 회 반복하면서 호출되는 함수의 파라미터에 다양한 값을 입력하고, 다양한 입력 값에 따른 출력 값을 기초로 테스트 코드에 오류나 결함이 존재하는지 판단하는 소스 코드를 의미한다. 퍼징 소스 코드는 프로그래밍 언어로 기술될 수 있다. 이때 프로그래밍 언어는 특정 언어에 한정되지 않으며, C, C++, JAVA, Python, Visual Basic 과 같은 다양한 형태의 언어가 될 수 있다.
프로세서(120)는 퍼져 생성 시스템을 이용하여 테스트 코드를 분석할 수 있다. 프로세서(120)는 테스트 코드의 구성을 판단하고, 테스트 코드 내의 함수 호출을 식별할 수 있다. 이때, 프로세서(120)는 API 정보를 기초로 테스트 코드 내의 함수 호출을 식별할 수 있다.
그리고, 프로세서(120)는 퍼져 생성 시스템을 기초로 호출된 함수의 라이브러리 코드를 이용하여 호출된 함수의 파라미터의 타입, 사이즈, 파라미터에 변수 값이 할당되었는지 여부, 복수의 파라미터 간의 연관성과 같은 파라미터의 특징을 식별할 수 있다. 여기에서, 파라미터는 함수의 입력으로 제공되는 데이터를 나타낸다.
프로세서(120) 테스트 코드의 분석 결과 및 라이브러리 코드를 이용하여 식별된 파라미터를 기초로 퍼징 소스 코드를 제공할 수 있다. 구체적으로, 프로세서(120)는 퍼징 소스 코드를 표시하도록 디스플레이(미도시)를 제어할 수 있다. 다만, 이는 일 실시 예일 뿐이며, 프로세서(120)는 통신 인터페이스(미도시)를 통하여 퍼징 소스 코드를 디스플레이 장치(미도시)에 전송할 수도 있다.
사용자는 테스트 코드에 대한 퍼징 코드를 소스 코드 형태로 제공받을 수 있다는 점에서, 사용자는 퍼징 소스 코드에 대한 피드백을 전자 장치(100)에 제공할 수도 있다. 가령, 사용자는 퍼징 소스 코드를 분석하여 파라미터를 수정하거나, 퍼징의 대상이 되는, 테스트 코드 내의 함수를 선택할 수도 있다.
이와 같이, 프로세서(120)는 퍼져 생성 시스템을 이용하여 퍼징 소스 코드를 생성하는바, 본 개시의 퍼져 생성 시스템에 관하여 우선적으로 설명하기로 한다.
도 2는 본 개시의 일 실시 예에 따른 퍼져 생성 시스템을 설명하기 위한 도면이다.
도 2에 도시된 바와 같이, 퍼져 생성 시스템(200)은 테스트 코드 분석 모듈(210), 함수 분석 모듈(220) 및 퍼징 코드 생성 모듈(230)을 포함할 수 있다.
테스트 코드 분석 모듈(210)은 테스트 코드의 구조를 분석하고, 테스트 코드 내 함수 호출을 식별할 수 있다.
구체적으로, 테스트 코드 분석 모듈(210)은 테스트 코드 내 함수 호출 중 퍼징의 대상이 되는 함수 호출(이하, 타겟 함수 호출) 및 이와 연관되는 코드를 검색할 수 있다.
더욱 구체적으로, 테스트 코드 분석 모듈(210)은 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되거나 참조되었는지를 판단할 수 있다. 이때, 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되거나 참조된 경우, 테스트 코드 분석 모듈(210)은 해당 함수의 호출에 대하여 퍼징 가능하다고 판단할 수 있다. 반면, 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되거나 참조된 바 없다면, 테스트 코드 분석 모듈(210)은 해당 함수의 호출에 대하여 퍼징이 불가능하다고 판단할 수 있다.
테스트 코드 분석 모듈(210)은 테스트 코드 내에서 함수 호출의 패턴을 분석하고, 타겟 함수 호출이 반복적으로 실행되는지 판단할 수 있다. 구체적으로, 테스트 코드 분석 모듈(210)은 타겟 함수 호출이 2번 이상인지 판단할 수 있다. 타겟 함수 호출이 2번 이상인 경우, 테스트 코드 분석 모듈(210)은 타겟 함수 호출 이전에 호출되는 제1 함수 호출 및 타겟 함수 호출 이후에 호출되는 제2 함수 호출을 식별하고, 테스트 코드 내에서 제1 함수 호출, 타겟 함수 호출, 및 제2 함수 호출이 반복되는 경우, 타겟 함수 호출이 반복적으로 행해진 것으로 판단할 수 있다.
그리고, 테스트 코드 분석 모듈(210)은 테스트 코드의 반복문 내에서 타겟 함수 호출이 이뤄지는지 판단할 수 있다. 구체적으로, 테스트 코드 분석 모듈(210)은 테스트 코드의 반복문 내에서 타겟 함수 호출이 이뤄지는 경우, 타겟 함수 호출이 반복적으로 실행되는 것으로 판단할 수 있다. 여기에서, 반복문은 C언어의 for문, while문과 같이, 코드의 일부가 반복하여 호출되도록 하는 프로그래밍 문구를 의미한다. 다만, 반복문은 for문, while문에 한정되는 것은 아니며, 프로그래밍 언어에 따라 특정 코드를 반복하도록 설정된 문구가 이에 해당될 수 있다.
테스트 코드 분석 모듈(210)을 통한 분석 결과 타겟 함수 호출이 반복적으로 실행된 것으로 판단된 경우, 퍼징 코드 생성 모듈(230)은 타겟 함수 호출이 1회만 실행되도록 퍼징 소스 코드를 생성할 수 있다.
테스트 코드 분석 모듈(210)은 타겟 함수 호출의 범위를 설정할 수 있다. 구체적으로, 테스트 코드 분석 모듈(210)은 테스트 코드에서 타겟 함수 호출이 복수 회 이뤄지는 경우, 타겟 함수 호출이 실행된 지점부터 다음 회 타겟 함수 호출이 이뤄지기 전까지를 타겟 함수 호출의 범위로 설정할 수 있다.
또한, 테스트 코드에서 타겟 함수 호출이 복수 회 이뤄지는 경우, 테스트 코드 분석 모듈(210)은 타겟 함수 호출 이전의 제1 함수 호출 및 타겟 함수 호출 이후의 제2 함수 호출을 판단하고, 제1 함수 호출 및 제2 함수 호출을 이용하여 타겟 함수 호출의 범위를 설정할 수 있다. 이에 대하여는 도 5 및 도 6에서 구체적으로 후술하기로 한다.
테스트 코드 분석 모듈(210)을 이용하여 타겟 함수 호출의 범위가 설정된 경우, 퍼징 코드 생성 모듈(230)은 설정된 타겟 함수 호출의 범위를 기초로 퍼징 소스 코드를 생성할 수 있다. 구체적으로, 퍼징 코드 생성 모듈(230)은 테스트 코드 내에서 타겟 함수 호출의 범위가 아닌 코드를 제거하여 타겟 함수 호출에 대한 퍼징 소스 코드를 생성할 수 있다.
함수 분석 모듈(220)은 테스트 코드에서 호출된 함수의 라이브러리 코드를 이용하여 호출된 함수의 파라미터를 분석할 수 있다.
도 3은 본 개시의 일 실시 예에 따른 함수 분석 모듈(220)을 설명하기 위한 도면이다. 도 3에 도시된 바와 같이, 함수 분석 모듈(220)은 Type 식별 모듈(221), Parameter 연관성 판단 모듈(222), Property 분석 모듈(223) 및 Size 판단 모듈(224)을 포함할 수 있다.
Type 식별 모듈(221)은 함수의 라이브러리 코드를 분석하여 파라미터의 타입(type)을 식별할 수 있다. 구체적으로, Type 식별 모듈(221)은 함수 내에서 파라미터에 입력되는 값을 식별하여, 파라미터의 속성을 파악할 수 있다.
Parameter 연관성 판단 모듈(222)은 함수가 복수의 파라미터를 포함하는 경우, 함수의 분석을 통하여 복수의 파라미터 간의 관계를 파악할 수 있다.
가령, 복수의 파라미터 중 제1 파라미터가 배열을 할당 받는 파라미터이고, 제2 파라미터가 제1 파라미터의 배열의 길이를 할당 받는 파라미터인 경우, Parameter 연관성 판단 모듈(222)은 제1 파라미터 및 제2 파라미터 간의 관계를 판단할 수 있다.
이때, 퍼징 코드 생성 모듈(230)은 Parameter 연관성 판단 모듈(222)을 통하여 판단된 복수의 파라미터 간의 관계를 기초로, 서로 연관되는 복수의 파라미터가 함께 퍼징되는 퍼징 소스 코드를 생성할 수 있다.
Property 분석 모듈(223)은 함수의 파라미터에 변수를 할당할 수 있는지 여부를 판단할 수 있다. 여기에서 변수는 파라미터로부터 직접 읽혀지거나 파라미터를 역참조한 결과 읽혀질 있는 숫자 또는 문자를 포함한다.
퍼징 코드 생성 모듈(230)은 Property 분석 모듈(223)의 분석 결과를 기초로, 변수 값이 읽혀지는 파라미터에 변수 값을 할당하는 퍼징 소스 코드를 생성할 수 있다. 이때, 퍼징 코드 생성 모듈(230)은 Size 판단 모듈(224)의 판단 결과를 기초로 파라미터에 할당 가능한 변수 값의 범위를 판단하고, 판단된 결과를 기초로 퍼징 소스 코드를 생성할 수 있다.
한편, Property 분석 모듈(223)은 파라미터가 복수의 필드(field)를 포함하는 구조체인 경우, 구조체에 포함된 각각의 필드에 대하여 변수가 읽혀지는지 판단하고, 변수가 읽혀지는 필드 및 변수가 읽혀지지 않는 필드를 구분할 수 있다. 그리고, 퍼징 코드 생성 모듈(230)은 구조체의 복수의 필드 중 변수가 읽혀지는 필드에 변수 값을 할당하는 퍼징 소스 코드를 생성할 수 있다.
Size 판단 모듈(224)은 파라미터의 크기를 판단할 수 있다. 상술한 바와 같이, Size 판단 모듈(224)은 Type 식별 모듈(221), Parameter 연관성 판단 모듈(222) 및 Property 분석 모듈(223)과 함께 동작할 수 있다. 한편, Type 식별 모듈(221), Parameter 연관성 판단 모듈(222), Property 분석 모듈(223) 및 Size 판단 모듈(224)이 함께 동작할 수 있음은 물론이다.
한편, 도 3에서는 함수 분석 모듈(220)이 Type 식별 모듈(221), Parameter 연관성 판단 모듈(222), Property 분석 모듈(223) 및 Size 판단 모듈(224)을 포함하는 것으로 도시하였으나, 함수 분석 모듈(220)이 반드시 Type 식별 모듈(221), Parameter 연관성 판단 모듈(222), Property 분석 모듈(223) 및 Size 판단 모듈(224)을 포함하지 않을 수도 있으며, 일부 구성 요소는 생략하거나 병합할 수도 있다. 또한, 도 3의 Type 식별 모듈(221), Parameter 연관성 판단 모듈(222), Property 분석 모듈(223) 및 Size 판단 모듈(224)에 추가적으로 모듈을 부가하여 함수 분석 모듈(220)을 구성할 수도 있다.
다시 도 2를 참조하면, 퍼징 코드 생성 모듈(230)은 테스트 코드 분석 모듈(210) 및 함수 분석 모듈(220)을 이용하여 퍼징 코드를 생성할 수 있다. 구체적으로, 퍼징 코드 생성 모듈(230)은 테스트 코드 분석 모듈(210)의 판단 결과 및 함수 분석 모듈(220)의 판단 결과를 기초로 퍼징 코드를 생성할 수 있다. 이때, 생성되는 퍼징 코드는 퍼징 소스 코드 뿐 만 아니라, 기계어로 작성된 바이너리 테스트 코드를 포함할 수도 있다.
다시 도 1을 참조하면, 프로세서(120)는 도 2 및 도 3에서 상술한 퍼져 생성 시스템을 기초로, 테스트 코드가 호출하는 함수에 대한 파라미터를 식별하고, 식별된 파라미터를 기초로 함수의 호출과 관련된 퍼징 소스 코드를 제공할 수 있다. 즉, 프로세서(120)는 상술한 테스트 코드 분석 모듈(210), 함수 분석 모듈(220) 및 퍼징 코드 생성 모듈(230)을 이용할 수 있는 바, 프로세서(120)는 테스트 코드 분석 모듈(210), 함수 분석 모듈(220) 및 퍼징 코드 생성 모듈(230)의 모든 동작을 수행할 수 있다.
가령, 프로세서(120)는 테스트 코드 분석 모듈(210)을 기초로, 테스트 코드에서의 함수 호출을 식별할 수 있다.
그리고, 프로세서(120)는 함수 분석 모듈(220) 및 호출된 함수에 대한 라이브러리 코드를 이용하여 호출되는 함수에 대한 파라미터를 식별할 수 있다.
프로세서(120)는 Property 분석 모듈(223)을 이용하여 함수의 파라미터에 변수를 할당할 수 있는지 여부를 판단할 수 있다. 여기에서 변수는 파라미터로부터 직접 읽을 수 있거나 파라미터를 역참조한 결과 읽을 수 있는 숫자 또는 문자를 포함한다.
구체적으로, 프로세서(120)는 함수의 파라미터 중 변수 값이 할당되는 파라미터를 판단하고, 판단된 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성할 수 있다. 구체적으로, 프로세서(120)는 Property 분석 모듈(223)을 이용하여 함수에 포함된 파라미터 중 변수 값이 읽혀지는 파라미터를 식별하고, 식별된 파라미터에 할당 가능한 값을 판단할 수 있다.
프로세서(120)는 변수 값이 읽혀지는(또는 read 되는) 파라미터를 식별할 수 있다. 가령, 함수의 파라미터가 int A인 경우, A에는 정수가 할당된다는 점에서, 프로세서(120)는 A를 변수 값이 읽혀지는 파라미터로 판단할 수 있다. 또한, 함수의 파라미터가 char* A 인 경우, A를 역참조한 결과 A로부터 문자를 읽을 수 있다면, 프로세서(120)는 A를 변수 값이 읽혀지는 파라미터로 판단할 수 있다. 이와 같이, 프로세서(120)는 파라미터가 포인터(pointer) 형인 경우, 파라미터를 역참조 한 결과 실제 숫자 또는 문자를 읽을 수 있는지 여부를 판단할 수 있다.
그리고, 프로세서(120)는 변수가 읽혀지지 않은 파라미터를 식별할 수도 있다. 가령, 파라미터가 int* B이고 B가 Null 포인터 체크만 수행한다면, 프로세서(120)는 B는 변수 값을 읽을 수 없다는 점에서 B에 변수를 할당할 수 없다고 판단할 수 있다. 또한, 프로세서(120)는 출력 파라미터의 경우 변수 값이 읽혀지지 않고 써진다는(write된다는) 점에서, 출력 파라미터에 변수를 할당할 수 없다고 판단할 수 있다.
프로세서(120)는 파라미터가 복수의 필드(field)를 포함하는 구조체인 경우, 구조체에 포함된 복수의 필드 중 변수 값이 할당되는 필드를 판단하고, 판단된 필드 각각의 할당 가능한 값의 범위를 설정할 수 있다. 구체적으로, 프로세서(120)는 구조체에 포함된 각각의 필드에 대하여 변수가 읽혀지는지 판단하고, 변수가 읽혀지는 필드 및 변수가 읽혀지지 않는 필드를 구분할 수 있다. 그리고, 프로세서(120)는 변수가 읽혀지는 필드에 대하여 할당 가능한 값의 범위를 설정할 수 있다.
한편, 프로세서(120)는 Type 식별 모듈(221)을 기초로, 함수의 라이브러리 코드를 분석하여 파라미터의 타입(type)을 식별할 수 있다. 구체적으로, 프로세서(120)는 함수 내에서 파라미터에 입력되는 값을 식별하여, 파라미터의 속성을 파악할 수 있다.
가령, 파라미터가 배열(array) 형태인 경우, 프로세서(120)는 라이브러리 코드를 분석하여 파라미터가 단일 포인터를 이용하는지, 다중 포인터를 이용하는지 여부를 판단할 수 있다. 또한, 파라미터가 포인터(pointer) 형태인 경우, 프로세서(120)는 라이브러리 코드를 분석하여 파라미터가 배열을 나타내는 것인지, 특정 변수를 포인터하기 위한 것인지 판단할 수 있다. 또한, 프로세서(120)는 파라미터가 배열 형태인 경우, Size 판단 모듈(224)로부터 파라미터의 사이즈, 즉 배열의 크기 정보를 획득하고, 획득한 정보를 기초로 파라미터의 타입을 식별할 수도 있다.
그리고, 프로세서(120)는 라이브러리 함수 내에서 포인터 파라미터에 대한 타입 캐스팅(type casting)을 기초로, 파라미터의 type을 식별할 수 있다. 가령, 라이브러리 함수 내에서 포인트 파라미터에 대한 타입 캐스팅이 (int *)인 경우, Type 식별 모듈(221)은 타입 캐스팅을 기초로, 파라미터가 int 형 변수를 포인트 하는 것임을 식별할 수 있다.
프로세서(120)는 파라미터가 구조체 형태인 경우, 구조체 파라미터에 포함된 복수의 필드 각각의 타입을 판단할 수 있다. 구체적으로, 프로세서(120)는 구조체를 파라미터의 집합으로 보아, 구조체 내 하나의 필드에 대한 타입을 식별하는 동작을 재귀적으로 반복할 수 있다.
한편, 프로세서(120)는 호출된 함수의 파라미터가 복수 개인 경우, 함수에 대한 라이브러리 코드를 기초로 복수의 파라미터 간의 관계를 판단할 수 있다.
복수의 파라미터 중 제1 파라미터가 배열을 할당 받는 파라미터이고, 제2 파라미터가 제1 파라미터의 배열의 길이를 할당 받는 파라미터인 경우, 프로세서(120)는 제1 파라미터 및 제2 파라미터 간의 관계를 판단할 수 있다.
가령, 아래의 함수 F1을 가정하여 설명하도록 한다.
Line 1 void F1(int* a, int len) {
Line 2 int i;
Line 3 for(i=0; i<len; i++)
Line 4 a[i]= i;
Line 5 }
상기 예시와 같이 복수의 파라미터 중 제2 파라미터(즉, int len)가 함수 내에서 제1 파라미터의 배열 인덱스로 기능하는 변수(가령, i)의 반복문 조건(i<len)으로 존재하고, 배열 길이의 기설정된 조건(가령, len은 10 이하)을 만족하는 경우, 프로세서(120)는 제1 파라미터는 배열을 나타내는 파라미터, 제2 파라미터는 배열의 크기를 나타내는 파라미터임을 판단할 수 있다.
한편, 또 다른 실시 예로 아래의 함수 F2를 가정하여 설명하도록 한다.
Line 1 void F2 (int* a, int len) {
Line 2 int k = 10;
Line 3 while(len >= 0)
Line 4 a[--len] = K--;
Line 5 }
상기 예시와 같이, 복수의 파라미터 중 제2 파라미터(int len)가 제1 파라미터의 배열 인덱스로 기능하는 변수이고, 배열 길이의 기설정된 조건(가령, len은 10 이하)을 만족하는 경우, 프로세서(120)는 제1 파라미터는 배열을 나타내는 파라미터, 제2 파라미터는 배열의 크기를 나타내는 파라미터임을 판단할 수 있다.
또 다른 예로, 아래의 함수 F3를 가정하여 설명하도록 한다.
Line 1 void F1(int* a, int i) {
Line 2 int i;
Line 3 for(i=0; i<len; i++)
Line 4 a[i]= i;
Line 5 }
상기 F3와 같은 경우, 프로세서(120)는 함수 F3의 동작을 분석하여 제1 파라미터(즉, int* a)는 배열을 나타내는 파라미터이고, 제2 파라미터(즉, int i)는 배열의 인덱스를 나타내는 파라미터임을 판단할 수 있다.
이때, 프로세서(120)는 Size 판단 모듈(224)을 이용하여 상술한 함수 F1, F2, F3의 배열을 나타내는 제1 파라미터의 크기를 판단할 수도 있다.
그리고, 프로세서(120)는 이와 같이 판단된 복수의 파라미터 간의 관계를 기초로, 복수의 파라미터 각각에 할당 가능한 값의 범위를 설정할 수 있다. 또한, 프로세서(120)는 복수의 파라미터 간의 관계를 기초로, 서로 연관되는 복수의 파라미터가 함께 퍼징되는 퍼징 소스 코드를 생성할 수 있다.
도 4는 본 개시의 일 실시 예에 따른 전자 장치를 설명하기 위한 도면이다. 구체적으로, 도 4는 본 개시의 일 실시 예에 따른 전자 장치에서 실행되는 테스트 코드를 나타낸다.
프로세서(120)는 도 2에서 상술한 테스트 코드 분석 모듈(210)을 이용하여 테스트 코드를 분석하고 테스트 코드 내 함수 호출을 식별할 수 있다. 더불어, 프로세서(120)는 테스트 코드 내의 함수 호출 중 퍼징 가능한 함수 호출을 식별할 수 있다.
구체적으로, 프로세서(120)는 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되거나 참조되었는지를 판단할 수 있다. 이때, 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되거나 참조된 경우, 테스트 코드 분석 모듈(210)은 해당 함수의 호출에 대하여 퍼징 가능하다고 판단할 수 있다.
한편, 전달인자 및 리턴 값에 대한 변수 선언 중 테스트 코드 외부에 전역으로 선언된 것이 존재하는 경우, 프로세서(120)는 전역 변수가 참조 되는 코드 영역이 테스트 코드 내에 존재하는지 판단하여 함수 호출에 대한 퍼징 가능 여부를 판단할 수 있다. 구체적으로, 프로세서(120)는 전역 변수가 참조 되는 코드 영역이 테스트 코드 내에 존재하는 것으로 판단되면, 함수 호출에 대한 퍼징을 할 수 있다고 판단할 수 있다.
예를 들어, 도 4의 테스트 코드를 참조하면, 프로세서(120)는 함수 set_id를 호출하는 함수 호출(Line 8, Line 12)을 식별하고, 함수 set_id의 파라미터(char* i, char* n 및 char* ad )에 전달되는 전달인자 id, name, address 및 함수 set_id의 리턴 값 result를 식별할 수 있다. 그리고, 프로세서(120)는 테스트 코드 내에서 전달인자 id, name, address 및 리턴 값 result가 선언되거나 참조된 영역을 탐색할 수 있다. 프로세서(120)는 전달인자 name, address및 리턴 값 result의 선언, 즉, 변수 선언이 Line 4,5,6 에서 이루어지고, 전달인자 id, name, address 및 리턴 값 result가 Line 8,9,10,12,13,14에서 참조된 것을 식별할 수 있다. 한편, 전달인자 id의 경우 테스트 코드 내에서 변수 선언이 없으므로 프로세서(120)는 id가 전역 변수로 선언된 것으로 보아 id가 참조된 영역만을 식별할 수 있다.
이와 같이, 프로세서(120)는 전달인자 id, name, address및 리턴 값 result가 선언되거나 참조된 영역을 탐색한 결과, 함수 호출 set_id에 대해 퍼징이 가능하다고 판단할 수 있다.
한편, 도 4에 도시된 바와 달리, 함수 호출에서 호출된 함수의 파라미터에 전달되는 전달 인자(argument) 및 함수 호출 결과 획득되는 리턴 값에 대응되는 변수가 테스트 코드 내에서 선언되지 않고 참조되지 않은 경우, 테스트 코드 분석 모듈(210)은 해당 함수의 호출에 대하여 퍼징 불가능하다고 판단할 수 있다.
프로세서(120)는 테스트 코드 내 함수 호출에 대하여 퍼징 가능하다고 판단된 경우, 함수 호출의 범위를 판단할 수 있다.
이와 관련하여, 도 5 내지 도 7은 본 개시의 일 실시 예에 따른 전자 장치를 설명하기 위한 도면으로, 구체적으로 함수 호출의 범위를 판단하고 함수가 복수회 호출되는 경우 함수 호출이 1회만 수행되도록 하는 전자 장치를 설명하기 위한 도면이다.
도 5는 테스트 코드 내에서 하나의 함수가 중복되어 호출되는 경우를 나타낸 도면이다. 상술한 바와 같이, 퍼징 소스 코드는 테스트 코드에서 실행되는 함수 호출을 복수 회 반복하면서 호출되는 함수의 파라미터에 다양한 값을 입력하는 것이기 때문에, 테스트 코드 내에 함수 호출이 중복되는 경우, 프로세서(120)는 함수가 1회만 호출되도록 퍼징 소스 코드를 생성할 수 있다.
이를 위하여, 우선 프로세서(120)는 테스트 코드 내에서 이뤄지는 각 함수 호출의 범위를 판단하여야 한다.
이와 관련하여, 프로세서(120)는 테스트 코드에서 함수가 반복적으로 호출되는 경우, 테스트 코드 내에서 각 함수의 호출과 관련된 범위를 설정하고, 설정된 범위를 기초로 호출된 함수에 대한 퍼징 소스 코드를 생성할 수 있다.
구체적으로, 프로세서(120)는 테스트 코드 분석 모듈(210)을 이용하여 테스트 코드에서 함수의 호출과 관련 있는 범위를 구분할 수 있다. 프로세서(120)는 테스트 코드를 탐색하면서 함수 호출된 지점의 위 또는 아래로 코드를 탐색하면서 함수의 호출과 관련된 범위를 판단할 수 있다.
프로세서(120)는 테스트 코드 내에서 함수가 첫번째로 호출된 지점을 시작점으로 하고, 함수가 두번째로 호출된 지점 이전을 종료점으로 하여, 시작점에서부터 종료점까지를 첫번째 함수 호출의 범위로 판단할 수 있다. 마찬가지로, 프로세서(120)는 테스트 코드 내에서 함수가 두번째로 호출된 지점을 시작점으로 하고, 함수가 세번째로 호출된 지점 이전을 종료점으로 하여, 시작점에서부터 종료점까지를 두번째 함수 호출의 범위로 판단할 수 있다.
가령, 도 5에 도시된 바와 같이, set_id 함수가 반복적으로 호출된 경우, 프로세서(120)는 함수가 첫번째로 호출된 지점인 Line 8을 시작점으로 하고, 함수가 두번째로 호출된 지점 이전인 Line 10을 종료점으로 하여, Line 8에서부터 Line 10까지를 첫번째 함수 호출의 범위로 판단할 수 있다. 마찬가지로, 프로세서(120)는 함수가 두번째로 호출된 지점인 Line 12를 시작점으로 하고, 함수가 종료되는 지점인 Line 16을 종료점으로 하여, Line 12에서부터 Line 15까지를 두 번째 함수 호출의 범위로 판단할 수 있다.
또한, 프로세서(120)는 테스트 코드 내에서 변수가 선언되는 부분은 모든 함수 호출의 범위로 판단할 수 있다. 예를 들어, 프로세서(120)는 변수가 선언되는 부분인 Line 4에서부터 Line 6 까지를 첫번째 함수 호출 및 두번째 함수 호출의 범위로 판단할 수 있다.
즉, 프로세서(120)는 첫번째 함수 호출의 범위를 Line 4에서부터 Line 6 까지(510) 및 Line 8에서부터 Line 10까지(520)로 판단할 수 있다. 그리고, 프로세서(120)는 두번째 함수 호출의 범위를 Line 4에서부터 Line 6 까지(510) 및 Line 12에서부터 Line 15까지(530)로 판단할 수 있다.
그리고, 프로세서(120)는 퍼징 코드 생성 모듈(230)을 이용하여, 테스트 코드에서 중복되는 두번째 함수의 호출을 삭제하고, 첫번째 함수의 호출을 반복하는 퍼징 소스 코드를 생성할 수 있다.
한편, 프로세서(120)는 서로 다른 함수의 호출이 복수 회 반복되는 경우에도, 타겟 함수 호출의 범위를 판단할 수 있다.
도 6은 서로 다른 함수의 호출이 복수 회 반복되는 경우 타겟 함수 호출의 범위를 판단하는 전자 장치를 설명하기 위한 도면이다. 여기에서 타겟 함수 호출은 퍼징의 대상이 되는 함수 호출을 나타낸다.
프로세서(120)는 테스트 코드 분석 모듈(210)을 이용하여 테스트 코드 내의 모든 함수 호출의 순서를 판단하고, 타겟 함수 호출 및 타겟 함수 호출의 이전 또는 이후에 있는 함수 호출을 식별할 수 있다.
먼저, 타겟 함수 호출이 되기 이전에 수행되는 함수 호출을 preAction 함수 호출, 타겟 함수 호출이 된 이후에 수행되는 함수 호출을 postAction 함수 호출, 타겟 함수 호출이 공통으로 필요로 하는 함수 호출을 common 함수 호출이라 하자.
프로세서(120)는 테스트 코드에서 첫번째 타겟 함수 호출을 탐색하기 이전에 탐색되는 함수 호출을 preAction 함수 호출로 판단할 수 있다.
한편, 테스트 코드에서 타겟 함수 호출이 복수 회 반복되는 경우, 프로세서(120)는 첫번째 타겟 함수 호출 이후의 두번째 타겟 함수 호출을 탐색하고, 첫번째 타겟 함수가 호출된 지점부터 두번째 타겟 함수가 호출되기 이전까지를 첫번째 타겟 함수의 범위로 설정할 수 있다.
이와 관련하여, 프로세서(120)는 타겟 함수 호출 이후의 함수 호출이 첫번째 타겟 함수 호출의 postAction 함수 호출인지, 두번째 타겟 함수 호출의 preAction 함수 호출인지 판단할 수 있다. 구체적으로, 프로세서(120)는 첫번째 타겟 함수 호출 이후의 함수 호출이 첫번째 타겟 함수 호출 이전에 호출된 preAction 함수 호출인 경우, 첫번째 타겟 함수 호출 이후의 함수 호출은 두번째 타겟 함수 호출 이후의 preAction 함수 호출로 판단할 수 있다. 반대로, 프로세서(120)는 첫번째 타겟 함수 호출 이후의 함수 호출이 첫번째 타겟 함수 호출 이전에 호출된 preAction 함수 호출이 아닌 경우, 첫번째 타겟 함수 호출 이후의 함수 호출은 첫번째 타겟 함수 호출 이후의 postAction 함수 호출로 판단할 수 있다.
한편, 첫번째 타겟 함수 호출 이전에 호출되고 그 이후로 한번도 호출되지 않은 함수 호출이 존재할 수 있다. 이 경우 프로세서(120)는 첫번째 타겟 함수 호출 이전에 호출되고 그 이후로 한번도 호출되지 않은 함수 호출을 각각의 타켓 함수 호출들이 공통으로 필요로 하는common 함수 호출로 판단할 수 있다.
프로세서(120)는 위와 같은 방식으로 테스트 코드의 처음부터 끝까지 탐색하며, 각각의 타겟 함수의 범위를 판단할 수 있다.
가령, 도 6을 참조하면, 타겟 함수 호출이 create_ui(input)이라고 가정하자. 도 6의 테스트 코드에서 타겟 함수 호출은 Line 6, 10, 14 및 18에서 수행되는 것을 알 수 있다.
프로세서(120)는 테스트 코드를 순차적으로 탐색하면서 타겟 함수 호출 이전에 호출되는 함수 호출이 존재하는지 판단할 수 있다. 도 6의 경우, 테스트 코드에서의 첫번째 함수 호출이 create_ui (input)인 바, 프로세서(120)는 타겟 함수 호출의 preAction 함수 호출은 존재하지 않는 것으로 판단할 수 있다.
그리고, 프로세서(120)는 첫번째 타겟 함수 호출 이후의 함수 호출이 첫번째 타겟 함수 호출의 postAction 함수 호출인지, 두번째 타겟 함수 호출의 preAction 함수 호출인지 판단할 수 있다. 첫번째 타겟 함수의 preAction 함수 호출이 존재하지 않기 때문에, 프로세서(120)는 첫번째 타겟 함수 호출 이후의 함수 호출이 첫번째 타겟 함수 호출의 postAction 함수 호출인 것으로 판단할 수 있다.
프로세서(120)는 이와 같이 테스트 코드의 처음부터 끝까지 탐색을 수행할 수 있으며, 테스트 코드의 처음부터 끝까지 탐색을 수행할 결과, 첫번째 타겟 함수 호출은 Line 6, 첫번째 타겟 함수 호출의 postAction 함수 호출은 Line 8, 첫번째 타겟 함수 호출의 범위는 Line 6 에서 Line 8, 두번째 타겟 함수 호출은 Line 10, 두번째 타겟 함수 호출의 postAction 함수 호출은 Line 12, 두번째 타겟 함수 호출의 범위는 Line 10 에서 Line 12, 세번째 타겟 함수 호출은 Line 14, 세번째 타겟 함수 호출의 postAction 함수 호출은 Line 16, 세번째 타겟 함수 호출의 범위는 Line 14 에서 Line 16 및 네번째 타겟 함수 호출은 Line 18, 네번째 타겟 함수 호출의 postAction 함수 호출은 Line 20, 네번째 타겟 함수 호출의 범위는 Line 18 에서 Line 20임을 판단할 수 있다.
그리고, 프로세서(120)는 퍼징 코드 생성 모듈(230)을 이용하여 첫번째 함수 호출 범위를 제외한 두번째, 세번째 및 네번째의 함수 호출 범위를 제거하고 테스트 코드를 반복 실행하는 퍼징 코드를 생성할 수 있다.
한편, 또 다른 일 실시 예에 따라, 프로세서(120)는 테스트 코드에서 함수가 호출되기 이전에 호출되는 제1 함수 및 함수가 호출된 이후에 호출되는 제2 함수를 식별할 수 있다. 그리고, 프로세서(120)는 테스트 코드 내에서 제1 함수, 호출된 함수 및 제2 함수의 호출 패턴이 반복되는 경우, 호출된 함수가 테스트 코드 내에서 반복적으로 호출된 것으로 판단할 수 있다.
이 경우에도 프로세서(120)는 제1 함수, 호출된 함수 및 제2 함수가 1회만 호출되도록 하는 퍼징 소스 코드를 생성할 수 있다.
한편, 도 7은 반복문 내에서 함수 호출이 존재하여 반복문에 의하여 함수 호출이 복수회 이루어지는 테스트 코드를 나타낸다.
프로세서(120)는 반복문 내에 존재하는 함수 호출을 식별하고, 반복문 내에서의 함수 호출의 범위를 판단할 수 있다. 이때, 프로세서(120)는 반복문 내에 하나의 함수 호출이 존재하는 경우, 반복문의 시작 위치(가령, 반복문 선언된 위치)부터 반복문의 끝 위치(가령, 중괄호('}'))가 표시된 위치를 함수 호출의 범위로 판단할 수 있다. 한편, 반복문의 시작 위치 또는 끝 위치는 프로그래밍 언어에 따라 달라질 수 있다. 가령, C 언어의 경우 반복문의 끝 위치는 중괄호('}')일 수 있지만, 다른 프로그래밍 언어의 경우 반복문의 끝 위치는 END가 될 수도 있다.
이와 같이 반복문 내에 함수 호출이 존재하는 경우, 프로세서(120)는 함수 호출이 1번만 이뤄질 수 있도록 반복문이 한번만 실행되도록 하는 소스 코드를 생성할 수 있다. 가령, 프로세서(120)는 반복문의 끝 위치 바로 이전에 'break;' 명령어를 삽입하여 반복문이 1회만 실행되면서 함수 호출이 한번만 이뤄지는 퍼징 소스 코드를 생성할 수 있다.
가령, 도 7에서 프로세서(120)는 함수의 범위가 반복문의 시작 위치인 Line 5부터 반복문의 끝 위치인 Line 8까지라고 판단할 수 있다. 이때, 프로세서(120)는 함수가 1회만 호출될 수 있도록 Line 8의 반복문의 중괄호('}') 바로 이전에 'break;'를 삽입할 수 있다. 한편, 반복문의 종료를 나타내는 명령어는 프로그래밍 언어의 종류에 따라 다양하다는 점에서, 반드시 'break;'에 한정되는 것만은 아니다.
한편, 도 8은 본 개시의 다양한 실시 예에 따른 전자 장치의 제어 방법을 설명하기 위한 흐름도이다.
우선, 전자 장치(100)에 저장된 테스트 코드를 분석할 수 있다. 구체적으로, 테스트 코드의 구성을 판단하고, 테스트 코드 내의 함수 호출을 식별할 수 있다.
테스트 코드가 호출하는 함수에 대한 파라미터를 함수에 대한 라이브러리 코드를 이용하여 식별할 수 있다(S801). 구체적으로, 호출된 함수의 파라미터의 타입, 사이즈, 파라미터에 변수 값이 할당되었는지 여부, 복수의 파라미터 간의 연관성과 같은 파라미터의 특징을 식별할 수 있다. 여기에서, 파라미터는 함수의 입력으로 제공되는 데이터를 나타낸다.
그리고, 식별된 파라미터를 기초로 함수에 대한 퍼징 소스 코드를 제공할 수 있다(S820).
구체적으로, 함수의 파라미터 중 변수 값이 할당되는 파라미터를 판단할 수 있으며, 판단된 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성할 수 있다.
이때, 함수의 파라미터가 구조체 타입인 경우, 구조체 타입에 포함된 복수의 필드 중 변수 값이 할당되는 필드를 판단하고, 판단된 필드 각각의 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성할 수 있다.
또한, 함수에 대한 라이브러리 코드를 이용하여 식별된 파라미터의 타입을 판단하고, 판단된 파라미터의 타입을 기초로 파라미터의 타입에 대응되는 값의 범위를 설정하여 퍼징 소스 코드를 생성할 수 있다.
그리고, 함수의 파라미터가 복수 개인 경우, 복수의 파라미터 중 입력 값이 할당되는 적어도 하나의 파라미터를 식별하고, 식별된 적어도 하나의 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성할 수 있다.
한편, 함수가 테스트 코드에서 반복적으로 호출되는지 판단할 수 있다. 함수가 반복적으로 호출되는 경우, 호출된 함수가 1회만 호출되도록 하는 퍼징 소스 코드를 생성할 수 있다.
구체적으로, 테스트 코드에서 함수가 호출되기 이전에 호출되는 제1 함수 및 함수가 호출된 후에 호출되는 제2 함수를 식별하고, 테스트 코드 내 제1 함수, 함수 및 제2 함수의 호출이 반복된 경우, 함수가 테스트 코드에서 반복적으로 호출된 것으로 판단할 수 있다.
또한, 함수가 호출된 이후에 호출되는 함수를 식별하고, 함수가 호출된 지점부터 식별된 함수가 호출되기 이전까지를 호출된 함수의 범위로 설정하며, 설정된 함수의 범위를 기초로, 함수에 대한 퍼징 소스 코드를 생성할 수 있다.
한편, 상술한 본 개시의 다양한 실시 예들에 따른 전자 장치(100)에서의 처리동작을 수행하기 위한 컴퓨터 명령어(computer instructions)는 비일시적 컴퓨터 판독 가능 매체(non-transitory computer-readable medium)에 저장될 수 있다. 이러한 비일시적 컴퓨터 판독 가능 매체에 저장된 컴퓨터 명령어는 특정 기기의 프로세서에 의해 실행되었을 때 상술한 다양한 실시 예에 따른 전자 장치(100)의 처리 동작을 상술한 특정 기기가 수행하도록 한다.
비일시적 판독 가능 매체란 레지스터, 캐쉬, 메모리 등과 같이 짧은 순간 동안 데이터를 저장하는 매체가 아니라 반영구적으로 데이터를 저장하며, 기기에 의해 판독(reading)이 가능한 매체를 의미한다. 구체적으로는, 상술한 다양한 어플리케이션 또는 프로그램들은 CD, DVD, 하드 디스크, 블루레이 디스크, USB, 메모리카드, ROM 등과 같은 비일시적 판독 가능 매체에 저장되어 제공될 수 있다.
또한, 이상에서는 본 개시의 바람직한 실시 예에 대하여 도시하고 설명하였지만, 본 개시는 상술한 특정의 실시 예에 한정되지 아니하며, 청구범위에서 청구하는 본 개시의 요지를 벗어남이 없이 당해 개시가 속하는 기술분야에서 통상의 지식을 가진 자에 의해 다양한 변형 실시가 가능한 것은 물론이고, 이러한 변형실시들은 본 개시의 기술적 사상이나 전망으로부터 개별적으로 이해돼서는 안 될 것이다.
100: 전자 장치 110: 메모리
120: 프로세서

Claims (20)

  1. 전자 장치에 있어서,
    적어도 하나의 함수를 호출하는 테스트 코드(code) 및 상기 적어도 하나의 함수에 대한 라이브러리 코드를 저장하는 메모리; 및
    상기 테스트 코드가 호출하는 함수에 대한 파라미터(parameter)를 상기 함수에 대한 라이브러리 코드를 이용하여 식별하고, 상기 식별된 파라미터를 기초로 상기 함수의 호출과 관련된 퍼징 소스 코드(Fuzzing source code)를 제공하는 프로세서;를 포함하는 전자 장치.
  2. 제1항에 있어서,
    상기 프로세서는,
    상기 함수의 파라미터 중 변수 값이 할당되는 파라미터를 판단하고,
    상기 판단된 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는, 전자 장치.
  3. 제2항에 있어서,
    상기 프로세서는,
    상기 함수의 파라미터가 구조체 타입인 경우, 상기 구조체 타입에 포함된 복수의 필드(field) 중 변수 값이 할당되는 필드를 판단하고, 상기 판단된 필드 각각의 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는, 전자 장치.
  4. 제1항에 있어서,
    상기 프로세서는,
    상기 함수에 대한 라이브러리 코드를 이용하여 상기 식별된 파라미터의 타입(type)을 판단하고, 상기 판단된 파라미터의 타입을 기초로 상기 파라미터의 타입에 대응되는 값의 범위를 설정하여 퍼징 소스 코드를 생성하는, 전자 장치.
  5. 제1항에 있어서,
    상기 프로세서는,
    상기 함수의 파라미터가 복수 개인 경우, 상기 함수에 대한 라이브러리 코드를 기초로 상기 복수의 파라미터 간의 관계를 판단하고, 상기 판단된 복수의 파라미터 간의 관계를 기초로, 상기 복수의 파라미터 각각에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는, 전자 장치.
  6. 제1항에 있어서,
    상기 프로세서는,
    상기 함수의 파라미터가 복수 개인 경우, 상기 복수의 파라미터 중 입력 값이 할당되는 적어도 하나의 파라미터를 식별하고, 상기 식별된 적어도 하나의 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는, 전자 장치.
  7. 제1항에 있어서,
    상기 프로세서는,
    상기 함수가 상기 테스트 코드에서 반복적으로 호출되는지 판단하고, 상기 함수가 반복적으로 호출되는 경우, 상기 함수가 1회만 호출되도록 하는 퍼징 소스 코드를 생성하는, 전자 장치.
  8. 제7항에 있어서,
    상기 프로세서는,
    상기 테스트 코드에서 상기 함수가 호출되기 이전에 호출되는 제1 함수 및 상기 함수가 호출된 후에 호출되는 제2 함수를 식별하고, 상기 테스트 코드 내 상기 제1 함수, 상기 함수 및 상기 제2 함수의 호출이 반복된 경우, 상기 함수가 상기 테스트 코드에서 반복적으로 호출된 것으로 판단하는, 전자 장치.
  9. 제7항에 있어서,
    상기 프로세서는,
    상기 함수가 반복적으로 호출되는 경우, 상기 테스트 코드 내에서 상기 함수의 호출과 관련된 범위를 설정하고,
    상기 설정된 범위를 기초로 상기 호출된 함수에 대한 퍼징 소스 코드를 생성하는, 전자 장치.
  10. 제1항에 있어서,
    상기 프로세서는,
    상기 함수의 파라미터에 전달되는 전달인자(argument) 및 상기 함수의 리턴 값에 대한 변수 선언(variable declaration)이 상기 테스트 코드에 존재하는지 판단하고, 상기 변수 선언이 존재하는 경우, 상기 함수 호출에 대한 퍼징이 가능하다고 판단하는, 전자 장치.
  11. 전자 장치의 제어 방법에 있어서,
    테스트 코드(code)가 호출하는 함수에 대한 파라미터(parameter)를 상기 함수에 대한 라이브러리 코드를 이용하여 식별하는 단계; 및
    상기 식별된 파라미터를 기초로 상기 함수에 대한 퍼징 소스 코드(Fuzzing source code)를 제공하는 단계;를 포함하는, 제어 방법.
  12. 제11항에 있어서,
    상기 함수의 파라미터 중 변수 값이 할당되는 파라미터를 판단하는 단계;
    상기 판단된 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  13. 제12항에 있어서,
    상기 함수의 파라미터가 구조체 타입인 경우, 상기 구조체 타입에 포함된 복수의 필드(field) 중 변수 값이 할당되는 필드를 판단하는 단계; 및
    상기 판단된 필드 각각의 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  14. 제11항에 있어서,
    상기 함수에 대한 라이브러리 코드를 이용하여 상기 식별된 파라미터의 타입(type)을 판단하는 단계; 및
    상기 판단된 파라미터의 타입을 기초로 상기 파라미터의 타입에 대응되는 값의 범위를 설정하여 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  15. 제11항에 있어서,
    상기 함수의 파라미터가 복수 개인 경우, 상기 함수에 대한 라이브러리 코드를 기초로 상기 복수의 파라미터 간의 관계를 판단하는 단계; 및
    상기 판단된 복수의 파라미터 간의 관계를 기초로, 상기 복수의 파라미터 각각에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  16. 제11항에 있어서,
    상기 함수의 파라미터가 복수 개인 경우, 상기 복수의 파라미터 중 입력 값이 할당되는 적어도 하나의 파라미터를 식별하는 단계; 및
    상기 식별된 적어도 하나의 파라미터에 할당 가능한 값의 범위를 설정하여 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  17. 제11항에 있어서,
    상기 함수가 상기 테스트 코드에서 반복적으로 호출되는지 판단하는 단계; 및
    상기 함수가 반복적으로 호출되는 경우, 상기 호출된 함수가 1회만 호출되도록 하는 퍼징 소스 코드를 생성하는 단계;를 더 포함하는, 제어 방법.
  18. 제17항에 있어서,
    상기 테스트 코드에서 상기 함수가 호출되기 이전에 호출되는 제1 함수 및 상기 함수가 호출된 후에 호출되는 제2 함수를 식별하는 단계; 및
    상기 테스트 코드 내 상기 제1 함수, 상기 함수 및 상기 제2 함수의 호출이 반복된 경우, 상기 함수가 상기 테스트 코드에서 반복적으로 호출된 것으로 판단하는 단계;를 더 포함하는, 제어 방법.
  19. 제11항에 있어서,
    상기 함수가 호출된 이후에 호출되는 함수를 식별하는 단계;
    상기 함수가 호출된 지점부터 상기 식별된 함수가 호출되기 이전까지를 상기 호출된 함수의 범위로 설정하는 단계; 및
    상기 설정된 함수의 범위를 기초로, 상기 함수에 대한 퍼징 소스 코드를 생성하는, 제어 방법.
  20. 전자 장치의 제어 방법을 실행하기 위한 프로그램을 포함하는 컴퓨터 판독가능 기록매체 있어서,
    테스트 코드(code)가 호출하는 함수에 대한 파라미터(parameter)를 상기 함수에 대한 라이브러리 코드를 이용하여 식별하는 단계; 및
    상기 파라미터를 기초로 상기 함수에 대한 퍼징 소스 코드(Fuzzing source code)를 제공하는 단계;를 포함하는, 기록 매체
KR1020200031929A 2020-03-16 2020-03-16 전자 장치 및 이의 제어 방법 KR20210115728A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020200031929A KR20210115728A (ko) 2020-03-16 2020-03-16 전자 장치 및 이의 제어 방법
PCT/KR2021/000884 WO2021187743A1 (ko) 2020-03-16 2021-01-22 전자 장치 및 이의 제어 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200031929A KR20210115728A (ko) 2020-03-16 2020-03-16 전자 장치 및 이의 제어 방법

Publications (1)

Publication Number Publication Date
KR20210115728A true KR20210115728A (ko) 2021-09-27

Family

ID=77771096

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200031929A KR20210115728A (ko) 2020-03-16 2020-03-16 전자 장치 및 이의 제어 방법

Country Status (2)

Country Link
KR (1) KR20210115728A (ko)
WO (1) WO2021187743A1 (ko)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA3051164A1 (en) * 2016-01-24 2017-07-27 Syed Kamran HASAN Computer security based on artificial intelligence
KR20180076550A (ko) * 2016-12-28 2018-07-06 충남대학교산학협력단 다중 함수 정적 분석 장치 및 방법

Also Published As

Publication number Publication date
WO2021187743A1 (ko) 2021-09-23

Similar Documents

Publication Publication Date Title
US8732669B2 (en) Efficient model checking technique for finding software defects
CN110554965B (zh) 自动化模糊测试方法及相关设备、计算机可读存储介质
US9710355B2 (en) Selective loading of code elements for code analysis
US20090144702A1 (en) System And Program Product for Determining Java Software Code Plagiarism and Infringement
US9454467B2 (en) Method and apparatus for mining test coverage data
US7530056B1 (en) Method and system for detecting runtime defects in a program by comparing correct and incorrect runs
US20080270855A1 (en) Method For Detecting Memory Error
US7895575B2 (en) Apparatus and method for generating test driver
CN110363004B (zh) 一种代码漏洞检测方法、装置、介质及设备
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
US9836379B2 (en) Method and system for generating a memory trace of a program code executable on a programmable target
US20080288931A1 (en) Using Dynamic Call Graphs For Creating State Machines
US20100275188A1 (en) Intermediate Language Representation and Modification
CN105302717A (zh) 一种大数据平台的检测方法及装置
JP6142705B2 (ja) オブジェクト指向言語のための記号テストドライバの反復生成
CN105760292A (zh) 一种用于单元测试的断言验证方法和装置
US11868465B2 (en) Binary image stack cookie protection
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
CN113094252A (zh) 测试用例生成方法、装置、计算机设备及存储介质
KR20210115728A (ko) 전자 장치 및 이의 제어 방법
CN114386045B (zh) 一种Web应用程序漏洞检测方法、装置及存储介质
KR102403351B1 (ko) 바이너리 취약점 식별 코드 생성 방법, 그리고 이를 구현하기 위한 장치
CN111796832B (zh) 热补丁文件生成方法、装置、设备及存储介质
US9495278B2 (en) Dynamic discovery of data segments within instrumented code
CN111611032B (zh) 一种用户界面绘制层级、过度绘制的检测方法及装置