380 likes | 416 Views
딥러닝을 이용한 안드로이드 앱 악성코드 탐지 [ 좋은징조 ]. 담당교수 : 조성제 52131086 김도엽 32121875 김현일 32131732 이상훈. 목차. 1 . 설계목적 2. 실행환경 및 역할분담 3 . DEX, Permission 분석 방법 4. 분석결과 및 고찰. 1. 설계목적. 모바일 시장의 어플리케이션 다운로드 수의 증가폭과 안드로이드 앱의 악성코드로 인한 감염 샘플 증가폭이 비례함. 1. 설계목적. 높은 시장 점유율 , 앱스토어의 검증절차 미흡
E N D
딥러닝을 이용한 안드로이드앱악성코드 탐지 [좋은징조] 담당교수 : 조성제 52131086 김도엽 32121875 김현일 32131732 이상훈
목차 1. 설계목적 2. 실행환경 및 역할분담 3. DEX, Permission 분석 방법 4. 분석결과 및 고찰
1. 설계목적 모바일 시장의 어플리케이션 다운로드 수의 증가폭과안드로이드앱의 악성코드로 인한 감염 샘플 증가폭이 비례함
1. 설계목적 높은 시장 점유율, 앱스토어의 검증절차 미흡 • 악성코드 제작, 유표가 용이 • 악성코드 감염 가능성↑
1. 문제의 대두 및 설계목적 – 악성코드 탐지기법 시그니처 탐지기법 한계 : 이미 발견된 패턴에 대해서 정립하기 때문에, 지속적으로 변조되어지는 악성코드들을 전부 탐지하기에 어려움이 있음 새로운 대안 : 딥러닝을 이용
1. 문제의 대두 및 설계목적 – 악성코드 탐지기법 왜 딥러닝을 이용해서 바이러스를 잡는가? 기하급수적으로 늘어나는 악성 앱을 검출해내기 위해서는, 새로운 유형의 데이터에 대해서 잘 학습 할 수 있는 딥러닝을이용하는 것이 가장 효과적이라고 판단 데이터를 이미지화 시켜 DEX파일과 CNN을 이용해 악성코드 탐지를 진행하기로 결정
2. 실행환경 및 역할분담 OS : Window 10 Main Program : PyCharm(python 3.6) NN Library : Keras(backend : tensorflow) CPU : i5 - 7500 SSD : 850 evo GVA : gtx1070(8GB) RAM : 16GB
2. 실행환경 및 역할분담 김현일 – 분류 모델 설계, 악성코드 분석 김도엽 – 안드로이드앱 데이터 패턴 분석, 악성코드 분석 이상훈 – 안드로이드앱 데이터 패턴 분석, 악성코드 분석
3. DEX 분석 방법 기능을 제공하는 것이 목적인 Benign 프로그램이랑은 달리 바이러스 프로그램은, 감염시키기 위한 기능이 주류를 이루고있을 것이므로, binary파일을 8bit gray scale 이미지로 변환했을 때에, 이미지에 차이가 있을 것이라고 판단
3. DEX 분석 방법 –Dex File DEX file (Dalvik Executable Format) : 안드로이드 프로그램에서 컴파일된dalvik실행 파일로서, 실행에 필요한 데이터들을 binary형태로 저장 컴파일시 모든 .class 및 .jar 파일은 Dalvik바이트 코드 형식으로 작성된 단일 classes.dex파일로 결합됨 dex에는 실행에 필요한 데이터들이 모두 있기 때문에, dex를 분석하면 바이러스와 정상 프로그램을 분류할 수 있음 JAR : (Java Archiver)는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 모아놓은 파일
3 DEX 분석 방법 – DEXHeader /x68, /x6C 이미지 - softdx’s blog
3. DEX 분석 방법 – DEXdata section이미지화 dex File에서 Data Section을 8비트씩 잘라바이트로 만들게 되면 흑백 이미지로 변환가능 (binary 값은 Intensity의 의미를 지니며, Intensity는 밝기를 의미합니다. 0-검정 255-흰색)
3. DEX파일, CNN을 이용한 탐지 – CNN CNN = Convolution + Neural Network dex파일을 이미지로 만든 후, 정상 프로그램과 바이러스 프로그램을 분류하기 위해서 CNN을 사용 CNN은 이미지 분류를 위해서 사용하는 가장 좋은 분류기로서 평가 받음 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)의 2012년 대회에서 제프리 힌튼 교수팀의AlexNet이 top 5 test error 기준 15.4%를 기록해 2위(26.2%)를 큰 폭으로 따돌리고 1위를 차지함. 2018 네이버 개발자 컨퍼런스에서CNN을 이용한 사람의 분류율을99.7% 달성에 성공했다고 밝힘
3. DEX파일, CNN을 이용한 탐지 – 데이터셋 데이터는 정보보호 R&D 데이터 챌린지 2018 에서 제공 파일이름.vir의 형태로 제공받음 정상 앱 : 4000 악성 앱 : 1999(1개는 압축 푸는데 오류발생해서 제거함) • 상자는 400개 단위 • 의 데이터를 의미
3. DEX파일, CNN을 이용한 탐지 – 데이터셋 • 데이터는 train, validation, test를 각각 6:2:2로 나눴습니다. • train : 정상 (4000 * 0.6), 비정상 (1999*0.6) • validation : 정상 (4000 * 0.2), 비정상 (1999*0.2) • test : 정상 (4000 * 0.2), 비정상 (1999*0.2) 정상 악성
3. DEX 분석 방법 – 분석결과(1) ① 8 bit씩 읽어온 값을 단순히 pixel로 변환해 정상 앱, 악성 앱간의차이를 알아보았습니다. 성능은 84%로 측정되었습니다.
3. DEX 분석 방법 – 분석결과(2) ② resize 되는 값중 단 하나라도 1이상의 값을 가지고 있으면 흰색으로 판단하여 이미지화 하는 방법을 사용해 분류했습니다. 성능은 82%로 측정되었습니다. 0 -> 1~255 -> (메모리 내에서 값의 유무가 중요한가를 판단하기 위함)
3. DEX 분석 방법 – 분석결과(3) ③ resize 값에 따라서 gray intensity를 정해 분류했습니다. resize를 통해 5배씩 줄어들었을 경우에 0 , 65 , 130 , 195 , 255 로 구분해줍니다. 이 방법을 이용하면 intensity의 다양성을 주어 ②의 resize 과정에서 데이터 의미손실이 일어나는 문제를 일정 부분 해결이 가능합니다. 3번 방법을 적용하면 성능은 86%로 측정되었습니다.
3. DEX 분석 방법 – 분석결과(4) ④ variance로 trash값으로부터의 variance를 구해서, 신호(그래프) 형태로 만듭니다. 이 방법은 이미지화하는 방법과는 다르며 trash값이 많이 반복되는 bit로부터의 분산을 기준으로 만들어지는 분산그래프입니다. 4번 방법을 적용하면 성능은 86%로 측정되었습니다.
3. 각 분서결과 별로 만들어진 이미지 1 2 3 4
3. DEX 분석 방법 – 원인분석, 개선점 인공신경망은 비슷한 이미지는 분류하기 힘듦 • 단순히 Data Section을 이미지로 만들게 되면, Malware와 Benign이 서로 비슷한 이미지처럼 만들어집니다. • 단순한 이미지가 만들어지는 이유는두가지인데, • 1. 옛날에는 안드로이드 악성코드를 이용한 공격 방법이 단순했지만, 시간이 갈수록 Malware가 Benign이랑 유사하도록 정교하게 만들어져서. • 2. DataSection 전체를 사용하기 보다, 좀더 세부적으로 들어가서 Malware와 Benign 사이에 Variance가 큰 특징을 찾아줘야 할거 같습니다. MIT에서도 Variance가 작은 이미지는 이미지처리 기법보다는 감지센서로 처리 Malware와 정상 프로그램 간의 의미 있는 Feature를 뽑아주질 못했음. 전 처리에 많은 시간을 쏟아줘야 의미 있는 Feature를 뽑아 낼 수 있을 걸로 보입니다. 해결법 : Data section에서 문제영역(ROI)를 더 잘 잡아줘야합니다.
3. Permission 분석 방법 앱들의Permission을 이용해 분류 머신러닝 방법으로 각 permission에 따른 점수 부여(스팸 메일 분류 기법 이용)
3. Permission 분석 방법(xml file parsing) android.permission.GET_TASKS와 같은 형식으로 android.을 선언하기때문에, android. 의 문장을 기준으로 Parsing
3. Permission 분석 방법(xml to csv file) android.permission.GET_TASKS와 같은 형식으로 android.을 선언하기때문에, android. 의 문장을 기준으로 Parsing
3. Permission 분석 방법(permission vectorize1) 문자열을 Vector로 만들어줍니다.
3. Permission 분석 방법(permission vectorize2) Vector의 length 는 전체 Permission의 종류 Vector의 각 차원의 값은, 각 Permission의 유무 분류기는 Random ForestClassifier 사용
3. Permission 분석 방법(permission vectorize2) 6000개의 앱 중에서 289 종류의 permission이 존재함을 발견 Permission이 없는 Benign은 626개였고, Malware는 2개 Permission을 사용하지 않는다면, Benign으로 판단했습니다.
3. Permission 분석 방법(Git Link) https://github.com/gusdlf93/malware_detector/
3. 1D Convoultion 분석 방법 Permission 방법하고 거의 유사하지만, Vectorize된 Permission을 분류할 분류기가 Random fores가 아니라, 1D Convolution으로 바뀐다는것이 다릅니다. *머신러닝 분류기가 아니라, 딥러닝 분류기를 이용했다는 점이 다릅니다. *분류에 있어서 데이터셋을 재설정했습니다. 학습 데이터를 조금 더 늘려주기 위해서 기존의 데이터 60:20:20의 비율 을 70:15:15로 만들어 줍니다. *train( 70%), val(15%), test(15%)로 만들어 줍니다.
3. 1D Convoultion 분석 방법 Permission 방법하고 거의 유사하지만, Vectorize된 Permission을 분류할 분류기가 Random forest가 아니라, 1D Convolution으로 바뀐다는것이 다릅니다. *머신러닝 분류기가 아니라, 딥러닝 분류기를 이용했다는 점이 다릅니다. *분류에 있어서 데이터셋을 재설정했습니다. 학습 데이터를 조금 더 늘려주기 위해서 기존의 데이터 60:20:20의 비율 을 70:15:15로 만들어 줍니다. *train( 70%), val(15%), test(15%)로 만들어 줍니다.
3. 1Dconvolution 1DConvolution이 2D와 다른 점은, Filter가 1차원이라는 점밖에 없습니다. 필터의 크기, 스트라이드정도만 신경 써주면 됩니다.
3. 1Dconvolution 분류 성능은 96%가 나왔습니다. 해당 데이터 셋에서 Random Forest는 93%나왔습니다. https://github.com/gusdlf93/malware_detector/
4. 분석결과 및 고찰 • Dex + CNN (86%) • Xml + RandomForest (94%) • Xml + 1D convolution (96%) • Xml + ensemble(1D convolution + Random forest)(96.4%) • *ensemble 모델은 실습은 매우 복잡하지만, 성능은 0.4%의 차이밖에 없고, 오버피팅된 느낌이 좀 들어서, 설명에서 제외했습니다. • Dex파일을 이용해서 악성코드를 분류하려면 Data Section에서 더 중요한 문제영역(ROI)를 잡아줘야 할 거 같습니다.