読者です 読者をやめる 読者になる 読者になる

conf t

インフラエンジニアのメモ

VirusTotalのAPIを利用してURLスキャンスクリプトを作成した(perl版)

VirusTotalというファイルやURLのスキャンし安全か危険か教えてくれるサイトがあります。
この手のサイトはいくつかありますが、VirusTotalの優れている点は
複数のスキャンサイトで一括してスキャンし、その結果を教えてくれる点です。

私もURLスキャンをたまに使うのですが、難点なのが1URLづつしかスキャンできない点です。

そこでVirusTotalが公開しているAPIを用いて、コマンドラインからスキャン結果を表示できるスクリプトを作成しました。
注意:新規スキャンはしないで過去のスキャン結果を呼んでくるツールです。

言語はperlならどこでも動かくかなと思ってperlで書きましたが結局JSONモジュールのインストールが必要でした。
python版も作成しました。
VirusTotalのAPIを利用してURLスキャンスクリプトを作成した(python版) - conf t

このスクリプト単体では1つのURLしかスキャンできませんが、コマンドラインを駆使すれば複数URLを順次スキャンできます。

github.com

利用準備

ダウンロード
スクリプトをダウンロードして適当な場所においてください。

API keyの準備
VirusTotalAPI Keyが必要です。
VirusTotalにユーザ登録するとPublic API Keyが1個もらえます。
これをスクリプト中のAPI keyの変数に埋め込んでください。

実行環境
検証したCentOSではperlJSONモジュールがなかったのでインストールしました。

注意点

Public API Keyだと1分に4つまでしかスキャン実行できませんので注意してください。

実行例

パターン1
標準入力からURLを入力して実行する

$ perl vt_urlrepo.pl
www.yahoo.co.jp
2016-02-29 01:15:05,http://www.yahoo.co.jp/,2,67,CLEAN MX:phishing site;SCUMWARE.org:malware site

パターン2
パイプで渡して実行する

$ echo www.yahoo.co.jp | perl vt_urlrepo.pl
2016-02-29 01:15:05,http://www.yahoo.co.jp/,2,67,CLEAN MX:phishing site;SCUMWARE.org:malware site

パターン3
while文と合わせて複数URLのスキャン結果を取り出す。
list.txtに事前にURLを記載しておく。
16秒のsleepは1分に4回実行の制限があるため。

$ while read line;do echo $line|perl vt_urlrepo.pl;sleep 16;done < list.txt
2016-02-29 01:15:05,http://www.yahoo.co.jp/,2,67,CLEAN MX:phishing site;SCUMWARE.org:malware site
2016-02-29 02:36:42,http://www.google.co.jp/,0,67,
2016-02-28 09:10:26,http://qiita.com/,0,67,
2016-02-28 09:01:53,http://hatenablog.com/,0,67,

結果の見方

スキャン結果はcsvで表示されます。フォーマットは以下です。
scan_date,url,positives,total,positives detail
positivesが0以上であればヒットしたサイトがあるということです。
どのサイトでヒットしたかは、一番右側のpositives detailで羅列されます。

広告を非表示にする