Met de gratis tool vt-cli kun je VirusTotal via de commandline gebruiken. Daarmee kun je bijvoorbeeld batch-scans van meerdere verdachte bestanden starten en in het kader van incident response gerichte malwareonderzoeken uitvoeren.
VirusTotal efficiënter gebruiken via de commandline
Met de gratis tool vt-cli kun je VirusTotal via de commandline gebruiken. Daarmee kun je bijvoorbeeld batch-scans van meerdere verdachte bestanden starten en in het kader van incident response gerichte malwareonderzoeken uitvoeren.
De online analysedienst VirusTotal (VT) van Google is een populair adres voor malwarescans door gewone gebruikers, professionele beveiligingsonderzoekers en forensische dataexperts. Via de webinterface stuur je met een paar klikken losse bestanden of verdachte URL’s door. VT onderzoekt ze met zo’n 70 antivirusscan-engines van onder andere Avira, Bitdefender en Sophos, voert daarnaast dynamische en statische analyses uit en bundelt alle informatie in een uitgebreid rapport.
Maar voorbij eenvoudige gebruikssituaties stoot je al snel op de grenzen van de grafische interface van de dienst. Bijvoorbeeld wanneer je bij een acute malware-aanval zo snel mogelijk niet slechts één bestand, maar meteen de inhoud van een hele map wilt scannen. Of als je tijdens het analyseren van een inbreuk wilt weten of sommige van de verdachte IP-adressen uit je logbestanden al zijn opgedoken bij VT-analyses van andere slachtoffers.
Googles gratis VirusTotal Command-Line Interface voor Linux, macOS en Windows, kortweg vt-cli, bespaart je in dergelijke situaties tijdrovende individuele uploads en zoekopdrachten. Dat hulpprogramma voor de commandline koppelt de VirusTotal-functies los van de webinterface door rechtstreeks toegang te verschaffen tot de onderliggende API.
Op die manier kun je met eenvoudige terminalcommando’s de vertrouwde scan- en zoekfuncties van VT gebruiken en bovendien de uitvoer aanpassen aan je persoonlijke behoeften.
Dit artikel legt de basisstappen met vt-cli uit – van snelle batch-scans en het gebruik van gedetailleerde resultaatfilters tot het gericht zoeken naar relevante informatie over bedreigingen op het VT-platform. Je kunt vt-cli behalve in een geïnstalleerd besturingssysteem bijvoorbeeld ook gebruiken via een opstartbare usb-stick met een live-systeem.
Downloaden en installeren
De tool vt-cli is een officieel VirusTotal-project waarvan de broncode op GitHub gehost wordt. Je krijgt hem op een eigen systeem het snelst aan de praat door gebruik te maken van de kant-en-klare binaire bestanden. Op het moment van schrijven van dit artikel zijn die beschikbaar in versie 1.3.1. Naast vt-cli vind je alle tools die in dit artikel worden genoemd en verwijzingen naar de VTDoku bij de link aan het eind.
Je hoeft vt-cli niet te installeren. Nadat je de standalone-app vt hebt uitgepakt, kopieer je hem gewoon naar een willekeurige map, bijvoorbeeld met verdachte bestanden, en start je het programma met de commandline-opdracht vt init.
Tijdens onze test met Windows 11 en met een nieuwe installatie van het op Debian gebaseerde Kali Linux in VirtualBox werkte dat telkens zonder problemen.
In de vt-cli-documentatie staan tal van praktijkvoorbeelden waarin de VirusTotal-functies op een slimme en praktische manier worden gecombineerd met Unix-commando’s zoals cat en grep. Om die voorbeelden ongewijzigd onder Windows te kunnen gebruiken, raden de vt-cli-ontwikkelaars aan om de gratis runtime-omgeving Cygwin te installeren. De Cygwin-terminal begrijpt Unix-commando’s en biedt volgens het vt-cli-team bovendien prestatievoordelen ten opzichte van de standaard Windows-console bij het weergeven van grote hoeveelheden tekst.
Als je een computer start van een opstartbare usb-stick, kun je vt-cli op soortgelijke wijze downloaden en gebruiken. Je zult hem een volgende keer echter opnieuw moeten downloaden, tenzij het bijvoorbeeld een live-systeem is dat persistente opslag biedt.
Een andere mogelijkheid is vt-cli integreren in het systeem volgens de bijbehorende instructies, indien die optie voorhanden is.
De sleutels, alsjeblieft!
Of je vt-cli nu vanaf een live-systeem gebruikt of op je standaardsysteem, de tool vraagt bij de eerste keer opstarten via vt init om een VirusTotal-API-key. Die kun je gratis aanvragen in de variant standard free public op de VT-website. Maak daar eerst een account aan, log in en klik vervolgens rechtsboven op je gebruikersnaam.

Via het menu-item API Key kun je de gratis sleutel opvragen, evenals informatie over de gebruiksvoorwaarden en -beperkingen. Vooral de oproep om de sleutel tegen ongeoorloofde toegang te beschermen, moet je echt serieus nemen.
Kwaadwillenden misbruiken gestolen sleutels graag voor massale verzoeken, bijvoorbeeld om de camouflagetactieken van hun schadelijke code te testen. In het ergste geval leidt dergelijk misbruik tot het blokkeren van de sleutel.
Snel even zoeken
Na het eenmalig doorgeven van de sleutel aan vt-cli slaat de tool die permanent op in een configuratiebestand in de home- of gebruikersmap van je systeem. Dan is vt-cli klaar voor gebruik.
Op dit punt nog een belangrijke opmerking: als je bestanden met je gratis API-sleutel naar VT uploadt, zijn de resultaten – net als bij gratis gebruik in de browser – permanent online beschikbaar en wel voor alle gebruikers. Let er daarom goed op dat je geen documenten met vertrouwelijke inhoud verstuurt.
Als je bij een bepaald verdacht bestand twijfelt of je upload toch een privacyprobleem zou kunnen vormen, is er een alternatieve manier. Met vt file (bestandshash) start je een zoekopdracht op het VT-platform. Als het bestand daar al bekend is en er een rapport beschikbaar is, geeft vt-cli de inhoud daarvan weer in de terminal.
Voor zo’n zoekopdracht heb je de SHA-256-, SHA-1- of MD5-hash van je verdachte bestand nodig. Die kun je onder Linux bepalen met commandlinetools zoals sha256sum, sha1sum en md5sum. Onder Windows kun je bijvoorbeeld de PowerShell-cmdlet Get-FileHash gebruiken. Als je liever met een grafische interface werkt, is daar ook software voor te vinden, zoals het gratis, opensource QuickHash-GUI (Windows/Linux/macOS, zie de link onderaan).
Analyseren …
Om een beetje te experimenteren met de scanfuncties die via vt-cli beschikbaar zijn, volstaat het in geval van twijfel om snel een paar onschuldige testbestanden samen te stellen of anders gebruik te maken van het EICAR-testbestand (voor een download zie de link).
Je start een analyse heel eenvoudig met vt scan file (pad/bestandsnaam) --open of vt scan url (URL) --open. Daarbij accepteert vt scan niet alleen URL’s, maar ook domeinen en IP-adressen.
De parameter --open zorgt ervoor dat vt-cli na afloop van de analyse links naar de gegenereerde VirusTotal-rapporten op de commandline weergeeft, zodat je in een vertrouwde webweergave door de resultaten kunt klikken.
Als alternatief kun je er ook voor kiezen om met --wait alle resultaten direct in de terminal te laten weergeven zodra de analyse voltooid is.
Het loont in elk geval de moeite om je eens goed te verdiepen in de beschikbare en deels ook te combineren scanparameters. Zo stuurt --password string (wachtwoord) het benodigde wachtwoord mee als je een beveiligd archief met schadelijke code naar VirusTotal stuurt. Een totaaloverzicht van alle beschikbare opties vind je in de vt-cli-documentatie onder scan file en scan url.

… in één keer
Maar nu terug naar ons in het begin beschreven batch-scanscenario. Voor het scannen van meerdere bestanden en ook URL’s accepteert vt-cli invoer volgens het patroon scan file (bestand1) (bestand2) (…) en scan url (URL1) (URL2) (…).
Nog eenvoudiger kun je een hele map vol verdachte bestanden scannen met het éénregelige commando vt scan file (mappad) --open.

Vanaf versie 1.3 kan vt-cli zelfs recursief submappen scannen. Met vt scan file (mappad) -r -d 2 --open scan je bijvoorbeeld ook submappen tot maximaal twee niveaus diep. Als je de maximale diepte -d (in het voorbeeld 2) achterwege laat, gebruikt vt-cli de standaard mapdiepte 1.
Als je een hele reeks URL’s achter elkaar naar VirusTotal wilt sturen, sla je die eerst op in een tekstbestand met één vermelding per regel. Je kunt die lijst vervolgens als volgt verwerken met vt-cli en het Unix-commando cat:
cat (pad/URL-lijst) | vt scan url --open
Daarbij stuurt vt scan url de via cat uitgelezen bestandsinhoud regel voor regel door voor analyse. Vervolgens geeft --open zoals gewoonlijk voor elke URL de gegenereerde VT-link terug.
Korte beoordeling
Heb je geen tijd om uitgebreide analyserapporten door te spitten en wil je, bijvoorbeeld bij een incident-response, gewoon een snelle dreigingsbeoordeling via de commandline?
In dat geval laat je bij het aanroepen van vt scan parameters als --open of --wait helemaal achterwege. In plaats van VT-links of rapporten geeft vt-cli dan alleen een analyse-ID in de vorm van een hash terug. Die geef je door aan het commando vt analysis (ID). Dat schrijft alleen de resultaten van de scan-engines naar de terminal en laat extra informatie zoals gedragsanalyses en community-opmerkingen achterwege.
In combinatie met Unix-commando’s kun je die uitvoer nog verder filteren, bijvoorbeeld zo:
vt analysis (analyse-ID) | grep "category:" | sort | uniq -c
grep zoekt in de analyse naar alle vermeldingen van de term "category". VirusTotal gebruikt die term intern om de resultaten van de scan-engines in categorieën als harmless, malicious en undetected in te delen en scanfouten te loggen.
De commando’s sort en uniq -c sorteren de gevonden regels alfabetisch, tellen het aantal keren dat ze voorkomen en verwijderen dubbele vermeldingen voordat de uitvoer wordt weergegeven. Die zou er dan bijvoorbeeld zo uit kunnen zien:
– 1 category: “failure”
– 54 category: “malicious”
– 6 category: “timeout”
– 4 category: “type-unsupported”
– 11 category: “undetected”
Je weet dan dat 54 scanners het bestand of de URL als schadelijk beschouwen – een vrij duidelijke beoordeling.
Op een vergelijkbare manier kun je trouwens ook snel de fabrikantspecifieke malware-aliassen opvragen na een bestandsscan. Vervang gewoon category: door result:.
Handig om te weten voor ontwikkelaars: via de analyse-ID’s kun je permanent naar scanresultaten verwijzen. Zo kun je de ID’s ook gebruiken om tijdens uitgebreide systeemscans resultaten ‘tijdelijk op te slaan’ en verder te verwerken, in plaats van ze meteen weer te geven.
Hulp bij het onderzoek
Als een systeem is geïnfecteerd met malware, heb je te maken met grotere problemen dan alleen één geïnfecteerd bestand. Het is dan zaak om talrijke sporen van inbraak (Indicators of Compromise, IoC’s) te analyseren en die met elkaar in verband te brengen om te kunnen achterhalen wat er is gebeurd en er adequaat op te reageren.
Bestaande VirusTotal-rapporten kunnen ook in dat verband een waardevolle bron voor onderzoek zijn. Met vt-cli kun je daar naar behoefte gebruik van maken. Dat kan via vt file (hash), maar ook met de commando’s vt domain (domein), vt ip (IP-adres) en vt url (URL), bijvoorbeeld als verdachte netwerkactiviteiten of informatie uit firewall-logs je uitgangspunt zijn.
Het grote voordeel van zoekopdrachten via vt-cli ten opzichte van de zoekfunctie op de VT-website komt pas echt tot uiting als je gebruikmaakt van de beschikbare aanvullende commando’s.
In plaats van simpelweg complete rapporten op te vragen, kun je de zoekopdracht specificeren om tijdens incident-response belangrijke vragen te beantwoorden. Hier een paar voorbeelden:
– Op welke specifieke malware wijst het door mij waargenomen of gelogde verkeer? De commando’s vt domain reports, vt ip reports en vt url reports, gevolgd door het betreffende doeladres, sporen alle VT-analyses op waarin die adressen voorkomen.
– Omgekeerd kun je met de commando’s vt file contacted_urls, vt file contacted_ips en vt file contacted_domains, telkens gevolgd door de hash van de schadelijke code, achterhalen met welke tegenpartijen op het web de opgespoorde malware communiceert.
– Heeft de schadelijke code die ik eerst heb geanalyseerd nog meer bestanden op het systeem geplaatst? Als dat zo is, geeft vt file dropped_files (hash) een of meer hashes van de achtergelaten malware uit de VT-database weer. Met nieuwe vt file-commando’s kun je dan direct verder onderzoeken.
Alle beschikbare aanvullingen op de commando’s staan in de documentatiesecties over vt file, vt domain, vt ip en vt url.
Zelf proberen
Als je graag met de commandline werkt, is vt-cli echt een aanwinst voor iedereen die de vertrouwde VirusTotal-functies flexibeler en doelgerichter wil gebruiken. Ook bij inspecties met een live-systeem is het een praktisch bruikbaar middel.
Dankzij de VirusTotal-multiscans kun je potentiële virusvondsten – of zelfs zogenaamd ‘schone’ bestanden – bij twijfel nog eens extra controleren en zo het risico op valse positieven verminderen.
De zoekmogelijkheden die vt-cli biedt, laten zich bovendien prima combineren met resultaten van andere analysetools, zodat je in het beste geval een uitgebreid totaalbeeld krijgt van de geanalyseerde bedreiging.
Een voorbeeld: tools om potentiële phishing-PDF’s te doorlichten, zoals pdf-parser en pdfid van Didier Stevens, sporen onder andere verdachte links op in de onderzochte documenten. Een PDF-upload naar VT of een gerichte zoekopdracht, bijvoorbeeld met vt url reports, kan in de volgende stap aanwijzingen opleveren over een specifieke phishingcampagne, verwante aanvalstechnieken en in het beste geval ook concrete criminele actoren.
Last but not least kunnen ook programmeurs profiteren van vt-cli. De beschikbare commando’s maken het makkelijker om je eigen projecten uit te voeren – van sterk gepersonaliseerde scans tot precies op maat gemaakte zoekopdrachten met VT als kennisdatabase.
Een goed startpunt om vertrouwd te raken met de hier genoemde en andere functies is, naast de uitgebreide vt-cli-documentatie, het overzicht van alle commando’s dat je via vt help op de commandline kunt opvragen.
De functionaliteit van de gratis API-key is wel beperkt: premiumfuncties zoals het downloaden van malware of toegang tot de VT Hunting-service zijn uitgesloten, en het aantal dagelijkse VT-verzoeken is beperkt tot 500.
Die vrij ruime beperkingen laten echter ruimschoots ruimte voor een op maat gemaakte malwarejacht met vt-cli. Veel plezier met experimenteren!
Links bij dit artikel
Download vt-cli
https://github.com/VirusTotal/vt-cli/releases/tag/1.2.0
Download Cygwin
https://www.cygwin.com/
VirusTotal API-key
https://docs.virustotal.com/docs/please-give-me-an-api-key
Download Get-FileHash
https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-filehash?view=powershell-7.6
QuickHash-GUI
https://www.quickhash-gui.org
Download Eicar-testvirus
https://www.eicar.org/download-anti-malware-testfile/
Documentatie vt-cli bestandsscans
https://virustotal.github.io/vt-cli/doc/vt_scan_file.html
Documentatie vt-cli URL-scans
https://virustotal.github.io/vt-cli/doc/vt_scan_url.html
Documentatie vt-cli bestandsanalyse
https://virustotal.github.io/vt-cli/doc/vt_file.html
Documentatie vt-cli URL-analyse
https://virustotal.github.io/vt-cli/doc/vt_domain.html
Documentatie vt-cli IP-analyse
https://virustotal.github.io/vt-cli/doc/vt_ip.html
Documentatie vt-cli toepassingsvoorbeelden
https://virustotal.github.io/vt-cli/
(Olivia von Westernhagen en Marco den Teuling)
Praat mee