본문 바로가기

Data/논문 & 모델 정리

[NDSS 2018] VulDeePecker: A Deep Learning-Based System for Vulnerability Detection

반응형

요약: 본 논문은 소스코드 기반 딥러닝을 활용한 자동 취약점 탐지 시스템을 제안함. 또한 소스코드를 나타낼수있는 새로운 개념인 Code Gadget을 만들어내며 딥러닝을 위한 데이터셋을 가공해서 제공. 딥러닝 알고리즘은 Bidirection Long Short Term Memory(BLSTM)을 사용하여 학습및 탐지를 함.

기존의 제안된 기술보다 낮은 False Positive(FP), False Negative(FN)이 측정됨.



딥러닝 답게 두가지 단계로 나뉘어짐: Learning Phase, Detection Phase


사실상 본 논문에 가장 중요한 점은 : "어떻게 소스코드를 벡터화를 하여서 표현할것인가?" 라는게 제일 중요하다고 생각함.

이 질문에 대해서는 저자들은 Code-gadget이라는걸 활용해서 프로그램의 표현 및 벡터화를 시켰음.


해당 논문은 Library/API functions 기준으로 코드 가젯을 생성하였다. 과정은 밑과 같음.


굉장히 복잡해 보이지만... 막상 데이터 셋을 제공하는 Github에 이동하면 선언된 모든 변수 및 함수들을 다 파싱해오는거 같다.

이렇게 파싱된 Code-gadget들을 Word2Vec을 이용하여서 벡터화를 진행함.


본 논문은 마치 깃발 꼽기를 하는듯이. 단 두가지의 취약점에 대해서 train을 했다고 말한다. 1. Buffer Error, 2. Resource Management Error

마치 "우리가 먼저 연구하고있으니 더이상 하지말아라" 같이 간단하게 실험을 진행했다.


성능은 대체적으로 Pattern-based, Similarity-based기법들보다 "당연히" 좋게 나왔다.


본 논문의 단점을 나열하자면:


1. 소스코드가 꼭 있어야한다


2. C/C++에 대해서만 처리가 가능


3. 두가지 취약점에 대해서만 처리가 가능


4. 딥러닝 모델 자체에 한계점(BLSTM)

여기까지가 저자들이 말한 주요 한계점들이고


개인적으로 생각한 한계점은


1. 두가지 취약점이 동시에 있을때도 탐지가 가능하다고 써져있는데, 하지만 이는 취약점의 유무는 판단이 가능하겠지만 어느 Code-gadget에서 Buffer Error가 있는지 어느 Code-gadget에서 Resource Management Error가 있는지는 판단을 못할꺼 같다.


2. 본 논문에서는 Word2Vec을 사용하고 안에 CBOW, Skip-gram등 알고리즘을 사용했는데 이는 새로운 함수에 대한 처리가 어렵고 새로운 함수가 포함되어있을때 정확도가 많이 떨어질꺼같다.


3. BLSTM의 Input의 길이를 50으로 고정했는데 이는 불필요한 정보가 들어갈수가 있다.

반응형