본문 바로가기
AI월드/📁프로젝트

발표자료) 악성 PDF 구분을 위한 딥러닝 모델(FINAL PROJECT 2)

by khalidpark 2021. 7. 10.

 

안녕하세요

시큐레터와 기업협업 프로젝트를 진행한 박상원입니다.

발표를 시작하겠습니다

간단한 회사소개와 프로젝트, 그리고 결과에 대해 말씀드리겠습니다

 

시큐레터는 보안전문기업입니다.

악성코드 진단하는 소프트웨어를 개발하고, 분석하는 서비스를 제공하는 기업입니다.

이번 프로젝트는 PDF 문서파일의 악성유무를 판단하는 모델을 만드는 것입니다.

 

우선 PDF 의 구조를 이해하고 원하는 특징을 추출할줄 알아야 하며,

추출된 특징을 모델에 맞게 전처리 한뒤, 모델링을 진행하는 과정으로 진행하였습니다.

PDF의 구조에 대해 간단하게 설명하고 넘어가겠습니다.

PDF는 총 4가지 (header, body, refrence table, trailer) 로 구성되어 있으며

그 중 bodyobject 들의 집합으로 이루어져 있습니다

왼쪽이미지를 보시면 obj 로 시작해서 endobj 로 끝나는 object 가 총 3개 표현되어 있습니다.

악성코드가 실행되는 방식은 파일마다 다르지만,

주로 body object 안에서 , openaction 등의 키워드등을 통해 특정 파일을 실행시킵니다.

PDF는 파일을 열지않고 내부를 파싱하여 분석하 정적방식과

파일을 직접열어보고 분석하는 동적방식이 있으며

이번 프로젝트에서는 정적방식을 이용하였습니다.

 

PDF가 악성PDF인지 정상인지 구분하는 방식을 간단하게 다시 설명드리면

PDF에서 object 및 중요하다고 판단하는 특징을 추출한뒤분류모델을 통해 구분합니다

1주차때 PDF의 구조이해와 더불어 논문을 통해 어떤 방식으로 악성 PDF를 구분하는지에 대해 공부하는 시간을 가졌습니다

대부분의 방법이 머신러닝 모델을 이용하였는데, 저는 여기에서 문제점이 있다고 생각하였습니다.

"기존의 데이터 구조에서 벗어난 새로운 유형의 악성코드 패턴에 취약할 수 있다

그래서 딥러닝 신경망을 이용한다면 새로운 유형의 악성PDF도 구별해 낼 수 있다."

라는 가설을 설립하고 프로젝트를 진행하였습니다

적절한 PDF parser를 선택한 뒤

파일의 총 object 수 파악하고

각 파일의 object 총 값을 누적하여 리스트로 저장하였습니다.

그리고 특수문자와 숫자는 필터로 제거한 뒤, 중복값도 제거해주는 방식으로 전처리를 하였습니다.

딥러닝을 통한 모델링이 이번 프로젝트의 목표였기 때문에

PDF버전이나 크기, 페이지 수 , 등의 다른 특성은 우선 고려하지 않고 object 의 키워들만을 가지고 우선 진행하였습니다.

정상과 악성 PDF 의 오브젝트의 개수를 비교해보면

둘다 큰 차이없이 200개 가량이 가장 높은 수치로 나타남을 알수있었습니다

전처리된 데이터를 가지고 딥러닝을 진행한 결과

epoch 2회만에 과적합 현상이 발생하는 걸 확인할수있었습니다

이 결과만으로는 적절한 모델인지 파악이 어렵기 때문에 다른 머신러닝모델과 비교해보았습니다

랜덤포레스트, svm, xgboost를 비교대상으로 진행하였으며

각 모델은 따로 하이퍼파라미터값을 수정하지 않은 가장 기본모델로 진행하였습니다

결과에서와 같이 딥러닝모델의 정확도가 타 모델에 비해 현저히 떨어짐을 알수있었습니다

결과입니다

이번 3주간의 프로젝트 기간동안 저는

1주차 논문분석을 통해 PDF 구조를 이해했고

2주차 다양한 PDF parser 중 적절한 parser를 고르고 특징을 추출하는 시간을가졌습니다

3주차때는 최종적으로 데이터에서 원하는 특징을 추출하여 전처리하고 모델링하였습니다

 

이번 프로젝트를 진행하면서

개인적으로 아예 생소한 분야인 PDF의 구조를 공부하고 악성코드에 대해 조금이나마 이해하는 시간을 가졌다는점이 보람찼습니다

그리고 딥러닝이 무조건 무적은 아니다라는 점을 한번더 깨달았습니다

 

더불어 3주간의 과정과 결과를 통해 생각한 개선방향은

다중 모델 결합방식입니다.

머신러닝을 정상적으로 통과한 파일을 대상으로 딥러닝을 한번 더 적용하는 등의 방법을 통해 놓치게 되는 악성코드가 없도록 하는 방법입니다.


https://github.com/khalidpark/project-PdfSecurity

 

khalidpark/project-PdfSecurity

Contribute to khalidpark/project-PdfSecurity development by creating an account on GitHub.

github.com

 

728x90

댓글