
Comprobador de hash en línea para Virustotal y otros servicios
_________ _ _ ______ _____ ______
| | | | | \ | | | | | | \ \ | | | | \ \ /.)
| | | | | | | | | | | | | | | | | | | | /)\|
|_| |_| |_| \_|__|_| |_| |_| _|_|_ |_| |_| // /
/'" "
Comprobador de Hashes en Línea para Virustotal y Otros Servicios
Florian Roth
Munin es una utilidad de comprobación de hashes en línea que recupera información valiosa de diversas fuentes en línea
La versión actual de Munin consulta los siguientes servicios:
Modo Predeterminado - Leer Hashes desde Archivo

usage: munin.py [-h] [-f path] [--vh search-string]
[--vhrule search-string] [-o output] [--vtwaitquota]
[--vtminav min-matches] [--limit hash-limit]
[--vhmaxage days] [-c cache-db] [-i ini-file]
[-s sample-folder] [--comment] [-p vt-comment-prefix]
[--download] [-d download_path] [--nocache] [--nocsv]
[--verifycert] [--sort] [--web] [-w port] [--cli]
[--rescan] [--debug]
Comprobador de Hashes en Línea
argumentos opcionales:
-h, --help muestra este mensaje de ayuda y sale
-f path Archivo a procesar (hash línea por línea O csv con hash
en cada línea - detecta automáticamente posición y comentario)
--vh search-string Consulta Valhalla para hashes por palabra clave, etiquetas,
nombre de regla YARA, software de Mitre ATT&CK (ej. S0154),
técnica (ej. T1023) o grupo de amenazas (ej. G0049)
--vhrule search-string
Consulta Valhalla para hashes mediante reglas por palabra clave,
etiquetas, nombre de regla YARA, software de Mitre ATT&CK (ej.
S0154), técnica (ej. T1023) o grupo de amenazas (ej. G0049)
-o output Archivo de salida para los resultados (CSV)
--vtwaitquota No continuar si se excede la cuota de VT, sino esperar
hasta el día siguiente
--vtminav min-matches
Número mínimo de coincidencias de AV para consultar info
del hash desde VT"
--limit hash-limit Salir después de procesar esta cantidad de hashes nuevos en modo
por lotes (ignora caché).
--vhmaxage days Edad máxima de la muestra en Valhalla a procesar
-c cache-db Nombre del archivo de base de datos de caché (defecto: vt-hash-
db.json)
-i ini-file Nombre del archivo ini que contiene las claves de API
-s sample-folder Carpeta con muestras a procesar
--comment Publica un comentario para el hash analizado que
contiene el comentario de la línea de registro
-p vt-comment-prefix Prefijo de comentario de Virustotal
--download Habilita la descarga de muestras desde Hybrid Analysis.
Se necesita SHA256 de la muestra.
-d download_path Ruta de salida para la descarga de muestras desde Hybrid
Analysis. La carpeta debe existir
--nocache No usar archivo de base de datos de caché
--nocsv No escribir un CSV con los resultados
--verifycert Verificar certificados SSL/TLS
--sort Ordenar las líneas de entrada
--web Ejecutar Munin como servicio web
-w port Puerto del servicio web
--cli Ejecutar Munin en modo interfaz de línea de comandos
--rescan Activar un nuevo escaneo de cada archivo analizado
--debug Salida de depuración
pip3 install -r requirements.txt (en macOS agregar --user)cp munin.ini my.ini (ver la sección Obtener las Claves de API para ayuda)python munin.py -i my.ini -f munin-demo.txtProcesar un resultado de Retrohunt de Virustotal y ordenar las líneas antes de la verificación para que las firmas coincidentes se verifiquen en bloques
python3 munin.py -i my.ini -f ~/Downloads/retro_hunt
Procesar un directorio con muestras y verificar sus hashes en línea
python3 munin.py -i my.ini -s ~/malware/case34
Usar el modo de interfaz de línea de comandos (nuevo en v0.14)
python3 munin.py -i my.ini
Perfil > Mi clave de API para su clave API públicaRegistrarse aquí https://malshare.com/register.php
Registrarse aquí https://bazaar.abuse.ch/. Luego puede encontrar su clave de API en Resumen de la Cuenta.
Perfil > Clave de APIAuthkey se usa como clave de APIActualmente solo para clientes o investigadores invitados
https://valhalla.nextron-systems.com/
Hashlookup la instancia de CIRCL se proporciona de forma gratuita y se sirve bajo el mejor esfuerzo.
Iniciar munin con --cli y seguir las instrucciones.
Ej.
python3 munin.py -i my.ini --cli
Pegar contenido con valores hash y luego presionar CTRL+D para finalizar la entrada. La última línea necesita un salto de línea al final.
Por defecto, creará un archivo CSV con la fecha actual en el nombre del archivo.

Iniciar munin con --web y seleccionar opcionalmente un puerto -w port.
Ej.
python3 munin.py -i my.ini --web -w 8080
El servicio web espera cadenas en el siguiente esquema de URL.
http://server:port/string
La cadena puede ser cualquier cadena sin saltos de línea, ej.
Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83
El resultado se verá así:
{
"comment": "Emotet",
"commenter": "-",
"comments": "0",
"copyright": "Copyright (C) America Online, Inc. 1999 - 2004",
"description": "Utilities",
"expired": false,
"filenames": "sourcedev.exe, MISCUTIL, x8ykNnr_9WofXq7Nh_xuEzSPW.exe, jwuKBLWN681ztj6Zks.exe",
"filetype": "Win32 EXE",
"first_submitted": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
"firstsubmission": "2019-01-19 13:46:21 UTC ( 2 months, 2 weeks ago )",
"harmless": false,
"hash": "1585ad28f7d1e0ca696e6c6c2f1d008a",
"hybrid_available": false,
"hybrid_compromised": "-",
"hybrid_date": "-",
"hybrid_score": "-",
"imphash": "2820d9bdc397f88a8a1e957e1a824482",
"last_submitted": "2019-02-27 09:44:03",
"malshare_available": false,
"md5": "1585ad28f7d1e0ca696e6c6c2f1d008a",
"misp_available": true,
"misp_events": "",
"misp_info": [],
"mssoft": false,
"origname": "-",
"positives": 48,
"rating": "malicious",
"res_color": "\u001b[41m",
"result": "48 / 64",
"revoked": false,
"sha1": "4561d0ad575d5f02fb06e062a37de15861c3bd89",
"sha256": "35e304d10d53834e3e41035d12122773c9a4d183a24e03f980ad3e6b2ecde7fa",
"signed": false,
"signer": "-",
"total": 64,
"urlhaus_available": true,
"vendor_results": {
"CrowdStrike": "win/malicious_confidence_100% (W)",
"ESET-NOD32": "a variant of Win32/Kryptik.GOUY",
"F-Secure": "Trojan.TR/AD.Emotet.pdiuu",
"GData": "Trojan.GenericKD.40960256",
"Kaspersky": "HEUR:Trojan.Win32.Generic",
"McAfee": "Emotet-FLL!1585AD28F7D1",
"Microsoft": "Trojan:Win32/Emotet.DN",
"Sophos": "Mal/Emotet-Q",
"Symantec": "Trojan.Gen.2",
"TrendMicro": "-"
},
"virus": "Microsoft: Trojan:Win32/Emotet.DN / Kaspersky: HEUR:Trojan.Win32.Generic / McAfee: Emotet-FLL!1585AD28F7D1 / CrowdStrike: win/malicious_confidence_100% (W) / ESET-NOD32: a variant of Win32/Kryptik.GOUY / Symantec: Trojan.Gen.2 / F-Secure: Trojan.TR/AD.Emotet.pdiuu / Sophos: Mal/Emotet-Q / GData: Trojan.GenericKD.40960256",
"virusbay_available": false,
"vt_positives": 48,
"vt_queried": false,
"vt_total": 64,
"vt_verbose_msg": "Scan finished, information embedded"
}
Las consultas a Virustotal deben ser limitadas. Por lo tanto, el servicio web aplica un tiempo de enfriamiento, que se minimiza restando el tiempo que tomó procesar todas las demás plataformas del tiempo de espera de 15 segundos.
cooldown_time = vt_wait_time - process_time
Durante el enfriamiento, las solicitudes devolverán esta respuesta:
{"status": "VT cooldown active"}
El enfriamiento no es relevante cuando se solicitan hashes que ya están en el caché de búsqueda.
El script de verificación de hosts e IPs de Munin (munin-host.py) recupera más información sobre direcciones IP y nombres de host/dominio en listas de IOC.
usage: munin-host.py [-h] [-f path] [-o output] [-m max-items] [-c cache-db]
[-i ini-file] [--nocache] [--nocsv] [--recursive]
[--download] [-d download_path] [--dups] [--noresolve]
[--ping] [--debug]
Verificador en Línea de Virustotal (IP/Dominio)
argumentos opcionales:
-h, --help muestra este mensaje de ayuda y sale
-f path Archivo a procesar (hash línea por línea O csv con hash en
cada línea - detecta automáticamente posición y comentario)
-o output Archivo de salida para los resultados (CSV)
-m max-items Número máximo de elementos (urls, hosts, muestras) a mostrar
-c cache-db Nombre del archivo de base de datos de caché (defecto: vt-hosts-
db.json)
-i ini-file Nombre del archivo ini que contiene las claves de API
--nocache No cargar la base de datos de caché (vt-check-cache.pkl)
--nocsv No escribir un CSV con los resultados
--recursive Procesar también las IPs resueltas
--download Intentar descargar las URLs (directorios con nombres de host/ip)
-d download_path Almacenar las descargas en el directorio dado
--dups No omitir hashes duplicados
--noresolve No realizar prueba de resolución DNS en los nombres de dominio encontrados
--ping Realizar verificación de ping en IPs (acelera el proceso si muchas IPs
públicas pero enrutadas internamente aparecen en el archivo de texto)
--debug Salida de depuración

Analizar el archivo de demostración, extraer IPs y hosts, no solo verificar los dominios que aún son resolubles y descargar muestras directamente de los sistemas remotos.
python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download
Usar munin-host.py en una red monitoreada por IDS generará numerosas alertas, ya que munin-host.py realiza búsquedas DNS para dominios maliciosos y tiene la opción de descargar muestras maliciosas.
El script munin-host.py requiere el módulo pycurl. A veces es complicado hacerlo funcionar en macOS, ya que requiere tener instalado openssl, que luego se usa en el proceso de compilación.
Si ocurren errores, intente lo siguiente (algunos entornos requerirán pip3)
pip uninstall pycurl
brew update
brew reinstall openssl
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
export PYCURL_SSL_LIBRARY=openssl
pip install pycurl --global-option="--with-openssl"
El script Hugin (hugin.py) recupera y muestra información de todas las muestras devueltas en un retrohunt. La gran ventaja es que no tiene que esperar 15 segundos entre cada solicitud de muestra, sino que extrae el archivo JSON de resultados completo a través de v3 de la API de Virustotal. De esta manera, obtiene sus resultados de inmediato. La desventaja es que otros servicios como Any.run, Hybrid-Analysis, MISP o Valhalla no son consultados con Hugin.
usage: hugin.py [-h] [-r retrohunt-name] [-i ini-file]
[--csv-path CSV_PATH] [--debug] [--no-comments]
Verificador de Retrohunt
argumentos opcionales:
-h, --help muestra este mensaje de ayuda y sale
-r retrohunt-name Nombre para el retrohunt consultado
-i ini-file Nombre del archivo ini que contiene la clave de API de VT
--csv-path CSV_PATH Escribir un CSV con los resultados
--debug Salida de depuración
--no-comments Omitir comentarios de VirusTotal
Analizar un retrohunt y exportar un archivo CSV con los resultados.
python3 hugin.py -i config-with-your-key.ini -r retrohunt-123456789