상세 컨텐츠

본문 제목

바이러스토탈(Virustotal)을 이용한 파일 바이러스 점검

Python

by mp.jamong 2020. 11. 11. 00:10

본문

 

이전 포스팅에서 바이러스토탈 소개와 기능, API를 이용한 웹사이트의 악성코드 감염 여부에 대해 알아보았는데요. 이번 포스팅은 바이러스토탈 API를 이용한 파일의 바이러스 감염 여부를 체크하는 방법에 대해 소개하고자 합니다. 소개드리는 방법은 웹에서 다운로드받은 파일이 의심스러운 경우 다양한 백신 엔진으로 빠르게 진단받을 수 있는 장점이 있습니다.

 

이번 포스팅에서도 바이러스토탈 API와 파이썬을 이용하여 진행하니, 해당 내용이 궁금하신 분은 이번 포스팅을 꼭 참고하시면 좋습니다.

 

Contents | 바이러스토탈을 이용한 파일 바이러스 점검

Ⅰ. 바이러스토탈 API + 파이썬

 

 

 

1. 바이러스토탈 API + 파이썬

 

▷ 바이러스토탈 기능과 API 키 생성방법이 궁금하신 분은 아래 링크의 이전 포스팅을 참고하면 됩니다.

 

바이러스토탈을 이용한 웹사이트 악성코드 감염 여부 체크

이전 포스팅에서 구글 세이프브라우징을 이용한 웹사이트 악성코드 감염 여부 체크하는 방법에 대해 소개해드렸는데요. 이번 포스팅에서는 바이러스토탈(Virustotal)을 이용한 웹사이트의 악성코

mpjamong.tistory.com

▷ 본 포스팅에서 사용한 바이러스토탈 API는 버전 2로 사용하였고, 버전 2 가이드문서는 아래 링크를 참고하면 됩니다.

 

Getting started with v2

 

developers.virustotal.com

 

▷ 바이러스토탈 API + 파이썬 자동화 순서는 아래와 같습니다.

 → 환경 설정 : 바이러스토탈 API 키 설정, 점검 파일 설정

 → 바이러스토탈 파일 스캔 API 로 요청

 → 바이러스토탈 파일 스캔 리포트 API 로 요청

 → 점검 결과 확인

 

 

▷ 위에서 설명한 과정을 코딩으로 구현하면 아래와 같습니다.


import requests, time

# 바이러스토탈 API Key
my_apikey = '바이러스토탈 개인 API Key 입력'

# 바이러스 의심 파일 설정
file = '바이러스 의심되는 파일 입력'
files = {'file': (file, open(file, 'rb'))}

# 바이러스토탈 파일 스캔 주소
url_scan = 'https://www.virustotal.com/vtapi/v2/file/scan'
url_scan_params = {'apikey': my_apikey}

# 바이러스토탈 파일 스캔 시작
response_scan = requests.post(url_scan, files=files, params=url_scan_params)
result_scan = response_scan.json()
scan_resource = result_scan['resource']

# URL 스캔 시작 안내
print('Virustotal FILE SCAN START (60 Seconds Later) : ', file, '\n')

# URL 스캔 후 1분 대기 : 결과가 바로 나오지 않기 때문에 1분 정도 대기
time.sleep(60)

# 바이러스토탈 파일 스캔 결과 주소
url_report = 'https://www.virustotal.com/vtapi/v2/file/report'
url_report_params = {'apikey': my_apikey, 'resource': scan_resource}

# 바이러스토탈 파일 스캔 결과 리포트 조회
response_report = requests.get(url_report, params=url_report_params)

# 점검 결과 데이터 추출
report = response_report.json()
report_scan_date = report.get('scan_date')
report_scan_sha256 = report.get('sha256')
report_scan_md5 = report.get('md5')
report_scan_result = report.get('scans')
report_scan_vendors = list(report['scans'].keys())
report_scan_vendors_cnt = len(report_scan_vendors)

num = 1

# 점검 완료 메시지
print(report.get('verbose_msg'), '\n')
time.sleep(1)

# 파일 스캔 결과 리포트 데이터 보기
print('Scan Date (UTC) : ', report_scan_date)
print('Scan File SHA256 : ', report_scan_sha256)
print('Scan File MD5 : ', report_scan_md5)
print('Scan File Vendor CNT : ', report_scan_vendors_cnt, '\n')

time.sleep(2)

# 바이러스 스캔 엔진사별 데이터 정리
for vendor in report_scan_vendors:
    outputs = report_scan_result[vendor]
    outputs_result = report_scan_result[vendor].get('result')
    outputs_version = report_scan_result[vendor].get('version')
    outputs_detected = report_scan_result[vendor].get('detected')
    outputs_update = report_scan_result[vendor].get('update')

    print('No', num,
          'Vendor Name :', vendor,
          ', Vendor Version :', outputs_version,
          ', Scan Detected :', outputs_detected,
          ', Scan Result :', outputs_result)
    num = num + 1

 

 

▽ 같이 보면 더 좋은 블로그 글 

 

바이러스토탈을 이용한 웹사이트 악성코드 감염 여부 체크

이전 포스팅에서 구글 세이프브라우징을 이용한 웹사이트 악성코드 감염 여부 체크하는 방법에 대해 소개해드렸는데요. 이번 포스팅에서는 바이러스토탈(Virustotal)을 이용한 웹사이트의 악성코

mpjamong.tistory.com

 

구글 세이프브라우징을 이용한 악성코드 유포 사이트 점검

크롬 브라우저를 이용하여 웹사이트 이용 시 혹시 아래 그림과 같이 빨간 화면의 경고 페이지를 본 경우 없으신가요? 만약 없다면 다행히도 안전한 웹사이트를 이용하는 것으로 안심해도 걱정

mpjamong.tistory.com

관련글 더보기

댓글 영역