이전 포스팅에서 구글 세이프브라우징을 이용한 웹사이트 악성코드 감염 여부 체크하는 방법에 대해 소개해드렸는데요. 이번 포스팅에서는 바이러스토탈(Virustotal)을 이용한 웹사이트의 악성코드 감염 여부를 체크하는 방법에 대해 소개드리려고 합니다. 바이러스토탈은 무료로 파일 검사를 제공하는 웹사이트로 최대 70가지 이상의 각기 다른 바이러스 검사 소프트웨어 제품을 사용하기 때문에 서로 다른 검사 결과를 한눈에 쉽게 비교하여 악성코드 감염 여부를 판단하는데 도움을 줍니다.
바이러스토탈에서는 API를 제공하고 있고, 이를 이용하여 자동으로 웹사이트 악성코드 감염 체크를 할 수 있습니다. 이번 포스팅에서는 바이러스토탈 API 생성 방법과 파이썬을 이용한 자동 점검 방법에 대해 알아보도록 하겠습니다.
Ⅰ. 바이러스토탈 소개
Ⅱ. 바이러스토탈 API
Ⅲ. 바이러스토탈 API + 파이썬
▷ 앞서 설명한 것과 같이 바이러스토탈은 무료로 파일 검사를 제공하는 웹사이트입니다. 최근에는 Pro 버전이 나왔고, 비용을 지불하면 더 강력한 기능을 사용할 수 있습니다. 다만, 분당 처리 분석 건수가 많지 않고, 기본 기능만 사용한다면 무료도 충분히 좋습니다.
▷ 악성코드 의심 파일을 업로드하여 분석이 가능하며, URL(웹사이트) 점검과 검색 기능을 제공합니다.
▷ 바이러스토탈에 접속하여 악성코드 의심 파일 업로드 또는 웹사이트 URL을 수동 입력하여 점검을 받는 것 이외에도 API를 이용하여 자동 점검이 가능합니다.
▷ API를 이용하기 위해서는 아래 그림과 같이 회원가입이 필요합니다.
▷ 회원가입 후 로그인을 하면 오른쪽 상단 프로파일을 클릭하면 드롭다운 메뉴로 API 메뉴 확인이 가능합니다. 해당 메뉴 클릭시 바이러스토탈 개인 API 확인이 가능합니다.
▷ 본 포스팅에서 사용한 바이러스토탈 API는 버전 2로 사용하였고, 버전 2 가이드문서는 아래 링크를 참고하면 됩니다.
▷ 바이러스토탈 API + 파이썬 자동화 순서는 아래와 같습니다.
→ 환경 설정 : 바이러스토탈 API 키 설정, 점검 URL 설정
→ 바이러스토탈 URL 스캔 API 로 요청
→ 바이러스토탈 URL 스캔 리포트 API 로 요청
→ 점검 결과 확인
▷ 위에서 설명한 과정을 코딩으로 구현하면 아래와 같습니다.
import requests, time
# 바이러스토탈 API Key
my_apikey = '바이러스토탈 개인 API Key 입력'
# 점검 대상 URL
my_url = '점검 대상 URL 입력'
# 바이러스토탈 URL 스캔 주소
url_scan = 'https://www.virustotal.com/vtapi/v2/url/scan'
scan_params = {'apikey': my_apikey, 'url': my_url}
scan_response = requests.post(url_scan, data=scan_params)
# URL 스캔 시작
print('Virustotal URL SCAN START (60 Seconds Later) : ', my_url, '\n')
# URL 스캔 후 1분 대기 : 결과가 바로 나오지 않기 때문에 1분 정도 대기
time.sleep(60)
# 바이러스토탈 URL 점검 결과 주소
url_report = 'https://www.virustotal.com/vtapi/v2/url/report'
report_params = {'apikey': my_apikey, 'resource': my_url}
report_response = requests.get(url_report, params=report_params)
# 점검 결과 데이터 추출
report = report_response.json()
report_scan_date = report.get('scan_date')
report_scan_result = report.get('scans')
report_scan_venders = list(report['scans'].keys())
num = 1
# URL 점검 결과 리포트 조회하기
# 점검 완료 메시지
print(report.get('verbose_msg'), '\n')
time.sleep(1)
# 데이터 전체 보기
#print('Report : ', report)
# 벤더 리스트 보기
#print(report_scan_venders)
# 스캔 결과 데이터만 보기
print('Scan Date (UTC) : ', report_scan_date)
for vender in report_scan_venders:
outputs = report_scan_result[vender]
outputs_keys = report_scan_result[vender].get('result')
print('No', num, 'Vender Name :', vender, ', Scan Result :', outputs_keys)
num = num + 1
▽ 같이 보면 더 좋은 블로그 글 ▽
사용량 초과 또는 기간 경과 파일 검색 with 파이썬 (1) | 2020.11.12 |
---|---|
바이러스토탈(Virustotal)을 이용한 파일 바이러스 점검 (0) | 2020.11.11 |
구글 세이프브라우징을 이용한 악성코드 유포 사이트 점검 (0) | 2020.11.09 |
[PYTHON] 파이참(PyCharm) 설치 (0) | 2020.09.22 |
[PYTHON ] 파이썬 3.8 설치 방법 (0) | 2020.09.21 |
댓글 영역