_________ _ _ ______ _____ ______
| | | | | \ | | | | | | \ \ | | | | \ \ /.)
| | | | | | | | | | | | | | | | | | | | /)\|
|_| |_| |_| \_|__|_| |_| |_| _|_|_ |_| |_| // /
/'" "
用于 Virustotal 及其他服务的在线哈希检查器
Florian Roth
Munin 是一个在线哈希检查工具,能从多个在线来源检索有价值的信息。
当前版本的 Munin 可查询以下服务:
默认模式 - 从文件读取哈希

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]
在线哈希检查器
可选参数:
-h, --help 显示此帮助信息并退出
-f path 要处理的文件(每行一个哈希,或者每行包含哈希的CSV - 自动检测位置和注释)
--vh search-string 通过关键字、标签、YARA规则名称、Mitre ATT&CK软件(例如S0154)、技术(例如T1023)或威胁组织(例如G0049)查询Valhalla中的哈希
--vhrule search-string
通过规则中的关键字、标签、YARA规则名称、Mitre ATT&CK软件(例如S0154)、技术(例如T1023)或威胁组织(例如G0049)查询Valhalla中的哈希
-o output 结果输出文件(CSV)
--vtwaitquota 如果VT配额超限,不要继续,而是等待第二天
--vtminav min-matches 从VT查询哈希信息所需的最小AV匹配数
--limit hash-limit 批量模式下处理完这么多新哈希后退出(忽略缓存)。
--vhmaxage days 要处理的Valhalla样本的最大期限(天)
-c cache-db 缓存数据库文件名(默认:vt-hash-db.json)
-i ini-file 保存API密钥的ini文件名
-s sample-folder 包含要处理样本的文件夹
--comment 为分析的哈希发布一条评论,评论内容来自日志行中的注释
-p vt-comment-prefix Virustotal评论前缀
--download 启用从Hybrid Analysis下载样本。需要样本的SHA256。
-d download_path 从Hybrid Analysis下载样本的输出路径。文件夹必须存在
--nocache 不使用缓存数据库文件
--nocsv 不写入CSV结果
--verifycert 验证SSL/TLS证书
--sort 对输入行进行排序
--web 以Web服务模式运行Munin
-w port Web服务端口
--cli 以命令行界面模式运行Munin
--rescan 触发对每个已分析文件的重新扫描
--debug 调试输出
pip3 install -r requirements.txt(在macOS上添加 --user)cp munin.ini my.ini(参见“获取API密钥”部分帮助)python munin.py -i my.ini -f munin-demo.txt处理Virustotal Retrohunt结果,并在检查前对行进行排序,以便匹配的签名成块检查
python3 munin.py -i my.ini -f ~/Downloads/retro_hunt
处理包含样本的目录,并在线检查它们的哈希
python3 munin.py -i my.ini -s ~/malware/case34
使用命令行界面模式(v0.14新增)
python3 munin.py -i my.ini
在此处注册:https://malshare.com/register.php
在此处注册:https://bazaar.abuse.ch/。然后在您的账户概览中找到API密钥。
Authkey的值即为API密钥目前仅限客户或被邀请的研究人员使用
https://valhalla.nextron-systems.com/
Hashlookup CIRCL的实例免费提供,按尽力而为原则提供服务。
使用 --cli 参数启动munin,然后按照提示操作。
例如:
python3 munin.py -i my.ini --cli
粘贴包含哈希值的内容,然后按 CTRL+D 完成输入。最后一行需要以换行符结尾。
默认情况下,会生成一个以当前日期命名的CSV文件。

使用 --web 参数启动munin,并可选择端口 -w port。
例如:
python3 munin.py -i my.ini --web -w 8080
Web服务等待以下URL模式中的字符串。
http://server:port/<string>
该字符串可以是任何不带换行符的字符串,例如:
Emotet:1585ad28f7d1e0ca696e6c6c2f1d008a
ed01ebfbc9eb5bbea545af4d01bf5f1071661840480439c6e5babe8e080e41aa;IOC1
dc9b5e8aa6ec86db8af0a7aa897ca61db3e5f3d2e0942e319074db1aaccfdc83
结果将如下所示:
{
"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"
}
对Virustotal的查询需要进行限速。因此,Web服务会应用冷却时间,该时间通过将处理所有其他平台所花费的时间从15秒等待时间中减去来最小化。
cooldown_time = vt_wait_time - process_time
在冷却期间,请求将返回此响应:
{"status": "VT cooldown active"}
当请求的哈希已在查找缓存中时,冷却不适用。
Munin主机和IP检查脚本 (munin-host.py) 可检索IOC列表中IP地址和主机/域名的更多信息。
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]
Virustotal 在线检查器(IP/域名)
可选参数:
-h, --help 显示此帮助信息并退出
-f path 要处理的文件(每行一个哈希,或者每行包含哈希的CSV - 自动检测位置和注释)
-o output 结果输出文件(CSV)
-m max-items 要显示的最大项目数(url、主机、样本)
-c cache-db 缓存数据库文件名(默认:vt-hosts-db.json)
-i ini-file 保存API密钥的ini文件名
--nocache 不使用缓存数据库文件(vt-check-cache.pkl)
--nocsv 不写入CSV结果
--recursive 也处理已解析的IP
--download 尝试下载URL(以主机/IP名称命名的目录)
-d download_path 将下载内容存储到指定目录
--dups 不跳过重复的哈希
--noresolve 不对发现的域名执行DNS解析测试
--ping 对IP执行ping检查(如果文本文件中出现许多公共但内部路由的IP,可加快处理速度)
--debug 调试输出

解析演示文件,提取IP和主机,不检查仍可解析的域名,直接从远程系统下载样本。
python3 munin-host.py -i your-key.ini -f ./munin-hosts-demo.txt --noresolve --download
在IDS监控的网络中使用 munin-host.py 会导致大量警报,因为munin-host.py会对恶意域名执行DNS查找,并且可以选择下载恶意样本。
脚本 munin-host.py 需要 pycurl 模块。在macOS上使其正常工作有时会比较棘手,因为它需要安装openssl,然后在构建过程中使用。
如果出现错误,请尝试以下方法(某些环境需要使用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"
Hugin 脚本 (hugin.py) 可检索并显示retrohunt返回的所有样本的信息。其最大优势是无需在每个样本请求之间等待15秒,而是通过Virustotal API v3拉取完整的JSON结果文件,从而立即获得结果。缺点是Hugin不会查询Any.run、Hybrid-Analysis、MISP或Valhalla等其他服务。
usage: hugin.py [-h] [-r retrohunt-name] [-i ini-file]
[--csv-path CSV_PATH] [--debug] [--no-comments]
Retrohunt 检查器
可选参数:
-h, --help 显示此帮助信息并退出
-r retrohunt-name 要查询的retrohunt名称
-i ini-file 保存VT API密钥的ini文件名
--csv-path CSV_PATH 将结果写入CSV文件
--debug 调试输出
--no-comments 跳过VirusTotal评论
解析一个retrohunt并将结果导出为CSV文件。
python3 hugin.py -i config-with-your-key.ini -r retrohunt-123456789