写在前面:VirusTotal(以下简称VT)是恶意样本分析人员常用的分析平台,本文会详细介绍该平台的组成、功能及使用方法。以下介绍不会涉及到付费或者企业账户功能和关联项目。
VirusTotal介绍
基本介绍
wiki:
VirusTotal是由西班牙安全公司Hispasec Sistemas创建的网站。它于 2004 年 6 月推出,于 2012 年 9 月被 Google Inc. 收购。[1][2] VirusTotal的所有权于2018年1月转让给Alphabet Inc.的子公司Chronicle。[3]
VirusTotal 结合了许多防病毒软件,是一个在线扫描工具,用于检查您的防病毒)程序可能遗漏的病毒)。[4] 文件大小不超过 650 MB,可以上传到网站。[4] 防病毒软件供应商可能会在每次扫描时收到标记文件的副本,以改进其软件并扩展 VirusTotal 的功能。用户还可以扫描可疑 URL 并搜索 VirusTotal 的数据库。VirusTotal 使用 Cuckoo 沙盒分析恶意软件。VirusTotal 被 PC World 评为 2007 年 100 款最佳产品之一。
发送到 VirusTotal 的文件和 URL 将与防病毒软件供应商和安全公司共享,以帮助他们改进服务和产品。默认情况下,至少一个病毒扫描程序检测到发送到 VirusTotal 的任何文件或 URL 都将免费发送给所有其他扫描程序,包括那些未检测到该文件的扫描程序。此外,高级 VirusTotal 用户(主要是安全/反恶意软件公司/组织)可以访问进入商店的所有文件和 URL,以改进其安全产品和服务。
简单来说,VT是一个威胁分析平台,通过整合多检测引擎(包括安全厂商、沙箱)、关联各种检测规则(包括Suricata规则、YARA规则)和威胁框架(如ATT&CK和MBC项目),实现对具体样本和URL的威胁检测与情报关联,以帮助分析人员初步了解样本、分析研判告警。
VT的组成
前面说过,VT的功能很多,并且各种功能之间是相互关联的。所以为了帮助大家理清这些功能,笔者将VT平台分为以下三个组件:云沙箱、社区和高级扩展。其中:
-
云沙箱
:这部分是VT的主体,用来检测和分析用户上传的样本,给出详细的分析报告。 -
社区
:将用户和样本关联起来,借助社区成员的力量更全面的分析和处置威胁。 -
高级扩展
:一些扩展功能如VT Graph可视化、API调用、威胁狩猎、威胁情报等。
云沙箱介绍与报告解读
网址:https://www.virustotal.com/gui/home/upload
文档:https://docs.virustotal.com/
初始界面:
功能:分析可疑文件、域、IP 和 URL 以检测恶意软件和其他违规行为,并自动与安全社区共享。
点击上传文件,会得到详细的检测结果,下面具体介绍。
如上图,样本上传VT后会给出分析报告。该分析结果有六个不同的选项卡+一个固定的基本信息栏。下面一一介绍。
基本信息栏
如上图,基本信息栏
会给出该样本的一些基础信息,包括但不限于多引擎检测结果、社区评分、文件大小、修改时间、文件类型、样本标签
等。
在该栏右上角可以选择查看VT Graph
和API检测
。
其中前者是VirusTotal服务中的一项高级功能,它提供了一种可视化的方式来探索并理解VirusTotal庞大数据库中的文件、URL、域名、IP地址以及其他可观察对象之间的关联性。通过VirusTotal Graph,用户能够看到文件上传的历史记录、与其他文件或网络实体的链接,以及这些实体在时间和空间上的相互作用。这有助于构建攻击者行为的完整视图,并促进对复杂威胁环境的理解和响应。这里不再赘述,后续单独介绍。
后者是调用API在本地实现样本检测。后文单独介绍。
选项卡:DETECTION
这个部分主要介绍了几种与该样本关联的检测信息,包括:
YARA规则
、IDS规则
、沙箱检测
、安全供应商检测
,下面一一介绍。需要注意的是,YARA规则、IDS规则和沙箱检测结果需要加入社区才可以查看(也就是登录)。注:所有的关联引擎、沙箱、规则参见Contributors (virustotal.com)
首先是YARA规则
前面在分享恶意代码分析流程时有提到过,YARA规则允许开发者定义一种描述恶意软件特征的语言,这些特征可以包括字符串、二进制模式、整数序列、元字符等等,可以用于实际样本的检测。
如下图所示,VT在模块引入的是已知的开源情报,比如下面的几个github上的开源规则。
点击右边的View Ruleset
可以直接查看到该规则,如下图:
附加其中一共YARA的解读:
YARA规则以关键字开头,这里是rule表示是一条规则,后跟规则标识符,类似编程中的函数定义。
具体到该规则,第一部分是meta元数据,这部分不是必须的,也不参与具体规则的匹配,主要作用就是为规则添加一些描述信息。比如这里的描述、作者信息、参考、时间等。
第二部分是strings,也就是字符串定义,类似于函数中的变量。主要是通过标识符来定义该样本的一些特征信息。一般有三者类型,字符串、十六进制和正则表达式。这里用了前两种,主要定义了这个样本的一些字符信息,如使用的指令、落地的子文件名、开关域名等。
第三部分是condition,也就是判定条件,这部分是必须的,通过关联上字符串信息、导入模块等,判定该样本是否命中。比如这里:
- uint16(0) == 0x5a4d:MZ,可执行文件
- filesize < 10000KB:文件大小限制
- 1 of ($x) and 1 of ($s) or 3 of ($op*):至少有一个$x系列字符串和一个$s系列字符串匹配|或者至少有三个$op系列的二进制操作码序列匹配
YARA官方文档:https://yara.readthedocs.io/en/stable/gettingstarted.html
之后是IDS规则
IDS即入侵检测系统,该规则更多是从流量层面来检测。在VT中,也是将开源情报规则关联到此处,如下图中,WannaCry样本涉及的几条规则基本都是ETOpen规则集
。
可以点击右边按钮查看具体规则和匹配情况,选择其中一个看看:
如上图所示规则,action是alert即生成告警;Header是dns $HOME_NET any -> any any
,指出数据流信息;options是括号里面的内容,也是主要的匹配点。
options是由关键字和值组成的,具体可以参考官方文档,常用如下:
meta keywords | 作用 | 备注 | |
---|---|---|---|
msg:消息 | 提供有关规则和可能预警的文本信息 |
第一个关键字;必须在msg中转义以下字符: ; \ "
|
|
sid:规则id | 为每一个规则赋予id | sid在rev之前,两者都是所有关键字中的最后一个 | |
rev:版本 | 代表规则的版本 | 与sid组合出现 | |
gid:组id | 为不同的规则组提供另一个ID值 | Suricata默认使用gid 1,一般只影响告警显示 | |
classtype:类别 | 提供有关规则和警报分类的信息,一个短名称、一个长名称和一个优先级组成,在classification.config 中设置优先级,见下图。 |
在sid和rev之前,在其余关键字之后 | |
reference:参考 | 指向有关规则和规则试图解决的问题的信息所在的位置,为研究规则匹配原因的规则编写者和分析人员设计,在reference.config 中定义所有引用类型,见下图。 |
格式:reference: type, reference
|
|
priority: 优先级 | 带有一个强制数字值,该值的范围为1到255;优先权更高的规则将首先被检查。 | 比classtype 优先 |
|
metadata:元数据 | 允许将其他非功能信息添加到规则中, |
格式:键值对metadata: key value;
|
|
target: 目标 | 允许规则编写器指定警报的哪一侧是攻击的目标 | 格式:`target:[src_ip | dest_ip]` |
再之后是沙箱检测的结果
这部分也是关联到已知的一些沙箱产品,给出他们对该样本的威胁标签,如CAPE、腾讯哈勃等。
最后是多引擎检测结果
这部分会关联到很多安全厂商的检测引擎,给出这些引擎的检测结果,只有标签。如下图,阿里云、安天、百度等等。威胁标签格式大同小异,先是样本类型,之后跟着威胁类型、使用环境、名称等。
选项卡:DETAILS
这部分介绍该样本的详细信息,主要是一些静态文件信息。还是以WannaCry这个样本为例,看看该选项卡的模块组成。
第一个模块是Basic Properties,即基础属性信息
这部分主要介绍该文件的属性信息,如下图,包括不同类型的哈希值、文件类型、适用平台、架构信息、文件大小、加壳信息、资源节信息
等。
第二个模块是History,即历史信息
主要是给出该样本在VT中的时间信息,比如首次出现、首次提交、最后提交等。
第三个模块是Names,即文件名称
主要给出该样本在VT上传时不同的文件名
第四个模块是Signature info,即签名信息
这个模块给出文件的签名信息,显示未签名。
第五个模块是PE结构信息
包括编译器信息、文件头、节表、导入表、资源节、语言信息
等。可以使用一些PE工具,如PEditor、RH、PEView
等查看更加详细的信息。
选项卡:RELATIONS
这个部分主要介绍样本与威胁情报的关联信息,如IP、域名、其他样本
等,可以与VT Graph结合查看。
选项卡:BEHAVIOR
这个部分主要给出该样本的动态行为信息与后续处置,该信息来源于VT关联的沙箱产品,如下图,本质上是整合各个沙箱的检测报告,并与ATT&CK框架、各种检测规则
关联。
注:关于沙箱的具体信息参考https://docs.virustotal.com/docs/in-house-sandboxes
沙箱的检出结果依次是:检测、ATT&CK战术、IDS规则、Sigma规则、文件操作、网络通信
。
可以在上图选择需要的整合的沙箱产品,后续整合信息会实时发生变化。下面继续向下介绍,如何解读行为检测结果。从以下十四个部分进行具体介绍。
第一部分是活动总结与标签
活动总结就是将所有沙箱的分析报告整合,按照类别归纳。
行为标签则是总结了几个比较典型的恶意行为,如:
- checks-network-adapters = 检查网络适配器
- checks-user-input = 检查用户输入
- detect-debug-environment = 检查调试环境
- long-sleeps = 长时间睡眠
- runtime-modules = 模块运行
第二部分是检测标识
这部分给出了一些适配沙箱对该样本的检测标识,与第一部分的Detections关联,如:
- MALWARE:恶意软件
- RANSON:勒索
第三部分是ATT&CK的关联信息
这部分主要将检测结果与ATT&CK框架的战术、技术关联。(关于ATT&CK框架的信息可以参见笔者的系列文章)
第四部分是恶意软件行为目录树
这部分内容主要是MBC项目的关联信息,恶意软件行为目录 (MBC) 是恶意软件目标和行为的目录,旨在支持面向恶意软件分析的用例,例如标记、相似性分析和标准化报告。这个项目与ATT&CK是类似的,但是MBC 中不会重复 ATT&CK 内容,MBC 用户在捕获恶意软件行为时会引用 ATT&CK。
MBC和ATT&CK是互补的,都可以参考,更加全面。
参考:https://github.com/MBCProject/mbc-markdown/tree/main
第五部分是Capabilities,即恶意功能
这部分主要介绍恶意软件的特定功能和特征,可能使恶意软件能够在目标计算机、网络或设备上执行各种未经授权的有害活动。
比如通信、反分析、主机交互、负载代码、数据操作、持久化、攻击执行
等。
注:第三四五部分的内容是类似的,都是通过一定的标准将恶意行为、技术分类,不用过于纠结使用哪个。
第六部分是IDS规则关联信息
这部分给出一些沙箱关联的IDS规则信息,并将其进行整合。与第一个选项卡中的内容是一致的。
第七部分是网络通信信息
这部分主要介绍该样本在动态执行过程中与外界通信的情况,包括HTTP请求、DNS解析、IP流量、内存中的URL和IP
等。
第八部分是行为相似性哈希
这部分主要给出不同沙箱中,对类似实体进行集群的标识符。
第九部分是文件操作信息
这部分主要从文件操作方面归类整个样本的行为,包括但不限于文件打开、文件写入、文件删除、文件复制、文件修改、文件丢弃
等操作
第十部分是注册表操作信息
这部分主要从注册表操作方面归类整个样本的行为,包括但不限于打开注册表项、设置注册表项、删除注册表项
等操作。
第十一部分是进程和服务信息
这部分主要从进程和服务方面归类整个样本的行为,包括但不限于进程创建、命令执行、进程注入、进程终止、搜索、服务创建、服务打开、进程树
等。
第十二部分是同步机制信息
这部分主要从同步机制归类整个样本的相关行为,包括但不限于互斥量创建、打开
等。
第十三部分是模块加载信息
这部分主要从模块加载方面归类整个样本的相关行为,主要是列出样本执行过程中动态链接的DLL文件信息。
第十四部分是可疑操作信息
这部分内容显示一些可疑信息,比如在执行所研究的文件时,它执行了以下值得强调的操作,这些操作涉及可疑调用
、加密或编码
的使用、显示对话框
等。
选项卡:COMMUNITY
这个选项卡介绍该样本在社区中的关联信息。与前面一样,也是分部分介绍。
第一部分:IOC集合
此样本出现在以下社区提供的loC集合中,这里的IOC一般是指文件哈希、域名、IP
等。
可以点击查看更加细致的信息:
第二部分是Graph关联
这部分与Graph工具关联,给出相关的可视化信息。
第三部分是评论信息
关联到该样本的社区人员评论。
社区建设与使用
VT:打击恶意软件需要密切合作。所有参与最终用户安全的行为者必须共同努力,并决心应对当今压倒性的恶意软件生产率、日益严重的误报问题和假报的永久威胁。
加入社区后,将获得 VirusTotal 公共 API 密钥
,可以编写简单的脚本来自动执行 VirusTotal 扫描。
VirusTotal 社区可让成员对文件和网站进行评分和评论。评论可以是任何性质的:缓解措施、在野位置、逆向工程报告等。
社区成员的评论和投票会创建一个声誉分数
,以衡量社区生成的信息的有用性和准确性。参见云沙箱介绍中的最后一个选项卡。
对文件和 URL 进行评论
在每个 URL 或文件扫描报告的“社区”选项卡中,将找到一个专门用于评论的部分。
备注:评论是特定于文件/URL 的,而不是特定于报告的。换句话说,评论不会与给定的时刻联系在一起,评论将出现在将来提交同一文件或 URL 返回的报告中。
关于评论的一些使用方法:
- 描述给定恶意软件的传播或传播策略,需要包含下载示例的链接。(引用恶意内容时,请将 http 前缀替换为 hxxp。)
- 提供清除程序,以从您的系统中删除恶意软件样本(或者更好的是,它所属的家族)。
- 提供某些恶意样本的逆向工程报告。
- 将误报通知其他人。
- 关联到其他成员时,记得 @user_nickname
评论的一些标记使用:
文件和 URL 评论允许自定义标记。若要创建自定义标记,请在评论中在标记词前面加上“#”符号。
- #malware:恶意文件。
- #goodware:无害文件。
- #grayware:以令人讨厌或不受欢迎的方式运行的文件,但不如恶意软件严重或麻烦。
- #spam-link:位于垃圾邮件中作为链接传输的垃圾邮件链接或 URL 中的文件。
- #spam 附件:在垃圾邮件中作为附件传输的文件。
- #p2p 下载:从 P2P 网络下载的恶意软件样本。
- #im 传播:通过即时消息传播的恶意软件样本
- #network 蠕虫:通过利用某些漏洞利用(例如 Sasser 蠕虫使用的 MS04-011)、网络共享或类似方法在网络中传播的蠕虫。
- #drive 下载:某人授权但不了解后果的下载(例如,安装未知或伪造的可执行程序、ActiveX 组件或 Java 小程序的下载)。在人们不知情的情况下发生的任何下载。下载间谍软件、计算机病毒或任何类型的恶意软件,这些都是在人们不知情的情况下发生的。
- #disinfection:从正在呈现报告的恶意软件中清除计算机的说明。
- #malicious:用于 URL 注释,表示 URL 是恶意的。
- #benign:用于 URL 注释,声明 URL 是无害的。
- #phishing-site:用于 URL 评论,表示正在呈现报告的网站是网络钓鱼诈骗的一部分。
- #browser-exploit:用于 URL 评论,指出正在呈现报告的网站利用浏览器在受害者不知情的情况下安装恶意软件。
Collection的创建与使用
文档:https://blog.virustotal.com/2022/09/vt-collections-citius-altius-fortius.html
可以在如下地方创建
Colection是一个实时报告,其中包含标题、一组 IoC(文件哈希、URL、域和 IP 地址)和可选说明。
几个高级扩展功能的介绍
上文介绍了VT作为一个云沙箱时的具体使用,包含分析报告的解读。下面介绍几个高级的扩展功能,分别是
- 威胁情报:结合 Google 和 Facebook 并将其应用于恶意软件领域
- 威胁狩猎:将 YARA 的魔力应用于 VirusTotal 的实时样本流,并根据历史数据进行及时回溯,以跟踪某些威胁参与者、您感兴趣的恶意软件家族的演变,并自动生成 IoC 以保护您的组织。
- VT Graph:直观地探索 VirusTotal 的数据集,发现威胁共性,了解正在进行的调查中遇到的文件、URL、域、IP 地址和其他项目之间的关系。
- API v3:https://docs.virustotal.com/reference/overview
注:只有后面两个即VT Graph和API
可以直接使用简化版,其他需要申请。所以下面主要介绍免费的两个=-=
VT Graph介绍与使用
基本介绍
VirusTotal Graph 是建立在 VirusTotal 数据集之上的可视化工具。它了解正在进行的调查中遇到的文件、URL、域、IP 地址和其他项目之间的关系,可以智能地对图表中的任何恶意软件.工件进行透视,并将个人的发现综合到可以与同事共享的威胁图谱中。类似下图:
如何访问VT Graph
方法1:通过网址-https://www.virustotal.com/graph/访问,在该界面可以新建Graph视图,也可以查看其他视图。
方法2:具体样本定点进入,如下图,在云沙箱的分析界面,可以点击右上角的More查看该样本关联的Graph。
API调用
参考文档:https://docs.virustotal.com/reference/graphs
视图介绍
打开一个Graph后,可以进入到具体的视图界面。该界面可以分为三个部分:菜单栏
、节点信息
、可视化视图
。
菜单栏信息:
- File:进行图形管理,包括打开、保存、下载、重命名视图
- Edit:与图形的所有节点进行交互,包括撤销、固定所有节点、添加新节点等
- Export:导出视图,可以选择的格式包括JSON、CSV、Collection等
- View:管理视图的可见信息,包括标签的显示、不同类型节点管理
- Secection:与图的选定节点进行交互,类比下面介绍的操作按钮。
- Visualization:不同的可视化,如图、树等。
节点信息:
可视化视图是由一个个节点通过箭头关联形成的,每一个节点都是一个实体,点击后,可以在左侧的节点信息栏查看该节点的具体信息,如下图。
主要从前往后依次介绍下操作按钮,其他部分的信息在上文已经介绍过了。
-
编辑标签:允许编辑节点标签。要删除标签,只需将其留空即可。
-
添加节点:将新的连接节点添加到所选节点文件、域、Url、ip等节点。
- 中心节点:将节点置于屏幕的中心,用来快速定位。
- 固定\取消固定:默认情况下,可以拖动节点,但单击后它们将返回到稳定的图形表示形式。
- 选择子节点:选择作为所选节点的子节点的节点列表
- 选择父节点:选择作为所选节点的父节点的节点列表
- 删除:删除选定节点及其边。
VT API介绍与使用
API概述
VirusTotal 的 API 允许上传和扫描文件、提交和扫描 URL、访问完成的扫描报告以及对 URL 和示例进行自动注释,而无需使用 HTML 网站界面。换句话说,它允许构建简单的脚本来访问 VirusTotal 生成的信息。
VT API 遵循 REST 原则,并具有可预测的、面向资源的 URL。它使用 JSON 进行请求和响应。
可以实现的基本功能如下:(包括但不限于)
- 上传文件进行分析:集成 70+ 防病毒产品、10+ 动态分析沙箱和很多其他安全工具分析上传的文件,以生成威胁评分和相关上下文。
-
提供哈希获取文件报告:给定
{md5, sha1, sha256}
哈希值,检索相关分析报告。 - 扫描URL并获取URL分析报告:给定一个 URL,检索相关分析报告。
- 获取IP地址报告:给定一个 IP 地址,检索相关分析报告
更多功能参考官方API文档:https://docs.virustotal.com/reference/overview
API Key获取
首先需要注册VT社区账户,链接:https://www.virustotal.com/gui/join-us
注册完毕后可以使用通用的API,但是高级API需要申请。具体参见下API对比
。
API Key获取:如下图,可以在菜单栏
中查看并获取API Key
公共API与高级API
加入社区可以使用通用API,其限制如下:
- 限制为每天 500 个请求,每分钟最多 4 个请求。
- 不得用于商业产品或服务。
- 不得用于不提供新文件的业务工作流。
- 不能注册多个帐户来克服上述限制。
相应的,高级API没有上述限制,并且包含更多的功能,比如:
- 自动安全(警报/事件)扩充,从而实现警报分类、威胁情报编排和主动威胁搜寻。
- 对任何类型的可观察威胁活动进行全面表征:文件、哈希、URL、域、IP、SSL 证书等。
- 与 SIEM、SOAR、EDR 或 AV 集成,而不是单纯检测。
- 下载文件以离线、在内部沙箱、分析管道等中进行进一步研究和解剖。
- 自动引入 YARA 规则,以构建自定义威胁源。
可以通过以下链接申请升级到高级API。
API响应与关键组件
VirusTotal API 中的大多数端点都以 JSON 格式返回响应。除非另有说明,否则成功请求的响应将返回 200 HTTP 状态代码,并采用以下格式:{ "data": <response data> }
下面就介绍下VT API在响应时的一些基本知识,包括错误代码、三个关键组件。
首先是错误信息,即4xx和5xx
,有一个表格:
HTTPcode | Error code | 描述 |
---|---|---|
400 | BadRequestError | API 请求无效或格式不正确。该消息通常会提供有关请求无效原因的详细信息。 |
400 | InvalidArgumentError | 提供的某些参数不正确。 |
400 | NotAvailableYet | 该资源尚不可用,但稍后将可用。 |
400 | 非选择性内容查询错误 | 内容搜索查询的选择性出现错误。 |
400 | UnselectiveContentQueryError | 不支持的内容搜索查询。 |
401 | AuthenticationRequiredError | 该操作需要经过身份验证的用户。验证您是否已提供 API 密钥。 |
401 | UserNotActiveError | 用户帐户未处于活动状态。确保您按照发送到电子邮件的链接正确激活了您的帐户。 |
401 | WrongCredentialsError | 提供的 API 密钥不正确。 |
403 | ForbiddenError | 不能执行请求的操作。 |
404 | NotFoundError | 未找到请求的资源。 |
409 | AlreadyExistsError | 资源已存在。 |
424 | FailedDependencyError | 该请求依赖于另一个请求,但该请求失败。 |
429 | QuotaExceededError | 您已超出其中一个配额(分钟、每日或每月)。每日配额每天 00:00 UTC 重置。 VirusTotal Monitor 帐户上的磁盘空间和/或文件数量可能已用完。 |
429 | TooManyRequestsError | 请求过多。 |
503 | TransientError | 暂时性服务器错误。重试可能会起作用。 |
504 | DeadlineExceededError | 操作时间过长,无法完成。 |
错误信息以下面的格式给出:
{
"error": {
"code": "<error code>",
"message": "<a message describing the error>"
}
}
VT API的三个关键组件,整个API的使用都是围绕这三个组件展开的,它们分别是: objects, collections 和relationships
,以下称呼为对象、集合和关系
。
- 对象是可以使用 API 检索或操作的任何项目,如文件、URL、域名等。
- 集合是一组对象,集合中的对象通常属于同一类型,某些 API 操作是对对象执行的,而其他一些 API 操作是对集合执行的。
- 关系是对象之间的联系,例如URL 可以与文件相关,因为文件是从 URL 下载的.
如何学习
学习使用VT API,推荐直接查看官方文档,有各个集合、不同对象的具体操作,链接如下:https://docs.virustotal.com/reference/
如下图,可以查看某操作对应的具体URL、并且在右侧可以选择不同语言的命令示例:
API集成
VT API提供了很多可以集成到不同平台的工具,可以根据需求具体学习使用。
- python库:https://github.com/VirusTotal/vt-py
- 命令行执行:https://github.com/VirusTotal/vt-cli
- Golang库:https://github.com/VirusTotal/vt-go
写在最后:本文较为全面的介绍了VT这一威胁分析平台的使用,希望对你有所帮助,但请注意,沙箱的分析只是样本分析的一种辅助手段,不能一味依赖,最终分析结果还是要落到源码上去。