Virustotal CLIへようこそ。これは、VirustotalとCommand-lineの両方のインターフェイスを愛する人向けに設計されたツールです。このツールを使用すると、以下を含む、VirustotalのWebページを使用して通常行うすべてのことを行うことができます。
そしてもっと...
このツールはフードの下でVirustotal APIを使用するため、Virustotal APIキーが必要になります。 Virustotalにサインアップすることで、無料のAPIキーを受け取りますが、無料のAPIキーには1分あたりのリクエストが限られており、検索やファイルのダウンロードなどのプレミアム機能にアクセスできません。これらのプレミアム機能の使用に興味がある場合は、お問い合わせください。
ツールをインストールするには、事前にコンパイルされたバイナリの1つを使用するか、自分で構築することにより、2つの方法があります。
事前にコンパイルされたバイナリは、リリースページにあります。 Windows、Linux、およびMac OS Xのバイナリがあります。それらを使用するには、ファイルをダウンロードして減圧し、使用がより便利だと思われるディレクトリに配置します。
プログラムをコンパイルするには、システムに1.14.x以上にインストールする必要があります。次のコマンドを入力してください。
$ git clone https://github.com/VirusTotal/vt-cli
$ cd vt-cli
$ make install
注: vt
バイナリを使用するには、 GOBIN
PATH
env変数の一部であることを確認してください。
$ export GOBIN= ` go env GOPATH ` /bin
$ export PATH= $PATH : $GOBIN
Mac OSユーザーには、利用可能な醸造式があります。これはVirustotalによって維持されていないことに注意してください。
$ brew install virustotal-cli
Windowsユーザーの場合、Wingetマニフェストが利用可能です。これはVirustotalによって維持されていないことに注意してください。
winget install VirusTotal.vt - cli
チョコレートもサポートされています(Virustotalによっても維持されていません):
choco install vt - cli
Windowsでvt-cli
定期的に使用する場合は、標準のWindowsコンソールを避け、代わりにCygwinを使用することを強くお勧めします。 Cygwinのパフォーマンスははるかに優れている間、大量のテキストを印刷すると( vt-cli
通常そうであるように)、Windowsコンソールは非常に遅いです。さらに、Windowsコンソールが提供していない便利な機能であるCygwinのコマンドオート完了に対するサポートから利益を得ることができます。自動完了を活用するために、Cygwinのインストール中にbash-completion
パッケージを必ず含めてください。
VT-CLIツールをインストールしたら、APIキーで構成することができます。これは厳密に必要ではありません。 --apikey
オプション( -k
短い形式)を使用してツールを呼び出すたびにAPIキーを提供できるからですが、ツールを頻繁に使用する場合は少し面倒です(そして、私たちはあなたがするに違いない!)。 APIキーを構成するには、次のタイプを入力します。
$ vt init
このコマンドは、APIキーを要求し、ホームディレクトリ(〜/.vt.toml)の構成ファイルに保存します。 VTCLI_APIKEY
環境変数を使用してAPIキーを指定することもできます。 APIキーを複数の方法で指定すると、 --apikey
オプションが最も優先され、その後にVTCLI_APIKEY
環境変数が続きます。構成ファイルのAPIキーは最後の手段として使用されます。
HTTPプロキシの背後にいる場合はvt-cli
複数の方法でプロキシサーバーのアドレスであることを伝えることができます。 1つは、次のような--proxy
オプションを使用しています。
$ vt --proxy http://myproxy.com:1234 < command >
また、 VTCLI_PROXY
環境変数を使用したり、次の行を構成ファイルに追加したりすることもできます。
proxy= " http://myproxy.com:1234 "
このツールを頻繁に使用する場合は、Command Auto Completionが必要になる場合があります。貴重な時間とキーストロークの両方を節約します。ただし、以下の手順に従う前に、前のセクションで説明したようにAPIを構成する必要があることに注意してください。 APIは、アクセスできるコマンドを決定するために必要です。
Linux:
$ vt completion bash > /etc/bash_completion.d/vt
Mac OS X:
$ brew install bash-completion
$ vt completion bash > $( brew --prefix ) /etc/bash_completion.d/vt
次の行を~/.bash_profile
に追加します。
if [ -f $( brew --prefix ) /etc/bash_completion ] ; then
. $( brew --prefix ) /etc/bash_completion
fi
Cygwin:
bash-completion
パッケージがインストールされていることを確認してください(Cygwinがデフォルトでインストールしない)と入力してください。
$ vt completion bash > /usr/share/bash-completion/completions/vt
autocomprotionが動作を開始するためには、シェルを再起動する必要がある場合があります。
vt completion zsh
からの出力スクリプトは、 $fpath
ディレクトリのどこかに配置する必要があります。たとえば、 .oh-my-zsh/completions
ディレクトリ:
$ mkdir /Users/ $USERNAME /.oh-my-zsh/completions
$ vt completion zsh > /Users/ $USERNAME /.oh-my-zsh/completions/_vt
シェルを再起動します。
ファイルに関する情報を取得します。
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
JSON形式のファイルに関する情報を取得します。
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 --format json
ファイルの特定の分析レポートを取得します。
$ # File analysis IDs can be given as `f-<file_SHA256_hash>-<UNIX timestamp>`...
$ vt analysis f-8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85-1546309359
$ # ...or as a Base64 encoded string, retrieved from the `vt scan file` command:
$ vt scan file test.txt
test.txt MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA==
$ vt analysis MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA==
- _id: " MDJiY2FiZmZmZmQxNmZlMGZjMjUwZjA4Y2FkOTVlMGM6MTU0NjQ1NDUyMA== "
_type: " analysis "
date: 1546454520 # 2019-01-02 13:42:00 -0500 EST
stats:
failure: 0
harmless: 0
malicious: 0
suspicious: 0
timeout: 0
type-unsupported: 0
undetected: 0
status: " queued "
テキストファイルにハッシュのリストが与えられたファイルをダウンロードし、1行ごとに1つのハッシュ:
$ cat /path/list_of_hashes.txt | vt download -
URLに関する情報を取得します:
$ vt url http://www.virustotal.com
URLを提供するIPアドレスを取得します。
$ vt url last_serving_ip_address http://www.virustotal.com
ファイルの検索:
$ vt search " positives:5+ type:pdf "
ファイルをスキャンします。
$ vt scan file < yourfile >
< yourfile > ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ==
$ vt analysis ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ==
- _id: " ZDZiOTcxY2JhNDE0MWU5ZWRjN2JjNGQ2NTdhN2VjODU6MTU3MDE3Mjg1NQ== "
_type: " analysis "
date: 1570172855 # 2019-10-04 09:07:35 +0200 CEST
stats:
failure: 0
harmless: 0
malicious: 0
suspicious: 0
timeout: 0
type-unsupported: 0
undetected: 0
status: " queued "
CSV形式で検索からファイルの検出とタグをエクスポートします。
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format csv
JSON形式の検索からファイルの検出とタグをエクスポートします。
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format json
ファイル、URL、ドメイン、IPアドレス、またはVirustotalのその他のオブジェクトに関する情報を要求すると、通常は必要以上のデータ(デフォルトではYAML形式で)が得られます。 VT -CLIツールで示されている情報を絞り込むことができます。 --include
および--exclude
コマンドラインオプション( -i
および-x
が短い形式)を使用できます。
これらのオプションは、データを構成するフィールドと一致するパターンを受け入れ、それらのサブセットのみを含めるか、面白くないフィールドを除外することができます。例として、 http://www.virustotal.com
に関するデータを使用してどのように機能するかを見てみましょう。
$ vt url http://www.virustotal.com
- _id: 1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31
_type: " url "
first_submission_date: 1275391445 # 2010-06-01 13:24:05 +0200 CEST
last_analysis_date: 1532442650 # 2018-07-24 16:30:50 +0200 CEST
last_analysis_results:
ADMINUSLabs:
category: " harmless "
engine_name: " ADMINUSLabs "
result: " clean "
AegisLab WebGuard:
category: " harmless "
engine_name: " AegisLab WebGuard "
result: " clean "
AlienVault:
category: " harmless "
engine_name: " AlienVault "
result: " clean "
last_http_response_code: 200
last_http_response_content_length: 7216
last_http_response_content_sha256: " 7ed66734d9fb8c5a922fffd039c1cd5d85f8c2bb39d14803983528437852ba94 "
last_http_response_headers:
age: " 26 "
cache-control: " public, max-age=60 "
content-length: " 7216 "
content-type: " text/html "
date: " Tue, 24 Jul 2018 14:30:24 GMT "
etag: " " bGPKJQ " "
expires: " Tue, 24 Jul 2018 14:31:24 GMT "
server: " Google Frontend "
x-cloud-trace-context: " 131ac6cb5e2cdb7970d54ee42fd5ce4a "
x-frame-options: " DENY "
last_submission_date: 1532442650 # 2018-07-24 16:30:50 +0200 CEST
private: false
reputation: 1484
times_submitted: 213227
total_votes:
harmless: 660
malicious: 197
返されたデータは通常、階層構造に従い、いくつかのトップレベルフィールドがサブフィールドを含む可能性のあるサブフィールドを含む可能性があることに注意してください。上記の例では、 last_http_response_headers
にはサブフィールドのage
、 cache-control
、 content-length
などがありますが、 total_votes
にはharmless
でmalicious
があります。階層内の特定のフィールドを参照するには、コンピューターのファイルを識別する方法と同様に、パスを使用できますが、この場合、パスコンポーネントのセパレーターとしてドット文字(。)を使用します。ほとんどのファイルシステムで使用されるスラッシュ(またはバックスラッシュ)の。次のものは、例の構造の有効なパスです。
last_http_response_headers.age
total_votes.harmless
last_analysis_results.ADMINUSLabs.category
last_analysis_results.ADMINUSLabs.engine_name
両方によって受け入れられているフィルター--include
と--exclude
それぞれ1つと多くのパス要素のプレースホルダーとして*
および**
使用できるパスです。たとえばfoo.bar
foo.*
foo.**
* foo.bar
ではfoo.bar.baz.qux
foo.bar.baz
foo.bar.baz
なく一致します。 foo.baz.qux
foo.bar.qux
foo.*.qux
foo.bar.baz.qux
foo.**.qux
foo.bar.baz.qux
foo
で始まり、 qux
で終わるパス。
希望するフィールドのみをチェリーピッキングするには、上記のようにパス--include
が使用する必要があります。また、 --include
引数を複数回使用するか、パターンのコンマ分離されたリストで使用することにより、複数のパターンを含めることもできます。次の2つのオプションは同等です。
$ vt url http://www.virustotal.com --include=reputation --include=total_votes. *
$ vt url http://www.virustotal.com --include=reputation,total_votes. *
ここでは、その出力にはさまざまな例があります( vt url http://www.virustotal.com
上記の構造を返すと仮定して):
$ vt url http://www.virustotal.com --include=last_http_response_headers.server
- last_http_response_headers:
server: " Google Frontend "
$ vt url http://www.virustotal.com --include=last_http_response_headers. *
- last_http_response_headers:
age: " 26 "
cache-control: " public, max-age=60 "
content-length: " 7216 "
content-type: " text/html "
date: " Tue, 24 Jul 2018 14:30:24 GMT "
etag: " " bGPKJQ " "
expires: " Tue, 24 Jul 2018 14:31:24 GMT "
server: " Google Frontend "
x-cloud-trace-context: " 131ac6cb5e2cdb7970d54ee42fd5ce4a "
x-frame-options: " DENY "
$ vt url http://www.virustotal.com --include=last_analysis_results. **
- last_analysis_results:
ADMINUSLabs:
category: " harmless "
engine_name: " ADMINUSLabs "
result: " clean "
AegisLab WebGuard:
category: " harmless "
engine_name: " AegisLab WebGuard "
result: " clean "
AlienVault:
category: " harmless "
engine_name: " AlienVault "
result: " clean "
$ vt url http://www.virustotal.com --include=last_analysis_results. * .result
- last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
$ vt url http://www.virustotal.com --include= ** .result
- last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
また、 _id
と_type
もフィールド名であるため、フィルターで使用できることに注意してください。
$ vt url http://www.virustotal.com --include=_id,_type, ** .result
- _id: " 1db0ad7dbcec0676710ea0eaacd35d5e471d3e11944d53bcbd31f0cbd11bce31 "
_type: " file "
last_analysis_results:
ADMINUSLabs:
result: " clean "
AegisLab WebGuard:
result: " clean "
AlienVault:
result: " clean "
--exclude
オプションは同様に動作します--include
が、一致するフィールドを出力に含める代わりに、一致するフィールド以外のすべてが含まれます。ほとんどのフィールドを保持したいときは、このオプションを使用できますが、面白くないフィールドのいくつかは除外できます。使用する--exclude
、 --include
と--exclude
--include
、最初に--include
に--exclude
ます。パターン。