Добро пожаловать в вирустотальный CLI, инструмент, предназначенный для тех, кто любит как вирустотальные, так и командные интерфейсы. С помощью этого инструмента вы можете делать все, что вы обычно делаете, используя веб -страницу Virustotal, включая:
И гораздо больше ...
Поскольку этот инструмент использует вирустотальный API под капотом, вам понадобится вирустотальный ключ API. Однако, подписываясь на Virustotal, вы получите бесплатный ключ API, однако, бесплатные клавиши API имеют ограниченное количество запросов в минуту, и у них нет доступа к некоторым премиальным функциям, таким как поиски и загрузки файлов. Если вы заинтересованы в использовании этих премиальных функций, пожалуйста, свяжитесь с нами.
Есть два способа установки инструмента: используя один из наших предварительно скомпилированных двоичных файлов или создавая его самостоятельно.
Предварительно скомпилированные двоичные файлы можно найти на странице выпусков. Существуют двоичные файлы для Windows, Linux и Mac OS X. Чтобы использовать их, просто загрузите файл, распаковываете его и поместите в каталог, где вы считаете более удобным в использовании.
Для составления программы, которая вам понадобится 1.14.x или выше, установлена в вашей системе, и введите следующие команды:
$ git clone https://github.com/VirusTotal/vt-cli
$ cd vt-cli
$ make install
Примечание. Чтобы использовать двоичный файл vt
, убедитесь, что GOBIN
является частью переменной Env PATH
:
$ 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
Шоколад также поддерживается (также не поддерживается вирустотальным):
choco install vt - cli
Если вы планируете использовать vt-cli
в Windows на регулярной основе, мы настоятельно рекомендуем вам избежать стандартной консоли Windows и вместо этого использовать Cygwin. Консоль Windows очень медленная при печати большого количества текста (как обычно делает vt-cli
), в то время как Cygwin работает намного лучше. Кроме того, вы можете извлечь выгоду из поддержки Cygwin для автоматического завершения команды, удобной функции, которую консоль Windows не предлагает. Чтобы воспользоваться преимуществами автоматического заполнения, обязательно включите пакет bash-completion
при установке Cygwin.
После того, как вы установили инструмент VT-CLI, вы можете настроить его с помощью клавиши API. Это не является строго необходимым, так как вы можете предоставить свой ключ API каждый раз, когда вы вызываете инструмент, используя опцию --apikey
( -k
в короткой форме), но это немного хлопот, если вы собираетесь использовать инструмент часто (И мы поспорим, вы сделаете!). Для настройки ключа API просто введите:
$ vt init
В этой команде запросится ваш ключ API и сохранить его в файл конфигурации в вашем домашнем каталоге (~/.vt.toml). Вы также можете указать свой ключ API, используя переменную среды VTCLI_APIKEY
. Если вы указали свой ключ API несколькими способами, опция --apikey
будет иметь наивысший приоритет, за которым следует переменная среды VTCLI_APIKEY
, ключ API в файле конфигурации будет использоваться в качестве последнего курорта.
Если вы находитесь за прокси-сервером HTTP, вы можете сообщить vt-cli
, который является адресом вашего прокси-сервера несколькими способами. Один использует вариант --proxy
, как в:
$ vt --proxy http://myproxy.com:1234 < command >
Вы также можете использовать переменную среды VTCLI_PROXY
или добавить следующую строку в файл конфигурации:
proxy= " http://myproxy.com:1234 "
Если вы собираетесь использовать этот инструмент часто, вы можете иметь автоматическое завершение команды. Это экономит как драгоценное время, так и клавишные. Однако обратите внимание, что вы должны настроить ваш 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
❗ Вам может потребоваться перезагрузить оболочку, чтобы автозаполнение начало работать.
Выходной скрипт от 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 "
Загрузить файлы, предоставленные списком хэшей в текстовом файле, один хеш на строку:
$ cat /path/list_of_hashes.txt | vt download -
Получите информацию о URL:
$ vt url http://www.virustotal.com
Получите IP -адрес, который служил URL:
$ 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
-это пути, по которым мы можем использовать *
и **
в качестве заполнителей для одного и многих элементов пути соответственно. Например, foo.*
Соответствует foo.bar
, но не foo.bar.baz
, а foo.**
соответствует foo.bar
, foo.bar.baz
и foo.bar.baz.qux
. С другой стороны, foo.*.qux
совпадает с foo.bar.qux
и foo.baz.qux
, но не foo.bar.baz.qux
, в то время как foo.**.qux
соответствует foo.bar.baz.qux
Путь, начиная с foo
и заканчивая qux
.
Для вымывания вишни только для поля, которые вы хотите, вы должны использовать --include
за которым следует образец пути, как объяснено выше. Вы также можете включить более одного шаблона либо с использованием аргумента, --include
несколько раз, либо с помощью его с помощью списка шаблонов, разделенных запятыми. Следующие два варианта эквивалентны:
$ 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
но вместо того, чтобы включать в себя соответствующие поля в вывод, он включает в себя все, кроме соответствующих полей. Вы можете использовать этот вариант, когда хотите сохранить большинство полей, но оставить несколько из них, которые не интересны. Если вы используете --include
и --exclude
одновременно --include
входит в действие в первую очередь в действии, включая только поля, которые соответствуют шаблонам --include
то время как --exclude
входит после этого, удаляя любое оставшееся поле, которое соответствует --exclude
узоры.