PythonにてVirusTotalのAPIにアクセスし、URLの危険度情報を取得してみた

Pocket

前回まではPythonを使ってWebサイトの情報をスクレイピングしました。

その際にPython用に提供されているさまざまなライブラリを利用すれば比較的簡単に情報が抜き取れることを確認しました。

一方で、最近では多くのWebサイトの方で情報にアクセスする為のAPIを提供しており、それを利用すればもっと簡単、確実に必要な情報を取り出すことが可能となっています。

そこで今回は、そんなWebサイトの例としてVirusTotalが公開しているAPIにPythonからアクセスし、情報を取得してみたいと思います。

1.VirusTotalにアクセスする為のAPI Key取得

PythonからVirusTotalのAPIにアクセスする為には、まず、API Keyという自分の身元を証明するKeyを取得する必要があります。

そのAPI Key をPythonのプログラムを経由してVirusTotalに渡すことで、初めてWebサイトのAPIを利用することが可能になります。

API Key はVirusTotalのアカウント情報に紐づいていますので、もしまだアカウントを持っていなければ、それを作るところから始めます。

VirusTotalへのサインアップ

以下のVirusTotalのトップページ右上にある「Sign up」からアカウントの登録をしましょう。

VirusTotalのトップページ

アカウント情報を登録すると自分のメールアドレスにSign upを完了する為のメールが送られてきます。

そのメールのリンクをクリックすることでアカウントの登録が完了します。

VirusTotalへのログインとAPI Keyの取得

登録が完了したらさっそくVirusTotalにログインします。

ログインするとページの右上に自分のユーザアイコンが表示されています。

ユーザアイコンから「API Key」を選択

そのユーザアイコンをマウスでクリックすると、プルダウンリストに「API key」が表示されています。

それをクリックするとAPI Keyや利用制限などの情報が記載されたページが表示され、自分の API Key が確認できます。

2.PCに「vt-py」ライブラリをインストール

VirusTotal からそのサイトのAPIに簡単にアクセスする為のPython用のライブラリ「vt-py」が提供されています。

それをPyCharmなどの開発環境にインストールします。

PyCharmに「vt-py」を取り込み

あたらしいライブラリをPyCharmに導入する詳しい操作方法については、私の以前のブログにも記載していますので参考にしてみてください。

3.Pythonでプログラム開発

そしていつもどおり、おもむろにプログラムを開発します。

import vt

apikey = "<API Key>"
url = "<URL>"

# access to VirusTotal and get URL information(object)
client = vt.Client(apikey)
url_id = vt.url_id(url)
url = client.get_object("/urls/{}", url_id)

client.close()

# print each attribute from object
print(url.get("categories"))
print(url.get("last_analysis_date"))
print(url.get("times_submitted"))
print(url.get("last_analysis_stats"))

2行目の<API Key>の部分は自分のAPI Key を “8・・・・・a”のような感じで埋め込んでください。

また3行目の<URL>については、例えば yahooについて調べる場合は、”https://yahoo.co.jp”のような感じで埋め込んでください。

なお今回は、Pythonのプログラムに直接API Keyを埋め込む形になっていますが、正しくはAPI Key情報は別のファイルに保存し、しっかり暗号化などしておいてほうがよさそうです。

うっかり漏らしてしまうと、自分になりすましてアクセスされてしまいますよー。

4.Pythonの実行

実際にあるサイトについて実行した結果は以下の通り harmless : 87, malicious : 0 となっていました。問題ないという判断のようですね。

{'Forcepoint ThreatSeeker': 'search engines and portals', 'Sophos': 'portal sites', 'alphaMountain.ai': 'Search Engines/Portals', 'Comodo Valkyrie Verdict': 'mobile communications', 'BitDefender': 'news'}

1654330912

489

{'harmless': 87, 'malicious': 0, 'suspicious': 0, 'undetected': 8, 'timeout': 0}

ちなみに自分のサイト(k2-ornata.com)を調べようとしたところ、以下のとおり知らんと言われましたー。

vt.error.APIError: ('NotFoundError', ・・・

それなりに良い意味でも悪い意味でも有名なサイトでないといけないようです。^^;
まあ、すでにDBに格納されているデータから情報を取り出しているのであ当たり前ですね。。。

5.他にどんな情報が取れるのかは要確認・・・

今回は指定したURLに関して以下の4つの情報が取れることがわかりました。

categories
last_analysis_date
times_submitted
last_analysis_stats

しかし、その他どんな情報がとれるのかについては調べきることができませんでしたので、今後の課題にしておきたいと思います。

<参考サイト>

・VirusTotalの公式APIライブラリ「vt-py」を使ってみた。(たれながし.info)
https://tarenagashi.hatenablog.jp/entry/2021/06/09/223105
・vt-py Quickstart(VirusTotal)
https://virustotal.github.io/vt-py/quickstart.html#get-information-about-an-url

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA