Data/논문 & 모델 정리

[arxiv]Automated software vulnerability detection with machine learning

재융 2018. 9. 17. 01:43
반응형

자동취약점 탐지 관련 논문

이전에도 설명했지만 자동화 취약점 탐지에 제일 장점은 크게 세가지임


1. 사람의 노동이 필요하지않다

2. 값이 싸다

3. 취약점 탐지가 빠르다

본 논문에서는 두가지 방법으로 접근함


1. IR(Intermediate Representation)코드를 가지고 실험 [Build-based]

2. 소스코드를 가지고 실험 [Source-based]


소스코드를 컴파일하면

[소스코드] - [중간표현] - [기계어] 라는 과정이 있다.

첫번째 방법은 여기서 *중간표현 코드를 사용을 하였다고한다. (사실 컴파일러쪽 공부를안했다면 알아보기 힘듬)

*Clang의 LLVM 도구를 사용


1. Build-based



build-based에서는 두가지 feature를 사용하였음. 첫번째는 CFG(Control-Flow Graph), 두번째는 사용된 변수정보.

CFG같은경우는 그림 1(윗그림)과 같이 벡터화를 시켜서 연결된 블록은 1로 설정하고 아닐경우에는 0으로 설정

변수같은 경우에는 선언 & 실제사용을 벡터화 시켜서 대응할때는 1로 설정(솔직히 이 feature는 잘모르겠다..)

2. Source-based



Source-based는 소스코드에서 바로 그림2와 같이 lexing process한다(참고로 이 과정은 저자들이 직접만들어서 처리했다고 한다... 오픈소스로 공개하면 좋을꺼같다). 이후 Word2Vec을 적용하면 다음그림과 같이 타나난다.



try... catch단어로 봐도 잘 학습이 된거같다.


3. Model 사용

Source-based로는...

제일 처음에 저자들은 시작할때 Bag of words로 처리한 단어들의 벡터화데이터를 가지고 random-forest모델에 학습을 시킴(그림4에서 파랑색 화살표)

두번째로는 향상된 모델로 word2vec을 쓰고 TextCNN을 활용해서 구현하고 추가로 마지막에 FC(Fully-Connect)을하여 판단(빨간색 화살표)

세번째로는 FC가 아닌 다시 random-forest에 넣어서 학습(초록색 화살표)


Build-based로는...

단순한 머신러닝 알고리즘인 random-forest를 사용했다고 하며, Source-based와 비교하기위해서 concatenation of the build-based vector and the source-based bag of words vector를 사용했다고함. (build-based vector와 source-based bag of words vector 두개의 벡터를 가지고 random-forest학습)


4. 결과

NOTATION:: ROC(Receiver Operating Characteristic), P-R(Precision-Recall), AUC(Area Under Curve)


1. Source-based에서는 TextCNN-Random Forest모델이 성능이 가장좋게나옴 (Table2)

2. Build-based는 Source-based보다 성능이 낮게 측정이됨 (Table2와 Table3의 비교)

3. Table4, 즉 source-based와 build-based를 혼합해서 사용한 결과


추가로...

논문에서 Precision-Recall이란 뜻을 이해못했는데 뒤적이다가 좋은 글을 발견해서 공유한다:)


반응형