혜랑's STORY

2021 CodeEngn Conference 17 | 딥러닝으로 취약점을 찾아보자 본문

카테고리 없음

2021 CodeEngn Conference 17 | 딥러닝으로 취약점을 찾아보자

hyerang0125 2021. 7. 7. 20:06
취약점 분석에 기계학습 응용

1. 하고싶었던 것
전체 소스코드가 주어질 때 각 함수가 어떤 취약점을 가지고 있을 확률이 몇 퍼센트인지 또한 다른 함수의 합류로 인해 그 확률이 개선되었는지 시각화 해준다.

2. Motivation
Automated Vulnerability Detection in Source Code Using Deep Representation Learning - IEEE 2018
선택 이유 : 데이터셋, 양질의 데이터를 확보하기 위해

3. Dataset
- csv 변환 : 판다스에서 다루기 쉽기 때문
- 중요한 특징
1) 각 데이터는 멀티 레이블을 갖는다.
2)  각 클래스별로 True/False 값을 가진다.
3) imbalanced : 학습 및 모델의 성능 평가때도 방해가 된다.
-> 학습할 때 특정 클래스의 데이터가 많아지게 되면 그 클래스에 관한 데이터는 잘 분류를 해내지만 다른 클래스에 대한 분류는 정확도가 낮아지게 된다.
-> 숫자로는 성능이 좋다고 평가될지라도 실제 분류에는 효과가 미미하다. 즉, 모델의 성능을 수치화하여 평가하기 어려움.

4. Model Selection
- 공간적인 정보를 종합하여 전체의 데이터에 다한 예측을 한다.
- 소스코드에게 순수한 정보 vs 공간적인 정보 둘 둥 어느게 더 중요할까? 정답은 없지만 생각해보면 취약점은 순차적으로 등장하는 것이 아니기 때문에 소스코드에는 공간적인 정보가 더 중요하다고 생각함.

5. Dataset Processing
- 파이썬 필로 라이브를 사용
- 텍스트 박스 속에 코드를 그대로 넣음

-> 사이즈가 굉장히 크게 나옴
-> cnn의 경우 데이터의 크기가 모두 동일해야 학습 성능이 올라감. 실제로 이미지 사이즈를 다 다르게 했을때 학습이 거의 되지 않던 것이 사이즈를 통일한 후 수월하게 학습됨
-> code2ming : 용량이 작아짐! 공백이 많아 학습에 방해가 될 것이라 예상했고 따라서 여백을 없애고 스케일링 함

-> token map : 소스코드를 원본 그대로 사용하는 것이 아니라 토큰으로 변환함

6. Model design


7. Training


8. Evaluation


9. Final Result