[PYTHON] Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total

introduction

J'ai sous la main les informations de valeur de hachage de l'échantillon, mais il est trop difficile d'enquêter manuellement, j'ai donc créé un programme qui acquiert automatiquement les informations de rapport de Virus Total. Le programme a été créé et confirmé pour fonctionner avec Python3. Il existe de nombreux articles similaires, mais j'ai décidé de créer un article car il est écrit en série Python2 et il est écrit d'une manière légèrement différente de l'exemple du document officiel.

Virus Total fournit une API comme décrit dans la référence, il est donc efficace d'utiliser l'API pour obtenir des informations. La clé API Virus Total peut être obtenue gratuitement en créant un compte. Soyez prudent lors de la publication ou du partage lors du codage en dur du programme, car il peut être mal utilisé s'il est divulgué à un tiers. (Si vous ne l'utilisez que, vous pouvez le coder en dur, mais compte tenu de la divulgation externe, il peut être plus sûr de le saisir en externe)

programme

Je l'ai créé avec le contenu suivant selon le document officiel. Pour la partie clé de l'API, décrivez votre propre valeur de clé d'API. (Comme mentionné ci-dessus, la forme d'entrée externe est également acceptable.)

En outre, ce programme est implémenté en recevant les informations de valeur de hachage de l'échantillon à partir d'un autre fichier texte. Veuillez l'implémenter d'une manière facile à faire, que ce soit pour le coder en dur ou pour l'obtenir en tant qu'argument au moment de l'exécution.

get_vt.py


import sys
import json
import time
import requests

url = 'https://www.virustotal.com/vtapi/v2/file/report'

count = 0
file = open('hash.txt', 'r')
for hash in file:
    params = {'apikey': 'your api key value', 'resource': hash}
    response = requests.get(url, params=params)
    print(response.json())
    count = count + 1
    if count % 4 == 0:
        time.sleep(65)
file.close()

Comme j'entends souvent, il semble que si vous accédez à l'API par intermittence, des restrictions d'accès peuvent être appliquées, et avec Virus Total, j'ai entendu des rumeurs selon lesquelles il est nécessaire de laisser 60 secondes après 4 fois. J'essaye d'arrêter l'opération pendant 65 secondes une fois toutes les quatre fois.

Méthode d'exécution

C'est juste un script Python, alors exécutez-le de la manière suivante. Le résultat sera renvoyé au format JSON, donc affichez-le dans un fichier json.

get_vt.Comment exécuter py


$ python3 get_vt.py > vt_result.json

Voici le résultat de l'acquisition lors de la recherche avec la valeur de hachage a5a0420200af84fdb5674569f1a8eafe7ef7b41b. Après le nom du produit antivirus, il semble que le résultat du jugement du malware soit décrit comme Vrai ou Faux dans détecté. Il semble que vous puissiez également obtenir le nom du logiciel malveillant et, pour autant que vous puissiez le voir, il ressemble à Mirai.

Résultat d'acquisition


{'scans': {'Bkav': {'detected': False, 'version': '1.3.0.9899', 'result': None, 'update': '20200819'}, 'MicroWorld-eScan': {'detected': False, 'version': '14.0.409.0', 'result': None, 'update': '20200820'}, 'FireEye': {'detected': True, 'version': '32.36.1.0', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'CAT-QuickHeal': {'detected': False, 'version': '14.00', 'result': None, 'update': '20200820'}, 'McAfee': {'detected': True, 'version': '6.0.6.653', 'result': 'RDN/Generic BackDoor', 'update': '20200820'}, 'Malwarebytes': {'detected': False, 'version': '3.6.4.335', 'result': None, 'update': '20200820'}, 'Zillya': {'detected': True, 'version': '2.0.0.4158', 'result': 'Backdoor.Mirai.Linux.91998', 'update': '20200820'}, 'SUPERAntiSpyware': {'detected': False, 'version': '5.6.0.1032', 'result': None, 'update': '20200814'}, 'Sangfor': {'detected': False, 'version': '1.0', 'result': None, 'update': '20200814'}, 'K7AntiVirus': {'detected': False, 'version': '11.131.35049', 'result': None, 'update': '20200820'}, 'K7GW': {'detected': False, 'version': '11.131.35050', 'result': None, 'update': '20200820'}, 'Baidu': {'detected': False, 'version': '1.0.0.2', 'result': None, 'update': '20190318'}, 'F-Prot': {'detected': False, 'version': '4.7.1.166', 'result': None, 'update': '20200820'}, 'Symantec': {'detected': True, 'version': '1.11.0.0', 'result': 'Trojan.Gen.NPE', 'update': '20200820'}, 'ESET-NOD32': {'detected': True, 'version': '21852', 'result': 'a variant of Linux/Mirai.OX', 'update': '20200820'}, 'TrendMicro-HouseCall': {'detected': False, 'version': '10.0.0.1040', 'result': None, 'update': '20200820'}, 'Avast': {'detected': True, 'version': '18.4.3895.0', 'result': 'Other:Malware-gen [Trj]', 'update': '20200820'}, 'ClamAV': {'detected': True, 'version': '0.102.4.0', 'result': 'Unix.Dropper.Mirai-7135870-0', 'update': '20200817'}, 'Kaspersky': {'detected': True, 'version': '15.0.1.13', 'result': 'HEUR:Backdoor.Linux.Mirai.b', 'update': '20200820'}, 'BitDefender': {'detected': True, 'version': '7.2', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'NANO-Antivirus': {'detected': True, 'version': '1.0.134.25140', 'result': 'Trojan.Mirai.hrbzkk', 'update': '20200820'}, 'ViRobot': {'detected': False, 'version': '2014.3.20.0', 'result': None, 'update': '20200820'}, 'Tencent': {'detected': True, 'version': '1.0.0.1', 'result': 'Backdoor.Linux.Mirai.wao', 'update': '20200820'}, 'Ad-Aware': {'detected': False, 'version': '3.0.16.117', 'result': None, 'update': '20200820'}, 'TACHYON': {'detected': False, 'version': '2020-08-20.02', 'result': None, 'update': '20200820'}, 'Comodo': {'detected': True, 'version': '32668', 'result': '.UnclassifiedMalware@0', 'update': '20200728'}, 'F-Secure': {'detected': True, 'version': '12.0.86.52', 'result': 'Malware.LINUX/Mirai.lpnjw', 'update': '20200820'}, 'DrWeb': {'detected': True, 'version': '7.0.46.3050', 'result': 'Linux.Mirai.671', 'update': '20200820'}, 'VIPRE': {'detected': False, 'version': '86068', 'result': None, 'update': '20200820'}, 'TrendMicro': {'detected': True, 'version': '11.0.0.1006', 'result': 'Backdoor.Linux.MIRAI.USELVH120', 'update': '20200820'}, 'CMC': {'detected': False, 'version': '2.7.2019.1', 'result': None, 'update': '20200820'}, 'Sophos': {'detected': True, 'version': '4.98.0', 'result': 'Linux/DDoS-CIA', 'update': '20200819'}, 'Cyren': {'detected': False, 'version': '6.3.0.2', 'result': None, 'update': '20200820'}, 'Jiangmin': {'detected': False, 'version': '16.0.100', 'result': None, 'update': '20200820'}, 'Avira': {'detected': True, 'version': '8.3.3.8', 'result': 'LINUX/Mirai.lpnjw', 'update': '20200820'}, 'Fortinet': {'detected': True, 'version': '6.2.142.0', 'result': 'ELF/DDoS.CIA!tr', 'update': '20200820'}, 'Antiy-AVL': {'detected': False, 'version': '3.0.0.1', 'result': None, 'update': '20200820'}, 'Kingsoft': {'detected': False, 'version': '2013.8.14.323', 'result': None, 'update': '20200820'}, 'Arcabit': {'detected': True, 'version': '1.0.0.877', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'AegisLab': {'detected': True, 'version': '4.2', 'result': 'Trojan.Linux.Mirai.K!c', 'update': '20200820'}, 'AhnLab-V3': {'detected': False, 'version': '3.18.1.10026', 'result': None, 'update': '20200820'}, 'ZoneAlarm': {'detected': True, 'version': '1.0', 'result': 'HEUR:Backdoor.Linux.Mirai.b', 'update': '20200820'}, 'Avast-Mobile': {'detected': False, 'version': '200820-00', 'result': None, 'update': '20200820'}, 'Microsoft': {'detected': True, 'version': '1.1.17300.4', 'result': 'Trojan:Win32/Skeeyah.A!rfn', 'update': '20200820'}, 'Cynet': {'detected': True, 'version': '4.0.0.24', 'result': 'Malicious (score: 85)', 'update': '20200815'}, 'TotalDefense': {'detected': False, 'version': '37.1.62.1', 'result': None, 'update': '20200820'}, 'BitDefenderTheta': {'detected': False, 'version': '7.2.37796.0', 'result': None, 'update': '20200819'}, 'ALYac': {'detected': False, 'version': '1.1.1.5', 'result': None, 'update': '20200820'}, 'MAX': {'detected': True, 'version': '2019.9.16.1', 'result': 'malware (ai score=89)', 'update': '20200820'}, 'VBA32': {'detected': False, 'version': '4.4.1', 'result': None, 'update': '20200819'}, 'Zoner': {'detected': False, 'version': '0.0.0.0', 'result': None, 'update': '20200819'}, 'Rising': {'detected': True, 'version': '25.0.0.26', 'result': 'Backdoor.Mirai/Linux!1.BAF6 (CLASSIC)', 'update': '20200820'}, 'Yandex': {'detected': False, 'version': '5.5.2.24', 'result': None, 'update': '20200707'}, 'Ikarus': {'detected': True, 'version': '0.1.5.2', 'result': 'Trojan.Linux.Mirai', 'update': '20200820'}, 'MaxSecure': {'detected': False, 'version': '1.0.0.1', 'result': None, 'update': '20200819'}, 'GData': {'detected': True, 'version': 'A:25.26670B:27.19869', 'result': 'Trojan.Linux.Mirai.1', 'update': '20200820'}, 'AVG': {'detected': True, 'version': '18.4.3895.0', 'result': 'Other:Malware-gen [Trj]', 'update': '20200820'}, 'Panda': {'detected': False, 'version': '4.6.4.2', 'result': None, 'update': '20200819'}, 'Qihoo-360': {'detected': True, 'version': '1.0.0.1120', 'result': 'Linux/Backdoor.6f4', 'update': '20200820'}}, 'scan_id': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c-1597909074', 'sha1': 'a5a0420200af84fdb5674569f1a8eafe7ef7b41b', 'resource': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c', 'response_code': 1, 'scan_date': '2020-08-20 07:37:54', 'permalink': 'https://www.virustotal.com/gui/file/0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c/detection/f-0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c-1597909074', 'verbose_msg': 'Scan finished, information embedded', 'total': 59, 'positives': 29, 'sha256': '0aa5949d00c05b62cb5e9ac24f11b08cd5ed13f089b628220d6cc27b5147230c', 'md5': '1e0621f530a9f1cb000d670c54a789c9'}

Sommaire

J'ai créé un programme pour obtenir des informations de rapport à partir des valeurs de hachage à l'aide de l'API de Virus Total. À l'avenir, nous examinerons comment utiliser les informations de sortie obtenues et comment utiliser d'autres API.

Références

Recommended Posts

Comment obtenir un exemple de rapport à partir d'une valeur de hachage à l'aide de l'API de Virus Total
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Comment obtenir des données d'article à l'aide de l'API Qiita
[Rails] Comment obtenir des informations de localisation à l'aide de l'API de géolocalisation
Comment publier un ticket depuis l'API Shogun
Comment obtenir la température du thermo-hygromètre SwitchBot à l'aide de Raspberry Pi
Comment obtenir une liste de liens à partir d'une page de wikipedia
Comment obtenir uniquement les données nécessaires du groupe de données structurées à l'aide d'une méthode polyvalente
Comment obtenir une chaîne à partir d'un argument de ligne de commande en python
[Python] Comment obtenir et modifier les lignes / colonnes / valeurs d'une table.
Comment utiliser la reconnaissance visuelle pour obtenir l'ID de ligne d'une fille
[Python] Comment obtenir une valeur avec une clé autre que value avec Enum
Comment obtenir un ingénieur de la trentaine
Comment dessiner un graphique avec Matplotlib
Comment installer un package à l'aide d'un référentiel
Comment créer un référentiel à partir d'un média
Pour trouver le nom de la vue avec l'espace de noms à partir de l'URL (path_info) dans Django
Comment afficher la carte à l'aide de l'API Google Map (Android)
Comment coder un drone en utilisant la reconnaissance d'image
Comment ouvrir un navigateur Web à partir de python
Comment créer un objet fonction à partir d'une chaîne
Comment obtenir les résultats de l'identifiant dans Celery
Comment appeler l'API Cloud à partir de GCP Cloud Functions
Comment extraire le coefficient de la formule minute
Exemple pour dessiner une horloge simple en utilisant ebiten
Générez des valeurs de hachage à l'aide de la méthode HMAC.
Comment créer une API Rest dans Django
Comment mettre en ligne sur un Drive partagé à l'aide de pydrive
Comment désinstaller un module installé à l'aide de setup.py
[PyTorch] Exemple ⑧ ~ Comment créer un modèle complexe ~
Une histoire sur un débutant Python essayant d'obtenir des résultats de recherche Google à l'aide de l'API
Comment créer un profil radial à partir d'images astronomiques (Chandra, XMM etc.) en utilisant python
Comment configurer un environnement Python à l'aide de pyenv
Comment obtenir un utilisateur connecté avec les forms.py de Django
Notification PUSH de Python vers Android à l'aide de l'API de Google
Comment créer un package Python à l'aide de VS Code
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
Comment prendre une image capturée à partir d'une vidéo (OpenCV)
Comment exécuter une commande à l'aide d'un sous-processus en Python
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
[Linux] [C / C ++] Comment obtenir la valeur d'adresse de retour d'une fonction et le nom de fonction de l'appelant
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
Comment trouver la quantité moyenne d'informations (entropie) de la distribution de probabilité d'origine à partir de l'échantillon
Comment exécuter un programme Python à partir d'un script shell
Comment réinitialiser le mot de passe via l'API à l'aide du framework Rest Django
Comment lancer AWS Batch à partir de l'application cliente Python
Comment transloquer un tableau à deux dimensions en utilisant uniquement python [Note]
Comment générer une clé publique à partir d'une clé privée SSH
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment remplacer une valeur numérique pour une correspondance partielle (Remarque 1)
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment masquer la clé API Google Maps du HTML
Comment échantillonner à partir de n'importe quelle fonction de densité de probabilité en Python
Comment obtenir une liste d'exceptions intégrées pour python
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé d'obtenir rapidement des données d'AS / 400 en utilisant pypyodbc
Extraire la valeur la plus proche d'une valeur à partir d'un élément de liste en Python
Comment obtenir la valeur en pixels du point à partir de l'image satellite en spécifiant la latitude et la longitude