Bienvenue dans la CLI Virustotal, un outil conçu pour ceux qui aiment les interfaces Virustotal et en ligne de commande. Avec cet outil, vous pouvez faire tout ce que vous faites normalement en utilisant la page Web de Virustotal, y compris:
Et bien plus ...
Comme cet outil utilise l'API Virustotal sous le capot, vous aurez besoin d'une clé API Virustotal. En vous inscrivant avec VirUstotal, vous recevrez une clé API gratuite, cependant, les clés API gratuites ont une quantité limitée de demandes par minute, et elles n'ont pas accès à certaines fonctionnalités premium telles que les recherches et les téléchargements de fichiers. Si vous souhaitez utiliser ces fonctionnalités premium, veuillez nous contacter.
Il existe deux façons d'installer l'outil: en utilisant l'un de nos binaires pré-compilés ou en le construisant par vous-même.
Les binaires pré-compilés peuvent être trouvés sur la page des versions. Il y a des binaires pour Windows, Linux et Mac OS X. Pour les utiliser, téléchargez simplement le fichier, décompressez-le et placez-le dans un répertoire où vous pensez être plus pratique à utiliser.
Pour compiler le programme, vous aurez besoin de 1.14.x ou plus installé dans votre système et saisissez les commandes suivantes:
$ git clone https://github.com/VirusTotal/vt-cli
$ cd vt-cli
$ make install
Remarque: Pour utiliser le binaire vt
, assurez-vous que le GOBIN
fait partie de votre variable Env PATH
:
$ export GOBIN= ` go env GOPATH ` /bin
$ export PATH= $PATH : $GOBIN
Pour les utilisateurs de Mac OS, une formule d'infusion est disponible. Veuillez noter que ce n'est pas maintenu par Virustotal.
$ brew install virustotal-cli
Pour les utilisateurs de Windows, il y a un manifeste Winget disponible. Veuillez noter que ce n'est pas maintenu par Virustotal.
winget install VirusTotal.vt - cli
Chocolatey est également soutenu (également non entretenu par Virustotal):
choco install vt - cli
Si vous prévoyez d'utiliser vt-cli
sous Windows régulièrement, nous vous recommandons fortement d'éviter la console Windows standard et d'utiliser Cygwin à la place. La console Windows est très lente lors de l'impression de grandes quantités de texte (comme le fait généralement vt-cli
) tandis que Cygwin fonctionne beaucoup mieux. De plus, vous pouvez bénéficier de la prise en charge de Cygwin pour la complétion automatique des commandes, une fonctionnalité pratique que la console Windows n'offre pas. Afin de profiter de l'achèvement automatique, assurez-vous d'inclure le forfait bash-completion
lors de l'installation de Cygwin.
Une fois que vous avez installé l'outil VT-CLI, vous souhaiterez peut-être le configurer avec votre clé API. Ce n'est pas strictement nécessaire, car vous pouvez fournir votre clé API à chaque fois que vous invoquez l'outil en utilisant l'option --apikey
( -k
en forme court), mais c'est un peu compliqué si vous allez utiliser fréquemment l'outil fréquemment (Et nous parions que vous ferez!). Pour configurer votre clé API, Type:
$ vt init
Cette commande demandera votre clé API et l'enregistrera dans un fichier de configuration dans votre répertoire domestique (~ / .vt.toml). Vous pouvez également spécifier votre clé API à l'aide de la variable d'environnement VTCLI_APIKEY
. Si vous spécifiez votre clé API de plusieurs manières, l'option --apikey
aura la plus haute priorité, suivie de la variable d'environnement VTCLI_APIKEY
, la clé API du fichier de configuration sera utilisée comme dernier recours.
Si vous êtes derrière un proxy HTTP, vous pouvez dire vt-cli
qui est l'adresse de votre serveur proxy de plusieurs manières. L'un utilise l'option --proxy
, comme dans:
$ vt --proxy http://myproxy.com:1234 < command >
Vous pouvez également utiliser la variable d'environnement VTCLI_PROXY
ou ajouter la ligne suivante au fichier de configuration:
proxy= " http://myproxy.com:1234 "
Si vous allez utiliser cet outil fréquemment, vous voudrez peut-être avoir une complétion automatique de commande. Il fait gagner du temps précieux et des frappes. Notez cependant que vous devez configurer votre API comme décrit dans la section précédente avant de suivre les étapes énumérées ci-dessous. L'API est nécessaire pour déterminer les commandes auxquelles vous aurez accès.
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
Ajoutez les lignes suivantes à ~/.bash_profile
:
if [ -f $( brew --prefix ) /etc/bash_completion ] ; then
. $( brew --prefix ) /etc/bash_completion
fi
Cygwin:
Assurez-vous que le package bash-completion
est installé (Cygwin ne l'installe pas par défaut) et tapez:
$ vt completion bash > /usr/share/bash-completion/completions/vt
❗ Vous devrez peut-être redémarrer votre coquille pour que la complétion automatique commence à fonctionner.
Le script de sortie de vt completion zsh
doit être placé quelque part sous le répertoire $fpath
. Par exemple, .oh-my-zsh/completions
du répertoire:
$ mkdir /Users/ $USERNAME /.oh-my-zsh/completions
$ vt completion zsh > /Users/ $USERNAME /.oh-my-zsh/completions/_vt
Redémarrez la coquille.
Obtenez des informations sur un fichier:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85
Obtenez des informations sur un fichier au format JSON:
$ vt file 8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 --format json
Obtenez un rapport d'analyse spécifique pour un fichier:
$ # 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 "
Téléchargez des fichiers compte tenu d'une liste de hachages dans un fichier texte, un hachage par ligne:
$ cat /path/list_of_hashes.txt | vt download -
Obtenez des informations sur une URL:
$ vt url http://www.virustotal.com
Obtenez l'adresse IP qui a servi une URL:
$ vt url last_serving_ip_address http://www.virustotal.com
Rechercher des fichiers:
$ vt search " positives:5+ type:pdf "
Analyser un fichier:
$ 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 "
Détections d'exportation et balises de fichiers à partir d'une recherche au format CSV:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format csv
Détections d'exportation et balises de fichiers à partir d'une recherche au format JSON:
$ vt search " positives:5+ type:pdf " -i sha256,last_analysis_stats.malicious,tags --format json
Lorsque vous demandez des informations sur un fichier, une URL, un domaine, une adresse IP ou tout autre objet dans Virustotal, vous obtenez beaucoup de données (par défaut au format YAML) qui est généralement plus que ce dont vous avez besoin. Vous pouvez affiner les informations indiquées par l'outil VT-CLI en utilisant les options de ligne de commande --include
et --exclude
( -i
et -x
sous forme courte).
Ces options acceptent les modèles qui sont appariés aux champs composant les données et vous permettent d'inclure seulement un sous-ensemble, ou d'exclure tout champ qui n'est pas intéressant pour vous. Voyons comment cela fonctionne en utilisant les données que nous avons sur http://www.virustotal.com
comme exemple:
$ 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
Notez que les données retournées suivent généralement une structure hiérarchique, avec certains champs de niveau supérieur qui peuvent contenir des sous-champs qui à leur tour peuvent contenir leurs propres sous-champs. Dans l'exemple ci-dessus, last_http_response_headers
a age
des sous-champs, cache-control
, content-length
et ainsi de suite, tandis que total_votes
a harmless
et malicious
. Pour se référer à un champ particulier dans la hiérarchie, nous pouvons utiliser un chemin, similaire à la façon dont nous identifions un fichier dans nos ordinateurs, mais dans ce cas, nous allons utiliser un caractère de point (.) Comme séparateur pour les composants du chemin, plutôt des barres obliques (ou des barreaux réalisateurs) utilisées par la plupart des systèmes de fichiers. Les suivants sont des chemins valides pour notre exemple de structure:
last_http_response_headers.age
total_votes.harmless
last_analysis_results.ADMINUSLabs.category
last_analysis_results.ADMINUSLabs.engine_name
Les filtres acceptés par --include
et --exclude
sont des chemins dans lesquels nous pouvons utiliser *
et **
comme espaces réservés pour un et de nombreux éléments de chemin respectivement. Par exemple foo.*
Correspond à foo.bar
mais pas foo.bar.baz
, tandis que foo.**
correspond à foo.bar
, foo.bar.baz
et foo.bar.baz.qux
. En revanche, foo.*.qux
correspond à foo.bar.qux
et foo.baz.qux
mais pas foo.bar.baz.qux
, tandis que foo.**.qux
correspond à foo.bar.baz.qux
et tout autre Chemin de chemin commençant par foo
et se terminant par qux
.
Pour la cueillette de cerise uniquement les champs que vous souhaitez, vous devez utiliser --include
suivi d'un modèle de chemin comme expliqué ci-dessus. Vous pouvez également inclure plus d'un modèle soit en utilisant l'argument --include
plusieurs fois, ou en l'utilisant avec une liste de modèles séparés par des virgules. Les deux options suivantes sont équivalentes:
$ vt url http://www.virustotal.com --include=reputation --include=total_votes. *
$ vt url http://www.virustotal.com --include=reputation,total_votes. *
Ici, vous avez différents exemples avec leurs sorties (en supposant que vt url http://www.virustotal.com
renvoie la structure illustrée ci-dessus):
$ 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 "
Notez également que _id
et _type
sont également des noms de champ et que vous pouvez donc les utiliser dans vos filtres:
$ 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 "
L'option --exclude
fonctionne de manière similaire à --include
mais au lieu d'inclure les champs de correspondance dans la sortie, il comprend tout sauf les champs de correspondance. Vous pouvez utiliser cette option lorsque vous souhaitez conserver la plupart des champs, mais laisser de côté quelques-unes qui ne sont pas intéressantes. Si vous utilisez --include
et --exclude
simultanément --include
entre en action en premier, y compris uniquement les champs qui correspondent aux modèles --include
, tandis que --exclude
arrive après cela, la suppression de tout champ restant qui correspond à --exclude
motifs.