본문 바로가기

Data/논문 & 모델 정리

[arxiv]Automated software vulnerability detection with machine learning

반응형

자동취약점 탐지 관련 논문

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


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이란 뜻을 이해못했는데 뒤적이다가 좋은 글을 발견해서 공유한다:)


반응형