김성민
(Sung-Min Kim)
1iD
김동관
(Dong Kwan Kim)
†iD
-
(Dept. of Computer Engineering, Mokpo National Maritime University, Korea)
Copyright © The Korean Institute of Electrical Engineers(KIEE)
Key words
Security Vulnerability, Deep Learning, Common Vulnerabilities and Exposures (CVE), Code Changes
1. 서 론
소프트웨어 보안 취약성은 소프트웨어가 외부의 침입에 대해 쉽게 노출되는 특성 (1)을 나타내며 외부 침입으로 인해 소프트웨어 오작동이 발생할 수 있어 이를 탐지하고 해결하기 위한 노력이 요구된다. 소프트웨어 취약성은 소프트웨어 개발
시점에 발생할 수도 있고 출시 후 지속적인 변경 과정에서 유입될 수도 있다. 다양한 내외부 환경의 변화는 소프트웨어 시스템의 변경을 초래하며 보안
취약성에 대한 패치 작업은 이러한 변경의 주요 원인이다. 소프트웨어 보안 취약성을 제거 또는 방지하기 위한 소프트웨어 공학적 기법, 도구, 알고리즘에
관한 연구들이 진행되고 있지만, 여전히 중요한 문제점으로 남아있다. 취약한 코드에 대한 외부 공격은 민감한 개인 정보 유출, 컴퓨팅 리소스 낭비,
시스템 오작동 등 다양하게 나타난다. 특히, 소프트웨어가 하드웨어를 제어하는 시스템의 경우 소프트웨어 보안 취약성은 경제적 손실뿐만 아니라 인명 피해를
초래할 수 있다.
보안 취약성이 높은 부분을 사전에 탐지할 수 있다면, 시스템 유지보수 측면에서 보다 효과적일 수 있다. 보안 취약성 탐지를 위해 코드 분석이 선행되야
하며 이를 위해 메트릭스 기반의 탐지, 그래프를 이용한 분석, 추상구문트리 (Abstract Syntax Tree, AST)를 위한 시멘틱 정보 추출
등의 기법을 사용한다. 또한, 머신러닝 및 딥러닝 기술의 두드러진 발전에 따라 보안 취약성 자동 탐지 문제 영역에도 해당 알고리즘들이 적용된다.
본 논문에서는 소프트웨어 보안 취약성을 자동 탐지하기 위한 Convolution Neural Network (CNN) 기반의 딥러닝 모델을 제안한다.
딥러닝은 기존 기계학습과 달리 인간의 개입없이 데이터의 특성을 자동으로 정의할 수 있으므로 보안 취약성을 자동 탐지할 수 있을 것으로 기대된다 (1). 탐지 모델을 위한 데이터 세트 구축을 위해 Common Vulnerabilities and Exposures (CVE) 데이터베이스 (2)와 깃허브 코드 저장소를 사용한다. CVE 데이터베이스는 소프트웨어 보안 취약성을 체계적으로 분류하고 취약성의 심각도에 따라 점수화하여 관리한다.
CVE 데이터베이스는 특정 보안 취약성에 해당하는 깃허브 URL을 제공한다. 그러므로 특정 보안 취약성에 해당하는 소스 코드를 깃허브에서 다운로드
할 수 있다. 이러한 소스 코드는 딥러닝 모델의 학습 및 시험을 위한 데이터로 사용된다.
본 논문은 다음과 같이 구성된다. 2장에서는 관련 연구와 배경 기술을 소개하고, 3장에서는 소프트웨어 보안 취약성 탐지 시스템 개발을 위한 연구방법을
기술한다. 4장은 제안된 모델을 이용한 실험 결과와 모델의 성능 평가를 기술한다. 5장은 결론과 향후 연구 방향을 제시한다.
2. 관련 연구
급속하게 발전하는 딥러닝 관련 기술은 소프트웨어공학의 전통적인 연구주제에도 새로운 돌파구를 제시하고 있다. 버그 탐지, 코드 자동 생성 뿐만아니라
소프트웨어에 포함된 보안 취약성에 대한 자동 탐지에도 딥러닝 알고리즘이 활용된다.
C. Catal et al. (8)는 컴퓨터비전, 이미지 처리 등에서 우수한 결과를 도출한 딥러닝 알고리즘이 소프트웨어 취약성 예측에 활용 가능함을 제안한다. 데이터 존재 여부에 따라
지도 학습, 비지도 학습, 준지도 학습 알고리즘을 소개한다. R. Scandariato et al. (9)는 프로그램 소스 코드를 일반적인 텍스트 형식으로 간주한 후, 텍스트 마이닝을 활용하여 취약점 특성을 추출한다. 소스 코드는 bag-of-words로
표현되며 단어의 빈도수를 고려하여 취약성 분류 모델을 학습한다. VulDeePecker (1)는 대상 소스 코드를 구문과 시멘틱 측면에서 관련된 프로그램 명령문의 모임 (코드 가젯이라 명명)으로 나누어 취약성 여부를 판단한다. 보다 세밀한
수준의 탐지를 위해 코드 슬라이싱 작업을 사용한다. SySeVR (10)는 취약성 탐지를 위한 프레임워크로 취약성 코드의 구문 및 시멘틱을 분석하며 벡터 표현을 통해 처리한다. CNN, LSTM 등을 포함한 다양한 딥러닝
모델을 평가한다. M. Zagane et al. (5)는 코드 메트릭스 기반의 취약성 탐지 모델을 제안한다. 소스 코드에서 메트릭스 값을 계산하며 이를 탐지 모델의 입력으로 사용한다. R. Russell
et al. (11)는 어휘 분석 통해 소스 코드의 심층 기능 표현을 학습하는 함수 단위의 취약성 탐지 시스템을 제안한다. 특성 추출을 위해 CNN과 RNN를, 랜덤
포레스트를 취약성 분류기로 사용한다. Z. Li et al. (12)는 다양한 취약성 유형을 포함한 데이터 세트를 사용하여 이미 발표된 머신러닝이나 딥러닝 기반의 취약성 분류기의 특성을 평가한다. S. Chakraborty
et al. (13)는 취약성 예측을 위한 기존 데이터 세트의 문제점을 제시하고 이를 해결한 좀 더 현실적이며 포괄적인 데이터 세트를 제공한다. 그러한 데이터 세트를
학습과 시험에 사용함으로써 보다 향상된 성능의 취약성 예측 모델을 소개한다. μVulDeePecker (14)은 다중 클래스 취약점 탐지를 위한 딥러닝 시스템이다. 데이터 및 제어 종속성을 이용하여 이진 분류의 취약성 여부를 판단하는 기능을 넘어 다양한 종류의
취약성을 식별하는 모델을 제공한다. X. Li et al. (15)는 취약성 검사 대상이 되는 소스 코드를 중간 형태의 표현으로 전환함으로써 소스 코드의 불필요한 내용을 제거한 후 특성 벡터로 변환한다. 중간 형태의
코드 표현은 원래 코드의 구조 및 시멘틱 정보를 포함하고 있다.
3. 취약성 탐지 시스템
3.1 취약성 예제 코드
소프트웨어 시스템의 보안 데이터를 관리하는 대표적인 데이터베이스는 MITRE에서 관리하는 Common Weakness Enumeration (CWE)와
Common Vulnerabilities and Exposures (CVE)이다. CWE는 아키텍처, 설계, 구현 단계에서 발생할 수 있는 소프트웨어
및 하드웨어의 보안 취약성에 대해 공통적으로 적용할 수 있도록 체계적으로 분류한 카탈로그이다. CVE는 특정 소프트웨어 시스템에서 발견된 취약점에
대한 데이터로 각각의 취약점에 대해 발견 연도와 고유번호를 할당한다. 약점(Weakness)은 CVE에서 정의한 구체적인 인스턴스인 특정 취약점으로
발생할 수 있다.
표 1. 취약성 CWE-119 예제 코드
Table 1. A Motivating Example of CWE-119
Example of CWE-119
|
Example Language: C
|
void host_lookup(char *user_supplied_addr){
struct hostent *hp;
in_addr_t *addr;
char hostname[64];
in_addr_t inet_addr(const char *cp);
validate_addr_form(user_supplied_addr);
addr = inet_addr(user_supplied_addr);
hp=gethostbyaddr(addr, sizeof(struct in_addr), AF_INET);
strcpy(hostname, hp->h_name);
}
|
CWE-119는 메모리 버퍼와 관련된 취약성으로, 메모리 버퍼에서 작업을 수행할 때 버퍼의 경계를 벗어나 읽기나 쓰기 연산을 시도할 때 발생한다.
표 1은 CWE-119에 해당하는 예제 코드이다 (3). host_lookup 함수는 호스트 이름을 저장하기 위해 변수 hostname에 64 바이트의 메모리 버퍼를 할당한다. 함수의 마지막 줄(빨간색
표시)에서 strcpy 함수를 통해 호스트 이름을 변수 hostname에 복사한다. 하지만, 저장하려는 호스트 이름의 크기가 할당된 64 바이트보다
큰 경우 보안 문제가 발생할 수 있다. 취약성 공격자들은 CWE-119 취약성을 보이는 코드를 통해 임의로 악의적인 코드를 실행하거나 제어 흐름 변경,
민감한 정보 수집 등을 할 수 있으며 결과적으로 시스템 운행을 정지시키는 결과를 초래할 수 있다. CWE-119는 2018년과 2019년 2년동안
발생한 가장 위험한 CWE 목록에서 5위를 차지한다 (4). 이는 CWE-119 취약성이 실제적으로 발생하기 쉽고, 공격받을 가능성이 많다는 것을 의미한다. 본 논문에서 다루는 데이터 세트에도 CWE-119
취약성이 다수 포함되어 있으며 이는 소프트웨어 개발자들이 개발 및 유지보수 단계에서 해당 취약성을 교정하기 위해 코드 수정을 실시했음을 나타낸다.
3.2 취약성 탐지 시스템 구조
그림 1은 소프트웨어 보안 취약성을 탐지하기 위한 전체 과정을 나타내며, 크게 데이터 수집 및 전처리 과정과 분류 모델 개발 과정으로 구성된다. 본 논문이
제시한 탐지 분류 모델은 데이터 세트 기반의 지도학습 모델이므로 데이터 수집 과정은 필수적이며 또한 수집된 데이터를 모델에서 사용할 수 있도록 정제
과정이 요구된다. NIST NVD와 깃허브를 통해 수집된 취약성 관련 데이터는 전처리 과정을 통해 코드 변경 등의 취약성 특성 항목 포함한다. 수집된
데이터는 C/C++ 파일에 포함된 함수 단위로 정리된다. 그러므로, 동일한 함수 내부에서 여러 번의 취약성 관련 코드 수정이 발생할 수도 있으며 이런
경우 각각 다른 경우로 정리된다. 취약성 탐지 시스템은 식별된 취약성 함수에서 코드 메트릭스를 계산한다. 소프트웨어 코드 메트릭스 계산을 위해 M.
Zagane et al. (5)에서 제공한 메트릭스 추출기를 사용한다. 해당 코드 메트릭스 계산기는 C, C++, Java 등의 프로그래밍 언어를 srcML (6) 형태의 XML로 표현한 후 소스 코드 메트릭을 계산한다. 지원하는 코드 메트릭은 LOC, McCab 메트릭스, Halstead 복잡도 메트릭스를
포함한다. 최총적으로 취약성을 포함한 C/C++ 함수는 코드 메트릭스의 실수 값으로 표현되어 딥러닝 모델의 입력 데이터로 사용된다. 취약성 분류기(Vulnerability
Classifier)는 함수의 메트릭스 값들을 통해 학습하며 가중치 등의 모델의 매개변수 값을 결정한다.
그림. 1. 소프트웨어 취약성 탐지 시스템 개요
Fig. 1. The Overview of the Detection of Software Vulnerabillities
본 논문은 J. Fan et al. (7)이 제공하는 Big-Vul 데이터 세트를 사용하며 해당 데이터의 수집 과정과 취약성 특성 항목에 대해 소개한다. Big-Vul 데이터는 2002년에서
2019년까지 C/C++로 개발된 프로젝트에서 발생한 취약성을 수집한 데이터 세트를 명명한다. 데이터 수집을 위해 NIST NVD 데이터베이스에서
관리하는 CVE 목록에서 다양한 소프트웨어 시스템에서 발견된 취약성 데이터를 수집한다. 취약성 웹사이트에서는 해당 취약성이 발생되고 수정되었던 코드
작업에 대한 로그를 포함한 깃허브 URL을 제공한다. 이를 통해 해당 취약성이 발생한 프로젝트의 소스 코드를 수집할 수 있다. 깃 명령어를 통해 소스
코드와 코드 변경 히스토리 데이터를 수집한다. 표 2는 데이터 수집을 위해 사용된 깃 명령어의 일부를 요약한다. git clone을 사용하여 원하는 프로젝트 코드를 로컬로 다운로드할 수 있다. git
diff를 통해 프로젝트 커밋 버전간의 변경 내용을 식별할 수 있으며, git log는 변경된 히스토리 데이터를 제시한다. 로컬에 수집된 프로젝트
데이터는 코드 변경과 취약성 특성 항목을 포함하도록 정제된다. 취약성 특성 항목에는 커밋 ID, 커밋 메시지, CWE ID, CVE ID, CVSS
점수, 변경된 파일명, 수정 전 함수 소스 코드, 수정 후 함수 소스 코드, 취약성 분류 유형 등을 포함한다.
표 2. 데이터 수집을 위한 깃 명령어
Table 2. Git Commands for Data Collection
Commands
|
Description
|
git clone
|
Obtain a project repository from a URL to get source code and additonal files
|
git diff
|
Show differences between commits
|
git log
|
List a version history for a current branch
|
git commit
|
Record changes to a project repository with a commit log message
|
git show
|
Show metadata and content changes of a specified commit
|
표 3. 취약성 데이터세트 통계
Table 3. Descriptive Statistics about the Vulnerabilities Dataset.
Project
|
NCV1)
|
NMF2)
|
NF3)
|
NVF4)
|
RNVF5)
(%)
|
Chromium
|
1,548
|
1,514
|
13,165
|
2,485
|
18.8
|
linux
|
931
|
1,732
|
58,718
|
1,556
|
2.6
|
ImageMagick
|
218
|
121
|
2,408
|
212
|
8.8
|
php-src
|
64
|
43
|
4,492
|
113
|
2.5
|
tcpdump
|
122
|
63
|
1,226
|
176
|
14.3
|
krb5
|
38
|
52
|
731
|
132
|
18
|
openssl
|
25
|
24
|
13,183
|
113
|
0.8
|
FFmpeg
|
84
|
67
|
1,394
|
95
|
6.8
|
jasper
|
23
|
25
|
825
|
92
|
11.1
|
qemu
|
3
|
2
|
48,985
|
108
|
0.2
|
iperf
|
1
|
3
|
313
|
54
|
17.2
|
libtiff
|
22
|
15
|
1,217
|
47
|
3.8
|
radare2
|
50
|
29
|
1,830
|
47
|
2.5
|
FreeRDP
|
11
|
18
|
1,115
|
48
|
4.3
|
file
|
41
|
7
|
353
|
28
|
7.9
|
Total
|
3,181
|
3,715
|
149,955
|
5,306
|
3.5
|
1) NCV: Number of Commits for Vulnerabillities, 2) NMF: Number of Modified Files,
3) NF: Number of Functions, 4) NVF: Number of Vulnerable Functions, 5) RNVF: Ratio
of NVF.
표3은 수집된 프로젝트 데이터 가운데 해당 논문에서 사용한 데이터 세트를 요약한다. 수집된 데이터에서 코드 라인 수가 5줄 미만인 데이터는 제외한다.
또한, 중복된 데이터와 파싱 과정에서 오류가 발생한 데이터는 제외되었다. Big-Vul 데이터 세트 중에서 비교적 다수의 보안 취약성을 포함하는
상위 15개의 프로젝트를 선택한다. 프로젝트 이름에서 알 수 있듯이 다양한 도메인의 프로젝트들이 사용되었다. 전체 커밋 중 취약성과 관련된 커밋은
상대적으로 적은 수에 해당한다. 표 3에서 NCV:취약성 커밋의 수, NMF: 변경된 파일의 수, NF: 전체 함수의 수, NVF: 취약성을 포함한 함수의 수, RNVF: 전체 함수에
대해 취약성을 포함한 함수의 비율을 나타낸다. 해당 데이터세트는 3,181개에 해당하는 취약성 관련 커밋과 총 5,306개의 함수가 취약성을 포함하고
있음을 알 수 있다. 즉, 취약성을 포함하는 5,306개의 데이터(함수)가 본 논문에서 제안한 자동 탐지 딥러닝 모델의 학습 및 테스트를 위해 사용된다.
그림 2는 데이터 세트에 포함된 15개의 프로젝트 중 가장 많은 취약성 함수를 표함한 상위 5개의 프로젝트를 선택하여 발견된 CWE 유형을 시각화한다. Chromium
프로젝트의 경우, CWE-119가 가장 빈번하게 발생하는 반면, tcpdump 프로젝트에서는 CWE-125가 대다수를 차지한다. 상위 5개의 프로젝트에
CWE-119, CWE-125, CWE-20, CWE-200, CWE-264, CWE-399, CWE-416, CWE-835 총 6개의 CWE가 빈번하게
발생하고 있음을 알 수 있다. 해당 CWE 유형은 최근에 발표된 “2020 CWE Top 25 Most Dangerous Software Weaknesses”
(4)에도 포함되며 이는 해당 CWE 유형들이 여전히 소프트웨어 시스템에서 빈번하게 발견되고 보안상 취약성을 나타냄을 의미한다.
그림. 2. 최상위 CWE 유형 시각화
Fig. 2. Visualizing Top-ranked CWE Types
3.3 제안된 딥러닝 모델
성공적인 딥러닝 모델 중 하나는 이미지 분석 등에 탁월한 CNN 모델이다. 그림 3과 같이 취약성 분류기는 CNN 기반의 딥러닝 모델이며 함수에서 계산된 코드 메트릭스 데이터세트를 입력으로 받아 다양한 은닉 계층을 통해 최종적으로
출력계층을 통해 취약성인지 아닌지를 판단한다. 전형적인 이진 분류 문제로 함수의 취약성 여부를 결정한다. 입력 데이터는 1차원의 입력 데이터로 처리되어
1차원의 컨볼루션 계층과 풀링 계층을 통과한다. 1차원 컨볼루션 연산이 수행되며 활성화 함수로 대표적인 Rectified Linear Unit (ReLU)
함수를 사용한다. ReLU 함수는 ReLU(z) = max{0, z}로 표현되며 z는 입력값이다. 입력값 z가 0보다 크면 z 자신을, 아니면 0을
출력한다. ReLU 함수는 z = 0을 제외한 모든 입력값에 대해 미분 가능하며 z = 0에서 왼쪽 도함수는 0, 오른쪽 도함수는 1이다. 컨볼루션
계층과 풀링 계층 사이에 Dropout 계층이 위치한다. 해당 계층은 계산에 참여하는 뉴런의 수를 임의로 삭제하여 주어진 데이터 세트에 대한 과대적합
문제를 해결하기 위해 사용된다. 제안된 취약성 분류 모델은 최대 풀링 계층을 사용한다. 즉, 일정 영역 안에 속하는 값들 중 최대값을 추출하고 나머지
값들은 배제한다. 이는 선택된 최대값이 배제된 나머지 값들을 대표한다는 의미로 일부 값들을 배제함으로써 모델의 계산량을 줄이는 효과를 기대할 수 있다.
컨볼루션 연산의 특성 중의 하나는 지역 연결성 (Local Connectivity)으로 앞뒤 계층의 뉴런들이 모두 연결되지 않고 특정 지역에 속하는
뉴런들만이 연결되어 모델의 실용성을 높이고자 한다. 이에 반해, 출력 계층과 연결된 완전 연결 계층의 뉴런들은 일반 다중 퍼셉트론 신경망과 같이 바로
이전 계층에 포함된 모든 활
그림. 3. 취약점 탐지 시스템을 위한 컨볼루션 신경망. V: 취약한 함수, NV: 취약하지 않은 함수
Fig. 3. A CNN for the Vulnerabilities Detection System. V: Vulnerable Function, NV:
Non-Vulnerable Function
성화된 뉴런과 완전히 연결된다. 제안된 취약성 분류 모델의 출력 계층은 시그모이드를 활성화함수로 사용한다.
4. 취약성 분류 모델 성능 평가
본 장에서는 제안한 소프트웨어 취약성 분류 모델에 대한 학습 결과 및 성능 평가를 기술한다. 분류 모델 개발을 위해 파이썬 3.7.10과 Keras
2.3.1 버전을 주피터 노트북 개발 환경에서 사용하였다. 또한, 분류 모델은 Intel(R) Xeon(R) W-2123@ 3.6GHz과 GPU NVIDIA
GeForce RTX 2080에서 실행되었다. 실험에 사용된 전체 데이터 세트는 총 12,004개이며 취약성과 비취약성 데이터를 5:5 비율로 포함한다.
전체 데이터 세트 중 모델 훈련용과 시험용은 8:2의 비율로 각각 9,604개와 2,400개로 나뉜다. 훈련용 데이터는 다시 8:2 비율로, 분류
모델 매개변수 학습을 위한 7,684개 데이터와 패러미터 검증을 위한 모델 검증용 데이터 1,920개로 나뉜다.
모델의 성능 평가 지표는 정밀도, 재현율, F1점수, 정확도를 사용한다. 표 4는 에포크 값의 변화에 따른 취약성 분류 모델의 시험 결과를 나타낸다. 실험에서는 컨볼루션 연산을 수행하는 필터 크기를 10으로 정한다. 에포크 값이
20, 40, 60, 80, 100 순으로 변화함에 따라 시험 데이터에 대한 취약성 탐지 결과가 0.96에서 0.98까지 증가함을 알 수 있다. 에포크
값이 80에서 100으로 증가한 경우에는 탐지 모델의 성능 변화가 없음을 알 수 있다. 이는 에포크 값을 80 이상 증가시키는 것이 모델의 성능에
크게 영향을 주지 않음을 나타낸다.
표 4. 에포크 크기에 따른 분류기의 성능 결과
Table 4. Performance Results of the Proposed Classifier in terms of Epoch Size (Filter_Size:
10)
#Epoch
|
Precision
|
Recall
|
F1Score
|
Accuracy
|
20
|
0.96
|
0.96
|
0.96
|
0.96
|
40
|
0.96
|
0.96
|
0.96
|
0.96
|
60
|
0.97
|
0.97
|
0.97
|
0.97
|
80
|
0.98
|
0.98
|
0.98
|
0.98
|
100
|
0.98
|
0.98
|
0.98
|
0.98
|
표 5는 필터 크기에 따른 취약성 분류 모델의 성능을 평가한다. CNN 모델에서 필터는 입력 데이터에 대한 컨볼루션 연산에 사용되며 입력 데이터의 특징을
포함하는 특징맵을 생성하는 패러미터이다. 실험에서 에포크 값은 100으로 정한다. 필터 크기가 4, 6, 8, 10으로 증가함에 따라 제안된 취약성
분류기의 정밀도, 재현율, F1점수, 정확도 등의 성능 지표값이 0.98까지 증가함을 알 수 있다. 필터 크기가 10 보다 큰 경우는 모델의 성능이
크게 변화가 없으므로 10 보다 큰 값을 사용하는 것은 효율적이지 않다.
표 5. 필터 크기에 따른 분류기의 성능 결과(에포크: 100)
Table 5. Performance Results of the Proposed Classifier in terms of Filter Size (Epoch:
100)
#Epoch
|
Precision
|
Recall
|
F1Score
|
Accuracy
|
4
|
0.91
|
0.90
|
0.90
|
0.90
|
6
|
0.95
|
0.95
|
0.95
|
0.95
|
8
|
0.96
|
0.96
|
0.96
|
0.96
|
10
|
0.98
|
0.98
|
0.98
|
0.98
|
제안된 소프트웨어 취약성 탐지 모델의 보다 객관적인 평가를 위해 전형적인 머신러닝 알고리즘과 동일한 데이터 세트를 사용하여 성능을 비교하였다. 실험에
서 고려한 머신러닝 알고리즘은 Naïve Bayes (NB), Logistic Regression (LR), Random Forest (RF), Support
Vector Machines (SVM), k-Nearest Neighbors (KNN), Decision Tree (DT) 이다. 표 6은 머신러닝 알고리즘과 제안된 모델의 성능 비교를 제시한다. 머신러닝 알고리즘 중 KNN과 DT 알고리즘이 다른 알고리즘에 비해 우수한 결과를 보인다.
특히 DT 알고리즘과 제안된 분류 모델의 정밀도, 재현율, F1점수, 정확도 값이 0.98임을 알 수 있다.
표 6. 제안된 접근 방식과 기계 학습 알고리즘의 비교
Table 6. Comparison of the Proposed Approach and Machine Learning Algorithms
Alg.
|
Precision
|
Recall
|
F1Score
|
Accuracy
|
NB
|
0.63
|
0.59
|
0.58
|
0.59
|
LR
|
0.64
|
0.65
|
0.64
|
0.65
|
RF
|
0.82
|
0.81
|
0.81
|
0.81
|
SVM
|
0.85
|
0.83
|
0.83
|
0.83
|
KNN
|
0.97
|
0.97
|
0.97
|
0.97
|
DT
|
0.98
|
0.98
|
0.98
|
0.98
|
Proposed
|
0.98
|
0.98
|
0.98
|
0.98
|
5. 결 론
본 논문은 소프트웨어 보안 취약성을 자동 탐지하는 CNN 기반의 딥러닝 모델을 제시한다. 보안 취약성 분류 문제는 딥러닝의 전형적인 이진 분류 문제로
간주할 수 있다. 모델 학습을 위한 데이터는 보안 취약성을 정의한 CVE 데이터베이스와 깃허브 코드 저장소를 통해 구축된다. C/C++ 프로젝트에서
보안 취약성을 포함하는 함수와 비취약성 함수를 분류한다. 추출된 함수들의 특성을 표현하기 위해 코드 메트릭스를 계산한다. 최종적으로 함수에서 계산된
코드 메트릭스 값이 분류 모델의 입력 데이터로 사용된다. 제안된 취약성 자동 탐지 모델은 정밀도, 재현율, F1점수, 정확도 등의 성능 평가지표에서
0.98점을 보였다. 또한, 전형적인 머신러닝 알고리즘들을 동일한 데이터 세트에 적용한 결과, 제안된 모델의 성능이 우세함을 알 수 있었다. 소프트웨어
개발단계나 유지보수 단계에서 제안된 취약성 탐지 모델이 적용된다면 보안 취약성 탐지 및 예방 측면에서 개발자의 수작업을 줄일 수 있을 것이다. 향후
연구 내용으로 데이터의 양을 증가시킴으로써 보다 신뢰성 있고 일반적인 취약성 분류 모델을 개발할 수 있을 것이다. 또한, Java와 Python 프로젝트에
대해서도 제안한 분류 모델을 적용하는 연구가 요구된다.
Acknowledgements
This research was supported by Basic Science Research Program through the National
Research Foundation of Korea(NRF) funded by the Ministry of Education(No. 2019R1I1A3A01056368)
References
Z. Li, D. Zou, S. Xu, X. Ou, H. Jin, S. Wang, Z. Deng, Y. Zhong, 2018, VulDeePecker:
A deep learning-based system for vulnerability detection, In Proceedings of the 25th
Annual Network and Distributed System Security Symposium (NDSS’18)
CVE DetailsCVE Details Website, 2020, http://https://www.cvedetails.com/
CWE Website, CWE-119, https://cwe.mitre.org/data/definitions/119.html
2020 CWE Top25 Most Dangerous Software Weaknesses, 2020, https://cwe.mitre.org/top25/archive/2020/2020_cwe_top25.html
M. Zagane, M. K. Abdi, M. Alenezi, 2020, Deep Learning for Software Vulnerabilities
Detection Using Code Metrics, IEEE Access, Vol. 8, pp. 74562-74570
srcML, https://www.srcml.org/
J. Fan, Y. Li, S. Wang, T. N. Nguyen, 2020, A C/C++ Code Vulnerability Dataset with
Code Changes and CVE Summaries, In MSR ’20: The 17th international Conference on Mining
Software Repositories, Vol. acm, pp. 32-41
C. Catal, A. Akbulut, S. Karakatič, M. Pavlinek, V. Podgorelec, 2016, Can we predict
software vulnerability with deep neural network? In Proceedings of the 19th International
Multiconference Information Society, pp. 19-22
R. Scandariato, J. Walden, A. Hovsepyan, W. Joosen, 2014, Predicting Vulnerable Software
Components via Text Mining, IEEE Trans. on Software Engineering, Vol. 40, No. 10,
pp. 993-1006
Z. Li, D, Zou, S. Xu, H. Jin, Y. Zhu, Z. Chen, 2018, SySeVr: A Framework for Using
Deep Learning to Detect Software Vulnerabilities, http://arxiv.org/abs/1807.06756
R. Russell, L. Kim, L. Hamilton, T. Lazovich, J. Harer, O. Ozdemir, P. Ellingwood,
M. McConley, 2018, Automated vulnerability detection in source code using deep representation
learning, In Proceedings of the 17th IEEE International Conference Machine Learning
Applications (ICMLA), pp. 757-762
Z. Li, D. Zou, J. Tang, Z. Zhang, M. Sun, H. Jin, 2019, A Comparative Study of Deep
Learning-Based Vulnerability Detection System, IEEE Access, Vol. 7, pp. 103184-103197
S. Chakraborty, R. Krishna, Y. Ding, B. Ray, 2020, Deep Learning based Vulnerability
Detection: Are We There Yet?, https://arxiv.org/abs/2009.07235
D. Zou, S. Wang, S. Xu, Z. Li, H. Jin, 2019, μVulDeePecker: A Deep Learning-Based
System for Multiclass Vulnerability Detection, IEEE Transactions on Dependable and
Secure Computing
X. Li, L. Wang, Y. Xin, Y. Yang, Y. Chen, 2020, Automated Vulnerability Detection
in Source Code Using Minimum Intermediate Representation Learning, Applied Sciences,
Vol. 10, No. 5
저자소개
․ 2015년 3월~현재 : 목포해양대학교 해양컴퓨터공학과 재학
․ 관심분야 : 인공지능, 소프트웨어 개발
․ E-Mail : denemtia159@naver.com
․ 2009년: 버지니아 공대 공학박사
․ 2013년~현재: 목포해양대학교 해양컴퓨터공학과 교수
․ 관심분야 : 딥러닝 알고리즘, 빅 데이터 분석, 소프트웨어공학, 런타임 시스템
․ E-Mail : dongkwan@mmu.ac.kr