www.morihi-soc.net

セキュリティの話題を中心に取扱中

VirusTotal API の使い方

どうも。森久です。

マルウェアの情報を調査するときによく利用されるサービスといえば、VirusTotal が挙げられます。

VirusTotal は、アップロードされたファイルを複数のアンチウイルスソフトでスキャンした結果を閲覧することができるサービスを提供しています。またその他に、各種のハッシュ値やファイルを実行した時にアクセスされるファイル、通信先などがまとめられています。またファイルだけでなく、URL をアンチウイルスソフトでスキャンして、その結果を表示させることもできます。

VirusTotal を通じて、手元にマルウェアのファイルそのものを持っていなくても、ある程度の情報を得ることができます。

そしてなんと!この情報は API を通じて、プログラムで取得することが可能です。API を利用すると、スキャンした結果の取得だけではなく、ファイルをスキャンしたり、コメントをつけたりなど、様々なアクションをすることをすることができます。

詳細は VirusTotal API のドキュメントを参照していただきたいのですが、現在は英語のドキュメントのみ公開されています。また得られる情報について日本語で取り上げた記事なども見当たりませんでした。

そこで今回は、既にスキャンされているファイルから取得できる情報について紹介します。

 

API Key の取得

この記事を読む大部分の人には不要と思われますが、一応、VirusTotal API の取得方法について触れておきます。

VirusTotal の API を使うには、最初にアカウント登録し、API Key を得る必要があります。

 

アカウントの登録は非常に簡単で、画面右上の「コミュニティに参加」をクリックし、ユーザ名、メールアドレス、パスワードを入力するだけです。

VirusTotal-top

 

登録後、サインインすると、右上の登録アカウト名のメニューに「My API Key」という項目があります。

VirusTotal-menu

その項目のページに、自分専用の API Key が書いてあります。メモして大事に保管しておきましょう。

また注意点ですが、API Key には利用制限があります。一般登録のアカウントは Public API Key と呼ばれ、1分間に4回までしかリクエストを投げることはできません。仮にこの制限以上のリクエストを投げたいときには、Private API Key を取得する必要があります。

 

API Key の使い方(Python による例)

取得した API Key を利用して、スキャンされたファイルの情報を得るためのプログラムを容易します。

GitHub などに、様々なプログラミング言語で書かれた VirusTotal API を利用するプログラムが公開されています。

利用するプログラミング言語によって使い分けることができますが、より柔軟に情報を加工したい場合には自分でプログラミングした方が早いと思います。

下記に API を利用して特定のハッシュ値のスキャン結果を得る python プログラムの例を示します。

※途中、自分専用の API Key を書く場所があります。

実装内容は非常にシンプルで、情報を得たいハッシュ値と、API Keyを特定のURLに対して送信するだけです。
なおURLは利用目的ごとに用意されています。

使用方法は、引数にハッシュ値を指定して実行するだけです。

今回は得られた情報は特に加工せず、そのまま表示させています。得られた情報は JSON 形式のため、JSON のパーサを利用することで容易に加工することが可能です。

$ python vtinfo.py e7b53922a81f9a4b76364c093f4bafe2

{“scans”: {“Bkav”: {“detected”: true, “version”: “1.3.0.8042”, “result”: “W32.Clod396.Trojan.2896”, “update”:

(中略)

“Qihoo-360”: {“detected”: false, “version”: “1.0.0.1120”, “result”: null, “update”: “20160704”}}, “scan_id”: “8587e3a0312a6c4374989cbcca48dc54ddcd3fbd54b48833afda991a6a2dfdea-1467632878”, “sha1”: “8917c582ab5c2e831de6eba33b4f19d6e3a2cb70”, “resource”: “e7b53922a81f9a4b76364c093f4bafe2”, “response_code”: 1, “scan_date”: “2016-07-04 11:47:58”, “permalink”: “https://www.virustotal.com/file/8587e3a0312a6c4374989cbcca48dc54ddcd3fbd54b48833afda991a6a2dfdea/analysis/1467632878/”, “verbose_msg”: “Scan finished, information embedded”, “total”: 54, “positives”: 33, “sha256”: “8587e3a0312a6c4374989cbcca48dc54ddcd3fbd54b48833afda991a6a2dfdea”, “md5”: “e7b53922a81f9a4b76364c093f4bafe2”}

 

ハッシュ値から得られる情報

ファイルをスキャンした結果を得るためには、ファイルのハッシュ値を指定する必要があります。

先ほどの実行例のように、複数の項目にわかれています。項目名とその意味について紹介します。

表. ハッシュ値から得られる項目と情報

response_code API を利用したときの応答コード。

0→スキャン情報が無い。
1→スキャンが終了している。
−2→スキャン待ち。

verbose_msg response_codeの状態の説明
resource API 検索に使用したハッシュ値
scan_id スキャンごとの識別子
scan_date スキャン日時
permalink スキャン結果の個別 Web ページの URL
total スキャンしたアンチウイルスソフトの総数
positives アンチウイルスソフトが検知した件数
md5 MD5 のハッシュ値
sha1 SHA1 のハッシュ値
sha256 SHA256 のハッシュ値
scans アンチウイルスソフトでスキャンした結果。各アンチウイルスソフトのスキャン結果ごとに次のように細分化されています。

detected →検知したかしなかったか。検知した場合は「true」、しなかった場合は「false」です。
version →スキャンしたときのアンチウイルスソフトのバージョン
result →スキャンした結果の検出名
update →パターンファイルのアップデート日時

 

上記は Public API Key で得られる情報です。先述した Private API Key では、リクエスト数の制限緩和の他に、EXIF 情報やファイルの署名情報など、その他の情報が得られる場合があります。

詳細な情報は持ちあわせていないため、必要な方は VirusTotal に直接コンタクトしてください。

 

以上で VirusTotal API の使い方の紹介を終わります。最後まで読んでいただきありがとうございました。

 

参考情報

セキュリティアナリストとプログラミング【後編】
http://blog.recruit-tech.co.jp/2016/03/22/security_analyst_programming2/

ターミナル上から「VirusTotal」に検体をアップロード
http://kikuzou.hateblo.jp/entry/2015/03/16/112916

VirusTotal API を使ってみる
http://daruyanagi.jp/entry/2014/10/24/025219

VirusTotalのAPIを利用してURLスキャンスクリプトを作成した(perl版)
http://monaski.hatenablog.com/entry/2016/02/29/182742

VirusTotalのAPIを利用してURLスキャンスクリプトを作成した(python版)
http://monaski.hatenablog.com/entry/2016/03/01/001641

 

※本文中の情報は2016年7月17日時点のものです。今後、変更される場合があります。

Written by morihisa

7月 17th, 2016 at 10:10 pm

Posted in Malware,Security