파이썬 실습/악성코드_바이러스탐지 프로그램 만들기

파이썬 악성코드/바이러스 탐지 프로그램 만들기 - 3.파일업로드를 통한 악성코드 유무 확인

파기차차 2022. 11. 12. 14:26
728x90
반응형
SMALL
728x90

 

ㅁ 개요

 

 

O 프로그램 소개

 

 

 - 이번 프로그램은 이전글(2022.10.31 - [파이썬 실습/유틸리티] - 파이썬 악성코드/바이러스 탐지 프로그램 만들기 - 2.해시값을 이용한 악성코드 유무 확인)에 이은 세번째 글로 서버에 해시값이 없는 경우 파일을 서버에 업로드하여 다운로드 받은 파일이 악성코드에 감염되었는지 확인하는 방법에 대하여 설명합니다.

(본 블로그의 내용은 유튜브 동영상(파이썬 악성코드/바이러스 탐지 프로그램 만들기(making MalwareDetector by python) - 3.파일업로드를 통한 악성코드유무확인)에서 더욱 자세히 보실 수 있습니다.)

 

 

 

O 완성된 프로그램 실행 화면
 

 

 - 파일업로드를 이용한 악성코드 유무 확인에서 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

(1) 프로그램 실행 시 아래 그림과 같이 API 요청에 대한 응답으로 'result_code', 'result_msg', 'md5' 해시값 등을 얻어오고 있습니다. 이제 다시 서버에 해시값이 생성되었으므로 우리는 이 새로 생성된 해시값을 이용하여 파일의 악성유무를 판단할 수 있을 것입니다.

 

 

 


 

O 사전 준비 사항

 

 - 우리는 이번 테스트를 위해 멀웨어닷컴에서 해시값을 확인할 수 없는 새로운 악성파일이 필요합니다.이 악성파일을 얻기 위하여 다음과 같은 단계로 진행하며 준비할 것입니다.

 

!!!!! 주의 사항

우리가 준비하려는 새로운 악성파일은 말 그대로 악성코드가 포함된 파일이므로 취급시 매우 매우 조심하셔야 하며, 잘못하면 자신의 컴퓨터가 감염될 수 있으니, 이점이 우려되시는 분은 따라하지 마시기 바랍니다.!!!

 

 

 

 

 - 아래 사이트에 접속합니다.

https://bazaar.abuse.ch/browse/ <-- 악성코드 분석을 위해 새로운 멀웨어(악성코드)를 받을 수 있는 사이트

 

 

 

 - 다운로드 버튼 클릭하여 파일을 다운로드 합니다.

 

 

 - PC에 다운로드가 완료되면 압축을 해제(압축 해제 암호: infected) 합니다. <-- 취급시 반드시 주의하시기 바랍니다.

 

 

 - 백신의 실시간 검사가 켜져있으면 해당 악성파일을 인식하고, 백신이 삭제하거나, 격리소로 이동시킵니다.

 

 

 - 테스트를 위하여 잠시 백신의 실시간 감시 기능을 중지 시킬 수 있습니다. (아래 참조)

 

 - 다운로드 및 압축해제한 파일을 조심스럽게 우리가 프로그램을 실행할 위치에 놓아 둡니다.

 

 

 - 다운로드 받은 파일의 해시값을 확인 후 복사해 둡니다.(HashTab3 프로그램 이용)

 

 

 

 

 - 이제 우리는 다음 프로그램을 실행할 수 있는 단계로 넘어갈 준비가 되었습니다.


 

ㅁ 세부 내용
 
O 완성된 소스

 

import requests 
api_key = '본인의 api키'
params = {'api_key': api_key, 'hash': '642b9f73dc1c3c3c4b5deae96441843fcb20090cbc619fefe8b64da66dca71c2'}
response = requests.get('https://public.api.malwares.com/v3/file/mwsinfo', params=params)
json_response = response.json()
print(json_response)

 

 

import requests 
api_key = '본인의 API키값'

# file = 'C:/Users/hongkildong/Downloads/HashTab3Setup.exe'
file = '파일 경로'

params = {"api_key": api_key,"filename": file}
files = {"file": (file, open(file, "rb"), 'application/octet-stream')}
response = requests.post("https://public.api.malwares.com/v3/file/upload", files=files, data=params)
json_response = response.json()
print(json_response)
print(json_response['md5'])

 

O 소스 다운로드
 - cmd 또는 파워쉘, 비주얼스튜디오코드 등에서 아래와 같이 실행하시기 바랍니다.
>python 1.malwareCom_hash.py
>python 2.malwareCom_fileupload.py

 

1.malwareCom_hash.py
0.00MB
2.malwareCom_fileupload.py
0.00MB

 


 

O 기본 내용

 

 

1. 위의 사전 준비 사항에서 준비한 악성파일의 해시값을 아래와 같이 붙여 줍니다.

 

 

 

2. 프로그램을 실행하면 'result_code'가 0으로 나옵니다. 즉, 서버에 데이터(해시값)가 없음을 확인할 수 있으며, 우리는 파일을 업로드 하여 서버에 해시값이 존재하도록 해주어야 합니다. 아래 2가지 방법이 존재합니다.

2.1 서버에 자동으로 API를 이용하여 파일 업로드

2.2 서버에 수동으로 직접 파일 업로드

 

 

 

2.1 서버에 자동으로 API를 이용하여 파일 업로드를 해보겠습니다. 아래와 같이 코드를 작성해주시기 바랍니다.

 

2.1 프로그램을 실행 시키면 'result_code'가 1로 새로운 파일이 서버에 정상적으로 업로드 된 것을 확인할 수 있습니다.

2.1 악성 파일이 서버에 정상적으로 업로드되었으니(파일의 해시값 존재), 우리는 다시 '1.malwareCom_hash.py' 파일을 이용하여 해당 파일의 악성유무를 확인할 것입니다.

 

 

2.1 프로그램 실행 결과 프로그램은 정상적으로 실행되었으나, ai_score가 0으로 우리가 예상한 악성코드로 결과가 나오지 않았습니다. 'result_code'가 1로 서버에 정상적으로 데이터(해시값) 존재하는데 왜 이상한 결과가 나온 걸까요?

 

 

2.2 일단, 우리는 두번째 방법인 수동으로 파일을 직접 서버에 업로드 해보고 같은 결과가 나오는지 보겠습니다.

 

2.2 서버에 수동 업로드 결과 이전 API로 업로드한 결과와는 다르게 악성파일(ai_score가 9)로 나오고 있습니다.

관련하여 개인적으로 결론지은 내용은 API업로드의 경우 바로 적용되지 않고, 어느 정도 시간(수시간~1일)이 지나야 반영되는 것을 확인할 수 있었고, 이점을 반영하여 프로그램을 개발해야 할 것을 보입니다.

 

 

[참고] /v3/file/mwsinfo 응답코드

 

 

[참고] /v3/file/upload 응답코드

 

 

 

 

 

 

 

 

 

 


 

ㅁ 정리
 
O 오늘 우리가 배운 내용
 
 - 오늘 우리는 서버에 해시값이 없는 경우, 즉, 새로운 파일인 경우 서버에 파일을 업로드하여 그 파일이 악성코드에 감염되었는지를 확인하는 방법을 배웠습니다.
 - 간단히 정리해 보면 다음과 같습니다.
 > 1. 사전준비사항 : 새로운 멀웨어(악성코드)를 받을 수 있는 사이트에서 테스트용 파일 1개 다운로드, 압축해제 및 해시값 획득(복사)
 > 2. 위에서 획득한 해시값을 이용하여 '1.malwareCom_hash.py' 파일 실행 후 'result_code' :0 확인(즉, 서버에 데이터가 없음을 확인)
 > 3. 서버에 파일 업로드(1. API를 이용한 업로드, 2. 수동 업로드)
 > 4.수동 업로드는 파일의 악성유무 판단정보를 서버에 즉시 반영하나, API를 이용한 업로드는 바로 적용되지 않고, 일정시간 후에 반영되는 것을 확인
 
 
오늘은 여기까지 이며, 다음편에서 우리는 지금껏 수동으로 파일의 악성유무를 확인(1.해시값을 확인, 2.파일을 업로드하여 해시 값을 확인 등)하던 방법을 개선하여 다운로드 받은 파일을 자동으로 검사하는 방법에 대하여 공부해 보겠습니다.
 

 

위의 내용이 유익하셨다면, 좋아요와 구독 부탁드립니다.

 

 

감사합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST