VT是一个提供可疑文件分析服务的网站,它与传统杀毒软件的不同之处是它通过多种反病毒引擎扫描文件。所上传的文件会被多种反病毒引擎对进行扫描检测,可以通过结果信息进行参考,判断文件是否被病毒, 蠕虫, 木马, 以及各类恶意软件感染等等。
VT Hunting是一项利用VirusTotal数据集的YARA功能服务。通过编写基于文本或二进制模式的恶意样本YARA规则,将其上传到VirusTotal进行实时跟踪。一旦命中规则就可以收到推送通知,即可针对样本进行响应处置。
网址:https://www.virustotal.com/gui/hunting-overview
参考文章:YARA特征规则介绍与编写
丰富的YARA规则库能够提高反病毒工程师对恶意样本识别和分类效率。除了在日常人工分析样本的时候,针对样本特征编写YARA规则外。我们还可以通过以下几种方式获取YARA规则进行参考:
yarGen是一个自动化提取YARA规则的工具,可以提取strings和opcodes特征,其原理是先解析出样本集中的共同的字符串,然后经过白名单库的过滤,最后通过启发式、机器学习等方式筛选出最优的yara规则。项目地址:https://github.com/Neo23x0/yarGen。
使用方法:
Python yargen.py -m [样本目录]
操作步骤:
比如:《WIRTE组织以“药品信息”为饵,再对中东地区展开攻击》中的“国籍规定.xls”这个恶意文档样本,文章中提及其宏代码中检测了:“AVG”、“Avast”和“360TotalSecurity”三种杀软,这个点就可以作为YARA规则编写的其中一个参考因素。
另外一个参考因素就是恶意文档样本宏代码执行后的下一阶段,攻击使用 VBScript、PowerShell、VBA 作为后门的编写语言,也就是说YARA规则中可以尝试添加这三种脚本语言的执行命令作为规则的一部分。
“stgeorgebankers[.]com"这个C2同样可以加入到规则中,但主要还是看上传的规则用途。因为考虑到后续打捞恶意文档样本的C2未必是这一个,所以下面的规则中没有将其加入其中。并且根据Office文件头的特征,追加了指定偏移处的检测。
rule yara_MacroOffice_ecaaab9e2fc089eefb6accae9750ac60
{
strings:
$a = "AVG"
$b = "Avast"
$c = "360TotalSecurity"
$d = "powershell.exe"
$e = "VBScript"
$f = "VBA"
$g = {D0 CF 11 E0}
condition:
(($a and $b and $c and ($g in (0..5))) and $d) or (($a and $b and $c and ($g in (0..5))) and $e) or (($a and $b and $c and ($g in (0..5))) and $f)
}
vt模块是专门为Livehunt创建的,主要包括扫描目标文件的其他信息。
import "vt"
rule infected_pe {
condition:
vt.metadata.analysis_stats.malicious > 1 and vt.metadata.file_type == vt.FileType.PE_EXE
}
import "vt"
rule new_file_from_china {
condition:
vt.metadata.new_file and vt.metadata.submitter.country == "CN"
}
import "vt"
rule zbot {
condition:
for any engine, signature in vt.metadata.signatures : (
signature contains "zbot"
)
}
部分实例:
Field | 类型 | 描述 | 例子 |
---|---|---|---|
vt.metadata.analysis_stats.malicious | integer | 防病毒引擎将文件检测为恶意的数量。 | vt.metadata.analysis_stats.malicious <10 |
vt.metadata.analysis_stats.undetected | integer | 未检测到文件的防病毒引擎的数量。 | vt.metadata.analysis_stats.undetected> 20 |
vt.metadata.analysis_stats.failure | integer | 扫描文件失败的防病毒引擎数。 | vt.metadata.analysis_stats.failure> 0 |
vt.metadata.analysis_stats.type_unsupported | integer | 不支持文件类型的防病毒引擎的数量。 | vt.metadata.analysis_stats.type_unsupported> 0 |
vt.metadata.first_submission_date | integer | 第一次将文件提交到VirusTotal的日期(以UNIX时间戳记)。 | vt.metadata.first_submission_date <1582934400 // 2020-02-29 |
vt.metadata.file_name | string | 提交给VirusTotal的文件名。如果正在重新分析文件,则为空。 | vt.metadata.file_name contains “foobar” |
vt.metadata.file_size | integer | 文件大小(以字节为单位)。 | vt.metadata.file_size> 100KB |
vt.metadata.file_type | integer | 文件类型表中列出的一种类型。 | vt.metadata.file_type == vt.FileType.PE_DLL |
vt.metadata.file_type_tags | array of strings | 与文件类型关联的标签,如文件类型表中所列 | for any tag in vt.metadata.file_type_tags : ( tag == “pedll”) |
vt.metadata.main_icon.raw_md5 | string | 与文件关联的图标的MD5。 | vt.metadata.main_icon.raw_md5 ==“md5” |
vt.metadata.signatures | dictionary | 杀软名称 & 病毒名称 | for any engine, signature in vt.metadata.signatures : ( engine == “Kaspersky” and signature contains “”) |
更多实例,参考YARA-rules-for-Livehunt:
https://support.virustotal.com/hc/en-us/articles/360007088057-Writing-YARA-rules-for-Livehunt
yarGen能够基于样本自动生成YARA规则,但其规则的生成存在一定程度的误报可能。部分高级威胁事件中的样本对规则的精准度要求较高,不太适用于使用yarGen进行规则生成。VirusTotal Hunting搭配高精准度的YARA规则,能够提升对威胁的感知能力,从而将其转化为情报数据。