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

파이썬 악성코드/바이러스 탐지 프로그램 만들기 - 2.해시값을 이용한 악성코드 유무 확인

파기차차 2022. 10. 31. 08:17
728x90
반응형
SMALL
728x90

ㅁ 개요

 

 

O 프로그램 소개

 

 

 - 이번 프로그램은 이전글(2022.10.29 - [파이썬 실습/유틸리티] - 파이썬 악성코드/바이러스 탐지 프로그램 만들기 - 소개편)에 이은 두번째 글로 해시값을 이용하여 다운로드 받은 파일이 악성코드에 감염되었는지 확인하는 방법에 대하여 설명합니다.

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

 

 

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

 

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

(1) 프로그램 실행 시 아래 그림과 같이 API 요청에 대한 응답으로 여러가지 정보들을 받아오게 되는데 우리는 이 중에서 가장 필요한 값인 'ai_score'와 'signcheck'를 주로 사용할 예정입니다.

(2) 아래 'ai_score'의 값이 1보다 크거나 'signcheck'의 요소 중 'verified'의 값이 'Unsigned'이면  악성파일로 의심합니다.

 

 

 


 

O 시작전 준비 사항

 

 - 위의 프로그램은 특정 악성코드 DB를 보유한 회사에서 제공하는 API를 이용하여 결과값을 받아 오고 있습니다. 우리가 사용하려는 이러한 프로그램은 다양하지만 여기서는 아래  2가지 중 malware.com을 선택하였습니다.

1) 바이러스토탈: 가장 유명하며, 가장 큰 데이터베이스를 보유하고 있고, 신뢰도가 가장 높으나, API 쿼리 요청을 하루에 1회만 허용하고 있어 이번 주제로 선택할 수 없었습니다.

2) 멀웨어닷컴: 바이러스토탈보다 인지도가 떨어지고, 신뢰도 또한 떨어지나, API서비스를 제공하고, 하루 100회의 요청을 할 수 있어 이를 선택하였습니다.

 

 

 - 바이러스토탈에 접속하여 회원 가입 후 'API key'를 누르면

 

 

 - API Key에 대한 정보를 볼 수 있으며, 하단에 분당 1회 반복요청, 일 1회, 월 31회로 요청을 제한하고 있음을 알 수 있습니다.

 

 

 - 프로그램을 실행하기 위해서는 몇가지 준비해야 할 사항 있습니다. 아래와 같이 따라하시면 되겠습니다.

1. API 요청을 위한 API 키 발급

2. 해시값을 얻기위한 별도 프로그램 다운로드 후 설치

 

 

1.1 아래 사이트에 방문하여 회원 가입합니다.(가입시 바로 API 키 발급됨)

www.malwares.com

 

 

 

1.2 로그인 후 우측 상단 본인 계정 클릭 > 계정 정보 > 'API Key' 에서 API키 확인이 가능합니다.

 

 

2.1 API 요청시 우리는 파일의 해시값으로 요청 합니다. 따라서 해시값을 얻기위해 본 과정에서는 별도 프로그램을 사용하는데, 아래 구글 사이트에서 '해시 탐색기에서 보기'로 검색 후 첫번째 검색 결과를 클릭 합니다.

 

 

 

2.2 화면 중간쯤 가보시면 'HashTab3setup.exe' 파일이 있습니다. 클릭하여 다운로드 합니다.(바이러스가 의심되는 경우 자신의 백신으로 한번 더 점검해 보시기 바랍니다.)

 

 

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


 

ㅁ 세부 내용
 
O 완성된 소스

 

import requests 
api_key = '본인의 API키값'
# params = {'api_key': api_key, 'hash': '5845F52D425C75E232B1AD5EE3B189A8'}
params = {'api_key': api_key, 'hash': '본인이 가지고 있는 파일의 해시값'}
response = requests.get('https://public.api.malwares.com/v3/file/mwsinfo', params=params)
json_response = response.json()
print(json_response)

 

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

 

1.malwareCom_hash.py
0.00MB

 

 


 

O 기본 내용
 

 

1.멀웨어닷컴 사이트 화면 하단에 'API'를 클릭합니다.

 

 

 

2. 아래에서 우리는 이번에 '/v3/file/mwinfo'를 사용하여 API 요청을 할 것입니다. 응답은 json형태로 오며 파이썬의 딕셔너리와 구조가 비슷하나 이후 소스에서 약간의 변경을 해주어야 합니다.

 

 

3. 홈페이지 나와 있는 '요청 예제' 이며, 아래 api 키와 해시를 넣고, 'Try It'를 누르면 하단에 '응답 예제'에 표시됩니다.

 

 

4. 우린 이미 'API 키'를 보유하고 있으므로 이제 특정파일의 해시값만 알면됩니다. 여기서는 우리가 앞서 다운로드 받았던 'HashTab3Setup.exe'파일이 악성코드에 감염되었는지를 확인하기 위하여 이 파일의 해시값을 확인해 보겠습니다.

아래와 같이 파일 선택 후 우클릭 > 속성을 선택합니다.

 

 

5. 아래 그림 처럼 뜨는데, 여기서 '파일 해시' 탭에서 'MD5'를 선택 후 우클릭하여 복사해 둡니다.

 

 

6. 아래와 같이 소스를 수정 후

'5845F52D425C75E232B1AD5EE3B189A8' : 'HashTab3Setup.exe'파일의 해시값

import requests 
api_key = '본인의 API키값'
params = {'api_key': api_key, 'hash': '5845F52D425C75E232B1AD5EE3B189A8'}
# params = {'api_key': api_key, 'hash': '본인이 가지고 있는 파일의 해시값'}
response = requests.get('https://public.api.malwares.com/v3/file/mwsinfo', params=params)
json_response = response.json()
print(json_response)

 

 

7. CMD 등에서 위의 소스를 실행 시키면 아래와 같이 서버로 부터 API 응답값을 제대로 받아오는 것을 볼 수 있습니다.

서두에서 말씀드린 바와 같이 우리는 이 중에서 가장 필요한 값인 'ai_score'와 'signcheck'를 주로 사용할 예정이며,

 'ai_score'의 값이 1보다 크거나 'signcheck'의 요소 중 'verified'의 값이 'Unsigned'이면  악성파일로 의심할 것입니다.

아래 결과에서는 'ai_score'의 값이 94이고, 'verified'가 'Unsigned'이므로 매우 큰 확률로 악성코드라고 볼 수 있습니다.

 

 

8. 다음편에서 우리는 해시 도구를 사용하지 않고 해시값을 얻어오는 방법과 서버에 특정 파일에 대한 해시정보가 없는 경우 어떻게 악성코드 유무를 판단하는지에 대한 방법을 살펴볼 것입니다.

 

 


 

ㅁ 정리
 
O 오늘 우리가 배운 내용
 
 - 오늘 우리는 해시값을 이용하여 API서버에 해시를 주고 해당 파일의 악성코드 유무를 판단하는 방법을 배웠습니다.
 - 간단히 정리해 보면 다음과 같습니다.
 > 1. 멀웨어 닷컴 사이트 회원 가입 후 API 키 획득
 > 2. 'HashTab3Setup.exe'파일 다운로드 후 악성코드 검사할 파일의 해시 값 획득
 > 3. 프로그램 실행(위의 소스 다운로드 후 사용)
 > 4.API 응답값에서 'ai_score'와 'signcheck'를 확인 후  'ai_score'의 값이 1보다 크거나 'signcheck'의 요소 중 'verified'의 값이 'Unsigned'이면 악성파일로 판단
 
 
오늘은 여기까지 입니다.
 

 

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

 

 

감사합니다.

 

728x90
반응형
LIST