VirusTotalのAPIを使ってみた

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要


VirusTotalのAPIを用いてURLやIPアドレスが悪意のあるかどうか調査するための手順を記載する。
本記事は以下のVirusTotal APIの公式サイト参考にして作成している。

VirusTotal API v3 Overview
VirusTotal's developers hub, the place to learn about VirusTotal's public and private APIs in order to programmatically scan files, check URLs, discover malicio...


VirusTotalとは


VirusTotal(ウイルス・トータル)とは、Googleが提供する無料のオンラインサービスで不審なファイル、URL、IPアドレスなどを70製品以上のウイルス対策エンジンを用いて一括チェックできる脅威インテリジェンスツールです。
VirusTotalのAPIを用いることでプログラムなどに埋め込むことができる。

VirusTotalのAPI Key取得


(1) ブラウザを用いて「https://www.virustotal.com/gui/home/upload」にアクセスし、右上部の「Sign up」をクリックする。


(2) ユーザー名やパスワードなどアカウント情報を入力し、「Join us」をクリックする。


(3) 左部に「Signed up successfully」というメッセージが表示されたことを確認する。


(4) 設定したメールアドレス宛に確認用メールが届くため、「Activate account」をクリックする。


(5) 「https://www.virustotal.com/gui/home/upload」のWebページに遷移されるため、右上部の「Sign in」をクリックする。


(6) ユーザー名とパスワードを入力して、「Sign in」をクリックする。


(7) 右上部の[アカウント] > [API Key]をクリックする。


(8) APIキーが隠されているため、表示してAPIキーを確認する。

VirusTotalのAPI実行(URL調査)


(1) 任意のURLをVirusTotalにてスキャンする。また、jqコマンドにてJSON形式の必要な箇所のみ表示する。

【実行コマンドのフォーマット】
$ curl --request POST \
     --url https://www.virustotal.com/api/v3/urls \
     --header "x-apikey: APIキーの文字列" \
     --header "accept: application/json" \
     --header "content-type: application/x-www-form-urlencoded" \
     --data-urlencode "url=調査対象のURL" \
 | jq '.data.links.self'


【実行コマンドの例】
$ curl --request POST \
     --url https://www.virustotal.com/api/v3/urls \
     --header "x-apikey: ff461d1bb18e60452a68d27c5d8c5f0005ad9b39d3785f307a9f2714439952fd" \
     --header "accept: application/json" \
     --header "content-type: application/x-www-form-urlencoded" \
     --data-urlencode "url=https://security-blog-it.com/" \
 | jq '.data.links.self'


【出力結果】
"https://www.virustotal.com/api/v3/analyses/u-efa6eb4694b58294d79336bd241973a8e79f162155427a008d48b857819e38dd-f93fb8a2"


(2) VirusTotalでのURLのスキャン結果を確認する。また、jqコマンドにてJSON形式の必要な箇所のみ表示する。

【実行コマンドのフォーマット】
$ curl --request GET \
     --url URLをScanした際のレスポンスURLリンク \
     --header "x-apikey: APIキーの文字列" \
     --header "accept: application/json" \
 | jq '.data.attributes.stats'


【実行コマンドの例】
$ curl --request GET \
     --url https://www.virustotal.com/api/v3/analyses/u-edca074237e05485ead9caad8f7ddcbc954379de06ae79e730c3fcc79fdba9d5-1758614009 \
     --header "x-apikey: ff461d1bb18e60452a68d27c5d8c5f0005ad9b39d3785f307a9f2714439952fd" \
     --header "accept: application/json" \
 | jq '.data.attributes.stats'


【出力結果】
{
  "malicious": 6,
  "suspicious": 2,
  "undetected": 28,
  "harmless": 62,
  "timeout": 0
}


VirusTotalのAPI実行(IPアドレス調査)


(2) VirusTotalでのIPアドレスのスキャン結果を確認する。また、jqコマンドにてJSON形式の必要な箇所のみ表示する。

【実行コマンドのフォーマット】
$ curl --request GET \
     --url https://www.virustotal.com/api/v3/ip_addresses/{スキャン対象のIPアドレス} \
     --header "x-apikey: 自身の API キー" \
     --header "accept: application/json" \
 | jq '.data.attributes.last_analysis_stats'


【実行コマンドの例】
$ curl --request GET \
     --url https://www.virustotal.com/api/v3/ip_addresses/15.204.155.25 \
     --header "x-apikey: ff461d1bb18e60452a68d27c5d8c5f0005ad9b39d3785f307a9f2714439952fd" \
     --header "accept: application/json" \
 | jq '.data.attributes.last_analysis_stats'


【出力結果】
{
  "malicious": 2,
  "suspicious": 5,
  "undetected": 28,
  "harmless": 58,
  "timeout": 0
}