DBPIA-NURIMEDIA

Similar documents
09권오설_ok.hwp

JVM 메모리구조

example code are examined in this stage The low pressure pressurizer reactor trip module of the Plant Protection System was programmed as subject for

À±½Â¿í Ãâ·Â

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

High Resolution Disparity Map Generation Using TOF Depth Camera In this paper, we propose a high-resolution disparity map generation method using a lo

05( ) CPLV12-04.hwp

슬라이드 1

Microsoft Word - FunctionCall

PowerPoint 프레젠테이션

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

chap 5: Trees

<35335FBCDBC7D1C1A42DB8E2B8AEBDBAC5CDC0C720C0FCB1E2C0FB20C6AFBCBA20BAD0BCAE2E687770>

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Nov.; 26(11),

Microsoft PowerPoint - ch07 - 포인터 pm0415

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE. vol. 29, no. 10, Oct ,,. 0.5 %.., cm mm FR4 (ε r =4.4)

Microsoft PowerPoint - chap06-2pointer.ppt

(JBE Vol. 21, No. 1, January 2016) (Regular Paper) 21 1, (JBE Vol. 21, No. 1, January 2016) ISSN 228

03-서연옥.hwp

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Jan.; 26(1),

DBPIA-NURIMEDIA

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE. vol. 29, no. 6, Jun Rate). STAP(Space-Time Adaptive Processing)., -

Frama-C/JESSIS 사용법 소개

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Jun.; 27(6),

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

지능정보연구제 16 권제 1 호 2010 년 3 월 (pp.71~92),.,.,., Support Vector Machines,,., KOSPI200.,. * 지능정보연구제 16 권제 1 호 2010 년 3 월

인문사회과학기술융합학회

10( ) CPLV11-90.hwp

11장 포인터

학습영역의 Taxonomy에 기초한 CD-ROM Title의 효과분석

04 최진규.hwp

DBPIA-NURIMEDIA

°í¼®ÁÖ Ãâ·Â

Journal of Educational Innovation Research 2018, Vol. 28, No. 3, pp DOI: NCS : * A Study on

Observational Determinism for Concurrent Program Security

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

11장 포인터

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Jul.; 27(7),

歯3일_.PDF

DBPIA-NURIMEDIA

07변성우_ok.hwp

KNK_C_05_Pointers_Arrays_structures_summary_v02

DE1-SoC Board

목 차

DBPIA-NURIMEDIA

<30362E20C6EDC1FD2DB0EDBFB5B4EBB4D420BCF6C1A42E687770>

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Mar.; 28(3),

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

10 이지훈KICS hwp

Software Requirrment Analysis를 위한 정보 검색 기술의 응용

Ver. T3_DWS.UTP-1.0 Unit Testing Plan for Digital Watch System Test Plan Test Design Specification Test Cases Specification Date Team Infor

서현수

2017 년 6 월한국소프트웨어감정평가학회논문지제 13 권제 1 호 Abstract

14.531~539(08-037).fm

금오공대 컴퓨터공학전공 강의자료

Microsoft Word - [TP_3][T1]UTP.docx

. 서론,, [1]., PLL.,., SiGe, CMOS SiGe CMOS [2],[3].,,. CMOS,.. 동적주파수분할기동작조건분석 3, Miller injection-locked, static. injection-locked static [4]., 1/n 그림

슬라이드 1

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

04_이근원_21~27.hwp

Journal of Educational Innovation Research 2017, Vol. 27, No. 3, pp DOI: (NCS) Method of Con

DBPIA-NURIMEDIA

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

untitled

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Dec.; 27(12),

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Mar.; 25(3),

디지털포렌식학회 논문양식

Chapter 4. LISTS

17장 클래스와 메소드

<30312DC1A4BAB8C5EBBDC5C7E0C1A4B9D7C1A4C3A52DC1A4BFB5C3B62E687770>

<333820B1E8C8AFBFEB2D5A B8A620C0CCBFEBC7D120BDC7BFDC20C0A7C4A1C3DFC1A42E687770>

04 김영규.hwp

6.24-9년 6월

설계란 무엇인가?

금오공대 컴퓨터공학전공 강의자료

Chapter #01 Subject

3. 클라우드 컴퓨팅 상호 운용성 기반의 서비스 평가 방법론 개발.hwp

2 : (JEM) QTBT (Yong-Uk Yoon et al.: A Fast Decision Method of Quadtree plus Binary Tree (QTBT) Depth in JEM) (Special Paper) 22 5, (JBE Vol. 2

09오충원(613~623)

PowerPoint 프레젠테이션

Figure 1: 현존하는 정적 분석 기술의 한계와 본 연구의 목표. 이러한 허위경보(false alarm)를 가질 수 밖에 없는데, 오탐율(전체 경보중 허위경보의 비율)이 정확도의 척도가 된다. 유용한 정적 분석기는 충분히 낮은 허위경보율을 가져야 한다. 대형 프로그

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Feb.; 29(2), IS

DBPIA-NURIMEDIA

DBPIA-NURIMEDIA

1

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

<353420B1C7B9CCB6F52DC1F5B0ADC7F6BDC7C0BB20C0CCBFEBC7D120BEC6B5BFB1B3C0B0C7C1B7CEB1D7B7A52E687770>

THE JOURNAL OF KOREAN INSTITUTE OF ELECTROMAGNETIC ENGINEERING AND SCIENCE Jul.; 27(7),

09È«¼®¿µ 5~152s

Research & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

JUNIT 실습및발표

Microsoft Word - retail_ doc

김기남_ATDC2016_160620_[키노트].key

chap x: G입력

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

BMP 파일 처리

Transcription:

ISSN 2383-630X(Print) / ISSN 2383-6296(Online) Journal of KIISE, Vol. 44, No. 2, pp. 171-178, 2017. 2 https://doi.org/10.5626/jok.2017.44.2.171 안드로이드커널모듈취약점탐지를위한자동화된유닛테스트생성기법 (Automated Unit-test Generation for Detecting Vulnerabilities of Android Kernel Modules) 김윤호 김문주 (Yunho Kim) (Moonzoo Kim) 요약본논문에서는안드로이드커널모듈의취약점을탐지하기위한자동유닛테스트생성기법을제안한다. 안드로이드커널모듈의각함수를대상으로테스트드라이버 / 스텁함수를자동생성하고동적기호실행기법을사용하여테스트입력값을자동으로생성한다. 또한안드로이드커널모듈의함수포인터와함수선행조건을고려하지않은테스트생성으로인한거짓경보를줄이기위해정적분석을통한함수포인터매칭기법과 def-use 분석을사용한함수선행조건생성기법을개발하였다. 자동유닛테스트생성기법을안드로이드커널 3.4 버전의세모듈에적용한결과기존에존재하던취약점을모두탐지할수있었으며제안한거짓경보감소기법으로평균 44.9% 의거짓경보를제거할수있었다. 키워드 : 소프트웨어테스팅, 자동유닛테스팅, 동적기호실행, 안드로이드커널모듈테스팅 Abstract In this study, we propose an automated unit test generation technique for detecting vulnerabilities of Android kernel modules. The technique automatically generates unit test drivers/stubs and unit test inputs for each function of Android kernel modules by utilizing dynamic symbolic execution. To reduce false alarms caused by function pointers and missing pre-conditions of automated unit test generation technique, we develop false alarm reduction techniques that match function pointers by utilizing static analysis and generate pre-conditions by utilizing def-use analysis. We showed that the proposed technique could detect all existing vulnerabilities in the three modules of Android kernel 3.4. Also, the false alarm reduction techniques removed 44.9% of false alarms on average. Keywords: software testing, automated unit testing, dynamic symbolic execution, Android kernel module testing 본연구는한국연구재단한-아프리카협력기반조성사업 (NRF-2014K1A3A 논문접수 : 2016년 9월 7일 1A09063167) 및중견연구자지원사업 (2016R1A2B4008113), 미래창조과학부및정보통신기술진흥센터의대학ICT연구센터육성지원사업 (IITP-2016-H850 11610120001002) 및정보통신 방송연구개발사업 [1711035350, 초소형 고신뢰 (99.999%) OS와고성능멀티코어 OS를동시실행하는듀얼운영체제원천기술개발 ] 의지원으로수행되었음 (Received 7 September 2016) 논문수정 : 2016년 11월 12일 (Revised 12 November 2016) 심사완료 : 2016년 11월 20일 (Accepted 20 November 2016) 이논문은 2016 한국컴퓨터종합학술대회에서 안드로이드커널모듈취약점 CopyrightC2017 한국정보과학회ː 개인목적이나교육목적인경우, 이저작물 탐지를위한자동화된유닛테스트생성기법 의제목으로발표된논문을확의전체또는일부에대한복사본혹은디지털사본의제작을허가합니다. 이때, 장한것임 학생회원 : KAIST 전산학부 yunho.kim03@gmail.com 종신회원 : KAIST 전산학부교수 (KAIST) 사본은상업적수단으로사용할수없으며첫페이지에본문구와출처를반드시명시해야합니다. 이외의목적으로복제, 배포, 출판, 전송등모든유형의사용행위를하는경우에대하여는사전에허가를얻고비용을지불해야합니다. 정보과학회논문지제44권제2호 (2017. 2) moonzoo@cs.kaist.ac.kr (Corresponding author 임 )

172 정보과학회논문지제 44 권제 2 호 (2017. 2) 1. 서론안드로이드시스템은전세계스마트폰시장의 80% 이상을차지하고있으며 [1] 스마트폰이외에도스마트 TV, 시계, 카메라, 자동차등다양한전자기기에탑재되고있다. 이렇게다양한시스템에안드로이드시스템이탑재되어영향력이커짐에따라안드로이드시스템의보안취약점으로인해발생할수있는공격위협역시크게증가하고있다. 따라서안드로이드시스템의보안취약점을탐지하여공격위협을줄이는것이중요하다. 안드로이드커널모듈의취약점은공격자가전체시스템을장악할수있게하기때문에가장위험한취약점이다. 일반어플리케이션에있는보안취약점은공격에성공하더라도안드로이드권한시스템으로인해공격자가할수있는행동이제약적이다. 하지만안드로이드커널모듈의취약점을공격할경우공격자가안드로이드권한시스템에서가장많은권한을갖고있는안드로이드커널을직접조작할수있기때문에아무제약없이기기를조작하거나정보를유출할수있게된다. 본논문에서는안드로이드커널모듈의취약점을효과적으로탐지하기위해유닛테스트를자동으로생성하는기법을제안한다. 안드로이드커널모듈의각함수를대상으로유닛테스트를수행하기위한테스트드라이버 / 스텁함수를자동으로생성하고동적기호실행기법 [2] 을사용하여테스트입력값을자동으로생성한다. 또한, 안드로이드커널모듈함수를테스트할때발생할수있는거짓경보를제거하기위한정적분석기법을개발하여정확도를높였다. 본논문에서제안하는기법이실제효과적인지확인하기위해안드로이드커널 3.4 버전에서발견된 3개안드로이드커널모듈의취약점을대상으로자동유닛테스트를수행하였다. 그결과기존에존재하던취약점을모두탐지하여취약점탐지에효과적임을확인하였다. 또한제안한기법으로 44.9% 의거짓경보를제거하여거짓경보감소기술이효과적임을확인하였다. 논문구성은다음과같다. 2장에서는관련연구를설명한다. 3장에서는동적기호실행기반자동화된유닛테스트기법을설명하고 4장에서는안드로이드커널모듈자동유닛테스팅의거짓경보를줄이기위한기법을설명한다. 5장에서는실험설정및실험결과를보여주고 6장에서는결론및향후연구방향을소개하며논문을맺는다. 2. 관련연구안드로이드커널모듈의취약점을탐지하는관련연구는찾기어려우며대부분리눅스커널모듈을대상으 로테스트및검증을수행하였다. Linux Driver Verification 프로젝트 [3], Avinux 프로젝트 [4], DDVerify 프로젝트 [5] 에서는모델검증도구를사용하여리눅스디바이스드라이버소스코드를정형검증하고리눅스커널모듈의버그를검출하였다. Carburizer[6] 는정적분석기법을활용하여하드웨어장애가발생할수있는지점을탐지하여하드웨어장애로인한드라이버오류를방지하였다. BitBlaze[7] 는가상머신기반의플랫폼으로소스코드없이바이너리상태에서리눅스시스템을분석할수있으며바이너리프로그램의심볼릭분석을통해보안취약점을발견하였다. 본연구는안드로이드커널을직접타겟하고있으며유닛테스트기법을사용하여기존정형검증이나전체시스템을대상으로적용하는기법과달리확장성 (scalability) 이높아다양한종류의커널모듈에대해취약점을탐지할수있는장점이있다. 유닛테스트자동생성기법은크게동적기호실행을사용하여테스트를생성하는기법과랜덤메쏘드순열을생성하여유닛테스트를생성하는기법으로나뉜다. 먼저동적기호실행을사용하는기법은 DART[2], CUTE[8], Pex[9], CONBOL[10], Symbolic JPF[11] 등이있다. DART[2], CUTE[8] 는동적기호실행을사용하여 C 프로그램의 API 함수에대한유닛테스트케이스를자동으로생성하고 Pex[9] 는사용자가작성한 parameterized 유닛테스트드라이버를사용하여.Net 프로그램의유닛테스트케이스를자동생성한다. CONBOL[10] 은 C 프로그램의유닛테스트드라이버 / 스텁및유닛테스트케이스를자동생성하지만특정타입의타겟프로그램에특화되어있다. Symbolic JPF[11] 는시스템테스팅을수행하다가사용자가지정한메쏘드로부터동적기호실행을적용한유닛테스팅을수행하여자동으로테스트케이스를생성한다. 랜덤메쏘드순열을생성하는기법은 Randoop[12], EvoSuite[13], TestFul[14] 등이있다. Randoop은 Java 프로그램의메쏘드순열을임의로생성하면서유닛테스트대상함수의파라메터객체를생성한다. Garg et al.[15] 은 Randoop 기법에동적기호실행기법을결합하여분기커버리지를높이는연구를하였다. Evo- Suite[13] 은임의로생성한메쏘드순열에유전알고리즘 [16] 을적용하여커버리지를높였다. TestFul[14] 도유전알고리즘을적용하여테스트커버리지를높이는방법을사용하였다. 기존유닛테스트자동생성기법은안드로이드커널과같은시스템프로그램보다일반어플리케이션을대상으로개발되었기때문에안드로이드커널모듈에적

안드로이드커널모듈취약점탐지를위한자동화된유닛테스트생성기법 173 용할경우취약점탐지능력이낮고거짓경보가다수발생할수있다. 본논문에서는안드로이드커널모듈의취약점을효과적으로찾고거짓경보를줄이는기술을개발하였다. 3. 동적기호실행기반자동화된유닛테스트기법본장에서는동적기호실행기법과동적기호실행기반자동화된유닛테스트기법을설명한다. 3.1 동적기호실행기법동적기호실행기법은기존기호실행기법의한계를극복하기위해동적분석과결합하여테스트케이스를자동으로생성하는기법이다. 먼저주어진테스트대상프로그램의실행과정에서분기문, 대입문의정보를추출하기위한탐지함수를삽입하는 instrumentation 과정을수행한후, 주어진테스트케이스를입력으로테스트대상프로그램을실행한다. 프로그램수행중실행된분기문에서어떤조건을만족하였는지나타내는경로제약조건식을생성하고프로그램실행종료후생성된경로제약조건식을분석하여기존에실행하지않은새로운실행경로를테스트할수있는새로운테스트케이스를생성한다. 이과정을모든프로그램실행경로를테스트하거나사용자가지정한종료조건 ( 실행시간제한등 ) 을만족할때까지반복한다. 그림 1의예제프로그램을사용해동적기호실행기법의실행과정을더자세히살펴보자. 그림 1의 C 프로그램은세정수 x, y, z를입력으로받아가장작은값을돌려주는 min() 함수이다. 초기입력값이 x=3, y=2, z=1로주어졌다면 3번째줄의 if 조건을만족하지않아 7번째줄의 else 문을실행하게되고 7번째줄의 if 조건을만족하지않아 9번째줄의 else 구문을실행하여 z 값을리턴한다. 이때 3, 7번째줄의 if 구문을만족하지않았으므로경로제약조건식 (x<=y) (y<=z) 가생성된다. 새로운실행경로를실행하는테스트케이스를생성하기위해마지막경로조건 (y<=z) 을부정해서새경로조건 (x<=y) (y<=z) 그림 1 동적기호실행예제프로그램 Fig. 1 An example program for dynamic symbolic execution 을생성하고제약조건해결기 (constraint solver) 를사용해서경로조건을만족하는테스트케이스 x=3, y=2, z=2를생성한다. 이과정을동적기호실행이종료될때까지반복하게된다. 3.2 동적기호실행기반자동화된유닛테스트기법동적기호실행기반자동화된유닛테스팅기법 [10] 은유닛테스트에필요한테스트드라이버 / 스텁함수와유닛테스트케이스값을동적기호실행기법을사용해서자동으로생성하는기법이다. 먼저정적분석을사용하여테스트대상함수가사용하는입력값인파라메터변수와전역변수의타입, 이름을파악하고해당파라메터변수와전역변수를심볼릭입력으로생성하고테스트대상함수를호출하는테스트드라이버함수를생성한다. 그후테스트대상함수가호출하는함수들의리턴타입을분석하여해당타입에맞는심볼릭입력값을리턴하는심볼릭스텁함수로대체한다. 마지막으로생성한테스트드라이버 / 스텁, 타겟함수에동적기호실행기법을적용하여자동으로유닛테스트케이스를생성한다. 테스트드라이버생성시테스트대상함수 f() 의파라메터및전역변수의타입에따라심볼릭입력설정방법이달라진다. 표 1은각타입별로심볼릭입력설정방법을나타낸다. Primitive 타입변수의경우해당변수의타입에맞는심볼릭입력값을생성하여할당하고배열의경우각원소타입에맞는심볼릭입력값을생성하여배열의모든원소에각각할당한다. 구조체의경우각각의필드의타입에따라심볼릭입력값을설정한다. 포인터타입의경우먼저해당포인터타입의심볼릭입력값을처음설정하는경우해당포인터가가리키는타입의크기만큼메모리를할당하고가리키는타입에해당하는심볼릭입력을생성하여포인터가가리키는메모리에할당한다. 이미이전에해당포인터타입의심볼릭입력을설정한경우새로심볼릭입력을설정하지않고기존에생성한심볼릭입력값을가리키도록포인터를설정하여무한히많은심볼릭입력값을생성하는것을방지한다. 보안취약점을효과적으로탐지하기위해선취약점을탐지하기위한단언문이필요하다. 유닛테스트수행과정에서취약점을효과적으로탐지하기위해포인터참조구문, 배열참조구문및나누기연산구문을실행하기직전에널포인터참조, 잘못된배열범위참조, 0으로나누기를탐지하기위한단언문을삽입하였다. 4. 안드로이드커널모듈자동유닛테스팅의거짓경보감소기법본장에서는동적기호실행기반자동화된유닛테

174 정보과학회논문지제 44 권제 2 호 (2017. 2) Input type Primitive type Array type Struct type Pointer type 표 1 동적기호실행입력설정 Table 1 Symbolic input setting rule Symbolic input setting A unit test driver specifies a symbolic input to an input variable according to the input variable type A unit test driver specifies symbolic inputs to all elements according to the element s type A unit test driver specifies symbolic inputs to all fields of the struct type according to each field s type 1) If a symbolic input of a pointer type T is not yet generated, a unit test driver allocates memory space whose size is equal to sizeof(*t) and specifies a symbolic input according to the pointee type. 2) If a symbolic input of a pointer type T is already generated, the unit test driver assigns the existing symbolic input variable to an input variable. 스트기법을안드로이드커널모듈에적용할때발생할수있는거짓경보감소기법을설명한다. 4.1 정적분석을사용한함수포인터매칭기법안드로이드커널모듈은객체지향기법을 C로구현하기위해서커널모듈의함수를구조체의함수포인터필드로선언하여사용한다. 그림 2는 net/ceph 모듈의함수포인터초기화코드이다. 1039 번째줄에서 ceph_ connection_operations 구조체 mon_con_ops를선언하면서각각의함수포인터필드에실제어떤함수가대입되는지정의한다. 그림 2의 1040번째줄에서 get 함수포인터는 ceph_con_get 함수를가리키고있으며 1041번째줄에서 put 함수포인터는 ceph_con_put 함수를가리킨다. ceph_mon_init이라는 ceph 모듈의초기화함수가호출되면 768번째줄에서모듈이사용할함수포인터구조체를대입하는역할을수행하여커널모듈의함수포인터를초기화한다. 테스트드라이버함수가함수포인터를성공적으로초기화하려면안드로이드커널모듈에서함수포인터를어떻게초기화하는지분석하고그에따라테스트드라이버함수에서초기화를수행해야한다. 먼저테스트대상커널모듈소스코드를분석하여함수포인터를포함하고있는구조체변수를정의하는소스코드를찾는다. 그림 2의 1039번째줄에서 ceph_connection_operations 구조체타입의변수 mon_con_ops를정의하고있고해당구조체는함수포인터를포함하고있기때문에 net/ ceph 모듈의소스코드를분석하면그림 2의 1039번째줄의구조체정의를찾게된다. 그후테스트드라이버 에서 ceph_connection_operations 구조체변수를초기화할때 1039번째줄에서정의한 mon_con_ops 변수를대입함으로써테스트드라이버가함수포인터코드를정상적으로초기화할수있게한다. 4.2 Def-use 분석을사용한함수선행조건생성기법유닛테스트드라이버를자동으로생성할때테스트대상함수 f의선행조건을만족시키지않고테스트대상함수를호출함으로써거짓경보가발생할수있다. 그림 3은함수선행조건을만족하지않아발생하는거짓경보예제이다. 유닛테스트드라이버를자동생성하여유닛테스트를수행할경우 net/ceph/osd_client.c의 2123번째줄에서널포인터참조가발생할수있다는경보가발생한다. 테스트대상함수인 get_authorizer() 가 2123번째줄에서 con 포인터를참조하기전에 NULL 체크를수행하지않기때문에 get_authorizer() 의첫번재파라메터로 NULL 포인터를넘긴테스트케이스에서널포인터참조를발생시킨것이다. 하지만실제안드로이드커널모듈실행에서 get_authorizer() 는항상 net/ceph/messenger.c 파일의 get_connect_authorizer() 함수에서만호출되고 get_connect_authorizer() 함수에서 get_authorizer() 함수를호출할때 (net/ceph/messenger.c 의 849라인 ) 항상 NULL이아닌포인터를파라메터로넘겨주기때문에해당경보는거짓경보가된다. 이는테스트드라이버가 get_authorizer() 함수를호출할때 그림 2 안드로이드커널 net/ceph 모듈의함수포인터 Fig. 2 Function pointers of Android kernel net/ceph module 그림 3 함수선행조건을만족하지않아발생하는거짓경보예제 Fig. 3 An example of false alarm caused by missing pre-conditions

안드로이드커널모듈취약점탐지를위한자동화된유닛테스트생성기법 175 첫번째파라메터는 NULL이아니다 라는선행조건을만족시키지않은상태에서 get_authorizer() 를호출했기때문에발생하는거짓경보이다. 자동화된유닛테스트의거짓경보를줄이기위해 def-use 분석을활용한함수선행조건생성기법을개발하였다. 자동화된유닛테스트수행시테스트대상함수 f를테스트드라이버가직접호출하는것이아니라 f를호출하는 f 의 caller 함수를호출함으로써 f 의선행조건을생성할수있게하였다. 함수 f를호출할때함수 f 의선행조건을만족하는입력값을생성하거나선행조건만족여부를체크하는것은주로함수 f 를호출하기이전에실행되는 f 의 caller 함수들이기때문에 f 의 caller 함수들을사용해 f 를호출함으로써선행조건을만족한상태에서 f를실행할수있다. 함수 f 의모든 caller 함수를호출할경우각 caller 함수마다유닛테스트를수행해야해서테스트수행시간이길어지고, 선정할상위 caller 함수의단계를제한하지않으면 main 함수와같은프로그램시작함수까지호출하여테스트범위가커지고유닛테스트의효과가떨어진다. 따라서 def-use 분석을사용하여 caller 함수와테스트대상함수 f 의의존도를계산하고의존도가큰 caller 함수만호출하여테스트대상함수 f 의선행조건생성에큰영향을줄수있는함수만선정하였다. 함수 f 가다른함수 g에의존하는정도를나타내는의존도 Df(g) 는함수 g에서정의하고함수 f 에서사용하는변수의 def-use 관계를분석하여계산하였다. 자세한의존도계산방법은다음과같다. f 에서사용하는변수가 primitive 타입인경우 : 함수 g에서정의하고 f 에서사용한 def-use 쌍의수를합산한다. f 에서사용하는변수가포인터자체인경우 : primitive 타입과동일하게함수계산한다. f 에서사용하는변수가포인터참조인경우 : 먼저포인터분석을통해 p와동일한메모리를가리키는포인터 q, r 등을찾고 *q, *r을 def( 혹은 use) 로하는모든 def-use의수를계산하여그합을 def-use의수로계산하였다. 배열의경우각각의배열원소를해당타입에맞는개별변수로간주하였으며구조체의경우구조체의각빌드를개별변수로간주하여계산하였다. 테스트대상함수 f 와의의존도를사용하여실제호출할함수를찾는과정은다음과같다. 먼저유닛테스트드라이버가호출할시작함수를찾는다. 테스트대상함수 f 에서시작하여 f 의 caller 함수중함수 f 와 caller 함수의의존도가평균의존도보다낮은 caller 함수를만날때까지함수호출그래프를탐색한다. 평균 그림 4 서로다른 2개의테스트드라이버에서실제호출될함수그룹 Fig. 4 Two groups of functions whose code is used in two different test drivers/stubs 의존도보다의존도가큰가장상위의 caller 함수 g를시작함수로하고시작함수 g에서출발하여모든호출가능한함수정점을탐색하면서테스트대상함수 f 와의의존도가평균보다높은함수를찾아해당함수를실제호출한다. 그림 4의예제를살펴보자. 각정점은 < 함수명 : 테스트대상함수 f 의의존도 > 이고평균의존도는 5.7이다. 먼저 (a) 의경우함수 f 에서왼쪽 caller 함수 n5로탐색을시작하는경우이다. n5와 n5의 caller n2는평균의존도보다의존도가더크지만 n2의 caller n1은의존도가평균보다작기때문에 n2가시작함수가된다. n2가호출가능한함수중평균보다큰의존도를갖는함수는파란색실선에포함되는함수들이다. (b) 의경우는오른쪽 caller n6으로탐색을시작하는경우이다. n6의 caller n3는평균보다의존도가작기때문에 n6이시작노드가되며 n6이호출가능한함수중평균보다의존도가높은함수가파란실선안에포함된다. (a) 에서는 n2를시작함수로하여 n2, n4, n5, f, n7, n10이실제호출되는함수이며 (b) 에서는 n6를시작함수로하여 n6, f, n7, n9, n10이실제호출되는함수이다. 그외의함수는심볼릭값을리턴하는심볼릭스텁함수로대체된다. 5. 실험설정및결과안드로이드커널드라이버유닛테스트자동생성도구는 Clang/LLVM 3.4[17] 버전을사용하여구현하였다. 동적기호실행은 CREST-BV[18] 를사용하여수행하였다. 본도구를사용하여안드로이드커널 3.4 버전의 3개네트워크모듈 net/ceph(cve-2013-1059[19]), net/core (CVE-2013-1763[20]), net/sctp(cve-2014-0101[21]) 모듈에있는 3개취약점을대상으로테스트를수행하였다.

176 정보과학회논문지제 44 권제 2 호 (2017. 2) 그림 5 거짓경보감소기술적용후남은거짓경보비율 Fig. 5 Ratio of residual false alarms after applying false alarm reduction techniques 표 2 타겟취약점및모듈정보 Table 2 Target vulnerabilities and module information Vuln. CVE-2013-1059 CVE-2013-1763 CVE-2014-0101 Module net/ceph net/core net/sctp Type of Vuln. NULL pointer dereference Array out-of-bound access NULL pointer dereference # of source files 25 34 28 # of functions 381 487 435 # of branches 1312 4876 3780 Total LOC 11904 33972 34853 CVE-2013-1059 취약점은 net/ceph 네트워크모듈초기화과정에서잘못된초기화로인해함수포인터가 NULL로설정되는 NULL 포인터참조취약점이고 CVE-2013-1763은배열크기보다더큰값을참조하는취약점이다. CVE-2014-0101 취약점은 net/sctp 모듈에서 SCTP 통신을수행할때발생하는 NULL 포인터참조취약점이다. 표 2는테스트대상취약점과모듈의크기를보여준다. 모든실험은쿼드코어 Core I5-3570K@3.8GHz, 16GB 메모리를갖는서버 50대규모의클러스터에서수행하였으며각서버당 4개의유닛테스트를동시에수행하였다. 동적기호실행탐색기법은 DFS 탐색기법을사용하고각유닛테스트마다 5분의시간제한을설정하였다. 테스팅에서보고된경보가참인지거짓인지는다음과같은기준으로결정하였다. 해당취약점을고치기위해 다음패치에서수정될프로그램구문 (buggy statement) 을실행하고단언문이실패한테스트의경우실제버그를찾은것으로간주하고수정된구문을실행하지않고단언문을발생시킨테스트는거짓경보로간주하였다. CVE 취약점보고를탐지하는단언문이아닌다른단언문실패가탐지된경우아직보고되지않은실제취약점일가능성도있지만본실험에서는거짓경보로간주하였다. 실제취약점인지판단하기위해선각각의단언문실패를전부분석해야하나복잡한안드로이드커널코드에서발생한단언문실패를전부분석하는것은현실적으로어렵고안드로이드커널과같이완성도가높은코드의경우취약점발생가능성이낮기때문에단언문실패가보고되지않은취약점일가능성은낮다. 적용결과약 56.6분의시간이소요되었으며세모듈에서기존에보고된취약점을모두발견할수있었다. 거짓경보제거결과는그림 5와같이평균 44.9% 의거짓경보를제거할수있었다. 그림 5의가로축은테스트대상취약점을나타내며세로축은거짓경보감소기술적용후남은거짓경보비율을나타낸다. 파란색은거짓경보감소기술을적용하지않았을때를나타내며빨간색은함수포인터매칭기술만적용했을때, 녹색은함수포인터적용기술과선행조건생성기술을적용했을때남은거짓경보를나타낸다. 예를들어 CVE-2013-1059의경우함수포인터매칭기술만적용후 15.0% 의거짓경보가제거되어기존거짓경보대비 85.0% 의거짓경보만보고되었으며선행조건생성기술까지적용하면 46.3% 의거짓경보가제거되어거짓경보감소기술적용전대비 53.7% 의거짓경보만보고되었다. 세모듈평균 44.9% 의거짓경보가제거되고

안드로이드커널모듈취약점탐지를위한자동화된유닛테스트생성기법 177 감소기술적용전대비 55.1% 의거짓경보만보고되었다. 거짓경보감소기술적용전에세모듈총합 9024 개의거짓경보가발생했으며기술적용후평균 5014 개의거짓경보가발생하였다. 6. 결론및향후연구 본논문에서는안드로이드커널모듈의취약점을찾기위한자동유닛테스트기법을제안하고커널모듈유닛테스트의거짓경보를제거하기위한기법을제안하였다. 실제안드로이드커널취약점을대상으로적용한결과효과적으로취약점을탐지할수있었으며제안한거짓경보제거기술은 44.9% 의거짓경보를효과적으로제거할수있었다. 향후연구는개발기술을적용하여신규취약점을발견하여효과성을입증하는방향과거짓경보를추가적으로제거하여개발자분석시간을줄이고사용성을높이는방향으로진행하고자한다. 특히안드로이드메인커널모듈이아닌각기기제조사별로탑재되는하드웨어디바이스드라이버모듈의경우안드로이드커널메인모듈보다테스트및검증이부족하여취약점이존재할가능성이상대적으로높아각제조사별디바이스드라이버를대상으로하여추가연구를진행할예정이다. 또한그과정에서발견되는거짓경보를분석하여거짓경보를제거할수있는기술을추가개발할것이다. References [1] IDC Smartphone OS Market Share, 2015 Q2, http://www.idc.com/prodserv/smartphone-os-marke t-share.jsp [2] P. Godefroid, N. Klarlund, and K. Sen, "DART: Directed Automated Random Testing," Proc. of the 2005 ACM SIGPLAN conference on Programming Language Design and Implementation, pp. 213-223, Jun. 2005. [3] I. Zakharov, M. Mandrykin, V. Mutilin, E. Novikov, A. Petrenko, and A. Khoroshilov, "Configurable Toolset for Static Verification of Operating Systems Kernel Modules," Programming and Computer Software, Vol. 41, No. 1, pp. 49-64, Jan. 2015. [4] H. Post, C. Sinz, and W. Kuchlin, "Towards Automatic Software Model Checking of Thousands of Linux Modules-A Case Study with Avinux," Vol. 19, No. 2, pp. 155-172, Jun. 2009. [5] T. Witkowski, N. Blanc, D. Kroening, and G. Weissenbacher, "Model Checking Concurrent Linux Device Drivers," Proc. of the 22nd IEEE/ACM International Conference on Automated Software Engineering, pp. 501-504, Nov. 2007. [6] A. Kadav, M. Renzelmann, and M. Swift, "Tolerating Hardware Device Failures in Software," Proc. of the ACM SIGOPS 22nd Symposium on Operating Systems Principles, pp. 59-82, Oct. 2009. [7] D. Song, D. Brumley, H. Yin, J. Caballero, I. Jager, M. Kang, Z. Liang, J. Newsome, P. Poosankam, and P. Saxena, "BitBlaze: A New Approach to Computer Security via Binary Analysis," Proc. of the 4th International Conference on Information Systems Security, pp. 1-25, Dec. 2008. [8] K. Sen, D. Marinov, and G. Agha, "CUTE: A Concolic Unit Testing Engine for C," Proc. of the 10th European Software Engineering Conference held jointly with 13th ACM SIGSOFT International Symposium on Foundations of Software Engineering, pp. 263-272, Sep. 2005. [9] N. Tillmann, and J. De Halleux, "Pex: White Box Test Generation for.net," Proc. of the 2nd International Conference on Tests and Proofs, pp. 134-153, Apr. 2008. [10] Y. Kim, Y. Kim, T. Kim, G. Lee, Y. Jang, and M. Kim, "Automated Unit Testing of Large Industrial Embedded Software using Concolic Testing," Proc. of the 28th IEEE/ACM International Conference on Automated Software Engineering, pp. 519-528, Nov. 2013. [11] C. S. Pasareanu, P. C. Mehlitz, D. H. Bushnell, K. Gundy-Burlet, M. Lowry, S. Person, and M. Pape, "Combining Unit-level Symbolic Execution and System-level Concrete Execution for Testing NASA Software," Proc. of the 2008 International Symposium on Software Testing and Analysis, pp. 15-26, Jul. 2008. [12] C. Pacheco, S. K. Lahiri, M. D. Ernst, and T. Ball, "Feedback-directed Random Test Generation," Proc. of the 2007 International Conference on Software Engineering, pp. 75-84, May. 2007. [13] G. Fraser and A. Arcuri, "EvoSuite: Automatic Test Suite Generation for Object-oriented Software," Proc. of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering, pp. 416-419, Sep. 2011. [14] L. Baresi, P. L. Lanzi, and M. Miraz, "TestFul: An Evolutionary Test Approach for Java," Proc. of the 2010 3rd International Conference on Software Testing, Verification and Validation, pp. 185-194, Apr. 2010. [15] P. Garg, F. Ivancic, G. Balakrishnan, N. Maeda, and A. Gupta, "Feedback-directed Unit Test Generation for C/C++ Using Concolic Execution," Proc. of the 2013 International Conference on Software Engineering, pp. 132-141, May. 2013. [16] P. McMinn, "Search-based Software Test Data Generation: A Survey," Software Testing, Verification and Reliability, Vol. 14, No. 2, pp. 105-156, Jun. 2004. [17] Clang/LLVM. http://llvm.org [18] Y. Kim, M. Kim, and Y. Jang, "CREST-BV: An

178 정보과학회논문지제 44 권제 2 호 (2017. 2) improved concolic testing technique supporting bitwise operations for embedded software, Journal of KIISE: Software and Applications, Vol. 40, No. 2, pp. 90-98, Feb. 2013. (in Korean) [19] CVE-2013-1059: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2013-1059 [20] CVE-2013-1763: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2013-1763 [21] CVE-2014-0101: https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-0101 김윤호 2007년 KAIST 전산학과학사. 2007년~ 2009년 KAIST 전산학과석사. 2009년~ 2017년 KAIST 전산학부박사. 관심분야는자동화된 Concolic 유닛테스팅, 변이테스팅, 자동오류위치추정, 정형검증 김문주 1995 년 KAIST 전산학과학사. 2001 년 Univ. of Pennsylvania 박사 2002 년 ~ 2004 년 SECUi.COM 차장. 2004 년 ~ 2006 년 POSTECH 연구원. 2006 년 ~ 2012 년 KAIST 전산학과조교수. 2012 년 ~ 현재 KAIST 전산학부부교수. 관심분야는 Concolic 테스팅, 자동오류위치추정, Concurrency 테스팅, 변이테스팅, 정형검증, 내장형소프트웨어