Skip to content

가천대학교 정보보호 팀프로젝트 - 악성코드의 탐지 및 분류 인공지능

License

Notifications You must be signed in to change notification settings

leejiyoon7/Malware-detection-and-classification

Repository files navigation

가천대학교 정보보호 팀 프로젝트

악성코드의 탐지 및 분류 인공지능을 CNN을 이용하여 구현했습니다.

악성코드 탐지(binary classification) 인공지능(김동주): 완성_코드_김동주.ipynb
악성코드 분류 인공지능(이지윤, 김민석): model_test.py

Stack

Python  
Pandas  
CNN(Convolutional Neural Network)  
Keras  
Tensorflow  

기능

시연 영상 링크
https://github.com/leejiyoon7/Malware-detection-and-classification/tree/master/%EC%8B%9C%EC%97%B0%20%EC%98%81%EC%83%81

프레젠테이션 및 완료 보고서 링크
https://github.com/leejiyoon7/Malware-detection-and-classification/tree/master/%EB%B3%B4%EA%B3%A0%EC%84%9C%20%EB%B0%8F%20%EB%B0%9C%ED%91%9C%EC%9E%90%EB%A3%8C

코드실행

1. Image preprocessing

악성코드의 binary 값을 이용하여 이미지를 생성합니다. binary_image.py 안에 있는 targetdir을 바이러스 파일이 있는 경로로 지정해주고 save_dir에는 생성된 이미지 파일을 저장할 경로를 등록합니다.

targetdir = r"E:\정보보호\viruses-2010-05-18"
save_dir = r"E:\정보보호\aaa"

생성된 binary image 파일

이 과정이 모두 끝나면 CNN을 이용하여 악성코드 분류 및 탐지를 할 수 있습니다.

2. 바이러스 탐지

아래에 Jupyter Notebook markdown으로 기술되어 있음
https://github.com/leejiyoon7/Malware-detection-and-classification/blob/master/%EC%99%84%EC%84%B1_%EC%BD%94%EB%93%9C_%EA%B9%80%EB%8F%99%EC%A3%BC.ipynb

3. 바이러스 분류

3-1 Labeling 작업

각각의 바이러스 종류에 따라 분류되어있는 image 준비

  Malware-detection-and-classification
    |- virus
        |- Backdoor
        |- Constructor
        |- Exploit
        |- Worm
        |- ....

label.py 안에있는 caltech_dir를 image가 있는 경로로 지정해준 다음 categories에 caltech_dir 폴더 안에 있는 세부 폴더들의 이름을 나열하여 적어줍니다.

caltech_dir = "E:/정보보호/virus"
categories = ["Backdoor", "Constructor", "Exploit", "Flooder", "Hoax", "Rootkit", "Trojan", "Virus", "Worm", "HackTool"]

마지막으로 학습데이터가 저장될 경로를 np.save부분에 지정해줍니다.

np.save("E:/정보보호/image_data.npy", xy)

코드를 실행하면 각 image가 어느 바이러스인지 labeling되어 npy배열로 저장됩니다.

python label.py

3-2 CNN을 이용한 학습

Labeling stage에서 만든 .npy파일이 있는 위치를 설정합니다.

X_train, X_test, Y_train, Y_test = np.load('E:/정보보호/image_data_10.npy', allow_pickle=True)

인공지능 모델 학습 단계에서 batch_size와 epoch(학습 횟수), optimizer를 조정합니다.

model.compile(loss='categorical_crossentropy', optimizer='Adam', metrics=['accuracy'] )
history = model.fit(X_train, Y_train, batch_size=1000, nb_epoch=500, validation_data=(X_test, Y_test), shuffle=True, verbose=2)

마지막으로 학습된 모델이 저장될 위치와 이름을 지정합니다.

model.save('E:/정보보호/10_3.h5')

학습이 완료되면 모델이 저장된 후 accuracy와 loss 그래프가 출력됩니다.

Training accuracy는 약 87.5%, validation accuracy는 약 82.5% 입니다.

3-3 Test

model_test.py에서 아까 학습한 모델을 불러옵니다.

model = load_model('E:/정보보호/10_2.h5')

폴더에 분류해보고 싶은 바이러스의 image 파일을 넣고 경로를 지정합니다.

path = 'E:/정보보호/data_test/'+str(i)+'.png'

코드를 실행하면 앞서 라벨에 넣어주었던 카테고리 개수를 길이로 가진 배열이 출력되며 순서는 똑같습니다.
그중 가장 높은 수를 찾아 어떤 바이러스인지 출력합니다.

결과

바이러스 탐지

바이러스의 탐지에 대한 성능은 아래와 같습니다.


약 90~95% 사이의 정확도를 달성했습니다.

바이러스 분류

바이러스 분류에 대한 성능은 다음과 같습니다.

20개 중 17개 즉 약 85%의 정확도를 달성했습니다.

About

가천대학교 정보보호 팀프로젝트 - 악성코드의 탐지 및 분류 인공지능

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •