本文旨在介绍如何利用 VirusTotal 提供的 VirusTotal Intelligence、VirusTotal Grep、VirusTotal Yara 与 VirusTotal Graph 服务进行高效的威胁狩猎。

如何使用 VirusTotal Intelligence 通过元数据狩猎恶意软件

VirusTotal Intelligence 在安全界被称为是“恶意软件的Google“,VirusTotal Intelligence 可以通过文件属性、杀软检测结果、文件静态属性、文件行为模式、文件元数据检索 VirusTotal 的庞大数据集。

界面搜索如下所示,VirusTotal 也支持通过 API 进行搜索。

与 Google 检索一样,VirusTotal 也支持限定符检索。例如:

目的

检索语句

查找通过 HTTP 通信的 Windows 可执行程序文件

(type:peexe OR type:pedll) behavior:http

查找在请求URI中使用fre.php且检出引擎数低于10个的可执行程序文件

type:peexe behavior:fre.php p:10-

查找来自美国、名字中带有 invoice、带有宏代码、超过五个引擎检测的文件

name:”invoice” tag:macros p:5+ submitter:US

查找请求域名包含 dropbox.com 或者 box.com、且超过十个引擎检测的文件

(itw:dropbox.com or itw:box.com) p:10+

查找请求域名包含 dropbox.com 或者 box.com、且超过十个引擎检测的 Windows 可执行程序文件

(type:peexe OR type:pedll) (itw:dropbox.com or itw:box.com) p:10+

查找请求域名包含 dropbox.com 或者 box.com、且超过十个引擎检测的非 Windows 可执行程序

(NOT type:peexe OR NOT type:pedll) (itw:dropbox.com or itw:box.com) p:10+

查找首次发现在2019年3月1日之后、引擎检出结果中包含Turla的DLL文件

engines:Turla type:pedll fs:2019-03-01+

查找文件元数据中包含 Windows User、使用已知 CVE 但没有使用宏的RTF文件

metadata:”Windows User” type:rtf (tag:cve or engines:exploit or engines:cve) NOT tag:macros

查找使用已知 CVE/Exploit、俄语编码的文档(注:语言搜索限定符只在 peexe/pedll/office 文件起作用)

type:document (tag:cve or engines:exploit or engines:cve) lang:ru

查找使用已知 CVE/Exploit 的、俄语编码的文档、且首次发现时间在2019年3月1日到2019年3月15日之间的文件

type:document (tag:cve or engines:exploit or engines:cve) lang:ru fs:2019-03-01+ fs:2019-03-15-

相似文件狩猎

下面以一个TrickBot的样本为例,哈希(MD5)为 f0b2e393c18182c7bd48ce1f6e6c6765。

以导入表哈希(imphash)进行检索(语句:imphash:”d0472d140aa0003beaf55821a63a5b03″),可以通过导入表哈希查找相似的样本。

但导入表哈希实际上并不是总是可靠的,如果样本加了壳的话,利用导入表哈希进行威胁狩猎就会出错。例如一个 UPX 加壳的文件名为 Rufus.exe,根据其导入表哈希进行检索是不可靠的,会把壳匹配出来。

除通用的比较外,VirusTotal 还引入了自研的、用于文件相似度比较的哈希算法 vhash,其检索语法限定符为 similar-to:

可视化类相似文件狩猎

VirusTotal 还可以通过可视化相似度进行恶意文件的狩猎,一共提供了针对三种类型文件的可视化相似比较方式:

  • Windows 可执行文件(以 TrickBot 为例:https://www.virustotal.com/gui/file/01c299e4895eb222d24ad9c6bbefe2a389bc3d54e37de8c7a8dc73a95a7f093b/detection)

  • PDF 文件(以 Emotet 为例:https://www.virustotal.com/gui/file/8c15b770e32ff70527a4e17e1173d3f2ff91f7f27be17268f2a814c72d863859/detection)

  • Office 文件(以 ADP Lure 为例:https://www.virustotal.com/gui/file/2db7425c7c9efff9c87fb45719ac4a9c7b24722f2cf19de1ba7f1b9d1f59de45/detection)

Windows 可执行文件的可视化相似度判断依赖 PE 文件的图标:

PDF/Office 文件的可视化相似度判断依赖类似文档首页内容的缩略图:

元数据类相似文件狩猎

数字签名

根据文件的签名数据可以进行相似样本的狩猎,以 LockerGoga 为例:

该文件使用的数字签名如下所示:

当然,通过签发证书的签发者的名字(signature:”ALISALTD”)可以进行宽泛地检索;通过证书的哈希(signature:”5D A1 73 EB1A C7 63 40 AC 05 8E 1F F4 BF 5E 1B”)可以进行更精确地检索。

或者(signature:”Copyright(C) ALISA LTD 2019″):

文件属性

VirusTotal 可以检索通过 ExifTool 提取的文件元数据,例如提取 EmpireMonkey 恶意样本的元数据(metadata:”Normal.dotm”and metadata:”cobalt”):

再如 LockerGoga 恶意样本的元数据(metadata:”Background Tasks Host”)也可以用来狩猎相关样本:

导入/导出表

以Mimikatz为例进行查询,根据导入表有imports:NdrMesTypeFree2imports:MesHandleFree imports:RtlStringFromGUID imports:GetOEMCP。根据导出表有exports:”InitializeChangeNotify”exports:”PasswordChangeNotify”exports:”SpLsaModeInitialize”。

如何使用 VirusTotal Grep 通过内容狩猎恶意软件

VirusTotal 支持使用 content: 在文件中搜索任意十六进制或者字符串,VirusTotal 维护了共计 5PB 的 n-gram 索引,可以在分钟级返回检索结果。

ASCII 字符串

例如 TrickBot 的样本(14f60998a77261a97c719b05e246716b)的字符串中包含 pdb 路径。

可以根据字符串生成16进制串进行检索(content:{443a5c4d7950726f6a656374735c7365636f6e64576f726b5c416e63686f725c57696e33325c52656c656173655c616e63686f72496e7374616c6c65725f7838362e706462})或者直接检索字符串也是可以的(content:D:\\\\MyProjects\\\\secondWork\\\\Anchor\\\\Win32\\\\Release\\\\anchorInstaller_x86.pdb)。

通配符

根据路径,想要针对不同的盘符和不同的架构可以使用通配符(?:\\\\MyProjects\\\\secondWork\\\\Anchor\\\\Win??\\\\Release\\\\)进行匹配,或者使用十六进制匹配。

Unicode字符串

针对 Unicode 的字符串 “%s”,AfxGetHttpRequastMgr%s,可转换为完整的十六进制进行匹配(content:{22002500730022002c00410066007800470065007400480074007400700052006500710075006100730074004d0067007200200025007300}),也可以将开头和结尾的字符串略过(content:{410066007800470065007400480074007400700052006500710075006100730074004d00670072})。

逻辑操作

Rietspoof 恶意软件有时候会带有 PDB 路径,有时候不带 PDB 路径。可使用统一的方式((content:{52 41 4d 3a 20} ANDcontent:{64 61 74 61 2e 64 61 74} AND content:{6c 6f 67 6f 75 74 2e 6c 6f 67})OR content:”G:\\\\Work\\\\Dr.Dre\\\\hivez\\\\new\\\\loader\\\\Release\\\\loader.pdb”)进行匹配:

甚至你可以在VirusTotal上搜索宏代码(content:”DimAWYbM5aiAlICElynkc7xb4gRO”)或者是 OCR的结果(content:”JACKY ROSEN”):

如何使用 VirusTotal Yara 狩猎恶意软件

通过好的 Yara 规则可以狩猎恶意软件家族,如 Cobalt 通常是小于 30KB 的 PE 文件、会使用嵌入的 DLL 字符串进行命名。(样本1:6b16c35baaa2a74ed053c84e01062fdc、样本2:616199072a11d95373b3c38626ad4c93)

而导入表哈希和函数调用是另外两个弱特征:

故而可写 Yara 规则如下所示:

注:字符串默认为 ASCII 的、如果想要匹配 Unicode 的字符串需要使用 wide 修饰符。但如果 Cobint 后来不使用 int.dll 了,就可以在Yara中使用正则进行匹配:

Retrohunt

完整扫描匹配完成后可以查看狩猎的结果:

VirusTotal 提供了再狩猎(retrohunt)的功能,对过去一年的历史文件(超过 600TB)进行匹配,因为历史文件较多所以等待时间较长(通常需要 3-4 个小时)。再狩猎时不能再使用额外的标签,只有 Yara 规则会生效。

Livehunt

配置的 Yara 规则也可以对每个上传的文件进行实时狩猎:

实时狩猎时的匹配额外支持杀软检出结果、检出率、标签、文件类型等方式进行匹配,具体的可用变量列表在https://support.virustotal.com/hc/en-us/articles/360001315437:

VTDIFF

VTDIFF 自动识别检测文件的最佳模式,帮助研究人员创建 Yara 规则。VTDIFF 会在整个 VirusTotal 的数据集上考虑二进制序列的普遍性,尽可能生成只匹配少量特定文件的模式用于 Yara。

例如一系列属于同一恶意软件家族的样本,选择多个文件:

通常来说在一分钟之内就可以完成 VTDIFF,结果会提供不同长度的字节序列:

每一个字节序列都可以通过 VirusTotal Grep 单独进行检索,以查看是否容易出现误报。

如何使用 VirusTotal Graph 通过图狩猎恶意软件

VirusTotal 将各种数据构建起关联,通过 VirusTotal Graph 可以深入了解 URL、Domain 与 IP 地址的关系。

以曾经数量庞大的 Emotet 为例:

Emotet 恶意样本作为一个 Dropper,带有恶意的宏代码,而且同文件有很多假借账单名义的文件名。

从关联关系上可以发现更多 Emotet 的网络侧基础设施。

以首个发现的 Dropper 恶意文档为起点,通过其通联的 C&C 域名(www.xianjiaopi.com)进行关联查询:

也可以通过 VirusTotal Intelligence 进一步进行关联检索:

最终可以构建出 Emotet 完整的图结构:

四种狩猎方式主要由 VirusTotal 官方此前对外演讲的 PPT、官方博客、官方文档整理而来,分别是 VirusTotal Intelligence、VirusTotal Grep、VirusTotal Yara 与VirusTotal Graph。这就构成了 VirusTotal 强大的狩猎能力,为全世界的安全分析人员提供了一个极佳的主动威胁狩猎工具。

VirusTotal 从当初的多引擎扫描结果,一路走来到现在,支持十余个沙盒、七十余个检测引擎,变成事实上的“金标准”。文章中有的截图是当年的界面截图,与现在的界面并不相同,但读者正好可以借此回顾 VirusTotal 是如何走到今天的,也可以回头看 VirusTotal 的权衡与取舍,为自己的研究指明方向。

声明:本文来自威胁棱镜,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。