본문 바로가기

Data/논문 & 모델 정리

[arxiv]Automated Vulnerability Detection in Source Code Using Deep Representation Learning

반응형

정적분석 도구 예시로 Clang 도구를 말하고, 동적분석 도구로는 Symbolic Execution을 예로 듬. 하지만 정적분석은 모든 코드를 커버하지 못한다는 단점이 있고. Symbolic Execution은 path-explosion의 이유로 큰 프로그램을 분석하기에는 적합하지않다는 단점이 있음.

Source lexing

유의미한 소스코드만 남기기위해서 lexing이라는 과정을 거치는데, 사실 이부분이 제일중요한거 같아서 읽을려고했지만 자세한 내용은 안들어있었다. 쓰여져있는건 주석부분 삭제... 최종적으로 소스코드를 156개의 토큰으로 표현 했다고 하는데, 그렇게 많은 C++ API들이 어떻게 이렇게 되는건지 별로 신뢰가 안간다. 또한 u32, uint32_t, UINT32, uint32, DWORD 같이 같은뜻을 가진 데이터형식은 하나로 통일했다고 한다.

Dataset

데이터에 대한 설명은 크게 안하겠지만 어떤 취약점을 다뤘는지만 그림으로 올린다

주로 데이터(버퍼오버플로우, 포인터 취약점) 취약점을 내포한 프로그램들을 사용했다.


방법론

아무래도 소스코드를 이용한 취약점탐지라서 NLP를 이용한다. 먼저 word2vec을 사용하고, CNN을 이용해 거친다음, RNN을 사용해서 dense layers를 생성한다. 

(1) Embedding 작업: 13-dimensional representation
(2) Convolusion filter는 5 * 13 zmrlfh 512개의 필터를 사용
(3) RNN에서는 two-layer Gated Recurrent Unit with hidden size 256.
(4) dense layers에서는 50%의 drop-out을적용. 저자들은 softmax 2 layer이전에 64, 16 hidden layer를 적용했을때 성능이 가장좋게 나온다고 말함.

모델 그림

Evaluation



결과 예시


반응형