이전 포스팅에서 바이러스토탈 소개와 기능, API를 이용한 웹사이트의 악성코드 감염 여부에 대해 알아보았는데요. 이번 포스팅은 바이러스토탈 API를 이용한 파일의 바이러스 감염 여부를 체크하는 방법에 대해 소개하고자 합니다. 소개드리는 방법은 웹에서 다운로드받은 파일이 의심스러운 경우 다양한 백신 엔진으로 빠르게 진단받을 수 있는 장점이 있습니다.
이번 포스팅에서도 바이러스토탈 API와 파이썬을 이용하여 진행하니, 해당 내용이 궁금하신 분은 이번 포스팅을 꼭 참고하시면 좋습니다.
Ⅰ. 바이러스토탈 API + 파이썬
▷ 바이러스토탈 기능과 API 키 생성방법이 궁금하신 분은 아래 링크의 이전 포스팅을 참고하면 됩니다.
▷ 본 포스팅에서 사용한 바이러스토탈 API는 버전 2로 사용하였고, 버전 2 가이드문서는 아래 링크를 참고하면 됩니다.
▷ 바이러스토탈 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
▽ 같이 보면 더 좋은 블로그 글 ▽
웹페이지의 외부 URL 리스트 확인 방법 with 파이썬 (3) | 2020.11.13 |
---|---|
사용량 초과 또는 기간 경과 파일 검색 with 파이썬 (1) | 2020.11.12 |
바이러스토탈을 이용한 웹사이트 악성코드 감염 여부 체크 (2) | 2020.11.10 |
구글 세이프브라우징을 이용한 악성코드 유포 사이트 점검 (0) | 2020.11.09 |
[PYTHON] 파이참(PyCharm) 설치 (0) | 2020.09.22 |
댓글 영역